diff --git a/harbour/ChangeLog b/harbour/ChangeLog index edd2b0c06c..5e6dc0999a 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,15 @@ 2002-12-01 13:30 UTC+0100 Foo Bar */ +2007-05-22 13:30 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/source/compiler/hbfix.c + ! fixed local IND/DED when PARAMETERS is used + ! fixed local names generated for debugger when PARAMETERS is used + + * harbour/source/debug/dbgentry.c + ! fixed very bad typo in my previous commit + % minor optimization + 2007-05-22 12:20 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/bin/hb-func.sh + added -lpcreposix to system libraries when C_USR has -DHB_PCRE_REGEX diff --git a/harbour/source/compiler/hbfix.c b/harbour/source/compiler/hbfix.c index c4a852fc04..32b3fede32 100644 --- a/harbour/source/compiler/hbfix.c +++ b/harbour/source/compiler/hbfix.c @@ -115,7 +115,7 @@ static HB_FIX_FUNC( hb_p_pushblocklarge ) return HB_PCODE_MKUINT24( &pFunc->pCode[ lPCodePos + 1 ] ); } -static HB_FIX_FUNC( hb_p_poplocal ) +static HB_FIX_FUNC( hb_p_localfix ) { BYTE * pVar = &pFunc->pCode[ lPCodePos + 1 ]; SHORT iVar = HB_PCODE_MKSHORT( pVar ); @@ -126,52 +126,10 @@ static HB_FIX_FUNC( hb_p_poplocal ) pVar[ 0 ] = HB_LOBYTE( iVar ); pVar[ 1 ] = HB_HIBYTE( iVar ); - return 3; + return 0; } -static HB_FIX_FUNC( hb_p_pushlocal ) -{ - BYTE * pVar = &pFunc->pCode[ lPCodePos + 1 ]; - SHORT iVar = HB_PCODE_MKSHORT( pVar ); - - HB_SYMBOL_UNUSED( cargo ); - - iVar += pFunc->wParamCount; - pVar[ 0 ] = HB_LOBYTE( iVar ); - pVar[ 1 ] = HB_HIBYTE( iVar ); - - return 3; -} - -static HB_FIX_FUNC( hb_p_pushlocalref ) -{ - BYTE * pVar = &pFunc->pCode[ lPCodePos + 1 ]; - SHORT iVar = HB_PCODE_MKSHORT( pVar ); - - HB_SYMBOL_UNUSED( cargo ); - - iVar += pFunc->wParamCount; - pVar[ 0 ] = HB_LOBYTE( iVar ); - pVar[ 1 ] = HB_HIBYTE( iVar ); - - return 3; -} - -static HB_FIX_FUNC( hb_p_localaddint ) -{ - BYTE * pVar = &pFunc->pCode[ lPCodePos + 1 ]; - SHORT iVar = HB_PCODE_MKSHORT( pVar ); - - HB_SYMBOL_UNUSED( cargo ); - - iVar += pFunc->wParamCount; - pVar[ 0 ] = HB_LOBYTE( iVar ); - pVar[ 1 ] = HB_HIBYTE( iVar ); - - return 5; -} - -static HB_FIX_FUNC( hb_p_poplocalnear ) +static HB_FIX_FUNC( hb_p_localnearerr ) { HB_SYMBOL_UNUSED( pFunc ); HB_SYMBOL_UNUSED( lPCodePos ); @@ -182,35 +140,7 @@ static HB_FIX_FUNC( hb_p_poplocalnear ) */ hb_compGenError( cargo->HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_OPTIMIZEDLOCAL_OUT_OF_RANGE, "", "" ); - return 2; -} - -static HB_FIX_FUNC( hb_p_pushlocalnear ) -{ - HB_SYMBOL_UNUSED( pFunc ); - HB_SYMBOL_UNUSED( lPCodePos ); - /* - * this code should never be executed because compiler should - * generate only non size optimized HB_P_POPLOCAL pcodes - * for function body - */ - hb_compGenError( cargo->HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_OPTIMIZEDLOCAL_OUT_OF_RANGE, "", "" ); - - return 2; -} - -static HB_FIX_FUNC( hb_p_localnearaddint ) -{ - HB_SYMBOL_UNUSED( pFunc ); - HB_SYMBOL_UNUSED( lPCodePos ); - /* - * this code should never be executed because compiler should - * generate only non size optimized HB_P_POPLOCAL pcodes - * for function body - */ - hb_compGenError( cargo->HB_COMP_PARAM, hb_comp_szErrors, 'F', HB_COMP_ERR_OPTIMIZEDLOCAL_OUT_OF_RANGE, "", "" ); - - return 4; + return 0; } /* NOTE: The order of functions have to match the order of opcodes @@ -255,7 +185,7 @@ static const HB_FIX_FUNC_PTR s_fixlocals_table[] = NULL, /* HB_P_LESSEQUAL, */ NULL, /* HB_P_LESS, */ NULL, /* HB_P_LINE, */ - NULL, /* HB_P_LOCALNAME, */ + hb_p_localfix, /* HB_P_LOCALNAME, */ NULL, /* HB_P_MACROPOP, */ NULL, /* HB_P_MACROPOPALIASED, */ NULL, /* HB_P_MACROPUSH, */ @@ -299,8 +229,8 @@ static const HB_FIX_FUNC_PTR s_fixlocals_table[] = NULL, /* HB_P_POPALIASEDFIELDNEAR, */ NULL, /* HB_P_POPALIASEDVAR, */ NULL, /* HB_P_POPFIELD, */ - hb_p_poplocal, /* HB_P_POPLOCAL, */ - hb_p_poplocalnear, /* HB_P_POPLOCALNEAR, */ + hb_p_localfix, /* HB_P_POPLOCAL, */ + hb_p_localnearerr, /* HB_P_POPLOCALNEAR, */ NULL, /* HB_P_POPMEMVAR, */ NULL, /* HB_P_POPSTATIC, */ NULL, /* HB_P_POPVARIABLE, */ @@ -314,9 +244,9 @@ static const HB_FIX_FUNC_PTR s_fixlocals_table[] = NULL, /* HB_P_PUSHFIELD, */ NULL, /* HB_P_PUSHBYTE, */ NULL, /* HB_P_PUSHINT, */ - hb_p_pushlocal, /* HB_P_PUSHLOCAL, */ - hb_p_pushlocalnear, /* HB_P_PUSHLOCALNEAR, */ - hb_p_pushlocalref, /* HB_P_PUSHLOCALREF, */ + hb_p_localfix, /* HB_P_PUSHLOCAL, */ + hb_p_localnearerr, /* HB_P_PUSHLOCALNEAR, */ + hb_p_localfix, /* HB_P_PUSHLOCALREF, */ NULL, /* HB_P_PUSHLONG, */ NULL, /* HB_P_PUSHMEMVAR, */ NULL, /* HB_P_PUSHMEMVARREF, */ @@ -346,7 +276,7 @@ static const HB_FIX_FUNC_PTR s_fixlocals_table[] = NULL, /* HB_P_MACROFUNC, */ NULL, /* HB_P_MACRODO, */ NULL, /* HB_P_MPUSHSTR, */ - hb_p_localnearaddint, /* HB_P_LOCALNEARADDINT, */ + hb_p_localnearerr, /* HB_P_LOCALNEARADDINT, */ NULL, /* HB_P_MACROPUSHREF */ NULL, /* HB_P_PUSHLONGLONG */ NULL, /* HB_P_ENUMSTART */ @@ -373,7 +303,7 @@ static const HB_FIX_FUNC_PTR s_fixlocals_table[] = NULL, /* HB_P_LARGEFRAME */ NULL, /* HB_P_LARGEVFRAME */ NULL, /* HB_P_PUSHSTRHIDDEN */ - hb_p_localaddint, /* HB_P_LOCALADDINT */ + hb_p_localfix, /* HB_P_LOCALADDINT */ NULL, /* HB_P_MODEQPOP */ NULL, /* HB_P_EXPEQPOP */ NULL, /* HB_P_MODEQ */ @@ -393,9 +323,9 @@ static const HB_FIX_FUNC_PTR s_fixlocals_table[] = NULL, /* HB_P_INCEQPOP */ NULL, /* HB_P_DECEQ */ NULL, /* HB_P_INCEQ */ - NULL, /* HB_P_LOCALDEC */ - NULL, /* HB_P_LOCALINC */ - NULL, /* HB_P_LOCALINCPUSH */ + hb_p_localfix, /* HB_P_LOCALDEC */ + hb_p_localfix, /* HB_P_LOCALINC */ + hb_p_localfix, /* HB_P_LOCALINCPUSH */ NULL, /* HB_P_PUSHFUNCSYM */ NULL /* HB_P_HASHGEN */ }; diff --git a/harbour/source/debug/dbgentry.c b/harbour/source/debug/dbgentry.c index 82726f8cd5..4cf0f03fb0 100644 --- a/harbour/source/debug/dbgentry.c +++ b/harbour/source/debug/dbgentry.c @@ -76,9 +76,9 @@ static BOOL hb_clsSetScope( BOOL fScope ) { return fScope; } #define STRNDUP( dest, source, len ) ( dest = hb_strndup( (source), (len) ) ) #define ARRAY_ADD( type, array, length ) \ - ( ( length++ == 0 ) ? array = ( type * ) hb_xgrab( sizeof( type ) ) : \ + ( ( ++length == 1 ) ? ( array = ( type * ) hb_xgrab( sizeof( type ) ) ) : \ ( ( array = ( type * ) hb_xrealloc( array, sizeof( type ) * length ) ) + \ - sizeof( type ) * ( length - 1 ) ) ) + length - 1 ) ) #define ARRAY_DEL( type, array, length, index ) \ do { \ @@ -640,6 +640,7 @@ hb_dbgAddModule( HB_DEBUGINFO *info, char *szName ) static void hb_dbgAddStack( HB_DEBUGINFO *info, char *szName, int nProcLevel ) { + char szBuff[ HB_SYMBOL_NAME_LEN + HB_SYMBOL_NAME_LEN + 5 ]; HB_CALLSTACKINFO *top; char *szFunction = strrchr( szName, ':' ); char *tmp; @@ -651,10 +652,9 @@ hb_dbgAddStack( HB_DEBUGINFO *info, char *szName, int nProcLevel ) top = ARRAY_ADD( HB_CALLSTACKINFO, info->aCallStack, info->nCallStackLen ); if ( info->bCodeBlock ) { - char tmp[ HB_SYMBOL_NAME_LEN + HB_SYMBOL_NAME_LEN + 5 ] = "(b)"; - - strcpy( tmp + 3, szFunction ); - top->szFunction = STRDUP( tmp ); + memcpy( szBuff, "(b)", 3 ); + hb_strncpy( szBuff + 3, szFunction, sizeof( szBuff ) - 4 ); + top->szFunction = STRDUP( szBuff ); } else { @@ -665,10 +665,8 @@ hb_dbgAddStack( HB_DEBUGINFO *info, char *szName, int nProcLevel ) else { /* We're in an (_INITSTATICSnnnnn) pseudo-function */ - char szName[ HB_SYMBOL_NAME_LEN + HB_SYMBOL_NAME_LEN + 5 ]; - - hb_procinfo( 0, szName, NULL, NULL ); - top->szFunction = STRDUP( szName ); + hb_procinfo( 0, szBuff, NULL, NULL ); + top->szFunction = STRDUP( szBuff ); } } tmp = strrchr( szName, '/' );