diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-09-20 18:26:51 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-09-20 18:26:51 +0900 |
| commit | 44b28a83f853e39bd6377a51b75f02924aaeebf2 (patch) | |
| tree | 3e12ae288993ceee6c1356b1b05f291f4721a355 | |
| parent | 4bf51cdd420aee2b40ef0a48fa798da0c82db726 (diff) | |
| download | mruby-44b28a83f853e39bd6377a51b75f02924aaeebf2.tar.gz mruby-44b28a83f853e39bd6377a51b75f02924aaeebf2.zip | |
OP_CALL for cfunc must restore callinfo; close #476
| -rw-r--r-- | src/vm.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -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 { |
