From 073ff3c5fe40eeac93ae5508b647a7019006f431 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 28 Jun 2017 13:32:16 +0000 Subject: Eliminate use of (expensive) Tcl_UtfToUpper() from "format": Just generate the expected uppercase characters right away from the start. No change in functionality, just code optimization. --- generic/tclStringObj.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index 4a3b6f1..c84b500 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -2027,8 +2027,11 @@ Tcl_AppendFormatToObj( segmentLimit -= 1; precision--; break; - case 'x': case 'X': + Tcl_AppendToObj(segment, "0X", 2); + segmentLimit -= 2; + break; + case 'x': Tcl_AppendToObj(segment, "0x", 2); segmentLimit -= 2; break; @@ -2192,7 +2195,11 @@ Tcl_AppendFormatToObj( } digitOffset = (int) (bits % base); if (digitOffset > 9) { - bytes[numDigits] = 'a' + digitOffset - 10; + if (ch == 'X') { + bytes[numDigits] = 'A' + digitOffset - 10; + } else { + bytes[numDigits] = 'a' + digitOffset - 10; + } } else { bytes[numDigits] = '0' + digitOffset; } @@ -2314,14 +2321,6 @@ Tcl_AppendFormatToObj( goto error; } - switch (ch) { - case 'E': - case 'G': - case 'X': { - Tcl_SetObjLength(segment, Tcl_UtfToUpper(TclGetString(segment))); - } - } - if (width>0 && numChars<0) { numChars = Tcl_GetCharLength(segment); } -- cgit v0.12