2012-10-24 20:31 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)

* harbour/src/compiler/complex.c
    ! fixed lexer to correctly recognize ::msg as FOR iterator

  * harbour/include/hbexprb.c
    ! fixed compile time GPF in code like:
         QOut( @1-VAR )
This commit is contained in:
Przemyslaw Czerpak
2012-10-24 18:31:44 +00:00
parent 513eaff415
commit c94b8e5f39
3 changed files with 25 additions and 11 deletions

View File

@@ -16,6 +16,14 @@
The license applies to all entries newer than 2009-04-28.
*/
2012-10-24 20:31 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* harbour/src/compiler/complex.c
! fixed lexer to correctly recognize ::msg as FOR iterator
* harbour/include/hbexprb.c
! fixed compile time GPF in code like:
QOut( @1-VAR )
2012-10-24 18:50 UTC+0200 Viktor Szakats (harbour syenar.net)
* utils/hbmk2/hbmk2.1
* utils/hbmk2/hbmk2.es_PE.po

View File

@@ -859,6 +859,7 @@ static HB_EXPR_FUNC( hb_compExprUseRef )
else if( pExp->ExprType == HB_ET_ALIASVAR )
{
if( pExp->value.asAlias.pVar->ExprType == HB_ET_VARIABLE &&
pExp->value.asAlias.pAlias->ExprType == HB_ET_ALIAS &&
hb_compExprIsMemvarAlias( pExp->value.asAlias.pAlias->value.asSymbol.name ) )
{ /* @M-> @MEMVAR-> or @MEMVA-> or @MEMV-> */
HB_GEN_FUNC1( PushMemvarRef, pExp->value.asAlias.pVar->value.asSymbol.name );
@@ -1426,6 +1427,7 @@ static HB_EXPR_FUNC( hb_compExprUseArrayAt )
}
else if( pList->ExprType == HB_ET_ALIASVAR &&
pList->value.asAlias.pVar->ExprType == HB_ET_VARIABLE &&
pList->value.asAlias.pAlias->ExprType == HB_ET_ALIAS &&
hb_compExprIsMemvarAlias( pList->value.asAlias.pAlias->value.asSymbol.name ) )
{
HB_GEN_FUNC1( PushMemvarRef, pList->value.asAlias.pVar->value.asSymbol.name );
@@ -1507,6 +1509,7 @@ static HB_EXPR_FUNC( hb_compExprUseArrayAt )
}
else if( pList->ExprType == HB_ET_ALIASVAR &&
pList->value.asAlias.pVar->ExprType == HB_ET_VARIABLE &&
pList->value.asAlias.pAlias->ExprType == HB_ET_ALIAS &&
hb_compExprIsMemvarAlias( pList->value.asAlias.pAlias->value.asSymbol.name ) )
{
HB_GEN_FUNC1( PushMemvarRef, pList->value.asAlias.pVar->value.asSymbol.name );

View File

@@ -1038,23 +1038,26 @@ int hb_comp_yylex( YYSTYPE *yylval_ptr, HB_COMP_DECL )
case FOR:
if( pLex->iState == LOOKUP &&
!HB_PP_TOKEN_ISEOC( pToken->pNext ) &&
( HB_PP_TOKEN_TYPE( pToken->pNext->type ) == HB_PP_TOKEN_KEYWORD ||
/* Clipper always assume FOR (somevar):=1 TO ... here */
HB_PP_TOKEN_TYPE( pToken->pNext->type ) == HB_PP_TOKEN_LEFT_PB ) )
!HB_PP_TOKEN_ISEOC( pToken->pNext ) )
{
if( pToken->pNext->pNext &&
HB_PP_TOKEN_TYPE( pToken->pNext->pNext->type ) != HB_PP_TOKEN_ASSIGN &&
HB_PP_TOKEN_TYPE( pToken->pNext->pNext->type ) != HB_PP_TOKEN_EQ &&
HB_PP_TOKEN_TYPE( pToken->pNext->type ) == HB_PP_TOKEN_KEYWORD &&
hb_stricmp( "EACH", pToken->pNext->value ) == 0 )
PHB_PP_TOKEN pNext = pToken->pNext;
if( HB_PP_TOKEN_TYPE( pNext->type ) == HB_PP_TOKEN_KEYWORD &&
pNext->pNext &&
HB_PP_TOKEN_TYPE( pNext->pNext->type ) == HB_PP_TOKEN_KEYWORD &&
hb_stricmp( "EACH", pNext->value ) == 0 )
{
hb_pp_tokenGet( pLex->pPP );
pLex->iState = FOREACH;
return FOREACH;
}
pLex->iState = FOR;
return FOR;
if( !hb_pp_tokenNextExp( &pNext ) && pNext &&
HB_PP_TOKEN_TYPE( pNext->type ) == HB_PP_TOKEN_KEYWORD &&
hb_stricmp( "TO", pNext->value ) == 0 )
{
pLex->iState = FOR;
return FOR;
}
}
iType = IDENTIFIER;
break;