Coroutine Concepts
Resume Step
Each resume advances paused work to its next yield point.
resume
Think of `resume` as asking the paused work to run until it reaches the next yield.
Resume Step
resume_step.lua
Replay: real traced execution (multi-file project)
local resumes = 2
local step = 0
local status = "suspended"
for _ = 1, resumes do
step = step + 1
status = "yielded"
end
print("resumes=" .. resumes)
print("step=" .. step)
print("status=" .. status)
local resumes = 1
local step = 0
local status = "suspended"
for _ = 1, resumes do
step = step + 1
status = "yielded"
end
print("resumes=" .. resumes)
print("step=" .. step)
print("status=" .. status)
local resumes = 3
local step = 0
local status = "suspended"
for _ = 1, resumes do
step = step + 1
status = "yielded"
end
print("resumes=" .. resumes)
print("step=" .. step)
print("status=" .. status)
resumes ← 2, step ← 0, status ← suspended
1local resumes→ 2 = 2 --@resumes=1, 32local step→ 0 = 03local status→ suspended = "suspended"step ← 1, status ← yielded
pass 1 of 25for _1 = 1, resumes2 do6 step→ 1 = step + 17 status→ yielded = "yielded"8endstep ← 2, status ← yielded
pass 2 of 25for _2 = 1, resumes2 do6 step→ 2 = step + 17 status→ yielded = "yielded"8endprint("resumes=" .. resumes)
10print("resumes=" .. resumes2)11print("step=" .. step2)12print("status=" .. statusyielded)outputresumes=2 step=2 status=yielded
resumes ← 1, step ← 0, status ← suspended
1local resumes→ 1 = 12local step→ 0 = 03local status→ suspended = "suspended"step ← 1, status ← yielded
5for _1 = 1, resumes1 do6 step→ 1 = step + 17 status→ yielded = "yielded"8endprint("resumes=" .. resumes)
10print("resumes=" .. resumes1)11print("step=" .. step1)12print("status=" .. statusyielded)outputresumes=1 step=1 status=yielded
resumes ← 3, step ← 0, status ← suspended
1local resumes→ 3 = 32local step→ 0 = 03local status→ suspended = "suspended"step ← 1, status ← yielded
pass 1 of 35for _1 = 1, resumes3 do6 step→ 1 = step + 17 status→ yielded = "yielded"8endAll 3 passes — pass 1 is the card above pass _stepstatus1 1 0 → 1 yielded 2 2 1 → 2 yielded 3 3 2 → 3 yielded print("resumes=" .. resumes)
10print("resumes=" .. resumes3)11print("step=" .. step3)12print("status=" .. statusyielded)outputresumes=3 step=3 status=yielded