From 23bb599ea9b1616fb7ba50b005c75b7115b406ae Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Fri, 7 Apr 2006 13:50:40 +0000 Subject: [PATCH] 2006-04-07 15:30 UTC+0100 Viktor Szakats (viktor.szakats syenar.hu) * harbour/source/vm/classes.c % Optimized __CLSADDMSG() to call hb_parc() only once instead of 25 times for most cases. ! Possible problem fixed in __CLSADDMSG() where message parameter was required to be uppercase when overloading operator .NOT., .AND. or .OR. % hb_dynsymGet() calls replaced with hb_dynsymGetCase() where the parameter was an already uppercased constant. * harbour/source/vm/dynsym.c ! Fixed HB_TRACE() function name in hb_dynsymGetCase(). --- harbour/ChangeLog | 13 ++++ harbour/source/vm/classes.c | 117 ++++++++++++++++++------------------ harbour/source/vm/dynsym.c | 2 +- 3 files changed, 73 insertions(+), 59 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 230b9e8391..a897bf4ea8 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,19 @@ 2002-12-01 13:30 UTC+0100 Foo Bar */ +2006-04-09 14:55 UTC+0300 Alexander Kresin + * contrib/rdd_ads/ads1.c + * Added possibility to save memo fields > 64K + +2006-04-08 02:42 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/source/rdd/dbfcdx/dbfcdx1.c + ! update current order number after ordDestroy() + + * harbour/source/rdd/dbfntx/dbfntx1.c + % Optimized __CLSADDMSG() to call hb_parc() only once instead + but I forgot to also change the record in DBF + ! Possible problem fixed in __CLSADDMSG() where message parameter + was required to be uppercase when overloading operator .NOT., * harbour/source/vm/classes.c % hb_dynsymGet() calls replaced with hb_dynsymGetCase() where the of 25 times for most cases. diff --git a/harbour/source/vm/classes.c b/harbour/source/vm/classes.c index e9ce79040d..7c186327d7 100644 --- a/harbour/source/vm/classes.c +++ b/harbour/source/vm/classes.c @@ -879,12 +879,12 @@ PHB_FUNC hb_objGetMthd( PHB_ITEM pObject, PHB_SYMB pMessage, BOOL lAllowErrFunc if( s_msgClassName == NULL ) { - s_msgClassName = hb_dynsymGet( "CLASSNAME" ); /* Standard messages */ - s_msgClassH = hb_dynsymGet( "CLASSH" ); /* Not present in classdef. */ - s_msgClassSel = hb_dynsymGet( "CLASSSEL" ); - s_msgEval = hb_dynsymGet( "EVAL" ); - /*s_msgClsParent = hb_dynsymGet( "ISDERIVEDFROM" );*/ - /*s_msgClass = hb_dynsymGet( "CLASS" );*/ + s_msgClassName = hb_dynsymGetCase( "CLASSNAME" ); /* Standard messages */ + s_msgClassH = hb_dynsymGetCase( "CLASSH" ); /* Not present in classdef. */ + s_msgClassSel = hb_dynsymGetCase( "CLASSSEL" ); + s_msgEval = hb_dynsymGetCase( "EVAL" ); + /*s_msgClsParent = hb_dynsymGetCase( "ISDERIVEDFROM" );*/ + /*s_msgClass = hb_dynsymGetCase( "CLASS" );*/ } if( pMsg == s_msgClassName ) @@ -1018,7 +1018,8 @@ HB_FUNC( __CLSADDMSG ) { PCLASS pClass = s_pClasses + ( uiClass - 1 ); - PHB_DYNS pMessage ; + PHB_DYNS pMessage; + char * szMessage = hb_parc( 2 ); USHORT uiBucket; @@ -1026,58 +1027,58 @@ HB_FUNC( __CLSADDMSG ) USHORT uiAt; PMETHOD pNewMeth; - if (strcmp("+",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpPlus" ) ; - else if (strcmp("-",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpMinus") ; - else if (strcmp("*",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpMult" ) ; - else if (strcmp("/",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpDivide") ; - else if (strcmp("%",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpMod" ) ; - else if (strcmp("^",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpPower") ; - else if (strcmp("**",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpPower" ) ; - else if (strcmp("++",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpInc" ) ; - else if (strcmp("--",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpDec" ) ; - else if (strcmp("==",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpEqual") ; - else if (strcmp("=",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpEqual") ; - else if (strcmp("!=",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpNotEqual") ; - else if (strcmp("<>",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpNotEqual") ; - else if (strcmp("#",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpNotEqual") ; - else if (strcmp("<",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpLess" ) ; - else if (strcmp("<=",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpLessEqual") ; - else if (strcmp(">",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpGreater") ; - else if (strcmp(">=",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpGreaterEqual") ; - else if (strcmp(":=",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpAssign") ; - else if (strcmp("$",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpInstring") ; - else if (strcmp("!",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpNot" ) ; - else if (strcmp(".NOT.",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpNot" ) ; - else if (strcmp(".AND.",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpAnd" ) ; - else if (strcmp(".OR.",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpOr" ) ; - else if( strcmp("[]",hb_parc(2)) == 0) - pMessage = hb_dynsymGet( "__OpArrayIndex" ) ; + if (strcmp("+", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPPLUS" ); + else if (strcmp("-", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPMINUS" ); + else if (strcmp("*", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPMULT" ); + else if (strcmp("/", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPDIVIDE" ); + else if (strcmp("%", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPMOD" ); + else if (strcmp("^", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPPOWER" ); + else if (strcmp("**", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPPOWER" ); + else if (strcmp("++", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPINC" ); + else if (strcmp("--", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPDEC" ); + else if (strcmp("==", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPEQUAL" ); + else if (strcmp("=", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPEQUAL" ); + else if (strcmp("!=", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPNOTEQUAL" ); + else if (strcmp("<>", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPNOTEQUAL" ); + else if (strcmp("#", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPNOTEQUAL" ); + else if (strcmp("<", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPLESS" ); + else if (strcmp("<=", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPLESSEQUAL" ); + else if (strcmp(">", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPGREATER" ); + else if (strcmp(">=", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPGREATEREQUAL" ); + else if (strcmp(":=", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPASSIGN" ); + else if (strcmp("$", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPINSTRING" ); + else if (strcmp("!", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPNOT" ); + else if (hb_stricmp(".NOT.", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPNOT" ); + else if (hb_stricmp(".AND.", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPAND" ); + else if (hb_stricmp(".OR.", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPOR" ); + else if( strcmp("[]", szMessage) == 0) + pMessage = hb_dynsymGetCase( "__OPARRAYINDEX" ); else - pMessage = hb_dynsymGet( hb_parc( 2 ) ); + pMessage = hb_dynsymGet( szMessage ); if( wType == HB_OO_MSG_INLINE && hb_param( 3, HB_IT_BLOCK ) == NULL ) hb_errRT_BASE( EG_ARG, 3000, NULL, "__CLSADDMSG", 0 ); diff --git a/harbour/source/vm/dynsym.c b/harbour/source/vm/dynsym.c index cb62f843c1..f01a52b593 100644 --- a/harbour/source/vm/dynsym.c +++ b/harbour/source/vm/dynsym.c @@ -165,7 +165,7 @@ HB_EXPORT PHB_DYNS hb_dynsymGetCase( char * szName ) /* finds and creates a sym { PHB_DYNS pDynSym; - HB_TRACE(HB_TR_DEBUG, ("hb_dynsymGet(%s)", szName)); + HB_TRACE(HB_TR_DEBUG, ("hb_dynsymGetCase(%s)", szName)); pDynSym = hb_dynsymFind( szName ); if( ! pDynSym ) /* Does it exists ? */