summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-30 15:45:35 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-30 15:45:35 +0000
commited22c21a8f4e0c98045efb6de245fba79ec7e961 (patch)
tree4c9b050836fbe039418abf682e58d1f7a1f21a41
parent1b18735b4bda48b7705ae3fe5a63511ed75c9d58 (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--ChangeLog5
-rw-r--r--test/ruby/test_refinement.rb13
-rw-r--r--version.h2
-rw-r--r--vm_method.c7
4 files changed, 25 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 5ba2f5d0d9..953dc96790 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/version.h b/version.h
index 29a1d4b627..94b9d22f16 100644
--- a/version.h
+++ b/version.h
@@ -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);