From 24ad01e41de685c378459e7176554c77dfcf917f Mon Sep 17 00:00:00 2001 From: griffin Date: Tue, 22 Aug 2023 19:53:59 +0000 Subject: Thanks for cherrypicking this change for 8.7. 'Someone versed in the ArithSeries work' has fixed the regressions. The ArithSeries in 8.7 is a precursor one-off of Abstact Lists. --- generic/tclCmdAH.c | 4 +++- generic/tclExecute.c | 6 ++++-- generic/tclVar.c | 3 ++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/generic/tclCmdAH.c b/generic/tclCmdAH.c index 8bc43d3..07be21d 100644 --- a/generic/tclCmdAH.c +++ b/generic/tclCmdAH.c @@ -2927,7 +2927,9 @@ EachloopCmd( for (i=0 ; ivCopyList[i] = TclListObjCopy(interp, objv[1+i*2]); + + /* Do not use TclListObjCopy here - shimmers arithseries to list */ + statePtr->vCopyList[i] = Tcl_DuplicateObj(objv[1+i*2]); if (statePtr->vCopyList[i] == NULL) { result = TCL_ERROR; goto done; diff --git a/generic/tclExecute.c b/generic/tclExecute.c index d7055f2..c62159a 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -6692,7 +6692,8 @@ TEBCresume( numVars = varListPtr->numVars; listVarPtr = LOCAL(listTmpIndex); - listPtr = TclListObjCopy(NULL, listVarPtr->value.objPtr); + /* Do not use TclListObjCopy here - shimmers arithseries to list */ + listPtr = Tcl_DuplicateObj(listVarPtr->value.objPtr); TclListObjGetElementsM(interp, listPtr, &listLen, &elements); valIndex = (iterNum * numVars); @@ -6789,7 +6790,8 @@ TEBCresume( goto gotError; } if (Tcl_IsShared(listPtr)) { - objPtr = TclListObjCopy(NULL, listPtr); + /* Do not use TclListObjCopy here - shimmers arithseries to list */ + objPtr = Tcl_DuplicateObj(listPtr); Tcl_IncrRefCount(objPtr); Tcl_DecrRefCount(listPtr); OBJ_AT_DEPTH(listTmpDepth) = objPtr; diff --git a/generic/tclVar.c b/generic/tclVar.c index 1ed3eae..4110d81 100644 --- a/generic/tclVar.c +++ b/generic/tclVar.c @@ -3221,7 +3221,8 @@ ArrayForNRCmd( * loop) don't vanish. */ - varListObj = TclListObjCopy(NULL, objv[1]); + /* Do not use TclListObjCopy here - shimmers arithseries to list */ + varListObj = Tcl_DuplicateObj(objv[1]); if (!varListObj) { return TCL_ERROR; } -- cgit v0.12