diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 92ba704da2..ca50b7f835 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,17 @@ 2002-12-01 13:30 UTC+0100 Foo Bar */ + * changed STATICs passed by reference to use new array item references. + ! block destructor execution after classy releasing on HVM exit + +2006-09-18 03:12 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/include/hbclass.ch + + added MESSAGE ... INLINE ... rule + + * harbour/tests/clsccast.prg + * harbour/tests/clsicast.prg + * harbour/tests/clsnv.prg + * harbour/tests/clsscast.prg * harbour/tests/clsscope.prg - removed some unnecessary definitions diff --git a/harbour/source/vm/classes.c b/harbour/source/vm/classes.c index 88216e7a79..c6551ab1b9 100644 --- a/harbour/source/vm/classes.c +++ b/harbour/source/vm/classes.c @@ -271,6 +271,8 @@ static HB_SYMB s_opSymbols[ HB_OO_MAX_OPERATOR + 1 ] = { static HB_SYMB s___msgDestructor = { "__msgDestructor", {HB_FS_MESSAGE}, {NULL}, NULL }; static HB_SYMB s___msgOnError = { "__msgOnError", {HB_FS_MESSAGE}, {NULL}, NULL }; +static HB_SYMB s___msgNew = { "NEW", {HB_FS_MESSAGE}, {NULL}, NULL }; + static HB_SYMB s___msgSetData = { "__msgSetData", {HB_FS_MESSAGE}, {hb___msgSetData}, NULL }; static HB_SYMB s___msgGetData = { "__msgGetData", {HB_FS_MESSAGE}, {hb___msgGetData}, NULL }; static HB_SYMB s___msgSetClsData = { "__msgSetClsData", {HB_FS_MESSAGE}, {hb___msgSetClsData}, NULL }; @@ -290,13 +292,11 @@ static HB_SYMB s___msgClassSel = { "CLASSSEL", {HB_FS_MESSAGE}, {hb___m static HB_SYMB s___msgEval = { "EVAL", {HB_FS_MESSAGE}, {hb___msgEval}, NULL }; static HB_SYMB s___msgExec = { "EXEC", {HB_FS_MESSAGE}, {hb___msgNull}, NULL }; static HB_SYMB s___msgName = { "NAME", {HB_FS_MESSAGE}, {hb___msgNull}, NULL }; - -static HB_SYMB s___msgNew = { "NAME", {HB_FS_MESSAGE}, {NULL}, NULL }; - /* static HB_SYMB s___msgClsParent = { "ISDERIVEDFROM", {HB_FS_MESSAGE}, {hb___msgClsParent}, NULL }; static HB_SYMB s___msgClass = { "CLASS", {HB_FS_MESSAGE}, {hb___msgClass}, NULL }; */ + /* Default enumerator methods (FOR EACH) */ static HB_SYMB s___msgEnumIndex = { "__ENUMINDEX", {HB_FS_MESSAGE}, {hb___msgNull}, NULL }; static HB_SYMB s___msgEnumBase = { "__ENUMBASE", {HB_FS_MESSAGE}, {hb___msgNull}, NULL }; @@ -742,14 +742,6 @@ void hb_clsIsClassRef( void ) #endif } -HB_EXPORT char * hb_clsName( USHORT uiClass ) -{ - if( uiClass && uiClass <= s_uiClasses ) - return ( s_pClasses + ( uiClass - 1 ) )->szName; - else - return NULL; -} - static BOOL hb_clsHasParent( PCLASS pClass, PHB_DYNS pParentSym ) { PMETHOD pMethod = hb_clsFindMsg( pClass, pParentSym ); @@ -795,10 +787,7 @@ HB_EXPORT USHORT hb_objGetClass( PHB_ITEM pItem ) /* ================================================ */ /* - * = ( pObject ) - * * Get the class name of an object - * */ HB_EXPORT char * hb_objGetClsName( PHB_ITEM pObject ) { @@ -862,13 +851,18 @@ HB_EXPORT char * hb_objGetClsName( PHB_ITEM pObject ) return szClassName; } +HB_EXPORT char * hb_clsName( USHORT uiClass ) +{ + if( uiClass && uiClass <= s_uiClasses ) + return ( s_pClasses + ( uiClass - 1 ) )->szName; + else + return NULL; +} + /* - * = ( pObject ) - * * Get the real class name of an object message * Will return the class name from wich the message is inherited in case * of inheritance. - * */ HB_EXPORT char * hb_objGetRealClsName( PHB_ITEM pObject, char * szName ) { @@ -897,6 +891,34 @@ HB_EXPORT char * hb_objGetRealClsName( PHB_ITEM pObject, char * szName ) return hb_objGetClsName( pObject ); } +/* + * return real function name ignoring aliasing + */ +char * hb_clsRealMethodName( void ) +{ + LONG lOffset = hb_stackBaseProcOffset( 1 ); + char * szName = NULL; + + if( lOffset >=0 ) + { + PHB_STACK_STATE pStack = hb_stackItem( lOffset )->item.asSymbol.stackstate; + + if( pStack->uiClass && pStack->uiClass <= s_uiClasses ) + { + PCLASS pClass = ( s_pClasses + ( pStack->uiClass - 1 ) ); + + if( ( ULONG ) pStack->uiMethod < hb_clsMthNum( pClass ) ) + { + PMETHOD pMethod = pClass->pMethods + pStack->uiMethod; + + if( pMethod->pMessage ) + szName = pMethod->pMessage->pSymbol->szName; + } + } + } + return szName; +} + #if !defined( HB_REAL_BLOCK_SCOPE ) static LONG hb_clsSenderOffset( void ) { diff --git a/harbour/tests/clsscast.prg b/harbour/tests/clsscast.prg index a893d23d43..e1b3c0c227 100644 --- a/harbour/tests/clsscast.prg +++ b/harbour/tests/clsscast.prg @@ -32,17 +32,17 @@ local o:=myclass4():new(), i, cbErr ? DATE(), TIME(), VERSION(), OS() ? -? "myclass1 class vars:", str( __CLS_CNTCLSDATA(o:myclass1:classH), 3), " => should be: 3" -? "myclass2 class vars:", str( __CLS_CNTCLSDATA(o:myclass2:classH), 3), " => should be: 3" -? "myclass3 class vars:", str( __CLS_CNTCLSDATA(o:myclass3:classH), 3), " => should be: 3" +? "myclass1 shared class vars:", str( __CLS_CNTSHRDATA(o:myclass1:classH), 3), " => should be: 3" +? "myclass2 shared class vars:", str( __CLS_CNTSHRDATA(o:myclass2:classH), 3), " => should be: 3" +? "myclass3 shared class vars:", str( __CLS_CNTSHRDATA(o:myclass3:classH), 3), " => should be: 3" cbErr:=errorBlock({|oErr|break(oErr)}) begin sequence - ? "myclass4 class vars:", str( __CLS_CNTCLSDATA(o:myclass4:classH), 3), " => should be: 3" + ? "myclass4 shared class vars:", str( __CLS_CNTSHRDATA(o:myclass4:classH), 3), " => should be: 3" recover ? "ERROR: no selfclass casting" end errorBlock(cbErr) -? "myclass4 class vars:", str( __CLS_CNTCLSDATA(o:classH), 3), " => should be: 3" +? "myclass4 shared class vars:", str( __CLS_CNTSHRDATA(o:classH), 3), " => should be: 3" ? /* direct assignment, possible because the variables have differ names */ @@ -328,17 +328,17 @@ errorBlock(cbErr) for i:=1 to len(o); ?? "",o[i]; next ? " => shoule be [0]:" ? -? "myclass1 class vars:", str( __CLS_CNTCLSDATA(o:myclass1:classH), 3), " => should be: 3" -? "myclass2 class vars:", str( __CLS_CNTCLSDATA(o:myclass2:classH), 3), " => should be: 3" -? "myclass3 class vars:", str( __CLS_CNTCLSDATA(o:myclass3:classH), 3), " => should be: 3" +? "myclass1 shared class vars:", str( __CLS_CNTSHRDATA(o:myclass1:classH), 3), " => should be: 3" +? "myclass2 shared class vars:", str( __CLS_CNTSHRDATA(o:myclass2:classH), 3), " => should be: 3" +? "myclass3 shared class vars:", str( __CLS_CNTSHRDATA(o:myclass3:classH), 3), " => should be: 3" cbErr:=errorBlock({|oErr|break(oErr)}) begin sequence - ? "myclass4 class vars:", str( __CLS_CNTCLSDATA(o:myclass4:classH), 3), " => should be: 3" + ? "myclass4 shared class vars:", str( __CLS_CNTSHRDATA(o:myclass4:classH), 3), " => should be: 3" recover ? "ERROR: no selfclass casting" end errorBlock(cbErr) -? "myclass4 class vars:", str( __CLS_CNTCLSDATA(o:classH), 3), " => should be: 3" +? "myclass4 shared class vars:", str( __CLS_CNTSHRDATA(o:classH), 3), " => should be: 3" ? diff --git a/harbour/utils/hbtest/rt_class.prg b/harbour/utils/hbtest/rt_class.prg index ea0f7a2cd0..e03ae56eda 100644 --- a/harbour/utils/hbtest/rt_class.prg +++ b/harbour/utils/hbtest/rt_class.prg @@ -163,6 +163,18 @@ FUNCTION Main_CLASS() oValue := IVARSCLASS4():new() + TEST_LINE( oValue:x1 , "(x1)" ) + TEST_LINE( oValue:y1 , "(y1)" ) + TEST_LINE( oValue:z1 , "(z1)" ) + TEST_LINE( oValue:x2 , "(x2)" ) + TEST_LINE( oValue:y2 , "(y2)" ) + TEST_LINE( oValue:z2 , "(z2)" ) + TEST_LINE( oValue:x3 , "(x3)" ) + TEST_LINE( oValue:y3 , "(y3)" ) + TEST_LINE( oValue:z3 , "(z3)" ) + TEST_LINE( oValue:x4 , "(x4)" ) + TEST_LINE( oValue:y4 , "(y4)" ) + TEST_LINE( oValue:z4 , "(z4)" ) TEST_LINE( INSTANCE_DATA( oValue ) , "[12]: (x1) (y1) (z1) (x2) (y2) (z2) (x3) (y3) (z3) (x4) (y4) (z4)" ) TEST_LINE( __CLS_CNTCLSDATA( oValue:IVARSCLASS1:classH ) , 0 ) TEST_LINE( __CLS_CNTCLSDATA( oValue:IVARSCLASS2:classH ) , 0 ) @@ -214,9 +226,9 @@ FUNCTION Main_CLASS() TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 0 ) /* Setting IVARSCLASS1 instance variables... */ - TEST_LINE( oValue:IVARSCLASS1:x1 := "[X1]" , "[X1]" ) - TEST_LINE( oValue:IVARSCLASS1:y1 := "[Y1]" , "[Y1]" ) - TEST_LINE( oValue:IVARSCLASS1:z1 := "[Z1]" , "[Z1]" ) + TEST_LINE( oValue:IVARSCLASS1:x1 := "[X1]" , "[X1]" ) + TEST_LINE( oValue:IVARSCLASS1:y1 := "[Y1]" , "[Y1]" ) + TEST_LINE( oValue:IVARSCLASS1:z1 := "[Z1]" , "[Z1]" ) TEST_LINE( oValue:x1 , "[X1]" ) TEST_LINE( oValue:y1 , "[Y1]" ) @@ -243,9 +255,9 @@ FUNCTION Main_CLASS() TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 0 ) /* Setting IVARSCLASS2 instance variables... */ - TEST_LINE( oValue:IVARSCLASS2:x2 := "[X2]" , "[X2]" ) - TEST_LINE( oValue:IVARSCLASS2:y2 := "[Y2]" , "[Y2]" ) - TEST_LINE( oValue:IVARSCLASS2:z2 := "[Z2]" , "[Z2]" ) + TEST_LINE( oValue:IVARSCLASS2:x2 := "[X2]" , "[X2]" ) + TEST_LINE( oValue:IVARSCLASS2:y2 := "[Y2]" , "[Y2]" ) + TEST_LINE( oValue:IVARSCLASS2:z2 := "[Z2]" , "[Z2]" ) TEST_LINE( oValue:x1 , "[X1]" ) TEST_LINE( oValue:y1 , "[Y1]" ) @@ -272,9 +284,9 @@ FUNCTION Main_CLASS() TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 0 ) /* Setting IVARSCLASS3 instance variables... */ - TEST_LINE( oValue:IVARSCLASS3:x3 := "[X3]" , "[X3]" ) - TEST_LINE( oValue:IVARSCLASS3:y3 := "[Y3]" , "[Y3]" ) - TEST_LINE( oValue:IVARSCLASS3:z3 := "[Z3]" , "[Z3]" ) + TEST_LINE( oValue:IVARSCLASS3:x3 := "[X3]" , "[X3]" ) + TEST_LINE( oValue:IVARSCLASS3:y3 := "[Y3]" , "[Y3]" ) + TEST_LINE( oValue:IVARSCLASS3:z3 := "[Z3]" , "[Z3]" ) TEST_LINE( oValue:x1 , "[X1]" ) TEST_LINE( oValue:y1 , "[Y1]" ) @@ -301,9 +313,9 @@ FUNCTION Main_CLASS() TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 0 ) /* Setting IVARSCLASS4 instance variables... */ - TEST_LINE( oValue:IVARSCLASS4:x4 := "[X4]" , "[X4]" ) - TEST_LINE( oValue:IVARSCLASS4:y4 := "[Y4]" , "[Y4]" ) - TEST_LINE( oValue:IVARSCLASS4:z4 := "[Z4]" , "[Z4]" ) + TEST_LINE( oValue:IVARSCLASS4:x4 := "[X4]" , "[X4]" ) + TEST_LINE( oValue:IVARSCLASS4:y4 := "[Y4]" , "[Y4]" ) + TEST_LINE( oValue:IVARSCLASS4:z4 := "[Z4]" , "[Z4]" ) TEST_LINE( oValue:x1 , "[X1]" ) TEST_LINE( oValue:y1 , "[Y1]" ) @@ -330,9 +342,9 @@ FUNCTION Main_CLASS() TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 0 ) /* Setting IVARSCLASS3:IVARSCLASS1 instance variables... */ - TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS1:x1 := "" , "" ) - TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS1:y1 := "" , "" ) - TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS1:z1 := "" , "" ) + TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS1:x1 := "" , "" ) + TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS1:y1 := "" , "" ) + TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS1:z1 := "" , "" ) TEST_LINE( oValue:x1 , "" ) TEST_LINE( oValue:y1 , "" ) @@ -359,9 +371,9 @@ FUNCTION Main_CLASS() TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 0 ) /* Setting IVARSCLASS3:IVARSCLASS2 instance variables... */ - TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS2:x2 := "" , "" ) - TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS2:y2 := "" , "" ) - TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS2:z2 := "" , "" ) + TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS2:x2 := "" , "" ) + TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS2:y2 := "" , "" ) + TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS2:z2 := "" , "" ) TEST_LINE( oValue:x1 , "" ) TEST_LINE( oValue:y1 , "" ) @@ -422,6 +434,633 @@ FUNCTION Main_CLASS() TEST_LINE( __CLS_CNTSHRDATA( oValue:IVARSCLASS4:classH ) , 0 ) TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 0 ) + + /* Test class variables allocating and casting */ + + oValue := CVARSCLASS4():new() + + TEST_LINE( oValue:x1 , "(x1)" ) + TEST_LINE( oValue:y1 , "(y1)" ) + TEST_LINE( oValue:z1 , "(z1)" ) + TEST_LINE( oValue:x2 , "(x2)" ) + TEST_LINE( oValue:y2 , "(y2)" ) + TEST_LINE( oValue:z2 , "(z2)" ) + TEST_LINE( oValue:x3 , "(x3)" ) + TEST_LINE( oValue:y3 , "(y3)" ) + TEST_LINE( oValue:z3 , "(z3)" ) + TEST_LINE( oValue:x4 , "(x4)" ) + TEST_LINE( oValue:y4 , "(y4)" ) + TEST_LINE( oValue:z4 , "(z4)" ) + TEST_LINE( oValue:CVARSCLASS1:x1 , "(x1)" ) + TEST_LINE( oValue:CVARSCLASS1:y1 , "(y1)" ) + TEST_LINE( oValue:CVARSCLASS1:z1 , "(z1)" ) + TEST_LINE( oValue:CVARSCLASS2:x1 , "(x1)" ) + TEST_LINE( oValue:CVARSCLASS2:y1 , "(y1)" ) + TEST_LINE( oValue:CVARSCLASS2:z1 , "(z1)" ) + TEST_LINE( oValue:CVARSCLASS2:x2 , "(x2)" ) + TEST_LINE( oValue:CVARSCLASS2:y2 , "(y2)" ) + TEST_LINE( oValue:CVARSCLASS2:z2 , "(z2)" ) + TEST_LINE( oValue:CVARSCLASS3:x1 , "(x1)" ) + TEST_LINE( oValue:CVARSCLASS3:y1 , "(y1)" ) + TEST_LINE( oValue:CVARSCLASS3:z1 , "(z1)" ) + TEST_LINE( oValue:CVARSCLASS3:x2 , "(x2)" ) + TEST_LINE( oValue:CVARSCLASS3:y2 , "(y2)" ) + TEST_LINE( oValue:CVARSCLASS3:z2 , "(z2)" ) + TEST_LINE( oValue:CVARSCLASS3:x3 , "(x3)" ) + TEST_LINE( oValue:CVARSCLASS3:y3 , "(y3)" ) + TEST_LINE( oValue:CVARSCLASS3:z3 , "(z3)" ) + TEST_LINE( oValue:CVARSCLASS4:x1 , "(x1)" ) + TEST_LINE( oValue:CVARSCLASS4:y1 , "(y1)" ) + TEST_LINE( oValue:CVARSCLASS4:z1 , "(z1)" ) + TEST_LINE( oValue:CVARSCLASS4:x2 , "(x2)" ) + TEST_LINE( oValue:CVARSCLASS4:y2 , "(y2)" ) + TEST_LINE( oValue:CVARSCLASS4:z2 , "(z2)" ) + TEST_LINE( oValue:CVARSCLASS4:x3 , "(x3)" ) + TEST_LINE( oValue:CVARSCLASS4:y3 , "(y3)" ) + TEST_LINE( oValue:CVARSCLASS4:z3 , "(z3)" ) + TEST_LINE( oValue:CVARSCLASS4:x4 , "(x4)" ) + TEST_LINE( oValue:CVARSCLASS4:y4 , "(y4)" ) + TEST_LINE( oValue:CVARSCLASS4:z4 , "(z4)" ) + TEST_LINE( INSTANCE_DATA( oValue ) , "[0]:" ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS1:classH ) , 3 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS2:classH ) , 6 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS3:classH ) , 9 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS4:classH ) , 12 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:classH ) , 12 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS1:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS2:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS3:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS4:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 0 ) + + /* simple assignment... */ + TEST_LINE( oValue:x1 := " X1 " , " X1 " ) + TEST_LINE( oValue:y1 := " Y1 " , " Y1 " ) + TEST_LINE( oValue:z1 := " Z1 " , " Z1 " ) + TEST_LINE( oValue:x2 := " X2 " , " X2 " ) + TEST_LINE( oValue:y2 := " Y2 " , " Y2 " ) + TEST_LINE( oValue:z2 := " Z2 " , " Z2 " ) + TEST_LINE( oValue:x3 := " X3 " , " X3 " ) + TEST_LINE( oValue:y3 := " Y3 " , " Y3 " ) + TEST_LINE( oValue:z3 := " Z3 " , " Z3 " ) + TEST_LINE( oValue:x4 := " X4 " , " X4 " ) + TEST_LINE( oValue:y4 := " Y4 " , " Y4 " ) + TEST_LINE( oValue:z4 := " Z4 " , " Z4 " ) + + TEST_LINE( oValue:x1 , " X1 " ) + TEST_LINE( oValue:y1 , " Y1 " ) + TEST_LINE( oValue:z1 , " Z1 " ) + TEST_LINE( oValue:x2 , " X2 " ) + TEST_LINE( oValue:y2 , " Y2 " ) + TEST_LINE( oValue:z2 , " Z2 " ) + TEST_LINE( oValue:x3 , " X3 " ) + TEST_LINE( oValue:y3 , " Y3 " ) + TEST_LINE( oValue:z3 , " Z3 " ) + TEST_LINE( oValue:x4 , " X4 " ) + TEST_LINE( oValue:y4 , " Y4 " ) + TEST_LINE( oValue:z4 , " Z4 " ) + TEST_LINE( oValue:CVARSCLASS1:x1 , "(x1)" ) + TEST_LINE( oValue:CVARSCLASS1:y1 , "(y1)" ) + TEST_LINE( oValue:CVARSCLASS1:z1 , "(z1)" ) + TEST_LINE( oValue:CVARSCLASS2:x1 , "(x1)" ) + TEST_LINE( oValue:CVARSCLASS2:y1 , "(y1)" ) + TEST_LINE( oValue:CVARSCLASS2:z1 , "(z1)" ) + TEST_LINE( oValue:CVARSCLASS2:x2 , "(x2)" ) + TEST_LINE( oValue:CVARSCLASS2:y2 , "(y2)" ) + TEST_LINE( oValue:CVARSCLASS2:z2 , "(z2)" ) + TEST_LINE( oValue:CVARSCLASS3:x1 , "(x1)" ) + TEST_LINE( oValue:CVARSCLASS3:y1 , "(y1)" ) + TEST_LINE( oValue:CVARSCLASS3:z1 , "(z1)" ) + TEST_LINE( oValue:CVARSCLASS3:x2 , "(x2)" ) + TEST_LINE( oValue:CVARSCLASS3:y2 , "(y2)" ) + TEST_LINE( oValue:CVARSCLASS3:z2 , "(z2)" ) + TEST_LINE( oValue:CVARSCLASS3:x3 , "(x3)" ) + TEST_LINE( oValue:CVARSCLASS3:y3 , "(y3)" ) + TEST_LINE( oValue:CVARSCLASS3:z3 , "(z3)" ) + TEST_LINE( oValue:CVARSCLASS4:x1 , " X1 " ) + TEST_LINE( oValue:CVARSCLASS4:y1 , " Y1 " ) + TEST_LINE( oValue:CVARSCLASS4:z1 , " Z1 " ) + TEST_LINE( oValue:CVARSCLASS4:x2 , " X2 " ) + TEST_LINE( oValue:CVARSCLASS4:y2 , " Y2 " ) + TEST_LINE( oValue:CVARSCLASS4:z2 , " Z2 " ) + TEST_LINE( oValue:CVARSCLASS4:x3 , " X3 " ) + TEST_LINE( oValue:CVARSCLASS4:y3 , " Y3 " ) + TEST_LINE( oValue:CVARSCLASS4:z3 , " Z3 " ) + TEST_LINE( oValue:CVARSCLASS4:x4 , " X4 " ) + TEST_LINE( oValue:CVARSCLASS4:y4 , " Y4 " ) + TEST_LINE( oValue:CVARSCLASS4:z4 , " Z4 " ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS1:classH ) , 3 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS2:classH ) , 6 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS3:classH ) , 9 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS4:classH ) , 12 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:classH ) , 12 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS1:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS2:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS3:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS4:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 0 ) + + /* Setting CVARSCLASS1 class variables... */ + TEST_LINE( oValue:CVARSCLASS1:x1 := "[X1]" , "[X1]" ) + TEST_LINE( oValue:CVARSCLASS1:y1 := "[Y1]" , "[Y1]" ) + TEST_LINE( oValue:CVARSCLASS1:z1 := "[Z1]" , "[Z1]" ) + + TEST_LINE( oValue:x1 , " X1 " ) + TEST_LINE( oValue:y1 , " Y1 " ) + TEST_LINE( oValue:z1 , " Z1 " ) + TEST_LINE( oValue:x2 , " X2 " ) + TEST_LINE( oValue:y2 , " Y2 " ) + TEST_LINE( oValue:z2 , " Z2 " ) + TEST_LINE( oValue:x3 , " X3 " ) + TEST_LINE( oValue:y3 , " Y3 " ) + TEST_LINE( oValue:z3 , " Z3 " ) + TEST_LINE( oValue:x4 , " X4 " ) + TEST_LINE( oValue:y4 , " Y4 " ) + TEST_LINE( oValue:z4 , " Z4 " ) + TEST_LINE( oValue:CVARSCLASS1:x1 , "[X1]" ) + TEST_LINE( oValue:CVARSCLASS1:y1 , "[Y1]" ) + TEST_LINE( oValue:CVARSCLASS1:z1 , "[Z1]" ) + TEST_LINE( oValue:CVARSCLASS2:x1 , "(x1)" ) + TEST_LINE( oValue:CVARSCLASS2:y1 , "(y1)" ) + TEST_LINE( oValue:CVARSCLASS2:z1 , "(z1)" ) + TEST_LINE( oValue:CVARSCLASS2:x2 , "(x2)" ) + TEST_LINE( oValue:CVARSCLASS2:y2 , "(y2)" ) + TEST_LINE( oValue:CVARSCLASS2:z2 , "(z2)" ) + TEST_LINE( oValue:CVARSCLASS3:x1 , "(x1)" ) + TEST_LINE( oValue:CVARSCLASS3:y1 , "(y1)" ) + TEST_LINE( oValue:CVARSCLASS3:z1 , "(z1)" ) + TEST_LINE( oValue:CVARSCLASS3:x2 , "(x2)" ) + TEST_LINE( oValue:CVARSCLASS3:y2 , "(y2)" ) + TEST_LINE( oValue:CVARSCLASS3:z2 , "(z2)" ) + TEST_LINE( oValue:CVARSCLASS3:x3 , "(x3)" ) + TEST_LINE( oValue:CVARSCLASS3:y3 , "(y3)" ) + TEST_LINE( oValue:CVARSCLASS3:z3 , "(z3)" ) + TEST_LINE( oValue:CVARSCLASS4:x1 , " X1 " ) + TEST_LINE( oValue:CVARSCLASS4:y1 , " Y1 " ) + TEST_LINE( oValue:CVARSCLASS4:z1 , " Z1 " ) + TEST_LINE( oValue:CVARSCLASS4:x2 , " X2 " ) + TEST_LINE( oValue:CVARSCLASS4:y2 , " Y2 " ) + TEST_LINE( oValue:CVARSCLASS4:z2 , " Z2 " ) + TEST_LINE( oValue:CVARSCLASS4:x3 , " X3 " ) + TEST_LINE( oValue:CVARSCLASS4:y3 , " Y3 " ) + TEST_LINE( oValue:CVARSCLASS4:z3 , " Z3 " ) + TEST_LINE( oValue:CVARSCLASS4:x4 , " X4 " ) + TEST_LINE( oValue:CVARSCLASS4:y4 , " Y4 " ) + TEST_LINE( oValue:CVARSCLASS4:z4 , " Z4 " ) + TEST_LINE( INSTANCE_DATA( oValue ) , "[0]:" ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS1:classH ) , 3 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS2:classH ) , 6 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS3:classH ) , 9 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS4:classH ) , 12 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:classH ) , 12 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS1:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS2:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS3:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS4:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 0 ) + + /* Setting CVARSCLASS2 class variables... */ + TEST_LINE( oValue:CVARSCLASS2:x1 := "{X1}" , "{X1}" ) + TEST_LINE( oValue:CVARSCLASS2:y1 := "{Y1}" , "{Y1}" ) + TEST_LINE( oValue:CVARSCLASS2:z1 := "{Z1}" , "{Z1}" ) + TEST_LINE( oValue:CVARSCLASS2:x2 := "{X2}" , "{X2}" ) + TEST_LINE( oValue:CVARSCLASS2:y2 := "{Y2}" , "{Y2}" ) + TEST_LINE( oValue:CVARSCLASS2:z2 := "{Z2}" , "{Z2}" ) + + TEST_LINE( oValue:x1 , " X1 " ) + TEST_LINE( oValue:y1 , " Y1 " ) + TEST_LINE( oValue:z1 , " Z1 " ) + TEST_LINE( oValue:x2 , " X2 " ) + TEST_LINE( oValue:y2 , " Y2 " ) + TEST_LINE( oValue:z2 , " Z2 " ) + TEST_LINE( oValue:x3 , " X3 " ) + TEST_LINE( oValue:y3 , " Y3 " ) + TEST_LINE( oValue:z3 , " Z3 " ) + TEST_LINE( oValue:x4 , " X4 " ) + TEST_LINE( oValue:y4 , " Y4 " ) + TEST_LINE( oValue:z4 , " Z4 " ) + TEST_LINE( oValue:CVARSCLASS1:x1 , "[X1]" ) + TEST_LINE( oValue:CVARSCLASS1:y1 , "[Y1]" ) + TEST_LINE( oValue:CVARSCLASS1:z1 , "[Z1]" ) + TEST_LINE( oValue:CVARSCLASS2:x1 , "{X1}" ) + TEST_LINE( oValue:CVARSCLASS2:y1 , "{Y1}" ) + TEST_LINE( oValue:CVARSCLASS2:z1 , "{Z1}" ) + TEST_LINE( oValue:CVARSCLASS2:x2 , "{X2}" ) + TEST_LINE( oValue:CVARSCLASS2:y2 , "{Y2}" ) + TEST_LINE( oValue:CVARSCLASS2:z2 , "{Z2}" ) + TEST_LINE( oValue:CVARSCLASS3:x1 , "(x1)" ) + TEST_LINE( oValue:CVARSCLASS3:y1 , "(y1)" ) + TEST_LINE( oValue:CVARSCLASS3:z1 , "(z1)" ) + TEST_LINE( oValue:CVARSCLASS3:x2 , "(x2)" ) + TEST_LINE( oValue:CVARSCLASS3:y2 , "(y2)" ) + TEST_LINE( oValue:CVARSCLASS3:z2 , "(z2)" ) + TEST_LINE( oValue:CVARSCLASS3:x3 , "(x3)" ) + TEST_LINE( oValue:CVARSCLASS3:y3 , "(y3)" ) + TEST_LINE( oValue:CVARSCLASS3:z3 , "(z3)" ) + TEST_LINE( oValue:CVARSCLASS4:x1 , " X1 " ) + TEST_LINE( oValue:CVARSCLASS4:y1 , " Y1 " ) + TEST_LINE( oValue:CVARSCLASS4:z1 , " Z1 " ) + TEST_LINE( oValue:CVARSCLASS4:x2 , " X2 " ) + TEST_LINE( oValue:CVARSCLASS4:y2 , " Y2 " ) + TEST_LINE( oValue:CVARSCLASS4:z2 , " Z2 " ) + TEST_LINE( oValue:CVARSCLASS4:x3 , " X3 " ) + TEST_LINE( oValue:CVARSCLASS4:y3 , " Y3 " ) + TEST_LINE( oValue:CVARSCLASS4:z3 , " Z3 " ) + TEST_LINE( oValue:CVARSCLASS4:x4 , " X4 " ) + TEST_LINE( oValue:CVARSCLASS4:y4 , " Y4 " ) + TEST_LINE( oValue:CVARSCLASS4:z4 , " Z4 " ) + TEST_LINE( INSTANCE_DATA( oValue ) , "[0]:" ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS1:classH ) , 3 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS2:classH ) , 6 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS3:classH ) , 9 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS4:classH ) , 12 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:classH ) , 12 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS1:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS2:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS3:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS4:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 0 ) + + /* Setting CVARSCLASS3 class variables... */ + TEST_LINE( oValue:CVARSCLASS3:x1 := "" , "" ) + TEST_LINE( oValue:CVARSCLASS3:y1 := "" , "" ) + TEST_LINE( oValue:CVARSCLASS3:z1 := "" , "" ) + TEST_LINE( oValue:CVARSCLASS3:x2 := "" , "" ) + TEST_LINE( oValue:CVARSCLASS3:y2 := "" , "" ) + TEST_LINE( oValue:CVARSCLASS3:z2 := "" , "" ) + TEST_LINE( oValue:CVARSCLASS3:x3 := "" , "" ) + TEST_LINE( oValue:CVARSCLASS3:y3 := "" , "" ) + TEST_LINE( oValue:CVARSCLASS3:z3 := "" , "" ) + + TEST_LINE( oValue:x1 , " X1 " ) + TEST_LINE( oValue:y1 , " Y1 " ) + TEST_LINE( oValue:z1 , " Z1 " ) + TEST_LINE( oValue:x2 , " X2 " ) + TEST_LINE( oValue:y2 , " Y2 " ) + TEST_LINE( oValue:z2 , " Z2 " ) + TEST_LINE( oValue:x3 , " X3 " ) + TEST_LINE( oValue:y3 , " Y3 " ) + TEST_LINE( oValue:z3 , " Z3 " ) + TEST_LINE( oValue:x4 , " X4 " ) + TEST_LINE( oValue:y4 , " Y4 " ) + TEST_LINE( oValue:z4 , " Z4 " ) + TEST_LINE( oValue:CVARSCLASS1:x1 , "[X1]" ) + TEST_LINE( oValue:CVARSCLASS1:y1 , "[Y1]" ) + TEST_LINE( oValue:CVARSCLASS1:z1 , "[Z1]" ) + TEST_LINE( oValue:CVARSCLASS2:x1 , "{X1}" ) + TEST_LINE( oValue:CVARSCLASS2:y1 , "{Y1}" ) + TEST_LINE( oValue:CVARSCLASS2:z1 , "{Z1}" ) + TEST_LINE( oValue:CVARSCLASS2:x2 , "{X2}" ) + TEST_LINE( oValue:CVARSCLASS2:y2 , "{Y2}" ) + TEST_LINE( oValue:CVARSCLASS2:z2 , "{Z2}" ) + TEST_LINE( oValue:CVARSCLASS3:x1 , "" ) + TEST_LINE( oValue:CVARSCLASS3:y1 , "" ) + TEST_LINE( oValue:CVARSCLASS3:z1 , "" ) + TEST_LINE( oValue:CVARSCLASS3:x2 , "" ) + TEST_LINE( oValue:CVARSCLASS3:y2 , "" ) + TEST_LINE( oValue:CVARSCLASS3:z2 , "" ) + TEST_LINE( oValue:CVARSCLASS3:x3 , "" ) + TEST_LINE( oValue:CVARSCLASS3:y3 , "" ) + TEST_LINE( oValue:CVARSCLASS3:z3 , "" ) + TEST_LINE( oValue:CVARSCLASS4:x1 , " X1 " ) + TEST_LINE( oValue:CVARSCLASS4:y1 , " Y1 " ) + TEST_LINE( oValue:CVARSCLASS4:z1 , " Z1 " ) + TEST_LINE( oValue:CVARSCLASS4:x2 , " X2 " ) + TEST_LINE( oValue:CVARSCLASS4:y2 , " Y2 " ) + TEST_LINE( oValue:CVARSCLASS4:z2 , " Z2 " ) + TEST_LINE( oValue:CVARSCLASS4:x3 , " X3 " ) + TEST_LINE( oValue:CVARSCLASS4:y3 , " Y3 " ) + TEST_LINE( oValue:CVARSCLASS4:z3 , " Z3 " ) + TEST_LINE( oValue:CVARSCLASS4:x4 , " X4 " ) + TEST_LINE( oValue:CVARSCLASS4:y4 , " Y4 " ) + TEST_LINE( oValue:CVARSCLASS4:z4 , " Z4 " ) + TEST_LINE( INSTANCE_DATA( oValue ) , "[0]:" ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS1:classH ) , 3 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS2:classH ) , 6 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS3:classH ) , 9 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:CVARSCLASS4:classH ) , 12 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:classH ) , 12 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS1:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS2:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS3:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:CVARSCLASS4:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 0 ) + + + /* Test shared class variables allocating and casting */ + + oValue := SVARSCLASS4():new() + + TEST_LINE( oValue:x1 , "(x1)" ) + TEST_LINE( oValue:y1 , "(y1)" ) + TEST_LINE( oValue:z1 , "(z1)" ) + TEST_LINE( oValue:x2 , "(x2)" ) + TEST_LINE( oValue:y2 , "(y2)" ) + TEST_LINE( oValue:z2 , "(z2)" ) + TEST_LINE( oValue:x3 , "(x3)" ) + TEST_LINE( oValue:y3 , "(y3)" ) + TEST_LINE( oValue:z3 , "(z3)" ) + TEST_LINE( oValue:x4 , "(x4)" ) + TEST_LINE( oValue:y4 , "(y4)" ) + TEST_LINE( oValue:z4 , "(z4)" ) + TEST_LINE( oValue:SVARSCLASS1:x1 , "(x1)" ) + TEST_LINE( oValue:SVARSCLASS1:y1 , "(y1)" ) + TEST_LINE( oValue:SVARSCLASS1:z1 , "(z1)" ) + TEST_LINE( oValue:SVARSCLASS2:x1 , "(x1)" ) + TEST_LINE( oValue:SVARSCLASS2:y1 , "(y1)" ) + TEST_LINE( oValue:SVARSCLASS2:z1 , "(z1)" ) + TEST_LINE( oValue:SVARSCLASS2:x2 , "(x2)" ) + TEST_LINE( oValue:SVARSCLASS2:y2 , "(y2)" ) + TEST_LINE( oValue:SVARSCLASS2:z2 , "(z2)" ) + TEST_LINE( oValue:SVARSCLASS3:x1 , "(x1)" ) + TEST_LINE( oValue:SVARSCLASS3:y1 , "(y1)" ) + TEST_LINE( oValue:SVARSCLASS3:z1 , "(z1)" ) + TEST_LINE( oValue:SVARSCLASS3:x2 , "(x2)" ) + TEST_LINE( oValue:SVARSCLASS3:y2 , "(y2)" ) + TEST_LINE( oValue:SVARSCLASS3:z2 , "(z2)" ) + TEST_LINE( oValue:SVARSCLASS3:x3 , "(x3)" ) + TEST_LINE( oValue:SVARSCLASS3:y3 , "(y3)" ) + TEST_LINE( oValue:SVARSCLASS3:z3 , "(z3)" ) + TEST_LINE( oValue:SVARSCLASS4:x1 , "(x1)" ) + TEST_LINE( oValue:SVARSCLASS4:y1 , "(y1)" ) + TEST_LINE( oValue:SVARSCLASS4:z1 , "(z1)" ) + TEST_LINE( oValue:SVARSCLASS4:x2 , "(x2)" ) + TEST_LINE( oValue:SVARSCLASS4:y2 , "(y2)" ) + TEST_LINE( oValue:SVARSCLASS4:z2 , "(z2)" ) + TEST_LINE( oValue:SVARSCLASS4:x3 , "(x3)" ) + TEST_LINE( oValue:SVARSCLASS4:y3 , "(y3)" ) + TEST_LINE( oValue:SVARSCLASS4:z3 , "(z3)" ) + TEST_LINE( oValue:SVARSCLASS4:x4 , "(x4)" ) + TEST_LINE( oValue:SVARSCLASS4:y4 , "(y4)" ) + TEST_LINE( oValue:SVARSCLASS4:z4 , "(z4)" ) + TEST_LINE( INSTANCE_DATA( oValue ) , "[0]:" ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS1:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS2:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS3:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS4:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS1:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS2:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS3:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS4:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 3 ) + + /* simple assignment... */ + TEST_LINE( oValue:x1 := " X1 " , " X1 " ) + TEST_LINE( oValue:y1 := " Y1 " , " Y1 " ) + TEST_LINE( oValue:z1 := " Z1 " , " Z1 " ) + TEST_LINE( oValue:x2 := " X2 " , " X2 " ) + TEST_LINE( oValue:y2 := " Y2 " , " Y2 " ) + TEST_LINE( oValue:z2 := " Z2 " , " Z2 " ) + TEST_LINE( oValue:x3 := " X3 " , " X3 " ) + TEST_LINE( oValue:y3 := " Y3 " , " Y3 " ) + TEST_LINE( oValue:z3 := " Z3 " , " Z3 " ) + TEST_LINE( oValue:x4 := " X4 " , " X4 " ) + TEST_LINE( oValue:y4 := " Y4 " , " Y4 " ) + TEST_LINE( oValue:z4 := " Z4 " , " Z4 " ) + + TEST_LINE( oValue:x1 , " X1 " ) + TEST_LINE( oValue:y1 , " Y1 " ) + TEST_LINE( oValue:z1 , " Z1 " ) + TEST_LINE( oValue:x2 , " X2 " ) + TEST_LINE( oValue:y2 , " Y2 " ) + TEST_LINE( oValue:z2 , " Z2 " ) + TEST_LINE( oValue:x3 , " X3 " ) + TEST_LINE( oValue:y3 , " Y3 " ) + TEST_LINE( oValue:z3 , " Z3 " ) + TEST_LINE( oValue:x4 , " X4 " ) + TEST_LINE( oValue:y4 , " Y4 " ) + TEST_LINE( oValue:z4 , " Z4 " ) + TEST_LINE( oValue:SVARSCLASS1:x1 , " X1 " ) + TEST_LINE( oValue:SVARSCLASS1:y1 , " Y1 " ) + TEST_LINE( oValue:SVARSCLASS1:z1 , " Z1 " ) + TEST_LINE( oValue:SVARSCLASS2:x1 , " X1 " ) + TEST_LINE( oValue:SVARSCLASS2:y1 , " Y1 " ) + TEST_LINE( oValue:SVARSCLASS2:z1 , " Z1 " ) + TEST_LINE( oValue:SVARSCLASS2:x2 , " X2 " ) + TEST_LINE( oValue:SVARSCLASS2:y2 , " Y2 " ) + TEST_LINE( oValue:SVARSCLASS2:z2 , " Z2 " ) + TEST_LINE( oValue:SVARSCLASS3:x1 , " X1 " ) + TEST_LINE( oValue:SVARSCLASS3:y1 , " Y1 " ) + TEST_LINE( oValue:SVARSCLASS3:z1 , " Z1 " ) + TEST_LINE( oValue:SVARSCLASS3:x2 , " X2 " ) + TEST_LINE( oValue:SVARSCLASS3:y2 , " Y2 " ) + TEST_LINE( oValue:SVARSCLASS3:z2 , " Z2 " ) + TEST_LINE( oValue:SVARSCLASS3:x3 , " X3 " ) + TEST_LINE( oValue:SVARSCLASS3:y3 , " Y3 " ) + TEST_LINE( oValue:SVARSCLASS3:z3 , " Z3 " ) + TEST_LINE( oValue:SVARSCLASS4:x1 , " X1 " ) + TEST_LINE( oValue:SVARSCLASS4:y1 , " Y1 " ) + TEST_LINE( oValue:SVARSCLASS4:z1 , " Z1 " ) + TEST_LINE( oValue:SVARSCLASS4:x2 , " X2 " ) + TEST_LINE( oValue:SVARSCLASS4:y2 , " Y2 " ) + TEST_LINE( oValue:SVARSCLASS4:z2 , " Z2 " ) + TEST_LINE( oValue:SVARSCLASS4:x3 , " X3 " ) + TEST_LINE( oValue:SVARSCLASS4:y3 , " Y3 " ) + TEST_LINE( oValue:SVARSCLASS4:z3 , " Z3 " ) + TEST_LINE( oValue:SVARSCLASS4:x4 , " X4 " ) + TEST_LINE( oValue:SVARSCLASS4:y4 , " Y4 " ) + TEST_LINE( oValue:SVARSCLASS4:z4 , " Z4 " ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS1:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS2:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS3:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS4:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS1:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS2:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS3:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS4:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 3 ) + TEST_LINE( INSTANCE_DATA( oValue ) , "[0]:" ) + + /* Setting SVARSCLASS1 class variables... */ + TEST_LINE( oValue:SVARSCLASS1:x1 := "[X1]" , "[X1]" ) + TEST_LINE( oValue:SVARSCLASS1:y1 := "[Y1]" , "[Y1]" ) + TEST_LINE( oValue:SVARSCLASS1:z1 := "[Z1]" , "[Z1]" ) + + TEST_LINE( oValue:x1 , "[X1]" ) + TEST_LINE( oValue:y1 , "[Y1]" ) + TEST_LINE( oValue:z1 , "[Z1]" ) + TEST_LINE( oValue:x2 , " X2 " ) + TEST_LINE( oValue:y2 , " Y2 " ) + TEST_LINE( oValue:z2 , " Z2 " ) + TEST_LINE( oValue:x3 , " X3 " ) + TEST_LINE( oValue:y3 , " Y3 " ) + TEST_LINE( oValue:z3 , " Z3 " ) + TEST_LINE( oValue:x4 , " X4 " ) + TEST_LINE( oValue:y4 , " Y4 " ) + TEST_LINE( oValue:z4 , " Z4 " ) + TEST_LINE( oValue:SVARSCLASS1:x1 , "[X1]" ) + TEST_LINE( oValue:SVARSCLASS1:y1 , "[Y1]" ) + TEST_LINE( oValue:SVARSCLASS1:z1 , "[Z1]" ) + TEST_LINE( oValue:SVARSCLASS2:x1 , "[X1]" ) + TEST_LINE( oValue:SVARSCLASS2:y1 , "[Y1]" ) + TEST_LINE( oValue:SVARSCLASS2:z1 , "[Z1]" ) + TEST_LINE( oValue:SVARSCLASS2:x2 , " X2 " ) + TEST_LINE( oValue:SVARSCLASS2:y2 , " Y2 " ) + TEST_LINE( oValue:SVARSCLASS2:z2 , " Z2 " ) + TEST_LINE( oValue:SVARSCLASS3:x1 , "[X1]" ) + TEST_LINE( oValue:SVARSCLASS3:y1 , "[Y1]" ) + TEST_LINE( oValue:SVARSCLASS3:z1 , "[Z1]" ) + TEST_LINE( oValue:SVARSCLASS3:x2 , " X2 " ) + TEST_LINE( oValue:SVARSCLASS3:y2 , " Y2 " ) + TEST_LINE( oValue:SVARSCLASS3:z2 , " Z2 " ) + TEST_LINE( oValue:SVARSCLASS3:x3 , " X3 " ) + TEST_LINE( oValue:SVARSCLASS3:y3 , " Y3 " ) + TEST_LINE( oValue:SVARSCLASS3:z3 , " Z3 " ) + TEST_LINE( oValue:SVARSCLASS4:x1 , "[X1]" ) + TEST_LINE( oValue:SVARSCLASS4:y1 , "[Y1]" ) + TEST_LINE( oValue:SVARSCLASS4:z1 , "[Z1]" ) + TEST_LINE( oValue:SVARSCLASS4:x2 , " X2 " ) + TEST_LINE( oValue:SVARSCLASS4:y2 , " Y2 " ) + TEST_LINE( oValue:SVARSCLASS4:z2 , " Z2 " ) + TEST_LINE( oValue:SVARSCLASS4:x3 , " X3 " ) + TEST_LINE( oValue:SVARSCLASS4:y3 , " Y3 " ) + TEST_LINE( oValue:SVARSCLASS4:z3 , " Z3 " ) + TEST_LINE( oValue:SVARSCLASS4:x4 , " X4 " ) + TEST_LINE( oValue:SVARSCLASS4:y4 , " Y4 " ) + TEST_LINE( oValue:SVARSCLASS4:z4 , " Z4 " ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS1:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS2:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS3:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS4:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS1:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS2:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS3:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS4:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 3 ) + TEST_LINE( INSTANCE_DATA( oValue ) , "[0]:" ) + + /* Setting SVARSCLASS2 class variables... */ + TEST_LINE( oValue:SVARSCLASS2:x1 := "{X1}" , "{X1}" ) + TEST_LINE( oValue:SVARSCLASS2:y1 := "{Y1}" , "{Y1}" ) + TEST_LINE( oValue:SVARSCLASS2:z1 := "{Z1}" , "{Z1}" ) + TEST_LINE( oValue:SVARSCLASS2:x2 := "{X2}" , "{X2}" ) + TEST_LINE( oValue:SVARSCLASS2:y2 := "{Y2}" , "{Y2}" ) + TEST_LINE( oValue:SVARSCLASS2:z2 := "{Z2}" , "{Z2}" ) + + TEST_LINE( oValue:x1 , "{X1}" ) + TEST_LINE( oValue:y1 , "{Y1}" ) + TEST_LINE( oValue:z1 , "{Z1}" ) + TEST_LINE( oValue:x2 , "{X2}" ) + TEST_LINE( oValue:y2 , "{Y2}" ) + TEST_LINE( oValue:z2 , "{Z2}" ) + TEST_LINE( oValue:x3 , " X3 " ) + TEST_LINE( oValue:y3 , " Y3 " ) + TEST_LINE( oValue:z3 , " Z3 " ) + TEST_LINE( oValue:x4 , " X4 " ) + TEST_LINE( oValue:y4 , " Y4 " ) + TEST_LINE( oValue:z4 , " Z4 " ) + TEST_LINE( oValue:SVARSCLASS1:x1 , "{X1}" ) + TEST_LINE( oValue:SVARSCLASS1:y1 , "{Y1}" ) + TEST_LINE( oValue:SVARSCLASS1:z1 , "{Z1}" ) + TEST_LINE( oValue:SVARSCLASS2:x1 , "{X1}" ) + TEST_LINE( oValue:SVARSCLASS2:y1 , "{Y1}" ) + TEST_LINE( oValue:SVARSCLASS2:z1 , "{Z1}" ) + TEST_LINE( oValue:SVARSCLASS2:x2 , "{X2}" ) + TEST_LINE( oValue:SVARSCLASS2:y2 , "{Y2}" ) + TEST_LINE( oValue:SVARSCLASS2:z2 , "{Z2}" ) + TEST_LINE( oValue:SVARSCLASS3:x1 , "{X1}" ) + TEST_LINE( oValue:SVARSCLASS3:y1 , "{Y1}" ) + TEST_LINE( oValue:SVARSCLASS3:z1 , "{Z1}" ) + TEST_LINE( oValue:SVARSCLASS3:x2 , "{X2}" ) + TEST_LINE( oValue:SVARSCLASS3:y2 , "{Y2}" ) + TEST_LINE( oValue:SVARSCLASS3:z2 , "{Z2}" ) + TEST_LINE( oValue:SVARSCLASS3:x3 , " X3 " ) + TEST_LINE( oValue:SVARSCLASS3:y3 , " Y3 " ) + TEST_LINE( oValue:SVARSCLASS3:z3 , " Z3 " ) + TEST_LINE( oValue:SVARSCLASS4:x1 , "{X1}" ) + TEST_LINE( oValue:SVARSCLASS4:y1 , "{Y1}" ) + TEST_LINE( oValue:SVARSCLASS4:z1 , "{Z1}" ) + TEST_LINE( oValue:SVARSCLASS4:x2 , "{X2}" ) + TEST_LINE( oValue:SVARSCLASS4:y2 , "{Y2}" ) + TEST_LINE( oValue:SVARSCLASS4:z2 , "{Z2}" ) + TEST_LINE( oValue:SVARSCLASS4:x3 , " X3 " ) + TEST_LINE( oValue:SVARSCLASS4:y3 , " Y3 " ) + TEST_LINE( oValue:SVARSCLASS4:z3 , " Z3 " ) + TEST_LINE( oValue:SVARSCLASS4:x4 , " X4 " ) + TEST_LINE( oValue:SVARSCLASS4:y4 , " Y4 " ) + TEST_LINE( oValue:SVARSCLASS4:z4 , " Z4 " ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS1:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS2:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS3:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS4:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS1:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS2:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS3:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS4:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 3 ) + TEST_LINE( INSTANCE_DATA( oValue ) , "[0]:" ) + + /* Setting SVARSCLASS3 class variables... */ + TEST_LINE( oValue:SVARSCLASS3:x1 := "" , "" ) + TEST_LINE( oValue:SVARSCLASS3:y1 := "" , "" ) + TEST_LINE( oValue:SVARSCLASS3:z1 := "" , "" ) + TEST_LINE( oValue:SVARSCLASS3:x2 := "" , "" ) + TEST_LINE( oValue:SVARSCLASS3:y2 := "" , "" ) + TEST_LINE( oValue:SVARSCLASS3:z2 := "" , "" ) + TEST_LINE( oValue:SVARSCLASS3:x3 := "" , "" ) + TEST_LINE( oValue:SVARSCLASS3:y3 := "" , "" ) + TEST_LINE( oValue:SVARSCLASS3:z3 := "" , "" ) + + TEST_LINE( oValue:x1 , "" ) + TEST_LINE( oValue:y1 , "" ) + TEST_LINE( oValue:z1 , "" ) + TEST_LINE( oValue:x2 , "" ) + TEST_LINE( oValue:y2 , "" ) + TEST_LINE( oValue:z2 , "" ) + TEST_LINE( oValue:x3 , "" ) + TEST_LINE( oValue:y3 , "" ) + TEST_LINE( oValue:z3 , "" ) + TEST_LINE( oValue:x4 , " X4 " ) + TEST_LINE( oValue:y4 , " Y4 " ) + TEST_LINE( oValue:z4 , " Z4 " ) + TEST_LINE( oValue:SVARSCLASS1:x1 , "" ) + TEST_LINE( oValue:SVARSCLASS1:y1 , "" ) + TEST_LINE( oValue:SVARSCLASS1:z1 , "" ) + TEST_LINE( oValue:SVARSCLASS2:x1 , "" ) + TEST_LINE( oValue:SVARSCLASS2:y1 , "" ) + TEST_LINE( oValue:SVARSCLASS2:z1 , "" ) + TEST_LINE( oValue:SVARSCLASS2:x2 , "" ) + TEST_LINE( oValue:SVARSCLASS2:y2 , "" ) + TEST_LINE( oValue:SVARSCLASS2:z2 , "" ) + TEST_LINE( oValue:SVARSCLASS3:x1 , "" ) + TEST_LINE( oValue:SVARSCLASS3:y1 , "" ) + TEST_LINE( oValue:SVARSCLASS3:z1 , "" ) + TEST_LINE( oValue:SVARSCLASS3:x2 , "" ) + TEST_LINE( oValue:SVARSCLASS3:y2 , "" ) + TEST_LINE( oValue:SVARSCLASS3:z2 , "" ) + TEST_LINE( oValue:SVARSCLASS3:x3 , "" ) + TEST_LINE( oValue:SVARSCLASS3:y3 , "" ) + TEST_LINE( oValue:SVARSCLASS3:z3 , "" ) + TEST_LINE( oValue:SVARSCLASS4:x1 , "" ) + TEST_LINE( oValue:SVARSCLASS4:y1 , "" ) + TEST_LINE( oValue:SVARSCLASS4:z1 , "" ) + TEST_LINE( oValue:SVARSCLASS4:x2 , "" ) + TEST_LINE( oValue:SVARSCLASS4:y2 , "" ) + TEST_LINE( oValue:SVARSCLASS4:z2 , "" ) + TEST_LINE( oValue:SVARSCLASS4:x3 , "" ) + TEST_LINE( oValue:SVARSCLASS4:y3 , "" ) + TEST_LINE( oValue:SVARSCLASS4:z3 , "" ) + TEST_LINE( oValue:SVARSCLASS4:x4 , " X4 " ) + TEST_LINE( oValue:SVARSCLASS4:y4 , " Y4 " ) + TEST_LINE( oValue:SVARSCLASS4:z4 , " Z4 " ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS1:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS2:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS3:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:SVARSCLASS4:classH ) , 0 ) + TEST_LINE( __CLS_CNTCLSDATA( oValue:classH ) , 0 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS1:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS2:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS3:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:SVARSCLASS4:classH ) , 3 ) + TEST_LINE( __CLS_CNTSHRDATA( oValue:classH ) , 3 ) + TEST_LINE( INSTANCE_DATA( oValue ) , "[0]:" ) + + + #endif RETURN NIL @@ -506,6 +1145,65 @@ EXPORTED: VAR z4 INIT "(z4)" END CLASS + + +CREATE CLASS CVARSCLASS1 +EXPORTED: + CLASS VAR x1 INIT "(x1)" + CLASS VAR y1 INIT "(y1)" + CLASS VAR z1 INIT "(z1)" +END CLASS + +CREATE CLASS CVARSCLASS2 FROM CVARSCLASS1 +EXPORTED: + CLASS VAR x2 INIT "(x2)" + CLASS VAR y2 INIT "(y2)" + CLASS VAR z2 INIT "(z2)" +END CLASS + +CREATE CLASS CVARSCLASS3 FROM CVARSCLASS1, CVARSCLASS2 +EXPORTED: + CLASS VAR x3 INIT "(x3)" + CLASS VAR y3 INIT "(y3)" + CLASS VAR z3 INIT "(z3)" +END CLASS + +CREATE CLASS CVARSCLASS4 FROM CVARSCLASS3, CVARSCLASS2 +EXPORTED: + CLASS VAR x4 INIT "(x4)" + CLASS VAR y4 INIT "(y4)" + CLASS VAR z4 INIT "(z4)" +END CLASS + + + +CREATE CLASS SVARSCLASS1 +EXPORTED: + CLASS VAR x1 INIT "(x1)" SHARED + CLASS VAR y1 INIT "(y1)" SHARED + CLASS VAR z1 INIT "(z1)" SHARED +endclass + +CREATE CLASS SVARSCLASS2 FROM SVARSCLASS1 +EXPORTED: + CLASS VAR x2 INIT "(x2)" SHARED + CLASS VAR y2 INIT "(y2)" SHARED + CLASS VAR z2 INIT "(z2)" SHARED +endclass + +CREATE CLASS SVARSCLASS3 FROM SVARSCLASS1, SVARSCLASS2 +EXPORTED: + CLASS VAR x3 INIT "(x3)" SHARED + CLASS VAR y3 INIT "(y3)" SHARED + CLASS VAR z3 INIT "(z3)" SHARED +endclass + +CREATE CLASS SVARSCLASS4 FROM SVARSCLASS3, SVARSCLASS2 +EXPORTED: + CLASS VAR x4 INIT "(x4)" SHARED + CLASS VAR y4 INIT "(y4)" SHARED + CLASS VAR z4 INIT "(z4)" SHARED +endclass #endif