diff --git a/src/vm.c b/src/vm.c index 863e93f60..8e2d03f88 100644 --- a/src/vm.c +++ b/src/vm.c @@ -264,7 +264,7 @@ ecall(mrb_state *mrb, int i) p = mrb->c->ensure[i]; if (!p) return; - if (mrb->c->ci->eidx < i) + if (mrb->c->ci->eidx > i) mrb->c->ci->eidx = i; ci = cipush(mrb); ci->stackidx = mrb->c->stack - mrb->c->stbase; @@ -857,9 +857,10 @@ mrb_context_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int /* A A.times{ensure_pop().call} */ int n; int a = GETARG_A(i); + mrb_callinfo *ci = mrb->c->ci; - for (n=0; nc->ci->eidx); + for (n=0; neidx > ci[-1].eidx; n++) { + ecall(mrb, --ci->eidx); ARENA_RESTORE(mrb, ai); } NEXT;