diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-05-23 15:24:31 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-05-23 15:24:31 +0900 |
| commit | 76ddf86c72ccefefbeb2cd5dcf78c8365b1a2bcc (patch) | |
| tree | 60f2dda2c46002f6592013926a9a487d2fc68252 /src/vm.c | |
| parent | 93d710117df22f99c2fd60632a77202a745a2b4a (diff) | |
| download | mruby-76ddf86c72ccefefbeb2cd5dcf78c8365b1a2bcc.tar.gz mruby-76ddf86c72ccefefbeb2cd5dcf78c8365b1a2bcc.zip | |
manage fiber status (create|running|resumed|terminated)
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -1301,7 +1301,14 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) localjump_error(mrb, LOCALJUMP_ERROR_RETURN); goto L_RAISE; } - mrb->c = mrb->c->prev; /* automatic yield at the end */ + if (mrb->c->prev->ci == mrb->c->prev->cibase) { + mrb_value exc = mrb_exc_new3(mrb, E_RUNTIME_ERROR, mrb_str_new(mrb, "double resume", 13)); + mrb->exc = mrb_obj_ptr(exc); + goto L_RAISE; + } + /* automatic yield at the end */ + mrb->c->status = MRB_FIBER_TERMINATED; + mrb->c = mrb->c->prev; } ci = mrb->c->ci; break; |
