diff --git a/test/ruby/test_refinement.rb b/test/ruby/test_refinement.rb index cb7c53f..df16254 100644 --- a/test/ruby/test_refinement.rb +++ b/test/ruby/test_refinement.rb @@ -1310,58 +1310,6 @@ class TestRefinement < Test::Unit::TestCase end; end - def test_remove_refined_method - assert_separately([], <<-"end;") - bug10765 = '[ruby-core:67722] [Bug #10765]' - - class C - def foo - "C#foo" - end - end - - module RefinementBug - refine C do - def foo - "RefinementBug#foo" - end - end - end - - using RefinementBug - - class C - remove_method :foo - end - - assert_equal("RefinementBug#foo", C.new.foo, bug10765) - end; - end - - def test_remove_undefined_refined_method - assert_separately([], <<-"end;") - bug10765 = '[ruby-core:67722] [Bug #10765]' - - class C - end - - module RefinementBug - refine C do - def foo - end - end - end - - using RefinementBug - - assert_raise(NameError, bug10765) { - class C - remove_method :foo - end - } - end; - end - private def eval_using(mod, s) diff --git a/vm_method.c b/vm_method.c index 8ad2b72..b2cff6f 100644 --- a/vm_method.c +++ b/vm_method.c @@ -766,12 +766,10 @@ remove_method(VALUE klass, ID mid) if (!st_lookup(RCLASS_M_TBL(klass), mid, &data) || !(me = (rb_method_entry_t *)data) || - (!me->def || me->def->type == VM_METHOD_TYPE_UNDEF) || - UNDEFINED_REFINED_METHOD_P(me->def)) { + (!me->def || me->def->type == VM_METHOD_TYPE_UNDEF)) { rb_name_error(mid, "method `%"PRIsVALUE"' not defined in %"PRIsVALUE, rb_id2str(mid), rb_class_path(klass)); } - key = (st_data_t)mid; st_delete(RCLASS_M_TBL(klass), &key, &data); @@ -779,10 +777,6 @@ remove_method(VALUE klass, ID mid) rb_clear_method_cache_by_class(klass); rb_unlink_method_entry(me); - if (me->def->type == VM_METHOD_TYPE_REFINED) { - rb_add_refined_method_entry(klass, mid); - } - CALL_METHOD_HOOK(self, removed, mid); }