diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-10-19 23:18:57 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-10-19 23:18:57 +0900 |
| commit | 400a9d81019d987704c5890872d2599a3c60114c (patch) | |
| tree | ea8149706bf440e6284191724c14ffb9bb923a95 | |
| parent | 651e8b7e9c513cda100d88216d54ceeb93234f65 (diff) | |
| download | mruby-400a9d81019d987704c5890872d2599a3c60114c.tar.gz mruby-400a9d81019d987704c5890872d2599a3c60114c.zip | |
shuld handle return in rescue; close #497
| -rw-r--r-- | src/vm.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -1126,6 +1126,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) switch (GETARG_B(i)) { case OP_R_NORMAL: + NORMAL_RETURN: if (ci == mrb->cibase) { localjump_error(mrb, "return"); goto L_RAISE; @@ -1133,6 +1134,7 @@ 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; @@ -1140,6 +1142,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) ci = mrb->ci = mrb->cibase + proc->env->cioff + 1; break; case OP_R_RETURN: + if (!proc->env) goto NORMAL_RETURN; if (proc->env->cioff < 0) { localjump_error(mrb, "return"); goto L_RAISE; |
