(65 lines)
1 #!/usr/bin/env nomsu -V7.0.02 ###3 This file defines the code that creates and manipulates coroutines5 use "core/metaprogramming"6 use "core/operators"7 use "core/control_flow"9 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~11 test:12 $fn =13 ->:14 yield 415 yield 516 repeat 3 times:17 yield 619 $nums = []20 for $ in (coroutine from $fn): $nums, add $21 assume ($nums == [4, 5, 6, 6, 6])22 $d = {.x = 0}23 $co =24 coroutine:25 $d.x += 126 yield 127 $d.x += 128 yield29 $d.x += 131 repeat while ((coroutine status of $co) != "dead"): resume $co32 assume $d.x == 333 $(co) = (coroutine: yield 5)34 [$ok, $val] = (co)35 assume ($ok == (yes))36 assume ($val == 5)37 $t = []38 $i = 139 for $ in40 coroutine:41 yield 442 yield 543 yield44 yield 645 ..:46 $t.$i = $47 $i += 148 assume ($t == [4, 5, nil, 6])49 $t = []50 for ($k = $) in51 coroutine:52 yield 453 yield 554 yield55 yield 656 ..:57 $t, add {.key = $k, .value = $}59 assume $t == [60 {.key = 1, .value = 4}, {.key = 2, .value = 5}, {.key = 3}, {.key = 4, .value = 6}61 ]62 (coroutine $body) parses as (coroutine from ->$body)63 external:64 ($ is a dead coroutine) means65 ((lua type of $) == "thread") and ((coroutine status of $) == "dead")