summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-10-20 03:30:58 +0900
committerYukihiro Matsumoto <[email protected]>2012-10-20 03:30:58 +0900
commitda637cac4a3520f7d6d9a69b392be4309f36ef5b (patch)
tree234f5f983be59645d1446f233910c471605bc554
parentb4f6f964b424589fc0c9a3d695290695716d4ebe (diff)
downloadmruby-da637cac4a3520f7d6d9a69b392be4309f36ef5b.tar.gz
mruby-da637cac4a3520f7d6d9a69b392be4309f36ef5b.zip
should handle break in rescue
-rw-r--r--src/codegen.c3
-rw-r--r--src/vm.c1
2 files changed, 3 insertions, 1 deletions
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;