From 138acc774ad2cb262825692505f77c688345b27b Mon Sep 17 00:00:00 2001 From: Masamitsu MURASE Date: Sun, 26 Aug 2012 04:15:47 +0900 Subject: ci->nregs should be set to irep->nregs + 2 if proc is not a C function. --- src/vm.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/vm.c') 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; -- cgit v1.2.3