aboutsummaryrefslogtreecommitdiff
path: root/core/control_flow.nom
diff options
context:
space:
mode:
Diffstat (limited to 'core/control_flow.nom')
-rw-r--r--core/control_flow.nom18
1 files changed, 13 insertions, 5 deletions
diff --git a/core/control_flow.nom b/core/control_flow.nom
index 2816dfb..c3b5b2b 100644
--- a/core/control_flow.nom
+++ b/core/control_flow.nom
@@ -74,11 +74,9 @@ immediately
compile [%tree has subtree %subtree where %condition] to
Lua value ".."
(function()
- for \(%subtree as lua expr) in coroutine.wrap(function() nomsu:walk_tree(\(%tree as lua expr)) end) do
- if Types.is_node(\(%subtree as lua expr)) then
- if \(%condition as lua expr) then
- return true;
- end
+ for \(%subtree as lua expr) in coroutine.wrap(function() \(%tree as lua expr):map(coroutine.yield) end) do
+ if \(%condition as lua expr) then
+ return true;
end
end
return false;
@@ -431,3 +429,13 @@ immediately
\(%body as lua statements)
end)()
+# Coroutines:
+immediately
+ compile [values %body, coroutine %body, generator %body] to
+ Lua value ".."
+ (function()
+ \(%body as lua statements)
+ end)
+ compile [->] to: Lua "coroutine.yield(true);"
+ compile [-> %] to: Lua "coroutine.yield(true, \(% as lua expr));"
+ compile [-> %k = %v] to: Lua "coroutine.yield(\(%k as lua expr), \(%v as lua expr));"