Skip to content

Commit ed22c21

Browse files
committed
merge revision(s) r49184: [Backport ruby#10707]
* vm_method.c (rb_method_entry): if no super class, no original method entry. [ruby-core:67389] [Bug ruby#10707] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@50131 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 1b18735 commit ed22c21

File tree

4 files changed

+25
-2
lines changed

4 files changed

+25
-2
lines changed

ChangeLog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
Tue Mar 31 00:38:14 2015 Seiei Higa <[email protected]>
2+
3+
* vm_method.c (rb_method_entry): if no super class, no original
4+
method entry. [ruby-core:67389] [Bug #10707]
5+
16
Tue Mar 31 00:34:39 2015 Vit Ondruch <[email protected]>
27

38
* configure.in (RUBY_SETJMP_TYPE): Remove superfluous semicolon

test/ruby/test_refinement.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,6 +1165,19 @@ def foo
11651165
11661166
assert_raise(NoMethodError, bug10106) {Object.new.foo}
11671167
end;
1168+
1169+
assert_separately([], <<-"end;")
1170+
bug10707 = '[ruby-core:67389] [Bug #10707]'
1171+
module RefinementBug
1172+
refine BasicObject do
1173+
def foo
1174+
end
1175+
end
1176+
end
1177+
1178+
assert(methods, bug10707)
1179+
assert_raise(NameError, bug10707) {method(:foo)}
1180+
end;
11681181
end
11691182

11701183
def test_change_refined_new_method_visibility

version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#define RUBY_VERSION "2.1.5"
22
#define RUBY_RELEASE_DATE "2015-03-31"
3-
#define RUBY_PATCHLEVEL 326
3+
#define RUBY_PATCHLEVEL 327
44

55
#define RUBY_RELEASE_YEAR 2015
66
#define RUBY_RELEASE_MONTH 3

vm_method.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,12 +639,17 @@ get_original_method_entry(VALUE refinements,
639639
const rb_method_entry_t *me,
640640
VALUE *defined_class_ptr)
641641
{
642+
VALUE super;
643+
642644
if (me->def->body.orig_me) {
643645
return me->def->body.orig_me;
644646
}
647+
else if (!(super = RCLASS_SUPER(me->klass))) {
648+
return 0;
649+
}
645650
else {
646651
rb_method_entry_t *tmp_me;
647-
tmp_me = rb_method_entry(RCLASS_SUPER(me->klass), me->called_id,
652+
tmp_me = rb_method_entry(super, me->called_id,
648653
defined_class_ptr);
649654
return rb_resolve_refined_method(refinements, tmp_me,
650655
defined_class_ptr);

0 commit comments

Comments
 (0)