From 7ad364ed1540249adbe9d3875e06351a03aabbaa Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Fri, 30 Sep 2011 20:23:58 +0000 Subject: [PATCH] 2011-09-30 22:23 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/src/pp/ppcore.c ! fixed few problems with line numbering and code using extended codeblocks [TOMERGE 3.0] * harbour/src/pp/pplib2.c ! fixed typo in comment --- harbour/ChangeLog | 9 ++++++ harbour/src/pp/ppcore.c | 67 ++++++++++++----------------------------- harbour/src/pp/pplib2.c | 2 +- 3 files changed, 30 insertions(+), 48 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 10c3aed6d3..b26a322c2e 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,15 @@ The license applies to all entries newer than 2009-04-28. */ +2011-09-30 22:23 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/src/pp/ppcore.c + ! fixed few problems with line numbering and code using + extended codeblocks + [TOMERGE 3.0] + + * harbour/src/pp/pplib2.c + ! fixed typo in comment + 2011-09-28 21:11 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/src/rtl/gtxwc/gtxwc.h * harbour/src/rtl/gtxwc/gtxwc.c diff --git a/harbour/src/pp/ppcore.c b/harbour/src/pp/ppcore.c index 7b843bdd69..c70a08f139 100644 --- a/harbour/src/pp/ppcore.c +++ b/harbour/src/pp/ppcore.c @@ -51,16 +51,10 @@ */ /* #define HB_CLP_STRICT */ -/* #define HB_PP_NO_LINEINFO_TOKEN */ /* #define HB_PP_STRICT_LINEINFO_TOKEN */ #define _HB_PP_INTERNAL -#if defined( HB_PP_STRICT_LINEINFO_TOKEN ) && \ - defined( HB_PP_NO_LINEINFO_TOKEN ) -# undef HB_PP_NO_LINEINFO_TOKEN -#endif - #include "hbpp.h" #include "hbdate.h" @@ -405,21 +399,27 @@ static void hb_pp_tokenListFree( PHB_PP_TOKEN * pTokenPtr ) } } -static void hb_pp_tokenListFreeCmd( PHB_PP_TOKEN * pTokenPtr ) +static int hb_pp_tokenListFreeCmd( PHB_PP_TOKEN * pTokenPtr ) { PHB_PP_TOKEN pToken; HB_BOOL fStop = HB_FALSE; + int iLines = 0; while( *pTokenPtr && !fStop ) { pToken = *pTokenPtr; *pTokenPtr = pToken->pNext; + if( HB_PP_TOKEN_TYPE( pToken->type ) == HB_PP_TOKEN_EOL ) + ++iLines; fStop = HB_PP_TOKEN_ISEOC( pToken ); hb_pp_tokenFree( pToken ); } + return *pTokenPtr ? iLines : 0; } -static int hb_pp_tokenMoveCommand( PHB_PP_TOKEN * pDestPtr, PHB_PP_TOKEN * pSrcPtr ) +static void hb_pp_tokenMoveCommand( PHB_PP_STATE pState, + PHB_PP_TOKEN * pDestPtr, + PHB_PP_TOKEN * pSrcPtr ) { PHB_PP_TOKEN pToken; int iLines = 0; @@ -433,13 +433,16 @@ static int hb_pp_tokenMoveCommand( PHB_PP_TOKEN * pDestPtr, PHB_PP_TOKEN * pSrcP if( HB_PP_TOKEN_TYPE( pToken->type ) == HB_PP_TOKEN_EOL ) ++iLines; if( HB_PP_TOKEN_ISEOC( pToken ) ) - { break; - } } *pDestPtr = NULL; - return iLines; + if( iLines ) + { + pState->pFile->iLastLine = pState->pFile->iCurrentLine + iLines; + if( *pSrcPtr ) + pState->pFile->iCurrentLine += iLines; + } } static PHB_PP_TOKEN hb_pp_tokenResultEnd( PHB_PP_TOKEN * pTokenPtr, HB_BOOL fDirect ) @@ -5007,7 +5010,6 @@ static void hb_pp_condCompileElif( PHB_PP_STATE pState, PHB_PP_TOKEN pToken ) } } -#if !defined( HB_PP_NO_LINEINFO_TOKEN ) static void hb_pp_lineTokens( PHB_PP_TOKEN ** pTokenPtr, const char * szFileName, int iLine ) { char szLine[ 12 ]; @@ -5020,15 +5022,11 @@ static void hb_pp_lineTokens( PHB_PP_TOKEN ** pTokenPtr, const char * szFileName hb_pp_tokenAdd( pTokenPtr, szFileName, strlen( szFileName ), 1, HB_PP_TOKEN_STRING ); hb_pp_tokenAdd( pTokenPtr, "\n", 1, 0, HB_PP_TOKEN_EOL | HB_PP_TOKEN_STATIC ); } -#endif static void hb_pp_genLineTokens( PHB_PP_STATE pState ) { pState->pNextTokenPtr = &pState->pTokenOut; -#if defined( HB_PP_NO_LINEINFO_TOKEN ) - hb_pp_tokenMoveCommand( pState->pNextTokenPtr, &pState->pFile->pTokenList ); -#else if( pState->pFile->fGenLineInfo ) { hb_pp_lineTokens( &pState->pNextTokenPtr, pState->pFile->szFileName, @@ -5041,10 +5039,8 @@ static void hb_pp_genLineTokens( PHB_PP_STATE pState ) hb_pp_tokenAdd( &pState->pNextTokenPtr, "\n", 1, 0, HB_PP_TOKEN_EOL | HB_PP_TOKEN_STATIC ); while( ++pState->pFile->iLastLine < pState->pFile->iCurrentLine ); } - pState->pFile->iLastLine = pState->pFile->iCurrentLine + - hb_pp_tokenMoveCommand( pState->pNextTokenPtr, - &pState->pFile->pTokenList ); -#endif + hb_pp_tokenMoveCommand( pState, pState->pNextTokenPtr, + &pState->pFile->pTokenList ); } static void hb_pp_includeFile( PHB_PP_STATE pState, const char * szFileName, HB_BOOL fSysFile ) @@ -5329,12 +5325,12 @@ static void hb_pp_preprocessToken( PHB_PP_STATE pState ) if( fError ) hb_pp_error( pState, 'F', HB_PP_ERR_INVALID_DIRECTIVE, NULL ); - hb_pp_tokenListFreeCmd( pFreePtr ); + pState->pFile->iCurrentLine += hb_pp_tokenListFreeCmd( pFreePtr ); continue; } else if( pState->iCondCompile ) { - hb_pp_tokenListFreeCmd( &pState->pFile->pTokenList ); + pState->pFile->iCurrentLine += hb_pp_tokenListFreeCmd( &pState->pFile->pTokenList ); } else { @@ -5448,28 +5444,8 @@ PHB_PP_TOKEN hb_pp_tokenGet( PHB_PP_STATE pState ) if( pState->fWritePreprocesed && pState->pTokenOut ) { hb_membufFlush( pState->pBuffer ); -#if defined( HB_PP_NO_LINEINFO_TOKEN ) - if( pState->pFile->fGenLineInfo ) - { - fprintf( pState->file_out, "#line %d", pState->pFile->iCurrentLine ); - if( pState->pFile->szFileName ) - fprintf( pState->file_out, " \"%s\"", pState->pFile->szFileName ); - fputc( '\n', pState->file_out ); - pState->pFile->fGenLineInfo = HB_FALSE; - } - else if( pState->pFile->iLastLine < pState->pFile->iCurrentLine ) - { - do - fputc( '\n', pState->file_out ); - while( ++pState->pFile->iLastLine < pState->pFile->iCurrentLine ); - } - pState->pFile->iLastLine = pState->pFile->iCurrentLine + - hb_pp_tokenStr( pState->pTokenOut, pState->pBuffer, HB_TRUE, HB_TRUE, - pState->usLastType ); -#else hb_pp_tokenStr( pState->pTokenOut, pState->pBuffer, HB_TRUE, HB_TRUE, pState->usLastType ); -#endif pState->usLastType = HB_PP_TOKEN_TYPE( pState->pTokenOut->type ); if( fwrite( hb_membufPtr( pState->pBuffer ), sizeof( char ), hb_membufLen( pState->pBuffer ), pState->file_out ) != @@ -6222,11 +6198,8 @@ void hb_pp_tokenToString( PHB_PP_STATE pState, PHB_PP_TOKEN pToken ) else if( HB_PP_TOKEN_TYPE( pTok->type ) == HB_PP_TOKEN_EOC && !pTok->pNext && pState->pFile->pTokenList ) { -#if !defined( HB_PP_NO_LINEINFO_TOKEN ) - pState->pFile->iLastLine = pState->pFile->iCurrentLine + -#endif - hb_pp_tokenMoveCommand( &pTok->pNext, - &pState->pFile->pTokenList ); + hb_pp_tokenMoveCommand( pState, &pTok->pNext, + &pState->pFile->pTokenList ); } hb_pp_tokenStr( pTok, pState->pBuffer, HB_TRUE, HB_FALSE, 0 ); pTok = pTok->pNext; diff --git a/harbour/src/pp/pplib2.c b/harbour/src/pp/pplib2.c index 841ccf5467..287485e836 100644 --- a/harbour/src/pp/pplib2.c +++ b/harbour/src/pp/pplib2.c @@ -5,7 +5,7 @@ /* * Harbour Project source code: * .prg interface to preprocessor - * __PP_STDRULE() function + * __PP_STDRULES() function * intentionally in separate file to not force linking * standard PP rules table when user does not need them *