summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2022-08-29 09:56:51 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2022-08-29 09:56:51 (GMT)
commit8c034cf9ce62c27025614676e999df1db4e75686 (patch)
tree917c2003a38184aa4e7e119796f000609173300c
parent20e8a0591aad0defa3f2f6978400616bea1d8f3d (diff)
downloadtcl-8c034cf9ce62c27025614676e999df1db4e75686.zip
tcl-8c034cf9ce62c27025614676e999df1db4e75686.tar.gz
tcl-8c034cf9ce62c27025614676e999df1db4e75686.tar.bz2
Remove TODO's already done. Only use ListSizeT for types which are 'size_t' in the Tcl 9 implementation
-rw-r--r--generic/tclInt.h6
-rw-r--r--generic/tclListObj.c30
2 files changed, 13 insertions, 23 deletions
diff --git a/generic/tclInt.h b/generic/tclInt.h
index ae88cfe..29fa847 100644
--- a/generic/tclInt.h
+++ b/generic/tclInt.h
@@ -2437,18 +2437,18 @@ typedef enum TclEolTranslation {
#define TCL_INVOKE_NO_TRACEBACK (1<<2)
/*
- * TclListSizeT is the type for holding list element counts. It's defined
+ * ListSizeT is the type for holding list element counts. It's defined
* simplify sharing source between Tcl8 and Tcl9.
*/
#if TCL_MAJOR_VERSION > 8
-typedef ptrdiff_t ListSizeT; /* TODO - may need to fix to match Tcl9's API */
+typedef size_t ListSizeT;
/*
* SSIZE_MAX, NOT SIZE_MAX as negative differences need to be expressed
* between values of the ListSizeT type so limit the range to signed
*/
-#define ListSizeT_MAX PTRDIFF_MAX
+#define ListSizeT_MAX ((ListSizeT)PTRDIFF_MAX)
#else
diff --git a/generic/tclListObj.c b/generic/tclListObj.c
index 5100159..0d3b5a0 100644
--- a/generic/tclListObj.c
+++ b/generic/tclListObj.c
@@ -919,14 +919,6 @@ ListRepInit(
{
ListStore *storePtr;
- /*
- * The whole list implementation has an implicit assumption that lenths
- * and indices used a signed integer type. Tcl9 API's currently use
- * unsigned types. This assert is to remind that need to review code
- * when adapting for Tcl9.
- */
- LIST_ASSERT(((ListSizeT)-1) < 0);
-
storePtr = ListStoreNew(objc, objv, flags);
if (storePtr) {
repPtr->storePtr = storePtr;
@@ -2078,12 +2070,12 @@ Tcl_ListObjReplace(
{
ListRep listRep;
ListSizeT origListLen;
- ListSizeT lenChange;
- ListSizeT leadSegmentLen;
- ListSizeT tailSegmentLen;
+ int lenChange;
+ int leadSegmentLen;
+ int tailSegmentLen;
ListSizeT numFreeSlots;
- ListSizeT leadShift;
- ListSizeT tailShift;
+ int leadShift;
+ int tailShift;
Tcl_Obj **listObjs;
int favor;
@@ -2386,9 +2378,9 @@ Tcl_ListObjReplace(
* or need to shift both. In the former case, favor shifting the
* smaller segment.
*/
- ListSizeT leadSpace = ListRepNumFreeHead(&listRep);
- ListSizeT tailSpace = ListRepNumFreeTail(&listRep);
- ListSizeT finalFreeSpace = leadSpace + tailSpace - lenChange;
+ int leadSpace = ListRepNumFreeHead(&listRep);
+ int tailSpace = ListRepNumFreeTail(&listRep);
+ int finalFreeSpace = leadSpace + tailSpace - lenChange;
LIST_ASSERT((leadSpace + tailSpace) >= lenChange);
if (leadSpace >= lenChange
@@ -2405,7 +2397,7 @@ Tcl_ListObjReplace(
* insertions.
*/
if (finalFreeSpace > 1 && (tailSpace == 0 || tailSegmentLen == 0)) {
- ListSizeT postShiftLeadSpace = leadSpace - lenChange;
+ int postShiftLeadSpace = leadSpace - lenChange;
if (postShiftLeadSpace > (finalFreeSpace/2)) {
ListSizeT extraShift = postShiftLeadSpace - (finalFreeSpace / 2);
leadShift -= extraShift;
@@ -2422,7 +2414,7 @@ Tcl_ListObjReplace(
* See comments above. This is analogous.
*/
if (finalFreeSpace > 1 && (leadSpace == 0 || leadSegmentLen == 0)) {
- ListSizeT postShiftTailSpace = tailSpace - lenChange;
+ int postShiftTailSpace = tailSpace - lenChange;
if (postShiftTailSpace > (finalFreeSpace/2)) {
/* T:listrep-1.{1,3,14,18,21},3.{2,3,26,27} */
ListSizeT extraShift = postShiftTailSpace - (finalFreeSpace / 2);
@@ -3431,11 +3423,9 @@ UpdateStringOfList(
elem = TclGetStringFromObj(elemPtrs[i], &length);
bytesNeeded += TclScanElement(elem, length, flagPtr+i);
if (bytesNeeded < 0) {
- /* TODO - what is the max #define for Tcl9? */
Tcl_Panic("max size for a Tcl value (%d bytes) exceeded", INT_MAX);
}
}
- /* TODO - what is the max #define for Tcl9? */
if (bytesNeeded > INT_MAX - numElems + 1) {
Tcl_Panic("max size for a Tcl value (%d bytes) exceeded", INT_MAX);
}