From d894e1d9301e4a87a42fa57be6492a9e01e5948f Mon Sep 17 00:00:00 2001 From: shyouhei Date: Mon, 29 Mar 2010 05:59:46 +0000 Subject: [PATCH] instance_methods should not special-case singleton classes, fixes #2993 Signed-off-by: URABE, Shyouhei git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27085 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- class.c | 1 - test/ruby/test_module.rb | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/class.c b/class.c index fed2edf4ee..e4d830641c 100644 --- a/class.c +++ b/class.c @@ -852,7 +852,6 @@ class_instance_method_list(int argc, VALUE *argv, VALUE mod, int (*func) (ID, lo for (; mod; mod = RCLASS_SUPER(mod)) { st_foreach(RCLASS_M_TBL(mod), method_entry, (st_data_t)list); if (BUILTIN_TYPE(mod) == T_ICLASS) continue; - if (FL_TEST(mod, FL_SINGLETON)) continue; if (!recur) break; } ary = rb_ary_new(); diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb index f90543196b..453d850bb4 100644 --- a/test/ruby/test_module.rb +++ b/test/ruby/test_module.rb @@ -141,6 +141,11 @@ class TestModule < Test::Unit::TestCase :bClass3 end end + + class CClass < BClass + def self.cClass + end + end MyClass = AClass.clone class MyClass @@ -281,6 +286,9 @@ class TestModule < Test::Unit::TestCase assert_equal([:user, :mixin].sort, User.instance_methods(true).sort) assert_equal([:mixin], Mixin.instance_methods) assert_equal([:mixin], Mixin.instance_methods(true)) + assert_equal([:cClass], (class << CClass; self; end).instance_methods(false)) + assert_equal([], (class << BClass; self; end).instance_methods(false)) + assert_equal([:cm2], (class << AClass; self; end).instance_methods(false)) # Ruby 1.8 feature change: # #instance_methods includes protected methods. #assert_equal([:aClass], AClass.instance_methods(false))