summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-08-14 00:13:32 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-08-14 00:13:32 +0900
commitb822c0b35ef94f653749d06738ab471a08e45bfd (patch)
tree59fd4ede4d7342991b18879f5f53321fb35733ad
parent6b015ec775571b2cbe96ae1545dd97991fbaf34a (diff)
downloadmruby-b822c0b35ef94f653749d06738ab471a08e45bfd.tar.gz
mruby-b822c0b35ef94f653749d06738ab471a08e45bfd.zip
ci->target_class should point to ICLASS, not MODULE; close #1467
-rw-r--r--src/vm.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/vm.c b/src/vm.c
index 4d99ad413..3a149258f 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -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;
}