Issue #11360 has been updated by Koichi Sasada.


From Ruby 1.6, singleton classes are not appeared.
Is it intentional?


----------------------------------------
Bug #11360: Singleton class doesn't appear by ObjectSpace.each_object
https://bugs.ruby-lang.org/issues/11360#change-53441

* Author: Koichi Sasada
* Status: Open
* Priority: Normal
* Assignee: Koichi Sasada
* ruby -v: 2.3dev
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
Singleton class doesn't appear by ObjectSpace.each_object.

The following is reproducible code.

```ruby
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.

```C
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;
}
```




-- 
https://bugs.ruby-lang.org/