From 0e23038a60d8656d8d92291efdeb418f9b166c09 Mon Sep 17 00:00:00 2001 From: h2so5 Date: Sun, 5 Jan 2014 16:22:58 +0900 Subject: execute ensure clause correctly without OP_EPOP --- src/vm.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src') 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; -- cgit v1.2.3