diff options
| author | Yukihiro Matz Matsumoto <[email protected]> | 2012-12-21 23:55:17 +0900 |
|---|---|---|
| committer | Yukihiro Matz Matsumoto <[email protected]> | 2012-12-21 23:55:17 +0900 |
| commit | 6a16cad1bf8925498f655e4cac491aa95dbc2963 (patch) | |
| tree | ece08fd43e9a0403042e401e37789ec05243d94c | |
| parent | 40ea525d1e5a94771a5b1e57f001267dfe8da046 (diff) | |
| download | mruby-6a16cad1bf8925498f655e4cac491aa95dbc2963.tar.gz mruby-6a16cad1bf8925498f655e4cac491aa95dbc2963.zip | |
should save ciidx in exception raised from VM
| -rw-r--r-- | src/vm.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -1151,8 +1151,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) int eidx; L_RAISE: + ci = mrb->ci; mrb_obj_iv_ifnone(mrb, mrb->exc, mrb_intern(mrb, "lastpc"), mrb_voidp_value(pc)); - ci = mrb->ci; + mrb_obj_iv_set(mrb, mrb->exc, mrb_intern(mrb, "ciidx"), mrb_fixnum_value(ci - mrb->cibase)); eidx = ci->eidx; if (ci == mrb->cibase) { if (ci->ridx == 0) goto L_STOP; @@ -1198,11 +1199,12 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) localjump_error(mrb, "return"); goto L_RAISE; } - ci = mrb->ci = mrb->cibase + e->cioff; + ci = mrb->cibase + e->cioff; if (ci == mrb->cibase) { localjump_error(mrb, "return"); goto L_RAISE; } + mrb->ci = ci; break; } case OP_R_NORMAL: |
