From 44b28a83f853e39bd6377a51b75f02924aaeebf2 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Thu, 20 Sep 2012 18:26:51 +0900 Subject: OP_CALL for cfunc must restore callinfo; close #476 --- src/vm.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/vm.c b/src/vm.c index 75a4cd442..97c14e7aa 100644 --- a/src/vm.c +++ b/src/vm.c @@ -843,12 +843,17 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) /* prepare stack */ if (MRB_PROC_CFUNC_P(m)) { - mrb->stack[0] = m->body.func(mrb, recv); + recv = m->body.func(mrb, recv); mrb->arena_idx = ai; if (mrb->exc) goto L_RAISE; /* pop stackpos */ regs = mrb->stack = mrb->stbase + mrb->ci->stackidx; + regs[mrb->ci->acc] = recv; cipop(mrb); + irep = mrb->ci->proc->body.irep; + pool = irep->pool; + syms = irep->syms; + pc = mrb->ci->pc; NEXT; } else { -- cgit v1.2.3