summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorapnadkarni <apnmbx-wits@yahoo.com>2023-04-20 16:44:49 (GMT)
committerapnadkarni <apnmbx-wits@yahoo.com>2023-04-20 16:44:49 (GMT)
commitc091b78af60d2f2f46c162bed19465380cf8d4bf (patch)
tree3ab02f5cab50084747b4510be3b04817076d5b37
parente359627a3620dd5d90bb533fd3aef15586b1d8af (diff)
downloadtcl-c091b78af60d2f2f46c162bed19465380cf8d4bf.zip
tcl-c091b78af60d2f2f46c162bed19465380cf8d4bf.tar.gz
tcl-c091b78af60d2f2f46c162bed19465380cf8d4bf.tar.bz2
Bugs [4ce858a049] (lrepeat), [f4d15772f1] (foreach), [6926a21840] (lmap).
-rw-r--r--generic/tclCmdAH.c17
-rw-r--r--generic/tclCmdIL.c6
-rw-r--r--tests/bigdata.test36
3 files changed, 35 insertions, 24 deletions
diff --git a/generic/tclCmdAH.c b/generic/tclCmdAH.c
index b2b1a61..e2186ed 100644
--- a/generic/tclCmdAH.c
+++ b/generic/tclCmdAH.c
@@ -27,9 +27,9 @@
struct ForeachState {
Tcl_Obj *bodyPtr; /* The script body of the command. */
- int bodyIdx; /* The argument index of the body. */
- int j, maxj; /* Number of loop iterations. */
- int numLists; /* Count of value lists. */
+ Tcl_Size bodyIdx; /* The argument index of the body. */
+ Tcl_Size j, maxj; /* Number of loop iterations. */
+ Tcl_Size numLists; /* Count of value lists. */
Tcl_Size *index; /* Array of value list indices. */
Tcl_Size *varcList; /* # loop variables per list. */
Tcl_Obj ***varvList; /* Array of var name lists. */
@@ -2733,7 +2733,8 @@ EachloopCmd(
{
int numLists = (objc-2) / 2;
struct ForeachState *statePtr;
- int i, j, result;
+ int i, result;
+ Tcl_Size j;
if (objc < 4 || (objc%2 != 0)) {
Tcl_WrongNumArgs(interp, 1, objv,
@@ -2887,8 +2888,12 @@ ForeachLoopStep(
break;
case TCL_OK:
if (statePtr->resultList != NULL) {
- Tcl_ListObjAppendElement(interp, statePtr->resultList,
- Tcl_GetObjResult(interp));
+ result = Tcl_ListObjAppendElement(
+ interp, statePtr->resultList, Tcl_GetObjResult(interp));
+ if (result != TCL_OK) {
+ /* e.g. memory alloc failure on big data tests */
+ goto done;
+ }
}
break;
case TCL_BREAK:
diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c
index f7ec027..c5a6616 100644
--- a/generic/tclCmdIL.c
+++ b/generic/tclCmdIL.c
@@ -2923,7 +2923,7 @@ Tcl_LrepeatObjCmd(
Tcl_Obj *const objv[])
/* The argument objects. */
{
- int elementCount, i, totalElems;
+ Tcl_Size elementCount, i, totalElems;
Tcl_Obj *listPtr, **dataArray = NULL;
/*
@@ -2935,7 +2935,7 @@ Tcl_LrepeatObjCmd(
Tcl_WrongNumArgs(interp, 1, objv, "count ?value ...?");
return TCL_ERROR;
}
- if (TCL_OK != TclGetIntFromObj(interp, objv[1], &elementCount)) {
+ if (TCL_OK != TclGetSizeIntFromObj(interp, objv[1], &elementCount)) {
return TCL_ERROR;
}
if (elementCount < 0) {
@@ -2997,7 +2997,7 @@ Tcl_LrepeatObjCmd(
dataArray[i] = tmpPtr;
}
} else {
- int j, k = 0;
+ Tcl_Size j, k = 0;
for (i=0 ; i<elementCount ; i++) {
for (j=0 ; j<objc ; j++) {
diff --git a/tests/bigdata.test b/tests/bigdata.test
index 34b51dc..ced2510 100644
--- a/tests/bigdata.test
+++ b/tests/bigdata.test
@@ -726,8 +726,7 @@ bigtestRO binary-encode/decode-uuencode-bigdata-1 "binary encode/decode uuencode
#
# foreach
bigtestRO foreach-bigdata-1 "foreach" 1 -body {
- # Unset explicitly before setting to save memory as bigtestRO runs the
- # script below twice.
+ # Unset explicitly before setting as bigtestRO runs the script twice.
unset -nocomplain l2
foreach x $l {
lappend l2 $x
@@ -737,7 +736,7 @@ bigtestRO foreach-bigdata-1 "foreach" 1 -body {
set l [bigList 0x100000000]
} -cleanup {
bigClean
-} -constraints lengthtruncation
+}
#
# lappend
@@ -854,13 +853,21 @@ bigtestRO llength-bigdata-1 {llength} 4294967296 -body {
#
# lmap
-bigtestRO lmap-bigdata-1 "lmap" 1 -body {
- testlutil equal $l [lmap e $l {set e}]
+bigtestRO lmap-bigdata-1 "lmap" 4294967296 -body {
+ set n 0
+ if {0} {
+ # TODO - This is the right test but runs out of memory
+ testlutil equal $l [lmap e $l {set e}]
+ } else {
+ lmap e $l {incr n; continue}
+ }
+ set n
} -setup {
set l [bigList 0x100000000]
} -cleanup {
bigClean
-} -constraints bug-6926a21840
+ puts ""
+}
#
# lrange
@@ -887,18 +894,15 @@ bigtestRO lrange-bigdata-1 "lrange" {6 7 5 {} 5 4 {} 9 {}} -body {
bigtest lrepeat-bigdata-1 "lrepeat single element length > UINT_MAX" 4294967296 -body {
# Just to test long lengths are accepted as arguments
llength [lrepeat 0x100000000 x]
-} -constraints bug-4ce858a049
+}
-bigtest lrepeat-bigdata-2 "string repeat multiple char" {4294967296 1} -body {
- # Make length multiple of 4 AND 10 since the bigString pattern length is 10
- set len [expr 4294967320/4]
- set l [lrepeat $len 0 1 2 3 4 5 6 7 8 9]
- list \
- [llength $l] \
- [testlutil equal $l [bigList 4294967320]]
+bigtest lrepeat-bigdata-2 "string repeat multiple char" {4294967400 {0 1 2 3 4 5 6 7}} -body {
+ set len [expr 4294967400/8]
+ set l [lrepeat $len 0 1 2 3 4 5 6 7]
+ list [llength $l] [lrange $l end-7 end]
} -cleanup {
bigClean
-} -constraints bug-4ce858a049
+}
#
# lreplace
@@ -1019,6 +1023,8 @@ bigtestRO concat-bigdata-1 "concat" {4294967296 {0 1 2 3 4} {6 7 0 1 2} {3 4 5 6
#
# TODO
+# lremove
+# lreverse
# encoding convertfrom
# encoding convertto
# dict *