2007-02-27 12:10 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcomp.h
* harbour/include/hbexpra.c
* harbour/include/hbexprb.c
* harbour/include/hbexprc.c
* harbour/include/hbmacro.h
* harbour/include/hbpcode.h
* harbour/include/hbxvm.h
* harbour/source/common/hbdate.c
* harbour/source/compiler/genc.c
* harbour/source/compiler/gencc.c
* harbour/source/compiler/harbour.c
* harbour/source/compiler/harbour.y
* harbour/source/compiler/harbour.yyc
* harbour/source/compiler/hbdead.c
* harbour/source/compiler/hbfix.c
* harbour/source/compiler/hblbl.c
* harbour/source/compiler/hbopt.c
* harbour/source/compiler/hbpcode.c
* harbour/source/compiler/hbstripl.c
* harbour/source/rtl/abs.c
* harbour/source/rtl/at.c
* harbour/source/rtl/chrasc.c
* harbour/source/rtl/datec.c
* harbour/source/rtl/dateshb.c
* harbour/source/rtl/diskspac.c
* harbour/source/rtl/disksphb.c
* harbour/source/rtl/gtfunc.c
* harbour/source/rtl/left.c
* harbour/source/rtl/len.c
* harbour/source/rtl/math.c
* harbour/source/rtl/minmax.c
* harbour/source/rtl/mod.c
* harbour/source/rtl/philes.c
* harbour/source/rtl/philesx.c
* harbour/source/rtl/replic.c
* harbour/source/rtl/round.c
* harbour/source/rtl/set.c
* harbour/source/rtl/space.c
* harbour/source/rtl/strcase.c
* harbour/source/rtl/strpeek.c
* harbour/source/rtl/transfrm.c
* harbour/source/rtl/trim.c
* harbour/source/rtl/type.c
* harbour/source/rtl/val.c
* harbour/source/rtl/word.c
* harbour/source/vm/hvm.c
* harbour/source/vm/macro.c
* added some PCODEs to cover all possible combination of ++, --, <op>=
operations in the same way and keep Clipper compatible RT errors.
* added some other PCODEs to optimize some commonly used expressions/
statements
* use HB_ERR_ARGS_BASEPARAMS instead of hb_paramError()
* some other cleanups and minor optimizations
* harbour/utils/hbtest/rt_math.prg
* update expected result for MOD() - it was not Clipper compatible and
it will be hard to make it compatible without introducing some Clipper's
side effects
This commit is contained in:
@@ -8,6 +8,65 @@
|
||||
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2007-02-27 12:10 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/include/hbcomp.h
|
||||
* harbour/include/hbexpra.c
|
||||
* harbour/include/hbexprb.c
|
||||
* harbour/include/hbexprc.c
|
||||
* harbour/include/hbmacro.h
|
||||
* harbour/include/hbpcode.h
|
||||
* harbour/include/hbxvm.h
|
||||
* harbour/source/common/hbdate.c
|
||||
* harbour/source/compiler/genc.c
|
||||
* harbour/source/compiler/gencc.c
|
||||
* harbour/source/compiler/harbour.c
|
||||
* harbour/source/compiler/harbour.y
|
||||
* harbour/source/compiler/harbour.yyc
|
||||
* harbour/source/compiler/hbdead.c
|
||||
* harbour/source/compiler/hbfix.c
|
||||
* harbour/source/compiler/hblbl.c
|
||||
* harbour/source/compiler/hbopt.c
|
||||
* harbour/source/compiler/hbpcode.c
|
||||
* harbour/source/compiler/hbstripl.c
|
||||
* harbour/source/rtl/abs.c
|
||||
* harbour/source/rtl/at.c
|
||||
* harbour/source/rtl/chrasc.c
|
||||
* harbour/source/rtl/datec.c
|
||||
* harbour/source/rtl/dateshb.c
|
||||
* harbour/source/rtl/diskspac.c
|
||||
* harbour/source/rtl/disksphb.c
|
||||
* harbour/source/rtl/gtfunc.c
|
||||
* harbour/source/rtl/left.c
|
||||
* harbour/source/rtl/len.c
|
||||
* harbour/source/rtl/math.c
|
||||
* harbour/source/rtl/minmax.c
|
||||
* harbour/source/rtl/mod.c
|
||||
* harbour/source/rtl/philes.c
|
||||
* harbour/source/rtl/philesx.c
|
||||
* harbour/source/rtl/replic.c
|
||||
* harbour/source/rtl/round.c
|
||||
* harbour/source/rtl/set.c
|
||||
* harbour/source/rtl/space.c
|
||||
* harbour/source/rtl/strcase.c
|
||||
* harbour/source/rtl/strpeek.c
|
||||
* harbour/source/rtl/transfrm.c
|
||||
* harbour/source/rtl/trim.c
|
||||
* harbour/source/rtl/type.c
|
||||
* harbour/source/rtl/val.c
|
||||
* harbour/source/rtl/word.c
|
||||
* harbour/source/vm/hvm.c
|
||||
* harbour/source/vm/macro.c
|
||||
* added some PCODEs to cover all possible combination of ++, --, <op>=
|
||||
operations in the same way and keep Clipper compatible RT errors.
|
||||
* added some other PCODEs to optimize some commonly used expressions/
|
||||
statements
|
||||
* use HB_ERR_ARGS_BASEPARAMS instead of hb_paramError()
|
||||
* some other cleanups and minor optimizations
|
||||
* harbour/utils/hbtest/rt_math.prg
|
||||
* update expected result for MOD() - it was not Clipper compatible and
|
||||
it will be hard to make it compatible without introducing some Clipper's
|
||||
side effects
|
||||
|
||||
2007-02-25 19:25 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/source/common/expropt2.c
|
||||
% strip nested parenthesis in expressions like: (((<exp>)))
|
||||
|
||||
@@ -203,6 +203,7 @@ extern void hb_compGenMessageData( char * szMsg, BOOL bIsObject, HB_COMP_DECL );
|
||||
extern void hb_compGenPopVar( char * szVarName, HB_COMP_DECL ); /* generates the pcode to pop a value from the virtual machine stack onto a variable */
|
||||
extern void hb_compGenPushDouble( double dNumber, BYTE bWidth, BYTE bDec, HB_COMP_DECL ); /* Pushes a number on the virtual machine stack */
|
||||
extern void hb_compGenPushFunCall( char *, HB_COMP_DECL ); /* generates the pcode to push function's call */
|
||||
extern void hb_compGenPushFunSym( char *, HB_COMP_DECL ); /* generates the pcode to push function's symbol */
|
||||
extern void hb_compGenPushFunRef( char *, HB_COMP_DECL ); /* generates the pcode to push function's reference symbol */
|
||||
extern void hb_compGenPushVar( char * szVarName, BOOL bMacroVar, HB_COMP_DECL ); /* generates the pcode to push a variable value to the virtual machine stack */
|
||||
extern void hb_compGenPushVarRef( char * szVarName, HB_COMP_DECL ); /* generates the pcode to push a variable by reference to the virtual machine stack */
|
||||
|
||||
@@ -794,22 +794,9 @@ HB_EXPR_PTR hb_compExprSetOperand( HB_EXPR_PTR pExpr, HB_EXPR_PTR pItem, HB_COMP
|
||||
* precedence rules
|
||||
*/
|
||||
BYTE ucLeft = s_PrecedTable[ pExpr->ExprType ];
|
||||
if( ucLeft >= ucRight )
|
||||
{
|
||||
/* Left operator has the same or lower precedence then the right one
|
||||
* e.g. a * b + c
|
||||
* pItem -> b + c -> L=b R=c O=+
|
||||
* pExpr -> a * -> l=a r= o=*
|
||||
*
|
||||
* -> (a * b) + c -> Lelf=(a * b) Right=c Oper=+
|
||||
* Left := l (o) L
|
||||
* Right := R
|
||||
* Oper := O
|
||||
*/
|
||||
pItem->value.asOperator.pLeft = hb_compExprSetOperand( pExpr, pItem->value.asOperator.pLeft, HB_COMP_PARAM );
|
||||
pExpr = pItem;
|
||||
}
|
||||
else
|
||||
if( ucLeft < ucRight ||
|
||||
( ucLeft == ucRight && HB_COMP_ISSUPPORTED( HB_COMPFLAG_SHORTCUTS ) &&
|
||||
( ucLeft == HB_EO_OR || ucLeft == HB_EO_AND ) ) )
|
||||
{
|
||||
/* Left operator has a lower precedence then the right one
|
||||
* e.g. a + b * c
|
||||
@@ -823,6 +810,21 @@ HB_EXPR_PTR hb_compExprSetOperand( HB_EXPR_PTR pExpr, HB_EXPR_PTR pItem, HB_COMP
|
||||
*/
|
||||
pExpr->value.asOperator.pRight = pItem;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Left operator has the same or higer precedence then the right one
|
||||
* e.g. a * b + c
|
||||
* pItem -> b + c -> L=b R=c O=+
|
||||
* pExpr -> a * -> l=a r= o=*
|
||||
*
|
||||
* -> (a * b) + c -> Lelf=(a * b) Right=c Oper=+
|
||||
* Left := l (o) L
|
||||
* Right := R
|
||||
* Oper := O
|
||||
*/
|
||||
pItem->value.asOperator.pLeft = hb_compExprSetOperand( pExpr, pItem->value.asOperator.pLeft, HB_COMP_PARAM );
|
||||
pExpr = pItem;
|
||||
}
|
||||
}
|
||||
|
||||
return pExpr;
|
||||
|
||||
@@ -1599,8 +1599,15 @@ static HB_EXPR_FUNC( hb_compExprUseFunCall )
|
||||
BOOL fArgsList = FALSE;
|
||||
USHORT usCount = 0;
|
||||
|
||||
HB_EXPR_USE( pSelf->value.asFunCall.pFunName, HB_EA_PUSH_PCODE );
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_PUSHNIL );
|
||||
if( pSelf->value.asFunCall.pFunName->ExprType == HB_ET_FUNNAME )
|
||||
{
|
||||
hb_compGenPushFunCall( pSelf->value.asFunCall.pFunName->value.asSymbol, HB_COMP_PARAM );
|
||||
}
|
||||
else
|
||||
{
|
||||
HB_EXPR_USE( pSelf->value.asFunCall.pFunName, HB_EA_PUSH_PCODE );
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_PUSHNIL );
|
||||
}
|
||||
|
||||
/* NOTE: pParms will be NULL in 'DO procname' (if there is
|
||||
* no WITH keyword)
|
||||
@@ -1634,8 +1641,15 @@ static HB_EXPR_FUNC( hb_compExprUseFunCall )
|
||||
BOOL fArgsList = FALSE;
|
||||
USHORT usCount = 0;
|
||||
|
||||
HB_EXPR_USE( pSelf->value.asFunCall.pFunName, HB_EA_PUSH_PCODE );
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_PUSHNIL );
|
||||
if( pSelf->value.asFunCall.pFunName->ExprType == HB_ET_FUNNAME )
|
||||
{
|
||||
hb_compGenPushFunCall( pSelf->value.asFunCall.pFunName->value.asSymbol, HB_COMP_PARAM );
|
||||
}
|
||||
else
|
||||
{
|
||||
HB_EXPR_USE( pSelf->value.asFunCall.pFunName, HB_EA_PUSH_PCODE );
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_PUSHNIL );
|
||||
}
|
||||
|
||||
if( pSelf->value.asFunCall.pParms )
|
||||
{
|
||||
@@ -1919,7 +1933,7 @@ static HB_EXPR_FUNC( hb_compExprUseFunName )
|
||||
break;
|
||||
|
||||
case HB_EA_PUSH_PCODE:
|
||||
HB_EXPR_PCODE1( hb_compGenPushFunCall, pSelf->value.asSymbol );
|
||||
HB_EXPR_PCODE1( hb_compGenPushFunSym, pSelf->value.asSymbol );
|
||||
break;
|
||||
|
||||
case HB_EA_POP_PCODE:
|
||||
@@ -2549,7 +2563,7 @@ static HB_EXPR_FUNC( hb_compExprUseOr )
|
||||
break;
|
||||
|
||||
case HB_EA_PUSH_POP:
|
||||
if( HB_SUPPORT_HARBOUR && HB_COMP_ISSUPPORTED( HB_COMPFLAG_SHORTCUTS ) )
|
||||
if( HB_COMP_ISSUPPORTED( HB_COMPFLAG_SHORTCUTS ) )
|
||||
{
|
||||
LONG lEndPos;
|
||||
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_PUSH_PCODE );
|
||||
@@ -2624,7 +2638,7 @@ static HB_EXPR_FUNC( hb_compExprUseAnd )
|
||||
break;
|
||||
|
||||
case HB_EA_PUSH_POP:
|
||||
if( HB_SUPPORT_HARBOUR && HB_COMP_ISSUPPORTED( HB_COMPFLAG_SHORTCUTS ) )
|
||||
if( HB_COMP_ISSUPPORTED( HB_COMPFLAG_SHORTCUTS ) )
|
||||
{
|
||||
LONG lEndPos;
|
||||
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_PUSH_PCODE );
|
||||
@@ -2658,22 +2672,31 @@ static HB_EXPR_FUNC( hb_compExprUseNot )
|
||||
switch( iMessage )
|
||||
{
|
||||
case HB_EA_REDUCE:
|
||||
{
|
||||
HB_EXPR_PTR pExpr;
|
||||
|
||||
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
|
||||
pExpr = pSelf->value.asOperator.pLeft;
|
||||
|
||||
if( pExpr->ExprType == HB_ET_LOGICAL )
|
||||
{
|
||||
HB_EXPR_PTR pExpr;
|
||||
|
||||
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
|
||||
pExpr = pSelf->value.asOperator.pLeft;
|
||||
|
||||
if( pExpr->ExprType == HB_ET_LOGICAL )
|
||||
{
|
||||
pExpr->value.asLogical = ! pExpr->value.asLogical;
|
||||
pSelf->ExprType = HB_ET_NONE; /* do not delete operator parameter - we are still using it */
|
||||
HB_EXPR_PCODE1( hb_compExprDelete, pSelf );
|
||||
pSelf = pExpr;
|
||||
}
|
||||
pExpr->value.asLogical = ! pExpr->value.asLogical;
|
||||
pSelf->ExprType = HB_ET_NONE; /* do not delete operator parameter - we are still using it */
|
||||
HB_EXPR_PCODE1( hb_compExprDelete, pSelf );
|
||||
pSelf = pExpr;
|
||||
}
|
||||
else if( pExpr->ExprType == HB_EO_NOT && HB_SUPPORT_HARBOUR )
|
||||
{
|
||||
/* NOTE: This will not generate a runtime error if incompatible
|
||||
* data type is used
|
||||
*/
|
||||
pExpr->ExprType = HB_ET_NONE; /* do not delete operator parameter - we are still using it */
|
||||
pExpr = pExpr->value.asOperator.pLeft;
|
||||
HB_EXPR_PCODE1( hb_compExprDelete, pSelf );
|
||||
pSelf = pExpr;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
case HB_EA_ARRAY_AT:
|
||||
hb_compErrorType( HB_COMP_PARAM, pSelf );
|
||||
break;
|
||||
|
||||
@@ -556,15 +556,8 @@ void hb_compExprPushPreOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL )
|
||||
{
|
||||
hb_compExprPushSendPop( pSelf->value.asOperator.pLeft, HB_COMP_PARAM );
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_PUSHOVARREF );
|
||||
|
||||
/* increase/decrease operation, leave unreferenced value on stack */
|
||||
/* We have to unreference the item on the stack, because we do not have
|
||||
such PCODE(s) then I'll trnaslate HB_P_INC/HB_P_DEC into
|
||||
HB_P_[PLUS|MINUS]EQ, Maybe in the future we will make it
|
||||
in differ way [druzus] */
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_ONE );
|
||||
bOper = ( bOper == HB_P_INC ) ? HB_P_PLUSEQ : HB_P_MINUSEQ;
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, bOper );
|
||||
hb_compGenPCode1( ( bOper == HB_P_INC ) ? HB_P_INCEQ : HB_P_DECEQ, HB_COMP_PARAM );
|
||||
}
|
||||
#endif
|
||||
else
|
||||
@@ -586,9 +579,7 @@ void hb_compExprPushPreOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL )
|
||||
pSelf->value.asOperator.pLeft->value.asMacro.SubType = usType;
|
||||
|
||||
/* increase/decrease operation, leave unreferenced value on stack */
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_ONE );
|
||||
bOper = ( bOper == HB_P_INC ) ? HB_P_PLUSEQ : HB_P_MINUSEQ;
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, bOper );
|
||||
hb_compGenPCode1( ( bOper == HB_P_INC ) ? HB_P_INCEQ : HB_P_DECEQ, HB_COMP_PARAM );
|
||||
return;
|
||||
}
|
||||
#ifdef HB_USE_ARRAYAT_REF
|
||||
@@ -602,30 +593,41 @@ void hb_compExprPushPreOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL )
|
||||
pSelf->value.asOperator.pLeft->value.asList.reference = FALSE;
|
||||
|
||||
/* increase/decrease operation, leave unreferenced value on stack */
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_ONE );
|
||||
bOper = ( bOper == HB_P_INC ) ? HB_P_PLUSEQ : HB_P_MINUSEQ;
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, bOper );
|
||||
hb_compGenPCode1( ( bOper == HB_P_INC ) ? HB_P_INCEQ : HB_P_DECEQ, HB_COMP_PARAM );
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#if !defined( HB_MACRO_SUPPORT )
|
||||
else if( pSelf->value.asOperator.pLeft->ExprType == HB_ET_VARIABLE )
|
||||
{
|
||||
if( hb_compVariableScope( HB_COMP_PARAM,
|
||||
pSelf->value.asOperator.pLeft->value.asSymbol ) == HB_VS_LOCAL_VAR )
|
||||
{
|
||||
int iLocal = hb_compLocalGetPos( HB_COMP_PARAM, pSelf->value.asOperator.pLeft->value.asSymbol ),
|
||||
iValue = ( bOper == HB_P_INC ) ? 1 : -1;
|
||||
BYTE buffer[ 5 ];
|
||||
int iScope = hb_compVariableScope( HB_COMP_PARAM, pSelf->value.asOperator.pLeft->value.asSymbol );
|
||||
|
||||
buffer[ 0 ] = HB_P_LOCALADDINT;
|
||||
buffer[ 1 ] = HB_LOBYTE( iLocal );
|
||||
buffer[ 2 ] = HB_HIBYTE( iLocal );
|
||||
buffer[ 3 ] = HB_LOBYTE( iValue );
|
||||
buffer[ 4 ] = HB_HIBYTE( iValue );
|
||||
hb_compGenPCodeN( buffer, 5, HB_COMP_PARAM );
|
||||
/* Push current value */
|
||||
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_PUSH_PCODE );
|
||||
if( iScope != HB_VS_LOCAL_FIELD && iScope != HB_VS_GLOBAL_FIELD &&
|
||||
iScope != HB_VS_UNDECLARED )
|
||||
{
|
||||
if( iScope == HB_VS_LOCAL_VAR )
|
||||
{
|
||||
int iLocal = hb_compLocalGetPos( HB_COMP_PARAM, pSelf->value.asOperator.pLeft->value.asSymbol );
|
||||
if( bOper == HB_P_INC )
|
||||
{
|
||||
hb_compGenPCode3( HB_P_LOCALINCPUSH, HB_LOBYTE( iLocal ), HB_HIBYTE( iLocal ), HB_COMP_PARAM );
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_compGenPCode3( HB_P_LOCALDEC, HB_LOBYTE( iLocal ), HB_HIBYTE( iLocal ), HB_COMP_PARAM );
|
||||
/* Push current value */
|
||||
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_PUSH_PCODE );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* NOTE: direct type change */
|
||||
HB_EXPRTYPE iOldType = pSelf->value.asOperator.pLeft->ExprType;
|
||||
pSelf->value.asOperator.pLeft->ExprType = HB_ET_VARREF;
|
||||
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_PUSH_PCODE );
|
||||
hb_compGenPCode1( ( bOper == HB_P_INC ) ? HB_P_INCEQ : HB_P_DECEQ, HB_COMP_PARAM );
|
||||
pSelf->value.asOperator.pLeft->ExprType = iOldType;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -665,9 +667,7 @@ void hb_compExprPushPostOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL )
|
||||
*/
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_DUPLUNREF );
|
||||
/* increment/decrement the value */
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_ONE );
|
||||
bOper = ( bOper == HB_P_INC ) ? HB_P_PLUSEQPOP : HB_P_MINUSEQPOP;
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, bOper );
|
||||
hb_compGenPCode1( ( bOper == HB_P_INC ) ? HB_P_INCEQPOP : HB_P_DECEQPOP, HB_COMP_PARAM );
|
||||
}
|
||||
#endif
|
||||
else
|
||||
@@ -693,9 +693,7 @@ void hb_compExprPushPostOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL )
|
||||
*/
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_DUPLUNREF );
|
||||
/* increase/decrease operation */
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_ONE );
|
||||
bOper = ( bOper == HB_P_INC ) ? HB_P_PLUSEQPOP : HB_P_MINUSEQPOP;
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, bOper );
|
||||
hb_compGenPCode1( ( bOper == HB_P_INC ) ? HB_P_INCEQPOP : HB_P_DECEQPOP, HB_COMP_PARAM );
|
||||
return;
|
||||
}
|
||||
#ifdef HB_USE_ARRAYAT_REF
|
||||
@@ -713,31 +711,37 @@ void hb_compExprPushPostOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL )
|
||||
*/
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_DUPLUNREF );
|
||||
/* increase/decrease operation */
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_ONE );
|
||||
bOper = ( bOper == HB_P_INC ) ? HB_P_PLUSEQPOP : HB_P_MINUSEQPOP;
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, bOper );
|
||||
hb_compGenPCode1( ( bOper == HB_P_INC ) ? HB_P_INCEQPOP : HB_P_DECEQPOP, HB_COMP_PARAM );
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#if !defined( HB_MACRO_SUPPORT )
|
||||
else if( pSelf->value.asOperator.pLeft->ExprType == HB_ET_VARIABLE )
|
||||
{
|
||||
if( hb_compVariableScope( HB_COMP_PARAM,
|
||||
pSelf->value.asOperator.pLeft->value.asSymbol ) == HB_VS_LOCAL_VAR )
|
||||
int iScope = hb_compVariableScope( HB_COMP_PARAM, pSelf->value.asOperator.pLeft->value.asSymbol );
|
||||
|
||||
if( iScope != HB_VS_LOCAL_FIELD && iScope != HB_VS_GLOBAL_FIELD &&
|
||||
iScope != HB_VS_UNDECLARED )
|
||||
{
|
||||
int iLocal = hb_compLocalGetPos( HB_COMP_PARAM, pSelf->value.asOperator.pLeft->value.asSymbol ),
|
||||
iValue = ( bOper == HB_P_INC ) ? 1 : -1;
|
||||
BYTE buffer[ 5 ];
|
||||
if( iScope == HB_VS_LOCAL_VAR )
|
||||
{
|
||||
int iLocal = hb_compLocalGetPos( HB_COMP_PARAM, pSelf->value.asOperator.pLeft->value.asSymbol );
|
||||
|
||||
/* Push current value */
|
||||
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_PUSH_PCODE );
|
||||
|
||||
buffer[ 0 ] = HB_P_LOCALADDINT;
|
||||
buffer[ 1 ] = HB_LOBYTE( iLocal );
|
||||
buffer[ 2 ] = HB_HIBYTE( iLocal );
|
||||
buffer[ 3 ] = HB_LOBYTE( iValue );
|
||||
buffer[ 4 ] = HB_HIBYTE( iValue );
|
||||
hb_compGenPCodeN( buffer, 5, HB_COMP_PARAM );
|
||||
/* Push current value */
|
||||
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_PUSH_PCODE );
|
||||
hb_compGenPCode3( ( bOper == HB_P_INC ) ? HB_P_LOCALINC : HB_P_LOCALDEC,
|
||||
HB_LOBYTE( iLocal ), HB_HIBYTE( iLocal ), HB_COMP_PARAM );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* NOTE: direct type change */
|
||||
HB_EXPRTYPE iOldType = pSelf->value.asOperator.pLeft->ExprType;
|
||||
pSelf->value.asOperator.pLeft->ExprType = HB_ET_VARREF;
|
||||
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_PUSH_PCODE );
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_DUPLUNREF );
|
||||
hb_compGenPCode1( ( bOper == HB_P_INC ) ? HB_P_INCEQPOP : HB_P_DECEQPOP, HB_COMP_PARAM );
|
||||
pSelf->value.asOperator.pLeft->ExprType = iOldType;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -774,9 +778,7 @@ void hb_compExprUsePreOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL )
|
||||
hb_compExprPushSendPop( pSelf->value.asOperator.pLeft, HB_COMP_PARAM );
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_PUSHOVARREF );
|
||||
/* increment/decrement the value */
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_ONE );
|
||||
bOper = ( bOper == HB_P_INC ) ? HB_P_PLUSEQPOP : HB_P_MINUSEQPOP;
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, bOper );
|
||||
hb_compGenPCode1( ( bOper == HB_P_INC ) ? HB_P_INCEQPOP : HB_P_DECEQPOP, HB_COMP_PARAM );
|
||||
}
|
||||
#endif
|
||||
else
|
||||
@@ -800,9 +802,7 @@ void hb_compExprUsePreOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL )
|
||||
pSelf->value.asOperator.pLeft->value.asMacro.SubType = usType;
|
||||
|
||||
/* increase/decrease operation */
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_ONE );
|
||||
bOper = ( bOper == HB_P_INC ) ? HB_P_PLUSEQPOP : HB_P_MINUSEQPOP;
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, bOper );
|
||||
hb_compGenPCode1( ( bOper == HB_P_INC ) ? HB_P_INCEQPOP : HB_P_DECEQPOP, HB_COMP_PARAM );
|
||||
return;
|
||||
}
|
||||
#ifdef HB_USE_ARRAYAT_REF
|
||||
@@ -815,11 +815,37 @@ void hb_compExprUsePreOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL )
|
||||
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_PUSH_PCODE );
|
||||
pSelf->value.asOperator.pLeft->value.asList.reference = FALSE;
|
||||
/* increase/decrease operation */
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, HB_P_ONE );
|
||||
bOper = ( bOper == HB_P_INC ) ? HB_P_PLUSEQPOP : HB_P_MINUSEQPOP;
|
||||
HB_EXPR_PCODE1( hb_compGenPCode1, bOper );
|
||||
hb_compGenPCode1( ( bOper == HB_P_INC ) ? HB_P_INCEQPOP : HB_P_DECEQPOP, HB_COMP_PARAM );
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#if !defined( HB_MACRO_SUPPORT )
|
||||
else if( pSelf->value.asOperator.pLeft->ExprType == HB_ET_VARIABLE )
|
||||
{
|
||||
int iScope = hb_compVariableScope( HB_COMP_PARAM, pSelf->value.asOperator.pLeft->value.asSymbol );
|
||||
|
||||
if( iScope != HB_VS_LOCAL_FIELD && iScope != HB_VS_GLOBAL_FIELD &&
|
||||
iScope != HB_VS_UNDECLARED )
|
||||
{
|
||||
if( iScope == HB_VS_LOCAL_VAR )
|
||||
{
|
||||
int iLocal = hb_compLocalGetPos( HB_COMP_PARAM, pSelf->value.asOperator.pLeft->value.asSymbol );
|
||||
|
||||
hb_compGenPCode3( ( bOper == HB_P_INC ) ? HB_P_LOCALINC : HB_P_LOCALDEC,
|
||||
HB_LOBYTE( iLocal ), HB_HIBYTE( iLocal ), HB_COMP_PARAM );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* NOTE: direct type change */
|
||||
HB_EXPRTYPE iOldType = pSelf->value.asOperator.pLeft->ExprType;
|
||||
pSelf->value.asOperator.pLeft->ExprType = HB_ET_VARREF;
|
||||
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_PUSH_PCODE );
|
||||
hb_compGenPCode1( ( bOper == HB_P_INC ) ? HB_P_INCEQPOP : HB_P_DECEQPOP, HB_COMP_PARAM );
|
||||
pSelf->value.asOperator.pLeft->ExprType = iOldType;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -144,6 +144,8 @@ extern void hb_compGenPushAliasedVar( char * szVarName,
|
||||
extern void hb_compGenPushLogical( int iTrueFalse, HB_COMP_DECL );
|
||||
extern void hb_compGenPushDouble( double dNumber, BYTE bWidth, BYTE bDec, HB_COMP_DECL );
|
||||
extern void hb_compGenPushFunCall( char * szFunName, HB_COMP_DECL );
|
||||
extern void hb_compGenPushFunSym( char * szFunName, HB_COMP_DECL );
|
||||
extern void hb_compGenPushFunRef( char * szFunName, HB_COMP_DECL );
|
||||
extern void hb_compGenPushString( char * szText, ULONG ulStrLen, HB_COMP_DECL );
|
||||
extern void hb_compCodeBlockStart( HB_COMP_DECL );
|
||||
extern void hb_compCodeBlockEnd( HB_COMP_DECL );
|
||||
|
||||
@@ -240,7 +240,15 @@ typedef enum
|
||||
HB_P_SEQALWAYS, /* 166 set BEGIN SEQUENCE/ALWAYS section */
|
||||
HB_P_ALWAYSBEGIN, /* 167 start ALWAYS section */
|
||||
HB_P_ALWAYSEND, /* 168 finish ALWAYS section */
|
||||
HB_P_LAST_PCODE /* 169 this defines the number of defined pcodes */
|
||||
HB_P_DECEQPOP, /* 169 decrements the var reference */
|
||||
HB_P_INCEQPOP, /* 170 increments the var reference */
|
||||
HB_P_DECEQ, /* 171 decrements the var reference, leave result on the stack */
|
||||
HB_P_INCEQ, /* 172 increments the var reference, leave result on the stack */
|
||||
HB_P_LOCALDEC, /* 173 decrements the local variable */
|
||||
HB_P_LOCALINC, /* 174 increments the local variable */
|
||||
HB_P_LOCALINCPUSH, /* 175 increments the local variable, push result on the stack */
|
||||
HB_P_PUSHFUNCSYM, /* 176 places a symbol on the virtual machine stack */
|
||||
HB_P_LAST_PCODE /* 177 this defines the number of defined pcodes */
|
||||
} HB_PCODE;
|
||||
|
||||
#endif /* HB_PCODE_H_ */
|
||||
|
||||
@@ -131,6 +131,9 @@ extern HB_EXPORT BOOL hb_xvmPopAlias( void ); /* select the
|
||||
extern HB_EXPORT BOOL hb_xvmPopLogical( BOOL * ); /* pops the stack latest value and returns its logical value */
|
||||
extern HB_EXPORT BOOL hb_xvmSwapAlias( void ); /* swaps items on the eval stack and pops the workarea number */
|
||||
extern HB_EXPORT BOOL hb_xvmLocalAddInt( int iLocal, LONG lAdd ); /* add integer to given local variable */
|
||||
extern HB_EXPORT BOOL hb_xvmLocalInc( int iLocal ); /* increment given local variable */
|
||||
extern HB_EXPORT BOOL hb_xvmLocalDec( int iLocal ); /* decrement given local variable */
|
||||
extern HB_EXPORT BOOL hb_xvmLocalIncPush( int iLocal ); /* increment given local variable and pussh it on HVM stack */
|
||||
|
||||
extern HB_EXPORT BOOL hb_xvmAnd( void );
|
||||
extern HB_EXPORT BOOL hb_xvmOr( void );
|
||||
@@ -170,7 +173,11 @@ extern HB_EXPORT BOOL hb_xvmPower( void );
|
||||
extern HB_EXPORT BOOL hb_xvmExpEq( void );
|
||||
extern HB_EXPORT BOOL hb_xvmExpEqPop( void );
|
||||
extern HB_EXPORT BOOL hb_xvmInc( void );
|
||||
extern HB_EXPORT BOOL hb_xvmIncEq( void );
|
||||
extern HB_EXPORT BOOL hb_xvmIncEqPop( void );
|
||||
extern HB_EXPORT BOOL hb_xvmDec( void );
|
||||
extern HB_EXPORT BOOL hb_xvmDecEq( void );
|
||||
extern HB_EXPORT BOOL hb_xvmDecEqPop( void );
|
||||
|
||||
extern HB_EXPORT void hb_xvmArrayDim( USHORT uiDimensions ); /* generates an uiDimensions Array and initialize those dimensions from the stack values */
|
||||
extern HB_EXPORT void hb_xvmArrayGen( ULONG ulElements ); /* generates an ulElements Array and fills it from the stack values */
|
||||
|
||||
@@ -93,7 +93,7 @@ HB_EXPORT LONG hb_dateEncode( int iYear, int iMonth, int iDay )
|
||||
{
|
||||
/* Month, year, and lower day limits are simple,
|
||||
but upper day limit is dependent upon month and leap year */
|
||||
static int auiDayLimit[ 12 ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||||
static const int auiDayLimit[ 12 ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||||
|
||||
if( iDay <= auiDayLimit[ iMonth - 1 ] ||
|
||||
( iDay == 29 && iMonth == 2 &&
|
||||
|
||||
@@ -1736,6 +1736,17 @@ static HB_GENC_FUNC( hb_p_pushsymnear )
|
||||
return 2;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_pushfuncsym )
|
||||
{
|
||||
fprintf( cargo->yyc, "\tHB_P_PUSHFUNCSYM, %i, %i,",
|
||||
pFunc->pCode[ lPCodePos + 1 ],
|
||||
pFunc->pCode[ lPCodePos + 2 ] );
|
||||
if( cargo->bVerbose )
|
||||
fprintf( cargo->yyc, "\t/* %s */", hb_compSymbolGetPos( cargo->HB_COMP_PARAM, HB_PCODE_MKUSHORT( &( pFunc->pCode[ lPCodePos + 1 ] ) ) )->szName );
|
||||
fprintf( cargo->yyc, "\n" );
|
||||
return 3;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_pushvariable )
|
||||
{
|
||||
fprintf( cargo->yyc, "\tHB_P_PUSHVARIABLE, %i, %i,",
|
||||
@@ -2076,6 +2087,51 @@ static HB_GENC_FUNC( hb_p_localaddint )
|
||||
return 5;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_localinc )
|
||||
{
|
||||
fprintf( cargo->yyc, "\tHB_P_LOCALINC, %i, %i,", pFunc->pCode[ lPCodePos + 1 ],
|
||||
pFunc->pCode[ lPCodePos + 2 ] );
|
||||
|
||||
if( cargo->bVerbose )
|
||||
{
|
||||
fprintf( cargo->yyc, "\t/* %s*/", hb_compLocalVariableFind( pFunc, HB_PCODE_MKSHORT( &pFunc->pCode[ lPCodePos + 1 ] ) )->szName );
|
||||
}
|
||||
|
||||
fprintf( cargo->yyc, "\n" );
|
||||
|
||||
return 3;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_localdec )
|
||||
{
|
||||
fprintf( cargo->yyc, "\tHB_P_LOCALDEC, %i, %i,", pFunc->pCode[ lPCodePos + 1 ],
|
||||
pFunc->pCode[ lPCodePos + 2 ] );
|
||||
|
||||
if( cargo->bVerbose )
|
||||
{
|
||||
fprintf( cargo->yyc, "\t/* %s*/", hb_compLocalVariableFind( pFunc, HB_PCODE_MKSHORT( &pFunc->pCode[ lPCodePos + 1 ] ) )->szName );
|
||||
}
|
||||
|
||||
fprintf( cargo->yyc, "\n" );
|
||||
|
||||
return 3;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_localincpush )
|
||||
{
|
||||
fprintf( cargo->yyc, "\tHB_P_LOCALINCPUSH, %i, %i,", pFunc->pCode[ lPCodePos + 1 ],
|
||||
pFunc->pCode[ lPCodePos + 2 ] );
|
||||
|
||||
if( cargo->bVerbose )
|
||||
{
|
||||
fprintf( cargo->yyc, "\t/* %s*/", hb_compLocalVariableFind( pFunc, HB_PCODE_MKSHORT( &pFunc->pCode[ lPCodePos + 1 ] ) )->szName );
|
||||
}
|
||||
|
||||
fprintf( cargo->yyc, "\n" );
|
||||
|
||||
return 3;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_pluseqpop )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pFunc );
|
||||
@@ -2130,6 +2186,24 @@ static HB_GENC_FUNC( hb_p_expeqpop )
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_inceqpop )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pFunc );
|
||||
HB_SYMBOL_UNUSED( lPCodePos );
|
||||
|
||||
fprintf( cargo->yyc, "\tHB_P_INCEQPOP,\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_deceqpop )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pFunc );
|
||||
HB_SYMBOL_UNUSED( lPCodePos );
|
||||
|
||||
fprintf( cargo->yyc, "\tHB_P_DECEQPOP,\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_pluseq )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pFunc );
|
||||
@@ -2184,6 +2258,24 @@ static HB_GENC_FUNC( hb_p_expeq )
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_inceq )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pFunc );
|
||||
HB_SYMBOL_UNUSED( lPCodePos );
|
||||
|
||||
fprintf( cargo->yyc, "\tHB_P_INCEQ,\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_deceq )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pFunc );
|
||||
HB_SYMBOL_UNUSED( lPCodePos );
|
||||
|
||||
fprintf( cargo->yyc, "\tHB_P_DECEQ,\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_withobjectstart )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pFunc );
|
||||
@@ -2430,7 +2522,15 @@ static HB_GENC_FUNC_PTR s_verbose_table[] = {
|
||||
hb_p_pushunref,
|
||||
hb_p_seqalways,
|
||||
hb_p_alwaysbegin,
|
||||
hb_p_alwaysend
|
||||
hb_p_alwaysend,
|
||||
hb_p_deceqpop,
|
||||
hb_p_inceqpop,
|
||||
hb_p_deceq,
|
||||
hb_p_inceq,
|
||||
hb_p_localdec,
|
||||
hb_p_localinc,
|
||||
hb_p_localincpush,
|
||||
hb_p_pushfuncsym
|
||||
};
|
||||
|
||||
static void hb_compGenCReadable( HB_COMP_DECL, PFUNCTION pFunc, FILE * yyc )
|
||||
|
||||
@@ -1324,6 +1324,15 @@ static HB_GENC_FUNC( hb_p_pushsymnear )
|
||||
return 2;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_pushfuncsym )
|
||||
{
|
||||
HB_GENC_LABEL();
|
||||
|
||||
fprintf( cargo->yyc, "\thb_xvmPushFuncSymbol( symbols + %hu );\n",
|
||||
HB_PCODE_MKUSHORT( &pFunc->pCode[ lPCodePos + 1 ] ) );
|
||||
return 3;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_pushvariable )
|
||||
{
|
||||
HB_GENC_LABEL();
|
||||
@@ -1636,6 +1645,44 @@ static HB_GENC_FUNC( hb_p_localaddint )
|
||||
return 5;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_localinc )
|
||||
{
|
||||
int iLocal = HB_PCODE_MKSHORT( &pFunc->pCode[ lPCodePos + 1 ] );
|
||||
HB_GENC_LABEL();
|
||||
|
||||
if( HB_GENC_GETLABEL( lPCodePos + 3 ) == 0 &&
|
||||
( ( pFunc->pCode[ lPCodePos + 3 ] == HB_P_PUSHLOCAL &&
|
||||
iLocal == HB_PCODE_MKSHORT( &pFunc->pCode[ lPCodePos + 4 ] ) ) ||
|
||||
( pFunc->pCode[ lPCodePos + 3 ] == HB_P_PUSHLOCALNEAR &&
|
||||
iLocal == pFunc->pCode[ lPCodePos + 4 ] ) ) )
|
||||
{
|
||||
fprintf( cargo->yyc, "\tif( hb_xvmLocalIncPush( %d ) ) break;\n", iLocal );
|
||||
return ( pFunc->pCode[ lPCodePos + 3 ] == HB_P_PUSHLOCAL ) ? 6 : 5;
|
||||
}
|
||||
|
||||
fprintf( cargo->yyc, "\tif( hb_xvmLocalInc( %d ) ) break;\n", iLocal );
|
||||
return 3;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_localdec )
|
||||
{
|
||||
HB_GENC_LABEL();
|
||||
|
||||
fprintf( cargo->yyc, "\tif( hb_xvmLocalDec( %d ) ) break;\n",
|
||||
HB_PCODE_MKSHORT( &pFunc->pCode[ lPCodePos + 1 ] ) );
|
||||
return 3;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_localincpush )
|
||||
{
|
||||
HB_GENC_LABEL();
|
||||
|
||||
fprintf( cargo->yyc, "\tif( hb_xvmLocalIncPush( %d ) ) break;\n",
|
||||
HB_PCODE_MKSHORT( &pFunc->pCode[ lPCodePos + 1 ] ) );
|
||||
|
||||
return 3;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_pluseqpop )
|
||||
{
|
||||
HB_GENC_LABEL();
|
||||
@@ -1684,6 +1731,22 @@ static HB_GENC_FUNC( hb_p_expeqpop )
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_deceqpop )
|
||||
{
|
||||
HB_GENC_LABEL();
|
||||
|
||||
fprintf( cargo->yyc, "\tif( hb_xvmDecEqPop() ) break;\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_inceqpop )
|
||||
{
|
||||
HB_GENC_LABEL();
|
||||
|
||||
fprintf( cargo->yyc, "\tif( hb_xvmIncEqPop() ) break;\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_pluseq )
|
||||
{
|
||||
HB_GENC_LABEL();
|
||||
@@ -1732,6 +1795,22 @@ static HB_GENC_FUNC( hb_p_expeq )
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_deceq )
|
||||
{
|
||||
HB_GENC_LABEL();
|
||||
|
||||
fprintf( cargo->yyc, "\tif( hb_xvmDecEq() ) break;\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_inceq )
|
||||
{
|
||||
HB_GENC_LABEL();
|
||||
|
||||
fprintf( cargo->yyc, "\tif( hb_xvmIncEq() ) break;\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HB_GENC_FUNC( hb_p_withobjectstart )
|
||||
{
|
||||
HB_GENC_LABEL();
|
||||
@@ -1977,7 +2056,15 @@ static HB_GENC_FUNC_PTR s_verbose_table[] = {
|
||||
hb_p_pushunref,
|
||||
hb_p_seqalways,
|
||||
hb_p_alwaysbegin,
|
||||
hb_p_alwaysend
|
||||
hb_p_alwaysend,
|
||||
hb_p_deceqpop,
|
||||
hb_p_inceqpop,
|
||||
hb_p_deceq,
|
||||
hb_p_inceq,
|
||||
hb_p_localdec,
|
||||
hb_p_localinc,
|
||||
hb_p_localincpush,
|
||||
hb_p_pushfuncsym
|
||||
};
|
||||
|
||||
void hb_compGenCRealCode( HB_COMP_DECL, PFUNCTION pFunc, FILE * yyc )
|
||||
|
||||
@@ -1938,9 +1938,9 @@ void hb_compFunctionAdd( HB_COMP_DECL, char * szFunName, HB_SYMBOLSCOPE cScope,
|
||||
hb_compGenPCode3( HB_P_SFRAME, 0, 0, HB_COMP_PARAM ); /* frame for statics variables */
|
||||
|
||||
if( HB_COMP_PARAM->fDebugInfo )
|
||||
{
|
||||
hb_compGenModuleName( HB_COMP_PARAM, szFunName );
|
||||
}
|
||||
else
|
||||
HB_COMP_PARAM->lastLine = -1;
|
||||
}
|
||||
|
||||
PINLINE hb_compInlineAdd( HB_COMP_DECL, char * szFunName, int iLine )
|
||||
@@ -3310,6 +3310,35 @@ void hb_compGenPushDouble( double dNumber, BYTE bWidth, BYTE bDec, HB_COMP_DECL
|
||||
}
|
||||
|
||||
void hb_compGenPushFunCall( char * szFunName, HB_COMP_DECL )
|
||||
{
|
||||
char * szFunction;
|
||||
PCOMSYMBOL pSym;
|
||||
USHORT wSym;
|
||||
|
||||
/* if abbreviated function name was used - change it for whole name */
|
||||
szFunction = hb_compReservedName( szFunName );
|
||||
if( szFunction )
|
||||
szFunName = szFunction;
|
||||
|
||||
if( ( pSym = hb_compSymbolFind( HB_COMP_PARAM, szFunName, &wSym, TRUE ) ) != NULL )
|
||||
{
|
||||
if( ! hb_compFunCallFind( HB_COMP_PARAM, szFunName ) )
|
||||
hb_compFunCallAdd( HB_COMP_PARAM, szFunName );
|
||||
}
|
||||
else
|
||||
{
|
||||
pSym = hb_compSymbolAdd( HB_COMP_PARAM, szFunName, &wSym, TRUE );
|
||||
if( pSym )
|
||||
{
|
||||
/* reset symbol scope because the real scope is unknown now */
|
||||
pSym->cScope = 0;
|
||||
}
|
||||
hb_compFunCallAdd( HB_COMP_PARAM, szFunName );
|
||||
}
|
||||
hb_compGenPCode3( HB_P_PUSHFUNCSYM, HB_LOBYTE( wSym ), HB_HIBYTE( wSym ), HB_COMP_PARAM );
|
||||
}
|
||||
|
||||
void hb_compGenPushFunSym( char * szFunName, HB_COMP_DECL )
|
||||
{
|
||||
char * szFunction;
|
||||
|
||||
|
||||
@@ -2140,8 +2140,7 @@ static void hb_compRTVariableGen( HB_COMP_DECL, char * szCreateFun )
|
||||
HB_RTVAR_PTR pDel;
|
||||
|
||||
/* generate the function call frame */
|
||||
hb_compGenPushSymbol( szCreateFun, TRUE, FALSE, HB_COMP_PARAM );
|
||||
hb_compGenPushNil( HB_COMP_PARAM );
|
||||
hb_compGenPushFunCall( szCreateFun, HB_COMP_PARAM );
|
||||
|
||||
/* push variable names to create */
|
||||
while( pVar->pNext )
|
||||
|
||||
@@ -7300,8 +7300,7 @@ static void hb_compRTVariableGen( HB_COMP_DECL, char * szCreateFun )
|
||||
HB_RTVAR_PTR pDel;
|
||||
|
||||
/* generate the function call frame */
|
||||
hb_compGenPushSymbol( szCreateFun, TRUE, FALSE, HB_COMP_PARAM );
|
||||
hb_compGenPushNil( HB_COMP_PARAM );
|
||||
hb_compGenPushFunCall( szCreateFun, HB_COMP_PARAM );
|
||||
|
||||
/* push variable names to create */
|
||||
while( pVar->pNext )
|
||||
|
||||
@@ -526,7 +526,15 @@ static PHB_CODETRACE_FUNC s_codeTraceFuncTable[ HB_P_LAST_PCODE ] =
|
||||
hb_p_default, /* HB_P_PUSHUNREF */
|
||||
hb_p_seqalways, /* HB_P_SEQALWAYS */
|
||||
hb_p_alwaysbegin, /* HB_P_ALWAYSBEGIN */
|
||||
hb_p_default /* HB_P_ALWAYSEND */
|
||||
hb_p_default, /* HB_P_ALWAYSEND */
|
||||
hb_p_default, /* HB_P_DECEQPOP */
|
||||
hb_p_default, /* HB_P_INCEQPOP */
|
||||
hb_p_default, /* HB_P_DECEQ */
|
||||
hb_p_default, /* HB_P_INCEQ */
|
||||
hb_p_default, /* HB_P_LOCALDEC */
|
||||
hb_p_default, /* HB_P_LOCALINC */
|
||||
hb_p_default, /* HB_P_LOCALINCPUSH */
|
||||
hb_p_default /* HB_P_PUSHFUNCSYM */
|
||||
};
|
||||
|
||||
void hb_compCodeTraceMarkDead( HB_COMP_DECL, PFUNCTION pFunc )
|
||||
|
||||
@@ -388,7 +388,15 @@ static HB_FIX_FUNC_PTR s_fixlocals_table[] =
|
||||
NULL, /* HB_P_PUSHUNREF */
|
||||
NULL, /* HB_P_SEQALWAYS */
|
||||
NULL, /* HB_P_ALWAYSBEGIN */
|
||||
NULL /* HB_P_ALWAYSEND */
|
||||
NULL, /* HB_P_ALWAYSEND */
|
||||
NULL, /* HB_P_DECEQPOP */
|
||||
NULL, /* HB_P_INCEQPOP */
|
||||
NULL, /* HB_P_DECEQ */
|
||||
NULL, /* HB_P_INCEQ */
|
||||
NULL, /* HB_P_LOCALDEC */
|
||||
NULL, /* HB_P_LOCALINC */
|
||||
NULL, /* HB_P_LOCALINCPUSH */
|
||||
NULL /* HB_P_PUSHFUNCSYM */
|
||||
};
|
||||
|
||||
void hb_compFixFuncPCode( HB_COMP_DECL, PFUNCTION pFunc )
|
||||
|
||||
@@ -362,7 +362,15 @@ static PHB_LABEL_FUNC s_GenLabelFuncTable[ HB_P_LAST_PCODE ] =
|
||||
NULL, /* HB_P_PUSHUNREF */
|
||||
hb_p_seqalways, /* HB_P_SEQALWAYS */
|
||||
hb_p_alwaysbegin, /* HB_P_ALWAYSBEGIN */
|
||||
NULL /* HB_P_ALWAYSEND */
|
||||
NULL, /* HB_P_ALWAYSEND */
|
||||
NULL, /* HB_P_DECEQPOP */
|
||||
NULL, /* HB_P_INCEQPOP */
|
||||
NULL, /* HB_P_DECEQ */
|
||||
NULL, /* HB_P_INCEQ */
|
||||
NULL, /* HB_P_LOCALDEC */
|
||||
NULL, /* HB_P_LOCALINC */
|
||||
NULL, /* HB_P_LOCALINCPUSH */
|
||||
NULL /* HB_P_PUSHFUNCSYM */
|
||||
};
|
||||
|
||||
void hb_compGenLabelTable( PFUNCTION pFunc, PHB_LABEL_INFO label_info )
|
||||
|
||||
@@ -711,7 +711,15 @@ static HB_OPT_FUNC_PTR s_opt_table[] =
|
||||
NULL, /* HB_P_PUSHUNREF */
|
||||
NULL, /* HB_P_SEQALWAYS */
|
||||
NULL, /* HB_P_ALWAYSBEGIN */
|
||||
NULL /* HB_P_ALWAYSEND */
|
||||
NULL, /* HB_P_ALWAYSEND */
|
||||
NULL, /* HB_P_DECEQPOP */
|
||||
NULL, /* HB_P_INCEQPOP */
|
||||
NULL, /* HB_P_DECEQ */
|
||||
NULL, /* HB_P_INCEQ */
|
||||
NULL, /* HB_P_LOCALDEC */
|
||||
NULL, /* HB_P_LOCALINC */
|
||||
NULL, /* HB_P_LOCALINCPUSH */
|
||||
NULL /* HB_P_PUSHFUNCSYM */
|
||||
};
|
||||
|
||||
void hb_compOptimizePCode( HB_COMP_DECL, PFUNCTION pFunc )
|
||||
|
||||
@@ -293,7 +293,15 @@ const BYTE hb_comp_pcode_len[] = {
|
||||
1, /* HB_P_PUSHUNREF */
|
||||
4, /* HB_P_SEQALWAYS */
|
||||
4, /* HB_P_ALWAYSBEGIN */
|
||||
1 /* HB_P_ALWAYSEND */
|
||||
1, /* HB_P_ALWAYSEND */
|
||||
1, /* HB_P_DECEQPOP */
|
||||
1, /* HB_P_INCEQPOP */
|
||||
1, /* HB_P_DECEQ */
|
||||
1, /* HB_P_INCEQ */
|
||||
3, /* HB_P_LOCALDEC */
|
||||
3, /* HB_P_LOCALINC */
|
||||
3, /* HB_P_LOCALINCPUSH */
|
||||
3 /* HB_P_PUSHFUNCSYM */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -473,7 +481,15 @@ static HB_PCODE_FUNC_PTR s_psize_table[] =
|
||||
NULL, /* HB_P_PUSHUNREF */
|
||||
NULL, /* HB_P_SEQALWAYS */
|
||||
NULL, /* HB_P_ALWAYSBEGIN */
|
||||
NULL /* HB_P_ALWAYSEND */
|
||||
NULL, /* HB_P_ALWAYSEND */
|
||||
NULL, /* HB_P_DECEQPOP */
|
||||
NULL, /* HB_P_INCEQPOP */
|
||||
NULL, /* HB_P_DECEQ */
|
||||
NULL, /* HB_P_INCEQ */
|
||||
NULL, /* HB_P_LOCALDEC */
|
||||
NULL, /* HB_P_LOCALINC */
|
||||
NULL, /* HB_P_LOCALINCPUSH */
|
||||
NULL /* HB_P_PUSHFUNCSYM */
|
||||
};
|
||||
|
||||
LONG hb_compPCodeSize( PFUNCTION pFunc, ULONG ulOffset )
|
||||
|
||||
@@ -247,7 +247,15 @@ static PHB_STRIP_FUNC s_stripLines_table[] =
|
||||
NULL, /* HB_P_PUSHUNREF */
|
||||
NULL, /* HB_P_SEQALWAYS */
|
||||
NULL, /* HB_P_ALWAYSBEGIN */
|
||||
NULL /* HB_P_ALWAYSEND */
|
||||
NULL, /* HB_P_ALWAYSEND */
|
||||
NULL, /* HB_P_DECEQPOP */
|
||||
NULL, /* HB_P_INCEQPOP */
|
||||
NULL, /* HB_P_DECEQ */
|
||||
NULL, /* HB_P_INCEQ */
|
||||
NULL, /* HB_P_LOCALDEC */
|
||||
NULL, /* HB_P_LOCALINC */
|
||||
NULL, /* HB_P_LOCALINCPUSH */
|
||||
NULL /* HB_P_PUSHFUNCSYM */
|
||||
};
|
||||
|
||||
void hb_compStripFuncLines( PFUNCTION pFunc )
|
||||
|
||||
@@ -103,6 +103,6 @@ HB_FUNC( ABS )
|
||||
}
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1089, NULL, "ABS", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1089, NULL, "ABS", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ HB_FUNC( AT )
|
||||
hb_itemGetCPtr( pText ), hb_itemGetCLen( pText ) ) );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1108, NULL, "AT", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1108, NULL, "AT", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
#else
|
||||
@@ -100,7 +100,7 @@ HB_FUNC( AT )
|
||||
}
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1108, NULL, "AT", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1108, NULL, "AT", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -61,36 +61,34 @@ HB_FUNC( CHR )
|
||||
{
|
||||
if( ISNUM( 1 ) )
|
||||
{
|
||||
char szChar[ 2 ];
|
||||
|
||||
/* NOTE: CA-Cl*pper's compiler optimizer will be wrong for those
|
||||
CHR() cases where the passed parameter is a constant which
|
||||
can be divided by 256 but it's not zero, in this case it
|
||||
will return an empty string instead of a Chr(0). [vszakats] */
|
||||
|
||||
/* Believe it or not, clipper does this! */
|
||||
#ifdef HB_C52_STRICT
|
||||
char szChar[ 2 ];
|
||||
szChar[ 0 ] = hb_parnl( 1 ) % 256;
|
||||
szChar[ 1 ] = '\0';
|
||||
|
||||
hb_retclen( szChar, 1 );
|
||||
#else
|
||||
hb_retclen( hb_szAscii[ hb_parni( 1 ) & 0xff ], 1 );
|
||||
#endif
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1104, NULL, "CHR", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1104, NULL, "CHR", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
/* converts a character value to an ASCII code */
|
||||
HB_FUNC( ASC )
|
||||
{
|
||||
PHB_ITEM pText = hb_param( 1, HB_IT_STRING );
|
||||
char * szValue = hb_parc( 1 );
|
||||
|
||||
if( pText )
|
||||
if( szValue )
|
||||
{
|
||||
if( hb_itemGetCLen( pText ) > 0 )
|
||||
hb_retni( ( BYTE ) * ( hb_itemGetCPtr( pText ) ) );
|
||||
else
|
||||
hb_retni( 0 );
|
||||
hb_retni( ( UCHAR ) szValue[ 0 ] );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1107, NULL, "ASC", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1107, NULL, "ASC", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@ HB_FUNC( CMONTH )
|
||||
hb_retc( hb_dateCMonth( iMonth ) );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1116, NULL, "CMONTH", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1116, NULL, "CMONTH", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
HB_FUNC( CDOW )
|
||||
@@ -104,6 +104,6 @@ HB_FUNC( CDOW )
|
||||
hb_retc( NULL );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1117, NULL, "CDOW", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1117, NULL, "CDOW", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
|
||||
@@ -172,7 +172,7 @@ HB_FUNC( CTOD )
|
||||
hb_retd( y_value, m_value, d_value );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1119, NULL, "CTOD", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1119, NULL, "CTOD", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
HB_FUNC( DTOC )
|
||||
@@ -185,7 +185,7 @@ HB_FUNC( DTOC )
|
||||
hb_retc( hb_dateFormat( hb_pardsbuff( szDate, 1 ), szFormatted, hb_set.HB_SET_DATEFORMAT ) );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1118, NULL, "DTOC", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1118, NULL, "DTOC", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
HB_FUNC( DTOS )
|
||||
@@ -197,7 +197,7 @@ HB_FUNC( DTOS )
|
||||
hb_retc( hb_pardsbuff( szDate, 1 ) );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1120, NULL, "DTOS", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1120, NULL, "DTOS", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
/* NOTE: Harbour extension, exactly the same as STOD(). */
|
||||
@@ -224,7 +224,7 @@ HB_FUNC( YEAR )
|
||||
hb_retnllen( iYear, 5 );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1112, NULL, "YEAR", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1112, NULL, "YEAR", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
HB_FUNC( MONTH )
|
||||
@@ -240,7 +240,7 @@ HB_FUNC( MONTH )
|
||||
hb_retnilen( iMonth, 3 );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1113, NULL, "MONTH", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1113, NULL, "MONTH", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
HB_FUNC( DAY )
|
||||
@@ -256,7 +256,7 @@ HB_FUNC( DAY )
|
||||
hb_retnilen( iDay, 3 );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1114, NULL, "DAY", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1114, NULL, "DAY", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
HB_FUNC( TIME )
|
||||
@@ -282,5 +282,5 @@ HB_FUNC( DOW )
|
||||
hb_retnilen( hb_dateJulianDOW( hb_itemGetDL( pDate ) ), 3 );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1115, NULL, "DOW", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1115, NULL, "DOW", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
@@ -230,7 +230,7 @@ HB_FUNC( DISKSPACE )
|
||||
#endif
|
||||
|
||||
if( bError )
|
||||
hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, EF_CANDEFAULT, 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
|
||||
|
||||
hb_retnlen( dSpace, -1, 0 );
|
||||
}
|
||||
|
||||
@@ -126,7 +126,7 @@ HB_FUNC( HB_DISKSPACE )
|
||||
}
|
||||
else
|
||||
{
|
||||
if( hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, ( EF_CANDEFAULT | EF_CANRETRY ), 2, hb_paramError( 1 ), hb_paramError( 2 ) ) == E_RETRY )
|
||||
if( hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, ( EF_CANDEFAULT | EF_CANRETRY ), HB_ERR_ARGS_BASEPARAMS ) == E_RETRY )
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
@@ -277,7 +277,7 @@ HB_FUNC( HB_DISKSPACE )
|
||||
/* Query level 1 info from filesystem */
|
||||
while( ( rc = DosQueryFSInfo( uiDrive, 1, &fsa, sizeof( fsa ) ) ) != 0 )
|
||||
{
|
||||
if( hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, (EF_CANDEFAULT | EF_CANRETRY), 2, hb_paramError( 1 ), hb_paramError( 2 ) ) != E_RETRY )
|
||||
if( hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, (EF_CANDEFAULT | EF_CANRETRY), HB_ERR_ARGS_BASEPARAMS ) != E_RETRY )
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ HB_FUNC( HB_SETTERMCP )
|
||||
}
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1089, NULL, "HB_SETTERMCP", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1089, NULL, "HB_SETTERMCP", HB_ERR_ARGS_BASEPARAMS );
|
||||
|
||||
hb_ret(); /* return NIL */
|
||||
}
|
||||
|
||||
@@ -75,6 +75,6 @@ HB_FUNC( LEFT )
|
||||
}
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1124, NULL, "LEFT", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1124, NULL, "LEFT", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
|
||||
@@ -76,5 +76,5 @@ HB_FUNC( LEN )
|
||||
}
|
||||
}
|
||||
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1111, NULL, "LEN", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1111, NULL, "LEN", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
@@ -661,7 +661,7 @@ HB_FUNC( EXP )
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1096, NULL, "EXP", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1096, NULL, "EXP", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -714,7 +714,7 @@ HB_FUNC( LOG )
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1095, NULL, "LOG", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1095, NULL, "LOG", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -755,6 +755,6 @@ HB_FUNC( SQRT )
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1097, NULL, "SQRT", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1097, NULL, "SQRT", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ HB_FUNC( MAX )
|
||||
return;
|
||||
}
|
||||
}
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1093, NULL, "MAX", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1093, NULL, "MAX", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
/* returns the minimum of two date or numerics */
|
||||
@@ -156,6 +156,6 @@ HB_FUNC( MIN )
|
||||
}
|
||||
}
|
||||
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1092, NULL, "MIN", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1092, NULL, "MIN", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ HB_FUNC( MOD )
|
||||
}
|
||||
else
|
||||
{
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ZERODIV, 1341, NULL, "%", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ZERODIV, 1341, NULL, "%", HB_ERR_ARGS_BASEPARAMS );
|
||||
|
||||
if( pResult )
|
||||
{
|
||||
@@ -99,7 +99,7 @@ HB_FUNC( MOD )
|
||||
}
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1085, NULL, "%", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1085, NULL, "%", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -62,7 +62,7 @@ HB_FUNC( FOPEN )
|
||||
hb_retni( hb_fsOpen( ( BYTE * ) hb_parc( 1 ),
|
||||
ISNUM( 2 ) ? hb_parni( 2 ) : FO_READ | FO_COMPAT ) );
|
||||
else
|
||||
hb_errRT_BASE( EG_ARG, 2021, NULL, "FOPEN", 2, hb_paramError( 1 ), hb_paramError( 2 ) ); /* NOTE: Undocumented but existing Clipper Run-time error */
|
||||
hb_errRT_BASE( EG_ARG, 2021, NULL, "FOPEN", HB_ERR_ARGS_BASEPARAMS ); /* NOTE: Undocumented but existing Clipper Run-time error */
|
||||
}
|
||||
|
||||
HB_FUNC( FCREATE )
|
||||
|
||||
@@ -72,7 +72,7 @@ HB_FUNC( CURDRIVE )
|
||||
{
|
||||
while( hb_fsChDrv( ( BYTE )( toupper( *hb_parc( 1 ) ) - 'A' ) ) != 0 )
|
||||
{
|
||||
USHORT uiAction = hb_errRT_BASE_Ext1( EG_OPEN, 9999, "Operating system error", "CURDRIVE", 0, EF_CANDEFAULT | EF_CANRETRY, 1, hb_paramError( 1 ) );
|
||||
USHORT uiAction = hb_errRT_BASE_Ext1( EG_OPEN, 9999, "Operating system error", "CURDRIVE", 0, EF_CANDEFAULT | EF_CANRETRY, HB_ERR_ARGS_BASEPARAMS );
|
||||
|
||||
if( uiAction != E_RETRY )
|
||||
break;
|
||||
|
||||
@@ -82,12 +82,12 @@ HB_FUNC( REPLICATE )
|
||||
hb_retclen_buffer( szResult, ulLen * lTimes );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_STROVERFLOW, 1234, NULL, "REPLICATE", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE_SubstR( EG_STROVERFLOW, 1234, NULL, "REPLICATE", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
else
|
||||
hb_retc( NULL );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1106, NULL, "REPLICATE", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1106, NULL, "REPLICATE", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@ HB_FUNC( INT )
|
||||
}
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1090, NULL, "INT", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1090, NULL, "INT", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
HB_FUNC( ROUND )
|
||||
@@ -104,5 +104,5 @@ HB_FUNC( ROUND )
|
||||
hb_retnlen( hb_numRound( hb_itemGetND( pNumber ), iDec ), 0, HB_MAX( iDec, 0 ) );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1094, NULL, "ROUND", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1094, NULL, "ROUND", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
@@ -460,7 +460,7 @@ HB_FUNC( SET )
|
||||
if( args > 1 )
|
||||
{
|
||||
if( set_number( pArg2, hb_set.HB_SET_AUTORDER ) < 0 )
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
else
|
||||
hb_set.HB_SET_AUTORDER = set_number( pArg2, hb_set.HB_SET_AUTORDER );
|
||||
}
|
||||
@@ -470,7 +470,7 @@ HB_FUNC( SET )
|
||||
if( args > 1 )
|
||||
{
|
||||
if( set_number( pArg2, hb_set.HB_SET_AUTOSHARE ) < 0 )
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
else
|
||||
hb_set.HB_SET_MARGIN = set_number( pArg2, hb_set.HB_SET_AUTOSHARE );
|
||||
}
|
||||
@@ -542,7 +542,7 @@ HB_FUNC( SET )
|
||||
if( args > 1 )
|
||||
{
|
||||
if( set_number( pArg2, hb_set.HB_SET_DECIMALS ) < 0 )
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
else
|
||||
hb_set.HB_SET_DECIMALS = set_number( pArg2, hb_set.HB_SET_DECIMALS );
|
||||
}
|
||||
@@ -586,7 +586,7 @@ HB_FUNC( SET )
|
||||
if( args > 1 )
|
||||
{
|
||||
if( set_number( pArg2, hb_set.HB_SET_EPOCH ) < 0 )
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
else
|
||||
hb_set.HB_SET_EPOCH = set_number( pArg2, hb_set.HB_SET_EPOCH );
|
||||
}
|
||||
@@ -662,7 +662,7 @@ HB_FUNC( SET )
|
||||
if( args > 1 )
|
||||
{
|
||||
if( set_number( pArg2, hb_set.HB_SET_MARGIN ) < 0 )
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
else
|
||||
hb_set.HB_SET_MARGIN = set_number( pArg2, hb_set.HB_SET_MARGIN );
|
||||
}
|
||||
@@ -672,7 +672,7 @@ HB_FUNC( SET )
|
||||
if( args > 1 )
|
||||
{
|
||||
if( set_number( pArg2, hb_set.HB_SET_MBLOCKSIZE ) < 0 )
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
else
|
||||
hb_set.HB_SET_MBLOCKSIZE = set_number( pArg2, hb_set.HB_SET_MBLOCKSIZE );
|
||||
}
|
||||
@@ -686,7 +686,7 @@ HB_FUNC( SET )
|
||||
if( args > 1 )
|
||||
{
|
||||
if( set_number( pArg2, hb_set.HB_SET_MESSAGE ) < 0 )
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
else
|
||||
hb_set.HB_SET_MESSAGE = set_number( pArg2, hb_set.HB_SET_MESSAGE );
|
||||
}
|
||||
@@ -774,7 +774,7 @@ HB_FUNC( SET )
|
||||
if( args > 1 )
|
||||
{
|
||||
if( set_number( pArg2, hb_set.HB_SET_VIDEOMODE ) < 0 )
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
else
|
||||
hb_set.HB_SET_VIDEOMODE = set_number( pArg2, hb_set.HB_SET_VIDEOMODE );
|
||||
}
|
||||
@@ -807,17 +807,17 @@ HB_FUNC( SET )
|
||||
else if( ! hb_stricmp( hb_itemGetCPtr( pArg2 ), "MIXED" ) )
|
||||
hb_set.HB_SET_FILECASE = HB_SET_CASE_MIXED;
|
||||
else
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pArg2 ) )
|
||||
{
|
||||
if( set_number( pArg2, hb_set.HB_SET_FILECASE ) < 0 )
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
else
|
||||
hb_set.HB_SET_FILECASE = set_number( pArg2, hb_set.HB_SET_FILECASE );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
/*
|
||||
if( hb_set.HB_SET_FILECASE )
|
||||
@@ -841,17 +841,17 @@ HB_FUNC( SET )
|
||||
else if( ! hb_stricmp( hb_itemGetCPtr( pArg2 ), "MIXED" ) )
|
||||
hb_set.HB_SET_DIRCASE = HB_SET_CASE_MIXED;
|
||||
else
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pArg2 ) )
|
||||
{
|
||||
if( set_number( pArg2, hb_set.HB_SET_DIRCASE ) < 0 )
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
else
|
||||
hb_set.HB_SET_DIRCASE = set_number( pArg2, hb_set.HB_SET_DIRCASE );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
break;
|
||||
case HB_SET_DIRSEPARATOR :
|
||||
@@ -869,7 +869,7 @@ HB_FUNC( SET )
|
||||
{
|
||||
if( set_number( pArg2, hb_set.HB_SET_DBFLOCKSCHEME ) < 0 )
|
||||
{
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE( EG_ARG, 2020, NULL, "SET", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -80,5 +80,5 @@ HB_FUNC( SPACE )
|
||||
hb_retc( NULL );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1105, NULL, "SPACE", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1105, NULL, "SPACE", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ HB_FUNC( LOWER )
|
||||
hb_retclen_buffer( hb_strLower( pszBuffer, ulLen ), ulLen );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1103, NULL, "LOWER", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1103, NULL, "LOWER", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
/* converts string to upper case */
|
||||
@@ -138,5 +138,5 @@ HB_FUNC( UPPER )
|
||||
hb_retclen_buffer( hb_strUpper( pszBuffer, ulLen ), ulLen );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1102, NULL, "UPPER", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1102, NULL, "UPPER", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ HB_FUNC( STRPEEK )
|
||||
hb_retni( 0 );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1099, NULL, "STRPEEK", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1099, NULL, "STRPEEK", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ HB_FUNC( STRPOKE )
|
||||
hb_itemReturn( pText );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1099, NULL, "STRPOKE", 3, hb_paramError( 1 ), hb_paramError( 2 ), hb_paramError( 3 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1099, NULL, "STRPOKE", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
#endif /* HB_COMPAT_FLAGSHIP */
|
||||
|
||||
@@ -852,5 +852,5 @@ HB_FUNC( TRANSFORM )
|
||||
/* If there was any parameter error, launch a runtime error */
|
||||
|
||||
if( bError )
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1122, NULL, "TRANSFORM", 2, pValue, hb_paramError( 2 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1122, NULL, "TRANSFORM", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ HB_FUNC( LTRIM )
|
||||
hb_retclen( szText, ulLen );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1101, NULL, "LTRIM", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1101, NULL, "LTRIM", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
/* trims trailing spaces from a string */
|
||||
@@ -126,7 +126,7 @@ HB_FUNC( RTRIM )
|
||||
}
|
||||
else
|
||||
/* NOTE: "TRIM" is right here [vszakats] */
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1100, NULL, "TRIM", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1100, NULL, "TRIM", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
/* synonymn for RTRIM */
|
||||
@@ -154,7 +154,7 @@ HB_FUNC( ALLTRIM )
|
||||
}
|
||||
else
|
||||
#ifdef HB_COMPAT_C53
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 2022, NULL, "ALLTRIM", 1, hb_paramError( 1 ) ); /* NOTE: This appeared in CA-Cl*pper 5.3 [vszakats] */
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 2022, NULL, "ALLTRIM", HB_ERR_ARGS_BASEPARAMS ); /* NOTE: This appeared in CA-Cl*pper 5.3 [vszakats] */
|
||||
#else
|
||||
hb_retc( NULL );
|
||||
#endif
|
||||
|
||||
@@ -63,6 +63,6 @@ HB_FUNC( TYPE )
|
||||
hb_memvarUpdatePrivatesBase();
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1121, NULL, "TYPE", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1121, NULL, "TYPE", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
|
||||
@@ -75,5 +75,5 @@ HB_FUNC( VAL )
|
||||
hb_retnlen( dValue, iWidth, iDec );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1098, NULL, "VAL", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1098, NULL, "VAL", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
@@ -62,5 +62,5 @@ HB_FUNC( WORD )
|
||||
if( ISNUM( 1 ) )
|
||||
hb_retni( hb_parni( 1 ) );
|
||||
else
|
||||
hb_errRT_BASE( EG_ARG, 1091, NULL, "WORD", 1, hb_paramError( 1 ) );
|
||||
hb_errRT_BASE( EG_ARG, 1091, NULL, "WORD", HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
@@ -102,8 +102,8 @@ HB_FUNC_EXTERN( SYSINIT );
|
||||
|
||||
/* Operators (mathematical / character / misc) */
|
||||
static void hb_vmNegate( void ); /* negates (-) the latest value on the stack */
|
||||
static void hb_vmInc( void ); /* increment the latest numeric value on the stack */
|
||||
static void hb_vmDec( void ); /* decrements the latest numeric value on the stack */
|
||||
static void hb_vmInc( HB_ITEM_PTR pItem ); /* increment the latest numeric value on the stack */
|
||||
static void hb_vmDec( HB_ITEM_PTR pItem ); /* decrements the latest numeric value on the stack */
|
||||
static void hb_vmFuncPtr( void ); /* pushes a function address pointer. Removes the symbol from the satck */
|
||||
static void hb_vmAddInt( HB_ITEM_PTR pResult, LONG lAdd ); /* add integer to given item */
|
||||
static void hb_vmPlus( HB_ITEM_PTR pResult, HB_ITEM_PTR pItem1, HB_ITEM_PTR pItem2 ); /* sums given values */
|
||||
@@ -200,8 +200,6 @@ static void hb_vmSwap( BYTE bCount ); /* swap bCount+1 time two items
|
||||
|
||||
/* Pop */
|
||||
static BOOL hb_vmPopLogical( void ); /* pops the stack latest value and returns its logical value */
|
||||
static long hb_vmPopDate( void ); /* pops the stack latest value and returns its date value as a long */
|
||||
static HB_LONG hb_vmPopHBLong( void ); /* pops the stack latest value and returns its HB_LONG value */
|
||||
static double hb_vmPopNumber( void ); /* pops the stack latest value and returns its numeric value */
|
||||
static void hb_vmPopAlias( void ); /* pops the workarea number form the eval stack */
|
||||
static void hb_vmPopAliasedField( PHB_SYMB ); /* pops an aliased field from the eval stack*/
|
||||
@@ -814,12 +812,52 @@ HB_EXPORT void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
break;
|
||||
|
||||
case HB_P_INC:
|
||||
hb_vmInc();
|
||||
hb_vmInc( hb_stackItemFromTop( -1 ) );
|
||||
w++;
|
||||
break;
|
||||
|
||||
case HB_P_INCEQ:
|
||||
{
|
||||
HB_ITEM_PTR pResult, pValue, pTemp;
|
||||
pResult = hb_stackItemFromTop( -1 );
|
||||
pValue = hb_itemUnRef( pResult );
|
||||
hb_vmInc( pValue );
|
||||
pTemp = hb_stackAllocItem();
|
||||
hb_itemCopy( pTemp, pValue );
|
||||
hb_itemMove( pResult, pTemp );
|
||||
hb_stackDec();
|
||||
w++;
|
||||
}
|
||||
break;
|
||||
|
||||
case HB_P_INCEQPOP:
|
||||
hb_vmInc( hb_itemUnRef( hb_stackItemFromTop( -1 ) ) );
|
||||
hb_stackPop();
|
||||
w++;
|
||||
break;
|
||||
|
||||
case HB_P_DEC:
|
||||
hb_vmDec();
|
||||
hb_vmDec( hb_stackItemFromTop( -1 ) );
|
||||
w++;
|
||||
break;
|
||||
|
||||
case HB_P_DECEQ:
|
||||
{
|
||||
HB_ITEM_PTR pResult, pValue, pTemp;
|
||||
pResult = hb_stackItemFromTop( -1 );
|
||||
pValue = hb_itemUnRef( pResult );
|
||||
hb_vmDec( pValue );
|
||||
pTemp = hb_stackAllocItem();
|
||||
hb_itemCopy( pTemp, pValue );
|
||||
hb_itemMove( pResult, pTemp );
|
||||
hb_stackDec();
|
||||
w++;
|
||||
}
|
||||
break;
|
||||
|
||||
case HB_P_DECEQPOP:
|
||||
hb_vmDec( hb_itemUnRef( hb_stackItemFromTop( -1 ) ) );
|
||||
hb_stackPop();
|
||||
w++;
|
||||
break;
|
||||
|
||||
@@ -1529,6 +1567,12 @@ HB_EXPORT void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
w += 2;
|
||||
break;
|
||||
|
||||
case HB_P_PUSHFUNCSYM:
|
||||
hb_vmPushSymbol( pSymbols + HB_PCODE_MKUSHORT( &( pCode[ w + 1 ] ) ) );
|
||||
hb_stackAllocItem()->type = HB_IT_NIL;
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
case HB_P_PUSHALIAS:
|
||||
hb_vmPushAlias();
|
||||
w++;
|
||||
@@ -2010,7 +2054,7 @@ HB_EXPORT void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
|
||||
case HB_P_LOCALADDINT:
|
||||
{
|
||||
int iLocal = HB_PCODE_MKSHORT( &pCode[ w + 1 ] );
|
||||
int iLocal = HB_PCODE_MKUSHORT( &pCode[ w + 1 ] );
|
||||
HB_TRACE( HB_TR_DEBUG, ("HB_P_LOCALADDINT") );
|
||||
|
||||
hb_vmAddInt( hb_stackLocalVariable( &iLocal ),
|
||||
@@ -2019,8 +2063,38 @@ HB_EXPORT void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols )
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_LOCALINC:
|
||||
{
|
||||
int iLocal = HB_PCODE_MKUSHORT( &pCode[ w + 1 ] );
|
||||
PHB_ITEM pLocal = hb_stackLocalVariable( &iLocal );
|
||||
hb_vmInc( HB_IS_BYREF( pLocal ) ? hb_itemUnRef( pLocal ) : pLocal );
|
||||
w += 3;
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_LOCALDEC:
|
||||
{
|
||||
int iLocal = HB_PCODE_MKUSHORT( &pCode[ w + 1 ] );
|
||||
PHB_ITEM pLocal = hb_stackLocalVariable( &iLocal );
|
||||
hb_vmDec( HB_IS_BYREF( pLocal ) ? hb_itemUnRef( pLocal ) : pLocal );
|
||||
w += 3;
|
||||
break;
|
||||
}
|
||||
|
||||
case HB_P_LOCALINCPUSH:
|
||||
{
|
||||
int iLocal = HB_PCODE_MKUSHORT( &pCode[ w + 1 ] );
|
||||
PHB_ITEM pLocal = hb_stackLocalVariable( &iLocal );
|
||||
if( HB_IS_BYREF( pLocal ) )
|
||||
pLocal = hb_itemUnRef( pLocal );
|
||||
hb_vmInc( pLocal );
|
||||
hb_itemCopy( hb_stackAllocItem(), pLocal );
|
||||
w += 3;
|
||||
break;
|
||||
}
|
||||
|
||||
/* WITH OBJECT */
|
||||
|
||||
|
||||
case HB_P_WITHOBJECTMESSAGE:
|
||||
{
|
||||
USHORT wSymPos = HB_PCODE_MKUSHORT( &( pCode[ w + 1 ] ) );
|
||||
@@ -2212,29 +2286,11 @@ static void hb_vmAddInt( HB_ITEM_PTR pResult, LONG lAdd )
|
||||
{
|
||||
PHB_ITEM pSubst;
|
||||
|
||||
if( lAdd == 1 )
|
||||
{
|
||||
pSubst = hb_errRT_BASE_Subst( EG_ARG, 1086, NULL, "++", 1, pResult );
|
||||
}
|
||||
else if( lAdd == -1 )
|
||||
{
|
||||
pSubst = hb_errRT_BASE_Subst( EG_ARG, 1087, NULL, "--", 1, pResult );
|
||||
}
|
||||
else if( lAdd > 0 )
|
||||
{
|
||||
hb_vmPushLong( lAdd );
|
||||
pSubst = hb_errRT_BASE_Subst( EG_ARG, 1081, NULL, "+", 2, pResult, hb_stackItemFromTop( -1 ) );
|
||||
hb_stackPop();
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_vmPushLong( -lAdd );
|
||||
pSubst = hb_errRT_BASE_Subst( EG_ARG, 1082, NULL, "-", 2, pResult, hb_stackItemFromTop( -1 ) );
|
||||
hb_stackPop();
|
||||
}
|
||||
|
||||
hb_vmPushLong( lAdd );
|
||||
pSubst = hb_errRT_BASE_Subst( EG_ARG, 1081, NULL, "+", 2, pResult, hb_stackItemFromTop( -1 ) );
|
||||
if( pSubst )
|
||||
{
|
||||
hb_stackPop();
|
||||
hb_itemMove( pResult, pSubst );
|
||||
hb_itemRelease( pSubst );
|
||||
}
|
||||
@@ -2656,13 +2712,9 @@ static void hb_vmPower( HB_ITEM_PTR pResult, HB_ITEM_PTR pItem1, HB_ITEM_PTR pIt
|
||||
}
|
||||
}
|
||||
|
||||
static void hb_vmInc( void )
|
||||
static void hb_vmInc( PHB_ITEM pItem )
|
||||
{
|
||||
PHB_ITEM pItem;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_vmInc()"));
|
||||
|
||||
pItem = hb_stackItemFromTop( -1 );
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_vmInc(%p)", pItem));
|
||||
|
||||
if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
@@ -2721,13 +2773,9 @@ static void hb_vmInc( void )
|
||||
}
|
||||
}
|
||||
|
||||
static void hb_vmDec( void )
|
||||
static void hb_vmDec( PHB_ITEM pItem )
|
||||
{
|
||||
PHB_ITEM pItem;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_vmDec()"));
|
||||
|
||||
pItem = hb_stackItemFromTop( -1 );
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_vmDec(%p)", pItem));
|
||||
|
||||
if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
@@ -2844,11 +2892,21 @@ static void hb_vmExactlyEqual( void )
|
||||
hb_vmPushLogical( fResult );
|
||||
}
|
||||
else if( HB_IS_NUMINT( pItem1 ) && HB_IS_NUMINT( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopHBLong() == hb_vmPopHBLong() );
|
||||
{
|
||||
pItem1->item.asLogical.value = ( HB_ITEM_GET_NUMINTRAW( pItem1 ) ==
|
||||
HB_ITEM_GET_NUMINTRAW( pItem2 ) );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem1 ) && HB_IS_NUMERIC( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopNumber() == hb_vmPopNumber() );
|
||||
else if( HB_IS_DATE( pItem1 ) && HB_IS_DATE( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopDate() == hb_vmPopDate() );
|
||||
{
|
||||
pItem1->item.asLogical.value = ( pItem1->item.asDate.value ==
|
||||
pItem2->item.asDate.value );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_LOGICAL( pItem1 ) && HB_IS_LOGICAL( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopLogical() == hb_vmPopLogical() );
|
||||
else if( HB_IS_POINTER( pItem1 ) && HB_IS_POINTER( pItem2 ) )
|
||||
@@ -2913,11 +2971,21 @@ static void hb_vmEqual( void )
|
||||
hb_vmPushLogical( fResult );
|
||||
}
|
||||
else if( HB_IS_NUMINT( pItem1 ) && HB_IS_NUMINT( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopHBLong() == hb_vmPopHBLong() );
|
||||
{
|
||||
pItem1->item.asLogical.value = ( HB_ITEM_GET_NUMINTRAW( pItem1 ) ==
|
||||
HB_ITEM_GET_NUMINTRAW( pItem2 ) );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem1 ) && HB_IS_NUMERIC( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopNumber() == hb_vmPopNumber() );
|
||||
else if( HB_IS_DATE( pItem1 ) && HB_IS_DATE( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopDate() == hb_vmPopDate() );
|
||||
{
|
||||
pItem1->item.asLogical.value = ( pItem1->item.asDate.value ==
|
||||
pItem2->item.asDate.value );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_LOGICAL( pItem1 ) && HB_IS_LOGICAL( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopLogical() == hb_vmPopLogical() );
|
||||
else if( HB_IS_POINTER( pItem1 ) && HB_IS_POINTER( pItem2 ) )
|
||||
@@ -2973,11 +3041,21 @@ static void hb_vmNotEqual( void )
|
||||
hb_vmPushLogical( i != 0 );
|
||||
}
|
||||
else if( HB_IS_NUMINT( pItem1 ) && HB_IS_NUMINT( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopHBLong() != hb_vmPopHBLong() );
|
||||
{
|
||||
pItem1->item.asLogical.value = ( HB_ITEM_GET_NUMINTRAW( pItem1 ) !=
|
||||
HB_ITEM_GET_NUMINTRAW( pItem2 ) );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem1 ) && HB_IS_NUMERIC( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopNumber() != hb_vmPopNumber() );
|
||||
else if( HB_IS_DATE( pItem1 ) && HB_IS_DATE( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopDate() != hb_vmPopDate() );
|
||||
{
|
||||
pItem1->item.asLogical.value = ( pItem1->item.asDate.value !=
|
||||
pItem2->item.asDate.value );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_LOGICAL( pItem1 ) && HB_IS_LOGICAL( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopLogical() != hb_vmPopLogical() );
|
||||
else if( HB_IS_POINTER( pItem1 ) && HB_IS_POINTER( pItem2 ) )
|
||||
@@ -3022,9 +3100,10 @@ static void hb_vmLess( void )
|
||||
}
|
||||
else if( HB_IS_NUMINT( pItem1 ) && HB_IS_NUMINT( pItem2 ) )
|
||||
{
|
||||
HB_LONG lNumber2 = hb_vmPopHBLong();
|
||||
HB_LONG lNumber1 = hb_vmPopHBLong();
|
||||
hb_vmPushLogical( lNumber1 < lNumber2 );
|
||||
pItem1->item.asLogical.value = ( HB_ITEM_GET_NUMINTRAW( pItem1 ) <
|
||||
HB_ITEM_GET_NUMINTRAW( pItem2 ) );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem1 ) && HB_IS_NUMERIC( pItem2 ) )
|
||||
{
|
||||
@@ -3034,9 +3113,10 @@ static void hb_vmLess( void )
|
||||
}
|
||||
else if( HB_IS_DATE( pItem1 ) && HB_IS_DATE( pItem2 ) )
|
||||
{
|
||||
long lDate2 = hb_vmPopDate();
|
||||
long lDate1 = hb_vmPopDate();
|
||||
hb_vmPushLogical( lDate1 < lDate2 );
|
||||
pItem1->item.asLogical.value = ( pItem1->item.asDate.value <
|
||||
pItem2->item.asDate.value );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_LOGICAL( pItem1 ) && HB_IS_LOGICAL( pItem2 ) )
|
||||
{
|
||||
@@ -3079,9 +3159,10 @@ static void hb_vmLessEqual( void )
|
||||
}
|
||||
else if( HB_IS_NUMINT( pItem1 ) && HB_IS_NUMINT( pItem2 ) )
|
||||
{
|
||||
HB_LONG lNumber2 = hb_vmPopHBLong();
|
||||
HB_LONG lNumber1 = hb_vmPopHBLong();
|
||||
hb_vmPushLogical( lNumber1 <= lNumber2 );
|
||||
pItem1->item.asLogical.value = ( HB_ITEM_GET_NUMINTRAW( pItem1 ) <=
|
||||
HB_ITEM_GET_NUMINTRAW( pItem2 ) );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem1 ) && HB_IS_NUMERIC( pItem2 ) )
|
||||
{
|
||||
@@ -3091,9 +3172,10 @@ static void hb_vmLessEqual( void )
|
||||
}
|
||||
else if( HB_IS_DATE( pItem1 ) && HB_IS_DATE( pItem2 ) )
|
||||
{
|
||||
long lDate2 = hb_vmPopDate();
|
||||
long lDate1 = hb_vmPopDate();
|
||||
hb_vmPushLogical( lDate1 <= lDate2 );
|
||||
pItem1->item.asLogical.value = ( pItem1->item.asDate.value <=
|
||||
pItem2->item.asDate.value );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_LOGICAL( pItem1 ) && HB_IS_LOGICAL( pItem2 ) )
|
||||
{
|
||||
@@ -3136,9 +3218,10 @@ static void hb_vmGreater( void )
|
||||
}
|
||||
else if( HB_IS_NUMINT( pItem1 ) && HB_IS_NUMINT( pItem2 ) )
|
||||
{
|
||||
HB_LONG lNumber2 = hb_vmPopHBLong();
|
||||
HB_LONG lNumber1 = hb_vmPopHBLong();
|
||||
hb_vmPushLogical( lNumber1 > lNumber2 );
|
||||
pItem1->item.asLogical.value = ( HB_ITEM_GET_NUMINTRAW( pItem1 ) >
|
||||
HB_ITEM_GET_NUMINTRAW( pItem2 ) );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem1 ) && HB_IS_NUMERIC( pItem2 ) )
|
||||
{
|
||||
@@ -3148,9 +3231,10 @@ static void hb_vmGreater( void )
|
||||
}
|
||||
else if( HB_IS_DATE( pItem1 ) && HB_IS_DATE( pItem2 ) )
|
||||
{
|
||||
long lDate2 = hb_vmPopDate();
|
||||
long lDate1 = hb_vmPopDate();
|
||||
hb_vmPushLogical( lDate1 > lDate2 );
|
||||
pItem1->item.asLogical.value = ( pItem1->item.asDate.value >
|
||||
pItem2->item.asDate.value );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_LOGICAL( pItem1 ) && HB_IS_LOGICAL( pItem2 ) )
|
||||
{
|
||||
@@ -3193,9 +3277,10 @@ static void hb_vmGreaterEqual( void )
|
||||
}
|
||||
else if( HB_IS_NUMINT( pItem1 ) && HB_IS_NUMINT( pItem2 ) )
|
||||
{
|
||||
HB_LONG lNumber2 = hb_vmPopHBLong();
|
||||
HB_LONG lNumber1 = hb_vmPopHBLong();
|
||||
hb_vmPushLogical( lNumber1 >= lNumber2 );
|
||||
pItem1->item.asLogical.value = ( HB_ITEM_GET_NUMINTRAW( pItem1 ) >=
|
||||
HB_ITEM_GET_NUMINTRAW( pItem2 ) );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem1 ) && HB_IS_NUMERIC( pItem2 ) )
|
||||
{
|
||||
@@ -3205,9 +3290,10 @@ static void hb_vmGreaterEqual( void )
|
||||
}
|
||||
else if( HB_IS_DATE( pItem1 ) && HB_IS_DATE( pItem2 ) )
|
||||
{
|
||||
long lDate2 = hb_vmPopDate();
|
||||
long lDate1 = hb_vmPopDate();
|
||||
hb_vmPushLogical( lDate1 >= lDate2 );
|
||||
pItem1->item.asLogical.value = ( pItem1->item.asDate.value >=
|
||||
pItem2->item.asDate.value );
|
||||
pItem1->type = HB_IT_LOGICAL;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_LOGICAL( pItem1 ) && HB_IS_LOGICAL( pItem2 ) )
|
||||
{
|
||||
@@ -3255,7 +3341,7 @@ static void hb_vmInstring( void )
|
||||
#if defined( HB_COMPAT_XHB )
|
||||
else if( HB_IS_ARRAY( pItem2 ) )
|
||||
{
|
||||
BOOL fResult = hb_arrayScan( pItem2, pItem1, NULL, NULL, TRUE );
|
||||
BOOL fResult = hb_arrayScan( pItem2, pItem1, NULL, NULL, TRUE ) != 0;
|
||||
|
||||
hb_stackPop();
|
||||
hb_stackPop();
|
||||
@@ -5555,20 +5641,6 @@ static BOOL hb_vmPopLogical( void )
|
||||
|
||||
/* NOTE: Type checking should be done by the caller. */
|
||||
|
||||
static long hb_vmPopDate( void )
|
||||
{
|
||||
long lDate;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_vmPopDate()"));
|
||||
|
||||
lDate = hb_stackItemFromTop( -1 )->item.asDate.value;
|
||||
hb_stackDec();
|
||||
|
||||
return lDate;
|
||||
}
|
||||
|
||||
/* NOTE: Type checking should be done by the caller. */
|
||||
|
||||
static double hb_vmPopNumber( void )
|
||||
{
|
||||
PHB_ITEM pItem;
|
||||
@@ -5594,7 +5666,7 @@ static double hb_vmPopNumber( void )
|
||||
|
||||
default:
|
||||
hb_errInternal( HB_EI_VMPOPINVITEM, NULL, "hb_vmPopNumber()", NULL );
|
||||
return 0.0; /* To avoid GCC -O2 warning */
|
||||
dNumber = 0.0; /* To avoid GCC -O2 warning */
|
||||
}
|
||||
|
||||
hb_stackDec();
|
||||
@@ -5602,41 +5674,6 @@ static double hb_vmPopNumber( void )
|
||||
return dNumber;
|
||||
}
|
||||
|
||||
/* NOTE: Type checking should be done by the caller. */
|
||||
|
||||
static HB_LONG hb_vmPopHBLong( void )
|
||||
{
|
||||
PHB_ITEM pItem;
|
||||
HB_LONG lNumber;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_vmPopHBLong()"));
|
||||
|
||||
pItem = hb_stackItemFromTop( -1 );
|
||||
|
||||
switch( pItem->type )
|
||||
{
|
||||
case HB_IT_INTEGER:
|
||||
lNumber = ( HB_LONG ) pItem->item.asInteger.value;
|
||||
break;
|
||||
|
||||
case HB_IT_LONG:
|
||||
lNumber = ( HB_LONG ) pItem->item.asLong.value;
|
||||
break;
|
||||
|
||||
case HB_IT_DOUBLE:
|
||||
lNumber = ( HB_LONG ) pItem->item.asDouble.value;
|
||||
break;
|
||||
|
||||
default:
|
||||
hb_errInternal( HB_EI_VMPOPINVITEM, NULL, "hb_vmPopNumber()", NULL );
|
||||
return 0; /* To avoid GCC -O2 warning */
|
||||
}
|
||||
|
||||
hb_stackDec();
|
||||
|
||||
return lNumber;
|
||||
}
|
||||
|
||||
/* Pops the item from the eval stack and uses it to select the current
|
||||
* workarea
|
||||
*/
|
||||
@@ -7096,6 +7133,45 @@ HB_EXPORT BOOL hb_xvmLocalAddInt( int iLocal, LONG lAdd )
|
||||
HB_XVM_RETURN
|
||||
}
|
||||
|
||||
HB_EXPORT BOOL hb_xvmLocalInc( int iLocal )
|
||||
{
|
||||
PHB_ITEM pLocal;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xvmLocalInc(%d)", iLocal));
|
||||
|
||||
pLocal = hb_stackLocalVariable( &iLocal );
|
||||
hb_vmInc( HB_IS_BYREF( pLocal ) ? hb_itemUnRef( pLocal ) : pLocal );
|
||||
|
||||
HB_XVM_RETURN
|
||||
}
|
||||
|
||||
HB_EXPORT BOOL hb_xvmLocalDec( int iLocal )
|
||||
{
|
||||
PHB_ITEM pLocal;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xvmLocalDec(%d)", iLocal));
|
||||
|
||||
pLocal = hb_stackLocalVariable( &iLocal );
|
||||
hb_vmDec( HB_IS_BYREF( pLocal ) ? hb_itemUnRef( pLocal ) : pLocal );
|
||||
|
||||
HB_XVM_RETURN
|
||||
}
|
||||
|
||||
HB_EXPORT BOOL hb_xvmLocalIncPush( int iLocal )
|
||||
{
|
||||
PHB_ITEM pLocal;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xvmLocalInc(%d)", iLocal));
|
||||
|
||||
pLocal = hb_stackLocalVariable( &iLocal );
|
||||
if( HB_IS_BYREF( pLocal ) )
|
||||
pLocal = hb_itemUnRef( pLocal );
|
||||
hb_vmInc( pLocal );
|
||||
hb_itemCopy( hb_stackAllocItem(), pLocal );
|
||||
|
||||
HB_XVM_RETURN
|
||||
}
|
||||
|
||||
HB_EXPORT BOOL hb_xvmLocalAdd( int iLocal )
|
||||
{
|
||||
PHB_ITEM pLocal;
|
||||
@@ -7277,8 +7353,8 @@ HB_EXPORT BOOL hb_xvmEqualInt( LONG lValue )
|
||||
}
|
||||
else if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
HB_LONG lNumber = hb_vmPopHBLong();
|
||||
hb_vmPushLogical( lNumber == ( HB_LONG ) lValue );
|
||||
pItem->item.asLogical.value = HB_ITEM_GET_NUMINTRAW( pItem ) == ( HB_LONG ) lValue;
|
||||
pItem->type = HB_IT_LOGICAL;
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem ) )
|
||||
{
|
||||
@@ -7324,7 +7400,8 @@ HB_EXPORT BOOL hb_xvmEqualIntIs( LONG lValue, BOOL * pfValue )
|
||||
}
|
||||
else if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
* pfValue = hb_vmPopHBLong() == ( HB_LONG ) lValue;
|
||||
* pfValue = HB_ITEM_GET_NUMINTRAW( pItem ) == ( HB_LONG ) lValue;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem ) )
|
||||
{
|
||||
@@ -7380,8 +7457,8 @@ HB_EXPORT BOOL hb_xvmNotEqualInt( LONG lValue )
|
||||
}
|
||||
else if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
HB_LONG lNumber = hb_vmPopHBLong();
|
||||
hb_vmPushLogical( lNumber != ( HB_LONG ) lValue );
|
||||
pItem->item.asLogical.value = HB_ITEM_GET_NUMINTRAW( pItem ) != ( HB_LONG ) lValue;
|
||||
pItem->type = HB_IT_LOGICAL;
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem ) )
|
||||
{
|
||||
@@ -7427,7 +7504,8 @@ HB_EXPORT BOOL hb_xvmNotEqualIntIs( LONG lValue, BOOL * pfValue )
|
||||
}
|
||||
else if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
* pfValue = hb_vmPopHBLong() != ( HB_LONG ) lValue;
|
||||
* pfValue = HB_ITEM_GET_NUMINTRAW( pItem ) != ( HB_LONG ) lValue;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem ) )
|
||||
{
|
||||
@@ -7478,7 +7556,8 @@ HB_EXPORT BOOL hb_xvmLessThenInt( LONG lValue )
|
||||
pItem = hb_stackItemFromTop( -1 );
|
||||
if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
hb_vmPushLogical( hb_vmPopHBLong() < ( HB_LONG ) lValue );
|
||||
pItem->item.asLogical.value = HB_ITEM_GET_NUMINTRAW( pItem ) < ( HB_LONG ) lValue;
|
||||
pItem->type = HB_IT_LOGICAL;
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem ) )
|
||||
{
|
||||
@@ -7518,7 +7597,8 @@ HB_EXPORT BOOL hb_xvmLessThenIntIs( LONG lValue, BOOL * pfValue )
|
||||
pItem = hb_stackItemFromTop( -1 );
|
||||
if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
* pfValue = hb_vmPopHBLong() < ( HB_LONG ) lValue;
|
||||
* pfValue = HB_ITEM_GET_NUMINTRAW( pItem ) < ( HB_LONG ) lValue;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem ) )
|
||||
{
|
||||
@@ -7569,7 +7649,8 @@ HB_EXPORT BOOL hb_xvmLessEqualThenInt( LONG lValue )
|
||||
pItem = hb_stackItemFromTop( -1 );
|
||||
if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
hb_vmPushLogical( hb_vmPopHBLong() <= ( HB_LONG ) lValue );
|
||||
pItem->item.asLogical.value = HB_ITEM_GET_NUMINTRAW( pItem ) <= ( HB_LONG ) lValue;
|
||||
pItem->type = HB_IT_LOGICAL;
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem ) )
|
||||
{
|
||||
@@ -7609,7 +7690,8 @@ HB_EXPORT BOOL hb_xvmLessEqualThenIntIs( LONG lValue, BOOL * pfValue )
|
||||
pItem = hb_stackItemFromTop( -1 );
|
||||
if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
* pfValue = hb_vmPopHBLong() <= ( HB_LONG ) lValue;
|
||||
* pfValue = HB_ITEM_GET_NUMINTRAW( pItem ) <= ( HB_LONG ) lValue;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem ) )
|
||||
{
|
||||
@@ -7660,7 +7742,8 @@ HB_EXPORT BOOL hb_xvmGreaterThenInt( LONG lValue )
|
||||
pItem = hb_stackItemFromTop( -1 );
|
||||
if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
hb_vmPushLogical( hb_vmPopHBLong() > ( HB_LONG ) lValue );
|
||||
pItem->item.asLogical.value = HB_ITEM_GET_NUMINTRAW( pItem ) > ( HB_LONG ) lValue;
|
||||
pItem->type = HB_IT_LOGICAL;
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem ) )
|
||||
{
|
||||
@@ -7700,7 +7783,8 @@ HB_EXPORT BOOL hb_xvmGreaterThenIntIs( LONG lValue, BOOL * pfValue )
|
||||
pItem = hb_stackItemFromTop( -1 );
|
||||
if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
* pfValue = hb_vmPopHBLong() > ( HB_LONG ) lValue;
|
||||
* pfValue = HB_ITEM_GET_NUMINTRAW( pItem ) > ( HB_LONG ) lValue;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem ) )
|
||||
{
|
||||
@@ -7751,7 +7835,8 @@ HB_EXPORT BOOL hb_xvmGreaterEqualThenInt( LONG lValue )
|
||||
pItem = hb_stackItemFromTop( -1 );
|
||||
if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
hb_vmPushLogical( hb_vmPopHBLong() >= ( HB_LONG ) lValue );
|
||||
pItem->item.asLogical.value = HB_ITEM_GET_NUMINTRAW( pItem ) >= ( HB_LONG ) lValue;
|
||||
pItem->type = HB_IT_LOGICAL;
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem ) )
|
||||
{
|
||||
@@ -7791,7 +7876,8 @@ HB_EXPORT BOOL hb_xvmGreaterEqualThenIntIs( LONG lValue, BOOL * pfValue )
|
||||
pItem = hb_stackItemFromTop( -1 );
|
||||
if( HB_IS_NUMINT( pItem ) )
|
||||
{
|
||||
* pfValue = hb_vmPopHBLong() >= ( HB_LONG ) lValue;
|
||||
* pfValue = HB_ITEM_GET_NUMINTRAW( pItem ) >= ( HB_LONG ) lValue;
|
||||
hb_stackDec();
|
||||
}
|
||||
else if( HB_IS_NUMERIC( pItem ) )
|
||||
{
|
||||
@@ -8182,7 +8268,34 @@ HB_EXPORT BOOL hb_xvmInc( void )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xvmInc()"));
|
||||
|
||||
hb_vmInc();
|
||||
hb_vmInc( hb_stackItemFromTop( -1 ) );
|
||||
|
||||
HB_XVM_RETURN
|
||||
}
|
||||
|
||||
HB_EXPORT BOOL hb_xvmIncEq( void )
|
||||
{
|
||||
PHB_ITEM pResult, pValue, pTemp;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xvmIncEq()"));
|
||||
|
||||
pResult = hb_stackItemFromTop( -1 );
|
||||
pValue = hb_itemUnRef( pResult );
|
||||
hb_vmInc( pValue );
|
||||
pTemp = hb_stackAllocItem();
|
||||
hb_itemCopy( pTemp, pValue );
|
||||
hb_itemMove( pResult, pTemp );
|
||||
hb_stackDec();
|
||||
|
||||
HB_XVM_RETURN
|
||||
}
|
||||
|
||||
HB_EXPORT BOOL hb_xvmIncEqPop( void )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xvmIncEqPop()"));
|
||||
|
||||
hb_vmInc( hb_itemUnRef( hb_stackItemFromTop( -1 ) ) );
|
||||
hb_stackPop();
|
||||
|
||||
HB_XVM_RETURN
|
||||
}
|
||||
@@ -8191,7 +8304,34 @@ HB_EXPORT BOOL hb_xvmDec( void )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xvmDec()"));
|
||||
|
||||
hb_vmDec();
|
||||
hb_vmDec( hb_stackItemFromTop( -1 ) );
|
||||
|
||||
HB_XVM_RETURN
|
||||
}
|
||||
|
||||
HB_EXPORT BOOL hb_xvmDecEq( void )
|
||||
{
|
||||
PHB_ITEM pResult, pValue, pTemp;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xvmDecEq()"));
|
||||
|
||||
pResult = hb_stackItemFromTop( -1 );
|
||||
pValue = hb_itemUnRef( pResult );
|
||||
hb_vmDec( pValue );
|
||||
pTemp = hb_stackAllocItem();
|
||||
hb_itemCopy( pTemp, pValue );
|
||||
hb_itemMove( pResult, pTemp );
|
||||
hb_stackDec();
|
||||
|
||||
HB_XVM_RETURN
|
||||
}
|
||||
|
||||
HB_EXPORT BOOL hb_xvmDecEqPop( void )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xvmDecEqPop()"));
|
||||
|
||||
hb_vmDec( hb_itemUnRef( hb_stackItemFromTop( -1 ) ) );
|
||||
hb_stackPop();
|
||||
|
||||
HB_XVM_RETURN
|
||||
}
|
||||
|
||||
@@ -1366,7 +1366,7 @@ void hb_compGenPushDouble( double dNumber, BYTE bWidth, BYTE bDec, HB_COMP_DECL
|
||||
hb_compGenPCodeN( pBuffer, 1 + sizeof( double ) + sizeof( BYTE ) + sizeof( BYTE ), HB_COMP_PARAM );
|
||||
}
|
||||
|
||||
void hb_compGenPushFunCall( char * szFunName, HB_COMP_DECL )
|
||||
void hb_compGenPushFunSym( char * szFunName, HB_COMP_DECL )
|
||||
{
|
||||
char * szFunction;
|
||||
|
||||
@@ -1384,6 +1384,12 @@ void hb_compGenPushFunCall( char * szFunName, HB_COMP_DECL )
|
||||
}
|
||||
}
|
||||
|
||||
void hb_compGenPushFunCall( char * szFunName, HB_COMP_DECL )
|
||||
{
|
||||
hb_compGenPushFunSym( szFunName, HB_COMP_PARAM );
|
||||
hb_compGenPCode1( HB_P_PUSHNIL, HB_COMP_PARAM );
|
||||
}
|
||||
|
||||
void hb_compGenPushFunRef( char * szFunName, HB_COMP_DECL )
|
||||
{
|
||||
char * szFunction;
|
||||
@@ -1409,7 +1415,6 @@ void hb_compGenPushString( char * szText, ULONG ulStrLen, HB_COMP_DECL )
|
||||
hb_macroError( HB_MACRO_TOO_COMPLEX, HB_COMP_PARAM );
|
||||
}
|
||||
|
||||
|
||||
void hb_compGenPCode1( BYTE byte, HB_COMP_DECL )
|
||||
{
|
||||
HB_PCODE_INFO_PTR pFunc = HB_PCODE_DATA;
|
||||
|
||||
@@ -360,7 +360,7 @@ FUNCTION Main_MATH()
|
||||
|
||||
/* MOD() */
|
||||
|
||||
TEST_LINE( MOD() , "E BASE 1085 Argument error % A:2:U:NIL;U:NIL F:S" )
|
||||
TEST_LINE( MOD() , "E BASE 1085 Argument error % F:S" )
|
||||
TEST_LINE( MOD( "A", "B" ) , "E BASE 1085 Argument error % A:2:C:A;C:B F:S" )
|
||||
TEST_LINE( MOD( "A", 100 ) , "E BASE 1085 Argument error % A:2:C:A;N:100 F:S" )
|
||||
TEST_LINE( MOD( 100, "B" ) , "E BASE 1085 Argument error % A:2:N:100;C:B F:S" )
|
||||
|
||||
Reference in New Issue
Block a user