summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-08-02 04:00:42 +0900
committerYukihiro Matsumoto <[email protected]>2012-08-02 04:00:42 +0900
commit29d4eb6e200bf1d886d2737776fff9d615b67a73 (patch)
tree706b8187000ad7b7b50f268f1b1f4d57422125db
parent1549502079ed1b3b7bbae66e661e4a15a9a3f3d6 (diff)
downloadmruby-29d4eb6e200bf1d886d2737776fff9d615b67a73.tar.gz
mruby-29d4eb6e200bf1d886d2737776fff9d615b67a73.zip
stack pos should be adjusted for CFUNC OP_EXEC
-rw-r--r--src/vm.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/vm.c b/src/vm.c
index c04216c94..875a6d94f 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1551,6 +1551,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
ci->argc = 0;
ci->target_class = mrb_class_ptr(regs[GETARG_A(i)]);
+ /* prepare stack */
+ mrb->stack += a;
+
p = mrb_proc_new(mrb, mrb->irep[irep->idx+GETARG_Bx(i)]);
p->target_class = ci->target_class;
ci->proc = p;
@@ -1569,8 +1572,8 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
irep = p->body.irep;
pool = irep->pool;
syms = irep->syms;
- mrb->stack += a;
stack_extend(mrb, irep->nregs, 1);
+ ci->nregs = irep->nregs;
regs = mrb->stack;
pc = irep->iseq;
JUMP;