summaryrefslogtreecommitdiffstats
path: root/generic/tclDisassemble.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2020-04-02 20:50:32 (GMT)
committerdgp <dgp@users.sourceforge.net>2020-04-02 20:50:32 (GMT)
commitc583e934033ce158b9b2b03320ecd598e908efcc (patch)
treed67fa0623c23072fb5ea25702de86ac87aeed067 /generic/tclDisassemble.c
parentd429ddf40d173212a0fadb4794b91096c58201a1 (diff)
downloadtcl-c583e934033ce158b9b2b03320ecd598e908efcc.zip
tcl-c583e934033ce158b9b2b03320ecd598e908efcc.tar.gz
tcl-c583e934033ce158b9b2b03320ecd598e908efcc.tar.bz2
Adapt another caller. This one had a bug when (TCL_UTF_MAX == 4) because it
was never adapted when TclUtfToUniChar change from returning 0 to returning 1 for a high surrogate.
Diffstat (limited to 'generic/tclDisassemble.c')
-rw-r--r--generic/tclDisassemble.c30
1 files changed, 8 insertions, 22 deletions
diff --git a/generic/tclDisassemble.c b/generic/tclDisassemble.c
index b60edca..94679fe 100644
--- a/generic/tclDisassemble.c
+++ b/generic/tclDisassemble.c
@@ -855,7 +855,6 @@ PrintSourceToObj(
{
register const char *p;
register int i = 0, len;
- Tcl_UniChar ch = 0;
if (stringPtr == NULL) {
Tcl_AppendToObj(appendObj, "\"\"", -1);
@@ -865,9 +864,10 @@ PrintSourceToObj(
Tcl_AppendToObj(appendObj, "\"", -1);
p = stringPtr;
for (; (*p != '\0') && (i < maxChars); p+=len) {
+ int ucs4;
- len = TclUtfToUniChar(p, &ch);
- switch (ch) {
+ len = TclUtfToUCS4(p, &ucs4);
+ switch (ucs4) {
case '"':
Tcl_AppendToObj(appendObj, "\\\"", -1);
i += 2;
@@ -893,28 +893,14 @@ PrintSourceToObj(
i += 2;
continue;
default:
-#if TCL_UTF_MAX > 4
- if (ch > 0xFFFF) {
- Tcl_AppendPrintfToObj(appendObj, "\\U%08x", ch);
+ if (ucs4 > 0xFFFF) {
+ Tcl_AppendPrintfToObj(appendObj, "\\U%08x", ucs4);
i += 10;
- } else
-#elif TCL_UTF_MAX > 3
- /* If len == 0, this means we have a char > 0xFFFF, resulting in
- * TclUtfToUniChar producing a surrogate pair. We want to output
- * this pair as a single Unicode character.
- */
- if (len == 0) {
- int upper = ((ch & 0x3FF) + 1) << 10;
- len = TclUtfToUniChar(p, &ch);
- Tcl_AppendPrintfToObj(appendObj, "\\U%08x", upper + (ch & 0x3FF));
- i += 10;
- } else
-#endif
- if (ch < 0x20 || ch >= 0x7F) {
- Tcl_AppendPrintfToObj(appendObj, "\\u%04x", ch);
+ } else if (ucs4 < 0x20 || ucs4 >= 0x7F) {
+ Tcl_AppendPrintfToObj(appendObj, "\\u%04x", ucs4);
i += 6;
} else {
- Tcl_AppendPrintfToObj(appendObj, "%c", ch);
+ Tcl_AppendPrintfToObj(appendObj, "%c", ucs4);
i++;
}
continue;