From a6f26514a5494117b79730fbbacb7cb4ca35ba24 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 21 May 2014 09:00:30 +0900 Subject: break in blocks cannot cross C function boundaries; fix #2298 --- src/vm.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/vm.c b/src/vm.c index 503d2c929..516e6e2a0 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1481,7 +1481,15 @@ RETRY_TRY_BLOCK: mrb->c = c->prev; c->prev = NULL; } - ci = mrb->c->ci = mrb->c->cibase + proc->env->cioff + 1; + ci = mrb->c->ci; + mrb->c->ci = mrb->c->cibase + proc->env->cioff + 1; + while (ci > mrb->c->ci) { + if (ci[-1].acc == CI_ACC_SKIP) { + mrb->c->ci = ci; + break; + } + ci--; + } break; default: /* cannot happen */ -- cgit v1.2.3