2010-12-08 12:20 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/src/compiler/complex.c
    ! fixed condition used in some seldom places to convert expressions
      inside square brackets [] to strings, i.e.:
         FOR EACH c IN [abc]
            ? c
         NEXT
    * keep Clipper restrictions for FUNCTION and PROCEDURE keywords
      covered by -kc switch
This commit is contained in:
Przemyslaw Czerpak
2010-12-08 11:20:15 +00:00
parent 78ac191191
commit 0823337f39
2 changed files with 48 additions and 29 deletions

View File

@@ -16,6 +16,16 @@
The license applies to all entries newer than 2009-04-28.
*/
2010-12-08 12:20 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/compiler/complex.c
! fixed condition used in some seldom places to convert expressions
inside square brackets [] to strings, i.e.:
FOR EACH c IN [abc]
? c
NEXT
* keep Clipper restrictions for FUNCTION and PROCEDURE keywords
covered by -kc switch
2010-12-06 22:53 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbhpdf/harupdf.ch
+ Added HPDF_PRINT_SCALING_NONE.

View File

@@ -591,9 +591,11 @@ int hb_comp_yylex( YYSTYPE *yylval_ptr, HB_COMP_DECL )
case CASE:
case BREAK:
case RETURN:
case IN:
case WITH:
case WHILE:
case DECLARE_TYPE:
case DOSWITCH:
case WITHOBJECT:
pLex->iState = LITERAL;
hb_pp_tokenToString( pLex->pPP, pToken );
pLex->lasttok = hb_comp_tokenString( yylval_ptr, HB_COMP_PARAM,
@@ -785,20 +787,15 @@ int hb_comp_yylex( YYSTYPE *yylval_ptr, HB_COMP_DECL )
{
case FUNCTION:
case PROCEDURE:
if( HB_SUPPORT_HARBOUR && ( pLex->iState != LOOKUP ||
( !HB_PP_TOKEN_ISEOC( pToken->pNext ) &&
HB_PP_LEX_NEEDLEFT( pToken->pNext ) ) ) &&
pLex->iState != INIT && pLex->iState != EXIT &&
pLex->iState != STATIC )
if( HB_SUPPORT_HARBOUR &&
( ( pLex->iState != LOOKUP && pLex->iState != STATIC &&
pLex->iState != INIT && pLex->iState != EXIT ) ||
HB_PP_TOKEN_ISEOC( pToken->pNext ) ||
HB_PP_TOKEN_TYPE( pToken->pNext->type ) != HB_PP_TOKEN_KEYWORD ) )
{
iType = IDENTIFIER;
break;
}
/* Clipper accepts FUNCTION and PROCEDURE in one context only */
if( !pToken->pNext ||
HB_PP_TOKEN_TYPE( pToken->pNext->type ) != HB_PP_TOKEN_KEYWORD )
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E',
HB_COMP_ERR_SYNTAX, pToken->value, NULL );
pLex->iState = iType;
return pLex->iState;
@@ -810,7 +807,8 @@ int hb_comp_yylex( YYSTYPE *yylval_ptr, HB_COMP_DECL )
hb_strnicmp( "SEQUENCE", pToken->pNext->value, pToken->pNext->len ) == 0 )
{
hb_pp_tokenGet( pLex->pPP );
break;
pLex->iState = BEGINSEQ;
return BEGINSEQ;
}
}
iType = IDENTIFIER;
@@ -1207,7 +1205,8 @@ int hb_comp_yylex( YYSTYPE *yylval_ptr, HB_COMP_DECL )
}
else if( pLex->iState == MACROVAR ||
pLex->iState == MACROTEXT ||
pLex->iState == IDENTIFIER )
pLex->iState == IDENTIFIER ||
pLex->iState == BEGINSEQ )
{
pLex->iState = WITH;
return WITH;
@@ -1221,7 +1220,8 @@ int hb_comp_yylex( YYSTYPE *yylval_ptr, HB_COMP_DECL )
( !HB_SUPPORT_HARBOUR && HB_PP_TOKEN_ISEOC( pToken->pNext ) ) )
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E',
HB_COMP_ERR_SYNTAX, "IIF", NULL );
else if( HB_PP_TOKEN_TYPE( pToken->pNext->type ) == HB_PP_TOKEN_LEFT_PB )
else if( pToken->pNext &&
HB_PP_TOKEN_TYPE( pToken->pNext->type ) == HB_PP_TOKEN_LEFT_PB )
{
pLex->iState = IIF;
return IIF;
@@ -1230,7 +1230,7 @@ int hb_comp_yylex( YYSTYPE *yylval_ptr, HB_COMP_DECL )
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E',
HB_COMP_ERR_SYNTAX, pToken->pNext->value, NULL );
else
iType = IDENTIFIER;
iType = IDENTIFIER;
break;
case IF:
@@ -1238,7 +1238,8 @@ int hb_comp_yylex( YYSTYPE *yylval_ptr, HB_COMP_DECL )
( !HB_SUPPORT_HARBOUR && HB_PP_TOKEN_ISEOC( pToken->pNext ) ) )
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E',
HB_COMP_ERR_SYNTAX, "IF", NULL );
else if( HB_PP_TOKEN_TYPE( pToken->pNext->type ) == HB_PP_TOKEN_LEFT_PB )
else if( pToken->pNext &&
HB_PP_TOKEN_TYPE( pToken->pNext->type ) == HB_PP_TOKEN_LEFT_PB )
{
if( pLex->iState == LOOKUP )
{
@@ -1355,9 +1356,8 @@ int hb_comp_yylex( YYSTYPE *yylval_ptr, HB_COMP_DECL )
iType = IDENTIFIER;
break;
case EXIT:
case STATIC:
if( pLex->iState == LOOKUP )
case IN:
if( pLex->iState == IDENTIFIER )
{
pLex->iState = iType;
return iType;
@@ -1368,20 +1368,29 @@ int hb_comp_yylex( YYSTYPE *yylval_ptr, HB_COMP_DECL )
if( pLex->iState == DECLARE_TYPE )
iType = IDENTIFIER;
break;
case IN:
case EXIT:
case LOOP:
case STEP:
case TO:
case LOCAL:
case STATIC:
case MEMVAR:
case PUBLIC:
case PRIVATE:
case PARAMETERS:
case EXTERN:
case DYNAMIC:
case ANNOUNCE:
if( pLex->iState == LOOKUP )
{
pLex->iState = iType;
return iType;
}
break;
case TO:
case STEP:
case OPTIONAL:
case DESCEND:
case DYNAMIC:
case EXTERN:
case LOCAL:
case MEMVAR:
case PARAMETERS:
case PRIVATE:
case PUBLIC:
break;
}
pLex->iState = IDENTIFIER;