2008-06-11 01:17 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/source/common/hbwince.c
    ! fixed typo in GetDriveTypeA()
    * temporary disabled GetDriveTypeW() call because not all CRTLs for
      WinCE support it

  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/source/common/expropt2.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
    * added full expression list stripping - it enables optimizations
      in few additional places
    ! fixed code to always refresh expression address after direct or
      indirect reduction - seems that we have some memory leaks and
      possible GPFs not located so far
   Please make tests with your code.
This commit is contained in:
Przemyslaw Czerpak
2008-06-10 23:17:39 +00:00
parent 11890100e4
commit 3b543d3039
7 changed files with 312 additions and 294 deletions

View File

@@ -8,6 +8,24 @@
2008-12-31 13:59 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
2008-06-11 01:17 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/common/hbwince.c
! fixed typo in GetDriveTypeA()
* temporary disabled GetDriveTypeW() call because not all CRTLs for
WinCE support it
* harbour/include/hbexpra.c
* harbour/include/hbexprb.c
* harbour/source/common/expropt2.c
* harbour/source/compiler/harbour.y
* harbour/source/compiler/harbour.yyc
* added full expression list stripping - it enables optimizations
in few additional places
! fixed code to always refresh expression address after direct or
indirect reduction - seems that we have some memory leaks and
possible GPFs not located so far
Please make tests with your code.
2008-06-10 15:35 UTC+0800 Pritpal Bedi (pritpal@vouchcac.com
* harbour/source/rtl/gtwvt/gtwvt.c
! Fixed maximized state. Borders were missing.

View File

@@ -216,10 +216,13 @@ HB_EXPR_PTR hb_compExprNewFunCall( HB_EXPR_PTR pName, HB_EXPR_PTR pParms, HB_COM
HB_EXPR_PTR pArg, pNext;
USHORT uiCount;
HB_EXPR_USE( pParms, HB_EA_REDUCE );
pParms->value.asList.pExprList = HB_EXPR_USE( pParms->value.asList.pExprList, HB_EA_REDUCE );
pArg = pParms->value.asList.pExprList;
if( pArg->ExprType == HB_ET_LIST )
/* When -kc switch is used expression list is not stripped
* in reduce operation
*/
if( !HB_SUPPORT_HARBOUR && pArg->ExprType == HB_ET_LIST )
{
pNext = pArg->pNext;
pArg->pNext = NULL;
@@ -549,17 +552,23 @@ static void hb_compExprCheckStaticInitializers( HB_EXPR_PTR pLeftExpr, HB_EXPR_P
pPrev = &pRightExpr->value.asList.pExprList;
while( pElem )
{
/* NOTE: During reduction the expression can be replaced by the
* new one - this will break the linked list of expressions.
* (classical case of replacing an item in a linked list)
*/
pNext = pElem->pNext; /* store next expression in case the current will be reduced */
pElem = hb_compExprListStrip( HB_EXPR_USE( pElem, HB_EA_REDUCE ), HB_COMP_PARAM );
pNext = pElem->pNext; /* store next expression in case the current will be reduced */
if( !HB_SUPPORT_HARBOUR )
{
/* When -kc switch is used expression list is not stripped
* in reduce operation
*/
/* NOTE: During reduction the expression can be replaced by the
* new one - this will break the linked list of expressions.
* (classical case of replacing an item in a linked list)
*/
pElem = hb_compExprListStrip( pElem, HB_COMP_PARAM );
*pPrev = pElem; /* store a new expression into the previous one */
pElem->pNext = pNext; /* restore the link to next expression */
pPrev = &pElem->pNext;
}
if( pElem->ExprType > HB_ET_FUNREF )
hb_compErrorStatic( HB_COMP_PARAM, pLeftExpr->value.asSymbol, pElem );
*pPrev = pElem; /* store a new expression into the previous one */
pElem->pNext = pNext; /* restore the link to next expression */
pPrev = &pElem->pNext;
pElem = pNext;
}
}
@@ -581,7 +590,13 @@ HB_EXPR_PTR hb_compExprAssignStatic( HB_EXPR_PTR pLeftExpr, HB_EXPR_PTR pRightEx
pExpr->value.asOperator.pLeft = pLeftExpr;
/* Try to reduce the assigned value */
pRightExpr = hb_compExprListStrip( HB_EXPR_USE( pRightExpr, HB_EA_REDUCE ), HB_COMP_PARAM );
pRightExpr = HB_EXPR_USE( pRightExpr, HB_EA_REDUCE );
/* When -kc switch is used expression list is not stripped
* in reduce operation
*/
if( !HB_SUPPORT_HARBOUR )
pRightExpr = hb_compExprListStrip( pRightExpr, HB_COMP_PARAM );
pExpr->value.asOperator.pRight = pRightExpr;
if( pRightExpr->ExprType == HB_ET_ARGLIST )
@@ -592,12 +607,6 @@ HB_EXPR_PTR hb_compExprAssignStatic( HB_EXPR_PTR pLeftExpr, HB_EXPR_PTR pRightEx
*/
hb_compExprCheckStaticInitializers( pLeftExpr, pRightExpr, HB_COMP_PARAM );
}
else if( pRightExpr->ExprType > HB_ET_FUNREF )
{
/* Illegal initializer for static variable (not a constant value)
*/
hb_compErrorStatic( HB_COMP_PARAM, pLeftExpr->value.asSymbol, pRightExpr );
}
else if( pRightExpr->ExprType == HB_ET_ARRAY )
{
/* { elem1, elem2, elemN } was used as initializer
@@ -606,6 +615,12 @@ HB_EXPR_PTR hb_compExprAssignStatic( HB_EXPR_PTR pLeftExpr, HB_EXPR_PTR pRightEx
*/
hb_compExprCheckStaticInitializers( pLeftExpr, pRightExpr, HB_COMP_PARAM );
}
else if( pRightExpr->ExprType > HB_ET_FUNREF )
{
/* Illegal initializer for static variable (not a constant value)
*/
hb_compErrorStatic( HB_COMP_PARAM, pLeftExpr->value.asSymbol, pRightExpr );
}
return pExpr;
}
@@ -693,7 +708,7 @@ HB_EXPR_PTR hb_compExprGenStatement( HB_EXPR_PTR pExpr, HB_COMP_DECL )
HB_EXPR_PTR hb_compExprReduce( HB_EXPR_PTR pExpr, HB_COMP_DECL )
{
return hb_compExprListStrip( HB_EXPR_USE( pExpr, HB_EA_REDUCE ), HB_COMP_PARAM );
return HB_EXPR_USE( pExpr, HB_EA_REDUCE );
}
#endif

View File

@@ -144,7 +144,7 @@ static void hb_compExprPushPreOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL );
static void hb_compExprPushPostOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL );
static void hb_compExprUsePreOp( HB_EXPR_PTR pSelf, BYTE bOper, HB_COMP_DECL );
static void hb_compExprUseAliasMacro( HB_EXPR_PTR pAliasedVar, BYTE bAction, HB_COMP_DECL );
static ULONG hb_compExprReduceList( HB_EXPR_PTR pExpr, BOOL fStrip, HB_COMP_DECL );
static HB_EXPR_PTR hb_compExprReduceList( HB_EXPR_PTR pExpr, HB_COMP_DECL );
const HB_EXPR_FUNC_PTR hb_comp_ExprTable[ HB_EXPR_COUNT ] = {
@@ -523,7 +523,7 @@ static HB_EXPR_FUNC( hb_compExprUseArray )
switch( iMessage )
{
case HB_EA_REDUCE:
hb_compExprReduceList( pSelf, FALSE, HB_COMP_PARAM );
pSelf = hb_compExprReduceList( pSelf, HB_COMP_PARAM );
break;
case HB_EA_ARRAY_AT:
@@ -619,7 +619,7 @@ static HB_EXPR_FUNC( hb_compExprUseHash )
switch( iMessage )
{
case HB_EA_REDUCE:
hb_compExprReduceList( pSelf, FALSE, HB_COMP_PARAM );
pSelf = hb_compExprReduceList( pSelf, HB_COMP_PARAM );
break;
case HB_EA_ARRAY_AT:
@@ -762,6 +762,7 @@ static HB_EXPR_FUNC( hb_compExprUseRef )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asReference = HB_EXPR_USE( pSelf->value.asReference, HB_EA_REDUCE );
break;
case HB_EA_ARRAY_AT:
HB_COMP_ERROR_TYPE( pSelf );
@@ -833,8 +834,7 @@ static HB_EXPR_FUNC( hb_compExprUseIIF )
switch( iMessage )
{
case HB_EA_REDUCE:
hb_compExprReduceList( pSelf, FALSE, HB_COMP_PARAM );
pSelf = hb_compExprReduceIIF( pSelf, HB_COMP_PARAM );
pSelf = hb_compExprReduceIIF( hb_compExprReduceList( pSelf, HB_COMP_PARAM ), HB_COMP_PARAM );
break;
case HB_EA_ARRAY_AT:
@@ -936,7 +936,12 @@ static HB_EXPR_FUNC( hb_compExprUseList )
switch( iMessage )
{
case HB_EA_REDUCE:
if( HB_SUPPORT_XBASE )
pSelf = hb_compExprReduceList( pSelf, HB_COMP_PARAM );
if( HB_SUPPORT_HARBOUR )
pSelf = hb_compExprListStrip( pSelf, HB_COMP_PARAM );
if( HB_SUPPORT_XBASE && pSelf->ExprType == HB_ET_LIST )
{
if( hb_compExprListLen( pSelf ) == 1 )
{
@@ -950,12 +955,6 @@ static HB_EXPR_FUNC( hb_compExprUseList )
}
}
}
hb_compExprReduceList( pSelf, FALSE, HB_COMP_PARAM );
/* NOTE: if the list contains a single expression then the list
* is not reduced to this expression - if you need that reduction
* then call hb_compExprListStrip() additionaly
*/
break;
case HB_EA_ARRAY_AT:
@@ -1060,7 +1059,7 @@ static HB_EXPR_FUNC( hb_compExprUseArgList )
switch( iMessage )
{
case HB_EA_REDUCE:
hb_compExprReduceList( pSelf, FALSE, HB_COMP_PARAM );
pSelf = hb_compExprReduceList( pSelf, HB_COMP_PARAM );
break;
case HB_EA_ARRAY_AT:
@@ -1124,7 +1123,7 @@ static HB_EXPR_FUNC( hb_compExprUseMacroArgList )
switch( iMessage )
{
case HB_EA_REDUCE:
hb_compExprReduceList( pSelf, FALSE, HB_COMP_PARAM );
pSelf = hb_compExprReduceList( pSelf, HB_COMP_PARAM );
break;
case HB_EA_ARRAY_AT:
@@ -1597,12 +1596,7 @@ static HB_EXPR_FUNC( hb_compExprUseFunCall )
/* Reduce the expressions on the list of arguments
*/
if( pSelf->value.asFunCall.pParms )
{
if( HB_SUPPORT_HARBOUR )
hb_compExprReduceList( pSelf->value.asFunCall.pParms, TRUE, HB_COMP_PARAM );
else
pSelf->value.asFunCall.pParms = HB_EXPR_USE( pSelf->value.asFunCall.pParms, HB_EA_REDUCE );
}
pSelf->value.asFunCall.pParms = HB_EXPR_USE( pSelf->value.asFunCall.pParms, HB_EA_REDUCE );
if( pSelf->value.asFunCall.pFunName->ExprType == HB_ET_FUNNAME )
{
@@ -1968,6 +1962,15 @@ static HB_EXPR_FUNC( hb_compExprUseAliasVar )
switch( iMessage )
{
case HB_EA_REDUCE:
/* NOTE: direct reduction not used for HB_ET_LIST to avoid
* list stripping before PUSH/POP operations
*/
if( pSelf->value.asAlias.pAlias->ExprType == HB_ET_LIST )
pSelf->value.asAlias.pAlias = hb_compExprReduceList( pSelf->value.asAlias.pAlias, HB_COMP_PARAM );
else
pSelf->value.asAlias.pAlias = HB_EXPR_USE( pSelf->value.asAlias.pAlias, HB_EA_REDUCE );
break;
case HB_EA_ARRAY_AT:
case HB_EA_ARRAY_INDEX:
case HB_EA_LVALUE:
@@ -1976,15 +1979,6 @@ static HB_EXPR_FUNC( hb_compExprUseAliasVar )
case HB_EA_PUSH_PCODE:
{
HB_EXPR_PTR pAlias = pSelf->value.asAlias.pAlias;
BOOL bReduced = FALSE;
if( pAlias->ExprType == HB_ET_LIST )
{
/* ( expr1, expr2, ... )->variable
*/
pSelf->value.asAlias.pAlias = HB_EXPR_USE( pSelf->value.asAlias.pAlias, HB_EA_REDUCE );
bReduced = TRUE;
}
if( pAlias->ExprType == HB_ET_MACRO || pSelf->value.asAlias.pVar->ExprType == HB_ET_MACRO )
{
@@ -2016,7 +2010,7 @@ static HB_EXPR_FUNC( hb_compExprUseAliasVar )
else
hb_compErrorAlias( HB_COMP_PARAM, pAlias );
}
else if( bReduced )
else if( pAlias->ExprType == HB_ET_LIST )
{
/*
* ( expression )->var
@@ -2033,13 +2027,6 @@ static HB_EXPR_FUNC( hb_compExprUseAliasVar )
case HB_EA_POP_PCODE:
{
HB_EXPR_PTR pAlias = pSelf->value.asAlias.pAlias;
BOOL bReduced = FALSE;
if( pAlias->ExprType == HB_ET_LIST )
{
pSelf->value.asAlias.pAlias = HB_EXPR_USE( pSelf->value.asAlias.pAlias, HB_EA_REDUCE );
bReduced = TRUE;
}
if( pAlias->ExprType == HB_ET_MACRO || pSelf->value.asAlias.pVar->ExprType == HB_ET_MACRO )
{
@@ -2070,7 +2057,7 @@ static HB_EXPR_FUNC( hb_compExprUseAliasVar )
else
hb_compErrorAlias( HB_COMP_PARAM, pAlias );
}
else if( bReduced )
else if( pAlias->ExprType == HB_ET_LIST )
{
/*
* ( expression )->var
@@ -2115,6 +2102,10 @@ static HB_EXPR_FUNC( hb_compExprUseAliasExpr )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asAlias.pAlias = HB_EXPR_USE( pSelf->value.asAlias.pAlias, HB_EA_REDUCE );
pSelf->value.asAlias.pExpList = HB_EXPR_USE( pSelf->value.asAlias.pExpList, HB_EA_REDUCE );
break;
case HB_EA_ARRAY_AT:
case HB_EA_ARRAY_INDEX:
break;
@@ -2320,13 +2311,11 @@ static HB_EXPR_FUNC( hb_compExprUseSend )
switch( iMessage )
{
case HB_EA_REDUCE:
{
/* Clipper does not reduce object expressions */
if( HB_SUPPORT_HARBOUR && pSelf->value.asMessage.pObject )
pSelf->value.asMessage.pObject = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asMessage.pObject, HB_EA_REDUCE ), HB_COMP_PARAM );
if( pSelf->value.asMessage.pParms ) /* Is it a method call ? */
pSelf->value.asMessage.pParms = HB_EXPR_USE( pSelf->value.asMessage.pParms, HB_EA_REDUCE );
}
/* Clipper does not reduce object expressions */
if( HB_SUPPORT_HARBOUR && pSelf->value.asMessage.pObject )
pSelf->value.asMessage.pObject = HB_EXPR_USE( pSelf->value.asMessage.pObject, HB_EA_REDUCE );
if( pSelf->value.asMessage.pParms ) /* Is it a method call ? */
pSelf->value.asMessage.pParms = HB_EXPR_USE( pSelf->value.asMessage.pParms, HB_EA_REDUCE );
break;
case HB_EA_ARRAY_AT:
@@ -2411,7 +2400,7 @@ static HB_EXPR_FUNC( hb_compExprUsePostInc )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_LVALUE );
break;
case HB_EA_ARRAY_AT:
@@ -2449,7 +2438,7 @@ static HB_EXPR_FUNC( hb_compExprUsePostDec )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_LVALUE );
break;
case HB_EA_ARRAY_AT:
@@ -2485,8 +2474,8 @@ static HB_EXPR_FUNC( hb_compExprUseAssign )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_LVALUE );
break;
@@ -2561,8 +2550,8 @@ static HB_EXPR_FUNC( hb_compExprUsePlusEq )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_LVALUE );
break;
@@ -2601,8 +2590,8 @@ static HB_EXPR_FUNC( hb_compExprUseMinusEq )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_LVALUE );
break;
@@ -2641,8 +2630,8 @@ static HB_EXPR_FUNC( hb_compExprUseMultEq )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_LVALUE );
break;
@@ -2681,8 +2670,8 @@ static HB_EXPR_FUNC( hb_compExprUseDivEq )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_LVALUE );
break;
@@ -2721,8 +2710,8 @@ static HB_EXPR_FUNC( hb_compExprUseModEq )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_LVALUE );
break;
@@ -2761,8 +2750,8 @@ static HB_EXPR_FUNC( hb_compExprUseExpEq )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_LVALUE );
break;
@@ -2801,8 +2790,8 @@ static HB_EXPR_FUNC( hb_compExprUseOr )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReduceOr( pSelf, HB_COMP_PARAM );
break;
@@ -2886,8 +2875,8 @@ static HB_EXPR_FUNC( hb_compExprUseAnd )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReduceAnd( pSelf, HB_COMP_PARAM );
break;
@@ -2974,7 +2963,7 @@ static HB_EXPR_FUNC( hb_compExprUseNot )
{
HB_EXPR_PTR pExpr;
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pExpr = pSelf->value.asOperator.pLeft;
if( pExpr->ExprType == HB_ET_LOGICAL )
@@ -3047,8 +3036,8 @@ static HB_EXPR_FUNC( hb_compExprUseEqual )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReduceEQ( pSelf, HB_COMP_PARAM );
break;
@@ -3105,8 +3094,8 @@ static HB_EXPR_FUNC( hb_compExprUseEQ )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReduceEQ( pSelf, HB_COMP_PARAM );
break;
@@ -3161,8 +3150,8 @@ static HB_EXPR_FUNC( hb_compExprUseLT )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReduceLT( pSelf, HB_COMP_PARAM );
break;
@@ -3217,8 +3206,8 @@ static HB_EXPR_FUNC( hb_compExprUseGT )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReduceGT( pSelf, HB_COMP_PARAM );
break;
@@ -3273,8 +3262,8 @@ static HB_EXPR_FUNC( hb_compExprUseLE )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReduceLE( pSelf, HB_COMP_PARAM );
break;
@@ -3330,8 +3319,8 @@ static HB_EXPR_FUNC( hb_compExprUseGE )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReduceGE( pSelf, HB_COMP_PARAM );
break;
@@ -3387,8 +3376,8 @@ static HB_EXPR_FUNC( hb_compExprUseNE )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReduceNE( pSelf, HB_COMP_PARAM );
break;
@@ -3444,11 +3433,9 @@ static HB_EXPR_FUNC( hb_compExprUseIN )
switch( iMessage )
{
case HB_EA_REDUCE:
{
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf = hb_compExprReduceIN( pSelf, HB_COMP_PARAM );
}
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReduceIN( pSelf, HB_COMP_PARAM );
break;
case HB_EA_ARRAY_AT:
@@ -3503,8 +3490,8 @@ static HB_EXPR_FUNC( hb_compExprUsePlus )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReducePlus( pSelf, HB_COMP_PARAM );
break;
@@ -3606,8 +3593,8 @@ static HB_EXPR_FUNC( hb_compExprUseMinus )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReduceMinus( pSelf, HB_COMP_PARAM );
break;
@@ -3688,8 +3675,8 @@ static HB_EXPR_FUNC( hb_compExprUseMult )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReduceMult( pSelf, HB_COMP_PARAM );
break;
@@ -3745,8 +3732,8 @@ static HB_EXPR_FUNC( hb_compExprUseDiv )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf = hb_compExprReduceDiv( pSelf, HB_COMP_PARAM );
break;
@@ -3802,8 +3789,8 @@ static HB_EXPR_FUNC( hb_compExprUseMod )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
pSelf =hb_compExprReduceMod( pSelf, HB_COMP_PARAM );
break;
@@ -3859,12 +3846,10 @@ static HB_EXPR_FUNC( hb_compExprUsePower )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf->value.asOperator.pRight = HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE );
if( HB_SUPPORT_HARBOUR ) /* Clipper doesn't optimize it */
{
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pRight = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pRight, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf =hb_compExprReducePower( pSelf, HB_COMP_PARAM );
}
break;
case HB_EA_ARRAY_AT:
@@ -3919,7 +3904,7 @@ static HB_EXPR_FUNC( hb_compExprUseNegate )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
pSelf = hb_compExprReduceNegate( pSelf, HB_COMP_PARAM );
break;
@@ -3974,7 +3959,7 @@ static HB_EXPR_FUNC( hb_compExprUsePreInc )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_LVALUE );
break;
@@ -4014,7 +3999,7 @@ static HB_EXPR_FUNC( hb_compExprUsePreDec )
switch( iMessage )
{
case HB_EA_REDUCE:
pSelf->value.asOperator.pLeft = hb_compExprListStrip( HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE ), HB_COMP_PARAM );
pSelf->value.asOperator.pLeft = HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_REDUCE );
HB_EXPR_USE( pSelf->value.asOperator.pLeft, HB_EA_LVALUE );
break;
@@ -5038,29 +5023,27 @@ static void hb_compExprUseAliasMacro( HB_EXPR_PTR pAliasedVar, BYTE bAction, HB_
*
* pExpr is the first expression on the list
*/
static ULONG hb_compExprReduceList( HB_EXPR_PTR pExpr, BOOL fStrip, HB_COMP_DECL )
static HB_EXPR_PTR hb_compExprReduceList( HB_EXPR_PTR pList, HB_COMP_DECL )
{
HB_EXPR_PTR pNext;
HB_EXPR_PTR pNext, pExpr;
HB_EXPR_PTR * pPrev;
ULONG ulCnt = 0;
/* NOTE: During optimalization an expression on the list can be
* replaced by the new one
*/
pPrev = &pExpr->value.asList.pExprList;
pExpr = pExpr->value.asList.pExprList;
pPrev = &pList->value.asList.pExprList;
pExpr = pList->value.asList.pExprList;
while( pExpr )
{
pNext = pExpr->pNext; /* store next expression in case the current will be reduced */
pExpr = HB_EXPR_USE( pExpr, HB_EA_REDUCE );
if( fStrip )
if( HB_SUPPORT_HARBOUR )
pExpr = hb_compExprListStrip( pExpr, HB_COMP_PARAM );
*pPrev = pExpr; /* store a new expression into the previous one */
pExpr->pNext = pNext; /* restore the link to next expression */
pPrev = &pExpr->pNext;
pExpr = pNext;
++ulCnt;
}
return ulCnt;
return pList;
}

View File

@@ -1421,13 +1421,6 @@ HB_EXPR_PTR hb_compExprReduceIIF( HB_EXPR_PTR pSelf, HB_COMP_DECL )
/* get conditional expression */
pExpr = pSelf->value.asList.pExprList;
if( pExpr->ExprType == HB_ET_LIST )
{
HB_EXPR_PTR pNext = pExpr->pNext;
pExpr = hb_compExprListStrip( pExpr, HB_COMP_PARAM );
pExpr->pNext = pNext;
pSelf->value.asList.pExprList = pExpr;
}
if( pExpr->ExprType == HB_ET_LOGICAL )
{

View File

@@ -502,16 +502,23 @@ DWORD WINAPI GetFileAttributesA( LPCSTR path )
return dw;
}
UINT WINAPI GetDriveTypeA( LPCSTR filename )
UINT WINAPI GetDriveTypeA( LPCSTR path )
{
/* temporary disabled - not all WinCE compilers support GetDriveTypeW() */
#if 0
LPWSTR wpath;
UINT ui
UINT ui;
wpath = hb_mbtowc( path );
ui = GetDriveTypeW( wpath );
hb_xfree( wpath );
return ui;
#else
HB_SYMBOL_UNUSED( path );
return DRIVE_UNKNOWN;
#endif
}
BOOL WINAPI GetVersionExA( OSVERSIONINFOA * v )

View File

@@ -882,7 +882,7 @@ LValue : IdentName { $$ = hb_compExprNewVar( $1, HB_COMP_
| MacroExpr
| ObjectData
| VariableAt
| PareExpList { $$ = hb_compExprListStrip( $1, NULL ); }
| PareExpList { $$ = hb_compExprListStrip( $1, HB_COMP_PARAM ); }
;
/* NOTE: The rule: Expression Operator Expression
@@ -1548,10 +1548,11 @@ ForNext : FOR LValue ForAssign Expression /* 1 2 3 4 */
$<lNumber>1 = HB_COMP_PARAM->currLine;
hb_compDebugStart();
++HB_COMP_PARAM->functions.pLast->wForCounter;
$2 = hb_compExprReduce( $2, HB_COMP_PARAM );
$<asExpr>$ = hb_compExprGenPush( hb_compExprAssign( $2, $4, HB_COMP_PARAM ), HB_COMP_PARAM );
if( hb_compExprAsSymbol( $<asExpr>2 ) )
if( hb_compExprAsSymbol( $2 ) )
{
hb_compForStart( HB_COMP_PARAM, hb_compExprAsSymbol( $<asExpr>2 ), FALSE );
hb_compForStart( HB_COMP_PARAM, hb_compExprAsSymbol( $2 ), FALSE );
}
}
TO ExpList StepExpr /* 6 7 8 */
@@ -1574,18 +1575,28 @@ ForNext : FOR LValue ForAssign Expression /* 1 2 3 4 */
hb_compLinePush( HB_COMP_PARAM );
HB_COMP_PARAM->currLine = iLine;
iSign = $<asExpr>8 ? hb_compExprAsNumSign( $<asExpr>8 ) : 1;
if( $<asExpr>8 )
{
$<asExpr>8 = hb_compExprReduce( $<asExpr>8, HB_COMP_PARAM );
iSign = hb_compExprAsNumSign( $<asExpr>8 );
HB_COMP_EXPR_CLEAR( hb_compExprGenPush( hb_compExprSetOperand( hb_compExprNewPlusEq( $2, HB_COMP_PARAM ), $<asExpr>8, HB_COMP_PARAM ), HB_COMP_PARAM ) );
else
HB_COMP_EXPR_CLEAR( hb_compExprGenPush( hb_compExprNewPreInc( $2, HB_COMP_PARAM ), HB_COMP_PARAM ) );
hb_compGenJumpHere( ( ULONG ) $<lNumber>9, HB_COMP_PARAM );
hb_compExprGenPush( $7, HB_COMP_PARAM ); /* end */
if( iSign )
hb_compGenPCode1( iSign > 0 ? HB_P_GREATER : HB_P_LESS, HB_COMP_PARAM );
}
else
{
hb_compExprGenPush( $<asExpr>8, HB_COMP_PARAM ); /* step */
iSign = 1;
HB_COMP_EXPR_CLEAR( hb_compExprGenPush( hb_compExprNewPreInc( $2, HB_COMP_PARAM ), HB_COMP_PARAM ) );
}
hb_compGenJumpHere( ( ULONG ) $<lNumber>9, HB_COMP_PARAM );
HB_COMP_EXPR_DELETE( hb_compExprGenPush( $7, HB_COMP_PARAM ) ); /* end */
if( iSign )
{
hb_compGenPCode1( iSign > 0 ? HB_P_GREATER : HB_P_LESS, HB_COMP_PARAM );
if( $<asExpr>8 )
HB_COMP_EXPR_DELETE( $<asExpr>8 );
}
else
{
HB_COMP_EXPR_DELETE( hb_compExprGenPush( $<asExpr>8, HB_COMP_PARAM ) ); /* step */
hb_compGenPCode1( HB_P_FORTEST, HB_COMP_PARAM );
}
@@ -1593,10 +1604,7 @@ ForNext : FOR LValue ForAssign Expression /* 1 2 3 4 */
hb_compLoopEnd( HB_COMP_PARAM );
if( hb_compExprAsSymbol( $<asExpr>2 ) )
hb_compForEnd( HB_COMP_PARAM, hb_compExprAsSymbol( $<asExpr>2 ) );
HB_COMP_EXPR_DELETE( $7 );
HB_COMP_EXPR_DELETE( $<asExpr>5 ); /* deletes $5, $2, $4 */
if( $<asExpr>8 )
HB_COMP_EXPR_DELETE( $<asExpr>8 );
HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE );
}
;
@@ -1650,6 +1658,8 @@ ForEach : FOREACH ForList IN ForArgs /* 1 2 3 4 */
{
/* 7
*/
$2 = hb_compExprReduce( $2, HB_COMP_PARAM );
$4 = hb_compExprReduce( $4, HB_COMP_PARAM );
hb_compEnumStart( HB_COMP_PARAM, $2, $4, $6 );
hb_compLoopStart( HB_COMP_PARAM, TRUE );
@@ -2320,11 +2330,11 @@ static void hb_compRTVariableGen( HB_COMP_DECL, char * szCreateFun )
/* push variable names to create */
while( pVar->pNext )
{
hb_compExprGenPush( pVar->pVar, HB_COMP_PARAM );
pVar->pVar = hb_compExprGenPush( pVar->pVar, HB_COMP_PARAM );
pVar = pVar->pNext;
++usCount;
}
hb_compExprGenPush( pVar->pVar, HB_COMP_PARAM );
pVar->pVar = hb_compExprGenPush( pVar->pVar, HB_COMP_PARAM );
++usCount;
/* call function that will create either PUBLIC or PRIVATE variables */
@@ -2364,7 +2374,7 @@ void hb_compRTVariableKill( HB_COMP_DECL, PFUNCTION pFunc )
static HB_EXPR_PTR hb_compArrayDimPush( HB_EXPR_PTR pInitValue, HB_COMP_DECL )
{
USHORT uCount = (USHORT) hb_compExprListLen( pInitValue );
USHORT uCount = ( USHORT ) hb_compExprListLen( pInitValue );
if( uCount == 1 && hb_compExprIsInteger( pInitValue->value.asList.pExprList ) &&
hb_compExprAsInteger( pInitValue->value.asList.pExprList ) == 0 )
@@ -2397,10 +2407,10 @@ static void hb_compVariableDim( char * szName, HB_EXPR_PTR pInitValue, HB_COMP_D
hb_compStaticDefStart( HB_COMP_PARAM ); /* switch to statics pcode buffer */
/* create an array */
pInitValue = hb_compArrayDimPush( pInitValue, HB_COMP_PARAM );
/* now pop an array */
pVar = hb_compExprGenPop( pVar, HB_COMP_PARAM );
/* check if valid initializers were used but don't generate any code */
pAssign = hb_compExprAssignStatic( pVar, pInitValue, HB_COMP_PARAM );
/* now pop an array */
hb_compExprGenPop( pVar, HB_COMP_PARAM );
/* delete all used expressions */
HB_COMP_EXPR_DELETE( pAssign );
hb_compStaticDefEnd( HB_COMP_PARAM, szName );
@@ -2483,38 +2493,29 @@ BOOL hb_compForEachVarError( HB_COMP_DECL, char *szVarName )
static void hb_compForEnd( HB_COMP_DECL, char *szVar )
{
HB_ENUMERATOR_PTR pEnumVar;
HB_ENUMERATOR_PTR * pEnumVar;
HB_SYMBOL_UNUSED( szVar );
pEnumVar = HB_COMP_PARAM->functions.pLast->pEnum;
if( pEnumVar->pNext )
pEnumVar = &HB_COMP_PARAM->functions.pLast->pEnum;
if( *pEnumVar )
{
HB_ENUMERATOR_PTR pLast = pEnumVar;
while( pEnumVar->pNext )
{
pLast = pEnumVar;
pEnumVar = pEnumVar->pNext;
}
hb_xfree( pEnumVar );
pLast->pNext = NULL;
}
else
{
hb_xfree( pEnumVar );
HB_COMP_PARAM->functions.pLast->pEnum = NULL;
while( ( *pEnumVar )->pNext )
pEnumVar = &( *pEnumVar )->pNext;
hb_xfree( *pEnumVar );
*pEnumVar = NULL;
}
}
static HB_CARGO2_FUNC( hb_compEnumEvalStart )
{
char * szName = hb_compExprAsSymbol( (HB_EXPR_PTR)cargo );
char * szName = hb_compExprAsSymbol( ( HB_EXPR_PTR ) cargo );
if( szName )
hb_compForStart( HB_COMP_PARAM, szName, TRUE );
hb_compExprGenPush( (HB_EXPR_PTR)dummy, HB_COMP_PARAM ); /* expression */
hb_compExprGenPush( (HB_EXPR_PTR)cargo, HB_COMP_PARAM ); /* variable */
hb_compExprGenPush( ( HB_EXPR_PTR ) dummy, HB_COMP_PARAM ); /* expression */
hb_compExprGenPush( ( HB_EXPR_PTR ) cargo, HB_COMP_PARAM ); /* variable */
}
static void hb_compEnumStart( HB_COMP_DECL, HB_EXPR_PTR pVars, HB_EXPR_PTR pExprs, int descend )
@@ -2555,7 +2556,7 @@ static void hb_compEnumNext( HB_COMP_DECL, HB_EXPR_PTR pExpr, int descend )
static HB_CARGO_FUNC( hb_compEnumEvalEnd )
{
char * szName = hb_compExprAsSymbol( (HB_EXPR_PTR)cargo );
char * szName = hb_compExprAsSymbol( ( HB_EXPR_PTR ) cargo );
if( szName )
hb_compForEnd( HB_COMP_PARAM, szName );

View File

@@ -1078,15 +1078,15 @@ static const yytype_uint16 yyrline[] =
1434, 1437, 1441, 1445, 1448, 1454, 1461, 1462, 1465, 1465,
1468, 1469, 1477, 1478, 1477, 1489, 1490, 1489, 1502, 1502,
1502, 1504, 1504, 1509, 1514, 1508, 1528, 1537, 1541, 1542,
1546, 1558, 1563, 1545, 1604, 1605, 1608, 1609, 1612, 1620,
1621, 1622, 1623, 1626, 1627, 1630, 1631, 1634, 1635, 1638,
1639, 1644, 1650, 1659, 1643, 1679, 1680, 1684, 1683, 1696,
1703, 1711, 1712, 1716, 1715, 1725, 1726, 1735, 1735, 1738,
1738, 1741, 1743, 1746, 1746, 1746, 1751, 1759, 1770, 1780,
1750, 1811, 1812, 1815, 1816, 1824, 1825, 1828, 1837, 1838,
1839, 1842, 1853, 1871, 1872, 1876, 1875, 1883, 1882, 1893,
1894, 1897, 1898, 1899, 1900, 1901, 1904, 1905, 1906, 1907,
1908, 1912, 1911, 1934, 1935, 1938, 1939
1546, 1559, 1564, 1545, 1612, 1613, 1616, 1617, 1620, 1628,
1629, 1630, 1631, 1634, 1635, 1638, 1639, 1642, 1643, 1646,
1647, 1652, 1658, 1669, 1651, 1689, 1690, 1694, 1693, 1706,
1713, 1721, 1722, 1726, 1725, 1735, 1736, 1745, 1745, 1748,
1748, 1751, 1753, 1756, 1756, 1756, 1761, 1769, 1780, 1790,
1760, 1821, 1822, 1825, 1826, 1834, 1835, 1838, 1847, 1848,
1849, 1852, 1863, 1881, 1882, 1886, 1885, 1893, 1892, 1903,
1904, 1907, 1908, 1909, 1910, 1911, 1914, 1915, 1916, 1917,
1918, 1922, 1921, 1944, 1945, 1948, 1949
};
#endif
@@ -5510,7 +5510,7 @@ yyreduce:
case 317:
#line 885 "harbour.y"
{ (yyval.asExpr) = hb_compExprListStrip( (yyvsp[(1) - (1)].asExpr), NULL ); ;}
{ (yyval.asExpr) = hb_compExprListStrip( (yyvsp[(1) - (1)].asExpr), HB_COMP_PARAM ); ;}
break;
case 339:
@@ -6579,6 +6579,7 @@ yyreduce:
(yyvsp[(1) - (4)].lNumber) = HB_COMP_PARAM->currLine;
hb_compDebugStart();
++HB_COMP_PARAM->functions.pLast->wForCounter;
(yyvsp[(2) - (4)].asExpr) = hb_compExprReduce( (yyvsp[(2) - (4)].asExpr), HB_COMP_PARAM );
(yyval.asExpr) = hb_compExprGenPush( hb_compExprAssign( (yyvsp[(2) - (4)].asExpr), (yyvsp[(4) - (4)].asExpr), HB_COMP_PARAM ), HB_COMP_PARAM );
if( hb_compExprAsSymbol( (yyvsp[(2) - (4)].asExpr) ) )
{
@@ -6588,7 +6589,7 @@ yyreduce:
break;
case 551:
#line 1558 "harbour.y"
#line 1559 "harbour.y"
{ /* 9 */
hb_compLoopStart( HB_COMP_PARAM, TRUE );
(yyval.lNumber) = hb_compGenJump( 0, HB_COMP_PARAM );
@@ -6596,14 +6597,14 @@ yyreduce:
break;
case 552:
#line 1563 "harbour.y"
#line 1564 "harbour.y"
{ /* 11 */
(yyval.lNumber) = HB_COMP_PARAM->functions.pLast->lPCodePos;
;}
break;
case 553:
#line 1567 "harbour.y"
#line 1568 "harbour.y"
{
int iSign, iLine;
@@ -6614,18 +6615,28 @@ yyreduce:
hb_compLinePush( HB_COMP_PARAM );
HB_COMP_PARAM->currLine = iLine;
iSign = (yyvsp[(8) - (12)].asExpr) ? hb_compExprAsNumSign( (yyvsp[(8) - (12)].asExpr) ) : 1;
if( (yyvsp[(8) - (12)].asExpr) )
{
(yyvsp[(8) - (12)].asExpr) = hb_compExprReduce( (yyvsp[(8) - (12)].asExpr), HB_COMP_PARAM );
iSign = hb_compExprAsNumSign( (yyvsp[(8) - (12)].asExpr) );
HB_COMP_EXPR_CLEAR( hb_compExprGenPush( hb_compExprSetOperand( hb_compExprNewPlusEq( (yyvsp[(2) - (12)].asExpr), HB_COMP_PARAM ), (yyvsp[(8) - (12)].asExpr), HB_COMP_PARAM ), HB_COMP_PARAM ) );
else
HB_COMP_EXPR_CLEAR( hb_compExprGenPush( hb_compExprNewPreInc( (yyvsp[(2) - (12)].asExpr), HB_COMP_PARAM ), HB_COMP_PARAM ) );
hb_compGenJumpHere( ( ULONG ) (yyvsp[(9) - (12)].lNumber), HB_COMP_PARAM );
hb_compExprGenPush( (yyvsp[(7) - (12)].asExpr), HB_COMP_PARAM ); /* end */
if( iSign )
hb_compGenPCode1( iSign > 0 ? HB_P_GREATER : HB_P_LESS, HB_COMP_PARAM );
}
else
{
hb_compExprGenPush( (yyvsp[(8) - (12)].asExpr), HB_COMP_PARAM ); /* step */
iSign = 1;
HB_COMP_EXPR_CLEAR( hb_compExprGenPush( hb_compExprNewPreInc( (yyvsp[(2) - (12)].asExpr), HB_COMP_PARAM ), HB_COMP_PARAM ) );
}
hb_compGenJumpHere( ( ULONG ) (yyvsp[(9) - (12)].lNumber), HB_COMP_PARAM );
HB_COMP_EXPR_DELETE( hb_compExprGenPush( (yyvsp[(7) - (12)].asExpr), HB_COMP_PARAM ) ); /* end */
if( iSign )
{
hb_compGenPCode1( iSign > 0 ? HB_P_GREATER : HB_P_LESS, HB_COMP_PARAM );
if( (yyvsp[(8) - (12)].asExpr) )
HB_COMP_EXPR_DELETE( (yyvsp[(8) - (12)].asExpr) );
}
else
{
HB_COMP_EXPR_DELETE( hb_compExprGenPush( (yyvsp[(8) - (12)].asExpr), HB_COMP_PARAM ) ); /* step */
hb_compGenPCode1( HB_P_FORTEST, HB_COMP_PARAM );
}
@@ -6633,26 +6644,23 @@ yyreduce:
hb_compLoopEnd( HB_COMP_PARAM );
if( hb_compExprAsSymbol( (yyvsp[(2) - (12)].asExpr) ) )
hb_compForEnd( HB_COMP_PARAM, hb_compExprAsSymbol( (yyvsp[(2) - (12)].asExpr) ) );
HB_COMP_EXPR_DELETE( (yyvsp[(7) - (12)].asExpr) );
HB_COMP_EXPR_DELETE( (yyvsp[(5) - (12)].asExpr) ); /* deletes $5, $2, $4 */
if( (yyvsp[(8) - (12)].asExpr) )
HB_COMP_EXPR_DELETE( (yyvsp[(8) - (12)].asExpr) );
HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE );
;}
break;
case 556:
#line 1608 "harbour.y"
#line 1616 "harbour.y"
{ (yyval.asExpr) = NULL; ;}
break;
case 557:
#line 1609 "harbour.y"
#line 1617 "harbour.y"
{ (yyval.asExpr) = hb_compExprReduce( (yyvsp[(2) - (2)].asExpr), HB_COMP_PARAM ); ;}
break;
case 558:
#line 1613 "harbour.y"
#line 1621 "harbour.y"
{
hb_compLinePush( HB_COMP_PARAM );
if( HB_COMP_PARAM->functions.pLast->wForCounter )
@@ -6661,42 +6669,42 @@ yyreduce:
break;
case 563:
#line 1626 "harbour.y"
#line 1634 "harbour.y"
{ (yyval.asExpr) = hb_compExprNewVarRef( (yyvsp[(1) - (1)].string), HB_COMP_PARAM ); ;}
break;
case 564:
#line 1627 "harbour.y"
#line 1635 "harbour.y"
{ (yyval.asExpr) = hb_compExprNewRef( (yyvsp[(1) - (1)].asExpr), HB_COMP_PARAM ); ;}
break;
case 565:
#line 1630 "harbour.y"
{ (yyval.asExpr) = hb_compExprNewArgList( (yyvsp[(1) - (1)].asExpr), HB_COMP_PARAM ); ;}
break;
case 566:
#line 1631 "harbour.y"
{ (yyval.asExpr) = hb_compExprAddListExpr( (yyvsp[(1) - (3)].asExpr), (yyvsp[(3) - (3)].asExpr) ); ;}
break;
case 567:
#line 1634 "harbour.y"
{ (yyval.asExpr) = hb_compExprNewVarRef( (yyvsp[(2) - (2)].string), HB_COMP_PARAM ); ;}
break;
case 569:
#line 1638 "harbour.y"
{ (yyval.asExpr) = hb_compExprNewArgList( (yyvsp[(1) - (1)].asExpr), HB_COMP_PARAM ); ;}
break;
case 570:
case 566:
#line 1639 "harbour.y"
{ (yyval.asExpr) = hb_compExprAddListExpr( (yyvsp[(1) - (3)].asExpr), (yyvsp[(3) - (3)].asExpr) ); ;}
break;
case 567:
#line 1642 "harbour.y"
{ (yyval.asExpr) = hb_compExprNewVarRef( (yyvsp[(2) - (2)].string), HB_COMP_PARAM ); ;}
break;
case 569:
#line 1646 "harbour.y"
{ (yyval.asExpr) = hb_compExprNewArgList( (yyvsp[(1) - (1)].asExpr), HB_COMP_PARAM ); ;}
break;
case 570:
#line 1647 "harbour.y"
{ (yyval.asExpr) = hb_compExprAddListExpr( (yyvsp[(1) - (3)].asExpr), (yyvsp[(3) - (3)].asExpr) ); ;}
break;
case 571:
#line 1644 "harbour.y"
#line 1652 "harbour.y"
{
++HB_COMP_PARAM->functions.pLast->wForCounter; /* 5 */
hb_compLinePushIfInside( HB_COMP_PARAM );
@@ -6705,10 +6713,12 @@ yyreduce:
break;
case 572:
#line 1650 "harbour.y"
#line 1658 "harbour.y"
{
/* 7
*/
(yyvsp[(2) - (6)].asExpr) = hb_compExprReduce( (yyvsp[(2) - (6)].asExpr), HB_COMP_PARAM );
(yyvsp[(4) - (6)].asExpr) = hb_compExprReduce( (yyvsp[(4) - (6)].asExpr), HB_COMP_PARAM );
hb_compEnumStart( HB_COMP_PARAM, (yyvsp[(2) - (6)].asExpr), (yyvsp[(4) - (6)].asExpr), (yyvsp[(6) - (6)].iNumber) );
hb_compLoopStart( HB_COMP_PARAM, TRUE );
@@ -6717,7 +6727,7 @@ yyreduce:
break;
case 573:
#line 1659 "harbour.y"
#line 1669 "harbour.y"
{
/* 9
*/
@@ -6726,7 +6736,7 @@ yyreduce:
break;
case 574:
#line 1665 "harbour.y"
#line 1675 "harbour.y"
{
hb_compLoopHere( HB_COMP_PARAM );
hb_compEnumNext( HB_COMP_PARAM, (yyvsp[(2) - (10)].asExpr), (yyvsp[(6) - (10)].iNumber) );
@@ -6742,17 +6752,17 @@ yyreduce:
break;
case 575:
#line 1679 "harbour.y"
#line 1689 "harbour.y"
{ (yyval.iNumber) = 1; ;}
break;
case 576:
#line 1680 "harbour.y"
#line 1690 "harbour.y"
{ (yyval.iNumber) = -1; ;}
break;
case 577:
#line 1684 "harbour.y"
#line 1694 "harbour.y"
{
hb_compLoopStart( HB_COMP_PARAM, FALSE );
hb_compSwitchStart( HB_COMP_PARAM );
@@ -6761,7 +6771,7 @@ yyreduce:
break;
case 578:
#line 1691 "harbour.y"
#line 1701 "harbour.y"
{
hb_compSwitchEnd( HB_COMP_PARAM );
hb_compLoopEnd( HB_COMP_PARAM );
@@ -6769,14 +6779,14 @@ yyreduce:
break;
case 579:
#line 1698 "harbour.y"
#line 1708 "harbour.y"
{
hb_compGenPCode1( HB_P_POP, HB_COMP_PARAM );
;}
break;
case 580:
#line 1704 "harbour.y"
#line 1714 "harbour.y"
{
if( HB_COMP_PARAM->functions.pLast->wSwitchCounter )
--HB_COMP_PARAM->functions.pLast->wSwitchCounter;
@@ -6785,21 +6795,21 @@ yyreduce:
break;
case 583:
#line 1716 "harbour.y"
#line 1726 "harbour.y"
{ ++HB_COMP_PARAM->functions.pLast->wSwitchCounter;
hb_compLinePushIfInside( HB_COMP_PARAM );
;}
break;
case 584:
#line 1720 "harbour.y"
#line 1730 "harbour.y"
{
HB_COMP_EXPR_DELETE( hb_compExprGenPush( (yyvsp[(3) - (4)].asExpr), HB_COMP_PARAM ) );
;}
break;
case 586:
#line 1727 "harbour.y"
#line 1737 "harbour.y"
{
if( (yyvsp[(2) - (2)].lNumber) > 0 )
{
@@ -6809,27 +6819,27 @@ yyreduce:
break;
case 587:
#line 1735 "harbour.y"
#line 1745 "harbour.y"
{ hb_compSwitchAdd( HB_COMP_PARAM, (yyvsp[(2) - (2)].asExpr) ); hb_compLinePush( HB_COMP_PARAM ); ;}
break;
case 589:
#line 1738 "harbour.y"
#line 1748 "harbour.y"
{ hb_compSwitchAdd( HB_COMP_PARAM, (yyvsp[(3) - (3)].asExpr) ); hb_compLinePush( HB_COMP_PARAM ); ;}
break;
case 593:
#line 1746 "harbour.y"
#line 1756 "harbour.y"
{ hb_compSwitchAdd( HB_COMP_PARAM, NULL ); hb_compLinePush( HB_COMP_PARAM ); ;}
break;
case 594:
#line 1746 "harbour.y"
#line 1756 "harbour.y"
{ HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_BREAK_CODE; ;}
break;
case 596:
#line 1751 "harbour.y"
#line 1761 "harbour.y"
{ /* 2 */
hb_compLinePushIfInside( HB_COMP_PARAM );
++HB_COMP_PARAM->functions.pLast->wSeqCounter;
@@ -6838,7 +6848,7 @@ yyreduce:
break;
case 597:
#line 1759 "harbour.y"
#line 1769 "harbour.y"
{ /* 6 */
/* Set jump address for HB_P_SEQBEGIN opcode - this address
* will be used in BREAK code if there is no RECOVER clause
@@ -6852,7 +6862,7 @@ yyreduce:
break;
case 598:
#line 1770 "harbour.y"
#line 1780 "harbour.y"
{ /* 8 */
/* Replace END address with RECOVER address in
* HB_P_SEQBEGIN opcode if there is RECOVER clause
@@ -6865,7 +6875,7 @@ yyreduce:
break;
case 599:
#line 1780 "harbour.y"
#line 1790 "harbour.y"
{ /* 10 */
long lLoopCount = hb_compLoopCount( HB_COMP_PARAM );
HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE );
@@ -6897,12 +6907,12 @@ yyreduce:
break;
case 603:
#line 1815 "harbour.y"
#line 1825 "harbour.y"
{ (yyval.lNumber) = 0; ;}
break;
case 604:
#line 1817 "harbour.y"
#line 1827 "harbour.y"
{
HB_COMP_EXPR_DELETE( hb_compExprGenPush( (yyvsp[(2) - (2)].asExpr), HB_COMP_PARAM ) );
hb_compGenPCode1( HB_P_SEQBLOCK, HB_COMP_PARAM );
@@ -6911,12 +6921,12 @@ yyreduce:
break;
case 605:
#line 1824 "harbour.y"
#line 1834 "harbour.y"
{ (yyval.lNumber) = 0; ;}
break;
case 607:
#line 1829 "harbour.y"
#line 1839 "harbour.y"
{
HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE );
(yyval.lNumber) = HB_COMP_PARAM->functions.pLast->lPCodePos;
@@ -6926,12 +6936,12 @@ yyreduce:
break;
case 608:
#line 1837 "harbour.y"
#line 1847 "harbour.y"
{ (yyval.lNumber) = 0; HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_BREAK_CODE; ;}
break;
case 611:
#line 1843 "harbour.y"
#line 1853 "harbour.y"
{
HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_BREAK_CODE;
(yyval.lNumber) = HB_COMP_PARAM->functions.pLast->lPCodePos;
@@ -6943,7 +6953,7 @@ yyreduce:
break;
case 612:
#line 1854 "harbour.y"
#line 1864 "harbour.y"
{
HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_BREAK_CODE;
(yyval.lNumber) = HB_COMP_PARAM->functions.pLast->lPCodePos;
@@ -6956,12 +6966,12 @@ yyreduce:
break;
case 615:
#line 1876 "harbour.y"
#line 1886 "harbour.y"
{ (yyval.bTrue) = HB_COMP_PARAM->iPassByRef;HB_COMP_PARAM->iPassByRef=HB_PASSBYREF_FUNCALL; ;}
break;
case 616:
#line 1878 "harbour.y"
#line 1888 "harbour.y"
{
(yyval.asExpr) = hb_compExprNewFunCall( (yyvsp[(2) - (4)].asExpr), (yyvsp[(4) - (4)].asExpr), HB_COMP_PARAM );
HB_COMP_PARAM->iPassByRef = (yyvsp[(3) - (4)].bTrue);
@@ -6969,12 +6979,12 @@ yyreduce:
break;
case 617:
#line 1883 "harbour.y"
#line 1893 "harbour.y"
{ (yyval.bTrue) = HB_COMP_PARAM->iPassByRef;HB_COMP_PARAM->iPassByRef=HB_PASSBYREF_FUNCALL; ;}
break;
case 618:
#line 1885 "harbour.y"
#line 1895 "harbour.y"
{
hb_compAutoOpenAdd( HB_COMP_PARAM, (yyvsp[(1) - (3)].string) );
/* DOIDENT is the only one identifier which can be returned in lower letters */
@@ -6984,47 +6994,47 @@ yyreduce:
break;
case 619:
#line 1893 "harbour.y"
#line 1903 "harbour.y"
{ (yyval.asExpr) = NULL; ;}
break;
case 620:
#line 1894 "harbour.y"
#line 1904 "harbour.y"
{ (yyval.asExpr) = (yyvsp[(2) - (2)].asExpr); ;}
break;
case 621:
#line 1897 "harbour.y"
#line 1907 "harbour.y"
{ (yyval.asExpr) = hb_compExprAddListExpr( hb_compExprNewArgList( hb_compExprNewNil( HB_COMP_PARAM ), HB_COMP_PARAM ), hb_compExprNewNil( HB_COMP_PARAM ) ); ;}
break;
case 622:
#line 1898 "harbour.y"
#line 1908 "harbour.y"
{ (yyval.asExpr) = hb_compExprAddListExpr( hb_compExprNewArgList( hb_compExprNewNil( HB_COMP_PARAM ), HB_COMP_PARAM ), (yyvsp[(2) - (2)].asExpr) ); ;}
break;
case 623:
#line 1899 "harbour.y"
#line 1909 "harbour.y"
{ (yyval.asExpr) = hb_compExprNewArgList( (yyvsp[(1) - (1)].asExpr), HB_COMP_PARAM ); ;}
break;
case 624:
#line 1900 "harbour.y"
#line 1910 "harbour.y"
{ (yyval.asExpr) = hb_compExprAddListExpr( (yyvsp[(1) - (2)].asExpr), hb_compExprNewNil( HB_COMP_PARAM ) ); ;}
break;
case 625:
#line 1901 "harbour.y"
#line 1911 "harbour.y"
{ (yyval.asExpr) = hb_compExprAddListExpr( (yyvsp[(1) - (3)].asExpr), (yyvsp[(3) - (3)].asExpr) ); ;}
break;
case 626:
#line 1904 "harbour.y"
#line 1914 "harbour.y"
{ (yyval.asExpr) = hb_compExprNewVarRef( (yyvsp[(1) - (1)].string), HB_COMP_PARAM ); ;}
break;
case 631:
#line 1912 "harbour.y"
#line 1922 "harbour.y"
{
hb_compLinePushIfInside( HB_COMP_PARAM );
HB_COMP_EXPR_DELETE( hb_compExprGenPush( (yyvsp[(2) - (3)].asExpr), HB_COMP_PARAM ) );
@@ -7035,7 +7045,7 @@ yyreduce:
break;
case 632:
#line 1921 "harbour.y"
#line 1931 "harbour.y"
{ if( HB_COMP_PARAM->functions.pLast->wWithObjectCnt )
--HB_COMP_PARAM->functions.pLast->wWithObjectCnt;
if( (yyvsp[(5) - (6)].lNumber) )
@@ -7050,13 +7060,13 @@ yyreduce:
break;
case 635:
#line 1938 "harbour.y"
#line 1948 "harbour.y"
{ HB_COMP_PARAM->fError = FALSE; ;}
break;
/* Line 1268 of yacc.c. */
#line 7060 "harboury.c"
#line 7070 "harboury.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -7275,7 +7285,7 @@ yyreturn:
}
#line 1942 "harbour.y"
#line 1952 "harbour.y"
/*
@@ -7657,11 +7667,11 @@ static void hb_compRTVariableGen( HB_COMP_DECL, char * szCreateFun )
/* push variable names to create */
while( pVar->pNext )
{
hb_compExprGenPush( pVar->pVar, HB_COMP_PARAM );
pVar->pVar = hb_compExprGenPush( pVar->pVar, HB_COMP_PARAM );
pVar = pVar->pNext;
++usCount;
}
hb_compExprGenPush( pVar->pVar, HB_COMP_PARAM );
pVar->pVar = hb_compExprGenPush( pVar->pVar, HB_COMP_PARAM );
++usCount;
/* call function that will create either PUBLIC or PRIVATE variables */
@@ -7701,7 +7711,7 @@ void hb_compRTVariableKill( HB_COMP_DECL, PFUNCTION pFunc )
static HB_EXPR_PTR hb_compArrayDimPush( HB_EXPR_PTR pInitValue, HB_COMP_DECL )
{
USHORT uCount = (USHORT) hb_compExprListLen( pInitValue );
USHORT uCount = ( USHORT ) hb_compExprListLen( pInitValue );
if( uCount == 1 && hb_compExprIsInteger( pInitValue->value.asList.pExprList ) &&
hb_compExprAsInteger( pInitValue->value.asList.pExprList ) == 0 )
@@ -7734,10 +7744,10 @@ static void hb_compVariableDim( char * szName, HB_EXPR_PTR pInitValue, HB_COMP_D
hb_compStaticDefStart( HB_COMP_PARAM ); /* switch to statics pcode buffer */
/* create an array */
pInitValue = hb_compArrayDimPush( pInitValue, HB_COMP_PARAM );
/* now pop an array */
pVar = hb_compExprGenPop( pVar, HB_COMP_PARAM );
/* check if valid initializers were used but don't generate any code */
pAssign = hb_compExprAssignStatic( pVar, pInitValue, HB_COMP_PARAM );
/* now pop an array */
hb_compExprGenPop( pVar, HB_COMP_PARAM );
/* delete all used expressions */
HB_COMP_EXPR_DELETE( pAssign );
hb_compStaticDefEnd( HB_COMP_PARAM, szName );
@@ -7820,38 +7830,29 @@ BOOL hb_compForEachVarError( HB_COMP_DECL, char *szVarName )
static void hb_compForEnd( HB_COMP_DECL, char *szVar )
{
HB_ENUMERATOR_PTR pEnumVar;
HB_ENUMERATOR_PTR * pEnumVar;
HB_SYMBOL_UNUSED( szVar );
pEnumVar = HB_COMP_PARAM->functions.pLast->pEnum;
if( pEnumVar->pNext )
pEnumVar = &HB_COMP_PARAM->functions.pLast->pEnum;
if( *pEnumVar )
{
HB_ENUMERATOR_PTR pLast = pEnumVar;
while( pEnumVar->pNext )
{
pLast = pEnumVar;
pEnumVar = pEnumVar->pNext;
}
hb_xfree( pEnumVar );
pLast->pNext = NULL;
}
else
{
hb_xfree( pEnumVar );
HB_COMP_PARAM->functions.pLast->pEnum = NULL;
while( ( *pEnumVar )->pNext )
pEnumVar = &( *pEnumVar )->pNext;
hb_xfree( *pEnumVar );
*pEnumVar = NULL;
}
}
static HB_CARGO2_FUNC( hb_compEnumEvalStart )
{
char * szName = hb_compExprAsSymbol( (HB_EXPR_PTR)cargo );
char * szName = hb_compExprAsSymbol( ( HB_EXPR_PTR ) cargo );
if( szName )
hb_compForStart( HB_COMP_PARAM, szName, TRUE );
hb_compExprGenPush( (HB_EXPR_PTR)dummy, HB_COMP_PARAM ); /* expression */
hb_compExprGenPush( (HB_EXPR_PTR)cargo, HB_COMP_PARAM ); /* variable */
hb_compExprGenPush( ( HB_EXPR_PTR ) dummy, HB_COMP_PARAM ); /* expression */
hb_compExprGenPush( ( HB_EXPR_PTR ) cargo, HB_COMP_PARAM ); /* variable */
}
static void hb_compEnumStart( HB_COMP_DECL, HB_EXPR_PTR pVars, HB_EXPR_PTR pExprs, int descend )
@@ -7892,7 +7893,7 @@ static void hb_compEnumNext( HB_COMP_DECL, HB_EXPR_PTR pExpr, int descend )
static HB_CARGO_FUNC( hb_compEnumEvalEnd )
{
char * szName = hb_compExprAsSymbol( (HB_EXPR_PTR)cargo );
char * szName = hb_compExprAsSymbol( ( HB_EXPR_PTR ) cargo );
if( szName )
hb_compForEnd( HB_COMP_PARAM, szName );