From 7f057fd74c5fcad8e47904c75f69d9a97e6928b7 Mon Sep 17 00:00:00 2001 From: Seiei Higa Date: Wed, 7 Jan 2015 03:36:36 +0900 Subject: [PATCH] vm_method.c: fix change refined new method visibility --- test/ruby/test_refinement.rb | 14 ++++++++++++++ vm_method.c | 4 +++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/test/ruby/test_refinement.rb b/test/ruby/test_refinement.rb index 11077b6..8553c42 100644 --- a/test/ruby/test_refinement.rb +++ b/test/ruby/test_refinement.rb @@ -1165,6 +1165,20 @@ class TestRefinement < Test::Unit::TestCase end; end + def test_change_refined_new_method_visibility + assert_separately([], <<-"end;") + bug10706 = '[ruby-core:67387] [Bug #10706]' + module RefinementBug + refine Object do + def foo + end + end + end + + assert_raise(NameError, bug10706) {private(:foo)} + end; + end + private def eval_using(mod, s) diff --git a/vm_method.c b/vm_method.c index 8af2198..97ae64f 100644 --- a/vm_method.c +++ b/vm_method.c @@ -825,7 +825,9 @@ rb_export_method(VALUE klass, ID name, rb_method_flag_t noex) me = search_method(rb_cObject, name, &defined_class); } - if (UNDEFINED_METHOD_ENTRY_P(me)) { + if (UNDEFINED_METHOD_ENTRY_P(me) || + (me->def->type == VM_METHOD_TYPE_REFINED && + UNDEFINED_METHOD_ENTRY_P(me->def->body.orig_me))) { rb_print_undef(klass, name, 0); } -- 1.9.3 (Apple Git-50)