BUGS in metaclasses inheritance

Hi all,

It will probably not change the world but I've found 3 bugs regarding the
inheritance between metaclasses both in Ruby 1.8.5 and 1.8.6.

The inheritance should be as defined in the object.c source code (best seen
with a fixed font) :

* +------------------+
* | |
* Object---->(Object) |
* ^ ^ ^ ^ |
* | | | | |
* | | +-----+ +---------+ |
* | | | | |
* | +-----------+ | |
* | | | | |
* +------+ | Module--->(Module) |
* | | ^ ^ |
* OtherClass-->(OtherClass) | | |
* | | |
* Class---->(Class) |
* ^ |
* | |
* +----------------+

···

*

The following code and output show that the actual inheritance between the
metaclasses (noted between parentheses) is incorrect :

def inspect_class name, obj
  puts "#################"
  puts "class : #{name} - id : #{obj.object_id}"
  puts "superclass : #{obj.superclass.name} - id : #{
obj.superclass.object_id}" if obj.superclass
  puts "#################"
end

class OtherClass
end

class Object
  inspect_class self.name, self
end

class << Object
  inspect_class "(Object)", self
end

class Module
  inspect_class self.name, self
end

class << Module
  inspect_class "(Module)", self
end

class Class
  inspect_class self.name, self
end

class << Class
  inspect_class "(Class)", self
end

class OtherClass
  inspect_class self.name, self
end

class << OtherClass
  inspect_class "(OtherClass)", self
end

The output :

#################
class : Object - id : 22251190
#################
class : (Object) - id : 22251160
superclass : Class - id : 22251170
#################
class : Module - id : 22251180
superclass : Object - id : 22251190
#################
class : (Module) - id : 22251150
superclass : Class - id : 22251170
#################
class : Class - id : 22251170
superclass : Module - id : 22251180
#################
class : (Class) - id : 22251140
superclass : - id : 22251140
#################
class : OtherClass - id : 24175280
superclass : Object - id : 22251190
#################
class : (OtherClass) - id : 24175220
superclass : - id : 22251140
#################

The bugs :

- The superclass of (OtherClass) is (Class) instead of (Object) !

- The superclass of (Class) is (Class) instead of (Module) !

- The superclass of (Module) is (Class) instead of (Object) !

I hope that Matz or another Ruby core developer will see this thread and fix
these bugs.

Chauk-Mean.

I hope that Matz or another Ruby core developer will see this thread and fix
these bugs.

Chauk-Mean.

Please submit bugs to the Ruby bug tracker:
http://rubyforge.org/tracker/?atid=1698&group_id=426&func=browse

-Justin

OK. I've just done it:

Issue #9462.

Chauk-Mean.