aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--gc.c3
-rw-r--r--test/ruby/test_objectspace.rb16
3 files changed, 23 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index ad4e8b1839..fd85131226 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Wed Jul 22 03:37:39 2015 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (internal_object_p): Now a singleton classes appear by
+ ObjectSpace.each_object. [Bug #11360]
+
+ * test/ruby/test_objectspace.rb: add a test about it.
+
Tue Jul 21 21:21:33 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* thread.c (do_select): replace switch and goto with a loop to
diff --git a/gc.c b/gc.c
index 195be83ec6..36c4e01320 100644
--- a/gc.c
+++ b/gc.c
@@ -2319,9 +2319,6 @@ internal_object_p(VALUE obj)
case T_NODE:
case T_ZOMBIE:
break;
- case T_CLASS:
- if (FL_TEST(p, FL_SINGLETON))
- break;
default:
if (!p->as.basic.klass) break;
return 0;
diff --git a/test/ruby/test_objectspace.rb b/test/ruby/test_objectspace.rb
index d519041f0b..a57c7ea1d1 100644
--- a/test/ruby/test_objectspace.rb
+++ b/test/ruby/test_objectspace.rb
@@ -109,4 +109,20 @@ End
p Thread.current[:__recursive_key__]
end;
end
+
+ def test_each_object_singleton_class
+ assert_separately([], <<-End)
+ class C
+ class << self
+ $c = self
+ end
+ end
+
+ exist = false
+ ObjectSpace.each_object(Class){|o|
+ exist = true if $c == o
+ }
+ assert(exist, 'Bug #11360')
+ End
+ end
end