2006-09-17 02:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/source/vm/classes.c
    + added hb_clsRealMethodName() function which I'm using in some
      test code

  * harbour/tests/clsscast.prg
    * updated to use __CLS_CNTSHRDATA() instead of __CLS_CNTCLSDATA()

  * harbour/utils/hbtest/rt_class.prg
    + added tests for class and shared class variables/allocating
This commit is contained in:
Przemyslaw Czerpak
2006-09-18 00:01:53 +00:00
parent a09dc85fbe
commit dc9ebdf37c
4 changed files with 776 additions and 45 deletions

View File

@@ -8,6 +8,17 @@
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
* 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

View File

@@ -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 )
/* ================================================ */
/*
* <szName> = ( 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;
}
/*
* <szName> = ( 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 )
{

View File

@@ -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"
?

View File

@@ -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 := "<X1>" , "<X1>" )
TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS1:y1 := "<Y1>" , "<Y1>" )
TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS1:z1 := "<Z1>" , "<Z1>" )
TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS1:x1 := "<X1>" , "<X1>" )
TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS1:y1 := "<Y1>" , "<Y1>" )
TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS1:z1 := "<Z1>" , "<Z1>" )
TEST_LINE( oValue:x1 , "<X1>" )
TEST_LINE( oValue:y1 , "<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 := "<X2>" , "<X2>" )
TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS2:y2 := "<Y2>" , "<Y2>" )
TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS2:z2 := "<Z2>" , "<Z2>" )
TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS2:x2 := "<X2>" , "<X2>" )
TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS2:y2 := "<Y2>" , "<Y2>" )
TEST_LINE( oValue:IVARSCLASS3:IVARSCLASS2:z2 := "<Z2>" , "<Z2>" )
TEST_LINE( oValue:x1 , "<X1>" )
TEST_LINE( oValue:y1 , "<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 := "<X1>" , "<X1>" )
TEST_LINE( oValue:CVARSCLASS3:y1 := "<Y1>" , "<Y1>" )
TEST_LINE( oValue:CVARSCLASS3:z1 := "<Z1>" , "<Z1>" )
TEST_LINE( oValue:CVARSCLASS3:x2 := "<X2>" , "<X2>" )
TEST_LINE( oValue:CVARSCLASS3:y2 := "<Y2>" , "<Y2>" )
TEST_LINE( oValue:CVARSCLASS3:z2 := "<Z2>" , "<Z2>" )
TEST_LINE( oValue:CVARSCLASS3:x3 := "<X3>" , "<X3>" )
TEST_LINE( oValue:CVARSCLASS3:y3 := "<Y3>" , "<Y3>" )
TEST_LINE( oValue:CVARSCLASS3:z3 := "<Z3>" , "<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 , "<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 )
/* 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 := "<X1>" , "<X1>" )
TEST_LINE( oValue:SVARSCLASS3:y1 := "<Y1>" , "<Y1>" )
TEST_LINE( oValue:SVARSCLASS3:z1 := "<Z1>" , "<Z1>" )
TEST_LINE( oValue:SVARSCLASS3:x2 := "<X2>" , "<X2>" )
TEST_LINE( oValue:SVARSCLASS3:y2 := "<Y2>" , "<Y2>" )
TEST_LINE( oValue:SVARSCLASS3:z2 := "<Z2>" , "<Z2>" )
TEST_LINE( oValue:SVARSCLASS3:x3 := "<X3>" , "<X3>" )
TEST_LINE( oValue:SVARSCLASS3:y3 := "<Y3>" , "<Y3>" )
TEST_LINE( oValue:SVARSCLASS3:z3 := "<Z3>" , "<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: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]:" )
#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