From da637cac4a3520f7d6d9a69b392be4309f36ef5b Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Sat, 20 Oct 2012 03:30:58 +0900 Subject: should handle break in rescue --- src/codegen.c | 3 +++ src/vm.c | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/codegen.c b/src/codegen.c index d42a099c8..19a5835fa 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -2146,6 +2146,9 @@ loop_break(codegen_scope *s, node *tree) genop_peep(s, MKOP_A(OP_POPERR, 1), NOVAL); loop = loop->prev; } + while (loop->type == LOOP_RESCUE) { + loop = loop->prev; + } if (loop->type == LOOP_NORMAL) { int tmp; diff --git a/src/vm.c b/src/vm.c index 14efb38f8..a779565be 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1134,7 +1134,6 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) ci = mrb->ci; break; case OP_R_BREAK: - if (!proc->env) goto NORMAL_RETURN; if (proc->env->cioff < 0) { localjump_error(mrb, "break"); goto L_RAISE; -- cgit v1.2.3