2002-09-17 21:55 UTC-01 jf lefebvre (mafact) <jfl@mafact.com>
This commit is contained in:
@@ -8,6 +8,12 @@
|
||||
2002-12-01 23:12 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2002-09-17 21:55 UTC-01 jf lefebvre (mafact) <jfl@mafact.com>
|
||||
* source/rdd/dbfcdx\dbfcdx1.c
|
||||
! Added needed typecasting for M$soft C
|
||||
* source/vm/classes.c
|
||||
! Minor cosmetic change and syncro with xHarbour
|
||||
|
||||
2002-09-13 23:30 UTC-0400 David G. Holm <dholm@jsd-llc.com>
|
||||
* source/rtl/dbdelim.prg
|
||||
! Bug fix for fields that have an embedded delimiter.
|
||||
|
||||
@@ -3025,7 +3025,7 @@ static void hb_cdxSortFree( LPSORTINFO pSort )
|
||||
}
|
||||
if ( pSort->szTempFileName )
|
||||
{
|
||||
hb_fsDelete( pSort->szTempFileName );
|
||||
hb_fsDelete( (unsigned char *) pSort->szTempFileName );
|
||||
hb_xfree( pSort->szTempFileName );
|
||||
pSort->szTempFileName = NULL;
|
||||
}
|
||||
@@ -3306,7 +3306,7 @@ static int hb_cdxSortSwapBuildIndex( LPSORTINFO pSort )
|
||||
USHORT nKeyLen;
|
||||
BOOL lCont;
|
||||
|
||||
pSort->pSwapPage = hb_xgrab( pSort->nSwapPages * sizeof( SORTSWAPPAGE ) );
|
||||
pSort->pSwapPage = (_SORTSWAPPAGE *) hb_xgrab( pSort->nSwapPages * sizeof( SORTSWAPPAGE ) );
|
||||
if ( !pSort->pSwapPage )
|
||||
hb_errInternal( HB_EI_ERRUNRECOV, "hb_cdxTagDoIndex: Not enough memory for index merging", "hb_cdxTagDoIndex", NULL );
|
||||
|
||||
|
||||
@@ -138,6 +138,7 @@
|
||||
*/
|
||||
|
||||
#include "hbapi.h"
|
||||
|
||||
#include "hbstack.h"
|
||||
#include "hbapierr.h"
|
||||
#include "hbapiitm.h"
|
||||
@@ -246,7 +247,7 @@ static void hb_clsDictRealloc( PCLASS pClass )
|
||||
if( pClass )
|
||||
{
|
||||
PMETHOD pNewMethods;
|
||||
USHORT uiNewHashKey = pClass->uiHashKey;
|
||||
USHORT uiNewHashKey = pClass->uiHashKey * 2 ;
|
||||
USHORT ui;
|
||||
USHORT uiLimit = ( USHORT ) ( pClass->uiHashKey * BUCKET );
|
||||
|
||||
@@ -319,17 +320,18 @@ 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 );
|
||||
}
|
||||
{
|
||||
if( pMeth->pInitValue )
|
||||
{
|
||||
hb_itemRelease( pMeth->pInitValue );
|
||||
}
|
||||
}
|
||||
|
||||
hb_xfree( pClass->szName );
|
||||
hb_xfree( pClass->pMethods );
|
||||
|
||||
hb_itemRelease( pClass->pClassDatas );
|
||||
hb_itemRelease( pClass->pInlines );
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -344,17 +346,38 @@ void hb_clsReleaseAll( void )
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_clsReleaseAll()"));
|
||||
|
||||
/* for( uiClass = 0 ; uiClass < s_uiClasses ; uiClass++ ) */
|
||||
/* hb_clsRelease( s_pClasses + uiClass ); */
|
||||
for( uiClass = 0 ; uiClass < s_uiClasses ; uiClass++ )
|
||||
{
|
||||
|
||||
uiClass = (SHORT) (s_uiClasses-1) ;
|
||||
s_uiClasses = 0 ;
|
||||
|
||||
for( ; uiClass >= 0 ; uiClass-- )
|
||||
hb_clsRelease( s_pClasses + uiClass );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
hb_clsRelease( s_pClasses + uiClass );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
if( s_pClasses )
|
||||
{
|
||||
hb_xfree( s_pClasses );
|
||||
}
|
||||
|
||||
s_uiClasses = 0;
|
||||
s_pClasses = NULL;
|
||||
@@ -377,18 +400,24 @@ void hb_clsIsClassRef( void )
|
||||
while( uiClass-- )
|
||||
{
|
||||
if( pClass->pInlines )
|
||||
{
|
||||
hb_gcItemRef( pClass->pInlines );
|
||||
}
|
||||
|
||||
if( pClass->pClassDatas )
|
||||
{
|
||||
hb_gcItemRef( pClass->pClassDatas );
|
||||
}
|
||||
|
||||
uiLimit = ( USHORT ) ( pClass->uiHashKey * BUCKET );
|
||||
pMeth = pClass->pMethods;
|
||||
for( uiAt = 0; uiAt < uiLimit; uiAt++, pMeth++ )
|
||||
{
|
||||
{
|
||||
if( pMeth->pInitValue )
|
||||
{
|
||||
hb_gcItemRef( pMeth->pInitValue );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
++pClass;
|
||||
}
|
||||
@@ -669,9 +698,11 @@ char * hb_objGetRealClsName( PHB_ITEM pObject, char * szName )
|
||||
if( HB_IS_ARRAY( pObject ) )
|
||||
{
|
||||
if( ! pObject->item.asArray.value->uiClass )
|
||||
{
|
||||
szClassName = "ARRAY";
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
PHB_DYNS pMsg = hb_dynsymFindName( szName );
|
||||
USHORT uiClass;
|
||||
USHORT uiCurCls;
|
||||
@@ -708,23 +739,33 @@ char * hb_objGetRealClsName( PHB_ITEM pObject, char * szName )
|
||||
uiClsTree=1; /* Flag Value */
|
||||
break;
|
||||
}
|
||||
|
||||
uiAt++;
|
||||
|
||||
if( uiAt == uiMask )
|
||||
{
|
||||
uiAt = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (-- uiClsTree)
|
||||
{
|
||||
uiCurCls = pObject->item.asArray.value->puiClsTree[uiClsTree] ;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if( uiClass && uiClass <= s_uiClasses )
|
||||
{
|
||||
szClassName = ( s_pClasses + uiClass - 1 )->szName;
|
||||
}
|
||||
else
|
||||
{
|
||||
szClassName = "UNKNOWN";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
else /* built in types */
|
||||
{
|
||||
@@ -790,9 +831,13 @@ PHB_FUNC hb_objGetMthd( PHB_ITEM pObject, PHB_SYMB pMessage, BOOL lAllowErrFunc
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_objGetMthd(%p, %p)", pObject, pMessage));
|
||||
|
||||
if( pObject->type == HB_IT_ARRAY )
|
||||
{
|
||||
uiClass = pObject->item.asArray.value->uiClass;
|
||||
}
|
||||
else
|
||||
{
|
||||
uiClass = 0;
|
||||
}
|
||||
|
||||
if( uiClass && uiClass <= s_uiClasses )
|
||||
{
|
||||
@@ -803,7 +848,6 @@ PHB_FUNC hb_objGetMthd( PHB_ITEM pObject, PHB_SYMB pMessage, BOOL lAllowErrFunc
|
||||
|
||||
while( uiAt != uiLimit )
|
||||
{
|
||||
|
||||
if( pClass->pMethods[ uiAt ].pMessage == pMsg )
|
||||
{
|
||||
pMethod = pClass->pMethods + uiAt;
|
||||
@@ -812,7 +856,9 @@ PHB_FUNC hb_objGetMthd( PHB_ITEM pObject, PHB_SYMB pMessage, BOOL lAllowErrFunc
|
||||
s_pMethod = pMethod ;
|
||||
|
||||
if( hb_bProfiler )
|
||||
{
|
||||
pMethod->ulCalls++; /* Profiler */
|
||||
}
|
||||
|
||||
return pFunction;
|
||||
}
|
||||
@@ -913,9 +959,13 @@ ULONG hb_objHasMsg( PHB_ITEM pObject, char *szString )
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_objHasMsg(%p, %s)", pObject, szString));
|
||||
|
||||
if( pDynSym )
|
||||
{
|
||||
return ( ULONG ) hb_objGetMthd( pObject, pDynSym->pSymbol, FALSE );
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1477,12 +1527,13 @@ HB_FUNC( __CLSDELMSG )
|
||||
/* Move messages */
|
||||
while( pClass->pMethods[ uiAt ].pMessage && uiAt != uiLimit )
|
||||
{
|
||||
hb_xmemcpy( pClass->pMethods + uiAt,
|
||||
pClass->pMethods + ( ( uiAt == uiMask ) ? 0 : uiAt + 1 ),
|
||||
sizeof( METHOD ) );
|
||||
hb_xmemcpy( pClass->pMethods + uiAt, pClass->pMethods + ( uiAt == uiMask ? 0 : uiAt + 1 ), sizeof( METHOD ) );
|
||||
uiAt++;
|
||||
|
||||
if( uiAt == uiMask )
|
||||
{
|
||||
uiAt = 0;
|
||||
}
|
||||
}
|
||||
memset( pClass->pMethods + uiAt, 0, sizeof( METHOD ) );
|
||||
pClass->uiMethods--; /* Decrease number messages */
|
||||
@@ -1504,7 +1555,9 @@ HB_FUNC( __CLSINST )
|
||||
pSelf = hb_clsInst( ( USHORT ) hb_parni( 1 ));
|
||||
|
||||
if( pSelf )
|
||||
{
|
||||
hb_itemRelease( hb_itemReturn( pSelf ) );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1533,9 +1586,6 @@ static PHB_ITEM hb_clsInst( USHORT uiClass )
|
||||
|
||||
pSelf->item.asArray.value->puiClsTree = NULL;
|
||||
|
||||
/* pSelf->item.asArray.value->puiClsTree = ( USHORT * ) hb_xgrab( sizeof( USHORT ) ); */
|
||||
/* pSelf->item.asArray.value->puiClsTree[0]=0; */
|
||||
|
||||
/* Initialise value if initialisation was requested */
|
||||
pMeth = pClass->pMethods;
|
||||
for( uiAt = 0; uiAt < uiLimit; uiAt++, pMeth++ )
|
||||
@@ -1550,13 +1600,16 @@ static PHB_ITEM hb_clsInst( USHORT uiClass )
|
||||
HB_ITEM init;
|
||||
PHB_ITEM pInit;
|
||||
|
||||
hb_itemInit( &init );
|
||||
( &init )->type = HB_IT_NIL; // hb_itemInit( &init );
|
||||
|
||||
hb_arrayGet( pClass->pClassDatas, pMeth->uiData, &init );
|
||||
|
||||
if( init.type == HB_IT_NIL )
|
||||
{
|
||||
|
||||
if( HB_IS_ARRAY( pMeth->pInitValue ) )
|
||||
{
|
||||
pInit = hb_arrayClone( pMeth->pInitValue, NULL );
|
||||
}
|
||||
else
|
||||
{
|
||||
pInit = hb_itemNew( NULL );
|
||||
@@ -1568,7 +1621,11 @@ static PHB_ITEM hb_clsInst( USHORT uiClass )
|
||||
pMeth->bClsDataInitiated = 1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
hb_itemClear( &init );
|
||||
|
||||
}
|
||||
else if( pMeth->pFunction == hb___msgGetData ) /* is a DATA but not herited */
|
||||
{
|
||||
@@ -1595,7 +1652,8 @@ static PHB_ITEM hb_clsInst( USHORT uiClass )
|
||||
HB_ITEM init;
|
||||
PHB_ITEM pInit;
|
||||
|
||||
hb_itemInit( &init );
|
||||
( &init )->type = HB_IT_NIL;
|
||||
|
||||
hb_arrayGet( pClass->pClassDatas, pMeth->uiData, &init );
|
||||
if( init.type == HB_IT_NIL )
|
||||
{
|
||||
@@ -1613,7 +1671,11 @@ static PHB_ITEM hb_clsInst( USHORT uiClass )
|
||||
hb_itemRelease(pInit);
|
||||
pMeth->bClsDataInitiated = 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
hb_itemClear( &init );
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1661,16 +1723,22 @@ HB_FUNC( __CLSMODMSG )
|
||||
PHB_ITEM pBlock = hb_param( 3, HB_IT_BLOCK );
|
||||
|
||||
if( pBlock == NULL )
|
||||
{
|
||||
hb_errRT_BASE( EG_ARG, 3000, NULL, "__CLSMODMSG", 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_arraySet( pClass->pInlines, pClass->pMethods[ uiAt ].uiData, pBlock );
|
||||
}
|
||||
}
|
||||
else if( ( pFunc == hb___msgSetData ) || ( pFunc == hb___msgGetData ) )
|
||||
{ /* Not allowed for DATA */
|
||||
hb_errRT_BASE( EG_ARG, 3004, "Cannot modify a DATA item", "__CLSMODMSG", 0 );
|
||||
}
|
||||
else /* Modify METHOD */
|
||||
{
|
||||
pClass->pMethods[ uiAt ].pFunction = ( PHB_FUNC ) hb_parnl( 3 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1700,7 +1768,7 @@ HB_FUNC( __OBJGETCLSNAME )
|
||||
if( uiClass <= s_uiClasses )
|
||||
hb_retc( s_pClasses[ uiClass - 1 ].szName );
|
||||
else
|
||||
hb_retc( NULL );
|
||||
hb_retc( "" );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1716,9 +1784,14 @@ HB_FUNC( __OBJHASMSG )
|
||||
PHB_ITEM pString = hb_param( 2, HB_IT_STRING );
|
||||
|
||||
if( pObject && pString )
|
||||
hb_retl( hb_objHasMsg( pObject, pString->item.asString.value ) != 0 );
|
||||
{
|
||||
hb_retl( hb_objHasMsg( pObject, pString->item.asString.value ) );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE( EG_ARG, 3000, NULL, "__OBJHASMSG", 0 );
|
||||
{
|
||||
/*hb_errRT_BASE( EG_ARG, 3000, NULL, "__OBJHASMSG", 0 );*/
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1099, NULL, "__ObjHasMsg", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1743,7 +1816,9 @@ HB_FUNC( __OBJCLONE )
|
||||
hb_itemRelease( hb_itemReturn( pDstObject ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_errRT_BASE( EG_ARG, 3001, NULL, "__OBJCLONE", 0 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1767,16 +1842,21 @@ HB_FUNC( __OBJSENDMSG )
|
||||
USHORT uiParam;
|
||||
|
||||
hb_vmPushSymbol( pMsg->pSymbol ); /* Push message symbol */
|
||||
|
||||
hb_vmPush( pObject ); /* Push object */
|
||||
|
||||
for( uiParam = 3; uiParam <= uiPCount; uiParam++ ) /* Push arguments on stack */
|
||||
{
|
||||
hb_vmPush( hb_param( uiParam, HB_IT_ANY ) );
|
||||
}
|
||||
|
||||
hb_vmDo( ( USHORT ) ( uiPCount - 2 ) ); /* Execute message */
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_errRT_BASE( EG_ARG, 3000, NULL, "__OBJSENDMSG", 0 );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1802,7 +1882,7 @@ HB_FUNC( __CLSINSTSUPER )
|
||||
hb_vmPushNil();
|
||||
hb_vmFunction( 0 ); /* Execute super class */
|
||||
|
||||
if( HB_IS_OBJECT( &hb_stack.Return ) )
|
||||
if( HB_IS_OBJECT( hb_stackItemFromTop( -1 ) ) ) // &hb_stack.Return
|
||||
{
|
||||
for( uiClass = 0; ! bFound && uiClass < s_uiClasses; uiClass++ )
|
||||
{ /* Locate the entry */
|
||||
@@ -1814,18 +1894,22 @@ HB_FUNC( __CLSINSTSUPER )
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_errRT_BASE( EG_ARG, 3002, "Super class does not return an object", "__CLSINSTSUPER", 0 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_errRT_BASE( EG_ARG, 3003, "Cannot find super class", "__CLSINSTSUPER", 0 );
|
||||
}
|
||||
}
|
||||
|
||||
if( ! bFound )
|
||||
{
|
||||
hb_retni( 0 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* <nSeq> = __cls_CntClsData( <hClass> )
|
||||
*
|
||||
@@ -1887,11 +1971,13 @@ HB_FUNC( __CLS_INCDATA )
|
||||
|
||||
/* NOTE: Undocumented Clipper function */
|
||||
|
||||
/* see for parameter compatibility with Clipper. */
|
||||
HB_FUNC( __CLASSNEW )
|
||||
{
|
||||
HB_FUNCNAME( __CLSNEW )();
|
||||
}
|
||||
|
||||
|
||||
/* NOTE: Undocumented Clipper function */
|
||||
|
||||
HB_FUNC( __CLASSINSTANCE )
|
||||
@@ -1899,6 +1985,7 @@ HB_FUNC( __CLASSINSTANCE )
|
||||
HB_FUNCNAME( __CLSINST )();
|
||||
}
|
||||
|
||||
|
||||
/* NOTE: Undocumented Clipper function */
|
||||
|
||||
HB_FUNC( __CLASSADD )
|
||||
@@ -1906,6 +1993,7 @@ HB_FUNC( __CLASSADD )
|
||||
HB_FUNCNAME( __CLSADDMSG )();
|
||||
}
|
||||
|
||||
|
||||
/* NOTE: Undocumented Clipper function */
|
||||
|
||||
HB_FUNC( __CLASSNAME )
|
||||
@@ -1978,7 +2066,9 @@ HB_FUNC( __SENDER )
|
||||
}
|
||||
|
||||
if( iLevel == 0 && oSender != NULL && oSender->type == HB_IT_OBJECT )
|
||||
{
|
||||
hb_itemReturn( oSender );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2189,21 +2279,24 @@ static HARBOUR hb___msgEvalInline( void )
|
||||
USHORT uiParam;
|
||||
USHORT uiPCount=hb_pcount();
|
||||
|
||||
hb_itemInit( &block );
|
||||
( &block )->type = HB_IT_NIL; // hb_itemInit( &block );
|
||||
|
||||
hb_arrayGet( s_pClasses[ uiClass - 1 ].pInlines, s_pMethod->uiData, &block );
|
||||
|
||||
hb_vmPushSymbol( &hb_symEval );
|
||||
hb_vmPush( &block );
|
||||
hb_vmPush( hb_stackSelfItem() ); /* Push self */
|
||||
|
||||
for( uiParam = 1; uiParam <= uiPCount; uiParam++ )
|
||||
{
|
||||
hb_vmPush( hb_stackItemFromBase( uiParam ) );
|
||||
}
|
||||
|
||||
hb_vmDo( ( USHORT ) (uiPCount + 1 ) ); /* Self is also an argument */
|
||||
|
||||
hb_itemClear( &block ); /* Release block */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* __msgEval()
|
||||
*
|
||||
@@ -2258,9 +2351,7 @@ 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 = 0 ;
|
||||
|
||||
pCopy->item.asArray.value->puiClsTree = NULL ;
|
||||
|
||||
hb_itemRelease(hb_itemReturn( pCopy ));
|
||||
}
|
||||
@@ -2303,8 +2394,9 @@ static HARBOUR hb___msgSetClsData( void )
|
||||
PHB_ITEM pReturn = hb_stackItemFromBase( 1 );
|
||||
|
||||
if( uiClass && uiClass <= s_uiClasses )
|
||||
hb_arraySet( s_pClasses[ uiClass - 1 ].pClassDatas,
|
||||
s_pMethod->uiData, pReturn );
|
||||
{
|
||||
hb_arraySet( s_pClasses[ uiClass - 1 ].pClassDatas, s_pMethod->uiData, pReturn );
|
||||
}
|
||||
|
||||
hb_itemReturn( pReturn );
|
||||
}
|
||||
@@ -2334,8 +2426,9 @@ static HARBOUR hb___msgSetShrData( void )
|
||||
PHB_ITEM pReturn = hb_stackItemFromBase( 1 );
|
||||
|
||||
if( uiSprCls && uiSprCls <= s_uiClasses )
|
||||
hb_arraySet( s_pClasses[ uiSprCls - 1 ].pClassDatas,
|
||||
s_pMethod->uiDataShared, pReturn );
|
||||
{
|
||||
hb_arraySet( s_pClasses[ uiSprCls - 1 ].pClassDatas, s_pMethod->uiDataShared, pReturn );
|
||||
}
|
||||
|
||||
hb_itemReturn( pReturn );
|
||||
}
|
||||
@@ -2370,7 +2463,9 @@ static HARBOUR hb___msgSetData( void )
|
||||
|
||||
/* will arise only if the class has been modified after first instance */
|
||||
if( uiIndex > ( USHORT ) hb_arrayLen( pObject ) ) /* Resize needed ? */
|
||||
{
|
||||
hb_arraySize( pObject, uiIndex ); /* Make large enough */
|
||||
}
|
||||
|
||||
hb_arraySet( pObject, uiIndex, pReturn );
|
||||
|
||||
|
||||
Reference in New Issue
Block a user