summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2022-03-22 11:25:13 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2022-03-22 11:25:13 (GMT)
commit7d893da1b984ded235163f3ec8018195d9058f2a (patch)
tree2c801c8994dd38036f8af5d83f72ade9ea436d10
parent17098d70c767e79c2deb65981af371cb209cd159 (diff)
downloadtcl-7d893da1b984ded235163f3ec8018195d9058f2a.zip
tcl-7d893da1b984ded235163f3ec8018195d9058f2a.tar.gz
tcl-7d893da1b984ded235163f3ec8018195d9058f2a.tar.bz2
More progress
-rw-r--r--generic/tclInt.h4
-rw-r--r--generic/tclStringObj.c17
-rw-r--r--generic/tclStubInit.c2
-rw-r--r--generic/tclUtf.c1
-rw-r--r--tests/string.test2
-rw-r--r--tests/utf.test2
6 files changed, 14 insertions, 14 deletions
diff --git a/generic/tclInt.h b/generic/tclInt.h
index 0705c1d..538bca3 100644
--- a/generic/tclInt.h
+++ b/generic/tclInt.h
@@ -3328,6 +3328,10 @@ MODULE_SCOPE int TclZipfs_Init(Tcl_Interp *interp);
MODULE_SCOPE int TclUniCharCaseMatch(const int *, const int *, int);
MODULE_SCOPE int TclUniCharNcmp(const int *, const int *, unsigned long);
MODULE_SCOPE const char *TclUtfAtIndex(const char *, int);
+# undef Tcl_GetCharLength
+# define Tcl_GetCharLength TclGetCharLength
+# undef Tcl_UtfAtIndex
+# define Tcl_UtfAtIndex TclUtfAtIndex
#else
# define TclGetUnicodeFromObj_ Tcl_GetUnicodeFromObj
# define TclNewUnicodeObj Tcl_NewUnicodeObj
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c
index 2dc79eb..6417e1b 100644
--- a/generic/tclStringObj.c
+++ b/generic/tclStringObj.c
@@ -644,12 +644,12 @@ TclGetCharLength(
}
#if TCL_UTF_MAX > 3
+#undef Tcl_GetCharLength
int
Tcl_GetCharLength(
Tcl_Obj *objPtr) /* The String object to get the num chars
* of. */
{
- String *stringPtr;
int numChars;
/*
@@ -673,19 +673,12 @@ Tcl_GetCharLength(
*/
if (TclIsPureByteArray(objPtr)) {
- int length;
- (void) Tcl_GetByteArrayFromObj(objPtr, &length);
- return length;
+ (void) Tcl_GetByteArrayFromObj(objPtr, &numChars);
+ } else {
+ numChars = Tcl_NumUtfChars(Tcl_GetString(objPtr), -1);
}
-
- /*
- * OK, need to work with the object as a string.
- */
-
- SetUTF16StringFromAny(NULL, objPtr);
- stringPtr = GET_STRING(objPtr);
- return stringPtr->numChars;
+ return numChars;
}
#endif
diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c
index f9430cb..e3ebb8b 100644
--- a/generic/tclStubInit.c
+++ b/generic/tclStubInit.c
@@ -76,6 +76,8 @@
#undef Tcl_MacOSXOpenBundleResources
#undef TclWinConvertWSAError
#undef TclWinConvertError
+#undef Tcl_GetCharLength
+#undef Tcl_UtfAtIndex
#if defined(_WIN32) || defined(__CYGWIN__)
#define TclWinConvertWSAError (void (*)(DWORD))(void *)Tcl_WinConvertError
#define TclWinConvertError (void (*)(DWORD))(void *)Tcl_WinConvertError
diff --git a/generic/tclUtf.c b/generic/tclUtf.c
index c47ee97..4dd1e09 100644
--- a/generic/tclUtf.c
+++ b/generic/tclUtf.c
@@ -1193,6 +1193,7 @@ TclUtfAtIndex(
}
#if TCL_UTF_MAX > 3
+#undef Tcl_UtfAtIndex
const char *
Tcl_UtfAtIndex(
const char *src, /* The UTF-8 string. */
diff --git a/tests/string.test b/tests/string.test
index 9cac73d..203d0c6 100644
--- a/tests/string.test
+++ b/tests/string.test
@@ -422,7 +422,7 @@ test string-4.16.$noComp {string first, normal string vs pure unicode string} -b
# Representation checks are canaries
run {list [representationpoke $s] [representationpoke $m] \
[string first $m $s]}
-} -result {{utf32string 1} {utf32string 0} 2}
+} -result {{string 1} {string 0} 2}
test string-4.17.$noComp {string first, corner case} -body {
run {string first a aaa 4294967295}
} -result {-1}
diff --git a/tests/utf.test b/tests/utf.test
index 477216c..c79492e 100644
--- a/tests/utf.test
+++ b/tests/utf.test
@@ -1230,7 +1230,7 @@ test utf-19.1 {TclUniCharLen} -body {
test utf-20.1 {TclUniCharNcmp} ucs4 {
string compare [string range [format %c 0xFFFF] 0 0] [string range [format %c 0x10000] 0 0]
} -1
-test utf-20.2 {[4c591fa487] TclUniCharNcmp/TclUtfNcmp} {
+test utf-20.2 {[4c591fa487] TclUniCharNcmp/TclUtfNcmp} ucs4 {
set one [format %c 0xFFFF]
set two [format %c 0x10000]
set first [string compare $one $two]