summaryrefslogtreecommitdiffstats
path: root/generic/tclListObj.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclListObj.c')
-rw-r--r--generic/tclListObj.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/generic/tclListObj.c b/generic/tclListObj.c
index 11374cc..e29e547 100644
--- a/generic/tclListObj.c
+++ b/generic/tclListObj.c
@@ -407,6 +407,7 @@ TclListObjCopy(
* to be returned. */
{
Tcl_Obj *copyPtr;
+ int length;
if (listPtr->typePtr != &tclListType) {
if (SetListFromAny(interp, listPtr) != TCL_OK) {
@@ -415,8 +416,11 @@ TclListObjCopy(
}
TclNewObj(copyPtr);
- TclInvalidateStringRep(copyPtr);
- DupListInternalRep(listPtr, copyPtr);
+ TclListObjLength(NULL, listPtr, &length);
+ if (length > 0) {
+ TclInvalidateStringRep(copyPtr);
+ DupListInternalRep(listPtr, copyPtr);
+ }
return copyPtr;
}
@@ -465,15 +469,15 @@ Tcl_ListObjGetElements(
if (listPtr->typePtr != &tclListType) {
int result;
+ result = SetListFromAny(interp, listPtr);
+ if (result != TCL_OK) {
+ return result;
+ }
if (listPtr->bytes == &tclEmptyString) {
*objcPtr = 0;
*objvPtr = NULL;
return TCL_OK;
}
- result = SetListFromAny(interp, listPtr);
- if (result != TCL_OK) {
- return result;
- }
}
listRepPtr = ListRepPtr(listPtr);
*objcPtr = listRepPtr->elemCount;
@@ -1871,6 +1875,7 @@ SetListFromAny(
int estCount, length;
const char *limit, *nextElem = TclGetStringFromObj(objPtr, &length);
+ if (length == 0) return TCL_OK;
/*
* Allocate enough space to hold a (Tcl_Obj *) for each
* (possible) list element.