summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/vm.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/vm.c b/src/vm.c
index 7d40d1290..ffdd2e5dd 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -955,7 +955,7 @@ mrb_context_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int
if (!ci->target_class) { /* return from context modifying method (resume/yield) */
if (!MRB_PROC_CFUNC_P(ci[-1].proc)) {
proc = ci[-1].proc;
- irep = ci[-1].proc->body.irep;
+ irep = proc->body.irep;
pool = irep->pool;
syms = irep->syms;
}
@@ -1359,6 +1359,13 @@ mrb_context_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int
localjump_error(mrb, LOCALJUMP_ERROR_BREAK);
goto L_RAISE;
}
+ /* break from fiber block */
+ if (mrb->c->ci == mrb->c->cibase && mrb->c->ci->pc) {
+ struct mrb_context *c = mrb->c;
+
+ mrb->c = c->prev;
+ c->prev = NULL;
+ }
ci = mrb->c->ci = mrb->c->cibase + proc->env->cioff + 1;
break;
default: