summaryrefslogtreecommitdiff
path: root/vm_insnhelper.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-08-20 11:36:34 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-08-20 11:36:34 +0000
commitceece4650a1de6189f2705cbf8120f6679a1af8f (patch)
treea229595768c98c125e260ab1faabda9370807712 /vm_insnhelper.c
parentde83cb9b20f2fa6ee6bace04ff29462cedd02a6d (diff)
vm_insnhelper.c: iclass as klass in cfp
* vm_insnhelper.c (vm_call_method): follow iclasses as klass in cfp but not included modules. [ruby-core:47241] [Bug #6891] * vm_insnhelper.c (vm_call_bmethod): pass defined_class to follow proper ancestors. [ruby-core:47241] [Bug #6891] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36736 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r--vm_insnhelper.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index bb39b848cf..b774f1206f 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -466,7 +466,7 @@ vm_call_bmethod(rb_thread_t *th, VALUE recv, int argc, const VALUE *argv,
/* control block frame */
th->passed_me = me;
GetProcPtr(me->def->body.proc, proc);
- val = rb_vm_invoke_proc(th, proc, recv, argc, argv, blockptr);
+ val = vm_invoke_proc(th, proc, recv, defined_class, argc, argv, blockptr);
EXEC_EVENT_HOOK(th, RUBY_EVENT_RETURN, recv, me->called_id, me->klass);
@@ -655,7 +655,7 @@ vm_call_method(rb_thread_t *th, rb_control_frame_t *cfp,
MEMCPY(argv, cfp->sp - num, VALUE, num);
cfp->sp -= num + 1;
- val = rb_vm_invoke_proc(th, proc, proc->block.self, argc, argv, blockptr);
+ val = rb_vm_invoke_proc(th, proc, argc, argv, blockptr);
break;
}
default:
@@ -683,10 +683,6 @@ vm_call_method(rb_thread_t *th, rb_control_frame_t *cfp,
val = vm_method_missing(th, id, recv, num, blockptr, stat);
}
else if (!(flag & VM_CALL_OPT_SEND_BIT) && (me->flag & NOEX_MASK) & NOEX_PROTECTED) {
- if (RB_TYPE_P(defined_class, T_ICLASS)) {
- defined_class = RBASIC(defined_class)->klass;
- }
-
if (!rb_obj_is_kind_of(cfp->self, defined_class)) {
val = vm_method_missing(th, id, recv, num, blockptr, NOEX_PROTECTED);
}