[前][次][番号順一覧][スレッド一覧]

ruby-changes:15204

From: shyouhei <ko1@a...>
Date: Mon, 29 Mar 2010 14:59:58 +0900 (JST)
Subject: [ruby-changes:15204] Ruby:r27085 (trunk): instance_methods should not special-case singleton classes, fixes #2993

shyouhei	2010-03-29 14:59:46 +0900 (Mon, 29 Mar 2010)

  New Revision: 27085

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=27085

  Log:
    instance_methods should not special-case singleton classes, fixes #2993
    
    Signed-off-by: URABE, Shyouhei <shyouhei@r...>

  Modified files:
    trunk/class.c
    trunk/test/ruby/test_module.rb

Index: class.c
===================================================================
--- class.c	(revision 27084)
+++ class.c	(revision 27085)
@@ -852,7 +852,6 @@
     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();
Index: test/ruby/test_module.rb
===================================================================
--- test/ruby/test_module.rb	(revision 27084)
+++ test/ruby/test_module.rb	(revision 27085)
@@ -141,6 +141,11 @@
       :bClass3
     end
   end
+  
+  class CClass < BClass
+    def self.cClass
+    end
+  end
 
   MyClass = AClass.clone
   class MyClass
@@ -281,6 +286,9 @@
     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))

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]