From: noreply@... Date: 2007-03-22T19:19:10+09:00 Subject: [ ruby-Bugs-9462 ] BUGS in metaclasses inheritance Bugs item #9462, was opened at 22/03/2007 11:19 You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=1698&aid=9462&group_id=426 Category: Core Group: 1.8.x Status: Open Resolution: None Priority: 3 Submitted By: Chauk-Mean P (chauk-mean) Assigned to: Nobody (None) Summary: BUGS in metaclasses inheritance Initial Comment: The inheritance between metaclasses (noted between parentheses) 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 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) ! Chauk-Mean. ---------------------------------------------------------------------- You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=1698&aid=9462&group_id=426