Actions
Bug #11360
closedSingleton class doesn't appear by ObjectSpace.each_object
Bug #11360:
Singleton class doesn't appear by ObjectSpace.each_object
Description
Singleton class doesn't appear by ObjectSpace.each_object.
The following is reproducible code.
class C
class << self
p [self, self.class]
$c = self
end
end
ObjectSpace.each_object(Class){|o|
exit if $c == o
}
raise "#{$c} is not found!"
This is because internal_object_p in gc.c skips singleton classes.
static int
internal_object_p(VALUE obj)
{
RVALUE *p = (RVALUE *)obj;
if (p->as.basic.flags) {
switch (BUILTIN_TYPE(p)) {
case T_NONE:
case T_IMEMO:
case T_ICLASS:
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;
}
}
return 1;
}
Actions