2008-05-06 02:44 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/bin/hb-func.sh
! do not add .exe suffix if user added it explicitly in W32/DOS builds
* harbour/source/vm/dynsym.c
* added internal error when size of dynamic table exceed maximal size
% small optimization in hb_dynsymFind() function
* harbour/source/pp/ppcore.c
* added support for generating #line directives in strictly Clipper
compatible way even if they are redundant. It can be enabled
by HB_PP_STRICT_LINEINFO_TOKEN compiler time macro, f.e. using
environment variables:
set C_USR=-DHB_PP_STRICT_LINEINFO_TOKEN %C_USR%
and making clean build.
This commit is contained in:
@@ -8,6 +8,22 @@
|
||||
2008-12-31 13:59 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2008-05-06 02:44 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/bin/hb-func.sh
|
||||
! do not add .exe suffix if user added it explicitly in W32/DOS builds
|
||||
|
||||
* harbour/source/vm/dynsym.c
|
||||
* added internal error when size of dynamic table exceed maximal size
|
||||
% small optimization in hb_dynsymFind() function
|
||||
|
||||
* harbour/source/pp/ppcore.c
|
||||
* added support for generating #line directives in strictly Clipper
|
||||
compatible way even if they are redundant. It can be enabled
|
||||
by HB_PP_STRICT_LINEINFO_TOKEN compiler time macro, f.e. using
|
||||
environment variables:
|
||||
set C_USR=-DHB_PP_STRICT_LINEINFO_TOKEN %C_USR%
|
||||
and making clean build.
|
||||
|
||||
|
||||
2008-05-05 11:31 UTC+0100 Miguel Angel Marchuet Frutos <miguelangel@marchuet.net>
|
||||
* include/hbmemory.ch
|
||||
|
||||
@@ -481,7 +481,8 @@ fi
|
||||
FOUTC="\${DIROUT}/\${FILEOUT%.*}.c"
|
||||
FOUTO="\${DIROUT}/\${FILEOUT%.*}.o"
|
||||
FOUTE="\${DIROUT}/\${FILEOUT%.[Pp][Rr][Gg]}"
|
||||
FOUTE="\${FOUTE%.[oc]}${hb_exesuf}"
|
||||
FOUTE="\${FOUTE%.[oc]}"
|
||||
FOUTE="\${FOUTE%${hb_exesuf}}${hb_exesuf}"
|
||||
|
||||
hb_cc()
|
||||
{
|
||||
|
||||
@@ -53,9 +53,15 @@
|
||||
/* #define HB_PP_MULTILINE_STRING */
|
||||
/* #define HB_C52_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 "hbver.h"
|
||||
#include "hbdate.h"
|
||||
@@ -1993,43 +1999,6 @@ static void hb_pp_stateFree( PHB_PP_STATE pState )
|
||||
hb_xfree( pState );
|
||||
}
|
||||
|
||||
static void hb_pp_includeFile( PHB_PP_STATE pState, char * szFileName, BOOL fSysFile )
|
||||
{
|
||||
if( pState->iFiles >= HB_PP_MAX_INCLUDED_FILES )
|
||||
{
|
||||
hb_pp_error( pState, 'F', HB_PP_ERR_NESTED_INCLUDES, NULL );
|
||||
}
|
||||
else
|
||||
{
|
||||
BOOL fNested = FALSE;
|
||||
PHB_PP_FILE pFile = hb_pp_FileNew( pState, szFileName, fSysFile, &fNested,
|
||||
NULL, TRUE, pState->pOpenFunc );
|
||||
if( pFile )
|
||||
{
|
||||
pFile->pPrev = pState->pFile;
|
||||
pState->pFile = pFile;
|
||||
pState->iFiles++;
|
||||
pFile->fGenLineInfo = TRUE;
|
||||
}
|
||||
else if( fNested )
|
||||
hb_pp_error( pState, 'F', HB_PP_ERR_NESTED_INCLUDES, NULL );
|
||||
else
|
||||
hb_pp_error( pState, 'F', HB_PP_ERR_CANNOT_OPEN_FILE, szFileName );
|
||||
}
|
||||
}
|
||||
|
||||
static void hb_pp_includeClose( PHB_PP_STATE pState )
|
||||
{
|
||||
PHB_PP_FILE pFile = pState->pFile;
|
||||
|
||||
pState->pFile = pFile->pPrev;
|
||||
pState->iFiles--;
|
||||
if( pState->pFile )
|
||||
pState->pFile->fGenLineInfo = TRUE;
|
||||
|
||||
hb_pp_FileFree( pState, pFile, pState->pCloseFunc );
|
||||
}
|
||||
|
||||
static PHB_PP_TOKEN hb_pp_streamFuncGet( PHB_PP_TOKEN pToken, PHB_PP_TOKEN * pFuncPtr )
|
||||
{
|
||||
hb_pp_tokenListFree( pFuncPtr );
|
||||
@@ -4667,6 +4636,21 @@ 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, char * szFileName, int iLine )
|
||||
{
|
||||
char szLine[ 12 ];
|
||||
|
||||
snprintf( szLine, sizeof( szLine ), "%d", iLine );
|
||||
hb_pp_tokenAdd( pTokenPtr, "#", 1, 0, HB_PP_TOKEN_DIRECTIVE | HB_PP_TOKEN_STATIC );
|
||||
hb_pp_tokenAdd( pTokenPtr, "line", 4, 0, HB_PP_TOKEN_KEYWORD | HB_PP_TOKEN_STATIC );
|
||||
hb_pp_tokenAdd( pTokenPtr, szLine, strlen( szLine ), 1, HB_PP_TOKEN_NUMBER );
|
||||
if( 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;
|
||||
@@ -4676,16 +4660,8 @@ static void hb_pp_genLineTokens( PHB_PP_STATE pState )
|
||||
#else
|
||||
if( pState->pFile->fGenLineInfo )
|
||||
{
|
||||
char szLine[ 12 ];
|
||||
|
||||
snprintf( szLine, sizeof( szLine ), "%d", pState->pFile->iCurrentLine );
|
||||
hb_pp_tokenAdd( &pState->pNextTokenPtr, "#", 1, 0, HB_PP_TOKEN_DIRECTIVE | HB_PP_TOKEN_STATIC );
|
||||
hb_pp_tokenAdd( &pState->pNextTokenPtr, "line", 4, 0, HB_PP_TOKEN_KEYWORD | HB_PP_TOKEN_STATIC );
|
||||
hb_pp_tokenAdd( &pState->pNextTokenPtr, szLine, strlen( szLine ), 1, HB_PP_TOKEN_NUMBER );
|
||||
if( pState->pFile->szFileName )
|
||||
hb_pp_tokenAdd( &pState->pNextTokenPtr, pState->pFile->szFileName,
|
||||
strlen( pState->pFile->szFileName ), 1, HB_PP_TOKEN_STRING );
|
||||
hb_pp_tokenAdd( &pState->pNextTokenPtr, "\n", 1, 0, HB_PP_TOKEN_EOL | HB_PP_TOKEN_STATIC );
|
||||
hb_pp_lineTokens( &pState->pNextTokenPtr, pState->pFile->szFileName,
|
||||
pState->pFile->iCurrentLine );
|
||||
pState->pFile->fGenLineInfo = FALSE;
|
||||
}
|
||||
else if( pState->pFile->iLastLine < pState->pFile->iCurrentLine )
|
||||
@@ -4700,6 +4676,62 @@ static void hb_pp_genLineTokens( PHB_PP_STATE pState )
|
||||
#endif
|
||||
}
|
||||
|
||||
static void hb_pp_includeFile( PHB_PP_STATE pState, char * szFileName, BOOL fSysFile )
|
||||
{
|
||||
if( pState->iFiles >= HB_PP_MAX_INCLUDED_FILES )
|
||||
{
|
||||
hb_pp_error( pState, 'F', HB_PP_ERR_NESTED_INCLUDES, NULL );
|
||||
}
|
||||
else
|
||||
{
|
||||
BOOL fNested = FALSE;
|
||||
PHB_PP_FILE pFile = hb_pp_FileNew( pState, szFileName, fSysFile, &fNested,
|
||||
NULL, TRUE, pState->pOpenFunc );
|
||||
if( pFile )
|
||||
{
|
||||
#if defined( HB_PP_STRICT_LINEINFO_TOKEN )
|
||||
pState->pNextTokenPtr = &pState->pTokenOut;
|
||||
if( pState->pFile->fGenLineInfo )
|
||||
{
|
||||
hb_pp_lineTokens( &pState->pNextTokenPtr, pState->pFile->szFileName,
|
||||
pState->pFile->iCurrentLine );
|
||||
pState->pFile->fGenLineInfo = FALSE;
|
||||
}
|
||||
hb_pp_lineTokens( &pState->pNextTokenPtr, szFileName, 1 );
|
||||
#else
|
||||
pFile->fGenLineInfo = TRUE;
|
||||
#endif
|
||||
pFile->pPrev = pState->pFile;
|
||||
pState->pFile = pFile;
|
||||
pState->iFiles++;
|
||||
}
|
||||
else if( fNested )
|
||||
hb_pp_error( pState, 'F', HB_PP_ERR_NESTED_INCLUDES, NULL );
|
||||
else
|
||||
hb_pp_error( pState, 'F', HB_PP_ERR_CANNOT_OPEN_FILE, szFileName );
|
||||
}
|
||||
}
|
||||
|
||||
static void hb_pp_includeClose( PHB_PP_STATE pState )
|
||||
{
|
||||
PHB_PP_FILE pFile = pState->pFile;
|
||||
|
||||
pState->pFile = pFile->pPrev;
|
||||
pState->iFiles--;
|
||||
|
||||
#if defined( HB_PP_STRICT_LINEINFO_TOKEN )
|
||||
if( pFile->fGenLineInfo )
|
||||
{
|
||||
pState->pNextTokenPtr = &pState->pTokenOut;
|
||||
hb_pp_lineTokens( &pState->pNextTokenPtr, pFile->szFileName, pFile->iCurrentLine + 1 );
|
||||
}
|
||||
#endif
|
||||
if( pState->pFile )
|
||||
pState->pFile->fGenLineInfo = TRUE;
|
||||
|
||||
hb_pp_FileFree( pState, pFile, pState->pCloseFunc );
|
||||
}
|
||||
|
||||
static void hb_pp_preprocessToken( PHB_PP_STATE pState )
|
||||
{
|
||||
while( !pState->pTokenOut && pState->pFile )
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
#include "hbvmopt.h"
|
||||
#include "hbapi.h"
|
||||
#include "hbapiitm.h"
|
||||
#include "hbapierr.h"
|
||||
#include "hbstack.h"
|
||||
|
||||
typedef struct
|
||||
@@ -221,21 +222,26 @@ HB_EXPORT PHB_DYNS hb_dynsymNew( PHB_SYMB pSymbol ) /* creates a new dynamic
|
||||
}
|
||||
|
||||
if( s_uiDynSymbols == 0 ) /* Do we have any symbols ? */
|
||||
{
|
||||
pDynSym = s_pDynItems[ 0 ].pDynSym; /* Point to first symbol */
|
||||
/* *<1>* Remember we already got this one */
|
||||
s_uiDynSymbols++;
|
||||
}
|
||||
else
|
||||
{ /* We want more symbols ! */
|
||||
s_pDynItems = ( PDYNHB_ITEM ) hb_xrealloc( s_pDynItems, ( s_uiDynSymbols + 1 ) * sizeof( DYNHB_ITEM ) );
|
||||
if( ++s_uiDynSymbols == 0 )
|
||||
hb_errInternal( 6004, "Internal error: size of dynamic symbol table exceed", NULL, NULL );
|
||||
|
||||
memmove( &s_pDynItems[ s_uiClosestDynSym + 1 ],
|
||||
&s_pDynItems[ s_uiClosestDynSym ],
|
||||
sizeof( DYNHB_ITEM ) * ( s_uiDynSymbols - s_uiClosestDynSym ) );
|
||||
s_pDynItems = ( PDYNHB_ITEM ) hb_xrealloc( s_pDynItems, s_uiDynSymbols * sizeof( DYNHB_ITEM ) );
|
||||
|
||||
memmove( &s_pDynItems[ s_uiClosestDynSym + 1 ],
|
||||
&s_pDynItems[ s_uiClosestDynSym ],
|
||||
sizeof( DYNHB_ITEM ) * ( s_uiDynSymbols - s_uiClosestDynSym - 1 ) );
|
||||
|
||||
pDynSym = ( PHB_DYNS ) hb_xgrab( sizeof( HB_DYNS ) );
|
||||
s_pDynItems[ s_uiClosestDynSym ].pDynSym = pDynSym; /* Enter DynSym */
|
||||
}
|
||||
|
||||
s_uiDynSymbols++; /* Got one more symbol */
|
||||
pDynSym->pSymbol = pSymbol;
|
||||
pDynSym->hMemvar = 0;
|
||||
pDynSym->uiArea = 0;
|
||||
@@ -332,12 +338,10 @@ HB_EXPORT PHB_DYNS hb_dynsymFind( const char * szName )
|
||||
|
||||
if( s_pDynItems == NULL )
|
||||
{
|
||||
s_pDynItems = ( PDYNHB_ITEM ) hb_xgrab( sizeof( DYNHB_ITEM ) ); /* Grab array */
|
||||
s_pDynItems = ( PDYNHB_ITEM ) hb_xgrab( sizeof( DYNHB_ITEM ) ); /* Grab array */
|
||||
s_pDynItems->pDynSym = ( PHB_DYNS ) hb_xgrab( sizeof( HB_DYNS ) );
|
||||
/* Always grab a first symbol. Never an empty bucket. *<1>* */
|
||||
/* Always grab a first symbol. Never an empty bucket. *<1>* */
|
||||
memset( s_pDynItems->pDynSym, 0, sizeof( HB_DYNS ) );
|
||||
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -361,7 +365,7 @@ HB_EXPORT PHB_DYNS hb_dynsymFind( const char * szName )
|
||||
|
||||
USHORT uiFirst = 0;
|
||||
USHORT uiLast = s_uiDynSymbols;
|
||||
USHORT uiMiddle = uiLast / 2;
|
||||
USHORT uiMiddle = uiLast >> 1;
|
||||
|
||||
s_uiClosestDynSym = uiMiddle; /* Start in the middle */
|
||||
|
||||
@@ -384,8 +388,7 @@ HB_EXPORT PHB_DYNS hb_dynsymFind( const char * szName )
|
||||
uiFirst = uiMiddle + 1;
|
||||
s_uiClosestDynSym = uiFirst;
|
||||
}
|
||||
|
||||
uiMiddle = uiFirst + ( ( uiLast - uiFirst ) / 2 );
|
||||
uiMiddle = ( uiFirst + uiLast ) >> 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user