/* 19970824 22:15:46 */ SAY SAY CENTER( ' initialization ended ', 79, '=' ) SAY SAY /* ------------------------------------------------------------- */ SAY SAY LEFT( '', 79, 'v') SAY SAY 'creating an instance (abc) of class [B_Object_Class]:' SAY abc = .B_Object_Class ~ new( .true ) SAY SAY '*** running: abc ~ rgf (of class [B_Object_Class]):' SAY abc ~ rgf SAY SAY LEFT( '', 40, '-') SAY SAY '*** running: abc ~ class ~ rgf ( of class' pp( .B_Object_Class )'):' SAY abc ~ class ~ rgf SAY SAY LEFT( '', 79, '^') SAY /* ------------------------------------------------------------- */ SAY SAY LEFT( '', 79, 'v') SAY SAY 'creating an instance (abc) of class [C1_Object_Class]:' SAY abc = .C1_Object_Class ~ new( .true ) SAY SAY '*** running: abc ~ rgf (of class [C1_Object_Class]):' SAY abc ~ rgf SAY SAY LEFT( '', 40, '-') SAY SAY '*** running: abc ~ class ~ rgf ( of class' pp( .C1_Object_Class )'):' SAY abc ~ class ~ rgf SAY SAY LEFT( '', 79, '^') SAY :: ROUTINE pp; RETURN '[' || ARG( 1 ) || ']' /* ********************************************************************** */ /* defining class [B_Object_Class] */ /* */ :: CLASS B_Object_Class MIXINCLASS Object :: METHOD RGF CLASS SAY "--> in " pp( "B_Object_Class::RGF::CLASS" ) ", no more forwarding (top level) !" SAY "<-- end of " pp( "B_Object_Class::RGF::CLASS" ) SAY /* ---------------------------------------- */ :: METHOD RGF SAY "--> in " pp( "B_Object_Class::RGF::INSTANCE" ) ", no more forwarding (top level) !" SAY "<-- end of " pp( "B_Object_Class::RGF::INSTANCE" ) SAY /* ---------------------------------------- */ :: METHOD INIT CLASS IF .local ~ level = .nil THEN .local ~ level = 0 IF .level = 0 THEN DO SAY SAY CENTER( "Begin of initializing" pp( 'B_Object_Class' ) "at scope" pp( 'CLASS' ), "79", "*" ) SAY "( CLASS definition:" pp( STRIP( ":: CLASS B_Object_Class MIXINCLASS Object " ) ) ")" SAY END .local ~ level = .level + 1 SAY ">>> in " pp( "B_Object_Class::INIT::CLASS" ) ", no more forwarding (top level) !" SAY "--- end of " pp( "B_Object_Class::INIT::CLASS" ) SAY .local ~ level = .level - 1 IF .level = 0 THEN DO SAY SAY CENTER( "end of initializing" pp( 'B_Object_Class' ) "at scope" pp( 'CLASS' ), "79", "*" ) SAY END SAY /* ---------------------------------------- */ :: METHOD INIT IF .local ~ level = .nil THEN .local ~ level = 0 IF .level = 0 THEN DO SAY SAY CENTER( "Begin of initializing" pp( 'B_Object_Class' ) "at scope" pp( 'INSTANCE' ), "79", "*" ) SAY "( CLASS definition:" pp( STRIP( ":: CLASS B_Object_Class MIXINCLASS Object " ) ) ")" SAY END .local ~ level = .level + 1 SAY ">>> in " pp( "B_Object_Class::INIT::INSTANCE" ) ", no more forwarding (top level) !" SAY "--- end of " pp( "B_Object_Class::INIT::INSTANCE" ) SAY .local ~ level = .level - 1 IF .level = 0 THEN DO SAY SAY CENTER( "end of initializing" pp( 'B_Object_Class' ) "at scope" pp( 'INSTANCE' ), "79", "*" ) SAY END SAY /* ---------------------------------------- */ /* ********************************************************************** */ /* defining class [C1_Object_Class] */ /* */ :: CLASS C1_Object_Class MIXINCLASS B_Object_Class :: METHOD RGF CLASS SAY "--> in " pp( "C1_Object_Class::RGF::CLASS" ) ", doing a: 'FORWARD CLASS( super )' ..." FORWARD CLASS( super ) CONTINUE SAY "<-- back in " pp( "C1_Object_Class::RGF::CLASS" ) SAY "--- end of " pp( "C1_Object_Class::RGF::CLASS" ) SAY LEFT( "", 79, "." ) /* ---------------------------------------- */ :: METHOD RGF SAY "--> in " pp( "C1_Object_Class::RGF::INSTANCE" ) ", doing a: 'FORWARD CLASS( super )' ..." FORWARD CLASS( super ) CONTINUE SAY "<-- back in " pp( "C1_Object_Class::RGF::INSTANCE" ) SAY "--- end of " pp( "C1_Object_Class::RGF::INSTANCE" ) SAY LEFT( "", 79, "." ) /* ---------------------------------------- */ :: METHOD INIT CLASS IF .local ~ level = .nil THEN .local ~ level = 0 IF .level = 0 THEN /* start initializing a new class */ DO SAY SAY CENTER( "Begin of initializing" pp( 'C1_Object_Class' ) "at scope" pp( 'CLASS' ), "79", "*" ) SAY "( CLASS definition:" pp( STRIP( ":: CLASS C1_Object_Class MIXINCLASS B_Object_Class " ) ) ")" SAY END .local ~ level = .level + 1 /* forward up to next class */ SAY ">>> in " pp( "C1_Object_Class::INIT::CLASS" ) ", doing a: 'FORWARD CLASS( super )' ..." FORWARD CLASS( super ) ARRAY ( .false ) CONTINUE SAY "<<< back in " pp( "C1_Object_Class::INIT::CLASS" ) /* at instance level do a cross-call, but only for the initial class */ IF "CLASS" = "INSTANCE" & .level = 0 THEN DO SAY SAY " now cross calling: .C1_Object_Class ~ rgf at" pp( "C1_Object_Class::INIT::CLASS" ) SAY .C1_Object_Class ~ rgf SAY SAY " back from x-call: .C1_Object_Class ~ rgf at" pp( "C1_Object_Class::INIT::CLASS" ) SAY END SAY "--- end of " pp( "C1_Object_Class::INIT::CLASS" ) .local ~ level = .level - 1 IF .level = 0 THEN DO SAY SAY CENTER( "end of initializing" pp( 'C1_Object_Class' ) "at scope" pp( 'CLASS' ), "79", "*" ) SAY END SAY /* ---------------------------------------- */ :: METHOD INIT IF .local ~ level = .nil THEN .local ~ level = 0 IF .level = 0 THEN /* start initializing a new class */ DO SAY SAY CENTER( "Begin of initializing" pp( 'C1_Object_Class' ) "at scope" pp( 'INSTANCE' ), "79", "*" ) SAY "( CLASS definition:" pp( STRIP( ":: CLASS C1_Object_Class MIXINCLASS B_Object_Class " ) ) ")" SAY END .local ~ level = .level + 1 /* forward up to next class */ SAY ">>> in " pp( "C1_Object_Class::INIT::INSTANCE" ) ", doing a: 'FORWARD CLASS( super )' ..." FORWARD CLASS( super ) ARRAY ( .false ) CONTINUE SAY "<<< back in " pp( "C1_Object_Class::INIT::INSTANCE" ) /* at instance level do a cross-call, but only for the initial class */ IF "INSTANCE" = "INSTANCE" & .level = 0 THEN DO SAY SAY " now cross calling: .C1_Object_Class ~ rgf at" pp( "C1_Object_Class::INIT::INSTANCE" ) SAY .C1_Object_Class ~ rgf SAY SAY " back from x-call: .C1_Object_Class ~ rgf at" pp( "C1_Object_Class::INIT::INSTANCE" ) SAY END SAY "--- end of " pp( "C1_Object_Class::INIT::INSTANCE" ) .local ~ level = .level - 1 IF .level = 0 THEN DO SAY SAY CENTER( "end of initializing" pp( 'C1_Object_Class' ) "at scope" pp( 'INSTANCE' ), "79", "*" ) SAY END SAY /* ---------------------------------------- */