diff options
author | olpc user <olpc@xo-5d-f7-86.localdomain> | 2019-12-09 07:28:10 -0800 |
---|---|---|
committer | olpc user <olpc@xo-5d-f7-86.localdomain> | 2019-12-09 07:28:10 -0800 |
commit | 12793ac154b8c9b2e9bb8869cb72bbc1a438dc3d (patch) | |
tree | a350f3f0f7aaba880a3a80859d3050be887d9c31 /starts/meaning-vm/level-2 | |
parent | e6f2b95fb543b535b1914bd4954e240dbd724275 (diff) | |
download | standingwithresilience-12793ac154b8c9b2e9bb8869cb72bbc1a438dc3d.tar.gz standingwithresilience-12793ac154b8c9b2e9bb8869cb72bbc1a438dc3d.zip |
pass context to habits specifically
Diffstat (limited to 'starts/meaning-vm/level-2')
-rw-r--r-- | starts/meaning-vm/level-2/funcs.cpp | 4 | ||||
-rw-r--r-- | starts/meaning-vm/level-2/funcs.hpp | 2 | ||||
-rw-r--r-- | starts/meaning-vm/level-2/sugar.hpp | 5 |
3 files changed, 5 insertions, 6 deletions
diff --git a/starts/meaning-vm/level-2/funcs.cpp b/starts/meaning-vm/level-2/funcs.cpp index b17d221..3c34c41 100644 --- a/starts/meaning-vm/level-2/funcs.cpp +++ b/starts/meaning-vm/level-2/funcs.cpp @@ -17,7 +17,7 @@ ref context() return ctx; } -ref makehabit(ref name, std::initializer_list<ref> argnames, std::function<void()> code) +ref makehabit(ref name, std::initializer_list<ref> argnames, std::function<void(ref)> code) { ref habit = level1::a(habit, name); ref posarg = habit; @@ -46,7 +46,7 @@ ref dohabit(ref habit, std::initializer_list<ref> args) if (posarg.linked(next-positional-argument)) { throw std::invalid_argument("wrong number of arguments to habit"); } - ref ret = habit.fun<>()(); + ref ret = habit.fun<ref>()(ref::context()); posarg = habit; while (posarg.linked(next-positional-argument)) { posarg = posarg[next-positional-argument]; diff --git a/starts/meaning-vm/level-2/funcs.hpp b/starts/meaning-vm/level-2/funcs.hpp index 770ff0a..f32679c 100644 --- a/starts/meaning-vm/level-2/funcs.hpp +++ b/starts/meaning-vm/level-2/funcs.hpp @@ -9,7 +9,7 @@ namespace intellect { namespace level2 { ref context(); -ref makehabit(ref name, std::initializer_list<ref> argnames, std::function<void()> code); +ref makehabit(ref name, std::initializer_list<ref> argnames, std::function<void(ref)> code); ref dohabit(ref habit, std::initializer_list<ref> args); } diff --git a/starts/meaning-vm/level-2/sugar.hpp b/starts/meaning-vm/level-2/sugar.hpp index 3b0e2c0..e0dfcd9 100644 --- a/starts/meaning-vm/level-2/sugar.hpp +++ b/starts/meaning-vm/level-2/sugar.hpp @@ -24,15 +24,14 @@ intellect::level2::makehabit( \ name, \ {_macro_call(_macro_for_each_parens, _macro_habit_argnameref _macro_comma_remove_parens(argnametoklist))}, \ - (std::function<void()>) \ - [=]() \ + (std::function<void(ref)>) \ + [=](ref ctx) \ { \ { \ static int delay = (double(rand()) / RAND_MAX * 400000 + 200000); \ usleep(delay); \ } \ ref self = name; (void)self; \ - ref ctx = intellect::level2::ref::context(); (void) ctx;\ _macro_call(_macro_for_each_parens, _macro_habit_set_posarg _macro_comma_remove_parens(argnametoklist)); \ __VA_ARGS__ \ }); |