2004-10-20 07:00 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbdefs.h
+ added macros HB_{PUT|GET}_{LONG|PTR}
* changed HB_CAST_BYTE_NUMBERS_OFF to HB_STRICT_ALIGNMENT
* harbour/source/vm/fm.c
* harbour/source/vm/hvm.c
* harbour/source/vm/macro.c
* replaced code which made pointer casting without respecting
machine alignment with proper macros
This commit is contained in:
@@ -8,6 +8,17 @@
|
||||
2002-12-01 23:12 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2004-10-20 07:00 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/include/hbdefs.h
|
||||
+ added macros HB_{PUT|GET}_{LONG|PTR}
|
||||
* changed HB_CAST_BYTE_NUMBERS_OFF to HB_STRICT_ALIGNMENT
|
||||
|
||||
* harbour/source/vm/fm.c
|
||||
* harbour/source/vm/hvm.c
|
||||
* harbour/source/vm/macro.c
|
||||
* replaced code which made pointer casting without respecting
|
||||
machine alignment with proper macros
|
||||
|
||||
2004-10-19 22:25 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/bin/hb-func.sh
|
||||
* changed 'sed' and 'tr' expresions to be compatible with SunOS
|
||||
|
||||
@@ -533,13 +533,53 @@ typedef long HB_PTRDIFF;
|
||||
( ( ( UINT64 ) ( w ) & HB_LL( 0x0000FF0000000000 ) ) >> 24 ) | \
|
||||
( ( ( UINT64 ) ( w ) & HB_LL( 0x00FF000000000000 ) ) >> 40 ) | \
|
||||
( ( ( UINT64 ) ( w ) & HB_LL( 0xFF00000000000000 ) ) >> 56 ) ) )
|
||||
|
||||
/*
|
||||
* on some machines it's not safe to take numbers from BYTE buffer
|
||||
* directly by C casting because they have to be stored at odd addresses
|
||||
* Now this hack is only for integer numbers, if you will need it for
|
||||
* double too on your machine please define proper macros/function
|
||||
* on some machines it's not safe to directly access pointers stored
|
||||
* at byte buffer they have to be stored at odd (or other alignment)
|
||||
* addresses.
|
||||
* For example SPARC which needs 4 byte alignment for pointers
|
||||
* and 8 byte alignment for doubles and structures (when GCC is used)
|
||||
* IMHO need HB_ARCH_<arch> macro yet - the same OS can be used with
|
||||
* different architectures - SPARC + LINUX, ALPHA + LINUX
|
||||
*/
|
||||
#if defined( HB_CAST_BYTE_NUMBERS_OFF ) || !defined( HB_LITTLE_ENDIAN )
|
||||
#if defined( HB_OS_SUNOS )
|
||||
# define HB_STRICT_ALIGNMENT
|
||||
#endif
|
||||
|
||||
/*
|
||||
* These macros are necessary for architectures which need
|
||||
* strict alignment for pointers.
|
||||
*/
|
||||
#if defined( HB_BIG_ENDIAN )
|
||||
# if defined( HB_ARCH_64BIT )
|
||||
# define HB_PUT_LONG( p, v ) HB_PUT_BE_UINT64( p, ( UINT64 ) ( v ) )
|
||||
# define HB_GET_LONG( p ) HB_GET_BE_UINT64( p )
|
||||
# else
|
||||
# define HB_PUT_LONG( p, v ) HB_PUT_BE_UINT32( p, ( UINT32 ) ( v ) )
|
||||
# define HB_GET_LONG( p ) HB_GET_BE_UINT32( p )
|
||||
# endif
|
||||
#else
|
||||
# if defined( HB_ARCH_64BIT )
|
||||
# define HB_PUT_LONG( p, v ) HB_PUT_LE_UINT64( p, ( UINT64 ) ( v ) )
|
||||
# define HB_GET_LONG( p ) HB_GET_LE_UINT64( p )
|
||||
# else
|
||||
# define HB_PUT_LONG( p, v ) HB_PUT_LE_UINT32( p, ( UINT32 ) ( v ) )
|
||||
# define HB_GET_LONG( p ) HB_GET_LE_UINT32( p )
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined( HB_STRICT_ALIGNMENT )
|
||||
# define HB_PUT_PTR( p, v ) { *( void ** ) ( p ) = ( void * ) ( v ); }
|
||||
# define HB_GET_PTR( p ) ( *( void ** ) ( p ) )
|
||||
#else
|
||||
# define HB_PUT_PTR( p, v ) HB_PUT_LONG( p, v )
|
||||
# define HB_GET_PTR( p ) ( ( void * ) HB_GET_LONG( p ) )
|
||||
#endif
|
||||
|
||||
|
||||
/* Now the rest of endian macros */
|
||||
#if defined( HB_STRICT_ALIGNMENT ) || !defined( HB_LITTLE_ENDIAN )
|
||||
|
||||
#define HB_GET_LE_UINT16( p ) ( ( UINT16 ) \
|
||||
( ( UINT16 ) (( BYTE * )( p ))[0] | \
|
||||
@@ -581,7 +621,7 @@ typedef long HB_PTRDIFF;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined( HB_CAST_BYTE_NUMBERS_OFF ) || !defined( HB_BIG_ENDIAN )
|
||||
#if defined( HB_STRICT_ALIGNMENT ) || !defined( HB_BIG_ENDIAN )
|
||||
|
||||
#define HB_GET_BE_UINT16( p ) ( ( UINT16 ) \
|
||||
( ( UINT16 ) (( BYTE * )( p ))[0] << 8 | \
|
||||
@@ -648,7 +688,7 @@ typedef long HB_PTRDIFF;
|
||||
#elif defined( HB_BIG_ENDIAN )
|
||||
/* We use Big-Endian here */
|
||||
|
||||
# ifndef HB_CAST_BYTE_NUMBERS_OFF
|
||||
# ifndef HB_STRICT_ALIGNMENT
|
||||
|
||||
#define HB_GET_BE_UINT16( p ) ( *( UINT16 * )( p ) )
|
||||
#define HB_PUT_BE_UINT16( p, w ) ( *( UINT16 * )( p ) = ( UINT16 ) ( w ) )
|
||||
@@ -769,7 +809,7 @@ typedef long HB_PTRDIFF;
|
||||
#else /* HB_LITTLE_ENDIAN */
|
||||
/* We use Little-Endian here */
|
||||
|
||||
# ifndef HB_CAST_BYTE_NUMBERS_OFF
|
||||
# ifndef HB_STRICT_ALIGNMENT
|
||||
|
||||
#define HB_GET_LE_UINT16( p ) ( *( UINT16 * )( p ) )
|
||||
#define HB_PUT_LE_UINT16( p, w ) ( *( UINT16 * )( p ) = ( UINT16 ) ( w ) )
|
||||
|
||||
@@ -146,10 +146,7 @@ void HB_EXPORT * hb_xalloc( ULONG ulSize ) /* allocates fixed memory, re
|
||||
( ( PHB_MEMINFO ) pMem )->pNextBlock = NULL;
|
||||
|
||||
( ( PHB_MEMINFO ) pMem )->ulSignature = HB_MEMINFO_SIGNATURE;
|
||||
{
|
||||
ULONG *pSig = (ULONG *)( ( ( unsigned char * ) pMem ) + ulSize + sizeof(HB_MEMINFO) );
|
||||
*pSig = HB_MEMINFO_SIGNATURE;
|
||||
}
|
||||
HB_PUT_LONG( ( ( BYTE * ) pMem ) + ulSize + sizeof(HB_MEMINFO), HB_MEMINFO_SIGNATURE );
|
||||
( ( PHB_MEMINFO ) pMem )->ulSize = ulSize; /* size of the memory block */
|
||||
|
||||
if( hb_tr_level() >= HB_TR_DEBUG )
|
||||
@@ -231,10 +228,7 @@ void HB_EXPORT * hb_xgrab( ULONG ulSize ) /* allocates fixed memory, exi
|
||||
( ( PHB_MEMINFO ) pMem )->pNextBlock = NULL;
|
||||
|
||||
( ( PHB_MEMINFO ) pMem )->ulSignature = HB_MEMINFO_SIGNATURE;
|
||||
{
|
||||
ULONG *pSig = (ULONG *)( ( ( unsigned char * ) pMem ) + ulSize + sizeof(HB_MEMINFO) );
|
||||
*pSig = HB_MEMINFO_SIGNATURE;
|
||||
}
|
||||
HB_PUT_LONG( ( ( BYTE * ) pMem ) + ulSize + sizeof(HB_MEMINFO), HB_MEMINFO_SIGNATURE );
|
||||
( ( PHB_MEMINFO ) pMem )->ulSize = ulSize; /* size of the memory block */
|
||||
|
||||
if( hb_tr_level() >= HB_TR_DEBUG )
|
||||
@@ -289,7 +283,6 @@ void HB_EXPORT * hb_xrealloc( void * pMem, ULONG ulSize ) /* reallocates m
|
||||
|
||||
PHB_MEMINFO pMemBlock;
|
||||
ULONG ulMemSize;
|
||||
ULONG *pSig;
|
||||
|
||||
HB_TRACE_STEALTH(HB_TR_DEBUG, ("hb_xrealloc(%p, %lu)", pMem, ulSize));
|
||||
|
||||
@@ -306,8 +299,7 @@ void HB_EXPORT * hb_xrealloc( void * pMem, ULONG ulSize ) /* reallocates m
|
||||
|
||||
ulMemSize = pMemBlock->ulSize;
|
||||
|
||||
pSig = (ULONG *)( ( ( unsigned char * ) pMem ) + ulMemSize );
|
||||
if( *pSig != HB_MEMINFO_SIGNATURE )
|
||||
if ( HB_GET_LONG( ( ( BYTE * ) pMem ) + ulMemSize ) != HB_MEMINFO_SIGNATURE )
|
||||
hb_errInternal( HB_EI_XMEMOVERFLOW, NULL, NULL, NULL );
|
||||
|
||||
pMem = realloc( pMemBlock, ulSize + sizeof( HB_MEMINFO ) + sizeof( ULONG ) );
|
||||
@@ -320,10 +312,7 @@ void HB_EXPORT * hb_xrealloc( void * pMem, ULONG ulSize ) /* reallocates m
|
||||
hb_errInternal( HB_EI_XREALLOC, NULL, NULL, NULL );
|
||||
|
||||
( ( PHB_MEMINFO ) pMem )->ulSize = ulSize; /* size of the memory block */
|
||||
{
|
||||
ULONG *pSig = (ULONG *)( ( ( unsigned char * ) pMem ) + ulSize + sizeof(HB_MEMINFO) );
|
||||
*pSig = HB_MEMINFO_SIGNATURE;
|
||||
}
|
||||
HB_PUT_LONG( ( ( BYTE * ) pMem ) + ulSize + sizeof(HB_MEMINFO), HB_MEMINFO_SIGNATURE );
|
||||
if( ( ( PHB_MEMINFO ) pMem )->pPrevBlock )
|
||||
( ( PHB_MEMINFO ) pMem )->pPrevBlock->pNextBlock = ( PHB_MEMINFO ) pMem;
|
||||
if( ( ( PHB_MEMINFO ) pMem )->pNextBlock )
|
||||
@@ -365,13 +354,11 @@ void HB_EXPORT hb_xfree( void * pMem ) /* frees fixed memory */
|
||||
if( pMem )
|
||||
{
|
||||
PHB_MEMINFO pMemBlock = ( PHB_MEMINFO ) ( ( char * ) pMem - sizeof( HB_MEMINFO ) );
|
||||
ULONG *pSig;
|
||||
|
||||
if( pMemBlock->ulSignature != HB_MEMINFO_SIGNATURE )
|
||||
hb_errInternal( HB_EI_XFREEINV, NULL, NULL, NULL );
|
||||
|
||||
pSig = (ULONG *)( ( ( unsigned char * ) pMem ) + pMemBlock->ulSize );
|
||||
if( *pSig != HB_MEMINFO_SIGNATURE )
|
||||
if ( HB_GET_LONG( ( ( BYTE * ) pMem ) + pMemBlock->ulSize ) != HB_MEMINFO_SIGNATURE )
|
||||
hb_errInternal( HB_EI_XMEMOVERFLOW, NULL, NULL, NULL );
|
||||
|
||||
s_lMemoryConsumed -= pMemBlock->ulSize;
|
||||
|
||||
@@ -1358,9 +1358,9 @@ void HB_EXPORT hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
}
|
||||
else if( pCode[w] == HB_P_MPUSHSYM )
|
||||
{
|
||||
HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
HB_DYNS_PTR pDynSym = ( HB_DYNS_PTR ) HB_GET_PTR( pCode + w + 1 );
|
||||
|
||||
hb_vm_apExtraParamsSymbol[hb_vm_iExtraParamsIndex - 1] = ( *pDynSym )->pSymbol;
|
||||
hb_vm_apExtraParamsSymbol[hb_vm_iExtraParamsIndex - 1] = pDynSym->pSymbol;
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
}
|
||||
else
|
||||
@@ -1492,35 +1492,35 @@ void HB_EXPORT hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
|
||||
case HB_P_MMESSAGE:
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_vmPushSymbol( ( *pDynSym )->pSymbol );
|
||||
HB_DYNS_PTR pDynSym = ( HB_DYNS_PTR) HB_GET_PTR( pCode + w + 1 );
|
||||
hb_vmPushSymbol( pDynSym->pSymbol );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_MPOPALIASEDFIELD:
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_vmPopAliasedField( ( *pDynSym )->pSymbol );
|
||||
HB_DYNS_PTR pDynSym = ( HB_DYNS_PTR ) HB_GET_PTR( pCode + w + 1 );
|
||||
hb_vmPopAliasedField( pDynSym->pSymbol );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_MPOPALIASEDVAR:
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_vmPopAliasedVar( ( *pDynSym )->pSymbol );
|
||||
HB_DYNS_PTR pDynSym = ( HB_DYNS_PTR ) HB_GET_PTR( pCode + w + 1 );
|
||||
hb_vmPopAliasedVar( pDynSym->pSymbol );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_MPOPFIELD:
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
HB_DYNS_PTR pDynSym = ( HB_DYNS_PTR ) HB_GET_PTR( pCode + w + 1 );
|
||||
/* Pops a value from the eval stack and uses it to set
|
||||
* a new value of the given field
|
||||
*/
|
||||
hb_rddPutFieldValue( ( hb_stackItemFromTop(-1) ), ( *pDynSym )->pSymbol );
|
||||
hb_rddPutFieldValue( ( hb_stackItemFromTop(-1) ), pDynSym->pSymbol );
|
||||
hb_stackDec();
|
||||
hb_itemClear( ( hb_stackTopItem() ) );
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPopField)"));
|
||||
@@ -1530,9 +1530,9 @@ void HB_EXPORT hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
|
||||
case HB_P_MPOPMEMVAR:
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
HB_DYNS_PTR pDynSym = ( HB_DYNS_PTR ) HB_GET_PTR( pCode + w + 1 );
|
||||
hb_stackDec();
|
||||
hb_memvarSetValue( ( *pDynSym )->pSymbol, ( hb_stackTopItem() ) );
|
||||
hb_memvarSetValue( pDynSym->pSymbol, ( hb_stackTopItem() ) );
|
||||
hb_itemClear( ( hb_stackTopItem() ) );
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPopMemvar)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
@@ -1541,16 +1541,16 @@ void HB_EXPORT hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
|
||||
case HB_P_MPUSHALIASEDFIELD:
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_vmPushAliasedField( ( *pDynSym )->pSymbol );
|
||||
HB_DYNS_PTR pDynSym = ( HB_DYNS_PTR ) HB_GET_PTR( pCode + w + 1 );
|
||||
hb_vmPushAliasedField( pDynSym->pSymbol );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_MPUSHALIASEDVAR:
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_vmPushAliasedVar( ( *pDynSym )->pSymbol );
|
||||
HB_DYNS_PTR pDynSym = ( HB_DYNS_PTR ) HB_GET_PTR( pCode + w + 1 );
|
||||
hb_vmPushAliasedVar( pDynSym->pSymbol );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
@@ -1573,10 +1573,10 @@ void HB_EXPORT hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
|
||||
case HB_P_MPUSHFIELD:
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
HB_DYNS_PTR pDynSym = ( HB_DYNS_PTR ) HB_GET_PTR( pCode + w + 1 );
|
||||
/* It pushes the current value of the given field onto the eval stack
|
||||
*/
|
||||
hb_rddGetFieldValue( ( hb_stackTopItem() ), ( *pDynSym )->pSymbol );
|
||||
hb_rddGetFieldValue( ( hb_stackTopItem() ), pDynSym->pSymbol );
|
||||
hb_stackPush();
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPushField)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
@@ -1585,8 +1585,8 @@ void HB_EXPORT hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
|
||||
case HB_P_MPUSHMEMVAR:
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_memvarGetValue( ( hb_stackTopItem() ), ( *pDynSym )->pSymbol );
|
||||
HB_DYNS_PTR pDynSym = ( HB_DYNS_PTR ) HB_GET_PTR( pCode + w + 1 );
|
||||
hb_memvarGetValue( ( hb_stackTopItem() ), pDynSym->pSymbol );
|
||||
hb_stackPush();
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPushMemvar)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
@@ -1595,8 +1595,8 @@ void HB_EXPORT hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
|
||||
case HB_P_MPUSHMEMVARREF:
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_memvarGetRefer( ( hb_stackTopItem() ), ( *pDynSym )->pSymbol );
|
||||
HB_DYNS_PTR pDynSym = ( HB_DYNS_PTR ) HB_GET_PTR( pCode + w + 1 );
|
||||
hb_memvarGetRefer( ( hb_stackTopItem() ), pDynSym->pSymbol );
|
||||
hb_stackPush();
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPushMemvarRef)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
@@ -1605,16 +1605,16 @@ void HB_EXPORT hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
|
||||
case HB_P_MPUSHSYM:
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_vmPushMacroSymbol( ( *pDynSym )->pSymbol );
|
||||
HB_DYNS_PTR pDynSym = ( HB_DYNS_PTR ) HB_GET_PTR( pCode + w + 1 );
|
||||
hb_vmPushMacroSymbol( pDynSym->pSymbol );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_MPUSHVARIABLE:
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_vmPushVariable( ( *pDynSym )->pSymbol );
|
||||
HB_DYNS_PTR pDynSym = ( HB_DYNS_PTR ) HB_GET_PTR( pCode + w + 1 );
|
||||
hb_vmPushVariable( pDynSym->pSymbol );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
@@ -1623,7 +1623,7 @@ void HB_EXPORT hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
{
|
||||
USHORT uiSize = HB_PCODE_MKUSHORT( &( pCode[ w + 1 ] ) );
|
||||
|
||||
hb_vmPushString( ( char * ) ( pCode ) + w + 3, ( ULONG )( uiSize - 1 ) );
|
||||
hb_vmPushString( ( char * ) ( pCode + w + 3 ), ( ULONG )( uiSize - 1 ) );
|
||||
w += ( 3 + uiSize );
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1195,7 +1195,13 @@ void hb_compMemvarGenPCode( BYTE bPCode, char * szVarName, HB_MACRO_DECL )
|
||||
*/
|
||||
pSym = hb_dynsymGet( szVarName );
|
||||
hb_compGenPCode1( bPCode, HB_MACRO_PARAM );
|
||||
hb_compGenPCodeN( ( BYTE * )( &pSym ), sizeof( pSym ), HB_MACRO_PARAM );
|
||||
{
|
||||
BYTE byBuf[ sizeof( HB_DYNS_PTR ) ];
|
||||
|
||||
HB_PUT_PTR( byBuf, pSym );
|
||||
hb_compGenPCodeN( byBuf, sizeof( pSym ), HB_MACRO_PARAM );
|
||||
}
|
||||
/* hb_compGenPCodeN( ( BYTE * )( &pSym ), sizeof( pSym ), HB_MACRO_PARAM ); */
|
||||
}
|
||||
|
||||
/* generates the pcode to push a symbol on the virtual machine stack */
|
||||
@@ -1232,9 +1238,14 @@ void hb_compGenPushSymbol( char * szSymbolName, BOOL bFunction, BOOL bAlias, HB_
|
||||
else
|
||||
pSym = hb_dynsymGet( szSymbolName );
|
||||
|
||||
|
||||
hb_compGenPCode1( HB_P_MPUSHSYM, HB_MACRO_PARAM );
|
||||
hb_compGenPCodeN( ( BYTE * ) &pSym, sizeof( pSym ), HB_MACRO_PARAM );
|
||||
{
|
||||
BYTE byBuf[ sizeof( HB_DYNS_PTR ) ];
|
||||
|
||||
HB_PUT_PTR( byBuf, pSym );
|
||||
hb_compGenPCodeN( byBuf, sizeof( pSym ), HB_MACRO_PARAM );
|
||||
}
|
||||
/* hb_compGenPCodeN( ( BYTE * ) &pSym, sizeof( pSym ), HB_MACRO_PARAM ); */
|
||||
}
|
||||
|
||||
/* generates the pcode to push a long number on the virtual machine stack */
|
||||
@@ -1281,7 +1292,13 @@ void hb_compGenMessage( char * szMsgName, HB_MACRO_DECL )
|
||||
HB_DYNS_PTR pSym = hb_dynsymGet( szMsgName );
|
||||
|
||||
hb_compGenPCode1( HB_P_MMESSAGE, HB_MACRO_PARAM );
|
||||
hb_compGenPCodeN( ( BYTE * ) &pSym, sizeof( pSym ), HB_MACRO_PARAM );
|
||||
{
|
||||
BYTE byBuf[ sizeof( HB_DYNS_PTR ) ];
|
||||
|
||||
HB_PUT_PTR( byBuf, pSym );
|
||||
hb_compGenPCodeN( byBuf, sizeof( pSym ), HB_MACRO_PARAM );
|
||||
}
|
||||
/* hb_compGenPCodeN( ( BYTE * ) &pSym, sizeof( pSym ), HB_MACRO_PARAM ); */
|
||||
}
|
||||
|
||||
/* generates an underscore-symbol name for a data assignment */
|
||||
|
||||
Reference in New Issue
Block a user