@@ -6789,8 +6789,8 @@ TEBCresume(
6789
6789
goto gotError ;
6790
6790
}
6791
6791
if (Tcl_IsShared (listPtr )) {
6792
- objPtr = TclDuplicatePureObj (
6793
- interp , listPtr , & tclListType );
6792
+ /* Do NOT use TclDuplicatePureObj here - shimmers abstract list to list */
6793
+ objPtr = Tcl_DuplicateObj ( listPtr );
6794
6794
if (!objPtr ) {
6795
6795
goto gotError ;
6796
6796
}
@@ -6867,21 +6867,41 @@ TEBCresume(
6867
6867
for (i = 0 ; i < numLists ; i ++ ) {
6868
6868
varListPtr = infoPtr -> varLists [i ];
6869
6869
numVars = varListPtr -> numVars ;
6870
+ int hasAbstractList ;
6870
6871
6871
6872
listPtr = OBJ_AT_DEPTH (listTmpDepth );
6872
- status = TclListObjGetElementsM (
6873
- interp , listPtr , & listLen , & elements );
6873
+ hasAbstractList =
6874
+ TclHasInternalRep (listPtr , & tclArithSeriesType );
6875
+ DECACHE_STACK_INFO ();
6876
+ if (hasAbstractList ) {
6877
+ status = Tcl_ListObjLength (interp , listPtr , & listLen );
6878
+ elements = NULL ;
6879
+ } else {
6880
+ status = TclListObjGetElementsM (
6881
+ interp , listPtr , & listLen , & elements );
6882
+ }
6874
6883
if (status != TCL_OK ) {
6884
+ CACHE_STACK_INFO ();
6875
6885
goto gotError ;
6876
6886
}
6877
-
6887
+ CACHE_STACK_INFO ();
6878
6888
6879
6889
valIndex = (iterNum * numVars );
6880
6890
for (j = 0 ; j < numVars ; j ++ ) {
6881
6891
if (valIndex >= listLen ) {
6882
6892
TclNewObj (valuePtr );
6883
6893
} else {
6884
- valuePtr = elements [valIndex ];
6894
+ if (elements ) {
6895
+ valuePtr = elements [valIndex ];
6896
+ } else {
6897
+ DECACHE_STACK_INFO ();
6898
+ valuePtr = TclArithSeriesObjIndex (
6899
+ NULL , listPtr , valIndex );
6900
+ if (valuePtr == NULL ) {
6901
+ TclNewObj (valuePtr );
6902
+ }
6903
+ CACHE_STACK_INFO ();
6904
+ }
6885
6905
}
6886
6906
6887
6907
varIndex = varListPtr -> varIndexes [j ];
0 commit comments