summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorMasamitsu MURASE <[email protected]>2012-08-26 04:15:47 +0900
committerMasamitsu MURASE <[email protected]>2012-08-26 04:15:47 +0900
commit138acc774ad2cb262825692505f77c688345b27b (patch)
treeec69015bbd703031cff7abd6eed692a23d008ef3 /src
parent15725eb4f6dc67de626fe5822d77312d7ab8994a (diff)
downloadmruby-138acc774ad2cb262825692505f77c688345b27b.tar.gz
mruby-138acc774ad2cb262825692505f77c688345b27b.zip
ci->nregs should be set to irep->nregs + 2 if proc is not a C function.
Diffstat (limited to 'src')
-rw-r--r--src/vm.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/vm.c b/src/vm.c
index 736b69b67..5cad42f6b 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -267,7 +267,12 @@ mrb_funcall_with_block(mrb_state *mrb, mrb_value self, mrb_sym mid, int argc, mr
ci->stackidx = mrb->stack - mrb->stbase;
ci->argc = argc;
ci->target_class = p->target_class;
- ci->nregs = argc + 2;
+ if (MRB_PROC_CFUNC_P(p)) {
+ ci->nregs = argc + 2;
+ }
+ else {
+ ci->nregs = p->body.irep->nregs + 2;
+ }
ci->acc = -1;
mrb->stack = mrb->stack + n;
@@ -318,7 +323,12 @@ mrb_yield_internal(mrb_state *mrb, mrb_value b, int argc, mrb_value *argv, mrb_v
ci->stackidx = mrb->stack - mrb->stbase;
ci->argc = argc;
ci->target_class = c;
- ci->nregs = argc + 2;
+ if (MRB_PROC_CFUNC_P(p)) {
+ ci->nregs = argc + 2;
+ }
+ else {
+ ci->nregs = p->body.irep->nregs + 2;
+ }
ci->acc = -1;
mrb->stack = mrb->stack + n;