From 3e96f56f8ae9cb428e00aa0d60ddd18304a1f09e Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 27 Jun 2012 13:40:37 +0000 Subject: [PATCH] remove from original m_tbl * vm_method.c (remove_method): remove the method from the original m_tbl on a prepended module. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36239 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_module.rb | 9 +++++++++ vm_method.c | 1 + 2 files changed, 10 insertions(+) diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb index aa48e1793c..d7a6248909 100644 --- a/test/ruby/test_module.rb +++ b/test/ruby/test_module.rb @@ -1290,4 +1290,13 @@ class TestModule < Test::Unit::TestCase o.singleton_class.class_eval {prepend Module.new} assert_equal([], o.singleton_methods) end + + def test_prepend_remove_method + assert_raise(NameError) do + Class.new do + prepend Module.new {def foo; end} + remove_method(:foo) + end + end + end end diff --git a/vm_method.c b/vm_method.c index 5a7722cd67..7546a1c31c 100644 --- a/vm_method.c +++ b/vm_method.c @@ -452,6 +452,7 @@ remove_method(VALUE klass, ID mid) st_data_t key, data; rb_method_entry_t *me = 0; + klass = RCLASS_ORIGIN(klass); if (klass == rb_cObject) { rb_secure(4); }