From c8fee08a3d677b6980efacb3ea1347910e1af6ff Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 19 Oct 2016 08:02:17 +0000 Subject: [PATCH] vm_insnhelper.c: refinements with send * vm_insnhelper.c (vm_call_opt_send): enable refinements with Kernel#send and BasicObject#__send__. [Feature #11476] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56450 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ test/ruby/test_refinement.rb | 4 ++-- vm_insnhelper.c | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index d5cb49f877..2705ec53cf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Oct 19 17:02:15 2016 Nobuyoshi Nakada + + * vm_insnhelper.c (vm_call_opt_send): enable refinements with + Kernel#send and BasicObject#__send__. [Feature #11476] + Wed Oct 19 14:22:49 2016 Nobuyoshi Nakada * basictest/runner.rb: do not clobber the option by --run-opt with diff --git a/test/ruby/test_refinement.rb b/test/ruby/test_refinement.rb index 2ecbf8edf0..5e881edb91 100644 --- a/test/ruby/test_refinement.rb +++ b/test/ruby/test_refinement.rb @@ -171,10 +171,10 @@ class TestRefinement < Test::Unit::TestCase end end - def test_send_should_not_use_refinements + def test_send_should_use_refinements foo = Foo.new assert_raise(NoMethodError) { foo.send(:z) } - assert_raise(NoMethodError) { FooExtClient.send_z_on(foo) } + assert_equal("FooExt#z", FooExtClient.send_z_on(foo)) assert_raise(NoMethodError) { foo.send(:z) } assert_equal(true, RespondTo::Sub.new.respond_to?(:foo)) diff --git a/vm_insnhelper.c b/vm_insnhelper.c index d9c2087243..935e733ca5 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -1956,7 +1956,7 @@ vm_call_opt_send(rb_thread_t *th, rb_control_frame_t *reg_cfp, struct rb_calling DEC_SP(1); } - cc->me = rb_callable_method_entry_without_refinements(CLASS_OF(calling->recv), ci->mid); + cc->me = rb_callable_method_entry_with_refinements(CLASS_OF(calling->recv), ci->mid); ci->flag = VM_CALL_FCALL | VM_CALL_OPT_SEND; return vm_call_method(th, reg_cfp, calling, ci, cc); }