aboutsummaryrefslogtreecommitdiff
path: root/src/task.moon
blob: 342255e0d0e30cfd8de4f63fe368fe19dd3972d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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