ruby/ruby-2.3.0-Revert-raise-NameError-when-refined-method-is-removed.patch
2015-02-03 16:20:24 +01:00

92 lines
2 KiB
Diff

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);
}