diff --git a/harbour/ChangeLog b/harbour/ChangeLog index be58bd2311..110b0ce20e 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,13 @@ +20000501-16:08 GMT+1 Victor Szakats + + * include/hbpcode.h + * source/compiler/hbfix.c + * source/compiler/hbpcode.c + * source/compiler/genc.c + * source/compiler/harbour.c + * source/vm/hvm.c + + Added new near pcodes for POP/PUSHALIASEDFIELD + 20000501-15:45 GMT+1 Ryszard Glab *source/rtl/filesys.c @@ -51,6 +61,7 @@ 20000501 08:10 GMT-3 Luiz Rafael Culik *makefile.bc +added teditor.prg entry to makefile + 20000501 08:00 GMT-3 Luiz Rafael Culik *contrib/libgt/doc/gendoc.bat contrib/libmisc/doc/gendoc.bat diff --git a/harbour/include/hbpcode.h b/harbour/include/hbpcode.h index 64d245f1e5..9194ad8881 100644 --- a/harbour/include/hbpcode.h +++ b/harbour/include/hbpcode.h @@ -44,123 +44,125 @@ */ typedef enum { - HB_P_AND, /* peforms the logical AND of two latest stack values, removes them and places result */ - HB_P_ARRAYPUSH, /* places on the virtual machine stack an array element */ - HB_P_ARRAYPOP, /* pops a value from the eval stack into an array element */ - HB_P_ARRAYDIM, /* instructs the virtual machine to build an array with some specific dimensions */ - HB_P_ARRAYGEN, /* instructs the virtual machine to build an array and load elemnst from the stack */ - HB_P_EQUAL, /* check if the latest two values on the stack are equal, removing them and leaving there the result */ - HB_P_ENDBLOCK, /* end of a codeblock definition */ - HB_P_ENDPROC, /* instructs the virtual machine to end execution */ - HB_P_EXACTLYEQUAL, /* check if the latest two values on the stack are exactly equal, removing them and leaving there the result */ - HB_P_FALSE, /* pushes false on the virtual machine stack */ - HB_P_FORTEST, /* For STEP. If step > 1 less. If step < 1 greater. */ - HB_P_FUNCTION, /* instructs the virtual machine to execute a function saving its result */ - HB_P_FUNCTIONSHORT, /* instructs the virtual machine to execute a function saving its result */ - HB_P_FRAME, /* instructs the virtual machine about how many parameters and locals a function uses */ - HB_P_FUNCPTR, /* returns a function address pointer */ - HB_P_GREATER, /* checks if the second latest value on the stack is greater that the lastest one */ - HB_P_GREATEREQUAL, /* checks if the second latest value on the stack is greater equal that the latest one, leaves the result only */ - HB_P_DEC, /* decrements the latest value on the virtual machine stack */ - HB_P_DIVIDE, /* divides the latest two values on the stack, removing them and leaving there the result */ - HB_P_DO, /* instructs the virtual machine to execute a function discarding its result */ - HB_P_DOSHORT, /* instructs the virtual machine to execute a function discarding its result */ - HB_P_DUPLICATE, /* places a copy of the latest virtual machine stack value on to the stack */ - 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_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_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_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_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 */ - HB_P_LOCALNAME, /* sets the name of local variable */ - HB_P_MACROPOP, /* compile and run - pop a value from the stack */ - HB_P_MACROPOPALIASED, /* compile and run - pop a field value from the stack */ - HB_P_MACROPUSH, /* compile and run - leave the result on the stack */ - HB_P_MACROPUSHALIASED, /* compile and run - leave the field value on the stack */ - HB_P_MACROSYMBOL, /* compile into a symbol name (used in function calls) */ - HB_P_MACROTEXT, /* macro text substitution */ - HB_P_MESSAGE, /* sends a message to an object */ - HB_P_MINUS, /* subs the latest two values on the stack, removing them and leaving there the result */ - HB_P_MODULUS, /* calculates the modulus of the two values on the stack, removing them and leaving there the result */ - HB_P_MODULENAME, /* sets the name of debugged module */ + HB_P_AND, /* peforms the logical AND of two latest stack values, removes them and places result */ + HB_P_ARRAYPUSH, /* places on the virtual machine stack an array element */ + HB_P_ARRAYPOP, /* pops a value from the eval stack into an array element */ + HB_P_ARRAYDIM, /* instructs the virtual machine to build an array with some specific dimensions */ + HB_P_ARRAYGEN, /* instructs the virtual machine to build an array and load elemnst from the stack */ + HB_P_EQUAL, /* check if the latest two values on the stack are equal, removing them and leaving there the result */ + HB_P_ENDBLOCK, /* end of a codeblock definition */ + HB_P_ENDPROC, /* instructs the virtual machine to end execution */ + HB_P_EXACTLYEQUAL, /* check if the latest two values on the stack are exactly equal, removing them and leaving there the result */ + HB_P_FALSE, /* pushes false on the virtual machine stack */ + HB_P_FORTEST, /* For STEP. If step > 1 less. If step < 1 greater. */ + HB_P_FUNCTION, /* instructs the virtual machine to execute a function saving its result */ + HB_P_FUNCTIONSHORT, /* instructs the virtual machine to execute a function saving its result */ + HB_P_FRAME, /* instructs the virtual machine about how many parameters and locals a function uses */ + HB_P_FUNCPTR, /* returns a function address pointer */ + HB_P_GREATER, /* checks if the second latest value on the stack is greater that the lastest one */ + HB_P_GREATEREQUAL, /* checks if the second latest value on the stack is greater equal that the latest one, leaves the result only */ + HB_P_DEC, /* decrements the latest value on the virtual machine stack */ + HB_P_DIVIDE, /* divides the latest two values on the stack, removing them and leaving there the result */ + HB_P_DO, /* instructs the virtual machine to execute a function discarding its result */ + HB_P_DOSHORT, /* instructs the virtual machine to execute a function discarding its result */ + HB_P_DUPLICATE, /* places a copy of the latest virtual machine stack value on to the stack */ + 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_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_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_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_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 */ + HB_P_LOCALNAME, /* sets the name of local variable */ + HB_P_MACROPOP, /* compile and run - pop a value from the stack */ + HB_P_MACROPOPALIASED, /* compile and run - pop a field value from the stack */ + HB_P_MACROPUSH, /* compile and run - leave the result on the stack */ + HB_P_MACROPUSHALIASED, /* compile and run - leave the field value on the stack */ + HB_P_MACROSYMBOL, /* compile into a symbol name (used in function calls) */ + HB_P_MACROTEXT, /* macro text substitution */ + HB_P_MESSAGE, /* sends a message to an object */ + HB_P_MINUS, /* subs the latest two values on the stack, removing them and leaving there the result */ + HB_P_MODULUS, /* calculates the modulus of the two values on the stack, removing them and leaving there the result */ + HB_P_MODULENAME, /* sets the name of debugged module */ /* start: pcodes generated by the macro compiler - the symbol address is used */ - HB_P_MMESSAGE, - HB_P_MPOPALIASEDFIELD, - HB_P_MPOPALIASEDVAR, - HB_P_MPOPFIELD, - HB_P_MPOPMEMVAR, - HB_P_MPUSHALIASEDFIELD, - HB_P_MPUSHALIASEDVAR, - HB_P_MPUSHBLOCK, - HB_P_MPUSHFIELD, - HB_P_MPUSHMEMVAR, - HB_P_MPUSHMEMVARREF, - HB_P_MPUSHSYM, - HB_P_MPUSHVARIABLE, -/* end: */ - HB_P_MULT, /* multiplies the latest two values on the stack, removing them and leaving there the result */ - HB_P_NEGATE, /* numerically negates the latest value on the stack */ - HB_P_NOOP, /* no operation */ - HB_P_NOT, /* logically negates the latest value on the stack */ - HB_P_NOTEQUAL, /* checks if the latest two stack values are equal, leaves just the result */ - HB_P_OR, /* peforms the logical OR of two latest stack values, removes them and places result */ - HB_P_PARAMETER, /* creates PRIVATE variables and assigns values to functions paramaters */ - HB_P_PLUS, /* adds the latest two values on the stack, removing them and leaving there the result */ - HB_P_POP, /* removes the latest value from the stack */ - HB_P_POPALIAS, /* pops the item from the eval stack and selects the current workarea */ - HB_P_POPALIASEDFIELD, /* pops aliased field */ - HB_P_POPALIASEDVAR, /* pops aliased variable (either a field or a memvar) */ - HB_P_POPFIELD, /* pops unaliased field */ - HB_P_POPLOCAL, /* pops the contains of the virtual machine stack onto a local variable */ - HB_P_POPLOCALNEAR, /* pops the contains of the virtual machine stack onto a local variable */ - HB_P_POPMEMVAR, /* pops the contains of a memvar variable to the virtual machine stack */ - HB_P_POPSTATIC, /* pops the contains of the virtual machine stack onto a static variable */ - HB_P_POPVARIABLE, /* pops the contains of an undeclared variable from the virtual machine stack */ - HB_P_POWER, /* calculates the power of the two values on the stack, removing them and leaving there the result */ - HB_P_PUSHALIAS, /* saves the current workarea number on the eval stack */ - HB_P_PUSHALIASEDFIELD, /* pushes aliased field */ - HB_P_PUSHALIASEDVAR, /* pushes aliased variable (either a field or a memvar) */ - HB_P_PUSHBLOCK, /* start of a codeblock definition */ - HB_P_PUSHFIELD, /* pushes unaliased field */ - HB_P_PUSHBYTE, /* places a 1 byte integer number on the virtual machine stack */ - HB_P_PUSHINT, /* places an integer number on the virtual machine stack */ - HB_P_PUSHLOCAL, /* pushes the contains of a local variable to the virtual machine stack */ - HB_P_PUSHLOCALNEAR, /* pushes the contains of a local variable to the virtual machine stack */ - HB_P_PUSHLOCALREF, /* pushes a local variable by reference to the virtual machine stack */ - HB_P_PUSHLONG, /* places an integer number on the virtual machine stack */ - HB_P_PUSHMEMVAR, /* pushes the contains of a memvar variable to the virtual machine stack */ - HB_P_PUSHMEMVARREF, /* pushes the a memvar variable by reference to the virtual machine stack */ - HB_P_PUSHNIL, /* places a nil on the virtual machine stack */ - HB_P_PUSHDOUBLE, /* places a double number on the virtual machine stack */ - HB_P_PUSHSELF, /* pushes Self for the current processed method */ - HB_P_PUSHSTATIC, /* pushes the contains of a static variable to the virtual machine stack */ - HB_P_PUSHSTATICREF, /* pushes the a static variable by reference to the virtual machine stack */ - HB_P_PUSHSTR, /* places a string on the virtual machine stack */ - HB_P_PUSHSTRSHORT, /* places a string on the virtual machine stack */ - HB_P_PUSHSYM, /* places a symbol on the virtual machine stack */ - HB_P_PUSHSYMNEAR, /* places a symbol on the virtual machine stack */ - HB_P_PUSHVARIABLE, /* pushes the contains of an undeclared variable to the virtual machine stack */ - HB_P_RETVALUE, /* instructs the virtual machine to return the latest stack value */ - HB_P_SEQBEGIN, /* BEGIN SEQUENCE */ - HB_P_SEQEND, /* END SEQUENCE */ - HB_P_SEQRECOVER, /* RECOVER statement */ - HB_P_SFRAME, /* sets the statics frame for a function */ - HB_P_STATICS, /* defines the number of statics variables for a PRG */ - HB_P_SWAPALIAS, /* restores the current workarea number from the eval stack */ - 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 */ + HB_P_MMESSAGE, + HB_P_MPOPALIASEDFIELD, + HB_P_MPOPALIASEDVAR, + HB_P_MPOPFIELD, + HB_P_MPOPMEMVAR, + HB_P_MPUSHALIASEDFIELD, + HB_P_MPUSHALIASEDVAR, + HB_P_MPUSHBLOCK, + HB_P_MPUSHFIELD, + HB_P_MPUSHMEMVAR, + HB_P_MPUSHMEMVARREF, + HB_P_MPUSHSYM, + HB_P_MPUSHVARIABLE, +/* end: */ + HB_P_MULT, /* multiplies the latest two values on the stack, removing them and leaving there the result */ + HB_P_NEGATE, /* numerically negates the latest value on the stack */ + HB_P_NOOP, /* no operation */ + HB_P_NOT, /* logically negates the latest value on the stack */ + HB_P_NOTEQUAL, /* checks if the latest two stack values are equal, leaves just the result */ + HB_P_OR, /* peforms the logical OR of two latest stack values, removes them and places result */ + HB_P_PARAMETER, /* creates PRIVATE variables and assigns values to functions paramaters */ + HB_P_PLUS, /* adds the latest two values on the stack, removing them and leaving there the result */ + HB_P_POP, /* removes the latest value from the stack */ + HB_P_POPALIAS, /* pops the item from the eval stack and selects the current workarea */ + HB_P_POPALIASEDFIELD, /* pops aliased field */ + HB_P_POPALIASEDFIELDNEAR, /* pops aliased field */ + HB_P_POPALIASEDVAR, /* pops aliased variable (either a field or a memvar) */ + HB_P_POPFIELD, /* pops unaliased field */ + HB_P_POPLOCAL, /* pops the contains of the virtual machine stack onto a local variable */ + HB_P_POPLOCALNEAR, /* pops the contains of the virtual machine stack onto a local variable */ + HB_P_POPMEMVAR, /* pops the contains of a memvar variable to the virtual machine stack */ + HB_P_POPSTATIC, /* pops the contains of the virtual machine stack onto a static variable */ + HB_P_POPVARIABLE, /* pops the contains of an undeclared variable from the virtual machine stack */ + HB_P_POWER, /* calculates the power of the two values on the stack, removing them and leaving there the result */ + HB_P_PUSHALIAS, /* saves the current workarea number on the eval stack */ + HB_P_PUSHALIASEDFIELD, /* pushes aliased field */ + HB_P_PUSHALIASEDFIELDNEAR, /* pushes aliased field */ + HB_P_PUSHALIASEDVAR, /* pushes aliased variable (either a field or a memvar) */ + HB_P_PUSHBLOCK, /* start of a codeblock definition */ + HB_P_PUSHFIELD, /* pushes unaliased field */ + HB_P_PUSHBYTE, /* places a 1 byte integer number on the virtual machine stack */ + HB_P_PUSHINT, /* places an integer number on the virtual machine stack */ + HB_P_PUSHLOCAL, /* pushes the contains of a local variable to the virtual machine stack */ + HB_P_PUSHLOCALNEAR, /* pushes the contains of a local variable to the virtual machine stack */ + HB_P_PUSHLOCALREF, /* pushes a local variable by reference to the virtual machine stack */ + HB_P_PUSHLONG, /* places an integer number on the virtual machine stack */ + HB_P_PUSHMEMVAR, /* pushes the contains of a memvar variable to the virtual machine stack */ + HB_P_PUSHMEMVARREF, /* pushes the a memvar variable by reference to the virtual machine stack */ + HB_P_PUSHNIL, /* places a nil on the virtual machine stack */ + HB_P_PUSHDOUBLE, /* places a double number on the virtual machine stack */ + HB_P_PUSHSELF, /* pushes Self for the current processed method */ + HB_P_PUSHSTATIC, /* pushes the contains of a static variable to the virtual machine stack */ + HB_P_PUSHSTATICREF, /* pushes the a static variable by reference to the virtual machine stack */ + HB_P_PUSHSTR, /* places a string on the virtual machine stack */ + HB_P_PUSHSTRSHORT, /* places a string on the virtual machine stack */ + HB_P_PUSHSYM, /* places a symbol on the virtual machine stack */ + HB_P_PUSHSYMNEAR, /* places a symbol on the virtual machine stack */ + HB_P_PUSHVARIABLE, /* pushes the contains of an undeclared variable to the virtual machine stack */ + HB_P_RETVALUE, /* instructs the virtual machine to return the latest stack value */ + HB_P_SEQBEGIN, /* BEGIN SEQUENCE */ + HB_P_SEQEND, /* END SEQUENCE */ + HB_P_SEQRECOVER, /* RECOVER statement */ + HB_P_SFRAME, /* sets the statics frame for a function */ + HB_P_STATICS, /* defines the number of statics variables for a PRG */ + HB_P_SWAPALIAS, /* restores the current workarea number from the eval stack */ + 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 */ + HB_P_LAST_PCODE /* this defines the number of defined pcodes */ } HB_PCODE; #endif /* HB_PCODE_H_ */ diff --git a/harbour/source/compiler/genc.c b/harbour/source/compiler/genc.c index fa48bab169..bdaf2e21d5 100644 --- a/harbour/source/compiler/genc.c +++ b/harbour/source/compiler/genc.c @@ -876,6 +876,15 @@ static HB_GENC_FUNC( hb_p_popaliasedfield ) return 3; } +static HB_GENC_FUNC( hb_p_popaliasedfieldnear ) +{ + fprintf( cargo->yyc, "\tHB_P_POPALIASEDFIELDNEAR, %i,", + pFunc->pCode[ lPCodePos + 1 ] ); + if( cargo->bVerbose ) fprintf( cargo->yyc, "\t/* %s */", hb_compSymbolGetPos( pFunc->pCode[ lPCodePos + 1 ] )->szName ); + fprintf( cargo->yyc, "\n" ); + return 2; +} + static HB_GENC_FUNC( hb_p_popaliasedvar ) { fprintf( cargo->yyc, "\tHB_P_POPALIASEDVAR, %i, %i,", @@ -1019,6 +1028,15 @@ static HB_GENC_FUNC( hb_p_pushaliasedfield ) return 3; } +static HB_GENC_FUNC( hb_p_pushaliasedfieldnear ) +{ + fprintf( cargo->yyc, "\tHB_P_PUSHALIASEDFIELDNEAR, %i,", + pFunc->pCode[ lPCodePos + 1 ] ); + if( cargo->bVerbose ) fprintf( cargo->yyc, "\t/* %s */", hb_compSymbolGetPos( pFunc->pCode[ lPCodePos + 1 ] )->szName ); + fprintf( cargo->yyc, "\n" ); + return 2; +} + static HB_GENC_FUNC( hb_p_pushaliasedvar ) { fprintf( cargo->yyc, "\tHB_P_PUSHALIASEDVAR, %i, %i,", @@ -1613,6 +1631,7 @@ static HB_GENC_FUNC_PTR s_verbose_table[] = { hb_p_pop, hb_p_popalias, hb_p_popaliasedfield, + hb_p_popaliasedfieldnear, hb_p_popaliasedvar, hb_p_popfield, hb_p_poplocal, @@ -1623,6 +1642,7 @@ static HB_GENC_FUNC_PTR s_verbose_table[] = { hb_p_power, hb_p_pushalias, hb_p_pushaliasedfield, + hb_p_pushaliasedfieldnear, hb_p_pushaliasedvar, hb_p_pushblock, hb_p_pushfield, diff --git a/harbour/source/compiler/harbour.c b/harbour/source/compiler/harbour.c index f554485773..32f452887d 100644 --- a/harbour/source/compiler/harbour.c +++ b/harbour/source/compiler/harbour.c @@ -1786,7 +1786,13 @@ void hb_compGenVarPCode( BYTE bPCode, char * szVarName ) if( ! pSym ) pSym = hb_compSymbolAdd( szVarName, &wVar ); pSym->cScope |= VS_MEMVAR; - hb_compGenPCode3( bPCode, HB_LOBYTE( wVar ), HB_HIBYTE( wVar ), ( BOOL ) 1 ); + + if( bPCode == HB_P_PUSHALIASEDFIELD && wVar <= 255 ) + hb_compGenPCode2( HB_P_PUSHALIASEDFIELDNEAR, ( BYTE ) wVar, ( BOOL ) 1 ); + else if( bPCode == HB_P_POPALIASEDFIELD && wVar <= 255 ) + hb_compGenPCode2( HB_P_POPALIASEDFIELDNEAR, ( BYTE ) wVar, ( BOOL ) 1 ); + else + hb_compGenPCode3( bPCode, HB_LOBYTE( wVar ), HB_HIBYTE( wVar ), ( BOOL ) 1 ); } void hb_compGenMessage( char * szMsgName ) /* sends a message to an object */ diff --git a/harbour/source/compiler/hbfix.c b/harbour/source/compiler/hbfix.c index 8499ffe771..060499761a 100644 --- a/harbour/source/compiler/hbfix.c +++ b/harbour/source/compiler/hbfix.c @@ -288,6 +288,7 @@ static HB_FIX_FUNC_PTR s_fixlocals_table[] = NULL, /* HB_P_POP, */ NULL, /* HB_P_POPALIAS, */ NULL, /* HB_P_POPALIASEDFIELD, */ + NULL, /* HB_P_POPALIASEDFIELDNEAR, */ NULL, /* HB_P_POPALIASEDVAR, */ NULL, /* HB_P_POPFIELD, */ hb_p_poplocal, /* HB_P_POPLOCAL, */ @@ -298,6 +299,7 @@ static HB_FIX_FUNC_PTR s_fixlocals_table[] = NULL, /* HB_P_POWER, */ NULL, /* HB_P_PUSHALIAS, */ NULL, /* HB_P_PUSHALIASEDFIELD, */ + NULL, /* HB_P_PUSHALIASEDFIELDNEAR, */ NULL, /* HB_P_PUSHALIASEDVAR, */ hb_p_pushblock, /* HB_P_PUSHBLOCK, */ NULL, /* HB_P_PUSHFIELD, */ diff --git a/harbour/source/compiler/hbpcode.c b/harbour/source/compiler/hbpcode.c index 5afb915add..fb9e94bb61 100644 --- a/harbour/source/compiler/hbpcode.c +++ b/harbour/source/compiler/hbpcode.c @@ -123,6 +123,7 @@ static BYTE s_pcode_len[] = { 1, /* HB_P_POP, */ 1, /* HB_P_POPALIAS, */ 3, /* HB_P_POPALIASEDFIELD, */ + 2, /* HB_P_POPALIASEDFIELDNEAR, */ 3, /* HB_P_POPALIASEDVAR, */ 3, /* HB_P_POPFIELD, */ 3, /* HB_P_POPLOCAL, */ @@ -133,6 +134,7 @@ static BYTE s_pcode_len[] = { 1, /* HB_P_POWER, */ 1, /* HB_P_PUSHALIAS, */ 3, /* HB_P_PUSHALIASEDFIELD, */ + 2, /* HB_P_PUSHALIASEDFIELDNEAR, */ 3, /* HB_P_PUSHALIASEDVAR, */ 0, /* HB_P_PUSHBLOCK, */ 3, /* HB_P_PUSHFIELD, */ diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index 07ed403b49..83eda3b808 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -949,6 +949,11 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) w += 3; break; + case HB_P_PUSHALIASEDFIELDNEAR: + hb_vmPushAliasedField( pSymbols + pCode[ w + 1 ] ); + w += 2; + break; + case HB_P_PUSHALIASEDVAR: hb_vmPushAliasedVar( pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ) ); w += 3; @@ -1036,6 +1041,11 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) w += 3; break; + case HB_P_POPALIASEDFIELDNEAR: + hb_vmPopAliasedField( pSymbols + pCode[ w + 1 ] ); + w += 2; + break; + case HB_P_POPALIASEDVAR: hb_vmPopAliasedVar( pSymbols + ( USHORT ) ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ) ); w += 3;