20000425-03:38 GMT+1 Victor Szakats <info@szelvesz.hu>
This commit is contained in:
@@ -1,3 +1,17 @@
|
||||
20000425-03:38 GMT+1 Victor Szakats <info@szelvesz.hu>
|
||||
|
||||
* include/hbpcode.h
|
||||
* source/compiler/hbpcode.c
|
||||
* source/compiler/harbour.c
|
||||
* source/compiler/genc.c
|
||||
* source/vm/hvm.c
|
||||
* Some pcode names changed
|
||||
JUMPSHORT->JUMPNEAR
|
||||
JUMPNEAR* -> JUMP*NEAR
|
||||
JUMPFAR* -> JUMP*FAR
|
||||
(so that the size specifier is a postfix)
|
||||
% Some minor formatting and optimization in HVM.C
|
||||
|
||||
20000425-03:20 GMT+1 Victor Szakats <info@szelvesz.hu>
|
||||
|
||||
* source/compiler/hbusage.c
|
||||
|
||||
@@ -77,7 +77,7 @@ LDFLAGS = $(LDFLAGS)
|
||||
# Macros to access our library names
|
||||
#
|
||||
|
||||
TOOLS_LIB = $(LIB_DIR)\tools.lib
|
||||
TOOLS_LIB = $(LIB_DIR)\libmisc.lib
|
||||
|
||||
HARBOUR_EXE = $(BIN_DIR)\harbour.exe
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ LDFLAGS = $(LDFLAGS)
|
||||
# Macros to access our library names
|
||||
#
|
||||
|
||||
TOOLS_LIB = $(LIB_DIR)\misc.lib
|
||||
TOOLS_LIB = $(LIB_DIR)\libmisc.lib
|
||||
|
||||
HARBOUR_EXE = $(BIN_DIR)\harbour.exe
|
||||
|
||||
|
||||
@@ -69,15 +69,15 @@ typedef enum
|
||||
HB_P_DUPLTWO, /* places a copy of the latest two virtual machine stack value on to the stack */
|
||||
HB_P_INC, /* increments the latest value on the virtual machine stack */
|
||||
HB_P_INSTRING, /* checks if the second latest value on the stack is a substring of the latest one */
|
||||
HB_P_JUMPSHORT, /* jumps to a relative offset 1 Byte */
|
||||
HB_P_JUMPNEAR, /* jumps to a relative offset 1 Byte */
|
||||
HB_P_JUMP, /* jumps to a relative offset 2 Bytes */
|
||||
HB_P_JUMPFAR, /* jumps to a relative offset 3 Bytes */
|
||||
HB_P_JUMPSHORTFALSE, /* checks a logic expression of the stack and jumps to a relative offset */
|
||||
HB_P_JUMPFALSENEAR, /* checks a logic expression of the stack and jumps to a relative offset */
|
||||
HB_P_JUMPFALSE, /* checks a logic expression of the stack and jumps to a relative offset */
|
||||
HB_P_JUMPFARFALSE, /* checks a logic expression of the stack and jumps to a relative offset */
|
||||
HB_P_JUMPSHORTTRUE, /* checks a logic expression of the stack and jumps to a relative offset */
|
||||
HB_P_JUMPFALSEFAR, /* checks a logic expression of the stack and jumps to a relative offset */
|
||||
HB_P_JUMPTRUENEAR, /* checks a logic expression of the stack and jumps to a relative offset */
|
||||
HB_P_JUMPTRUE, /* checks a logic expression of the stack and jumps to a relative offset */
|
||||
HB_P_JUMPFARTRUE, /* checks a logic expression of the stack and jumps to a relative offset */
|
||||
HB_P_JUMPTRUEFAR, /* checks a logic expression of the stack and jumps to a relative offset */
|
||||
HB_P_LESSEQUAL, /* checks if the second latest value on the stack is less equal that the latest one, leaves the result only */
|
||||
HB_P_LESS, /* checks if the second latest value on the stack is less that the lastest one */
|
||||
HB_P_LINE, /* currently compiled source code line number */
|
||||
@@ -159,8 +159,8 @@ typedef enum
|
||||
HB_P_TRUE, /* pushes true on the virtual machine stack */
|
||||
HB_P_ZERO, /* places a ZERO on the virtual machine stack */
|
||||
HB_P_ONE, /* places a ONE on the virtual machine stack */
|
||||
/*NOTE: * This have to be the last definition */
|
||||
HB_P_LAST_PCODE /* this defines the number of defined pcodes */
|
||||
/* NOTE: This have to be the last definition */
|
||||
HB_P_LAST_PCODE /* this defines the number of defined pcodes */
|
||||
} HB_PCODE;
|
||||
|
||||
#endif /* HB_PCODE_H_ */
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
* their web site at http://www.gnu.org/).
|
||||
*
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include "hbcomp.h"
|
||||
@@ -42,16 +43,14 @@ static void hb_compGenCCompact( PFUNCTION pFunc, FILE * yyc );
|
||||
/* helper structure to pass information */
|
||||
typedef struct HB_stru_genc_info
|
||||
{
|
||||
FILE *yyc;
|
||||
FILE * yyc;
|
||||
BOOL bVerbose;
|
||||
USHORT iNestedCodeblock;
|
||||
}
|
||||
HB_GENC_INFO, *HB_GENC_INFO_PTR;
|
||||
} HB_GENC_INFO, * HB_GENC_INFO_PTR;
|
||||
|
||||
#define HB_GENC_FUNC( func ) HB_PCODE_FUNC( func, HB_GENC_INFO_PTR )
|
||||
typedef HB_GENC_FUNC( HB_GENC_FUNC_ );
|
||||
typedef HB_GENC_FUNC_ *HB_GENC_FUNC_PTR;
|
||||
|
||||
typedef HB_GENC_FUNC( HB_GENC_FUNC_ );
|
||||
typedef HB_GENC_FUNC_ * HB_GENC_FUNC_PTR;
|
||||
|
||||
void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language output */
|
||||
{
|
||||
@@ -467,9 +466,9 @@ static HB_GENC_FUNC( hb_p_instring )
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_jumpshort )
|
||||
static HB_GENC_FUNC( hb_p_jumpnear )
|
||||
{
|
||||
fprintf( cargo->yyc, "\tHB_P_JUMPSHORT, %i,",
|
||||
fprintf( cargo->yyc, "\tHB_P_JUMPNEAR, %i,",
|
||||
pFunc->pCode[ lPCodePos + 1 ] );
|
||||
if( cargo->bVerbose )
|
||||
{
|
||||
@@ -520,9 +519,9 @@ static HB_GENC_FUNC( hb_p_jumpfar )
|
||||
return 4;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_jumpshortfalse )
|
||||
static HB_GENC_FUNC( hb_p_jumpfalsenear )
|
||||
{
|
||||
fprintf( cargo->yyc, "\tHB_P_JUMPSHORTFALSE, %i,",
|
||||
fprintf( cargo->yyc, "\tHB_P_JUMPFALSENEAR, %i,",
|
||||
pFunc->pCode[ lPCodePos + 1 ] );
|
||||
if( cargo->bVerbose )
|
||||
{
|
||||
@@ -555,9 +554,9 @@ static HB_GENC_FUNC( hb_p_jumpfalse )
|
||||
return 3;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_jumpfarfalse )
|
||||
static HB_GENC_FUNC( hb_p_jumpfalsefar )
|
||||
{
|
||||
fprintf( cargo->yyc, "\tHB_P_JUMPFARFALSE, %i, %i, %i,",
|
||||
fprintf( cargo->yyc, "\tHB_P_JUMPFALSEFAR, %i, %i, %i,",
|
||||
pFunc->pCode[ lPCodePos + 1 ],
|
||||
pFunc->pCode[ lPCodePos + 2 ],
|
||||
pFunc->pCode[ lPCodePos + 3 ] );
|
||||
@@ -573,9 +572,9 @@ static HB_GENC_FUNC( hb_p_jumpfarfalse )
|
||||
return 4;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_jumpshorttrue )
|
||||
static HB_GENC_FUNC( hb_p_jumptruenear )
|
||||
{
|
||||
fprintf( cargo->yyc, "\tHB_P_JUMPSHORTTRUE, %i,",
|
||||
fprintf( cargo->yyc, "\tHB_P_JUMPTRUENEAR, %i,",
|
||||
pFunc->pCode[ lPCodePos + 1 ] );
|
||||
if( cargo->bVerbose )
|
||||
{
|
||||
@@ -606,9 +605,9 @@ static HB_GENC_FUNC( hb_p_jumptrue )
|
||||
return 3;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_jumpfartrue )
|
||||
static HB_GENC_FUNC( hb_p_jumptruefar )
|
||||
{
|
||||
fprintf( cargo->yyc, "\tHB_P_JUMPFARTRUE, %i, %i, %i,",
|
||||
fprintf( cargo->yyc, "\tHB_P_JUMPTRUEFAR, %i, %i, %i,",
|
||||
pFunc->pCode[ lPCodePos + 1 ],
|
||||
pFunc->pCode[ lPCodePos + 2 ],
|
||||
pFunc->pCode[ lPCodePos + 3 ] );
|
||||
@@ -906,8 +905,8 @@ static HB_GENC_FUNC( hb_p_poplocal )
|
||||
{
|
||||
SHORT wVar = * ( ( SHORT * ) &( pFunc->pCode )[ lPCodePos + 1 ] );
|
||||
/* Variable with negative order are local variables
|
||||
* referenced in a codeblock -handle it with care
|
||||
*/
|
||||
* referenced in a codeblock -handle it with care
|
||||
*/
|
||||
|
||||
if( cargo->iNestedCodeblock )
|
||||
{
|
||||
@@ -1140,8 +1139,8 @@ static HB_GENC_FUNC( hb_p_pushlocal )
|
||||
{
|
||||
SHORT wVar = * ( ( SHORT * ) &( pFunc->pCode )[ lPCodePos + 1 ] );
|
||||
/* Variable with negative order are local variables
|
||||
* referenced in a codeblock -handle it with care
|
||||
*/
|
||||
* referenced in a codeblock -handle it with care
|
||||
*/
|
||||
|
||||
if( cargo->iNestedCodeblock )
|
||||
{
|
||||
@@ -1195,8 +1194,8 @@ static HB_GENC_FUNC( hb_p_pushlocalref )
|
||||
{
|
||||
SHORT wVar = * ( ( SHORT * ) &( pFunc->pCode )[ lPCodePos + 1 ] );
|
||||
/* Variable with negative order are local variables
|
||||
* referenced in a codeblock -handle it with care
|
||||
*/
|
||||
* referenced in a codeblock -handle it with care
|
||||
*/
|
||||
|
||||
if( cargo->iNestedCodeblock )
|
||||
{
|
||||
@@ -1461,7 +1460,7 @@ static HB_GENC_FUNC( hb_p_seqrecover )
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_sframe )
|
||||
static HB_GENC_FUNC( hb_p_sframe )
|
||||
{
|
||||
fprintf( cargo->yyc, "\tHB_P_SFRAME, %i, %i,",
|
||||
pFunc->pCode[ lPCodePos + 1 ],
|
||||
@@ -1565,15 +1564,15 @@ static HB_GENC_FUNC_PTR s_verbose_table[] = {
|
||||
hb_p_dupltwo,
|
||||
hb_p_inc,
|
||||
hb_p_instring,
|
||||
hb_p_jumpshort,
|
||||
hb_p_jumpnear,
|
||||
hb_p_jump,
|
||||
hb_p_jumpfar,
|
||||
hb_p_jumpshortfalse,
|
||||
hb_p_jumpfalsenear,
|
||||
hb_p_jumpfalse,
|
||||
hb_p_jumpfarfalse,
|
||||
hb_p_jumpshorttrue,
|
||||
hb_p_jumpfalsefar,
|
||||
hb_p_jumptruenear,
|
||||
hb_p_jumptrue,
|
||||
hb_p_jumpfartrue,
|
||||
hb_p_jumptruefar,
|
||||
hb_p_lessequal,
|
||||
hb_p_less,
|
||||
hb_p_line,
|
||||
@@ -1662,13 +1661,13 @@ static void hb_compGenCReadable( PFUNCTION pFunc, FILE * yyc )
|
||||
HB_GENC_INFO genc_info;
|
||||
|
||||
/* Make sure that table is correct */
|
||||
assert( HB_P_LAST_PCODE == sizeof(s_verbose_table)/sizeof(HB_GENC_FUNC_PTR) );
|
||||
assert( HB_P_LAST_PCODE == sizeof( s_verbose_table ) / sizeof( HB_GENC_FUNC_PTR ) );
|
||||
|
||||
genc_info.iNestedCodeblock = 0;
|
||||
genc_info.bVerbose = ( hb_comp_iGenCOutput == HB_COMPGENC_VERBOSE );
|
||||
genc_info.yyc = yyc;
|
||||
|
||||
hb_compPCodeEval( pFunc, (HB_PCODE_FUNC_PTR *)s_verbose_table, (void *)&genc_info );
|
||||
hb_compPCodeEval( pFunc, ( HB_PCODE_FUNC_PTR * ) s_verbose_table, ( void * ) &genc_info );
|
||||
|
||||
if( genc_info.bVerbose )
|
||||
fprintf( yyc, "/* %05li */\n", pFunc->lPCodePos );
|
||||
|
||||
@@ -1335,7 +1335,7 @@ ULONG hb_compGenJump( LONG lOffset )
|
||||
}
|
||||
else if( lOffset >= -128 && lOffset <= 127 )
|
||||
{
|
||||
hb_compGenPCode3( HB_P_JUMPSHORT, HB_LOBYTE( lOffset ), HB_P_NOOP );
|
||||
hb_compGenPCode3( HB_P_JUMPNEAR, HB_LOBYTE( lOffset ), HB_P_NOOP );
|
||||
hb_compGenPCode1( HB_P_NOOP );
|
||||
}
|
||||
else if( lOffset >= SHRT_MIN && lOffset <= SHRT_MAX )
|
||||
@@ -1363,12 +1363,12 @@ ULONG hb_compGenJumpFalse( LONG lOffset )
|
||||
/* Just a place holder, it might be a far jump...*/
|
||||
if( lOffset == 0 )
|
||||
{
|
||||
hb_compGenPCode3( HB_P_JUMPFARFALSE, 0, 0 );
|
||||
hb_compGenPCode3( HB_P_JUMPFALSEFAR, 0, 0 );
|
||||
hb_compGenPCode1( 0 );
|
||||
}
|
||||
else if( lOffset >= -128 && lOffset <= 127 )
|
||||
{
|
||||
hb_compGenPCode3( HB_P_JUMPSHORTFALSE, HB_LOBYTE( lOffset ), HB_P_NOOP );
|
||||
hb_compGenPCode3( HB_P_JUMPFALSENEAR, HB_LOBYTE( lOffset ), HB_P_NOOP );
|
||||
hb_compGenPCode1( HB_P_NOOP );
|
||||
}
|
||||
else if( lOffset >= SHRT_MIN && lOffset <= SHRT_MAX )
|
||||
@@ -1378,7 +1378,7 @@ ULONG hb_compGenJumpFalse( LONG lOffset )
|
||||
}
|
||||
else if( lOffset >= (-8388608L) && lOffset <= 8388607L )
|
||||
{
|
||||
hb_compGenPCode3( HB_P_JUMPFARFALSE, HB_LOBYTE( lOffset ), HB_HIBYTE( lOffset ) );
|
||||
hb_compGenPCode3( HB_P_JUMPFALSEFAR, HB_LOBYTE( lOffset ), HB_HIBYTE( lOffset ) );
|
||||
hb_compGenPCode1( ( BYTE ) ( ( ( USHORT ) ( lOffset ) >> 16 ) & 0xFF ) );
|
||||
}
|
||||
else
|
||||
@@ -1396,12 +1396,12 @@ ULONG hb_compGenJumpTrue( LONG lOffset )
|
||||
/* Just a place holder, it might be a far jump...*/
|
||||
if( lOffset == 0 )
|
||||
{
|
||||
hb_compGenPCode3( HB_P_JUMPFARTRUE, 0, 0 );
|
||||
hb_compGenPCode3( HB_P_JUMPTRUEFAR, 0, 0 );
|
||||
hb_compGenPCode1( 0 );
|
||||
}
|
||||
else if( lOffset >= -128 && lOffset <= 127 )
|
||||
{
|
||||
hb_compGenPCode3( HB_P_JUMPSHORTTRUE, HB_LOBYTE( lOffset ), HB_P_NOOP );
|
||||
hb_compGenPCode3( HB_P_JUMPTRUENEAR, HB_LOBYTE( lOffset ), HB_P_NOOP );
|
||||
hb_compGenPCode1( HB_P_NOOP );
|
||||
}
|
||||
else if( lOffset >= SHRT_MIN && lOffset <= SHRT_MAX )
|
||||
@@ -1411,7 +1411,7 @@ ULONG hb_compGenJumpTrue( LONG lOffset )
|
||||
}
|
||||
else if( lOffset >= (-8388608L) && lOffset <= 8388607L )
|
||||
{
|
||||
hb_compGenPCode3( HB_P_JUMPFARTRUE, HB_LOBYTE( lOffset ), HB_HIBYTE( lOffset ) );
|
||||
hb_compGenPCode3( HB_P_JUMPTRUEFAR, HB_LOBYTE( lOffset ), HB_HIBYTE( lOffset ) );
|
||||
hb_compGenPCode1( ( BYTE ) ( ( ( USHORT ) ( lOffset ) >> 16 ) & 0xFF ) );
|
||||
}
|
||||
else
|
||||
@@ -1435,48 +1435,48 @@ void hb_compGenJumpThere( ULONG ulFrom, ULONG ulTo )
|
||||
switch( pCode[ ( ULONG ) ( ulFrom - 1 ) ] )
|
||||
{
|
||||
/*
|
||||
case HB_P_JUMPSHORT :
|
||||
case HB_P_JUMPNEAR :
|
||||
break;
|
||||
|
||||
case HB_P_JUMPSHORTTRUE :
|
||||
case HB_P_JUMPTRUENEAR :
|
||||
break;
|
||||
|
||||
case HB_P_JUMPSHORTFALSE :
|
||||
case HB_P_JUMPFALSENEAR :
|
||||
break;
|
||||
|
||||
case HB_P_JUMP :
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPSHORT;
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPNEAR;
|
||||
pCode[ ( ULONG ) ( ulFrom + 1 ) ] = HB_P_NOOP;
|
||||
pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP;
|
||||
break;
|
||||
|
||||
case HB_P_JUMPTRUE :
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPSHORTTRUE;
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPTRUENEAR;
|
||||
pCode[ ( ULONG ) ( ulFrom + 1 ) ] = HB_P_NOOP;
|
||||
pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP;
|
||||
break;
|
||||
|
||||
case HB_P_JUMPFALSE :
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPSHORTFALSE;
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPFALSENEAR;
|
||||
pCode[ ( ULONG ) ( ulFrom + 1 ) ] = HB_P_NOOP;
|
||||
pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP;
|
||||
break;
|
||||
*/
|
||||
|
||||
case HB_P_JUMPFAR :
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPSHORT;
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPNEAR;
|
||||
pCode[ ( ULONG ) ( ulFrom + 1 ) ] = HB_P_NOOP;
|
||||
pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP;
|
||||
break;
|
||||
|
||||
case HB_P_JUMPFARTRUE :
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPSHORTTRUE;
|
||||
case HB_P_JUMPTRUEFAR :
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPTRUENEAR;
|
||||
pCode[ ( ULONG ) ( ulFrom + 1 ) ] = HB_P_NOOP;
|
||||
pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP;
|
||||
break;
|
||||
|
||||
case HB_P_JUMPFARFALSE :
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPSHORTFALSE;
|
||||
case HB_P_JUMPFALSEFAR :
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPFALSENEAR;
|
||||
pCode[ ( ULONG ) ( ulFrom + 1 ) ] = HB_P_NOOP;
|
||||
pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP;
|
||||
break;
|
||||
@@ -1539,17 +1539,17 @@ void hb_compGenJumpThere( ULONG ulFrom, ULONG ulTo )
|
||||
switch( pCode[ ( ULONG ) ( ulFrom - 1 ) ] )
|
||||
{
|
||||
/*
|
||||
case HB_P_JUMPSHORT :
|
||||
case HB_P_JUMPNEAR :
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMP;
|
||||
pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP;
|
||||
break;
|
||||
|
||||
case HB_P_JUMPSHORTTRUE :
|
||||
case HB_P_JUMPTRUENEAR :
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPTRUE;
|
||||
pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP;
|
||||
break;
|
||||
|
||||
case HB_P_JUMPSHORTFALSE :
|
||||
case HB_P_JUMPFALSENEAR :
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPFALSE;
|
||||
pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP;
|
||||
break;
|
||||
@@ -1569,12 +1569,12 @@ void hb_compGenJumpThere( ULONG ulFrom, ULONG ulTo )
|
||||
pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP;
|
||||
break;
|
||||
|
||||
case HB_P_JUMPFARTRUE :
|
||||
case HB_P_JUMPTRUEFAR :
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPTRUE;
|
||||
pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP;
|
||||
break;
|
||||
|
||||
case HB_P_JUMPFARFALSE :
|
||||
case HB_P_JUMPFALSEFAR :
|
||||
pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPFALSE;
|
||||
pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP;
|
||||
break;
|
||||
@@ -2514,9 +2514,9 @@ static void hb_compOptimizeJumps( void )
|
||||
{
|
||||
switch( pCode[ pJumps[ iJump ] ] )
|
||||
{
|
||||
case HB_P_JUMPSHORT :
|
||||
case HB_P_JUMPSHORTFALSE :
|
||||
case HB_P_JUMPSHORTTRUE :
|
||||
case HB_P_JUMPNEAR :
|
||||
case HB_P_JUMPFALSENEAR :
|
||||
case HB_P_JUMPTRUENEAR :
|
||||
{
|
||||
ulOffset = pCode[ pJumps[ iJump ] + 1 ];
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
* their web site at http://www.gnu.org/).
|
||||
*
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include "hbcomp.h"
|
||||
@@ -62,15 +63,15 @@ static BYTE s_pcode_len[] = {
|
||||
1, /* HB_P_DUPLTWO, */
|
||||
1, /* HB_P_INC, */
|
||||
1, /* HB_P_INSTRING, */
|
||||
2, /* HB_P_JUMPSHORT, */
|
||||
2, /* HB_P_JUMPNEAR, */
|
||||
3, /* HB_P_JUMP, */
|
||||
4, /* HB_P_JUMPFAR, */
|
||||
2, /* HB_P_JUMPSHORTFALSE, */
|
||||
2, /* HB_P_JUMPFALSENEAR, */
|
||||
3, /* HB_P_JUMPFALSE, */
|
||||
4, /* HB_P_JUMPFARFALSE, */
|
||||
2, /* HB_P_JUMPSHORTTRUE, */
|
||||
4, /* HB_P_JUMPFALSEFAR, */
|
||||
2, /* HB_P_JUMPTRUENEAR, */
|
||||
3, /* HB_P_JUMPTRUE, */
|
||||
4, /* HB_P_JUMPFARTRUE, */
|
||||
4, /* HB_P_JUMPTRUEFAR, */
|
||||
1, /* HB_P_LESSEQUAL, */
|
||||
1, /* HB_P_LESS, */
|
||||
3, /* HB_P_LINE, */
|
||||
@@ -154,7 +155,7 @@ static BYTE s_pcode_len[] = {
|
||||
1 /* HB_P_ONE, */
|
||||
};
|
||||
|
||||
void hb_compPCodeEval( PFUNCTION pFunc, HB_PCODE_FUNC_PTR *pFunctions, void *cargo )
|
||||
void hb_compPCodeEval( PFUNCTION pFunc, HB_PCODE_FUNC_PTR * pFunctions, void * cargo )
|
||||
{
|
||||
ULONG ulPos = 0;
|
||||
USHORT usSkip;
|
||||
@@ -162,7 +163,7 @@ void hb_compPCodeEval( PFUNCTION pFunc, HB_PCODE_FUNC_PTR *pFunctions, void *car
|
||||
HB_PCODE_FUNC_PTR pCall;
|
||||
|
||||
/* Make sure that table is correct */
|
||||
assert( sizeof(s_pcode_len) == HB_P_LAST_PCODE );
|
||||
assert( sizeof( s_pcode_len ) == HB_P_LAST_PCODE );
|
||||
|
||||
while( ulPos < pFunc->lPCodePos )
|
||||
{
|
||||
|
||||
@@ -92,27 +92,21 @@ void hb_compPrintUsage( char * szSelf )
|
||||
*/
|
||||
void hb_compPrintCredits( void )
|
||||
{
|
||||
/* NOTE: This list was semi-automatically generated by searching for all
|
||||
Copyright headers in the core Harbour source files.
|
||||
(GREP "copyright [12]" and GREP "public domain")
|
||||
[vszakats] */
|
||||
|
||||
printf( "\n"
|
||||
"Credits: The Harbour Team at www.harbour-project.org\n"
|
||||
"\n"
|
||||
"Developers and documentation:\n"
|
||||
"\n"
|
||||
"A White <awhite@user.rose.com>\n"
|
||||
"Alexander S.Kresin <alex@belacy.belgorod.su>\n"
|
||||
"April White <awhite@user.rose.com>\n"
|
||||
"Alexander S. Kresin <alex@belacy.belgorod.su>\n"
|
||||
"Andi Jahja <andij@aonlippo.co.id>\n"
|
||||
"Antonio Linares <alinares@fivetech.com>\n"
|
||||
"Bil Simser <bsimser@home.com>\n"
|
||||
"Brian Hays <bhays@abacuslaw.com>\n"
|
||||
"Bruno Cantero <bruno@issnet.net>\n"
|
||||
"Chen Kedem <niki@actcom.co.il>\n"
|
||||
"Dave Pearson <davep@davep.org>\n"
|
||||
"David G. Holm <dholm@jsd-llc.com>\n"
|
||||
"Eddie Runia <eddie@runia.com>\n"
|
||||
"Felipe G. Coury <fcoury@flexsys-ci.com>\n"
|
||||
"Felipe G. Coury <fcoury@creation.com.br>\n"
|
||||
"Gonzalo A. Diethelm <gonzalo.diethelm@iname.com>\n"
|
||||
"Ignacio Ortiz de Zuniga <ignacio@fivetech.com>\n"
|
||||
"Janica Lubos <janica@fornax.elf.stuba.sk>\n"
|
||||
@@ -123,19 +117,15 @@ void hb_compPrintCredits( void )
|
||||
"Matteo Baccan <baccan@isanet.it>\n"
|
||||
"Matthew Hamilton <mhamilton@bunge.com.au>\n"
|
||||
"Nicolas del Pozo <niko@geroa.com>\n"
|
||||
"Patrick Mast <harbour@winfakt.com>\n"
|
||||
"Paul Tucker <ptucker@sympatico.ca>\n"
|
||||
"Peter Townsend <cephas@tpgi.com.au>\n"
|
||||
"Phil Barnett <philb@iag.net>\n"
|
||||
"Ron Pinkas <ron@profit-Master.com>\n"
|
||||
"Ryszard Glab <rglab@imid.med.pl>\n"
|
||||
"Tim Stone <timstone@mstrlink.com>\n"
|
||||
"Victor Szakats <info@szelvesz.hu>\n"
|
||||
"Vladimir Kazimirchik <v_kazimirchik@yahoo.com>\n"
|
||||
"\n"
|
||||
"Major contributors:"
|
||||
"\n"
|
||||
"Dave Pearson <davep@davep.org>\n"
|
||||
"Patrick Mast <harbour@winfakt.com>\n"
|
||||
"Tim Stone <timstone@mstrlink.com>\n"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
|
||||
#if defined( OS_UNIX_COMPATIBLE )
|
||||
#include <unistd.h> /* read() function requires it */
|
||||
#include <termios.h>
|
||||
#endif
|
||||
|
||||
static SHORT s_iRow;
|
||||
@@ -53,6 +54,10 @@ static BOOL s_bBlink;
|
||||
static int s_iFilenoStdout;
|
||||
static USHORT s_uiDispCount;
|
||||
|
||||
#if defined( OS_UNIX_COMPATIBLE )
|
||||
static struct termios startup_attributes;
|
||||
#endif
|
||||
|
||||
void hb_gt_Init( int iFilenoStdin, int iFilenoStdout, int iFilenoStderr )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_gt_Init()"));
|
||||
@@ -60,6 +65,22 @@ void hb_gt_Init( int iFilenoStdin, int iFilenoStdout, int iFilenoStderr )
|
||||
HB_SYMBOL_UNUSED( iFilenoStdin );
|
||||
HB_SYMBOL_UNUSED( iFilenoStderr );
|
||||
|
||||
#if defined( OS_UNIX_COMPATIBLE )
|
||||
{
|
||||
struct termios ta;
|
||||
|
||||
tcgetattr( STDIN_FILENO, &startup_attributes );
|
||||
atexit( restore_input_mode );
|
||||
|
||||
tcgetattr( STDIN_FILENO, &ta );
|
||||
ta.c_lflag &= ~( ICANON | ECHO );
|
||||
ta.c_iflag &= ~ICRNL;
|
||||
ta.c_cc[ VMIN ] = 0;
|
||||
ta.c_cc[ VTIME ] = 0;
|
||||
tcsetattr( STDIN_FILENO, TCSAFLUSH, &ta );
|
||||
}
|
||||
#endif
|
||||
|
||||
s_uiDispCount = 0;
|
||||
|
||||
s_iRow = 0;
|
||||
@@ -79,6 +100,10 @@ void hb_gt_Init( int iFilenoStdin, int iFilenoStdout, int iFilenoStderr )
|
||||
void hb_gt_Exit( void )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_gt_Exit()"));
|
||||
|
||||
#if defined( OS_UNIX_COMPATIBLE )
|
||||
tcsetattr( STDIN_FILENO, TCSANOW, &startup_attributes );
|
||||
#endif
|
||||
}
|
||||
|
||||
int hb_gt_ReadKey( HB_inkey_enum eventmask )
|
||||
|
||||
@@ -636,7 +636,7 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
hb_stack.pPos->type = HB_IT_LONG;
|
||||
|
||||
lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) + ( pCode[ w + 3 ] * 65536 );
|
||||
if ( lOffset > 8388607L )
|
||||
if( lOffset > 8388607L )
|
||||
lOffset = ( lOffset - 16777216 );
|
||||
|
||||
hb_stack.pPos->item.asLong.value = w + lOffset;
|
||||
@@ -696,7 +696,7 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
* skip outside of SEQUENCE structure
|
||||
*/
|
||||
lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) + ( pCode[ w + 3 ] * 65536 );
|
||||
if ( lOffset > 8388607L )
|
||||
if( lOffset > 8388607L )
|
||||
lOffset = ( lOffset - 16777216 );
|
||||
|
||||
w += lOffset;
|
||||
@@ -732,54 +732,34 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
|
||||
/* Jumps */
|
||||
|
||||
case HB_P_JUMPSHORT:
|
||||
case HB_P_JUMPNEAR:
|
||||
|
||||
lOffset = pCode[ w + 1 ];
|
||||
if ( lOffset > 127 )
|
||||
if( lOffset > 127 )
|
||||
lOffset -= 256 ;
|
||||
/*
|
||||
if( lOffset )
|
||||
w += lOffset;
|
||||
else
|
||||
w += 2;
|
||||
*/
|
||||
w += lOffset;
|
||||
break;
|
||||
|
||||
case HB_P_JUMP:
|
||||
|
||||
lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
if ( lOffset > SHRT_MAX )
|
||||
if( lOffset > SHRT_MAX )
|
||||
lOffset -= 65536;
|
||||
/*
|
||||
if( lOffset )
|
||||
w += lOffset;
|
||||
else
|
||||
w += 3;
|
||||
*/
|
||||
w += lOffset;
|
||||
break;
|
||||
|
||||
case HB_P_JUMPFAR:
|
||||
lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) + ( pCode[ w + 3 ] * 65536 );
|
||||
if ( lOffset > 8388607L )
|
||||
if( lOffset > 8388607L )
|
||||
lOffset -= 16777216L;
|
||||
|
||||
/*
|
||||
if( lOffset )
|
||||
w += lOffset;
|
||||
else
|
||||
w += 4;
|
||||
*/
|
||||
|
||||
w += lOffset;
|
||||
break;
|
||||
|
||||
case HB_P_JUMPSHORTFALSE:
|
||||
case HB_P_JUMPFALSENEAR:
|
||||
if( ! hb_vmPopLogical() )
|
||||
{
|
||||
lOffset = pCode[ w + 1 ];
|
||||
if ( lOffset > 127 )
|
||||
if( lOffset > 127 )
|
||||
lOffset -= 256;
|
||||
|
||||
w += lOffset;
|
||||
@@ -792,7 +772,7 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
if( ! hb_vmPopLogical() )
|
||||
{
|
||||
lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
if ( lOffset > SHRT_MAX )
|
||||
if( lOffset > SHRT_MAX )
|
||||
lOffset -= 65536;
|
||||
|
||||
w += lOffset;
|
||||
@@ -801,11 +781,11 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
case HB_P_JUMPFARFALSE:
|
||||
case HB_P_JUMPFALSEFAR:
|
||||
if( ! hb_vmPopLogical() )
|
||||
{
|
||||
lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) + ( pCode[ w + 3 ] * 65536 );
|
||||
if ( lOffset > 8388607L )
|
||||
if( lOffset > 8388607L )
|
||||
lOffset -= 16777216L;
|
||||
|
||||
w += lOffset;
|
||||
@@ -814,11 +794,11 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
w += 4;
|
||||
break;
|
||||
|
||||
case HB_P_JUMPSHORTTRUE:
|
||||
case HB_P_JUMPTRUENEAR:
|
||||
if( hb_vmPopLogical() )
|
||||
{
|
||||
lOffset = pCode[ w + 1 ];
|
||||
if ( lOffset > 127 )
|
||||
if( lOffset > 127 )
|
||||
lOffset -= 256;
|
||||
|
||||
w += lOffset;
|
||||
@@ -831,7 +811,7 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
if( hb_vmPopLogical() )
|
||||
{
|
||||
lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
if ( lOffset > SHRT_MAX )
|
||||
if( lOffset > SHRT_MAX )
|
||||
lOffset -= 65536;
|
||||
|
||||
w += lOffset;
|
||||
@@ -840,11 +820,11 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
case HB_P_JUMPFARTRUE:
|
||||
case HB_P_JUMPTRUEFAR:
|
||||
if( hb_vmPopLogical() )
|
||||
{
|
||||
lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) + ( pCode[ w + 3 ] * 65536 );
|
||||
if ( lOffset > 8388607L )
|
||||
if( lOffset > 8388607L )
|
||||
lOffset -= 16777216L;
|
||||
|
||||
w += lOffset;
|
||||
@@ -856,12 +836,16 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
/* Push */
|
||||
|
||||
case HB_P_TRUE:
|
||||
hb_vmPushLogical( TRUE );
|
||||
hb_stack.pPos->type = HB_IT_LOGICAL;
|
||||
hb_stack.pPos->item.asLogical.value = TRUE;
|
||||
hb_stackPush();
|
||||
w++;
|
||||
break;
|
||||
|
||||
case HB_P_FALSE:
|
||||
hb_vmPushLogical( FALSE );
|
||||
hb_stack.pPos->type = HB_IT_LOGICAL;
|
||||
hb_stack.pPos->item.asLogical.value = FALSE;
|
||||
hb_stackPush();
|
||||
w++;
|
||||
break;
|
||||
|
||||
@@ -919,12 +903,12 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
break;
|
||||
|
||||
case HB_P_PUSHSTR:
|
||||
{
|
||||
USHORT uiSize = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_vmPushString( ( char * ) pCode + w + 3, ( ULONG ) uiSize );
|
||||
w += ( 3 + uiSize );
|
||||
}
|
||||
{
|
||||
USHORT uiSize = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
hb_vmPushString( ( char * ) pCode + w + 3, ( ULONG ) uiSize );
|
||||
w += ( 3 + uiSize );
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_PUSHSTRSHORT:
|
||||
hb_vmPushString( ( char * ) pCode + w + 2, ( ULONG ) pCode[ w + 1 ] );
|
||||
@@ -1161,133 +1145,133 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
/* macro compiled opcodes - we are using symbol address here */
|
||||
|
||||
case HB_P_MMESSAGE:
|
||||
{
|
||||
HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 );
|
||||
hb_vmMessage( ( *pDynSym )->pSymbol );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
}
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_vmMessage( ( *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 );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
}
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_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 );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
}
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_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 );
|
||||
/* Pops a value from the eval stack and uses it to set
|
||||
* a new value of the given field
|
||||
*/
|
||||
hb_stackDec();
|
||||
hb_rddPutFieldValue( hb_stack.pPos, ( *pDynSym )->pSymbol );
|
||||
hb_itemClear( hb_stack.pPos );
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPopField)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
}
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
/* Pops a value from the eval stack and uses it to set
|
||||
* a new value of the given field
|
||||
*/
|
||||
hb_stackDec();
|
||||
hb_rddPutFieldValue( hb_stack.pPos, ( *pDynSym )->pSymbol );
|
||||
hb_itemClear( hb_stack.pPos );
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPopField)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_MPOPMEMVAR:
|
||||
{
|
||||
HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 );
|
||||
hb_stackDec();
|
||||
hb_memvarSetValue( ( *pDynSym )->pSymbol, hb_stack.pPos );
|
||||
hb_itemClear( hb_stack.pPos );
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPopMemvar)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
}
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_stackDec();
|
||||
hb_memvarSetValue( ( *pDynSym )->pSymbol, hb_stack.pPos );
|
||||
hb_itemClear( hb_stack.pPos );
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPopMemvar)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_MPUSHALIASEDFIELD:
|
||||
{
|
||||
HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 );
|
||||
hb_vmPushAliasedField( ( *pDynSym )->pSymbol );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
}
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_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 );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
}
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_vmPushAliasedVar( ( *pDynSym )->pSymbol );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_MPUSHBLOCK:
|
||||
{
|
||||
/*NOTE: the pcode is stored in dynamically allocated memory
|
||||
* We need to handle it with more care than compile-time
|
||||
* codeblocks
|
||||
*/
|
||||
/* +0 -> _pushblock
|
||||
* +1 +2 -> size of codeblock
|
||||
* +3 +4 -> number of expected parameters
|
||||
* +5 -> pcode bytes
|
||||
*/
|
||||
hb_vmPushMacroBlock( ( BYTE * ) ( pCode + w ), pSymbols );
|
||||
w += ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) );
|
||||
}
|
||||
{
|
||||
/*NOTE: the pcode is stored in dynamically allocated memory
|
||||
* We need to handle it with more care than compile-time
|
||||
* codeblocks
|
||||
*/
|
||||
/* +0 -> _pushblock
|
||||
* +1 +2 -> size of codeblock
|
||||
* +3 +4 -> number of expected parameters
|
||||
* +5 -> pcode bytes
|
||||
*/
|
||||
hb_vmPushMacroBlock( ( BYTE * ) ( pCode + w ), pSymbols );
|
||||
w += ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) );
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_MPUSHFIELD:
|
||||
{
|
||||
HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 );
|
||||
/* It pushes the current value of the given field onto the eval stack
|
||||
*/
|
||||
hb_rddGetFieldValue( hb_stack.pPos, ( *pDynSym )->pSymbol );
|
||||
hb_stackPush();
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPushField)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
}
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
/* It pushes the current value of the given field onto the eval stack
|
||||
*/
|
||||
hb_rddGetFieldValue( hb_stack.pPos, ( *pDynSym )->pSymbol );
|
||||
hb_stackPush();
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPushField)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_MPUSHMEMVAR:
|
||||
{
|
||||
HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 );
|
||||
hb_memvarGetValue( hb_stack.pPos, ( *pDynSym )->pSymbol );
|
||||
hb_stackPush();
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPushMemvar)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
}
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_memvarGetValue( hb_stack.pPos, ( *pDynSym )->pSymbol );
|
||||
hb_stackPush();
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPushMemvar)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_MPUSHMEMVARREF:
|
||||
{
|
||||
HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 );
|
||||
hb_memvarGetRefer( hb_stack.pPos, ( *pDynSym )->pSymbol );
|
||||
hb_stackPush();
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPushMemvarRef)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
}
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_memvarGetRefer( hb_stack.pPos, ( *pDynSym )->pSymbol );
|
||||
hb_stackPush();
|
||||
HB_TRACE(HB_TR_INFO, ("(hb_vmMPushMemvarRef)"));
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_MPUSHSYM:
|
||||
{
|
||||
HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 );
|
||||
hb_vmPushSymbol( ( *pDynSym )->pSymbol );
|
||||
}
|
||||
{
|
||||
HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 );
|
||||
hb_vmPushSymbol( ( *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 * ) ( pCode + w + 1 );
|
||||
hb_vmPushVariable( ( *pDynSym )->pSymbol );
|
||||
w += sizeof( HB_DYNS_PTR ) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
/* misc */
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ ROOT = ../../
|
||||
|
||||
PRG_SOURCES=\
|
||||
hbrun.prg \
|
||||
exttools.prg \
|
||||
external.prg \
|
||||
|
||||
PRG_MAIN=hbrun.prg
|
||||
|
||||
|
||||
Reference in New Issue
Block a user