summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generic/tclListObj.c12
-rw-r--r--generic/tclStringObj.c3
2 files changed, 14 insertions, 1 deletions
diff --git a/generic/tclListObj.c b/generic/tclListObj.c
index ca9286d..a6985e0 100644
--- a/generic/tclListObj.c
+++ b/generic/tclListObj.c
@@ -647,6 +647,10 @@ Tcl_ListObjAppendElement(
* representation has changed.
*/
+ if ((listPtr)->internalRep.twoPtrValue.ptr2) {
+ ckfree((listPtr)->internalRep.twoPtrValue.ptr2);
+ (listPtr)->internalRep.twoPtrValue.ptr2 = NULL;
+ }
Tcl_InvalidateStringRep(listPtr);
return TCL_OK;
}
@@ -997,6 +1001,10 @@ Tcl_ListObjReplace(
* reflects the list's internal representation.
*/
+ if ((listPtr)->internalRep.twoPtrValue.ptr2) {
+ ckfree((listPtr)->internalRep.twoPtrValue.ptr2);
+ (listPtr)->internalRep.twoPtrValue.ptr2 = NULL;
+ }
Tcl_InvalidateStringRep(listPtr);
return TCL_OK;
}
@@ -1440,6 +1448,10 @@ TclLsetFlat(
* of all containing lists.
*/
+ if ((objPtr)->internalRep.twoPtrValue.ptr2) {
+ ckfree((objPtr)->internalRep.twoPtrValue.ptr2);
+ (objPtr)->internalRep.twoPtrValue.ptr2 = NULL;
+ }
Tcl_InvalidateStringRep(objPtr);
}
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c
index 099bb27..b3937e2 100644
--- a/generic/tclStringObj.c
+++ b/generic/tclStringObj.c
@@ -409,7 +409,7 @@ Tcl_GetCharLength(
(objPtr->typePtr == &tclExprCodeType) ||
(objPtr->typePtr == &tclFsPathType) ||
(objPtr->typePtr == &tclIndexType) ||
- /*(objPtr->typePtr == &tclListType) || This one causes cmdIL-1.29 failure */
+ (objPtr->typePtr == &tclListType) ||
(objPtr->typePtr == &tclNsNameType) ||
(objPtr->typePtr == &tclProcBodyType)) {
/* Try to convert object to String type, but remember old intRep. */
@@ -417,6 +417,7 @@ Tcl_GetCharLength(
Tcl_ObjType *prevtype = objPtr->typePtr;
void *prevdata = objPtr->internalRep.twoPtrValue.ptr1;
+ (void)Tcl_GetString(objPtr);
objPtr->internalRep.twoPtrValue.ptr1 = objPtr->internalRep.twoPtrValue.ptr2;
objPtr->typePtr = objPtr->internalRep.twoPtrValue.ptr1 ? &tclStringType: NULL;
objPtr->internalRep.twoPtrValue.ptr2 = NULL;