diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-08-14 00:13:32 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-08-14 00:13:32 +0900 |
| commit | b822c0b35ef94f653749d06738ab471a08e45bfd (patch) | |
| tree | 59fd4ede4d7342991b18879f5f53321fb35733ad /src/vm.c | |
| parent | 6b015ec775571b2cbe96ae1545dd97991fbaf34a (diff) | |
| download | mruby-b822c0b35ef94f653749d06738ab471a08e45bfd.tar.gz mruby-b822c0b35ef94f653749d06738ab471a08e45bfd.zip | |
ci->target_class should point to ICLASS, not MODULE; close #1467
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -362,7 +362,7 @@ mrb_funcall_with_block(mrb_state *mrb, mrb_value self, mrb_sym mid, int argc, mr ci->proc = p; ci->stackidx = mrb->c->stack - mrb->c->stbase; ci->argc = argc; - ci->target_class = p->target_class; + ci->target_class = c; if (MRB_PROC_CFUNC_P(p)) { ci->nregs = argc + 2; } @@ -1034,6 +1034,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) if (!m) { mid = mrb_intern2(mrb, "method_missing", 14); m = mrb_method_search_vm(mrb, &c, mid); + if (!m) { + printf("c=%p mid=%s\n", c, mrb_sym2name(mrb, ci->mid)); + } if (n == CALL_MAXARGS) { mrb_ary_unshift(mrb, regs[a+1], mrb_symbol_value(ci->mid)); } @@ -1054,7 +1057,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) else { ci->argc = n; } - ci->target_class = m->target_class; + ci->target_class = c; ci->pc = pc + 1; /* prepare stack */ @@ -1384,7 +1387,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) /* replace callinfo */ ci = mrb->c->ci; ci->mid = mid; - ci->target_class = m->target_class; + ci->target_class = c; if (n == CALL_MAXARGS) { ci->argc = -1; } |
