aboutsummaryrefslogtreecommitdiffstats
path: root/gc.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-12-21 09:40:58 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-12-21 09:40:58 +0000
commit1bcee938d5f4a0a70d492c1c1c13ec29f24980ea (patch)
tree293aa767120f08607fe842751da29aa0611b35ad /gc.c
parenta7f6b862f0ddfea4ab9f6587bc666d978a8f41a4 (diff)
downloadruby-1bcee938d5f4a0a70d492c1c1c13ec29f24980ea.tar.gz
* gc.c (internal_object_p): should not expose singleton classes
without a metaclass. [Bug #11740] * class.c (rb_singleton_class_has_metaclass_p): added. * test/ruby/test_class.rb: add a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53228 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gc.c b/gc.c
index 12be1eac11..a57addf1c4 100644
--- a/gc.c
+++ b/gc.c
@@ -2400,6 +2400,13 @@ internal_object_p(VALUE obj)
case T_NODE:
case T_ZOMBIE:
break;
+ case T_CLASS:
+ {
+ if (FL_TEST(obj, FL_SINGLETON)) {
+ int rb_singleton_class_has_metaclass_p(VALUE sklass);
+ return rb_singleton_class_has_metaclass_p(obj) == 0;
+ }
+ }
default:
if (!p->as.basic.klass) break;
return 0;