Subject: Problem with Metaclasses Lieber Herr M„rker, lieber Herr Michel, If a metaclass hierarchy is built by subclassing "Class" the setup of these class-objects seems to be in error. The following class definitions are given: /* group 1 - metaclass definitions */ :: CLASS META1 SUBCLASS Class :: CLASS META2 SUBCLASS META1 :: CLASS META3 SUBCLASS META2 METACLASS META1 :: CLASS META4 SUBCLASS META3 /* group 2 - object class definitions, using metaclasses */ :: CLASS A1 :: CLASS B1 MIXINCLASS A1 METACLASS META2 :: CLASS C1 MIXINCLASS B1 :: CLASS D1 MIXINCLASS A1 METACLASS META3 :: CLASS E1 MIXINCLASS D1 /* group 3 - same as group 2, except subclassing CLASS (i.e. metaclasses) */ :: CLASS A1m SUBCLASS Class /* <--- SUBCLASSING ".CLASS" ! */ :: CLASS B1m MIXINCLASS A1m METACLASS META2 :: CLASS C1m MIXINCLASS B1m :: CLASS D1m MIXINCLASS A1m METACLASS META3 :: CLASS E1m MIXINCLASS D1m Looping over these classes and asking for their SUPERCLASS, METACLASS, CLASS and BASECLASS (which should be the same as CLASS) yields: [META1] --> SUPERC[1]=[Class] METAC=[Class] CLASS=[Class] BASEC=[META1] [META2] --> SUPERC[1]=[META1] METAC=[META1] CLASS=[Class] BASEC=[META2] ?* [META3] --> SUPERC[1]=[META2] METAC=[META2] CLASS=[META1] BASEC=[META3] ?* [META4] --> SUPERC[1]=[META3] METAC=[META3] CLASS=[META2] BASEC=[META4] ?* ******************************************************************************* [A1] --> SUPERC[1]=[Object] METAC=[Class] CLASS=[Class] BASEC=[A1] [B1] --> SUPERC[1]=[A1] METAC=[META2] CLASS=[META2] BASEC=[A1] [C1] --> SUPERC[1]=[B1] METAC=[META2] CLASS=[META2] BASEC=[A1] [D1] --> SUPERC[1]=[A1] METAC=[META3] CLASS=[META3] BASEC=[A1] [E1] --> SUPERC[1]=[D1] METAC=[META3] CLASS=[META3] BASEC=[A1] ******************************************************************************* [A1M] --> SUPERC[1]=[Class] METAC=[Class] CLASS=[Class] BASEC=[A1M] [B1M] --> SUPERC[1]=[A1M] METAC=[A1M] CLASS=[META2] BASEC=[A1M] ?* [C1M] --> SUPERC[1]=[B1M] METAC=[B1M] CLASS=[A1M] BASEC=[A1M] ?* [D1M] --> SUPERC[1]=[A1M] METAC=[A1M] CLASS=[META3] BASEC=[A1M] ?* [E1M] --> SUPERC[1]=[D1M] METAC=[D1M] CLASS=[A1M] BASEC=[A1M] ?* ******************************************************************************* - Problems with the setup of the metaclasses (group1 and group3) in the areas "METACLASS" and "CLASS" - SUPERCLASSES[ 1 ] is the ***same*** object as for METACLASS ! - This would mean that a metaclass' superclass would be its metaclass, i.e. the metaclass object built for keeping the class-object definitions of the subclass would be an instance of its own superclass ?????? - CLASS yields the metaclass object of its superclass, unless there is an explicit METACLASS statement ?????? (cf. META3, B1M, D1M) - Group 2 is setup as expected. - Group3 is an *exact* copy of group2 with the exception that the first class definition in Group3 subclasses CLASS turning all subclasses into metaclasses. Group3 - as group1 - is *not* set up correctly (i.e. it is *not* orthogonal to group2) !!! Hence, method resolution chooses wrong classes and methods. ----------- The results of running "orx_analyze_html.cmd" over the (enclosed) program can be found at http://wwwi.wu-wien.ac.at/rgf/ooi/pro970826/pro970826.htm The program and its output (showing how the method are really invoked at runtime) are enclosed. Version: OBJREXX 6.00 21 Jul 1997 Regards, ---rony ---------------------------------- cut here ------------------------------- /* ---rgf, 97-08-25 */ classes = "META1 META2 META3 META4 /" , "A1 B1 C1 D1 E1 /" , "A1m B1m C1m D1m E1m " DO WHILE classes <> "" PARSE VAR classes tmpString classes IF tmpString = "/" THEN DO SAY ; SAY LEFT( "", 79, "*" ); SAY LEFT( "", 79, "*" ); SAY LEFT( "", 79, "*" ); SAY ITERATE END INTERPRET "tmpClass = ." || tmpString tmp= pp( tmpClass ~ ID ) "-->", "SUPERC[1]=" || pp( tmpClass ~ Superclasses[ 1 ] ~ ID ) , "METAC=" || pp( tmpClass ~ Metaclass ~ ID ) , "CLASS=" || pp( tmpClass ~ class ~ ID ) , "BASEC=" || pp( tmpClass ~ baseclass ~ ID ) IF ( tmpClass ~ Metaclass ~ ID ) <> ( tmpClass ~ class ~ ID ) THEN tmp = tmp "?*" SAY tmp END SAY; SAY; SAY ; SAY LEFT( "", 79, "*" ); SAY LEFT( "", 79, "*" ); SAY LEFT( "", 79, "*" ); SAY; SAY; SAY /* create instances */ instances = "META1 META2 META3 META4 /" , "A1 B1 C1 D1 E1 /" , "A1m B1m C1m D1m E1m " DO WHILE instances <> "" PARSE VAR instances tmpString instances IF tmpString = "/" THEN DO SAY ; SAY LEFT( "", 79, "*" ); SAY LEFT( "", 79, "*" ); SAY LEFT( "", 79, "*" ); SAY ITERATE END SAY LEFT("", 79, "=" ) bCreateMeta = ( POS( "META", tmpString ) > 0 ) | ( POS( "1m", tmpString ) > 0 ) IF bCreateMeta THEN exeString = "anObj = ." || tmpString || " ~ new(' " tmpString "instance 2' )" ELSE exeString = "anObj = ." || tmpString || " ~ new" INTERPRET exeString CALL dump anObj /* dump the instance */ level = 1 do forever IF anObj ~ hasmethod( "NEW" ) THEN /* "NEW" is a class method, hence a class object in hand */ DO bDumpMeta = ( anObj ~ class <> .class ) metaClassObj = anObj ~ class /* get metaclass-object */ END ELSE DO metaClassObj = anObj ~ class ~ class /* get metaclass-object */ bDumpMeta = ( anObj ~ class ~ class <> .class ) /* meta class of object class instance */ END IF bDumpMeta THEN /* using a user defined meta-class ? */ DO SAY CENTER( "+++ +++ user defined metaclass +++ +++ level" level, 80 ) CALL dump metaClassObj, ">", "<" END else leave anObj = metaClassObj /* dump metaclass */ level = level + 1 end END EXIT dump : PROCEDURE USE ARG anObj, filler1, filler2 IF \ VAR( "FILLER1" ) THEN filler1 = "/" IF \ VAR( "FILLER2" ) THEN filler2 = "\" SAY SAY "anObj ~ rgf" pp2( anObj ) SAY LEFT("", 50, filler1 ) anObj ~ rgf SAY LEFT("", 50, filler1 ) SAY SAY "anObj ~ class ~ rgf" pp2( anObj ~ class ) SAY LEFT("", 50, filler2 ) IF anObj ~ class = .class THEN SAY "... metaclass is ORX's .class ... NOP ..." ELSE anobj ~ class ~ rgf SAY "( anObj ~ class ~ class:" anObj ~ class ~ class ")" SAY LEFT("", 50, filler2 ) SAY RETURN pp : RETURN LEFT( "[" || ARG( 1 ) || "]", 8 ) pp2: RETURN "[" || ARG( 1 ) || "]" /* ---------------------------------------------- */ :: CLASS META1 SUBCLASS Class :: METHOD rgf CLASS IF super ~ HASMETHOD( "RGF" ) THEN DO; SAY "META1::RGF::CLASS invoked ..."; FORWARD CLASS( super ); END; ELSE SAY "META1::RGF::CLASS invoked (no FORWARDING ANYMORE )" :: METHOD rgf IF super ~ HASMETHOD( "RGF" ) THEN DO; SAY "META1::RGF::INSTANCE invoked ..."; FORWARD CLASS( super ); END; ELSE SAY "META1::RGF::INSTANCE invoked (no FORWARDING ANYMORE )" :: CLASS META2 SUBCLASS META1 :: METHOD rgf CLASS ; SAY "META2::RGF::CLASS invoked..."; FORWARD CLASS( super ) :: METHOD rgf ; SAY "META2::RGF::INSTANCE invoked..."; FORWARD CLASS( super ) :: CLASS META3 SUBCLASS META2 METACLASS META1 :: METHOD rgf CLASS ; SAY "META3::RGF::CLASS invoked..."; FORWARD CLASS( super ) :: METHOD rgf ; SAY "META3::RGF::INSTANCE invoked..."; FORWARD CLASS( super ) :: CLASS META4 SUBCLASS META3 :: METHOD rgf CLASS ; SAY "META4::RGF::CLASS invoked..."; FORWARD CLASS( super ) :: METHOD rgf ; SAY "META4::RGF::INSTANCE invoked..."; FORWARD CLASS( super ) /* ---------------------------------------------- */ :: CLASS A1 :: METHOD rgf CLASS IF super ~ HASMETHOD( "RGF" ) THEN DO; SAY "A1::RGF::CLASS invoked .."; FORWARD CLASS( super ); END; ELSE SAY "A1::RGF::CLASS invoked (no FORWARDING ANYMORE )" :: METHOD rgf ; IF super ~ HASMETHOD( "RGF" ) THEN DO; SAY "A1::RGF::INSTANCE invoked .."; FORWARD CLASS( super ); END; ELSE SAY "A1::RGF::INSTANCE invoked (no FORWARDING ANYMORE )" :: CLASS B1 MIXINCLASS A1 METACLASS META2 :: METHOD rgf CLASS ; SAY "B1::RGF::CLASS invoked..."; FORWARD CLASS( super ) :: METHOD rgf ; SAY "B1::RGF::INSTANCE invoked..."; FORWARD CLASS( super ) :: CLASS C1 MIXINCLASS B1 :: METHOD rgf CLASS ; SAY "C1::RGF::CLASS invoked..."; FORWARD CLASS( super ) :: METHOD rgf ; SAY "C1::RGF::INSTANCE invoked..."; FORWARD CLASS( super ) :: CLASS D1 MIXINCLASS A1 METACLASS META3 :: METHOD rgf CLASS ; SAY "D1::RGF::CLASS invoked..."; FORWARD CLASS( super ) :: METHOD rgf ; SAY "D1::RGF::INSTANCE invoked..."; FORWARD CLASS( super ) :: CLASS E1 MIXINCLASS D1 :: METHOD rgf CLASS ; SAY "E1::RGF::CLASS invoked..."; FORWARD CLASS( super ) :: METHOD rgf ; SAY "E1::RGF::INSTANCE invoked..."; FORWARD CLASS( super ) /* ---------------------------------------------- */ :: CLASS A1m SUBCLASS Class :: METHOD rgf CLASS IF super ~ HASMETHOD( "RGF" ) THEN DO; SAY "A1m::RGF::CLASS invoked .."; FORWARD CLASS( super ); END; ELSE SAY "A1m::RGF::CLASS invoked (no FORWARDING ANYMORE )" :: METHOD rgf ; IF super ~ HASMETHOD( "RGF" ) THEN DO; SAY "A1m::RGF::INSTANCE invoked .."; FORWARD CLASS( super ); END; ELSE SAY "A1m::RGF::INSTANCE invoked (no FORWARDING ANYMORE )" :: CLASS B1m MIXINCLASS A1m METACLASS META2 :: METHOD rgf CLASS ; SAY "B1m::RGF::CLASS invoked..."; FORWARD CLASS( super ) :: METHOD rgf ; SAY "B1m::RGF::INSTANCE invoked..."; FORWARD CLASS( super ) :: CLASS C1m MIXINCLASS B1m :: METHOD rgf CLASS ; SAY "C1m::RGF::CLASS invoked..."; FORWARD CLASS( super ) :: METHOD rgf ; SAY "C1m::RGF::INSTANCE invoked..."; FORWARD CLASS( super ) :: CLASS D1m MIXINCLASS A1m METACLASS META3 :: METHOD rgf CLASS ; SAY "D1m::RGF::CLASS invoked..."; FORWARD CLASS( super ) :: METHOD rgf ; SAY "D1m::RGF::INSTANCE invoked..."; FORWARD CLASS( super ) :: CLASS E1m MIXINCLASS D1m :: METHOD rgf CLASS ; SAY "E1m::RGF::CLASS invoked..."; FORWARD CLASS( super ) :: METHOD rgf ; SAY "E1m::RGF::INSTANCE invoked..."; FORWARD CLASS( super ) ---------------------------------- cut here ------------------------------- ---------------------------------- cut here ------------------------------- [META1] --> SUPERC[1]=[Class] METAC=[Class] CLASS=[Class] BASEC=[META1] [META2] --> SUPERC[1]=[META1] METAC=[META1] CLASS=[Class] BASEC=[META2] ?* [META3] --> SUPERC[1]=[META2] METAC=[META2] CLASS=[META1] BASEC=[META3] ?* [META4] --> SUPERC[1]=[META3] METAC=[META3] CLASS=[META2] BASEC=[META4] ?* ******************************************************************************* ******************************************************************************* ******************************************************************************* [A1] --> SUPERC[1]=[Object] METAC=[Class] CLASS=[Class] BASEC=[A1] [B1] --> SUPERC[1]=[A1] METAC=[META2] CLASS=[META2] BASEC=[A1] [C1] --> SUPERC[1]=[B1] METAC=[META2] CLASS=[META2] BASEC=[A1] [D1] --> SUPERC[1]=[A1] METAC=[META3] CLASS=[META3] BASEC=[A1] [E1] --> SUPERC[1]=[D1] METAC=[META3] CLASS=[META3] BASEC=[A1] ******************************************************************************* ******************************************************************************* ******************************************************************************* [A1M] --> SUPERC[1]=[Class] METAC=[Class] CLASS=[Class] BASEC=[A1M] [B1M] --> SUPERC[1]=[A1M] METAC=[A1M] CLASS=[META2] BASEC=[A1M] ?* [C1M] --> SUPERC[1]=[B1M] METAC=[B1M] CLASS=[A1M] BASEC=[A1M] ?* [D1M] --> SUPERC[1]=[A1M] METAC=[A1M] CLASS=[META3] BASEC=[A1M] ?* [E1M] --> SUPERC[1]=[D1M] METAC=[D1M] CLASS=[A1M] BASEC=[A1M] ?* ******************************************************************************* ******************************************************************************* ******************************************************************************* =============================================================================== anObj ~ rgf [The META1 instance 2 class] ////////////////////////////////////////////////// META1::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The META1 class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The Class class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ =============================================================================== anObj ~ rgf [The META2 instance 2 class] ////////////////////////////////////////////////// META2::RGF::INSTANCE invoked... META1::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The META2 class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ META2::RGF::CLASS invoked... META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The Class class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ =============================================================================== anObj ~ rgf [The META3 instance 2 class] ////////////////////////////////////////////////// META3::RGF::INSTANCE invoked... META2::RGF::INSTANCE invoked... META1::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The META3 class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ META3::RGF::CLASS invoked... META2::RGF::CLASS invoked... META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The META1 class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +++ +++ user defined metaclass +++ +++ level 1 anObj ~ rgf [The META1 class] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anObj ~ class ~ rgf [The Class class] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ... metaclass is ORX's .class ... NOP ... ( anObj ~ class ~ class: The Class class ) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< =============================================================================== anObj ~ rgf [The META4 instance 2 class] ////////////////////////////////////////////////// META4::RGF::INSTANCE invoked... META3::RGF::INSTANCE invoked... META2::RGF::INSTANCE invoked... META1::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The META4 class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ META4::RGF::CLASS invoked... META3::RGF::CLASS invoked... META2::RGF::CLASS invoked... META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The META2 class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +++ +++ user defined metaclass +++ +++ level 1 anObj ~ rgf [The META2 class] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> META2::RGF::CLASS invoked... META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anObj ~ class ~ rgf [The Class class] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ... metaclass is ORX's .class ... NOP ... ( anObj ~ class ~ class: The Class class ) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ******************************************************************************* ******************************************************************************* ******************************************************************************* =============================================================================== anObj ~ rgf [an A1] ////////////////////////////////////////////////// A1::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The A1 class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ A1::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The Class class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ =============================================================================== anObj ~ rgf [a B1] ////////////////////////////////////////////////// B1::RGF::INSTANCE invoked... A1::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The B1 class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ B1::RGF::CLASS invoked... META2::RGF::INSTANCE invoked... META1::RGF::INSTANCE invoked ... A1::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The META2 class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +++ +++ user defined metaclass +++ +++ level 1 anObj ~ rgf [The META2 class] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> META2::RGF::CLASS invoked... META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anObj ~ class ~ rgf [The Class class] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ... metaclass is ORX's .class ... NOP ... ( anObj ~ class ~ class: The Class class ) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< =============================================================================== anObj ~ rgf [a C1] ////////////////////////////////////////////////// C1::RGF::INSTANCE invoked... B1::RGF::INSTANCE invoked... A1::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The C1 class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ C1::RGF::CLASS invoked... B1::RGF::CLASS invoked... META2::RGF::INSTANCE invoked... META1::RGF::INSTANCE invoked ... A1::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The META2 class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +++ +++ user defined metaclass +++ +++ level 1 anObj ~ rgf [The META2 class] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> META2::RGF::CLASS invoked... META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anObj ~ class ~ rgf [The Class class] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ... metaclass is ORX's .class ... NOP ... ( anObj ~ class ~ class: The Class class ) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< =============================================================================== anObj ~ rgf [a D1] ////////////////////////////////////////////////// D1::RGF::INSTANCE invoked... A1::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The D1 class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ D1::RGF::CLASS invoked... META3::RGF::INSTANCE invoked... META2::RGF::INSTANCE invoked... META1::RGF::INSTANCE invoked ... A1::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The META3 class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +++ +++ user defined metaclass +++ +++ level 1 anObj ~ rgf [The META3 class] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> META3::RGF::CLASS invoked... META2::RGF::CLASS invoked... META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anObj ~ class ~ rgf [The META1 class] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The Class class ) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +++ +++ user defined metaclass +++ +++ level 2 anObj ~ rgf [The META1 class] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anObj ~ class ~ rgf [The Class class] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ... metaclass is ORX's .class ... NOP ... ( anObj ~ class ~ class: The Class class ) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< =============================================================================== anObj ~ rgf [an E1] ////////////////////////////////////////////////// E1::RGF::INSTANCE invoked... D1::RGF::INSTANCE invoked... A1::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The E1 class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ E1::RGF::CLASS invoked... D1::RGF::CLASS invoked... META3::RGF::INSTANCE invoked... META2::RGF::INSTANCE invoked... META1::RGF::INSTANCE invoked ... A1::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The META3 class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +++ +++ user defined metaclass +++ +++ level 1 anObj ~ rgf [The META3 class] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> META3::RGF::CLASS invoked... META2::RGF::CLASS invoked... META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anObj ~ class ~ rgf [The META1 class] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The Class class ) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +++ +++ user defined metaclass +++ +++ level 2 anObj ~ rgf [The META1 class] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anObj ~ class ~ rgf [The Class class] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ... metaclass is ORX's .class ... NOP ... ( anObj ~ class ~ class: The Class class ) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ******************************************************************************* ******************************************************************************* ******************************************************************************* =============================================================================== anObj ~ rgf [The A1m instance 2 class] ////////////////////////////////////////////////// A1m::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The A1M class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ A1m::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The Class class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ =============================================================================== anObj ~ rgf [The B1m instance 2 class] ////////////////////////////////////////////////// B1m::RGF::INSTANCE invoked... A1m::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The B1M class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ B1m::RGF::CLASS invoked... META2::RGF::INSTANCE invoked... META1::RGF::INSTANCE invoked ... A1m::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The META2 class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +++ +++ user defined metaclass +++ +++ level 1 anObj ~ rgf [The META2 class] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> META2::RGF::CLASS invoked... META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anObj ~ class ~ rgf [The Class class] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ... metaclass is ORX's .class ... NOP ... ( anObj ~ class ~ class: The Class class ) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< =============================================================================== anObj ~ rgf [The C1m instance 2 class] ////////////////////////////////////////////////// C1m::RGF::INSTANCE invoked... B1m::RGF::INSTANCE invoked... A1m::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The C1M class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ C1m::RGF::CLASS invoked... B1m::RGF::CLASS invoked... META2::RGF::INSTANCE invoked... META1::RGF::INSTANCE invoked ... A1m::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The A1M class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +++ +++ user defined metaclass +++ +++ level 1 anObj ~ rgf [The A1M class] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> A1m::RGF::CLASS invoked (no FORWARDING ANYMORE ) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anObj ~ class ~ rgf [The Class class] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ... metaclass is ORX's .class ... NOP ... ( anObj ~ class ~ class: The Class class ) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< =============================================================================== anObj ~ rgf [The D1m instance 2 class] ////////////////////////////////////////////////// D1m::RGF::INSTANCE invoked... A1m::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The D1M class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ D1m::RGF::CLASS invoked... META3::RGF::INSTANCE invoked... META2::RGF::INSTANCE invoked... META1::RGF::INSTANCE invoked ... A1m::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The META3 class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +++ +++ user defined metaclass +++ +++ level 1 anObj ~ rgf [The META3 class] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> META3::RGF::CLASS invoked... META2::RGF::CLASS invoked... META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anObj ~ class ~ rgf [The META1 class] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The Class class ) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +++ +++ user defined metaclass +++ +++ level 2 anObj ~ rgf [The META1 class] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> META1::RGF::CLASS invoked (no FORWARDING ANYMORE ) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anObj ~ class ~ rgf [The Class class] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ... metaclass is ORX's .class ... NOP ... ( anObj ~ class ~ class: The Class class ) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< =============================================================================== anObj ~ rgf [The E1m instance 2 class] ////////////////////////////////////////////////// E1m::RGF::INSTANCE invoked... D1m::RGF::INSTANCE invoked... A1m::RGF::INSTANCE invoked (no FORWARDING ANYMORE ) ////////////////////////////////////////////////// anObj ~ class ~ rgf [The E1M class] \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ E1m::RGF::CLASS invoked... D1m::RGF::CLASS invoked... META3::RGF::INSTANCE invoked... META2::RGF::INSTANCE invoked... META1::RGF::INSTANCE invoked ... A1m::RGF::CLASS invoked (no FORWARDING ANYMORE ) ( anObj ~ class ~ class: The A1M class ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +++ +++ user defined metaclass +++ +++ level 1 anObj ~ rgf [The A1M class] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> A1m::RGF::CLASS invoked (no FORWARDING ANYMORE ) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anObj ~ class ~ rgf [The Class class] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ... metaclass is ORX's .class ... NOP ... ( anObj ~ class ~ class: The Class class ) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ---------------------------------- cut here -------------------------------