diff options
author | griffin <briang42@easystreet.net> | 2023-05-23 21:36:46 (GMT) |
---|---|---|
committer | griffin <briang42@easystreet.net> | 2023-05-23 21:36:46 (GMT) |
commit | e91f967003cb7c4aa4512e9afc4bf5199e48ba92 (patch) | |
tree | 90757e0d4dc74d64240ebf00ddaa08f36f1a4854 /generic/tclCmdIL.c | |
parent | fa313109d6a46e437c1583c859b6e79e0a6dae2a (diff) | |
parent | 54a1d7e517922684d8612dea07b479a6d493e2f1 (diff) | |
download | tcl-e91f967003cb7c4aa4512e9afc4bf5199e48ba92.zip tcl-e91f967003cb7c4aa4512e9afc4bf5199e48ba92.tar.gz tcl-e91f967003cb7c4aa4512e9afc4bf5199e48ba92.tar.bz2 |
Merge trunk
Diffstat (limited to 'generic/tclCmdIL.c')
-rw-r--r-- | generic/tclCmdIL.c | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c index 70e2242..60af33c 100644 --- a/generic/tclCmdIL.c +++ b/generic/tclCmdIL.c @@ -2314,7 +2314,10 @@ Tcl_LassignObjCmd( return TCL_ERROR; } - listCopyPtr = TclDuplicatePureObj(objv[1]); + listCopyPtr = TclDuplicatePureObj(interp, objv[1], &tclListType); + if (!listCopyPtr) { + return TCL_ERROR; + } Tcl_IncrRefCount(listCopyPtr); /* Important! fs */ code = TclListObjGetElementsM( @@ -2481,7 +2484,10 @@ Tcl_LinsertObjCmd( listPtr = objv[1]; if (Tcl_IsShared(listPtr)) { - listPtr = TclDuplicatePureObj(listPtr); + listPtr = TclDuplicatePureObj(interp, listPtr, &tclListType); + if (!listPtr) { + return TCL_ERROR; + } copied = 1; } @@ -2678,7 +2684,10 @@ Tcl_LpopObjCmd( if (objc == 2) { if (Tcl_IsShared(listPtr)) { - listPtr = TclDuplicatePureObj(listPtr); + listPtr = TclDuplicatePureObj(interp, listPtr, &tclListType); + if (!listPtr) { + return TCL_ERROR; + } copied = 1; } result = Tcl_ListObjReplace(interp, listPtr, listLen - 1, 1, 0, NULL); @@ -2688,7 +2697,6 @@ Tcl_LpopObjCmd( } return result; } - Tcl_IncrRefCount(listPtr); } else { Tcl_Obj *newListPtr = TclLsetFlat(interp, listPtr, objc-2, objv+2, NULL); if (newListPtr == NULL) { @@ -2698,11 +2706,11 @@ Tcl_LpopObjCmd( return TCL_ERROR; } else { listPtr = newListPtr; + TclUndoRefCount(listPtr); } } stored = Tcl_ObjSetVar2(interp, objv[1], NULL, listPtr, TCL_LEAVE_ERR_MSG); - Tcl_DecrRefCount(listPtr); if (stored == NULL) { return TCL_ERROR; } @@ -2863,7 +2871,11 @@ Tcl_LremoveObjCmd( */ if (Tcl_IsShared(listObj)) { - listObj = TclDuplicatePureObj(listObj); + listObj = TclDuplicatePureObj(interp, listObj, &tclListType); + if (!listObj) { + status = TCL_ERROR; + goto done; + } copied = 1; } num = 0; @@ -3114,7 +3126,10 @@ Tcl_LreplaceObjCmd( listPtr = objv[1]; if (Tcl_IsShared(listPtr)) { - listPtr = TclDuplicatePureObj(listPtr); + listPtr = TclDuplicatePureObj(interp, listPtr, &tclListType); + if (!listPtr) { + return TCL_ERROR; + } } /* @@ -4742,7 +4757,7 @@ Tcl_LsortObjCmd( * 1675116] */ - listObj = TclDuplicatePureObj(listObj); + listObj = TclDuplicatePureObj(interp ,listObj, &tclListType); if (listObj == NULL) { sortInfo.resultCode = TCL_ERROR; goto done; @@ -5098,7 +5113,10 @@ Tcl_LeditObjCmd( } if (Tcl_IsShared(listPtr)) { - listPtr = TclDuplicatePureObj(listPtr); + listPtr = TclDuplicatePureObj(interp, listPtr, &tclListType); + if (!listPtr) { + return TCL_ERROR; + } createdNewObj = 1; } else { createdNewObj = 0; |