summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhobbs <hobbs>2002-05-30 03:26:40 (GMT)
committerhobbs <hobbs>2002-05-30 03:26:40 (GMT)
commit06a24b87b9c810cdda2178d9b076750f15348a0b (patch)
tree2b353f690614a60acbd9fd9462dbfbe7d0b25932
parenta8b71532d63c4ab14b2e5c3bca190a3bc87a5cc4 (diff)
downloadtcl-06a24b87b9c810cdda2178d9b076750f15348a0b.zip
tcl-06a24b87b9c810cdda2178d9b076750f15348a0b.tar.gz
tcl-06a24b87b9c810cdda2178d9b076750f15348a0b.tar.bz2
* generic/tclExecute.c (TclExecuteByteCode INST_STR_CMP):
* generic/tclCmdMZ.c (Tcl_StringObjCmd): changed the case for choosing the Tcl_UniCharNcmp compare to when both objs are of StringType, as benchmarks show that is the optimal check (both bigendian and littleendian systems).
-rw-r--r--generic/tclCmdMZ.c16
-rw-r--r--generic/tclExecute.c12
2 files changed, 13 insertions, 15 deletions
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c
index 3707ca4..c5dfa5d 100644
--- a/generic/tclCmdMZ.c
+++ b/generic/tclCmdMZ.c
@@ -14,7 +14,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclCmdMZ.c,v 1.69 2002/05/29 10:35:45 dkf Exp $
+ * RCS: @(#) $Id: tclCmdMZ.c,v 1.70 2002/05/30 03:26:41 hobbs Exp $
*/
#include "tclInt.h"
@@ -1215,15 +1215,13 @@ Tcl_StringObjCmd(dummy, interp, objc, objv)
string1 = (char*) Tcl_GetByteArrayFromObj(objv[0], &length1);
string2 = (char*) Tcl_GetByteArrayFromObj(objv[1], &length2);
strCmpFn = memcmp;
- } else if (((objv[0]->typePtr == &tclStringType)
- && (objv[0]->bytes == NULL))
- || ((objv[1]->typePtr == &tclStringType)
- && (objv[1]->bytes == NULL))) {
+ } else if ((objv[0]->typePtr == &tclStringType)
+ && (objv[1]->typePtr == &tclStringType)) {
/*
- * Use UNICODE versions of string comparisons since that
- * won't cause undue type conversions and we can work with
- * characters all of a fixed size (much faster.), but only
- * when one of the objects is a pure UNICODE object.
+ * Do a unicode-specific comparison if both of the args
+ * are of String type. In benchmark testing this proved
+ * the most efficient check between the unicode and
+ * string comparison operations.
*/
string1 = (char*) Tcl_GetUnicodeFromObj(objv[0], &length1);
string2 = (char*) Tcl_GetUnicodeFromObj(objv[1], &length2);
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index 4658711..9d3ec1c 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclExecute.c,v 1.55 2002/05/29 10:35:45 dkf Exp $
+ * RCS: @(#) $Id: tclExecute.c,v 1.56 2002/05/30 03:26:40 hobbs Exp $
*/
#include "tclInt.h"
@@ -2741,12 +2741,12 @@ TclExecuteByteCode(interp, codePtr)
iResult = memcmp(s1, s2,
(size_t) ((s1len < s2len) ? s1len : s2len));
} else if (((valuePtr->typePtr == &tclStringType)
- && (valuePtr->bytes == NULL))
- || ((value2Ptr->typePtr == &tclStringType)
- && (value2Ptr->bytes == NULL))) {
+ && (value2Ptr->typePtr == &tclStringType))) {
/*
- * Do a unicode-specific comparison if one of the args
- * only has the unicode rep.
+ * Do a unicode-specific comparison if both of the args
+ * are of String type. In benchmark testing this proved
+ * the most efficient check between the unicode and
+ * string comparison operations.
*/
Tcl_UniChar *uni1, *uni2;
uni1 = Tcl_GetUnicodeFromObj(valuePtr, &s1len);