diff options
author | dgp <dgp@users.sourceforge.net> | 2020-04-02 20:50:32 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2020-04-02 20:50:32 (GMT) |
commit | c583e934033ce158b9b2b03320ecd598e908efcc (patch) | |
tree | d67fa0623c23072fb5ea25702de86ac87aeed067 /generic/tclDisassemble.c | |
parent | d429ddf40d173212a0fadb4794b91096c58201a1 (diff) | |
download | tcl-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.c | 30 |
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; |