diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 2d85c7fdaa..ad20ffcb2c 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,39 @@ 2002-12-01 23:12 UTC+0100 Foo Bar */ +2004-04-24 15:30 UTC+0100 Ryszard Glab + + * include/hbapi.h + * changed ULONG hb_objHasMsg into BOOL hb_objHasMsg + + * include/hbvmpub.h + * added + union { + PHB_FUNC pFunPtr; + int iStaticsBase; + } value + to HB_SYMB structure to remove pointer/int conversion + + * source/compiler/genc.c + * source/compiler/gencli.c + * source/rdd/dbf1.c + * source/rdd/delim1.c + * source/rdd/sdf1.c + * source/rdd/dbfcdx/dbfcdx1.c + * source/rdd/dbfdbt/dbfdbt1.c + * source/rdd/dbffpt/dbffpt1.c + * source/rdd/dbfntx/dbfntx1.c + * source/rtl/symbol.prg + * source/vm/classes.c + * source/vm/dynsym.c + * source/vm/hvm.c + * source/vm/initsymb.c + * source/vm/macro.c + * source/vm/runner.c + * changed to use new HB_SYMB structure + * removed all pointer/long castings (except runner.c) + + 2004-04-22 18:00 UTC-0500 David G. Holm * source/vm/itemapi.c ! #if check for for RSXNT and EMX must be ahead of GNUC test diff --git a/harbour/include/hbapi.h b/harbour/include/hbapi.h index 28f33374bd..204af08625 100644 --- a/harbour/include/hbapi.h +++ b/harbour/include/hbapi.h @@ -453,7 +453,7 @@ extern BOOL hb_clsIsParent( USHORT uiClass, char * szParentName ); /* is a c extern char * hb_objGetClsName( PHB_ITEM pObject ); /* retrieves an object class name */ extern char * hb_objGetRealClsName( PHB_ITEM pObject, char * szString ); /* retrieves an object class name for a specific message */ extern PHB_FUNC hb_objGetMethod( PHB_ITEM pObject, PHB_SYMB pSymMsg ); /* returns the method pointer of a object class */ -extern ULONG hb_objHasMsg( PHB_ITEM pObject, char * szString ); /* returns TRUE/FALSE whether szString is an existing message for object */ +extern BOOL hb_objHasMsg( PHB_ITEM pObject, char * szString ); /* returns TRUE/FALSE whether szString is an existing message for object */ extern void hb_objSendMsg( PHB_ITEM pObj, char *sMsg, ULONG ulArg, ... ); /* dynamic symbol table management */ diff --git a/harbour/include/hbvmpub.h b/harbour/include/hbvmpub.h index 01b68bbcbd..b1d5d09bbe 100644 --- a/harbour/include/hbvmpub.h +++ b/harbour/include/hbvmpub.h @@ -70,7 +70,10 @@ typedef struct { char * szName; /* the name of the symbol */ HB_SYMBOLSCOPE cScope; /* the scope of the symbol */ - PHB_FUNC pFunPtr; /* function address for function symbol table entries */ + union { + PHB_FUNC pFunPtr; /* function address for function symbol table entries */ + int iStaticsBase; + } value; struct _HB_DYNS * pDynSym; /* pointer to its dynamic symbol if defined */ } HB_SYMB, * PHB_SYMB; #if defined(_MSC_VER) && _MSC_VER < 1000 diff --git a/harbour/source/compiler/genc.c b/harbour/source/compiler/genc.c index 82a103cade..ba17559792 100644 --- a/harbour/source/compiler/genc.c +++ b/harbour/source/compiler/genc.c @@ -151,7 +151,7 @@ void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language ou * we are using these two bits to mark the special function used to * initialize static variables */ - fprintf( yyc, "{ \"(_INITSTATICS)\", HB_FS_INIT | HB_FS_EXIT, hb_INITSTATICS, NULL }" ); /* NOTE: hb_ intentionally in lower case */ + fprintf( yyc, "{ \"(_INITSTATICS)\", HB_FS_INIT | HB_FS_EXIT, {hb_INITSTATICS}, NULL }" ); /* NOTE: hb_ intentionally in lower case */ } else { @@ -186,11 +186,11 @@ void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language ou /* specify the function address if it is a defined function or an external called function */ if( hb_compFunctionFind( pSym->szName ) ) /* is it a function defined in this module */ - fprintf( yyc, ", HB_FUNCNAME( %s ), NULL }", pSym->szName ); + fprintf( yyc, ", {HB_FUNCNAME( %s )}, NULL }", pSym->szName ); else if( hb_compFunCallFind( pSym->szName ) ) /* is it a function called from this module */ - fprintf( yyc, ", HB_FUNCNAME( %s ), NULL }", pSym->szName ); + fprintf( yyc, ", {HB_FUNCNAME( %s )}, NULL }", pSym->szName ); else - fprintf( yyc, ", NULL, NULL }" ); /* memvar */ + fprintf( yyc, ", {NULL}, NULL }" ); /* memvar */ } if( pSym != hb_comp_symbols.pLast ) diff --git a/harbour/source/compiler/gencli.c b/harbour/source/compiler/gencli.c index 0ebf7a5dbb..c40363ac96 100644 --- a/harbour/source/compiler/gencli.c +++ b/harbour/source/compiler/gencli.c @@ -165,7 +165,7 @@ void hb_compGenILCode( PHB_FNAME pFileName ) /* generates the IL output */ // * we are using these two bits to mark the special function used to // * initialize static variables // */ - // fprintf( yyc, "{ \"(_INITSTATICS)\", HB_FS_INIT | HB_FS_EXIT, hb_INITSTATICS, NULL }" ); /* NOTE: hb_ intentionally in lower case */ + // fprintf( yyc, "{ \"(_INITSTATICS)\", HB_FS_INIT | HB_FS_EXIT, {hb_INITSTATICS}, NULL }" ); /* NOTE: hb_ intentionally in lower case */ // } // else // { @@ -200,11 +200,11 @@ void hb_compGenILCode( PHB_FNAME pFileName ) /* generates the IL output */ // /* specify the function address if it is a defined function or an // external called function */ // if( hb_compFunctionFind( pSym->szName ) ) /* is it a function defined in this module */ - // fprintf( yyc, ", HB_FUNCNAME( %s ), NULL }", pSym->szName ); + // fprintf( yyc, ", {HB_FUNCNAME( %s )}, NULL }", pSym->szName ); // else if( hb_compFunCallFind( pSym->szName ) ) /* is it a function called from this module */ - // fprintf( yyc, ", HB_FUNCNAME( %s ), NULL }", pSym->szName ); + // fprintf( yyc, ", {HB_FUNCNAME( %s )}, NULL }", pSym->szName ); // else - // fprintf( yyc, ", NULL, NULL }" ); /* memvar */ + // fprintf( yyc, ", {NULL}, NULL }" ); /* memvar */ // } // // if( pSym != hb_comp_symbols.pLast ) diff --git a/harbour/source/rdd/dbf1.c b/harbour/source/rdd/dbf1.c index f474803c79..0e774efdb1 100644 --- a/harbour/source/rdd/dbf1.c +++ b/harbour/source/rdd/dbf1.c @@ -77,8 +77,8 @@ HB_FUNC( DBF_GETFUNCTABLE ); HB_INIT_SYMBOLS_BEGIN( dbf1__InitSymbols ) -{ "_DBFC", HB_FS_PUBLIC, HB_FUNCNAME( _DBFC ), NULL }, -{ "DBF_GETFUNCTABLE", HB_FS_PUBLIC, HB_FUNCNAME( DBF_GETFUNCTABLE ), NULL } +{ "_DBFC", HB_FS_PUBLIC, {HB_FUNCNAME( _DBFC )}, NULL }, +{ "DBF_GETFUNCTABLE", HB_FS_PUBLIC, {HB_FUNCNAME( DBF_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbf1__InitSymbols ) #if defined(HB_STATIC_STARTUP) diff --git a/harbour/source/rdd/dbfcdx/dbfcdx1.c b/harbour/source/rdd/dbfcdx/dbfcdx1.c index 1bd2e071c7..a86ecc191f 100644 --- a/harbour/source/rdd/dbfcdx/dbfcdx1.c +++ b/harbour/source/rdd/dbfcdx/dbfcdx1.c @@ -307,8 +307,8 @@ HB_FUNC( DBFCDX_GETFUNCTABLE ) HB_INIT_SYMBOLS_BEGIN( dbfcdx1__InitSymbols ) -{ "_DBFCDX", HB_FS_PUBLIC, HB_FUNCNAME( _DBFCDX ), NULL }, -{ "DBFCDX_GETFUNCTABLE", HB_FS_PUBLIC, HB_FUNCNAME( DBFCDX_GETFUNCTABLE ), NULL } +{ "_DBFCDX", HB_FS_PUBLIC, {HB_FUNCNAME( _DBFCDX )}, NULL }, +{ "DBFCDX_GETFUNCTABLE", HB_FS_PUBLIC, {HB_FUNCNAME( DBFCDX_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbfcdx1__InitSymbols ) #if defined(_MSC_VER) diff --git a/harbour/source/rdd/dbfdbt/dbfdbt1.c b/harbour/source/rdd/dbfdbt/dbfdbt1.c index ed82d1f4e9..7f098e338e 100644 --- a/harbour/source/rdd/dbfdbt/dbfdbt1.c +++ b/harbour/source/rdd/dbfdbt/dbfdbt1.c @@ -245,8 +245,8 @@ HB_FUNC( DBFDBT_GETFUNCTABLE ) HB_INIT_SYMBOLS_BEGIN( dbfdbt1__InitSymbols ) -{ "_DBFDBT", HB_FS_PUBLIC, HB_FUNCNAME( _DBFDBT ), NULL }, -{ "DBFDBT_GETFUNCTABLE", HB_FS_PUBLIC, HB_FUNCNAME( DBFDBT_GETFUNCTABLE ), NULL } +{ "_DBFDBT", HB_FS_PUBLIC, {HB_FUNCNAME( _DBFDBT )}, NULL }, +{ "DBFDBT_GETFUNCTABLE", HB_FS_PUBLIC, {HB_FUNCNAME( DBFDBT_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbfdbt1__InitSymbols ) #if defined(HB_STATIC_STARTUP) diff --git a/harbour/source/rdd/dbffpt/dbffpt1.c b/harbour/source/rdd/dbffpt/dbffpt1.c index c43dddaad2..71ad13488d 100644 --- a/harbour/source/rdd/dbffpt/dbffpt1.c +++ b/harbour/source/rdd/dbffpt/dbffpt1.c @@ -247,8 +247,8 @@ HB_FUNC( DBFFPT_GETFUNCTABLE ) HB_INIT_SYMBOLS_BEGIN( dbffpt1__InitSymbols ) -{ "_DBFFPT", HB_FS_PUBLIC, HB_FUNCNAME( _DBFFPT ), NULL }, -{ "DBFFPT_GETFUNCTABLE", HB_FS_PUBLIC, HB_FUNCNAME( DBFFPT_GETFUNCTABLE ), NULL } +{ "_DBFFPT", HB_FS_PUBLIC, {HB_FUNCNAME( _DBFFPT )}, NULL }, +{ "DBFFPT_GETFUNCTABLE", HB_FS_PUBLIC, {HB_FUNCNAME( DBFFPT_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbffpt1__InitSymbols ) #if defined(HB_STATIC_STARTUP) diff --git a/harbour/source/rdd/dbfntx/dbfntx1.c b/harbour/source/rdd/dbfntx/dbfntx1.c index 610b618244..ee75d6fdb1 100644 --- a/harbour/source/rdd/dbfntx/dbfntx1.c +++ b/harbour/source/rdd/dbfntx/dbfntx1.c @@ -143,8 +143,8 @@ HB_FUNC( DBFNTX_GETFUNCTABLE ); #endif HB_INIT_SYMBOLS_BEGIN( dbfntx1__InitSymbols ) -{ "_DBFNTX", HB_FS_PUBLIC, HB_FUNCNAME( _DBFNTX ), 0 }, -{ "DBFNTX_GETFUNCTABLE", HB_FS_PUBLIC, HB_FUNCNAME( DBFNTX_GETFUNCTABLE) , 0 } +{ "_DBFNTX", HB_FS_PUBLIC, {HB_FUNCNAME( _DBFNTX )}, 0 }, +{ "DBFNTX_GETFUNCTABLE", HB_FS_PUBLIC, {HB_FUNCNAME( DBFNTX_GETFUNCTABLE)} , 0 } HB_INIT_SYMBOLS_END( dbfntx1__InitSymbols ) #if defined(_MSC_VER) #if _MSC_VER >= 1010 diff --git a/harbour/source/rdd/delim1.c b/harbour/source/rdd/delim1.c index 499fd01ffd..53733e7a14 100644 --- a/harbour/source/rdd/delim1.c +++ b/harbour/source/rdd/delim1.c @@ -66,8 +66,8 @@ HB_FUNC( DELIM_GETFUNCTABLE ); #define HB_PRG_PCODE_VER HB_PCODE_VER HB_INIT_SYMBOLS_BEGIN( delim1__InitSymbols ) -{ "_DELIMC", HB_FS_PUBLIC, HB_FUNCNAME( _DELIMC ), NULL }, -{ "DELIM_GETFUNCTABLE", HB_FS_PUBLIC, HB_FUNCNAME( DELIM_GETFUNCTABLE ), NULL } +{ "_DELIMC", HB_FS_PUBLIC, {HB_FUNCNAME( _DELIMC )}, NULL }, +{ "DELIM_GETFUNCTABLE", HB_FS_PUBLIC, {HB_FUNCNAME( DELIM_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( delim1__InitSymbols ) #if defined(HB_STATIC_STARTUP) diff --git a/harbour/source/rdd/sdf1.c b/harbour/source/rdd/sdf1.c index a0dc69616d..3f567aaddf 100644 --- a/harbour/source/rdd/sdf1.c +++ b/harbour/source/rdd/sdf1.c @@ -66,8 +66,8 @@ HB_FUNC( SDF_GETFUNCTABLE ); #define HB_PRG_PCODE_VER HB_PCODE_VER HB_INIT_SYMBOLS_BEGIN( sdf1__InitSymbols ) -{ "_SDFC", HB_FS_PUBLIC, HB_FUNCNAME( _SDFC ), NULL }, -{ "SDF_GETFUNCTABLE", HB_FS_PUBLIC, HB_FUNCNAME( SDF_GETFUNCTABLE ), NULL } +{ "_SDFC", HB_FS_PUBLIC, {HB_FUNCNAME( _SDFC )}, NULL }, +{ "SDF_GETFUNCTABLE", HB_FS_PUBLIC, {HB_FUNCNAME( SDF_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( sdf1__InitSymbols ) #if defined(HB_STATIC_STARTUP) diff --git a/harbour/source/rtl/symbol.prg b/harbour/source/rtl/symbol.prg index b481a5125e..b406f8fc2a 100644 --- a/harbour/source/rtl/symbol.prg +++ b/harbour/source/rtl/symbol.prg @@ -116,12 +116,12 @@ return .f. HB_FUNC( GETSYMBOLPOINTER ) { - hb_retnl( ( long ) hb_dynsymGet( hb_parc( 1 ) ) ); + hb_retptr( hb_dynsymGet( hb_parc( 1 ) ) ); } HB_FUNC( GETSYMBOLNAME ) { - PHB_DYNS pDynSym = ( PHB_DYNS ) hb_parnl( 1 ); + PHB_DYNS pDynSym = ( PHB_DYNS ) hb_parptr( 1 ); hb_retc( ( pDynSym != NULL ? pDynSym->pSymbol->szName : "" ) ); } @@ -146,9 +146,9 @@ HB_FUNC( SYMBOL_EXEC ) /* we invoke the message with no parameters */ hb_vmFunction( 0 ); - pSym = ( PHB_DYNS ) hb_parnl( -1 ); /* we take the returned DATA value from + pSym = ( PHB_DYNS ) hb_parptr( -1 ); /* we take the returned DATA value from the HVM hb_stack.Return */ - if( pSym != NULL && pSym->pSymbol->pFunPtr ) + if( pSym != NULL && pSym->pSymbol->value.pFunPtr ) { int i; diff --git a/harbour/source/vm/classes.c b/harbour/source/vm/classes.c index 18e825658e..e65650249d 100644 --- a/harbour/source/vm/classes.c +++ b/harbour/source/vm/classes.c @@ -216,7 +216,7 @@ static void hb_clsRelease( PCLASS ); PHB_FUNC hb_objGetMethod( PHB_ITEM, PHB_SYMB ); PHB_FUNC hb_objGetMthd( PHB_ITEM pObject, PHB_SYMB pMessage, BOOL lAllowErrFunc ); PMETHOD hb_objGetpMethod( PHB_ITEM, PHB_SYMB ); - ULONG hb_objHasMsg( PHB_ITEM pObject, char * szString ); + BOOL hb_objHasMsg( PHB_ITEM pObject, char * szString ); void * hb_mthRequested( void ); void hb_mthAddTime( void * pMethod, ULONG ulClockTicks ); @@ -955,13 +955,13 @@ PMETHOD hb_objGetpMethod( PHB_ITEM pObject, PHB_SYMB pMessage ) /* - * = hb_objHasMsg( , ) + * = hb_objHasMsg( , ) * * Check whether is an existing message for object. * * should be read as a boolean */ -ULONG hb_objHasMsg( PHB_ITEM pObject, char *szString ) +BOOL hb_objHasMsg( PHB_ITEM pObject, char *szString ) { PHB_DYNS pDynSym = hb_dynsymFindName( szString ); @@ -969,11 +969,11 @@ ULONG hb_objHasMsg( PHB_ITEM pObject, char *szString ) if( pDynSym ) { - return ( ULONG ) hb_objGetMthd( pObject, pDynSym->pSymbol, FALSE ); + return hb_objGetMthd( pObject, pDynSym->pSymbol, FALSE ) != NULL; } else { - return 0; + return FALSE; } } @@ -1135,7 +1135,7 @@ HB_FUNC( __CLSADDMSG ) { case HB_OO_MSG_METHOD: - pNewMeth->pFunction = ( PHB_FUNC ) hb_parnl( 3 ); + pNewMeth->pFunction = ( PHB_FUNC ) hb_parptr( 3 ); pNewMeth->uiScope = uiScope; pNewMeth->uiData = 0; break; @@ -1237,7 +1237,7 @@ HB_FUNC( __CLSADDMSG ) case HB_OO_MSG_ONERROR: - pClass->pFunError = ( PHB_FUNC ) hb_parnl( 3 ); + pClass->pFunError = ( PHB_FUNC ) hb_parptr( 3 ); break; default: @@ -1748,7 +1748,7 @@ HB_FUNC( __CLSMODMSG ) } else /* Modify METHOD */ { - pClass->pMethods[ uiAt ].pFunction = ( PHB_FUNC ) hb_parnl( 3 ); + pClass->pMethods[ uiAt ].pFunction = ( PHB_FUNC ) hb_parptr( 3 ); } } } diff --git a/harbour/source/vm/dynsym.c b/harbour/source/vm/dynsym.c index 0399834464..6d3e3ea8dd 100644 --- a/harbour/source/vm/dynsym.c +++ b/harbour/source/vm/dynsym.c @@ -87,7 +87,7 @@ PHB_SYMB HB_EXPORT hb_symbolNew( char * szName ) /* Create a new symbol */ pSymbol->szName = ( char * ) hb_xgrab( strlen( szName ) + 1 ); pSymbol->cScope = SYM_ALLOCATED; /* to know what symbols to release when exiting the app */ strcpy( pSymbol->szName, szName ); - pSymbol->pFunPtr = NULL; + pSymbol->value.pFunPtr = NULL; pSymbol->pDynSym = NULL; return pSymbol; @@ -105,9 +105,9 @@ PHB_DYNS HB_EXPORT hb_dynsymNew( PHB_SYMB pSymbol ) /* creates a new dynamic { if( pSymbol->cScope & HB_FS_PUBLIC ) /* only for HB_FS_PUBLIC */ { - if( ( ! pDynSym->pFunPtr ) && pSymbol->pFunPtr ) /* The DynSym existed */ + if( ( ! pDynSym->pFunPtr ) && pSymbol->value.pFunPtr ) /* The DynSym existed */ { - pDynSym->pFunPtr = pSymbol->pFunPtr; /* but had no function ptr assigned */ + pDynSym->pFunPtr = pSymbol->value.pFunPtr; /* but had no function ptr assigned */ pDynSym->pSymbol = pSymbol; pDynSym->ulCalls = 0; /* profiler support */ pDynSym->ulTime = 0; /* profiler support */ @@ -147,8 +147,8 @@ PHB_DYNS HB_EXPORT hb_dynsymNew( PHB_SYMB pSymbol ) /* creates a new dynamic if( pSymbol->cScope & HB_FS_PUBLIC ) /* only for HB_FS_PUBLIC */ { - if( pDynSym->pFunPtr != pSymbol->pFunPtr ) /* it contains a function pointer */ - pDynSym->pFunPtr = pSymbol->pFunPtr; /* place the function at DynSym */ + if( pDynSym->pFunPtr != pSymbol->value.pFunPtr ) /* it contains a function pointer */ + pDynSym->pFunPtr = pSymbol->value.pFunPtr; /* place the function at DynSym */ } pSymbol->pDynSym = pDynSym; /* place a pointer to DynSym */ diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index b8fb89d08c..de825c64a5 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -212,7 +212,7 @@ ULONG hb_ulOpcodesTime[ HB_P_LAST_PCODE ]; /* array to profile opcodes consumed /* virtual machine state */ -HB_SYMB hb_symEval = { "__EVAL", HB_FS_PUBLIC, hb_vmDoBlock, NULL }; /* symbol to evaluate codeblocks */ +HB_SYMB hb_symEval = { "__EVAL", HB_FS_PUBLIC, {hb_vmDoBlock}, NULL }; /* symbol to evaluate codeblocks */ static HB_ITEM s_aStatics; /* Harbour array to hold all application statics variables */ static USHORT s_uiStatics; /* Number of statics added after processing hb_vmStatics() */ @@ -303,7 +303,7 @@ void hb_vmDoInitRdd( void ) for ( i = 0; rddName[i]; i++ ) { pDynSym = hb_dynsymFind( rddName[i] ); - if( pDynSym && pDynSym->pSymbol->pFunPtr ) + if( pDynSym && pDynSym->pSymbol->value.pFunPtr ) { hb_vmPushSymbol( pDynSym->pSymbol ); hb_vmPushNil(); @@ -380,7 +380,7 @@ void HB_EXPORT hb_vmInit( BOOL bStartMainProc ) { PHB_DYNS pDynSym = hb_dynsymFind( "_APPMAIN" ); - if( pDynSym && pDynSym->pSymbol->pFunPtr ) + if( pDynSym && pDynSym->pSymbol->value.pFunPtr ) s_pSymStart = pDynSym->pSymbol; #ifdef HARBOUR_START_PROCEDURE else @@ -396,11 +396,11 @@ void HB_EXPORT hb_vmInit( BOOL bStartMainProc ) { pDynSym = hb_dynsymFind( HARBOUR_START_PROCEDURE ); - if( ! ( pDynSym && pDynSym->pSymbol->pFunPtr ) && s_pszLinkedMain ) + if( ! ( pDynSym && pDynSym->pSymbol->value.pFunPtr ) && s_pszLinkedMain ) pDynSym = hb_dynsymFind( s_pszLinkedMain ); } - if( pDynSym && pDynSym->pSymbol->pFunPtr ) + if( pDynSym && pDynSym->pSymbol->value.pFunPtr ) s_pSymStart = pDynSym->pSymbol; else hb_errInternal( HB_EI_VMBADSTARTUP, NULL, HARBOUR_START_PROCEDURE, NULL ); @@ -2275,7 +2275,7 @@ static void hb_vmFuncPtr( void ) /* pushes a function address pointer. Removes if( HB_IS_SYMBOL( pItem ) ) { hb_stackPop(); - hb_vmPushLong( ( ULONG ) pItem->item.asSymbol.value->pFunPtr ); + hb_vmPushPointer( ( void* ) pItem->item.asSymbol.value->value.pFunPtr ); } else hb_errInternal( HB_EI_VMNOTSYMBOL, NULL, "hb_vmFuncPtr()", NULL ); @@ -3308,7 +3308,7 @@ void HB_EXPORT hb_vmDo( USHORT uiParams ) PHB_BASEARRAY pSelfBase = NULL; if( pSym == &( hb_symEval ) && HB_IS_BLOCK( pSelf ) ) - pFunc = pSym->pFunPtr; /* __EVAL method = function */ + pFunc = pSym->value.pFunPtr; /* __EVAL method = function */ else { pFunc = hb_objGetMethod( pSelf, pSym ); @@ -3400,7 +3400,7 @@ void HB_EXPORT hb_vmDo( USHORT uiParams ) } else /* it is a function */ { - pFunc = pSym->pFunPtr; + pFunc = pSym->value.pFunPtr; if( pFunc ) { @@ -3498,7 +3498,7 @@ void HB_EXPORT hb_vmSend( USHORT uiParams ) if( HB_IS_NIL( pSelf ) ) /* are we sending a message ? */ { - pFunc = pSym->pFunPtr; + pFunc = pSym->value.pFunPtr; if( pFunc ) { @@ -3557,12 +3557,12 @@ void HB_EXPORT hb_vmSend( USHORT uiParams ) { if( pSym == &( hb_symEval ) ) { - pFunc = pSym->pFunPtr; /* __EVAL method = function */ + pFunc = pSym->value.pFunPtr; /* __EVAL method = function */ } else if( strncmp( pSym->szName, "EVAL", 4 ) == 0 ) { pSym = &hb_symEval; - pFunc = pSym->pFunPtr; /* __EVAL method = function */ + pFunc = pSym->value.pFunPtr; /* __EVAL method = function */ } } else if( HB_IS_OBJECT( pSelf ) ) /* Object passed */ @@ -3849,7 +3849,7 @@ static void hb_vmSFrame( PHB_SYMB pSym ) /* sets the statics frame for a fu HB_TRACE(HB_TR_DEBUG, ("hb_vmSFrame(%p)", pSym)); /* _INITSTATICS is now the statics frame. Statics() changed it! */ - hb_stack.iStatics = ( int ) pSym->pFunPtr; /* pSym is { "$_INITSTATICS", HB_FS_INIT | HB_FS_EXIT, _INITSTATICS } for each PRG */ + hb_stack.iStatics = pSym->value.iStaticsBase; /* pSym is { "$_INITSTATICS", HB_FS_INIT | HB_FS_EXIT, _INITSTATICS } for each PRG */ } static void hb_vmStatics( PHB_SYMB pSym, USHORT uiStatics ) /* initializes the global aStatics array or redimensionates it */ @@ -3858,12 +3858,12 @@ static void hb_vmStatics( PHB_SYMB pSym, USHORT uiStatics ) /* initializes the g if( HB_IS_NIL( &s_aStatics ) ) { - pSym->pFunPtr = NULL; /* statics frame for this PRG */ + pSym->value.iStaticsBase = 0; /* statics frame for this PRG */ hb_arrayNew( &s_aStatics, uiStatics ); } else { - pSym->pFunPtr = ( PHB_FUNC ) hb_arrayLen( &s_aStatics ); + pSym->value.iStaticsBase = hb_arrayLen( &s_aStatics ); hb_arraySize( &s_aStatics, hb_arrayLen( &s_aStatics ) + uiStatics ); } @@ -5206,8 +5206,8 @@ void HB_EXPORT hb_vmProcessDllSymbols( PHB_SYMB pModuleSymbols, USHORT uiModuleS { PHB_DYNS pDynSym = hb_dynsymFind( ( pModuleSymbols + ui )->szName ); - if( pDynSym && pDynSym->pFunPtr && ( pModuleSymbols + ui )->pFunPtr ) - ( pModuleSymbols + ui )->pFunPtr = pDynSym->pFunPtr; + if( pDynSym && pDynSym->pFunPtr && ( pModuleSymbols + ui )->value.pFunPtr ) + ( pModuleSymbols + ui )->value.pFunPtr = pDynSym->pFunPtr; else hb_dynsymNew( ( pModuleSymbols + ui ) ); } diff --git a/harbour/source/vm/initsymb.c b/harbour/source/vm/initsymb.c index deffdb2fcb..7558b65005 100644 --- a/harbour/source/vm/initsymb.c +++ b/harbour/source/vm/initsymb.c @@ -118,69 +118,69 @@ extern HB_FUNC( WORD ); extern HB_FUNC( YEAR ); static HB_SYMB symbols[] = { - { "AADD" , HB_FS_PUBLIC, HB_FUNCNAME( AADD ) , NULL }, - { "ABS" , HB_FS_PUBLIC, HB_FUNCNAME( ABS ) , NULL }, - { "ASC" , HB_FS_PUBLIC, HB_FUNCNAME( ASC ) , NULL }, - { "AT" , HB_FS_PUBLIC, HB_FUNCNAME( AT ) , NULL }, - { "BOF" , HB_FS_PUBLIC, HB_FUNCNAME( BOF ) , NULL }, - { "BREAK" , HB_FS_PUBLIC, HB_FUNCNAME( BREAK ) , NULL }, - { "CDOW" , HB_FS_PUBLIC, HB_FUNCNAME( CDOW ) , NULL }, - { "CHR" , HB_FS_PUBLIC, HB_FUNCNAME( CHR ) , NULL }, - { "CMONTH" , HB_FS_PUBLIC, HB_FUNCNAME( CMONTH ) , NULL }, - { "COL" , HB_FS_PUBLIC, HB_FUNCNAME( COL ) , NULL }, - { "CTOD" , HB_FS_PUBLIC, HB_FUNCNAME( CTOD ) , NULL }, - { "DATE" , HB_FS_PUBLIC, HB_FUNCNAME( DATE ) , NULL }, - { "DAY" , HB_FS_PUBLIC, HB_FUNCNAME( DAY ) , NULL }, - { "DELETED" , HB_FS_PUBLIC, HB_FUNCNAME( DELETED ) , NULL }, - { "DEVPOS" , HB_FS_PUBLIC, HB_FUNCNAME( DEVPOS ) , NULL }, - { "DOW" , HB_FS_PUBLIC, HB_FUNCNAME( DOW ) , NULL }, - { "DTOC" , HB_FS_PUBLIC, HB_FUNCNAME( DTOC ) , NULL }, - { "DTOS" , HB_FS_PUBLIC, HB_FUNCNAME( DTOS ) , NULL }, - { "EMPTY" , HB_FS_PUBLIC, HB_FUNCNAME( EMPTY ) , NULL }, - { "EOF" , HB_FS_PUBLIC, HB_FUNCNAME( EOF ) , NULL }, - { "EXP" , HB_FS_PUBLIC, HB_FUNCNAME( EXP ) , NULL }, - { "FCOUNT" , HB_FS_PUBLIC, HB_FUNCNAME( FCOUNT ) , NULL }, - { "FIELDNAME" , HB_FS_PUBLIC, HB_FUNCNAME( FIELDNAME ) , NULL }, - { "FLOCK" , HB_FS_PUBLIC, HB_FUNCNAME( FLOCK ) , NULL }, - { "FOUND" , HB_FS_PUBLIC, HB_FUNCNAME( FOUND ) , NULL }, - { "INKEY" , HB_FS_PUBLIC, HB_FUNCNAME( INKEY ) , NULL }, - { "INT" , HB_FS_PUBLIC, HB_FUNCNAME( INT ) , NULL }, - { "LASTREC" , HB_FS_PUBLIC, HB_FUNCNAME( LASTREC ) , NULL }, - { "LEFT" , HB_FS_PUBLIC, HB_FUNCNAME( LEFT ) , NULL }, - { "LEN" , HB_FS_PUBLIC, HB_FUNCNAME( LEN ) , NULL }, - { "LOCK" , HB_FS_PUBLIC, HB_FUNCNAME( LOCK ) , NULL }, - { "LOG" , HB_FS_PUBLIC, HB_FUNCNAME( LOG ) , NULL }, - { "LOWER" , HB_FS_PUBLIC, HB_FUNCNAME( LOWER ) , NULL }, - { "LTRIM" , HB_FS_PUBLIC, HB_FUNCNAME( LTRIM ) , NULL }, - { "MAX" , HB_FS_PUBLIC, HB_FUNCNAME( MAX ) , NULL }, - { "MIN" , HB_FS_PUBLIC, HB_FUNCNAME( MIN ) , NULL }, - { "MONTH" , HB_FS_PUBLIC, HB_FUNCNAME( MONTH ) , NULL }, - { "PCOL" , HB_FS_PUBLIC, HB_FUNCNAME( PCOL ) , NULL }, - { "PCOUNT" , HB_FS_PUBLIC, HB_FUNCNAME( PCOUNT ) , NULL }, - { "PROW" , HB_FS_PUBLIC, HB_FUNCNAME( PROW ) , NULL }, - { "RECCOUNT" , HB_FS_PUBLIC, HB_FUNCNAME( RECCOUNT ) , NULL }, - { "RECNO" , HB_FS_PUBLIC, HB_FUNCNAME( RECNO ) , NULL }, - { "REPLICATE" , HB_FS_PUBLIC, HB_FUNCNAME( REPLICATE ) , NULL }, - { "RLOCK" , HB_FS_PUBLIC, HB_FUNCNAME( RLOCK ) , NULL }, - { "ROUND" , HB_FS_PUBLIC, HB_FUNCNAME( ROUND ) , NULL }, - { "ROW" , HB_FS_PUBLIC, HB_FUNCNAME( ROW ) , NULL }, - { "RTRIM" , HB_FS_PUBLIC, HB_FUNCNAME( RTRIM ) , NULL }, - { "SECONDS" , HB_FS_PUBLIC, HB_FUNCNAME( SECONDS ) , NULL }, - { "SELECT" , HB_FS_PUBLIC, HB_FUNCNAME( SELECT ) , NULL }, - { "SETPOS" , HB_FS_PUBLIC, HB_FUNCNAME( SETPOS ) , NULL }, - { "SETPOSBS" , HB_FS_PUBLIC, HB_FUNCNAME( SETPOSBS ) , NULL }, - { "SPACE" , HB_FS_PUBLIC, HB_FUNCNAME( SPACE ) , NULL }, - { "SQRT" , HB_FS_PUBLIC, HB_FUNCNAME( SQRT ) , NULL }, - { "STR" , HB_FS_PUBLIC, HB_FUNCNAME( STR ) , NULL }, - { "SUBSTR" , HB_FS_PUBLIC, HB_FUNCNAME( SUBSTR ) , NULL }, - { "TIME" , HB_FS_PUBLIC, HB_FUNCNAME( TIME ) , NULL }, - { "TRANSFORM" , HB_FS_PUBLIC, HB_FUNCNAME( TRANSFORM ) , NULL }, - { "TRIM" , HB_FS_PUBLIC, HB_FUNCNAME( TRIM ) , NULL }, - { "TYPE" , HB_FS_PUBLIC, HB_FUNCNAME( TYPE ) , NULL }, - { "UPPER" , HB_FS_PUBLIC, HB_FUNCNAME( UPPER ) , NULL }, - { "VAL" , HB_FS_PUBLIC, HB_FUNCNAME( VAL ) , NULL }, - { "WORD" , HB_FS_PUBLIC, HB_FUNCNAME( WORD ) , NULL }, - { "YEAR" , HB_FS_PUBLIC, HB_FUNCNAME( YEAR ) , NULL } + { "AADD" , HB_FS_PUBLIC, {HB_FUNCNAME( AADD )} , NULL }, + { "ABS" , HB_FS_PUBLIC, {HB_FUNCNAME( ABS )} , NULL }, + { "ASC" , HB_FS_PUBLIC, {HB_FUNCNAME( ASC )} , NULL }, + { "AT" , HB_FS_PUBLIC, {HB_FUNCNAME( AT )} , NULL }, + { "BOF" , HB_FS_PUBLIC, {HB_FUNCNAME( BOF )} , NULL }, + { "BREAK" , HB_FS_PUBLIC, {HB_FUNCNAME( BREAK )} , NULL }, + { "CDOW" , HB_FS_PUBLIC, {HB_FUNCNAME( CDOW )} , NULL }, + { "CHR" , HB_FS_PUBLIC, {HB_FUNCNAME( CHR )} , NULL }, + { "CMONTH" , HB_FS_PUBLIC, {HB_FUNCNAME( CMONTH )} , NULL }, + { "COL" , HB_FS_PUBLIC, {HB_FUNCNAME( COL )} , NULL }, + { "CTOD" , HB_FS_PUBLIC, {HB_FUNCNAME( CTOD )} , NULL }, + { "DATE" , HB_FS_PUBLIC, {HB_FUNCNAME( DATE )} , NULL }, + { "DAY" , HB_FS_PUBLIC, {HB_FUNCNAME( DAY )} , NULL }, + { "DELETED" , HB_FS_PUBLIC, {HB_FUNCNAME( DELETED )} , NULL }, + { "DEVPOS" , HB_FS_PUBLIC, {HB_FUNCNAME( DEVPOS )} , NULL }, + { "DOW" , HB_FS_PUBLIC, {HB_FUNCNAME( DOW )} , NULL }, + { "DTOC" , HB_FS_PUBLIC, {HB_FUNCNAME( DTOC )} , NULL }, + { "DTOS" , HB_FS_PUBLIC, {HB_FUNCNAME( DTOS )} , NULL }, + { "EMPTY" , HB_FS_PUBLIC, {HB_FUNCNAME( EMPTY )} , NULL }, + { "EOF" , HB_FS_PUBLIC, {HB_FUNCNAME( EOF )} , NULL }, + { "EXP" , HB_FS_PUBLIC, {HB_FUNCNAME( EXP )} , NULL }, + { "FCOUNT" , HB_FS_PUBLIC, {HB_FUNCNAME( FCOUNT )} , NULL }, + { "FIELDNAME" , HB_FS_PUBLIC, {HB_FUNCNAME( FIELDNAME )} , NULL }, + { "FLOCK" , HB_FS_PUBLIC, {HB_FUNCNAME( FLOCK )} , NULL }, + { "FOUND" , HB_FS_PUBLIC, {HB_FUNCNAME( FOUND )} , NULL }, + { "INKEY" , HB_FS_PUBLIC, {HB_FUNCNAME( INKEY )} , NULL }, + { "INT" , HB_FS_PUBLIC, {HB_FUNCNAME( INT )} , NULL }, + { "LASTREC" , HB_FS_PUBLIC, {HB_FUNCNAME( LASTREC )} , NULL }, + { "LEFT" , HB_FS_PUBLIC, {HB_FUNCNAME( LEFT )} , NULL }, + { "LEN" , HB_FS_PUBLIC, {HB_FUNCNAME( LEN )} , NULL }, + { "LOCK" , HB_FS_PUBLIC, {HB_FUNCNAME( LOCK )} , NULL }, + { "LOG" , HB_FS_PUBLIC, {HB_FUNCNAME( LOG )} , NULL }, + { "LOWER" , HB_FS_PUBLIC, {HB_FUNCNAME( LOWER )} , NULL }, + { "LTRIM" , HB_FS_PUBLIC, {HB_FUNCNAME( LTRIM )} , NULL }, + { "MAX" , HB_FS_PUBLIC, {HB_FUNCNAME( MAX )} , NULL }, + { "MIN" , HB_FS_PUBLIC, {HB_FUNCNAME( MIN )} , NULL }, + { "MONTH" , HB_FS_PUBLIC, {HB_FUNCNAME( MONTH )} , NULL }, + { "PCOL" , HB_FS_PUBLIC, {HB_FUNCNAME( PCOL )} , NULL }, + { "PCOUNT" , HB_FS_PUBLIC, {HB_FUNCNAME( PCOUNT )} , NULL }, + { "PROW" , HB_FS_PUBLIC, {HB_FUNCNAME( PROW )} , NULL }, + { "RECCOUNT" , HB_FS_PUBLIC, {HB_FUNCNAME( RECCOUNT )} , NULL }, + { "RECNO" , HB_FS_PUBLIC, {HB_FUNCNAME( RECNO )} , NULL }, + { "REPLICATE" , HB_FS_PUBLIC, {HB_FUNCNAME( REPLICATE )} , NULL }, + { "RLOCK" , HB_FS_PUBLIC, {HB_FUNCNAME( RLOCK )} , NULL }, + { "ROUND" , HB_FS_PUBLIC, {HB_FUNCNAME( ROUND )} , NULL }, + { "ROW" , HB_FS_PUBLIC, {HB_FUNCNAME( ROW )} , NULL }, + { "RTRIM" , HB_FS_PUBLIC, {HB_FUNCNAME( RTRIM )} , NULL }, + { "SECONDS" , HB_FS_PUBLIC, {HB_FUNCNAME( SECONDS )} , NULL }, + { "SELECT" , HB_FS_PUBLIC, {HB_FUNCNAME( SELECT )} , NULL }, + { "SETPOS" , HB_FS_PUBLIC, {HB_FUNCNAME( SETPOS )} , NULL }, + { "SETPOSBS" , HB_FS_PUBLIC, {HB_FUNCNAME( SETPOSBS )} , NULL }, + { "SPACE" , HB_FS_PUBLIC, {HB_FUNCNAME( SPACE )} , NULL }, + { "SQRT" , HB_FS_PUBLIC, {HB_FUNCNAME( SQRT )} , NULL }, + { "STR" , HB_FS_PUBLIC, {HB_FUNCNAME( STR )} , NULL }, + { "SUBSTR" , HB_FS_PUBLIC, {HB_FUNCNAME( SUBSTR )} , NULL }, + { "TIME" , HB_FS_PUBLIC, {HB_FUNCNAME( TIME )} , NULL }, + { "TRANSFORM" , HB_FS_PUBLIC, {HB_FUNCNAME( TRANSFORM )} , NULL }, + { "TRIM" , HB_FS_PUBLIC, {HB_FUNCNAME( TRIM )} , NULL }, + { "TYPE" , HB_FS_PUBLIC, {HB_FUNCNAME( TYPE )} , NULL }, + { "UPPER" , HB_FS_PUBLIC, {HB_FUNCNAME( UPPER )} , NULL }, + { "VAL" , HB_FS_PUBLIC, {HB_FUNCNAME( VAL )} , NULL }, + { "WORD" , HB_FS_PUBLIC, {HB_FUNCNAME( WORD )} , NULL }, + { "YEAR" , HB_FS_PUBLIC, {HB_FUNCNAME( YEAR )} , NULL } }; /* NOTE: The system symbol table with runtime functions HAVE TO be called diff --git a/harbour/source/vm/macro.c b/harbour/source/vm/macro.c index 6718a44b96..09028793f6 100644 --- a/harbour/source/vm/macro.c +++ b/harbour/source/vm/macro.c @@ -1225,7 +1225,7 @@ void hb_compGenPushSymbol( char * szSymbolName, BOOL bFunction, BOOL bAlias, HB_ if( bFunction ) { - if( pSym && ((pSym->pSymbol->pFunPtr == NULL) || (pSym->pSymbol->cScope & HB_FS_STATIC)) ) + if( pSym && ((pSym->pSymbol->value.pFunPtr == NULL) || (pSym->pSymbol->cScope & HB_FS_STATIC)) ) { /* static functions are not allowed in macro */ HB_MACRO_DATA->status |= HB_MACRO_UNKN_SYM; diff --git a/harbour/source/vm/runner.c b/harbour/source/vm/runner.c index f8a051684e..b85946f729 100644 --- a/harbour/source/vm/runner.c +++ b/harbour/source/vm/runner.c @@ -335,7 +335,7 @@ PHRB_BODY hb_hrbLoad( char* szHrb ) { pSymRead[ ul ].szName = hb_hrbFileReadId( file, szFileName ); pSymRead[ ul ].cScope = hb_hrbFileReadByte( file, szFileName ); - pSymRead[ ul ].pFunPtr = ( PHB_FUNC ) ( ULONG ) hb_hrbFileReadByte( file, szFileName ); + pSymRead[ ul ].value.pFunPtr = ( PHB_FUNC ) ( ULONG ) hb_hrbFileReadByte( file, szFileName ); pSymRead[ ul ].pDynSym = NULL; if ( pHrbBody->ulSymStart == -1 && @@ -366,7 +366,7 @@ PHRB_BODY hb_hrbLoad( char* szHrb ) s_ulSymEntry = 0; for( ul = 0; ul < pHrbBody->ulSymbols; ul++ ) /* Linker */ { - if( ( ( ULONG ) pSymRead[ ul ].pFunPtr ) == SYM_FUNC ) + if( ( ( ULONG ) pSymRead[ ul ].value.pFunPtr ) == SYM_FUNC ) { ulPos = hb_hrbFindSymbol( pSymRead[ ul ].szName, pDynFunc, pHrbBody->ulFuncs ); if( ulPos != SYM_NOT_FOUND ) @@ -380,12 +380,12 @@ PHRB_BODY hb_hrbLoad( char* szHrb ) break; } */ - pSymRead[ ul ].pFunPtr = pDynFunc[ ulPos ].pAsmCall->pFunPtr; + pSymRead[ ul ].value.pFunPtr = pDynFunc[ ulPos ].pAsmCall->pFunPtr; } else - pSymRead[ ul ].pFunPtr = ( PHB_FUNC ) SYM_EXTERN; + pSymRead[ ul ].value.pFunPtr = ( PHB_FUNC ) SYM_EXTERN; } - if( ( ( ULONG ) pSymRead[ ul ].pFunPtr ) == SYM_EXTERN ) + if( ( ( ULONG ) pSymRead[ ul ].value.pFunPtr ) == SYM_EXTERN ) { /* External function */ pDynSym = hb_dynsymFind( pSymRead[ ul ].szName ); if( !pDynSym ) @@ -397,7 +397,7 @@ PHRB_BODY hb_hrbLoad( char* szHrb ) bError = TRUE; break; } - pSymRead[ ul ].pFunPtr = pDynSym->pFunPtr; + pSymRead[ ul ].value.pFunPtr = pDynSym->pFunPtr; } } if( bError ) @@ -429,7 +429,7 @@ void hb_hrbDo( PHRB_BODY pHrbBody, int argc, char * argv[] ) * to pass any parameters to this function because they * cannot be used to initialize static variable. */ - pHrbBody->pSymRead[ ul ].pFunPtr(); + pHrbBody->pSymRead[ ul ].value.pFunPtr(); } } for( ul = 0; ul < pHrbBody->ulSymbols; ul++ ) /* Check INIT functions */