From edd9fc6e75e26e154ab6af5c504f3bd38ecbfdd3 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 20 Apr 2017 13:14:01 +0900 Subject: Do not raise an exception for living closure; ref #3359 --- src/vm.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/vm.c') diff --git a/src/vm.c b/src/vm.c index 041a5238c..dbdba6742 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1828,7 +1828,7 @@ RETRY_TRY_BLOCK: ci = mrb->c->ci; break; case OP_R_BREAK: - if (ci->acc < 0 || !proc->env || !MRB_ENV_STACK_SHARED_P(proc->env)) { + if (!proc->env || !MRB_ENV_STACK_SHARED_P(proc->env)) { mrb_value exc; L_BREAK_ERROR: @@ -1843,8 +1843,16 @@ RETRY_TRY_BLOCK: mrb->c = c->prev; c->prev = NULL; + ci = mrb->c->ci; + } + if (ci->acc < 0) { + while (eidx > mrb->c->ci[-1].eidx) { + ecall(mrb, --eidx); + } + mrb->c->vmexec = FALSE; + mrb->jmp = prev_jmp; + return v; } - ci = mrb->c->ci; mrb->c->stack = ci->stackent; mrb->c->ci = mrb->c->cibase + proc->env->cioff + 1; while (ci > mrb->c->ci) { -- cgit v1.2.3