summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generic/tclExecute.c2
-rw-r--r--generic/tclIOGT.c2
-rw-r--r--generic/tclIORChan.c4
-rw-r--r--generic/tclInt.h1
-rw-r--r--generic/tclListObj.c7
-rw-r--r--generic/tclVar.c4
6 files changed, 9 insertions, 11 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index ae7f0df..0371d90 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -6468,7 +6468,7 @@ TEBCresume(
goto gotError;
}
if (Tcl_IsShared(listPtr)) {
- objPtr = Tcl_DuplicateObj(listPtr);
+ objPtr = TclListObjCopy(NULL, listPtr);
Tcl_IncrRefCount(objPtr);
Tcl_DecrRefCount(listPtr);
OBJ_AT_DEPTH(listTmpDepth) = objPtr;
diff --git a/generic/tclIOGT.c b/generic/tclIOGT.c
index 4497797..f577599 100644
--- a/generic/tclIOGT.c
+++ b/generic/tclIOGT.c
@@ -379,7 +379,7 @@ ExecuteCallback(
unsigned char *resBuf;
Tcl_InterpState state = NULL;
int res = TCL_OK;
- Tcl_Obj *command = Tcl_DuplicateObj(dataPtr->command);
+ Tcl_Obj *command = TclListObjCopy(NULL, dataPtr->command);
Tcl_Interp *eval = dataPtr->interp;
Tcl_Preserve(eval);
diff --git a/generic/tclIORChan.c b/generic/tclIORChan.c
index af61c4c..f313ab7 100644
--- a/generic/tclIORChan.c
+++ b/generic/tclIORChan.c
@@ -2261,7 +2261,7 @@ NewReflectedChannel(
rcPtr->mode = mode;
rcPtr->interest = 0; /* Initially no interest registered */
- rcPtr->cmd = Tcl_DuplicateObj(cmdpfxObj);
+ rcPtr->cmd = TclListObjCopy(NULL, cmdpfxObj);
Tcl_IncrRefCount(rcPtr->cmd);
rcPtr->methods = Tcl_NewListObj(METH_WRITE + 1, NULL);
while (mn <= (int)METH_WRITE) {
@@ -2398,7 +2398,7 @@ InvokeTclMethod(
* before the channel id.
*/
- cmd = Tcl_DuplicateObj(rcPtr->cmd);
+ cmd = TclListObjCopy(NULL, rcPtr->cmd);
Tcl_ListObjIndex(NULL, rcPtr->methods, method, &methObj);
Tcl_ListObjAppendElement(NULL, cmd, methObj);
Tcl_ListObjAppendElement(NULL, cmd, rcPtr->name);
diff --git a/generic/tclInt.h b/generic/tclInt.h
index 1641ede..a2e8a51 100644
--- a/generic/tclInt.h
+++ b/generic/tclInt.h
@@ -3390,6 +3390,7 @@ MODULE_SCOPE Tcl_Obj * TclListObjGetElement(Tcl_Obj *listObj, Tcl_Size index);
/* TIP #280 */
MODULE_SCOPE void TclListLines(Tcl_Obj *listObj, Tcl_Size line, Tcl_Size n,
Tcl_Size *lines, Tcl_Obj *const *elems);
+MODULE_SCOPE Tcl_Obj * TclListObjCopy(Tcl_Interp *interp, Tcl_Obj *listPtr);
MODULE_SCOPE int TclListObjAppendElements(Tcl_Interp *interp,
Tcl_Obj *toObj, Tcl_Size elemCount,
Tcl_Obj *const elemObjv[]);
diff --git a/generic/tclListObj.c b/generic/tclListObj.c
index 0e70f6b..e9cff27 100644
--- a/generic/tclListObj.c
+++ b/generic/tclListObj.c
@@ -2572,7 +2572,6 @@ TclLindexList(
Tcl_Obj *indexListCopy;
Tcl_Obj **indexObjs;
Tcl_Size numIndexObjs;
- int status;
/*
* Determine whether argPtr designates a list or a single index. We have
@@ -2602,10 +2601,7 @@ TclLindexList(
*/
indexListCopy = TclListObjCopy(NULL, argObj);
- status = (indexListCopy ? TclListObjGetElementsM(
- interp, indexListCopy, &numIndexObjs, &indexObjs) : TCL_ERROR);
- if (status != TCL_OK) {
- Tcl_DecrRefCount(indexListCopy);
+ if (indexListCopy == NULL) {
/*
* The argument is neither an index nor a well-formed list.
* Report the error via TclLindexFlat.
@@ -2613,6 +2609,7 @@ TclLindexList(
*/
return TclLindexFlat(interp, listObj, 1, &argObj);
}
+ TclListObjGetElementsM(interp, indexListCopy, &numIndexObjs, &indexObjs);
listObj = TclLindexFlat(interp, listObj, numIndexObjs, indexObjs);
Tcl_DecrRefCount(indexListCopy);
return listObj;
diff --git a/generic/tclVar.c b/generic/tclVar.c
index b0fbb82..31312e1 100644
--- a/generic/tclVar.c
+++ b/generic/tclVar.c
@@ -3099,7 +3099,7 @@ ArrayForNRCmd(
* loop) don't vanish.
*/
- varListObj = Tcl_DuplicateObj(objv[1]);
+ varListObj = TclListObjCopy(NULL, objv[1]);
if (!varListObj) {
return TCL_ERROR;
}
@@ -4075,7 +4075,7 @@ ArraySetCmd(
* the loop and return an error.
*/
- copyListObj = Tcl_DuplicateObj(arrayElemObj);
+ copyListObj = TclListObjCopy(NULL, arrayElemObj);
if (!copyListObj) {
return TCL_ERROR;
}