diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-10-19 08:02:17 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-10-19 08:02:17 +0000 |
commit | c8fee08a3d677b6980efacb3ea1347910e1af6ff (patch) | |
tree | 78d96ea57643ff40a546811c9829f7ea395caa0c | |
parent | 79d49d1a7004a1e461e9b4f239eed1d201ed9d51 (diff) | |
download | ruby-c8fee08a3d677b6980efacb3ea1347910e1af6ff.tar.gz |
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
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | test/ruby/test_refinement.rb | 4 | ||||
-rw-r--r-- | vm_insnhelper.c | 2 |
3 files changed, 8 insertions, 3 deletions
@@ -1,3 +1,8 @@ +Wed Oct 19 17:02:15 2016 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * 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 <nobu@ruby-lang.org> * 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); } |