From 6a16cad1bf8925498f655e4cac491aa95dbc2963 Mon Sep 17 00:00:00 2001 From: Yukihiro Matz Matsumoto Date: Fri, 21 Dec 2012 23:55:17 +0900 Subject: should save ciidx in exception raised from VM --- src/vm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/vm.c') diff --git a/src/vm.c b/src/vm.c index bce92c9d8..b84158d1d 100644 --- a/src/vm.c +++ b/src/vm.c @@ -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: -- cgit v1.2.3