diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-11-28 23:44:33 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-11-28 23:44:33 (GMT) |
| commit | 8b03ef0b29d52146cae3414edb12216bcc61feeb (patch) | |
| tree | 39d60f75eb717fa93a1571cf2eec5cf397bf4699 | |
| parent | 8f6442b0c910bb7b7431c390a2dbb92985d83162 (diff) | |
| parent | 71b0ad990caaf6a297049da2c63821a4e29c57ac (diff) | |
| download | tcl-8b03ef0b29d52146cae3414edb12216bcc61feeb.zip tcl-8b03ef0b29d52146cae3414edb12216bcc61feeb.tar.gz tcl-8b03ef0b29d52146cae3414edb12216bcc61feeb.tar.bz2 | |
Merge 8.7
| -rw-r--r-- | generic/tclArithSeries.h | 4 | ||||
| -rw-r--r-- | generic/tclAssembly.c | 5 | ||||
| -rw-r--r-- | generic/tclBinary.c | 10 | ||||
| -rw-r--r-- | generic/tclCmdAH.c | 6 | ||||
| -rw-r--r-- | generic/tclCmdIL.c | 9 | ||||
| -rw-r--r-- | generic/tclCmdMZ.c | 5 | ||||
| -rw-r--r-- | generic/tclEnsemble.c | 12 | ||||
| -rw-r--r-- | generic/tclListObj.c | 4 | ||||
| -rw-r--r-- | generic/tclProc.c | 8 | ||||
| -rw-r--r-- | generic/tclTrace.c | 19 | ||||
| -rw-r--r-- | generic/tclVar.c | 8 | ||||
| -rw-r--r-- | generic/tclZipfs.c | 6 |
12 files changed, 74 insertions, 22 deletions
diff --git a/generic/tclArithSeries.h b/generic/tclArithSeries.h index 1daacdd..28fd993 100644 --- a/generic/tclArithSeries.h +++ b/generic/tclArithSeries.h @@ -15,7 +15,7 @@ * Note that the len can in theory be always computed by start,end,step * but it's faster to cache it inside the internal representation. */ -typedef struct ArithSeries { +typedef struct { Tcl_Size len; Tcl_Obj **elements; int isDouble; @@ -23,7 +23,7 @@ typedef struct ArithSeries { Tcl_WideInt end; Tcl_WideInt step; } ArithSeries; -typedef struct ArithSeriesDbl { +typedef struct { Tcl_Size len; Tcl_Obj **elements; int isDouble; diff --git a/generic/tclAssembly.c b/generic/tclAssembly.c index 9448162..a05a4d4 100644 --- a/generic/tclAssembly.c +++ b/generic/tclAssembly.c @@ -1984,7 +1984,7 @@ CreateMirrorJumpTable( * table. */ size_t i; - if (TclListObjGetElementsM(interp, jumps, &objc, &objv) != TCL_OK) { + if (TclListObjLengthM(interp, jumps, &objc) != TCL_OK) { return TCL_ERROR; } if (objc % 2 != 0) { @@ -1996,6 +1996,9 @@ CreateMirrorJumpTable( } return TCL_ERROR; } + if (TclListObjGetElementsM(interp, jumps, &objc, &objv) != TCL_OK) { + return TCL_ERROR; + } /* * Allocate the jumptable. diff --git a/generic/tclBinary.c b/generic/tclBinary.c index 28cf31d..d53fc64 100644 --- a/generic/tclBinary.c +++ b/generic/tclBinary.c @@ -978,11 +978,10 @@ BinaryFormatCmd( * The macro evals its args more than once: avoid arg++ */ - if (TclListObjGetElementsM(interp, objv[arg], &listc, - &listv) != TCL_OK) { + if (TclListObjLengthM(interp, objv[arg], &listc + ) != TCL_OK) { return TCL_ERROR; } - arg++; if (count == BINARY_ALL) { count = listc; @@ -992,6 +991,11 @@ BinaryFormatCmd( -1)); return TCL_ERROR; } + if (TclListObjGetElementsM(interp, objv[arg], &listc, + &listv) != TCL_OK) { + return TCL_ERROR; + } + arg++; } offset += count*size; break; diff --git a/generic/tclCmdAH.c b/generic/tclCmdAH.c index a5384fd..81a32d4 100644 --- a/generic/tclCmdAH.c +++ b/generic/tclCmdAH.c @@ -2712,8 +2712,8 @@ EachloopCmd( result = TCL_ERROR; goto done; } - TclListObjGetElementsM(NULL, statePtr->vCopyList[i], - &statePtr->varcList[i], &statePtr->varvList[i]); + TclListObjLengthM(NULL, statePtr->vCopyList[i], + &statePtr->varcList[i]); if (statePtr->varcList[i] < 1) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "%s varlist is empty", @@ -2724,6 +2724,8 @@ EachloopCmd( result = TCL_ERROR; goto done; } + TclListObjGetElementsM(NULL, statePtr->vCopyList[i], + &statePtr->varcList[i], &statePtr->varvList[i]); /* Values */ if (TclHasInternalRep(objv[2+i*2],&tclArithSeriesType)) { diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c index 2216745..ea82388 100644 --- a/generic/tclCmdIL.c +++ b/generic/tclCmdIL.c @@ -2575,6 +2575,7 @@ Tcl_LlengthObjCmd( { size_t listLen; int result; + Tcl_Obj *objPtr; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "list"); @@ -2591,7 +2592,8 @@ Tcl_LlengthObjCmd( * length. */ - Tcl_SetObjResult(interp, Tcl_NewWideIntObj(listLen)); + TclNewUIntObj(objPtr, listLen); + Tcl_SetObjResult(interp, objPtr); return TCL_OK; } @@ -3156,7 +3158,7 @@ Tcl_LreverseObjCmd( } /* end ArithSeries */ /* True List */ - if (TclListObjGetElementsM(interp, objv[1], &elemc, &elemv) != TCL_OK) { + if (TclListObjLengthM(interp, objv[1], &elemc) != TCL_OK) { return TCL_ERROR; } @@ -3168,6 +3170,9 @@ Tcl_LreverseObjCmd( Tcl_SetObjResult(interp, objv[1]); return TCL_OK; } + if (TclListObjGetElementsM(interp, objv[1], &elemc, &elemv) != TCL_OK) { + return TCL_ERROR; + } if (Tcl_IsShared(objv[1]) || ListObjRepIsShared(objv[1])) { /* Bug 1675044 */ diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c index 26cbbe4..84a7e91 100644 --- a/generic/tclCmdMZ.c +++ b/generic/tclCmdMZ.c @@ -3583,7 +3583,7 @@ TclNRSwitchObjCmd( size_t listc; blist = objv[0]; - if (TclListObjGetElementsM(interp, objv[0], &listc, &listv) != TCL_OK) { + if (TclListObjLengthM(interp, objv[0], &listc) != TCL_OK) { return TCL_ERROR; } @@ -3596,6 +3596,9 @@ TclNRSwitchObjCmd( "?-option ...? string {?pattern body ...? ?default body?}"); return TCL_ERROR; } + if (TclListObjGetElementsM(interp, objv[0], &listc, &listv) != TCL_OK) { + return TCL_ERROR; + } objc = listc; objv = listv; splitObjs = 1; diff --git a/generic/tclEnsemble.c b/generic/tclEnsemble.c index 6a9dc9e..a84b188 100644 --- a/generic/tclEnsemble.c +++ b/generic/tclEnsemble.c @@ -566,8 +566,8 @@ TclNamespaceEnsembleCmd( continue; } do { - if (TclListObjGetElementsM(interp, listObj, &len, - &listv) != TCL_OK) { + if (TclListObjLengthM(interp, listObj, &len + ) != TCL_OK) { Tcl_DictObjDone(&search); if (patchedDict) { Tcl_DecrRefCount(patchedDict); @@ -586,6 +586,14 @@ TclNamespaceEnsembleCmd( } goto freeMapAndError; } + if (TclListObjGetElementsM(interp, listObj, &len, + &listv) != TCL_OK) { + Tcl_DictObjDone(&search); + if (patchedDict) { + Tcl_DecrRefCount(patchedDict); + } + goto freeMapAndError; + } cmd = TclGetString(listv[0]); if (!(cmd[0] == ':' && cmd[1] == ':')) { Tcl_Obj *newList = Tcl_DuplicateObj(listObj); diff --git a/generic/tclListObj.c b/generic/tclListObj.c index 93e4478..45765a1 100644 --- a/generic/tclListObj.c +++ b/generic/tclListObj.c @@ -1990,7 +1990,7 @@ int Tcl_ListObjLength( Tcl_Interp *interp, /* Used to report errors if not NULL. */ Tcl_Obj *listObj, /* List object whose #elements to return. */ - Tcl_Size *lenPtr) /* The resulting int is stored here. */ + Tcl_Size *lenPtr) /* The resulting length is stored here. */ { ListRep listRep; @@ -2628,7 +2628,7 @@ TclLindexFlat( /* Handle ArithSeries as special case */ if (TclHasInternalRep(listObj,&tclArithSeriesType)) { - Tcl_WideInt listLen = TclArithSeriesObjLength(listObj); + Tcl_Size listLen = TclArithSeriesObjLength(listObj); Tcl_Size index; Tcl_Obj *elemObj = NULL; for (i=0 ; i<indexCount && listObj ; i++) { diff --git a/generic/tclProc.c b/generic/tclProc.c index e97cb10..01bc337 100644 --- a/generic/tclProc.c +++ b/generic/tclProc.c @@ -2456,6 +2456,14 @@ SetLambdaFromAny( * length is not 2, then it cannot be converted to lambdaType. */ + result = TclListObjLengthM(NULL, objPtr, &objc); + if ((result != TCL_OK) || ((objc != 2) && (objc != 3))) { + Tcl_SetObjResult(interp, Tcl_ObjPrintf( + "can't interpret \"%s\" as a lambda expression", + Tcl_GetString(objPtr))); + Tcl_SetErrorCode(interp, "TCL", "VALUE", "LAMBDA", NULL); + return TCL_ERROR; + } result = TclListObjGetElementsM(NULL, objPtr, &objc, &objv); if ((result != TCL_OK) || ((objc != 2) && (objc != 3))) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( diff --git a/generic/tclTrace.c b/generic/tclTrace.c index ac92a73..daeb424 100644 --- a/generic/tclTrace.c +++ b/generic/tclTrace.c @@ -428,7 +428,7 @@ TraceExecutionObjCmd( * pointer to its array of element pointers. */ - result = TclListObjGetElementsM(interp, objv[4], &listLen, &elemPtrs); + result = TclListObjLengthM(interp, objv[4], &listLen); if (result != TCL_OK) { return result; } @@ -440,6 +440,10 @@ TraceExecutionObjCmd( NULL); return TCL_ERROR; } + result = TclListObjGetElementsM(interp, objv[4], &listLen, &elemPtrs); + if (result != TCL_OK) { + return result; + } for (i = 0; i < listLen; i++) { if (Tcl_GetIndexFromObj(interp, elemPtrs[i], opStrings, "operation", TCL_EXACT, &index) != TCL_OK) { @@ -670,7 +674,7 @@ TraceCommandObjCmd( * pointer to its array of element pointers. */ - result = TclListObjGetElementsM(interp, objv[4], &listLen, &elemPtrs); + result = TclListObjLengthM(interp, objv[4], &listLen); if (result != TCL_OK) { return result; } @@ -682,7 +686,10 @@ TraceCommandObjCmd( NULL); return TCL_ERROR; } - + result = TclListObjGetElementsM(interp, objv[4], &listLen, &elemPtrs); + if (result != TCL_OK) { + return result; + } for (i = 0; i < listLen; i++) { if (Tcl_GetIndexFromObj(interp, elemPtrs[i], opStrings, "operation", TCL_EXACT, &index) != TCL_OK) { @@ -870,7 +877,7 @@ TraceVariableObjCmd( * pointer to its array of element pointers. */ - result = TclListObjGetElementsM(interp, objv[4], &listLen, &elemPtrs); + result = TclListObjLengthM(interp, objv[4], &listLen); if (result != TCL_OK) { return result; } @@ -882,6 +889,10 @@ TraceVariableObjCmd( NULL); return TCL_ERROR; } + result = TclListObjGetElementsM(interp, objv[4], &listLen, &elemPtrs); + if (result != TCL_OK) { + return result; + } for (i = 0; i < listLen ; i++) { if (Tcl_GetIndexFromObj(interp, elemPtrs[i], opStrings, "operation", TCL_EXACT, &index) != TCL_OK) { diff --git a/generic/tclVar.c b/generic/tclVar.c index 6226e1e..f7ec7c8 100644 --- a/generic/tclVar.c +++ b/generic/tclVar.c @@ -4042,8 +4042,7 @@ ArraySetCmd( size_t elemLen; Tcl_Obj **elemPtrs, *copyListObj; - result = TclListObjGetElementsM(interp, arrayElemObj, - &elemLen, &elemPtrs); + result = TclListObjLengthM(interp, arrayElemObj, &elemLen); if (result != TCL_OK) { return result; } @@ -4056,6 +4055,11 @@ ArraySetCmd( if (elemLen == 0) { goto ensureArray; } + result = TclListObjGetElementsM(interp, arrayElemObj, + &elemLen, &elemPtrs); + if (result != TCL_OK) { + return result; + } /* * We needn't worry about traces invalidating arrayPtr: should that be diff --git a/generic/tclZipfs.c b/generic/tclZipfs.c index 48bcd48..f284704 100644 --- a/generic/tclZipfs.c +++ b/generic/tclZipfs.c @@ -3028,7 +3028,7 @@ ZipFSMkZipOrImg( } } Tcl_IncrRefCount(list); - if (TclListObjGetElementsM(interp, list, &lobjc, &lobjv) != TCL_OK) { + if (TclListObjLengthM(interp, list, &lobjc) != TCL_OK) { Tcl_DecrRefCount(list); return TCL_ERROR; } @@ -3044,6 +3044,10 @@ ZipFSMkZipOrImg( ZIPFS_ERROR_CODE(interp, "EMPTY"); return TCL_ERROR; } + if (TclListObjGetElementsM(interp, list, &lobjc, &lobjv) != TCL_OK) { + Tcl_DecrRefCount(list); + return TCL_ERROR; + } out = Tcl_FSOpenFileChannel(interp, targetFile, "wb", 0755); if (out == NULL) { Tcl_DecrRefCount(list); |
