diff --git a/src/module/scheduler.wren b/src/module/scheduler.wren index 857a659b..fc67d4cf 100644 --- a/src/module/scheduler.wren +++ b/src/module/scheduler.wren @@ -1,7 +1,5 @@ class Scheduler { static add(callable) { - if (__scheduled == null) __scheduled = [] - __scheduled.add(Fiber.new { callable.call() runNextScheduled_() @@ -20,14 +18,19 @@ class Scheduler { } static runNextScheduled_() { - if (__scheduled == null || __scheduled.isEmpty) { + if (__scheduled.isEmpty) { return Fiber.suspend() } else { return __scheduled.removeAt(0).transfer() } } + static start_() { + __scheduled = [] + captureMethods_() + } + foreign static captureMethods_() } -Scheduler.captureMethods_() +Scheduler.start_() diff --git a/src/module/scheduler.wren.inc b/src/module/scheduler.wren.inc index bd5ea7d3..28faea96 100644 --- a/src/module/scheduler.wren.inc +++ b/src/module/scheduler.wren.inc @@ -4,8 +4,6 @@ static const char* schedulerModuleSource = "class Scheduler {\n" " static add(callable) {\n" -" if (__scheduled == null) __scheduled = []\n" -"\n" " __scheduled.add(Fiber.new {\n" " callable.call()\n" " runNextScheduled_()\n" @@ -24,14 +22,19 @@ static const char* schedulerModuleSource = " }\n" "\n" " static runNextScheduled_() {\n" -" if (__scheduled == null || __scheduled.isEmpty) {\n" +" if (__scheduled.isEmpty) {\n" " return Fiber.suspend()\n" " } else {\n" " return __scheduled.removeAt(0).transfer()\n" " }\n" " }\n" "\n" +" static start_() { \n" +" __scheduled = [] \n" +" captureMethods_()\n" +" }\n" +" \n" " foreign static captureMethods_()\n" "}\n" "\n" -"Scheduler.captureMethods_()\n"; +"Scheduler.start_()\n";