diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2011-08-25 12:03:56 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2011-08-25 12:03:56 (GMT) |
commit | f5577bc0ca1c7f01baac7f612ad52f3526ffe327 (patch) | |
tree | d5a8067cf4b83a338c420ea363bf359d3f33dcbf /generic/tclStringObj.c | |
parent | dd0f607950cf1416722aa14bd13506278ec6dd2c (diff) | |
parent | 545f0cffe802c26b1779eb2f9ca6c4ade8c8c654 (diff) | |
download | tcl-f5577bc0ca1c7f01baac7f612ad52f3526ffe327.zip tcl-f5577bc0ca1c7f01baac7f612ad52f3526ffe327.tar.gz tcl-f5577bc0ca1c7f01baac7f612ad52f3526ffe327.tar.bz2 |
Merge to feature branch
Diffstat (limited to 'generic/tclStringObj.c')
-rw-r--r-- | generic/tclStringObj.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index 993a694..9cb973e 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -2661,6 +2661,31 @@ TclStringObjReverse( Tcl_Obj *resultPtr = objPtr; char c; + /* Special case: Pure Unicode array */ + if ((objPtr->typePtr == &tclStringType) && !objPtr->bytes) { + String *strPtr = GET_STRING(objPtr); + if (strPtr->hasUnicode) { + String *dstStrPtr = stringAlloc(strPtr->numChars); + Tcl_UniChar *chars = strPtr->unicode; + Tcl_UniChar *dstChars = dstStrPtr->unicode + strPtr->numChars; + + resultPtr = Tcl_NewObj(); + resultPtr->bytes = NULL; + SET_STRING(resultPtr, dstStrPtr); + resultPtr->typePtr = &tclStringType; + dstStrPtr->maxChars = strPtr->numChars; + dstStrPtr->unicode[strPtr->numChars] = 0; + dstStrPtr->numChars = strPtr->numChars; + dstStrPtr->hasUnicode = 1; + dstStrPtr->allocated = 0; + + while (--dstChars >= dstStrPtr->unicode) { + *dstChars = *chars++; + } + return resultPtr; + } + } + src = TclGetString(objPtr); if (Tcl_IsShared(objPtr)) { resultPtr = Tcl_NewObj(); |