diff options
author | nagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-03-30 15:45:35 +0000 |
---|---|---|
committer | nagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-03-30 15:45:35 +0000 |
commit | ed22c21a8f4e0c98045efb6de245fba79ec7e961 (patch) | |
tree | 4c9b050836fbe039418abf682e58d1f7a1f21a41 | |
parent | 1b18735b4bda48b7705ae3fe5a63511ed75c9d58 (diff) |
merge revision(s) r49184: [Backport #10707]
* vm_method.c (rb_method_entry): if no super class, no original
method entry. [ruby-core:67389] [Bug #10707]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@50131 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | test/ruby/test_refinement.rb | 13 | ||||
-rw-r--r-- | version.h | 2 | ||||
-rw-r--r-- | vm_method.c | 7 |
4 files changed, 25 insertions, 2 deletions
@@ -1,3 +1,8 @@ +Tue Mar 31 00:38:14 2015 Seiei Higa <hanachin@gmail.com> + + * vm_method.c (rb_method_entry): if no super class, no original + method entry. [ruby-core:67389] [Bug #10707] + Tue Mar 31 00:34:39 2015 Vit Ondruch <vondruch@redhat.com> * configure.in (RUBY_SETJMP_TYPE): Remove superfluous semicolon diff --git a/test/ruby/test_refinement.rb b/test/ruby/test_refinement.rb index d9b166317b..4ed0423abd 100644 --- a/test/ruby/test_refinement.rb +++ b/test/ruby/test_refinement.rb @@ -1165,6 +1165,19 @@ class TestRefinement < Test::Unit::TestCase assert_raise(NoMethodError, bug10106) {Object.new.foo} end; + + assert_separately([], <<-"end;") + bug10707 = '[ruby-core:67389] [Bug #10707]' + module RefinementBug + refine BasicObject do + def foo + end + end + end + + assert(methods, bug10707) + assert_raise(NameError, bug10707) {method(:foo)} + end; end def test_change_refined_new_method_visibility @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.5" #define RUBY_RELEASE_DATE "2015-03-31" -#define RUBY_PATCHLEVEL 326 +#define RUBY_PATCHLEVEL 327 #define RUBY_RELEASE_YEAR 2015 #define RUBY_RELEASE_MONTH 3 diff --git a/vm_method.c b/vm_method.c index 84b4e86734..a8b524d2bc 100644 --- a/vm_method.c +++ b/vm_method.c @@ -639,12 +639,17 @@ get_original_method_entry(VALUE refinements, const rb_method_entry_t *me, VALUE *defined_class_ptr) { + VALUE super; + if (me->def->body.orig_me) { return me->def->body.orig_me; } + else if (!(super = RCLASS_SUPER(me->klass))) { + return 0; + } else { rb_method_entry_t *tmp_me; - tmp_me = rb_method_entry(RCLASS_SUPER(me->klass), me->called_id, + tmp_me = rb_method_entry(super, me->called_id, defined_class_ptr); return rb_resolve_refined_method(refinements, tmp_me, defined_class_ptr); |