2007-03-01 01:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbclass.ch
* cleaned scope error message
* harbour/include/hbpp.h
* harbour/source/pp/ppcore.c
* added hack for accepting expressions which start with ':' character
as regular/list match markers
This commit is contained in:
@@ -8,6 +8,15 @@
|
||||
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2007-03-01 01:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/include/hbclass.ch
|
||||
* cleaned scope error message
|
||||
|
||||
* harbour/include/hbpp.h
|
||||
* harbour/source/pp/ppcore.c
|
||||
* added hack for accepting expressions which start with ':' character
|
||||
as regular/list match markers
|
||||
|
||||
2007-02-28 08:10 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/include/hbpp.h
|
||||
* harbour/source/compiler/complex.c
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
#ifdef HB_CLS_NO_OO_ERR
|
||||
#xtranslate __HB_CLS_ERR([<msg,...>]) =>
|
||||
#else
|
||||
#xtranslate __HB_CLS_ERR([<msg,...>]) => ;#error [ <msg>] ; #undef _DUMMY_DEF_
|
||||
#xtranslate __HB_CLS_ERR([<msg,...>]) => ;#error [ <msg>] ; #line
|
||||
#endif
|
||||
|
||||
#xtranslate __HB_CLS_VARERR(<var>) => __HB_CLS_ERR( Invalid instance variable name: <var> )
|
||||
@@ -229,7 +229,7 @@ DECLARE HBClass ;
|
||||
iif( <export>, HB_OO_CLSTP_EXPORTED , ;
|
||||
iif( <protect>, HB_OO_CLSTP_PROTECTED, ;
|
||||
iif( <hidde>, HB_OO_CLSTP_HIDDEN, nScope ) ) ) */
|
||||
#xtranslate __HB_CLS_SCOPE( <x,...> ) => __HB_CLS_ERR( Can not use multiple scope qualifiers! )
|
||||
#xtranslate __HB_CLS_SCOPE( <x,...> ) => ) __HB_CLS_ERR( Can not use multiple scope qualifiers! )
|
||||
#xtranslate __HB_CLS_SCOPE( .T., .F., .F. ) => HB_OO_CLSTP_EXPORTED
|
||||
#xtranslate __HB_CLS_SCOPE( .F., .T., .F. ) => HB_OO_CLSTP_PROTECTED
|
||||
#xtranslate __HB_CLS_SCOPE( .F., .F., .T. ) => HB_OO_CLSTP_HIDDEN
|
||||
@@ -266,16 +266,9 @@ DECLARE HBClass ;
|
||||
static <type> __HB_CLS_MTHNAME <ClassName> <MethodName> ;;
|
||||
local Self AS CLASS <ClassName> := QSelf() AS CLASS <ClassName>
|
||||
|
||||
#ifdef __XHARBOUR__
|
||||
#xcommand __HB_CLS_DECLARE_METHOD <MethodName> <ClassName> => ;
|
||||
#xcommand METHOD \<type: FUNCTION, PROCEDURE> <MethodName>\[(\[\<xparams,...>])] CLASS <ClassName> _CLASS_IMPLEMENTATION_ => ;
|
||||
DECLARED METHOD \<type> <MethodName>\[(\<xparams>)] CLASS <ClassName> ;;
|
||||
#undef _DUMMY_DEF_
|
||||
#else
|
||||
#xcommand __HB_CLS_DECLARE_METHOD <MethodName> <ClassName> => ;
|
||||
#xcommand METHOD \<type: FUNCTION, PROCEDURE> <MethodName>\[(\[\<xparams,...>])] CLASS <ClassName> _CLASS_IMPLEMENTATION_ => ;
|
||||
#xcommand __HB_CLS_DECLARE_METHOD <MethodName> <ClassName> => ;
|
||||
#xcommand METHOD \<type: FUNCTION, PROCEDURE> <MethodName>\[(\[\<xparams,...>])] CLASS <ClassName> _CLASS_IMPLEMENTATION_ => ;
|
||||
DECLARED METHOD \<type> <MethodName>\[(\<xparams>)] CLASS <ClassName>
|
||||
#endif
|
||||
|
||||
#xcommand METHOD <type: FUNCTION, PROCEDURE> <MethodName> CLASS <ClassName> _CLASS_IMPLEMENTATION_ => ;
|
||||
__HB_CLS_ERR( Method <MethodName> not declared or declaration mismatch in class: <ClassName> ) ;;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
*
|
||||
*
|
||||
*
|
||||
* Copyright 2006 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
|
||||
* www - http://www.harbour-project.org
|
||||
@@ -198,6 +198,9 @@ typedef HB_PP_SWITCH_FUNC * PHB_PP_SWITCH_FUNC;
|
||||
#define HB_PP_TOKEN_MOD 84
|
||||
#define HB_PP_TOKEN_POWER 85
|
||||
#define HB_PP_TOKEN_EPSILON 86
|
||||
#define HB_PP_TOKEN_SHIFTL 87
|
||||
#define HB_PP_TOKEN_SHIFTR 88
|
||||
#define HB_PP_TOKEN_BITXOR 89
|
||||
|
||||
#define HB_PP_TOKEN_TYPE(t) ( (t) & 0xff )
|
||||
/* bitfields */
|
||||
@@ -266,19 +269,24 @@ typedef HB_PP_SWITCH_FUNC * PHB_PP_SWITCH_FUNC;
|
||||
HB_PP_TOKEN_TYPE(t) == HB_PP_TOKEN_RIGHT_SB || \
|
||||
HB_PP_TOKEN_TYPE(t) == HB_PP_TOKEN_RIGHT_CB )
|
||||
|
||||
#define HB_PP_TOKEN_NEEDLEFT(t) ( HB_PP_TOKEN_TYPE(t) == HB_PP_TOKEN_ASSIGN || \
|
||||
HB_PP_TOKEN_TYPE(t) == HB_PP_TOKEN_PLUSEQ || \
|
||||
HB_PP_TOKEN_TYPE(t) == HB_PP_TOKEN_MINUSEQ || \
|
||||
HB_PP_TOKEN_TYPE(t) == HB_PP_TOKEN_MULTEQ || \
|
||||
HB_PP_TOKEN_TYPE(t) == HB_PP_TOKEN_DIVEQ || \
|
||||
HB_PP_TOKEN_TYPE(t) == HB_PP_TOKEN_MODEQ || \
|
||||
HB_PP_TOKEN_TYPE(t) == HB_PP_TOKEN_EXPEQ || \
|
||||
HB_PP_TOKEN_TYPE(t) == HB_PP_TOKEN_EQUAL || \
|
||||
HB_PP_TOKEN_TYPE(t) == HB_PP_TOKEN_EQ )
|
||||
|
||||
#define HB_PP_TOKEN_ISNEUTRAL(t) ( HB_PP_TOKEN_TYPE(t) == HB_PP_TOKEN_DEC || \
|
||||
HB_PP_TOKEN_TYPE(t) == HB_PP_TOKEN_INC )
|
||||
|
||||
#define HB_PP_TOKEN_NEEDLEFT(t) ( HB_PP_TOKEN_TYPE((t)->type) == HB_PP_TOKEN_ASSIGN || \
|
||||
HB_PP_TOKEN_TYPE((t)->type) == HB_PP_TOKEN_PLUSEQ || \
|
||||
HB_PP_TOKEN_TYPE((t)->type) == HB_PP_TOKEN_MINUSEQ || \
|
||||
HB_PP_TOKEN_TYPE((t)->type) == HB_PP_TOKEN_MULTEQ || \
|
||||
HB_PP_TOKEN_TYPE((t)->type) == HB_PP_TOKEN_DIVEQ || \
|
||||
HB_PP_TOKEN_TYPE((t)->type) == HB_PP_TOKEN_MODEQ || \
|
||||
HB_PP_TOKEN_TYPE((t)->type) == HB_PP_TOKEN_EXPEQ || \
|
||||
HB_PP_TOKEN_TYPE((t)->type) == HB_PP_TOKEN_EQUAL || \
|
||||
HB_PP_TOKEN_TYPE((t)->type) == HB_PP_TOKEN_EQ || \
|
||||
( HB_PP_TOKEN_TYPE((t)->type) == HB_PP_TOKEN_SEND && \
|
||||
(t)->spaces == 0 && (t)->pNext && \
|
||||
( HB_PP_TOKEN_TYPE((t)->pNext->type) == HB_PP_TOKEN_KEYWORD || \
|
||||
HB_PP_TOKEN_TYPE((t)->pNext->type) == HB_PP_TOKEN_MACROVAR || \
|
||||
HB_PP_TOKEN_TYPE((t)->pNext->type) == HB_PP_TOKEN_MACROTEXT ) ) )
|
||||
|
||||
/* I do not want to replicate exactly Clipper PP behavior and check if
|
||||
expression is valid.
|
||||
it's wrong and causes that potentially valid expressions are not
|
||||
@@ -340,7 +348,7 @@ typedef HB_PP_SWITCH_FUNC * PHB_PP_SWITCH_FUNC;
|
||||
HB_PP_TOKEN_ISEXPVAL( (t)->pNext->type ) ) )
|
||||
|
||||
#ifdef HB_C52_STRICT
|
||||
/* Clipper supports quoting by [] for 1-st token in the line so we
|
||||
/* Clipper supports quoting by [] for 1-st token in the line so we
|
||||
are checking for HB_PP_TOKEN_NUL in this macro */
|
||||
#define HB_PP_TOKEN_CANQUOTE(t) ( HB_PP_TOKEN_TYPE(t) != HB_PP_TOKEN_NUL && \
|
||||
HB_PP_TOKEN_TYPE(t) != HB_PP_TOKEN_KEYWORD && \
|
||||
|
||||
@@ -144,7 +144,7 @@ static char * hb_pp_szErrors[] =
|
||||
};
|
||||
|
||||
|
||||
static const HB_PP_OPERATOR s_operators[] =
|
||||
static const HB_PP_OPERATOR s_operators[] =
|
||||
{
|
||||
{ ".NOT.", 5, "!" , HB_PP_TOKEN_NOT | HB_PP_TOKEN_STATIC },
|
||||
{ ".AND.", 5, ".AND.", HB_PP_TOKEN_AND | HB_PP_TOKEN_STATIC },
|
||||
@@ -169,6 +169,11 @@ static const HB_PP_OPERATOR s_operators[] =
|
||||
{ "!=" , 2, "<>" , HB_PP_TOKEN_NE | HB_PP_TOKEN_STATIC },
|
||||
{ "<>" , 2, "<>" , HB_PP_TOKEN_NE | HB_PP_TOKEN_STATIC },
|
||||
{ "->" , 2, "->" , HB_PP_TOKEN_ALIAS | HB_PP_TOKEN_STATIC },
|
||||
#ifdef __XHARBOUR__
|
||||
{ "<<" , 2, "<<" , HB_PP_TOKEN_SHIFTL | HB_PP_TOKEN_STATIC },
|
||||
{ ">>" , 2, ">>" , HB_PP_TOKEN_SHIFTR | HB_PP_TOKEN_STATIC },
|
||||
{ "^^" , 2, "^^" , HB_PP_TOKEN_BITXOR | HB_PP_TOKEN_STATIC },
|
||||
#endif
|
||||
{ "@" , 1, "@" , HB_PP_TOKEN_REFERENCE | HB_PP_TOKEN_STATIC },
|
||||
{ "(" , 1, "(" , HB_PP_TOKEN_LEFT_PB | HB_PP_TOKEN_STATIC },
|
||||
{ ")" , 1, ")" , HB_PP_TOKEN_RIGHT_PB | HB_PP_TOKEN_STATIC },
|
||||
@@ -884,7 +889,7 @@ static void hb_pp_getLine( PHB_PP_STATE pState )
|
||||
snprintf( szFunc, sizeof( szFunc ), "HB_INLINE_%03d", ++pState->iInLineCount );
|
||||
if( pInLinePtr && * pInLinePtr )
|
||||
hb_pp_tokenSetValue( *pInLinePtr, szFunc, strlen( szFunc ) );
|
||||
pState->pInLineFunc( pState->cargo, szFunc,
|
||||
pState->pInLineFunc( pState->cargo, szFunc,
|
||||
hb_membufPtr( pState->pStreamBuffer ),
|
||||
hb_membufLen( pState->pStreamBuffer ),
|
||||
pState->iDumpLine );
|
||||
@@ -1051,7 +1056,7 @@ static void hb_pp_getLine( PHB_PP_STATE pState )
|
||||
while( ++ul < ulLen && HB_PP_ISNEXTIDCHAR( pBuffer[ ul ] ) );
|
||||
|
||||
/*
|
||||
* In Clipper note can be used only as 1-st token and after
|
||||
* In Clipper note can be used only as 1-st token and after
|
||||
* statement separator ';' it does not work like a single line
|
||||
* comment.
|
||||
*/
|
||||
@@ -1229,7 +1234,7 @@ static void hb_pp_getLine( PHB_PP_STATE pState )
|
||||
}
|
||||
while( ( pState->pFile->pLineBuf ? pState->pFile->ulLineBufLen != 0 :
|
||||
!pState->pFile->fEof ) &&
|
||||
( pState->fCanNextLine ||
|
||||
( pState->fCanNextLine ||
|
||||
( pState->iStreamDump && pState->iStreamDump != HB_PP_STREAM_CLIPPER ) ) );
|
||||
|
||||
if( pState->iStreamDump )
|
||||
@@ -1383,7 +1388,7 @@ static BOOL hb_pp_tokenEqual( PHB_PP_TOKEN pToken, PHB_PP_TOKEN pMatch,
|
||||
USHORT mode )
|
||||
{
|
||||
return pToken == pMatch ||
|
||||
( mode != HB_PP_CMP_ADDR &&
|
||||
( mode != HB_PP_CMP_ADDR &&
|
||||
HB_PP_TOKEN_TYPE( pToken->type ) == HB_PP_TOKEN_TYPE( pMatch->type ) &&
|
||||
( pToken->len == pMatch->len ||
|
||||
( mode == HB_PP_CMP_DBASE && pMatch->len > 4 &&
|
||||
@@ -1868,7 +1873,7 @@ static BOOL hb_pp_pragmaOperatorNew( PHB_PP_STATE pState, PHB_PP_TOKEN pToken )
|
||||
pState->pOperators,
|
||||
sizeof( HB_PP_OPERATOR ) * ( pState->iOperators + 1 ) );
|
||||
else
|
||||
pState->pOperators = ( PHB_PP_OPERATOR ) hb_xgrab(
|
||||
pState->pOperators = ( PHB_PP_OPERATOR ) hb_xgrab(
|
||||
sizeof( HB_PP_OPERATOR ) * ( pState->iOperators + 1 ) );
|
||||
pOperator = &pState->pOperators[ pState->iOperators++ ];
|
||||
pOperator->name = hb_strndup( pBuffer, ulLen );
|
||||
@@ -2093,7 +2098,7 @@ static void hb_pp_pragmaNew( PHB_PP_STATE pState, PHB_PP_TOKEN pToken )
|
||||
}
|
||||
else if( hb_pp_tokenValueCmp( pToken, "EXITSEVERITY", HB_PP_CMP_DBASE ) )
|
||||
{
|
||||
pValue = hb_pp_pragmaGetLogical( pToken->pNext, &iValue );
|
||||
pValue = hb_pp_pragmaGetInt( pToken->pNext, &iValue );
|
||||
if( pValue )
|
||||
fError = hb_pp_setCompilerSwitch( pState, "es", iValue );
|
||||
else
|
||||
@@ -2156,7 +2161,7 @@ static void hb_pp_pragmaNew( PHB_PP_STATE pState, PHB_PP_TOKEN pToken )
|
||||
}
|
||||
else if( hb_pp_tokenValueCmp( pToken, "WARNINGLEVEL", HB_PP_CMP_DBASE ) )
|
||||
{
|
||||
pValue = hb_pp_pragmaGetLogical( pToken->pNext, &iValue );
|
||||
pValue = hb_pp_pragmaGetInt( pToken->pNext, &iValue );
|
||||
if( pValue )
|
||||
fError = hb_pp_setCompilerSwitch( pState, "w", iValue );
|
||||
else
|
||||
@@ -3051,7 +3056,7 @@ static BOOL hb_pp_tokenSkipExp( PHB_PP_TOKEN * pTokenPtr, PHB_PP_TOKEN pStop,
|
||||
|
||||
static BOOL hb_pp_tokenCanStartExp( PHB_PP_TOKEN pToken )
|
||||
{
|
||||
if( !HB_PP_TOKEN_NEEDLEFT( pToken->type ) )
|
||||
if( !HB_PP_TOKEN_NEEDLEFT( pToken ) )
|
||||
{
|
||||
if( HB_PP_TOKEN_TYPE( pToken->type ) != HB_PP_TOKEN_LEFT_SB )
|
||||
return TRUE;
|
||||
@@ -3442,7 +3447,7 @@ static PHB_PP_TOKEN * hb_pp_matchResultLstAdd( PHB_PP_STATE pState,
|
||||
}
|
||||
else
|
||||
{
|
||||
/* leading spaces calculation in Clipper is broken when
|
||||
/* leading spaces calculation in Clipper is broken when
|
||||
separate tokens are stringified, it can be quite
|
||||
easy checked that it will interact with translation
|
||||
done just before - spaces are partially inherited.
|
||||
@@ -3890,8 +3895,8 @@ static PHB_PP_TOKEN hb_pp_calcPrecedence( PHB_PP_TOKEN pToken,
|
||||
}
|
||||
break;
|
||||
case HB_PP_TOKEN_AMPERSAND:
|
||||
/* It will not work because && will be stripped as comment */
|
||||
*piNextPrec = HB_PP_PREC_BIT;
|
||||
/* It will not work because && will be stripped as comment */
|
||||
if( pNext && HB_PP_TOKEN_TYPE( pNext->type ) == HB_PP_TOKEN_AMPERSAND &&
|
||||
pNext->spaces == 0 )
|
||||
{
|
||||
@@ -3903,6 +3908,12 @@ static PHB_PP_TOKEN hb_pp_calcPrecedence( PHB_PP_TOKEN pToken,
|
||||
*piNextPrec = HB_PP_PREC_BIT;
|
||||
break;
|
||||
|
||||
case HB_PP_TOKEN_BITXOR:
|
||||
case HB_PP_TOKEN_SHIFTL:
|
||||
case HB_PP_TOKEN_SHIFTR:
|
||||
*piNextPrec = HB_PP_PREC_BIT;
|
||||
break;
|
||||
|
||||
/* math plus/minus */
|
||||
case HB_PP_TOKEN_PLUS:
|
||||
case HB_PP_TOKEN_MINUS:
|
||||
@@ -3963,8 +3974,15 @@ static HB_LONG hb_pp_calcOperation( HB_LONG lValueLeft, HB_LONG lValueRight,
|
||||
lValueLeft &= lValueRight;
|
||||
break;
|
||||
case HB_PP_TOKEN_POWER:
|
||||
case HB_PP_TOKEN_BITXOR:
|
||||
lValueLeft ^= lValueRight;
|
||||
break;
|
||||
case HB_PP_TOKEN_SHIFTL:
|
||||
lValueLeft <<= lValueRight;
|
||||
break;
|
||||
case HB_PP_TOKEN_SHIFTR:
|
||||
lValueLeft >>= lValueRight;
|
||||
break;
|
||||
|
||||
case HB_PP_TOKEN_PLUS:
|
||||
lValueLeft += lValueRight;
|
||||
@@ -4653,9 +4671,17 @@ void hb_pp_initDynDefines( PHB_PP_STATE pState )
|
||||
hb_pp_addDefine( pState, szDefine, szResult );
|
||||
#endif
|
||||
|
||||
/* __HARBOUR__ */
|
||||
#if defined( __HARBOUR__ ) || defined( __XHARBOUR__ )
|
||||
snprintf( szResult, sizeof( szResult ), "%05d", HB_MAX( ( HB_VER_MAJOR << 8 ) | HB_VER_MINOR, 1 ) );
|
||||
#ifdef __HARBOUR__
|
||||
/* __HARBOUR__ */
|
||||
hb_pp_addDefine( pState, "__HARBOUR__", szResult );
|
||||
#endif
|
||||
#ifdef __XHARBOUR__
|
||||
/* __XHARBOUR__ */
|
||||
hb_pp_addDefine( pState, "__XHARBOUR__", szResult );
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* __DATE__ */
|
||||
hb_dateToday( &iYear, &iMonth, &iDay );
|
||||
@@ -4876,7 +4902,7 @@ void hb_pp_addDefine( PHB_PP_STATE pState, char * szDefName, char * szDefValue )
|
||||
{
|
||||
hb_pp_tokenListFree( &pMatch );
|
||||
hb_pp_tokenListFree( &pResult );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_pp_defineAdd( pState, HB_PP_CMP_CASE, 0, NULL, pMatch, pResult );
|
||||
@@ -4957,7 +4983,7 @@ char * hb_pp_nextLine( PHB_PP_STATE pState, ULONG * pulLen )
|
||||
/* only single command in one call */
|
||||
if( !pState->pTokenOut->pNext )
|
||||
break;
|
||||
ltype = pState->iLastType;
|
||||
ltype = HB_PP_TOKEN_TYPE( pToken->type );
|
||||
}
|
||||
if( fError )
|
||||
pState->fError = TRUE;
|
||||
@@ -5003,7 +5029,7 @@ char * hb_pp_parseLine( PHB_PP_STATE pState, char * pLine, ULONG * pulLen )
|
||||
if( pState->fError )
|
||||
fError = TRUE;
|
||||
hb_pp_tokenStr( pToken, pState->pOutputBuffer, TRUE, TRUE, ltype );
|
||||
ltype = pState->iLastType;
|
||||
ltype = HB_PP_TOKEN_TYPE( pToken->type );
|
||||
}
|
||||
if( fError )
|
||||
pState->fError = TRUE;
|
||||
|
||||
Reference in New Issue
Block a user