summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generic/tclArithSeries.h4
-rw-r--r--generic/tclAssembly.c5
-rw-r--r--generic/tclBinary.c10
-rw-r--r--generic/tclCmdAH.c6
-rw-r--r--generic/tclCmdIL.c9
-rw-r--r--generic/tclCmdMZ.c5
-rw-r--r--generic/tclEnsemble.c12
-rw-r--r--generic/tclListObj.c4
-rw-r--r--generic/tclProc.c8
-rw-r--r--generic/tclTrace.c19
-rw-r--r--generic/tclVar.c8
-rw-r--r--generic/tclZipfs.c6
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);