#!/usr/bin/env nomsu -V4.10.12.7 # This file defines the code that creates and manipulates coroutines use "core/metaprogramming.nom" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ test: %nums = [] %co = (..) coroutine: -> 4 -> 5 repeat 3 times: -> 6 for % in coroutine %co: %nums::add % assume (%nums == [4, 5, 6, 6, 6]) or barf "Coroutine iteration failed" [coroutine %body, generator %body] all compile to "\ ..(function() \(%body as lua) end)" (-> %) compiles to "coroutine.yield(true, \((% as lua expr) if % else "nil"))" (for % in coroutine %co %body) compiles to "\ ..for _junk,\(% as lua expr) in coroutine.wrap(\(%co as lua expr)) do \(%body as lua) end"