diff options
Diffstat (limited to 'src/task.moon')
| -rw-r--r-- | src/task.moon | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/task.moon b/src/task.moon new file mode 100644 index 0000000..342255e --- /dev/null +++ b/src/task.moon @@ -0,0 +1,25 @@ +task = {} +tasks = {} + +task.add = (co) -> + tasks[co] = true + +task.pump = () -> + for task, _ in pairs tasks + if coroutine.status(task) ~= "dead" + succ, err = coroutine.resume(task) + if not succ + error(debug.traceback(task, err)) + else + tasks[task] = nil + +task.await = (co) -> + if tasks[co] + coroutine.yield! + +task.node = am.group! +task.node\action(() -> + task.pump! +) + +task |
