diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-08-25 19:52:53 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-08-25 19:52:53 -0700 |
| commit | 489b975877bb0f2416543ee954fc4ee4ad6a4622 (patch) | |
| tree | 883d7c8bb22d5180f724c5a30b70a1a7e3d0c83b | |
| parent | a2b62a649d4c439ae0a69df27590591331e83778 (diff) | |
| parent | 138acc774ad2cb262825692505f77c688345b27b (diff) | |
| download | mruby-489b975877bb0f2416543ee954fc4ee4ad6a4622.tar.gz mruby-489b975877bb0f2416543ee954fc4ee4ad6a4622.zip | |
Merge pull request #439 from masamitsu-murase/modify_ci_nregs_in_yield
ci->nregs for ruby proc.
| -rw-r--r-- | src/vm.c | 14 |
1 files changed, 12 insertions, 2 deletions
@@ -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; |
