20000422-20:37 GMT+1 Victor Szakats <info@szelvesz.hu>
This commit is contained in:
@@ -1,3 +1,17 @@
|
||||
20000422-20:37 GMT+1 Victor Szakats <info@szelvesz.hu>
|
||||
|
||||
* source/vm/hvm.c
|
||||
% Removed the temporary uiParams variable in hb_vmExecute().
|
||||
|
||||
* include/hbvm.h
|
||||
* include/hbvmpub.h
|
||||
* source/vm/hvm.c
|
||||
! hb_vmExecute() first param marked "const"
|
||||
|
||||
* source/compiler/harbour.c
|
||||
* source/compiler/genc.c
|
||||
+ Added support for empty .prg files. Thanks to Jose Lalin.
|
||||
|
||||
20000422-18:41 GMT+1 Victor Szakats <info@szelvesz.hu>
|
||||
|
||||
* include/hbpcode.h
|
||||
|
||||
@@ -47,7 +47,7 @@ extern void hb_vmInit( BOOL bStartMainProc );
|
||||
extern void hb_vmQuit( void );
|
||||
|
||||
/* Harbour virtual machine functions */
|
||||
extern void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols ); /* invokes the virtual machine */
|
||||
extern void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ); /* invokes the virtual machine */
|
||||
extern void hb_vmProcessSymbols( PHB_SYMB pSymbols, USHORT uiSymbols ); /* statics symbols initialization */
|
||||
extern void hb_vmSymbolInit_RT( void ); /* initialization of runtime support symbols */
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ typedef HB_DYNS_FUNC( PHB_DYNS_FUNC );
|
||||
#define HB_FS_MESSAGE ( ( HB_SYMBOLSCOPE ) 0x20 )
|
||||
#define HB_FS_MEMVAR ( ( HB_SYMBOLSCOPE ) 0x80 )
|
||||
|
||||
extern void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols ); /* invokes the virtual machine */
|
||||
extern void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ); /* invokes the virtual machine */
|
||||
|
||||
#if defined(HB_EXTERN_C)
|
||||
}
|
||||
|
||||
@@ -66,141 +66,146 @@ void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language ou
|
||||
HB_VER_MAJOR, HB_VER_MINOR, HB_VER_REVISION, HB_VER_BUILD, HB_VER_YEAR, HB_VER_MONTH, HB_VER_DAY );
|
||||
fprintf( yyc, " * Generated C source code\n */\n\n" );
|
||||
|
||||
fprintf( yyc, "#include \"hbvmpub.h\"\n" );
|
||||
if( hb_comp_iGenCOutput != HB_COMPGENC_COMPACT )
|
||||
fprintf( yyc, "#include \"hbpcode.h\"\n" );
|
||||
fprintf( yyc, "#include \"hbinit.h\"\n\n\n" );
|
||||
|
||||
if( ! hb_comp_bStartProc )
|
||||
pFunc = pFunc->pNext; /* No implicit starting procedure */
|
||||
|
||||
/* write functions prototypes for PRG defined functions */
|
||||
while( pFunc )
|
||||
if( hb_comp_iFunctionCnt )
|
||||
{
|
||||
if( pFunc->cScope & HB_FS_STATIC || pFunc->cScope & HB_FS_INIT || pFunc->cScope & HB_FS_EXIT )
|
||||
fprintf( yyc, "static " );
|
||||
else
|
||||
fprintf( yyc, " " );
|
||||
|
||||
if( pFunc == hb_comp_pInitFunc )
|
||||
fprintf( yyc, "HARBOUR hb_INITSTATICS( void );\n" ); /* NOTE: hb_ intentionally in lower case */
|
||||
else
|
||||
fprintf( yyc, "HB_FUNC( %s );\n", pFunc->szName );
|
||||
pFunc = pFunc->pNext;
|
||||
}
|
||||
/* write functions prototypes for called functions outside this PRG */
|
||||
pFunc = hb_comp_funcalls.pFirst;
|
||||
while( pFunc )
|
||||
{
|
||||
pFTemp = hb_compFunctionFind( pFunc->szName );
|
||||
if( ! pFTemp || pFTemp == hb_comp_functions.pFirst )
|
||||
fprintf( yyc, "extern HB_FUNC( %s );\n", pFunc->szName );
|
||||
pFunc = pFunc->pNext;
|
||||
}
|
||||
|
||||
/* writes the symbol table */
|
||||
/* Generate the wrapper that will initialize local symbol table
|
||||
*/
|
||||
hb_strupr( pFileName->szName );
|
||||
fprintf( yyc, "\n\nHB_INIT_SYMBOLS_BEGIN( hb_vm_SymbolInit_%s%s )\n", hb_comp_szPrefix, pFileName->szName );
|
||||
|
||||
while( pSym )
|
||||
{
|
||||
if( pSym->szName[ 0 ] == '(' )
|
||||
fprintf( yyc, "#include \"hbvmpub.h\"\n" );
|
||||
if( hb_comp_iGenCOutput != HB_COMPGENC_COMPACT )
|
||||
fprintf( yyc, "#include \"hbpcode.h\"\n" );
|
||||
fprintf( yyc, "#include \"hbinit.h\"\n\n\n" );
|
||||
|
||||
if( ! hb_comp_bStartProc )
|
||||
pFunc = pFunc->pNext; /* No implicit starting procedure */
|
||||
|
||||
/* write functions prototypes for PRG defined functions */
|
||||
while( pFunc )
|
||||
{
|
||||
/* Since the normal function cannot be INIT and EXIT at the same time
|
||||
* 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 */
|
||||
if( pFunc->cScope & HB_FS_STATIC || pFunc->cScope & HB_FS_INIT || pFunc->cScope & HB_FS_EXIT )
|
||||
fprintf( yyc, "static " );
|
||||
else
|
||||
fprintf( yyc, " " );
|
||||
|
||||
if( pFunc == hb_comp_pInitFunc )
|
||||
fprintf( yyc, "HARBOUR hb_INITSTATICS( void );\n" ); /* NOTE: hb_ intentionally in lower case */
|
||||
else
|
||||
fprintf( yyc, "HB_FUNC( %s );\n", pFunc->szName );
|
||||
pFunc = pFunc->pNext;
|
||||
}
|
||||
else
|
||||
/* write functions prototypes for called functions outside this PRG */
|
||||
pFunc = hb_comp_funcalls.pFirst;
|
||||
while( pFunc )
|
||||
{
|
||||
fprintf( yyc, "{ \"%s\", ", pSym->szName );
|
||||
|
||||
if( pSym->cScope & HB_FS_STATIC )
|
||||
fprintf( yyc, "HB_FS_STATIC" );
|
||||
|
||||
else if( pSym->cScope & HB_FS_INIT )
|
||||
fprintf( yyc, "HB_FS_INIT" );
|
||||
|
||||
else if( pSym->cScope & HB_FS_EXIT )
|
||||
fprintf( yyc, "HB_FS_EXIT" );
|
||||
|
||||
else
|
||||
fprintf( yyc, "HB_FS_PUBLIC" );
|
||||
|
||||
if( pSym->cScope & VS_MEMVAR )
|
||||
fprintf( yyc, " | HB_FS_MEMVAR" );
|
||||
|
||||
if( ( pSym->cScope != HB_FS_MESSAGE ) && ( pSym->cScope & HB_FS_MESSAGE ) ) /* only for non public symbols */
|
||||
fprintf( yyc, " | HB_FS_MESSAGE" );
|
||||
|
||||
/* 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 );
|
||||
else if( hb_compFunCallFind( pSym->szName ) ) /* is it a function called from this module */
|
||||
fprintf( yyc, ", HB_FUNCNAME( %s ), NULL }", pSym->szName );
|
||||
else
|
||||
fprintf( yyc, ", NULL, NULL }" ); /* memvar */
|
||||
pFTemp = hb_compFunctionFind( pFunc->szName );
|
||||
if( ! pFTemp || pFTemp == hb_comp_functions.pFirst )
|
||||
fprintf( yyc, "extern HB_FUNC( %s );\n", pFunc->szName );
|
||||
pFunc = pFunc->pNext;
|
||||
}
|
||||
|
||||
/* writes the symbol table */
|
||||
/* Generate the wrapper that will initialize local symbol table
|
||||
*/
|
||||
hb_strupr( pFileName->szName );
|
||||
fprintf( yyc, "\n\nHB_INIT_SYMBOLS_BEGIN( hb_vm_SymbolInit_%s%s )\n", hb_comp_szPrefix, pFileName->szName );
|
||||
|
||||
while( pSym )
|
||||
{
|
||||
if( pSym->szName[ 0 ] == '(' )
|
||||
{
|
||||
/* Since the normal function cannot be INIT and EXIT at the same time
|
||||
* 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 */
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf( yyc, "{ \"%s\", ", pSym->szName );
|
||||
|
||||
if( pSym->cScope & HB_FS_STATIC )
|
||||
fprintf( yyc, "HB_FS_STATIC" );
|
||||
|
||||
else if( pSym->cScope & HB_FS_INIT )
|
||||
fprintf( yyc, "HB_FS_INIT" );
|
||||
|
||||
else if( pSym->cScope & HB_FS_EXIT )
|
||||
fprintf( yyc, "HB_FS_EXIT" );
|
||||
|
||||
else
|
||||
fprintf( yyc, "HB_FS_PUBLIC" );
|
||||
|
||||
if( pSym->cScope & VS_MEMVAR )
|
||||
fprintf( yyc, " | HB_FS_MEMVAR" );
|
||||
|
||||
if( ( pSym->cScope != HB_FS_MESSAGE ) && ( pSym->cScope & HB_FS_MESSAGE ) ) /* only for non public symbols */
|
||||
fprintf( yyc, " | HB_FS_MESSAGE" );
|
||||
|
||||
/* 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 );
|
||||
else if( hb_compFunCallFind( pSym->szName ) ) /* is it a function called from this module */
|
||||
fprintf( yyc, ", HB_FUNCNAME( %s ), NULL }", pSym->szName );
|
||||
else
|
||||
fprintf( yyc, ", NULL, NULL }" ); /* memvar */
|
||||
}
|
||||
|
||||
if( pSym != hb_comp_symbols.pLast )
|
||||
fprintf( yyc, ",\n" );
|
||||
|
||||
pSym = pSym->pNext;
|
||||
}
|
||||
|
||||
fprintf( yyc, "\nHB_INIT_SYMBOLS_END( hb_vm_SymbolInit_%s%s )\n"
|
||||
"#if defined(_MSC_VER)\n"
|
||||
" #if _MSC_VER >= 1010\n"
|
||||
/* [pt] First version of MSC I have that supports this */
|
||||
/* is msvc4.1 (which is msc 10.10) */
|
||||
" #pragma data_seg( \".CRT$XIY\" )\n"
|
||||
" #pragma comment( linker, \"/Merge:.CRT=.data\" )\n"
|
||||
" #else\n"
|
||||
" #pragma data_seg( \"XIY\" )\n"
|
||||
" #endif\n"
|
||||
" static HB_$INITSYM hb_vm_auto_SymbolInit_%s%s = hb_vm_SymbolInit_%s%s;\n"
|
||||
" #pragma data_seg()\n"
|
||||
"#elif ! defined(__GNUC__)\n"
|
||||
" #pragma startup hb_vm_SymbolInit_%s%s\n"
|
||||
"#endif\n\n",
|
||||
hb_comp_szPrefix, pFileName->szName,
|
||||
hb_comp_szPrefix, pFileName->szName,
|
||||
hb_comp_szPrefix, pFileName->szName,
|
||||
hb_comp_szPrefix, pFileName->szName );
|
||||
|
||||
/* Generate functions data
|
||||
*/
|
||||
pFunc = hb_comp_functions.pFirst;
|
||||
|
||||
if( ! hb_comp_bStartProc )
|
||||
pFunc = pFunc->pNext; /* No implicit starting procedure */
|
||||
|
||||
while( pFunc )
|
||||
{
|
||||
if( pFunc->cScope != HB_FS_PUBLIC )
|
||||
fprintf( yyc, "static " );
|
||||
|
||||
if( pFunc == hb_comp_pInitFunc ) /* Is it STATICS$ */
|
||||
fprintf( yyc, "HARBOUR hb_INITSTATICS( void )" ); /* NOTE: hb_ intentionally in lower case */
|
||||
else
|
||||
fprintf( yyc, "HB_FUNC( %s )", pFunc->szName );
|
||||
|
||||
fprintf( yyc, "\n{\n static const BYTE pcode[] =\n {\n" );
|
||||
|
||||
if( hb_comp_iGenCOutput == HB_COMPGENC_COMPACT )
|
||||
hb_compGenCCompact( pFunc, yyc );
|
||||
else
|
||||
hb_compGenCReadable( pFunc, yyc );
|
||||
|
||||
fprintf( yyc, " };\n\n" );
|
||||
fprintf( yyc, " hb_vmExecute( pcode, symbols );\n}\n\n" );
|
||||
pFunc = pFunc->pNext;
|
||||
}
|
||||
|
||||
if( pSym != hb_comp_symbols.pLast )
|
||||
fprintf( yyc, ",\n" );
|
||||
|
||||
pSym = pSym->pNext;
|
||||
}
|
||||
|
||||
fprintf( yyc, "\nHB_INIT_SYMBOLS_END( hb_vm_SymbolInit_%s%s )\n"
|
||||
"#if defined(_MSC_VER)\n"
|
||||
" #if _MSC_VER >= 1010\n"
|
||||
/* [pt] First version of MSC I have that supports this */
|
||||
/* is msvc4.1 (which is msc 10.10) */
|
||||
" #pragma data_seg( \".CRT$XIY\" )\n"
|
||||
" #pragma comment( linker, \"/Merge:.CRT=.data\" )\n"
|
||||
" #else\n"
|
||||
" #pragma data_seg( \"XIY\" )\n"
|
||||
" #endif\n"
|
||||
" static HB_$INITSYM hb_vm_auto_SymbolInit_%s%s = hb_vm_SymbolInit_%s%s;\n"
|
||||
" #pragma data_seg()\n"
|
||||
"#elif ! defined(__GNUC__)\n"
|
||||
" #pragma startup hb_vm_SymbolInit_%s%s\n"
|
||||
"#endif\n\n",
|
||||
hb_comp_szPrefix, pFileName->szName,
|
||||
hb_comp_szPrefix, pFileName->szName,
|
||||
hb_comp_szPrefix, pFileName->szName,
|
||||
hb_comp_szPrefix, pFileName->szName );
|
||||
|
||||
/* Generate functions data
|
||||
*/
|
||||
pFunc = hb_comp_functions.pFirst;
|
||||
|
||||
if( ! hb_comp_bStartProc )
|
||||
pFunc = pFunc->pNext; /* No implicit starting procedure */
|
||||
|
||||
while( pFunc )
|
||||
{
|
||||
if( pFunc->cScope != HB_FS_PUBLIC )
|
||||
fprintf( yyc, "static " );
|
||||
|
||||
if( pFunc == hb_comp_pInitFunc ) /* Is it STATICS$ */
|
||||
fprintf( yyc, "HARBOUR hb_INITSTATICS( void )" ); /* NOTE: hb_ intentionally in lower case */
|
||||
else
|
||||
fprintf( yyc, "HB_FUNC( %s )", pFunc->szName );
|
||||
|
||||
fprintf( yyc, "\n{\n static const BYTE pcode[] =\n {\n" );
|
||||
|
||||
if( hb_comp_iGenCOutput == HB_COMPGENC_COMPACT )
|
||||
hb_compGenCCompact( pFunc, yyc );
|
||||
else
|
||||
hb_compGenCReadable( pFunc, yyc );
|
||||
|
||||
fprintf( yyc, " };\n\n" );
|
||||
fprintf( yyc, " hb_vmExecute( pcode, symbols );\n}\n\n" );
|
||||
pFunc = pFunc->pNext;
|
||||
}
|
||||
|
||||
else
|
||||
fprintf( yyc, "/* Empty source file */\n\n" );
|
||||
|
||||
fclose( yyc );
|
||||
|
||||
pFunc = hb_comp_functions.pFirst;
|
||||
|
||||
@@ -231,12 +231,11 @@ int main( int argc, char * argv[] )
|
||||
/* we create the output file name */
|
||||
hb_compOutputFile();
|
||||
|
||||
if( ! hb_comp_bStartProc )
|
||||
--hb_comp_iFunctionCnt;
|
||||
|
||||
if( ! hb_comp_bQuiet )
|
||||
{
|
||||
if( ! hb_comp_bStartProc )
|
||||
--hb_comp_iFunctionCnt;
|
||||
printf( "\rLines %i, Functions/Procedures %i\n", hb_comp_iLine, hb_comp_iFunctionCnt );
|
||||
}
|
||||
|
||||
hb_compGenOutput( hb_comp_iLanguage );
|
||||
}
|
||||
|
||||
@@ -359,11 +359,10 @@ void hb_vmQuit( void )
|
||||
exit( s_byErrorLevel );
|
||||
}
|
||||
|
||||
void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
{
|
||||
BYTE bCode;
|
||||
LONG w = 0;
|
||||
USHORT uiParams;
|
||||
BOOL bCanRecover = FALSE;
|
||||
ULONG ulPrivateBase;
|
||||
LONG lOffset;
|
||||
@@ -523,8 +522,7 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
/* Object */
|
||||
|
||||
case HB_P_MESSAGE:
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_vmMessage( pSymbols + uiParams );
|
||||
hb_vmMessage( pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ) );
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
@@ -559,8 +557,7 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
break;
|
||||
|
||||
case HB_P_PARAMETER:
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_memvarNewParameter( pSymbols + uiParams, hb_stack.pBase + 1 + pCode[ w + 3 ] );
|
||||
hb_memvarNewParameter( pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ), hb_stack.pBase + 1 + pCode[ w + 3 ] );
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmPopParameter)"));
|
||||
w += 4;
|
||||
break;
|
||||
@@ -571,14 +568,12 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
break;
|
||||
|
||||
case HB_P_SFRAME:
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_vmSFrame( pSymbols + uiParams );
|
||||
hb_vmSFrame( pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ) );
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
case HB_P_STATICS:
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_vmStatics( pSymbols + uiParams, pCode[ w + 3 ] + ( pCode[ w + 4 ] * 256 ) );
|
||||
hb_vmStatics( pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ), pCode[ w + 3 ] + ( pCode[ w + 4 ] * 256 ) );
|
||||
w += 5;
|
||||
break;
|
||||
|
||||
@@ -933,8 +928,7 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
break;
|
||||
|
||||
case HB_P_PUSHSYM:
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_vmPushSymbol( pSymbols + uiParams );
|
||||
hb_vmPushSymbol( pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ) );
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
@@ -944,22 +938,19 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
break;
|
||||
|
||||
case HB_P_PUSHALIASEDFIELD:
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_vmPushAliasedField( pSymbols + uiParams );
|
||||
hb_vmPushAliasedField( pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ) );
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
case HB_P_PUSHALIASEDVAR:
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_vmPushAliasedVar( pSymbols + uiParams );
|
||||
hb_vmPushAliasedVar( pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ) );
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
case HB_P_PUSHFIELD:
|
||||
/* It pushes the current value of the given field onto the eval stack
|
||||
*/
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_rddGetFieldValue( hb_stack.pPos, pSymbols + uiParams );
|
||||
hb_rddGetFieldValue( hb_stack.pPos, pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ) );
|
||||
hb_stackPush();
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmPushField)"));
|
||||
w += 3;
|
||||
@@ -991,16 +982,14 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
break;
|
||||
|
||||
case HB_P_PUSHMEMVAR:
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_memvarGetValue( hb_stack.pPos, pSymbols + uiParams );
|
||||
hb_memvarGetValue( hb_stack.pPos, pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ) );
|
||||
hb_stackPush();
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmPushMemvar)"));
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
case HB_P_PUSHMEMVARREF:
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_memvarGetRefer( hb_stack.pPos, pSymbols + uiParams );
|
||||
hb_memvarGetRefer( hb_stack.pPos, pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ) );
|
||||
hb_stackPush();
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmPushMemvarRef)"));
|
||||
w += 3;
|
||||
@@ -1036,14 +1025,12 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
break;
|
||||
|
||||
case HB_P_POPALIASEDFIELD:
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_vmPopAliasedField( pSymbols + uiParams );
|
||||
hb_vmPopAliasedField( pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ) );
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
case HB_P_POPALIASEDVAR:
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_vmPopAliasedVar( pSymbols + uiParams );
|
||||
hb_vmPopAliasedVar( pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ) );
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
@@ -1051,9 +1038,8 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
/* Pops a value from the eval stack and uses it to set
|
||||
* a new value of the given field
|
||||
*/
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_stackDec();
|
||||
hb_rddPutFieldValue( hb_stack.pPos, pSymbols + uiParams );
|
||||
hb_rddPutFieldValue( hb_stack.pPos, pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ) );
|
||||
hb_itemClear( hb_stack.pPos );
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmPopField)"));
|
||||
w += 3;
|
||||
@@ -1075,15 +1061,17 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
break;
|
||||
|
||||
case HB_P_POPMEMVAR:
|
||||
uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_stackDec();
|
||||
hb_memvarSetValue( pSymbols + uiParams, hb_stack.pPos );
|
||||
hb_memvarSetValue( pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ), hb_stack.pPos );
|
||||
hb_itemClear( hb_stack.pPos );
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmPopMemvar)"));
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
case HB_P_POPVARIABLE:
|
||||
{
|
||||
USHORT uiParams;
|
||||
|
||||
/* Pops a value from the eval stack and uses it to set
|
||||
* a new value of a variable of unknown type.
|
||||
*/
|
||||
@@ -1100,6 +1088,7 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmPopVariable)"));
|
||||
w += 3;
|
||||
break;
|
||||
}
|
||||
|
||||
/* macro creation */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user