diff --git a/harbour/source/vm/classes.c b/harbour/source/vm/classes.c index 5612832cad..8bbc699dc7 100644 --- a/harbour/source/vm/classes.c +++ b/harbour/source/vm/classes.c @@ -320,17 +320,16 @@ static void hb_clsRelease( PCLASS pClass ) HB_TRACE(HB_TR_DEBUG, ("hb_clsRelease(%p)", pClass)); for( uiAt = 0; uiAt < uiLimit; uiAt++, pMeth++ ) - { + { if( pMeth->pInitValue ) hb_itemRelease( pMeth->pInitValue ); - } + } hb_xfree( pClass->szName ); hb_xfree( pClass->pMethods ); hb_itemRelease( pClass->pClassDatas ); hb_itemRelease( pClass->pInlines ); - } @@ -386,10 +385,10 @@ void hb_clsIsClassRef( void ) uiLimit = ( USHORT ) ( pClass->uiHashKey * BUCKET ); pMeth = pClass->pMethods; for( uiAt = 0; uiAt < uiLimit; uiAt++, pMeth++ ) - { + { if( pMeth->pInitValue ) hb_gcItemRef( pMeth->pInitValue ); - } + } ++pClass; } @@ -672,7 +671,7 @@ char * hb_objGetRealClsName( PHB_ITEM pObject, char * szName ) if( ! pObject->item.asArray.value->uiClass ) szClassName = "ARRAY"; else - { + { PHB_DYNS pMsg = hb_dynsymFindName( szName ); USHORT uiClass; USHORT uiCurCls; @@ -681,51 +680,50 @@ char * hb_objGetRealClsName( PHB_ITEM pObject, char * szName ) uiClass = pObject->item.asArray.value->uiClass; /* default value to current class object */ - if (pObject->item.asArray.value->puiClsTree && pObject->item.asArray.value->puiClsTree[0]) - { - uiClsTree = pObject->item.asArray.value->puiClsTree[0] ; - uiCurCls = pObject->item.asArray.value->puiClsTree[uiClsTree] ; - } + if( pObject->item.asArray.value->puiClsTree && pObject->item.asArray.value->puiClsTree[0] ) + { + uiClsTree = pObject->item.asArray.value->puiClsTree[0] ; + uiCurCls = pObject->item.asArray.value->puiClsTree[uiClsTree] ; + } else - { + { uiClsTree = 1; /* Flag value */ uiCurCls = uiClass; - } + } while (uiClsTree) - { - if( uiCurCls && uiCurCls <= s_uiClasses ) + { + if( uiCurCls && uiCurCls <= s_uiClasses ) { - PCLASS pClass = s_pClasses + ( uiCurCls - 1 ); - USHORT uiAt = ( USHORT ) ( ( ( hb_cls_MsgToNum( pMsg ) ) % pClass->uiHashKey ) * BUCKET ); - USHORT uiMask = ( USHORT ) ( pClass->uiHashKey * BUCKET ); - USHORT uiLimit = ( USHORT ) ( uiAt ? ( uiAt - 1 ) : ( uiMask - 1 ) ); + PCLASS pClass = s_pClasses + ( uiCurCls - 1 ); + USHORT uiAt = ( USHORT ) ( ( ( hb_cls_MsgToNum( pMsg ) ) % pClass->uiHashKey ) * BUCKET ); + USHORT uiMask = ( USHORT ) ( pClass->uiHashKey * BUCKET ); + USHORT uiLimit = ( USHORT ) ( uiAt ? ( uiAt - 1 ) : ( uiMask - 1 ) ); - while( uiAt != uiLimit ) - { - if( pClass->pMethods[ uiAt ].pMessage == pMsg ) - { - uiClass = (pClass->pMethods + uiAt)->uiSprClass; - uiClsTree=1; /* Flag Value */ - break; - } - uiAt++; - if( uiAt == uiMask ) - uiAt = 0; - } + while( uiAt != uiLimit ) + { + if( pClass->pMethods[ uiAt ].pMessage == pMsg ) + { + uiClass = (pClass->pMethods + uiAt)->uiSprClass; + uiClsTree=1; /* Flag Value */ + break; + } + uiAt++; + if( uiAt == uiMask ) + uiAt = 0; + } } - if (-- uiClsTree) - uiCurCls = pObject->item.asArray.value->puiClsTree[uiClsTree] ; - + if( --uiClsTree ) + uiCurCls = pObject->item.asArray.value->puiClsTree[uiClsTree]; } - if( uiClass && uiClass <= s_uiClasses ) - szClassName = ( s_pClasses + uiClass - 1 )->szName; - else - szClassName = "UNKNOWN"; + if( uiClass && uiClass <= s_uiClasses ) + szClassName = ( s_pClasses + uiClass - 1 )->szName; + else + szClassName = "UNKNOWN"; - } + } } else /* built in types */ { @@ -1479,8 +1477,8 @@ HB_FUNC( __CLSDELMSG ) while( pClass->pMethods[ uiAt ].pMessage && uiAt != uiLimit ) { hb_xmemcpy( pClass->pMethods + uiAt, - pClass->pMethods + ( ( uiAt == uiMask ) ? 0 : uiAt + 1 ), - sizeof( METHOD ) ); + pClass->pMethods + ( ( uiAt == uiMask ) ? 0 : uiAt + 1 ), + sizeof( METHOD ) ); uiAt++; if( uiAt == uiMask ) uiAt = 0; @@ -1531,8 +1529,7 @@ static PHB_ITEM hb_clsInst( USHORT uiClass ) pSelf->item.asArray.value->uiClass = uiClass; pSelf->item.asArray.value->uiPrevCls = 0; - - pSelf->item.asArray.value->puiClsTree = NULL; + pSelf->item.asArray.value->puiClsTree = NULL; /* pSelf->item.asArray.value->puiClsTree = ( USHORT * ) hb_xgrab( sizeof( USHORT ) ); */ /* pSelf->item.asArray.value->puiClsTree[0]=0; */ @@ -1734,15 +1731,15 @@ HB_FUNC( __OBJCLONE ) PHB_ITEM pDstObject ; if( pSrcObject ) - { - pDstObject= hb_arrayClone( pSrcObject, NULL ) ; + { + pDstObject = hb_arrayClone( pSrcObject, NULL ) ; pDstObject->item.asArray.value->puiClsTree = NULL; /* pDstObject->item.asArray.value->puiClsTree = ( USHORT * ) hb_xgrab( sizeof( USHORT ) ); */ /* pDstObject->item.asArray.value->puiClsTree[0]=0; */ hb_itemRelease( hb_itemReturn( pDstObject ) ); - } + } else hb_errRT_BASE( EG_ARG, 3001, NULL, "__OBJCLONE", 0 ); } @@ -1940,7 +1937,7 @@ HB_FUNC( __CLASSSEL ) { PHB_ITEM pItem = hb_itemPutC( NULL, pMessage->pSymbol->szName ); /* Add to array */ - hb_itemArrayPut( pReturn, ++uiPos, pItem ); + hb_arraySet( pReturn, ++uiPos, pItem ); hb_itemRelease( pItem ); } } @@ -2168,7 +2165,7 @@ static HARBOUR hb___msgClsSel( void ) PHB_ITEM pItem = hb_itemPutC( NULL, pMessage->pSymbol->szName ); /* Add to array */ - hb_itemArrayPut( pReturn, ++uiPos, pItem ); + hb_arraySet( pReturn, ++uiPos, pItem ); hb_itemRelease( pItem ); } } @@ -2252,7 +2249,7 @@ static HARBOUR hb___msgSuper( void ) PHB_ITEM pCopy = hb_itemArrayNew(1); /* Now save the Self object as the 1st elem. */ - hb_itemArrayPut( pCopy, 1 , pObject ); + hb_arraySet( pCopy, 1 , pObject ); /* Or Store original object as 1st elem */ /* hb_itemCopy( pCopy->item.asArray.value->pItems , pObject) ; */ @@ -2260,11 +2257,9 @@ static HARBOUR hb___msgSuper( void ) /* And transform it into a fake object */ pCopy->item.asArray.value->uiPrevCls = pObject->item.asArray.value->uiClass; /* backup of actual handel */ pCopy->item.asArray.value->uiClass = s_pMethod->uiSprClass; /* superclass handel casting */ + pCopy->item.asArray.value->puiClsTree = NULL; - pCopy->item.asArray.value->puiClsTree = 0 ; - - - hb_itemRelease(hb_itemReturn( pCopy )); + hb_itemRelease( hb_itemReturn( pCopy ) ); } /* @@ -2404,7 +2399,7 @@ HB_FUNC( __CLS_PARAM ) for( n = 1; n <= uiParam; n++ ) { PHB_ITEM iTmp = hb_itemParam( n ); - hb_itemArrayPut( array, n, iTmp ); + hb_arraySet( array, n, iTmp ); hb_itemRelease( iTmp ); } } @@ -2412,7 +2407,7 @@ HB_FUNC( __CLS_PARAM ) { PHB_ITEM iTmp = hb_itemPutC( NULL, (char *) "HBObject" ); array = hb_itemArrayNew( 1 ); - hb_itemArrayPut( array, 1, iTmp ); + hb_arraySet( array, 1, iTmp ); hb_itemRelease( iTmp ); } @@ -2431,7 +2426,7 @@ HB_FUNC( __CLS_PAR00 ) for( n = 1; n <= uiParam; n++ ) { PHB_ITEM iTmp = hb_itemParam( n ); - hb_itemArrayPut( array, n, iTmp ); + hb_arraySet( array, n, iTmp ); hb_itemRelease( iTmp ); } @@ -2526,4 +2521,3 @@ HB_FUNC( __CLSGETPROPERTIES ) hb_itemRelease( hb_itemReturn( pReturn ) ); } -