2007-07-02 18:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/macro/macro.yyc
* harbour/source/macro/macro.y
* harbour/source/macro/macrolex.c
! allow to use 'FIELD' and '_FIELD' as variable/function/field name.
* allow to use 'IF' and 'IIF' as variable/field name.
This commit is contained in:
@@ -8,6 +8,13 @@
|
||||
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2007-07-02 18:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/source/macro/macro.yyc
|
||||
* harbour/source/macro/macro.y
|
||||
* harbour/source/macro/macrolex.c
|
||||
! allow to use 'FIELD' and '_FIELD' as variable/function/field name.
|
||||
* allow to use 'IF' and 'IIF' as variable/field name.
|
||||
|
||||
2007-07-02 17:16 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/common.mak
|
||||
* harbour/source/rtl/Makefile
|
||||
|
||||
@@ -917,13 +917,22 @@ int hb_macrolex( YYSTYPE *yylval_ptr, HB_MACRO_PTR pMacro )
|
||||
switch( HB_PP_TOKEN_TYPE( pToken->type ) )
|
||||
{
|
||||
case HB_PP_TOKEN_KEYWORD:
|
||||
if( pToken->len >= 4 && pToken->len <= 6 &&
|
||||
if( pToken->len >= 4 && pToken->len <= 6 && pToken->pNext &&
|
||||
HB_PP_TOKEN_TYPE( pToken->pNext->type ) == HB_PP_TOKEN_ALIAS &&
|
||||
( hb_strnicmp( "_FILED", pToken->value, pToken->len ) == 0 ||
|
||||
hb_strnicmp( "FILED", pToken->value, pToken->len ) == 0 ) )
|
||||
{
|
||||
return FIELD;
|
||||
else if( pToken->len == 3 && hb_stricmp( "IIF", pToken->value ) == 0 )
|
||||
}
|
||||
else if( pToken->len == 3 && pToken->pNext &&
|
||||
HB_PP_TOKEN_TYPE( pToken->pNext->type ) == HB_PP_TOKEN_LEFT_PB &&
|
||||
hb_stricmp( "IIF", pToken->value ) == 0 )
|
||||
{
|
||||
return IIF;
|
||||
else if( pToken->len == 2 && hb_stricmp( "IF", pToken->value ) == 0 )
|
||||
}
|
||||
else if( pToken->len == 2 && pToken->pNext &&
|
||||
HB_PP_TOKEN_TYPE( pToken->pNext->type ) == HB_PP_TOKEN_LEFT_PB &&
|
||||
hb_stricmp( "IF", pToken->value ) == 0 )
|
||||
return IIF;
|
||||
else if( pToken->len == 3 && hb_stricmp( "NIL", pToken->value ) == 0 )
|
||||
return NIL;
|
||||
|
||||
@@ -3321,13 +3321,22 @@ int hb_macrolex( YYSTYPE *yylval_ptr, HB_MACRO_PTR pMacro )
|
||||
switch( HB_PP_TOKEN_TYPE( pToken->type ) )
|
||||
{
|
||||
case HB_PP_TOKEN_KEYWORD:
|
||||
if( pToken->len >= 4 && pToken->len <= 6 &&
|
||||
if( pToken->len >= 4 && pToken->len <= 6 && pToken->pNext &&
|
||||
HB_PP_TOKEN_TYPE( pToken->pNext->type ) == HB_PP_TOKEN_ALIAS &&
|
||||
( hb_strnicmp( "_FILED", pToken->value, pToken->len ) == 0 ||
|
||||
hb_strnicmp( "FILED", pToken->value, pToken->len ) == 0 ) )
|
||||
{
|
||||
return FIELD;
|
||||
else if( pToken->len == 3 && hb_stricmp( "IIF", pToken->value ) == 0 )
|
||||
}
|
||||
else if( pToken->len == 3 && pToken->pNext &&
|
||||
HB_PP_TOKEN_TYPE( pToken->pNext->type ) == HB_PP_TOKEN_LEFT_PB &&
|
||||
hb_stricmp( "IIF", pToken->value ) == 0 )
|
||||
{
|
||||
return IIF;
|
||||
else if( pToken->len == 2 && hb_stricmp( "IF", pToken->value ) == 0 )
|
||||
}
|
||||
else if( pToken->len == 2 && pToken->pNext &&
|
||||
HB_PP_TOKEN_TYPE( pToken->pNext->type ) == HB_PP_TOKEN_LEFT_PB &&
|
||||
hb_stricmp( "IF", pToken->value ) == 0 )
|
||||
return IIF;
|
||||
else if( pToken->len == 3 && hb_stricmp( "NIL", pToken->value ) == 0 )
|
||||
return NIL;
|
||||
|
||||
@@ -111,6 +111,14 @@ void hb_macroLexDelete( HB_MACRO_PTR pMacro )
|
||||
}
|
||||
}
|
||||
|
||||
static void hb_lexSkipBlank( PHB_MACRO_LEX pLex )
|
||||
{
|
||||
while( pLex->ulSrc < pLex->ulLen &&
|
||||
( pLex->pString[ pLex->ulSrc ] == ' ' ||
|
||||
pLex->pString[ pLex->ulSrc ] == '\t' ) )
|
||||
pLex->ulSrc++;
|
||||
}
|
||||
|
||||
static void hb_lexIdentCopy( PHB_MACRO_LEX pLex )
|
||||
{
|
||||
while( pLex->ulSrc < pLex->ulLen )
|
||||
@@ -615,14 +623,24 @@ int hb_macrolex( YYSTYPE *yylval_ptr, HB_MACRO_PTR pMacro )
|
||||
{
|
||||
if( yylval_ptr->string[ 0 ] == 'I' &&
|
||||
yylval_ptr->string[ 1 ] == 'F' )
|
||||
return IIF;
|
||||
{
|
||||
hb_lexSkipBlank( pLex );
|
||||
if( pLex->ulSrc < pLex->ulLen &&
|
||||
pLex->pString[ pLex->ulSrc ] == '(' )
|
||||
return IIF;
|
||||
}
|
||||
}
|
||||
else if( ulLen == 3 )
|
||||
{
|
||||
if( yylval_ptr->string[ 0 ] == 'I' &&
|
||||
yylval_ptr->string[ 1 ] == 'I' &&
|
||||
yylval_ptr->string[ 2 ] == 'F' )
|
||||
return IIF;
|
||||
{
|
||||
hb_lexSkipBlank( pLex );
|
||||
if( pLex->ulSrc < pLex->ulLen &&
|
||||
pLex->pString[ pLex->ulSrc ] == '(' )
|
||||
return IIF;
|
||||
}
|
||||
else if( yylval_ptr->string[ 0 ] == 'N' &&
|
||||
yylval_ptr->string[ 1 ] == 'I' &&
|
||||
yylval_ptr->string[ 2 ] == 'L' )
|
||||
@@ -635,21 +653,30 @@ int hb_macrolex( YYSTYPE *yylval_ptr, HB_MACRO_PTR pMacro )
|
||||
case '_':
|
||||
if( ulLen <= 6 && memcmp( "FIELD", yylval_ptr->string + 1,
|
||||
ulLen - 1 ) == 0 )
|
||||
{
|
||||
hb_lexSkipBlank( pLex );
|
||||
if( pLex->ulSrc + 1 < pLex->ulLen &&
|
||||
pLex->pString[ pLex->ulSrc ] == '-' &&
|
||||
pLex->pString[ pLex->ulSrc + 1 ] == '>' )
|
||||
return FIELD;
|
||||
}
|
||||
break;
|
||||
case 'F':
|
||||
if( ulLen <= 5 && memcmp( "IELD", yylval_ptr->string + 1,
|
||||
ulLen - 1 ) == 0 )
|
||||
{
|
||||
hb_lexSkipBlank( pLex );
|
||||
if( pLex->ulSrc + 1 < pLex->ulLen &&
|
||||
pLex->pString[ pLex->ulSrc ] == '-' &&
|
||||
pLex->pString[ pLex->ulSrc + 1 ] == '>' )
|
||||
return FIELD;
|
||||
}
|
||||
break;
|
||||
case 'Q':
|
||||
if( ulLen == 5 && memcmp( "SELF", yylval_ptr->string + 1,
|
||||
ulLen - 1 ) == 0 )
|
||||
4 ) == 0 )
|
||||
{
|
||||
while( pLex->ulSrc < pLex->ulLen &&
|
||||
( pLex->pString[ pLex->ulSrc ] == ' ' ||
|
||||
pLex->pString[ pLex->ulSrc ] == '\t' ) )
|
||||
pLex->ulSrc++;
|
||||
hb_lexSkipBlank( pLex );
|
||||
if( pLex->ulSrc < pLex->ulLen &&
|
||||
pLex->pString[ pLex->ulSrc ] == '(' )
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user