diff --git a/harbour/ChangeLog b/harbour/ChangeLog index adeadc09cc..7633305087 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,8 @@ +19991111-12:02 GMT+1 Victor Szel + * source/vm/dymsym.c + % hb_dynsymGet(), hb_dynsymFindName() - Further optimized, toupper() calls + changed to local uppercase conversion code. One variable eliminated. + 19991111-11:19 GMT+1 Antonio Linares * source/vm/hvm.c hb_stack.pItems initialized to NULL (required by fm.c module) diff --git a/harbour/source/vm/dynsym.c b/harbour/source/vm/dynsym.c index 2cfd99638e..c8b600e97b 100644 --- a/harbour/source/vm/dynsym.c +++ b/harbour/source/vm/dynsym.c @@ -33,8 +33,6 @@ * */ -#include - #include "extend.h" #define SYM_ALLOCATED ( ( HB_SYMBOLSCOPE ) -1 ) @@ -138,16 +136,20 @@ PHB_DYNS hb_dynsymGet( char * szName ) /* finds and creates a symbol if not fou HB_TRACE(HB_TR_DEBUG, ("hb_dynsymGet(%s)", szName)); /* make a copy as we may get a const string, then turn it to uppercase */ + /* NOTE: This block is optimized for speed [vszel] */ { - ULONG ulLen = strlen( szName ); + int iLen = strlen( szName ); char * pDest = szUprName; - - if( ulLen > HB_SYMBOL_NAME_LEN ) - ulLen = HB_SYMBOL_NAME_LEN; - pDest[ ulLen ] = '\0'; - while( ulLen-- ) - *pDest++ = toupper( *szName++ ); + if( iLen > HB_SYMBOL_NAME_LEN ) + iLen = HB_SYMBOL_NAME_LEN; + + pDest[ iLen ] = '\0'; + while( iLen-- ) + { + char cChar = *szName++; + *pDest++ = ( cChar >= 'a' && cChar <= 'z' ) ? cChar - ( 'a' - 'A' ) : cChar; + } } pDynSym = hb_dynsymFind( szUprName ); @@ -159,27 +161,28 @@ PHB_DYNS hb_dynsymGet( char * szName ) /* finds and creates a symbol if not fou PHB_DYNS hb_dynsymFindName( char * szName ) /* finds a symbol */ { - PHB_DYNS pDynSym; char szUprName[ HB_SYMBOL_NAME_LEN + 1 ]; HB_TRACE(HB_TR_DEBUG, ("hb_dynsymFindName(%s)", szName)); /* make a copy as we may get a const string, then turn it to uppercase */ + /* NOTE: This block is optimized for speed [vszel] */ { - ULONG ulLen = strlen( szName ); + int iLen = strlen( szName ); char * pDest = szUprName; - - if( ulLen > HB_SYMBOL_NAME_LEN ) - ulLen = HB_SYMBOL_NAME_LEN; - pDest[ ulLen ] = '\0'; - while( ulLen-- ) - *pDest++ = toupper( *szName++ ); + if( iLen > HB_SYMBOL_NAME_LEN ) + iLen = HB_SYMBOL_NAME_LEN; + + pDest[ iLen ] = '\0'; + while( iLen-- ) + { + char cChar = *szName++; + *pDest++ = ( cChar >= 'a' && cChar <= 'z' ) ? cChar - ( 'a' - 'A' ) : cChar; + } } - pDynSym = hb_dynsymFind( szUprName ); - - return pDynSym; + return hb_dynsymFind( szUprName ); } PHB_DYNS hb_dynsymFind( char * szName )