From: Chauk-Mean P Date: 2007-03-22T18:00:09+09:00 Subject: BUGS in metaclasses inheritance ------=_Part_109666_6868324.1174554006608 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline 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. ------=_Part_109666_6868324.1174554006608--