Attachment "td-3163961-2.patch" to
ticket [3163961fff]
added by
twylite
2012-07-31 20:37:04.
0000: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 Index: generic/t
0010: 63 6c 42 61 73 69 63 2e 63 0d 0a 3d 3d 3d 3d 3d clBasic.c..=====
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2d =============..-
0060: 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 42 61 -- generic/tclBa
0070: 73 69 63 2e 63 0d 0a 2b 2b 2b 20 67 65 6e 65 72 sic.c..+++ gener
0080: 69 63 2f 74 63 6c 42 61 73 69 63 2e 63 0d 0a 40 ic/tclBasic.c..@
0090: 40 20 2d 32 33 35 2c 31 30 20 2b 32 33 35 2c 31 @ -235,10 +235,1
00a0: 31 20 40 40 0d 0a 20 20 20 20 20 7b 22 6c 72 65 1 @@.. {"lre
00b0: 70 6c 61 63 65 22 2c 09 54 63 6c 5f 4c 72 65 70 place",.Tcl_Lrep
00c0: 6c 61 63 65 4f 62 6a 43 6d 64 2c 09 54 63 6c 43 laceObjCmd,.TclC
00d0: 6f 6d 70 69 6c 65 4c 72 65 70 6c 61 63 65 43 6d ompileLreplaceCm
00e0: 64 2c 09 4e 55 4c 4c 2c 09 31 7d 2c 0d 0a 20 20 d,.NULL,.1},..
00f0: 20 20 20 7b 22 6c 72 65 76 65 72 73 65 22 2c 09 {"lreverse",.
0100: 54 63 6c 5f 4c 72 65 76 65 72 73 65 4f 62 6a 43 Tcl_LreverseObjC
0110: 6d 64 2c 09 4e 55 4c 4c 2c 09 09 09 4e 55 4c 4c md,.NULL,...NULL
0120: 2c 09 31 7d 2c 0d 0a 20 20 20 20 20 7b 22 6c 73 ,.1},.. {"ls
0130: 65 61 72 63 68 22 2c 09 09 54 63 6c 5f 4c 73 65 earch",..Tcl_Lse
0140: 61 72 63 68 4f 62 6a 43 6d 64 2c 09 4e 55 4c 4c archObjCmd,.NULL
0150: 2c 09 09 09 4e 55 4c 4c 2c 09 31 7d 2c 0d 0a 20 ,...NULL,.1},..
0160: 20 20 20 20 7b 22 6c 73 65 74 22 2c 09 09 54 63 {"lset",..Tc
0170: 6c 5f 4c 73 65 74 4f 62 6a 43 6d 64 2c 09 09 54 l_LsetObjCmd,..T
0180: 63 6c 43 6f 6d 70 69 6c 65 4c 73 65 74 43 6d 64 clCompileLsetCmd
0190: 2c 09 4e 55 4c 4c 2c 09 31 7d 2c 0d 0a 20 20 20 ,.NULL,.1},..
01a0: 20 20 7b 22 6c 73 6f 72 74 22 2c 09 09 54 63 6c {"lsort",..Tcl
01b0: 5f 4c 73 6f 72 74 4f 62 6a 43 6d 64 2c 09 4e 55 _LsortObjCmd,.NU
01c0: 4c 4c 2c 09 09 09 4e 55 4c 4c 2c 09 31 7d 2c 0d LL,...NULL,.1},.
01d0: 0a 2b 20 20 20 20 7b 22 6d 61 70 65 61 63 68 22 .+ {"mapeach"
01e0: 2c 09 09 54 63 6c 5f 4d 61 70 65 61 63 68 4f 62 ,..Tcl_MapeachOb
01f0: 6a 43 6d 64 2c 09 54 63 6c 43 6f 6d 70 69 6c 65 jCmd,.TclCompile
0200: 4d 61 70 65 61 63 68 43 6d 64 2c 09 54 63 6c 4e MapeachCmd,.TclN
0210: 52 4d 61 70 65 61 63 68 43 6d 64 2c 09 31 7d 2c RMapeachCmd,.1},
0220: 0d 0a 20 20 20 20 20 7b 22 70 61 63 6b 61 67 65 .. {"package
0230: 22 2c 09 09 54 63 6c 5f 50 61 63 6b 61 67 65 4f ",..Tcl_PackageO
0240: 62 6a 43 6d 64 2c 09 4e 55 4c 4c 2c 09 09 09 4e bjCmd,.NULL,...N
0250: 55 4c 4c 2c 09 31 7d 2c 0d 0a 20 20 20 20 20 7b ULL,.1},.. {
0260: 22 70 72 6f 63 22 2c 09 09 54 63 6c 5f 50 72 6f "proc",..Tcl_Pro
0270: 63 4f 62 6a 43 6d 64 2c 09 09 4e 55 4c 4c 2c 09 cObjCmd,..NULL,.
0280: 09 09 4e 55 4c 4c 2c 09 31 7d 2c 0d 0a 20 20 20 ..NULL,.1},..
0290: 20 20 7b 22 72 65 67 65 78 70 22 2c 09 09 54 63 {"regexp",..Tc
02a0: 6c 5f 52 65 67 65 78 70 4f 62 6a 43 6d 64 2c 09 l_RegexpObjCmd,.
02b0: 54 63 6c 43 6f 6d 70 69 6c 65 52 65 67 65 78 70 TclCompileRegexp
02c0: 43 6d 64 2c 09 4e 55 4c 4c 2c 09 31 7d 2c 0d 0a Cmd,.NULL,.1},..
02d0: 20 20 20 20 20 7b 22 72 65 67 73 75 62 22 2c 09 {"regsub",.
02e0: 09 54 63 6c 5f 52 65 67 73 75 62 4f 62 6a 43 6d .Tcl_RegsubObjCm
02f0: 64 2c 09 4e 55 4c 4c 2c 09 09 09 4e 55 4c 4c 2c d,.NULL,...NULL,
0300: 09 31 7d 2c 0d 0a 20 20 20 20 20 7b 22 72 65 6e .1},.. {"ren
0310: 61 6d 65 22 2c 09 09 54 63 6c 5f 52 65 6e 61 6d ame",..Tcl_Renam
0320: 65 4f 62 6a 43 6d 64 2c 09 4e 55 4c 4c 2c 09 09 eObjCmd,.NULL,..
0330: 09 4e 55 4c 4c 2c 09 31 7d 2c 0d 0a 40 40 20 2d .NULL,.1},..@@ -
0340: 38 38 34 37 2c 31 31 20 2b 38 38 34 38 2c 31 31 8847,11 +8848,11
0350: 20 40 40 0d 0a 20 20 20 20 20 54 63 6c 4e 52 45 @@.. TclNRE
0360: 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72 70 2c valObjEx(interp,
0370: 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a 28 Tcl_NewListObj(
0380: 6f 62 6a 63 2d 32 2c 20 6f 62 6a 76 2b 32 29 2c objc-2, objv+2),
0390: 20 30 2c 20 4e 55 4c 4c 2c 20 49 4e 54 5f 4d 49 0, NULL, INT_MI
03a0: 4e 29 3b 0d 0a 20 20 20 20 20 69 50 74 72 2d 3e N);.. iPtr->
03b0: 65 78 65 63 45 6e 76 50 74 72 20 3d 20 73 61 76 execEnvPtr = sav
03c0: 65 64 45 45 50 74 72 3b 0d 0a 20 0d 0a 20 20 20 edEEPtr;.. ..
03d0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b return TCL_OK;
03e0: 0d 0a 20 7d 0d 0a 2d 0d 0a 2b 0c 0d 0a 20 69 6e .. }..-..+... in
03f0: 74 0d 0a 20 54 63 6c 4e 52 49 6e 74 65 72 70 43 t.. TclNRInterpC
0400: 6f 72 6f 75 74 69 6e 65 28 0d 0a 20 20 20 20 20 oroutine(..
0410: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e ClientData clien
0420: 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 54 63 6c tData,.. Tcl
0430: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c _Interp *interp,
0440: 09 09 2f 2a 20 43 75 72 72 65 6e 74 20 69 6e 74 ../* Current int
0450: 65 72 70 72 65 74 65 72 2e 20 2a 2f 0d 0a 20 20 erpreter. */..
0460: 20 20 20 69 6e 74 20 6f 62 6a 63 2c 09 09 09 2f int objc,.../
0470: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 * Number of argu
0480: 6d 65 6e 74 73 2e 20 2a 2f 0d 0a 0d 0a 49 6e 64 ments. */....Ind
0490: 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 43 ex: generic/tclC
04a0: 6d 64 41 48 2e 63 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d mdAH.c..========
04b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
04c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
04d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
04e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2d 2d 2d 20 ==========..---
04f0: 67 65 6e 65 72 69 63 2f 74 63 6c 43 6d 64 41 48 generic/tclCmdAH
0500: 2e 63 0d 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f .c..+++ generic/
0510: 74 63 6c 43 6d 64 41 48 2e 63 0d 0a 40 40 20 2d tclCmdAH.c..@@ -
0520: 33 30 2c 31 30 20 2b 33 30 2c 31 31 20 40 40 0d 30,10 +30,11 @@.
0530: 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 2a . Tcl_Obj **
0540: 2a 76 61 72 76 4c 69 73 74 3b 09 2f 2a 20 41 72 *varvList;./* Ar
0550: 72 61 79 20 6f 66 20 76 61 72 20 6e 61 6d 65 20 ray of var name
0560: 6c 69 73 74 73 2e 20 2a 2f 0d 0a 20 20 20 20 20 lists. */..
0570: 54 63 6c 5f 4f 62 6a 20 2a 2a 76 43 6f 70 79 4c Tcl_Obj **vCopyL
0580: 69 73 74 3b 09 2f 2a 20 43 6f 70 69 65 73 20 6f ist;./* Copies o
0590: 66 20 76 61 72 20 6e 61 6d 65 20 6c 69 73 74 20 f var name list
05a0: 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0d 0a 20 arguments. */..
05b0: 20 20 20 20 69 6e 74 20 2a 61 72 67 63 4c 69 73 int *argcLis
05c0: 74 3b 09 09 2f 2a 20 41 72 72 61 79 20 6f 66 20 t;../* Array of
05d0: 76 61 6c 75 65 20 6c 69 73 74 20 73 69 7a 65 73 value list sizes
05e0: 2e 20 2a 2f 0d 0a 20 20 20 20 20 54 63 6c 5f 4f . */.. Tcl_O
05f0: 62 6a 20 2a 2a 2a 61 72 67 76 4c 69 73 74 3b 09 bj ***argvList;.
0600: 2f 2a 20 41 72 72 61 79 20 6f 66 20 76 61 6c 75 /* Array of valu
0610: 65 20 6c 69 73 74 73 2e 20 2a 2f 0d 0a 20 20 20 e lists. */..
0620: 20 20 54 63 6c 5f 4f 62 6a 20 2a 2a 61 43 6f 70 Tcl_Obj **aCop
0630: 79 4c 69 73 74 3b 09 2f 2a 20 43 6f 70 69 65 73 yList;./* Copies
0640: 20 6f 66 20 76 61 6c 75 65 20 6c 69 73 74 20 61 of value list a
0650: 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0d 0a 2b 20 rguments. */..+
0660: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 72 65 73 75 Tcl_Obj *resu
0670: 6c 74 4c 69 73 74 3b 09 2f 2a 20 4c 69 73 74 20 ltList;./* List
0680: 6f 66 20 72 65 73 75 6c 74 20 76 61 6c 75 65 73 of result values
0690: 20 66 72 6f 6d 20 74 68 65 20 6c 6f 6f 70 20 62 from the loop b
06a0: 6f 64 79 2e 20 2a 2f 0d 0a 20 7d 3b 0d 0a 20 0d ody. */.. };.. .
06b0: 0a 20 2f 2a 0d 0a 20 20 2a 20 50 72 6f 74 6f 74 . /*.. * Protot
06c0: 79 70 65 73 20 66 6f 72 20 6c 6f 63 61 6c 20 70 ypes for local p
06d0: 72 6f 63 65 64 75 72 65 73 20 64 65 66 69 6e 65 rocedures define
06e0: 64 20 69 6e 20 74 68 69 73 20 66 69 6c 65 3a 0d d in this file:.
06f0: 0a 20 20 2a 2f 0d 0a 40 40 20 2d 35 30 2c 31 30 . */..@@ -50,10
0700: 20 2b 35 31 2c 31 32 20 40 40 0d 0a 20 73 74 61 +51,12 @@.. sta
0710: 74 69 63 20 69 6e 74 09 09 47 65 74 53 74 61 74 tic int..GetStat
0720: 42 75 66 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a Buf(Tcl_Interp *
0730: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 20 interp, Tcl_Obj
0740: 2a 70 61 74 68 50 74 72 2c 0d 0a 20 09 09 09 20 *pathPtr,.. ...
0750: 20 20 20 54 63 6c 5f 46 53 53 74 61 74 50 72 6f Tcl_FSStatPro
0760: 63 20 2a 73 74 61 74 50 72 6f 63 2c 20 54 63 6c c *statProc, Tcl
0770: 5f 53 74 61 74 42 75 66 20 2a 73 74 61 74 50 74 _StatBuf *statPt
0780: 72 29 3b 0d 0a 20 73 74 61 74 69 63 20 63 6f 6e r);.. static con
0790: 73 74 20 63 68 61 72 20 2a 09 47 65 74 54 79 70 st char *.GetTyp
07a0: 65 46 72 6f 6d 4d 6f 64 65 28 69 6e 74 20 6d 6f eFromMode(int mo
07b0: 64 65 29 3b 0d 0a 20 73 74 61 74 69 63 20 69 6e de);.. static in
07c0: 74 09 09 53 74 6f 72 65 53 74 61 74 44 61 74 61 t..StoreStatData
07d0: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 (Tcl_Interp *int
07e0: 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 20 2a 76 61 erp, Tcl_Obj *va
07f0: 72 4e 61 6d 65 2c 0d 0a 20 09 09 09 20 20 20 20 rName,.. ...
0800: 54 63 6c 5f 53 74 61 74 42 75 66 20 2a 73 74 61 Tcl_StatBuf *sta
0810: 74 50 74 72 29 3b 0d 0a 2b 73 74 61 74 69 63 20 tPtr);..+static
0820: 69 6e 74 09 09 54 63 6c 4e 52 45 61 63 68 6c 6f int..TclNREachlo
0830: 6f 70 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 opCmd(ClientData
0840: 20 64 75 6d 6d 79 2c 20 54 63 6c 5f 49 6e 74 65 dummy, Tcl_Inte
0850: 72 70 20 2a 69 6e 74 65 72 70 2c 0d 0a 2b 09 09 rp *interp,..+..
0860: 09 20 20 20 20 69 6e 74 20 6f 62 6a 63 2c 20 54 . int objc, T
0870: 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 cl_Obj *const ob
0880: 6a 76 5b 5d 2c 20 69 6e 74 20 63 6f 6c 6c 65 63 jv[], int collec
0890: 74 29 3b 0d 0a 20 73 74 61 74 69 63 20 54 63 6c t);.. static Tcl
08a0: 5f 4e 52 50 6f 73 74 50 72 6f 63 09 43 61 74 63 _NRPostProc.Catc
08b0: 68 4f 62 6a 43 6d 64 43 61 6c 6c 62 61 63 6b 3b hObjCmdCallback;
08c0: 0d 0a 20 73 74 61 74 69 63 20 54 63 6c 5f 4e 52 .. static Tcl_NR
08d0: 50 6f 73 74 50 72 6f 63 09 45 78 70 72 43 61 6c PostProc.ExprCal
08e0: 6c 62 61 63 6b 3b 0d 0a 20 73 74 61 74 69 63 20 lback;.. static
08f0: 54 63 6c 5f 4e 52 50 6f 73 74 50 72 6f 63 09 46 Tcl_NRPostProc.F
0900: 6f 72 53 65 74 75 70 43 61 6c 6c 62 61 63 6b 3b orSetupCallback;
0910: 0d 0a 20 73 74 61 74 69 63 20 54 63 6c 5f 4e 52 .. static Tcl_NR
0920: 50 6f 73 74 50 72 6f 63 09 46 6f 72 43 6f 6e 64 PostProc.ForCond
0930: 43 61 6c 6c 62 61 63 6b 3b 0d 0a 20 73 74 61 74 Callback;.. stat
0940: 69 63 20 54 63 6c 5f 4e 52 50 6f 73 74 50 72 6f ic Tcl_NRPostPro
0950: 63 09 46 6f 72 4e 65 78 74 43 61 6c 6c 62 61 63 c.ForNextCallbac
0960: 6b 3b 0d 0a 40 40 20 2d 32 35 35 38 2c 31 31 20 k;..@@ -2558,11
0970: 2b 32 35 36 31 2c 31 31 20 40 40 0d 0a 20 7d 0d +2561,11 @@.. }.
0980: 0a 20 0c 0d 0a 20 2f 2a 0d 0a 20 20 2a 2d 2d 2d . ... /*.. *---
0990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
09a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
09b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
09c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
09d0: 2d 2d 2d 0d 0a 20 20 2a 0d 0a 2d 20 2a 20 54 63 ---.. *..- * Tc
09e0: 6c 5f 46 6f 72 65 61 63 68 4f 62 6a 43 6d 64 2c l_ForeachObjCmd,
09f0: 20 54 63 6c 4e 52 46 6f 72 65 61 63 68 43 6d 64 TclNRForeachCmd
0a00: 20 2d 2d 0d 0a 2b 20 2a 20 54 63 6c 5f 46 6f 72 --..+ * Tcl_For
0a10: 65 61 63 68 4f 62 6a 43 6d 64 2c 20 54 63 6c 4e eachObjCmd, TclN
0a20: 52 46 6f 72 65 61 63 68 43 6d 64 2c 20 54 63 6c RForeachCmd, Tcl
0a30: 4e 52 45 61 63 68 6c 6f 6f 70 43 6d 64 20 2d 2d NREachloopCmd --
0a40: 0d 0a 20 20 2a 0d 0a 20 20 2a 09 54 68 69 73 20 .. *.. *.This
0a50: 6f 62 6a 65 63 74 2d 62 61 73 65 64 20 70 72 6f object-based pro
0a60: 63 65 64 75 72 65 20 69 73 20 69 6e 76 6f 6b 65 cedure is invoke
0a70: 64 20 74 6f 20 70 72 6f 63 65 73 73 20 74 68 65 d to process the
0a80: 20 22 66 6f 72 65 61 63 68 22 20 54 63 6c 0d 0a "foreach" Tcl..
0a90: 20 20 2a 09 63 6f 6d 6d 61 6e 64 2e 20 53 65 65 *.command. See
0aa0: 20 74 68 65 20 75 73 65 72 20 64 6f 63 75 6d 65 the user docume
0ab0: 6e 74 61 74 69 6f 6e 20 66 6f 72 20 64 65 74 61 ntation for deta
0ac0: 69 6c 73 20 6f 6e 20 77 68 61 74 20 69 74 20 64 ils on what it d
0ad0: 6f 65 73 2e 0d 0a 20 20 2a 0d 0a 20 20 2a 20 52 oes... *.. * R
0ae0: 65 73 75 6c 74 73 3a 0d 0a 40 40 20 2d 32 35 39 esults:..@@ -259
0af0: 30 2c 31 30 20 2b 32 35 39 33 2c 34 32 20 40 40 0,10 +2593,42 @@
0b00: 0d 0a 20 20 20 20 20 43 6c 69 65 6e 74 44 61 74 .. ClientDat
0b10: 61 20 64 75 6d 6d 79 2c 0d 0a 20 20 20 20 20 54 a dummy,.. T
0b20: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
0b30: 70 2c 0d 0a 20 20 20 20 20 69 6e 74 20 6f 62 6a p,.. int obj
0b40: 63 2c 0d 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a c,.. Tcl_Obj
0b50: 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d 29 0d *const objv[]).
0b60: 0a 20 7b 0d 0a 2b 20 20 20 20 72 65 74 75 72 6e . {..+ return
0b70: 20 54 63 6c 4e 52 45 61 63 68 6c 6f 6f 70 43 6d TclNREachloopCm
0b80: 64 28 64 75 6d 6d 79 2c 20 69 6e 74 65 72 70 2c d(dummy, interp,
0b90: 20 6f 62 6a 63 2c 20 6f 62 6a 76 2c 20 30 29 3b objc, objv, 0);
0ba0: 0d 0a 2b 7d 0d 0a 2b 0d 0a 2b 69 6e 74 0d 0a 2b ..+}..+..+int..+
0bb0: 54 63 6c 5f 4d 61 70 65 61 63 68 4f 62 6a 43 6d Tcl_MapeachObjCm
0bc0: 64 28 0d 0a 2b 20 20 20 20 43 6c 69 65 6e 74 44 d(..+ ClientD
0bd0: 61 74 61 20 64 75 6d 6d 79 2c 09 09 2f 2a 20 4e ata dummy,../* N
0be0: 6f 74 20 75 73 65 64 2e 20 2a 2f 0d 0a 2b 20 20 ot used. */..+
0bf0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e Tcl_Interp *in
0c00: 74 65 72 70 2c 09 09 2f 2a 20 43 75 72 72 65 6e terp,../* Curren
0c10: 74 20 69 6e 74 65 72 70 72 65 74 65 72 2e 20 2a t interpreter. *
0c20: 2f 0d 0a 2b 20 20 20 20 69 6e 74 20 6f 62 6a 63 /..+ int objc
0c30: 2c 09 09 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 ,.../* Number of
0c40: 20 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0d 0a arguments. */..
0c50: 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f + Tcl_Obj *co
0c60: 6e 73 74 20 6f 62 6a 76 5b 5d 29 09 2f 2a 20 41 nst objv[])./* A
0c70: 72 67 75 6d 65 6e 74 20 6f 62 6a 65 63 74 73 2e rgument objects.
0c80: 20 2a 2f 0d 0a 2b 7b 0d 0a 2b 20 20 20 20 72 65 */..+{..+ re
0c90: 74 75 72 6e 20 54 63 6c 5f 4e 52 43 61 6c 6c 4f turn Tcl_NRCallO
0ca0: 62 6a 50 72 6f 63 28 69 6e 74 65 72 70 2c 20 54 bjProc(interp, T
0cb0: 63 6c 4e 52 4d 61 70 65 61 63 68 43 6d 64 2c 20 clNRMapeachCmd,
0cc0: 64 75 6d 6d 79 2c 20 6f 62 6a 63 2c 20 6f 62 6a dummy, objc, obj
0cd0: 76 29 3b 0d 0a 2b 7d 0d 0a 2b 0d 0a 2b 69 6e 74 v);..+}..+..+int
0ce0: 0d 0a 2b 54 63 6c 4e 52 4d 61 70 65 61 63 68 43 ..+TclNRMapeachC
0cf0: 6d 64 28 0d 0a 2b 20 20 20 20 43 6c 69 65 6e 74 md(..+ Client
0d00: 44 61 74 61 20 64 75 6d 6d 79 2c 0d 0a 2b 20 20 Data dummy,..+
0d10: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e Tcl_Interp *in
0d20: 74 65 72 70 2c 0d 0a 2b 20 20 20 20 69 6e 74 20 terp,..+ int
0d30: 6f 62 6a 63 2c 0d 0a 2b 20 20 20 20 54 63 6c 5f objc,..+ Tcl_
0d40: 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b Obj *const objv[
0d50: 5d 29 0d 0a 2b 7b 0d 0a 2b 20 20 20 20 72 65 74 ])..+{..+ ret
0d60: 75 72 6e 20 54 63 6c 4e 52 45 61 63 68 6c 6f 6f urn TclNREachloo
0d70: 70 43 6d 64 28 64 75 6d 6d 79 2c 20 69 6e 74 65 pCmd(dummy, inte
0d80: 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 2c 20 rp, objc, objv,
0d90: 31 29 3b 0d 0a 2b 7d 0d 0a 2b 0d 0a 2b 69 6e 74 1);..+}..+..+int
0da0: 0d 0a 2b 54 63 6c 4e 52 45 61 63 68 6c 6f 6f 70 ..+TclNREachloop
0db0: 43 6d 64 28 0d 0a 2b 20 20 20 20 43 6c 69 65 6e Cmd(..+ Clien
0dc0: 74 44 61 74 61 20 64 75 6d 6d 79 2c 0d 0a 2b 20 tData dummy,..+
0dd0: 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 Tcl_Interp *i
0de0: 6e 74 65 72 70 2c 0d 0a 2b 20 20 20 20 69 6e 74 nterp,..+ int
0df0: 20 6f 62 6a 63 2c 0d 0a 2b 20 20 20 20 54 63 6c objc,..+ Tcl
0e00: 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 _Obj *const objv
0e10: 5b 5d 2c 0d 0a 2b 20 20 20 20 69 6e 74 20 63 6f [],..+ int co
0e20: 6c 6c 65 63 74 29 09 09 2f 2a 20 46 6c 61 67 20 llect)../* Flag
0e30: 3d 3d 20 31 20 74 6f 20 63 6f 6c 6c 65 63 74 20 == 1 to collect
0e40: 61 6e 64 20 72 65 74 75 72 6e 20 6c 6f 6f 70 20 and return loop
0e50: 62 6f 64 79 20 72 65 73 75 6c 74 2e 20 2a 2f 0d body result. */.
0e60: 0a 2b 7b 0d 0a 2b 0d 0a 20 20 20 20 20 69 6e 74 .+{..+.. int
0e70: 20 6e 75 6d 4c 69 73 74 73 20 3d 20 28 6f 62 6a numLists = (obj
0e80: 63 2d 32 29 20 2f 20 32 3b 0d 0a 20 20 20 20 20 c-2) / 2;..
0e90: 72 65 67 69 73 74 65 72 20 73 74 72 75 63 74 20 register struct
0ea0: 46 6f 72 65 61 63 68 53 74 61 74 65 20 2a 73 74 ForeachState *st
0eb0: 61 74 65 50 74 72 3b 0d 0a 20 20 20 20 20 69 6e atePtr;.. in
0ec0: 74 20 69 2c 20 6a 2c 20 72 65 73 75 6c 74 3b 0d t i, j, result;.
0ed0: 0a 20 0d 0a 20 20 20 20 20 69 66 20 28 6f 62 6a . .. if (obj
0ee0: 63 20 3c 20 34 20 7c 7c 20 28 6f 62 6a 63 25 32 c < 4 || (objc%2
0ef0: 20 21 3d 20 30 29 29 20 7b 0d 0a 40 40 20 2d 32 != 0)) {..@@ -2
0f00: 36 33 32 2c 31 30 20 2b 32 36 36 37 2c 31 32 20 632,10 +2667,12
0f10: 40 40 0d 0a 20 20 20 20 20 73 74 61 74 65 50 74 @@.. statePt
0f20: 72 2d 3e 61 72 67 63 4c 69 73 74 20 3d 20 73 74 r->argcList = st
0f30: 61 74 65 50 74 72 2d 3e 76 61 72 63 4c 69 73 74 atePtr->varcList
0f40: 20 2b 20 6e 75 6d 4c 69 73 74 73 3b 0d 0a 20 0d + numLists;.. .
0f50: 0a 20 20 20 20 20 73 74 61 74 65 50 74 72 2d 3e . statePtr->
0f60: 6e 75 6d 4c 69 73 74 73 20 3d 20 6e 75 6d 4c 69 numLists = numLi
0f70: 73 74 73 3b 0d 0a 20 20 20 20 20 73 74 61 74 65 sts;.. state
0f80: 50 74 72 2d 3e 62 6f 64 79 50 74 72 20 3d 20 6f Ptr->bodyPtr = o
0f90: 62 6a 76 5b 6f 62 6a 63 20 2d 20 31 5d 3b 0d 0a bjv[objc - 1];..
0fa0: 20 20 20 20 20 73 74 61 74 65 50 74 72 2d 3e 62 statePtr->b
0fb0: 6f 64 79 49 64 78 20 3d 20 6f 62 6a 63 20 2d 20 odyIdx = objc -
0fc0: 31 3b 0d 0a 2b 0d 0a 2b 20 20 20 20 73 74 61 74 1;..+..+ stat
0fd0: 65 50 74 72 2d 3e 72 65 73 75 6c 74 4c 69 73 74 ePtr->resultList
0fe0: 20 3d 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f 62 = Tcl_NewListOb
0ff0: 6a 28 30 2c 20 4e 55 4c 4c 29 3b 0d 0a 20 0d 0a j(0, NULL);.. ..
1000: 20 20 20 20 20 2f 2a 0d 0a 20 20 20 20 20 20 2a /*.. *
1010: 20 42 72 65 61 6b 20 75 70 20 74 68 65 20 76 61 Break up the va
1020: 6c 75 65 20 6c 69 73 74 73 20 61 6e 64 20 76 61 lue lists and va
1030: 72 69 61 62 6c 65 20 6c 69 73 74 73 20 69 6e 74 riable lists int
1040: 6f 20 65 6c 65 6d 65 6e 74 73 2e 0d 0a 20 20 20 o elements...
1050: 20 20 20 2a 2f 0d 0a 20 0d 0a 40 40 20 2d 32 36 */.. ..@@ -26
1060: 38 31 2c 31 31 20 2b 32 37 31 38 2c 31 31 20 40 81,11 +2718,11 @
1070: 40 0d 0a 20 09 72 65 73 75 6c 74 20 3d 20 46 6f @.. .result = Fo
1080: 72 65 61 63 68 41 73 73 69 67 6e 6d 65 6e 74 73 reachAssignments
1090: 28 69 6e 74 65 72 70 2c 20 73 74 61 74 65 50 74 (interp, statePt
10a0: 72 29 3b 0d 0a 20 09 69 66 20 28 72 65 73 75 6c r);.. .if (resul
10b0: 74 20 3d 3d 20 54 43 4c 5f 45 52 52 4f 52 29 20 t == TCL_ERROR)
10c0: 7b 0d 0a 20 09 20 20 20 20 67 6f 74 6f 20 64 6f {.. . goto do
10d0: 6e 65 3b 0d 0a 20 09 7d 0d 0a 20 0d 0a 2d 09 54 ne;.. .}.. ..-.T
10e0: 63 6c 4e 52 41 64 64 43 61 6c 6c 62 61 63 6b 28 clNRAddCallback(
10f0: 69 6e 74 65 72 70 2c 20 46 6f 72 65 61 63 68 4c interp, ForeachL
1100: 6f 6f 70 53 74 65 70 2c 20 73 74 61 74 65 50 74 oopStep, statePt
1110: 72 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e r, NULL, NULL, N
1120: 55 4c 4c 29 3b 0d 0a 2b 09 54 63 6c 4e 52 41 64 ULL);..+.TclNRAd
1130: 64 43 61 6c 6c 62 61 63 6b 28 69 6e 74 65 72 70 dCallback(interp
1140: 2c 20 46 6f 72 65 61 63 68 4c 6f 6f 70 53 74 65 , ForeachLoopSte
1150: 70 2c 20 73 74 61 74 65 50 74 72 2c 20 63 6f 6c p, statePtr, col
1160: 6c 65 63 74 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c lect, NULL, NULL
1170: 29 3b 0d 0a 20 09 72 65 74 75 72 6e 20 54 63 6c );.. .return Tcl
1180: 4e 52 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65 NREvalObjEx(inte
1190: 72 70 2c 20 6f 62 6a 76 5b 6f 62 6a 63 2d 31 5d rp, objv[objc-1]
11a0: 2c 20 30 2c 0d 0a 20 09 09 28 28 49 6e 74 65 72 , 0,.. ..((Inter
11b0: 70 20 2a 29 20 69 6e 74 65 72 70 29 2d 3e 63 6d p *) interp)->cm
11c0: 64 46 72 61 6d 65 50 74 72 2c 20 6f 62 6a 63 2d dFramePtr, objc-
11d0: 31 29 3b 0d 0a 20 20 20 20 20 7d 0d 0a 20 0d 0a 1);.. }.. ..
11e0: 20 20 20 20 20 2f 2a 0d 0a 40 40 20 2d 32 37 30 /*..@@ -270
11f0: 38 2c 32 34 20 2b 32 37 34 35 2c 32 39 20 40 40 8,24 +2745,29 @@
1200: 0d 0a 20 20 20 20 20 43 6c 69 65 6e 74 44 61 74 .. ClientDat
1210: 61 20 64 61 74 61 5b 5d 2c 0d 0a 20 20 20 20 20 a data[],..
1220: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 Tcl_Interp *inte
1230: 72 70 2c 0d 0a 20 20 20 20 20 69 6e 74 20 72 65 rp,.. int re
1240: 73 75 6c 74 29 0d 0a 20 7b 0d 0a 20 20 20 20 20 sult).. {..
1250: 72 65 67 69 73 74 65 72 20 73 74 72 75 63 74 20 register struct
1260: 46 6f 72 65 61 63 68 53 74 61 74 65 20 2a 73 74 ForeachState *st
1270: 61 74 65 50 74 72 20 3d 20 64 61 74 61 5b 30 5d atePtr = data[0]
1280: 3b 0d 0a 2b 20 20 20 20 69 6e 74 20 63 6f 6c 6c ;..+ int coll
1290: 65 63 74 20 3d 20 28 69 6e 74 29 64 61 74 61 5b ect = (int)data[
12a0: 31 5d 3b 0d 0a 20 0d 0a 20 20 20 20 20 2f 2a 0d 1];.. .. /*.
12b0: 0a 20 20 20 20 20 20 2a 20 50 72 6f 63 65 73 73 . * Process
12c0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 the result code
12d0: 20 66 72 6f 6d 20 74 68 69 73 20 72 75 6e 20 6f from this run o
12e0: 66 20 74 68 65 20 5b 66 6f 72 65 61 63 68 5d 20 f the [foreach]
12f0: 62 6f 64 79 2e 20 4e 6f 74 65 20 74 68 61 74 0d body. Note that.
1300: 0a 20 20 20 20 20 20 2a 20 74 68 69 73 20 73 77 . * this sw
1310: 69 74 63 68 20 75 73 65 73 20 66 61 6c 6c 74 68 itch uses fallth
1320: 72 6f 75 67 68 73 20 69 6e 20 73 65 76 65 72 61 roughs in severa
1330: 6c 20 70 6c 61 63 65 73 2e 20 4d 61 69 6e 74 61 l places. Mainta
1340: 69 6e 65 72 20 61 77 61 72 65 21 0d 0a 20 20 20 iner aware!..
1350: 20 20 20 2a 2f 0d 0a 20 0d 0a 20 20 20 20 20 73 */.. .. s
1360: 77 69 74 63 68 20 28 72 65 73 75 6c 74 29 20 7b witch (result) {
1370: 0d 0a 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f .. case TCL_
1380: 43 4f 4e 54 49 4e 55 45 3a 0d 0a 20 09 72 65 73 CONTINUE:.. .res
1390: 75 6c 74 20 3d 20 54 43 4c 5f 4f 4b 3b 0d 0a 2b ult = TCL_OK;..+
13a0: 09 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 63 61 .break;.. ca
13b0: 73 65 20 54 43 4c 5f 4f 4b 3a 0d 0a 2b 09 69 66 se TCL_OK:..+.if
13c0: 20 28 63 6f 6c 6c 65 63 74 20 3d 3d 20 31 29 20 (collect == 1)
13d0: 7b 0d 0a 2b 09 20 20 54 63 6c 5f 4c 69 73 74 4f {..+. Tcl_ListO
13e0: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 bjAppendElement(
13f0: 69 6e 74 65 72 70 2c 20 73 74 61 74 65 50 74 72 interp, statePtr
1400: 2d 3e 72 65 73 75 6c 74 4c 69 73 74 2c 20 54 63 ->resultList, Tc
1410: 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 l_GetObjResult(i
1420: 6e 74 65 72 70 29 29 3b 0d 0a 2b 09 7d 0d 0a 20 nterp));..+.}..
1430: 09 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 63 61 .break;.. ca
1440: 73 65 20 54 43 4c 5f 42 52 45 41 4b 3a 0d 0a 20 se TCL_BREAK:..
1450: 09 72 65 73 75 6c 74 20 3d 20 54 43 4c 5f 4f 4b .result = TCL_OK
1460: 3b 0d 0a 2d 09 67 6f 74 6f 20 64 6f 6e 65 3b 0d ;..-.goto done;.
1470: 0a 2b 09 67 6f 74 6f 20 66 69 6e 69 73 68 3b 0d .+.goto finish;.
1480: 0a 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f 45 . case TCL_E
1490: 52 52 4f 52 3a 0d 0a 20 09 54 63 6c 5f 41 70 70 RROR:.. .Tcl_App
14a0: 65 6e 64 4f 62 6a 54 6f 45 72 72 6f 72 49 6e 66 endObjToErrorInf
14b0: 6f 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 o(interp, Tcl_Ob
14c0: 6a 50 72 69 6e 74 66 28 0d 0a 20 09 09 22 5c 6e jPrintf(.. .."\n
14d0: 20 20 20 20 28 5c 22 66 6f 72 65 61 63 68 5c 22 (\"foreach\"
14e0: 20 62 6f 64 79 20 6c 69 6e 65 20 25 64 29 22 2c body line %d)",
14f0: 20 54 63 6c 5f 47 65 74 45 72 72 6f 72 4c 69 6e Tcl_GetErrorLin
1500: 65 28 69 6e 74 65 72 70 29 29 29 3b 0d 0a 20 20 e(interp)));..
1510: 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 09 67 default:.. .g
1520: 6f 74 6f 20 64 6f 6e 65 3b 0d 0a 40 40 20 2d 32 oto done;..@@ -2
1530: 37 34 30 2c 32 30 20 2b 32 37 38 32 2c 32 31 20 740,20 +2782,21
1540: 40 40 0d 0a 20 09 72 65 73 75 6c 74 20 3d 20 46 @@.. .result = F
1550: 6f 72 65 61 63 68 41 73 73 69 67 6e 6d 65 6e 74 oreachAssignment
1560: 73 28 69 6e 74 65 72 70 2c 20 73 74 61 74 65 50 s(interp, stateP
1570: 74 72 29 3b 0d 0a 20 09 69 66 20 28 72 65 73 75 tr);.. .if (resu
1580: 6c 74 20 3d 3d 20 54 43 4c 5f 45 52 52 4f 52 29 lt == TCL_ERROR)
1590: 20 7b 0d 0a 20 09 20 20 20 20 67 6f 74 6f 20 64 {.. . goto d
15a0: 6f 6e 65 3b 0d 0a 20 09 7d 0d 0a 20 0d 0a 2d 09 one;.. .}.. ..-.
15b0: 54 63 6c 4e 52 41 64 64 43 61 6c 6c 62 61 63 6b TclNRAddCallback
15c0: 28 69 6e 74 65 72 70 2c 20 46 6f 72 65 61 63 68 (interp, Foreach
15d0: 4c 6f 6f 70 53 74 65 70 2c 20 73 74 61 74 65 50 LoopStep, stateP
15e0: 74 72 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 tr, NULL, NULL,
15f0: 4e 55 4c 4c 29 3b 0d 0a 2b 09 54 63 6c 4e 52 41 NULL);..+.TclNRA
1600: 64 64 43 61 6c 6c 62 61 63 6b 28 69 6e 74 65 72 ddCallback(inter
1610: 70 2c 20 46 6f 72 65 61 63 68 4c 6f 6f 70 53 74 p, ForeachLoopSt
1620: 65 70 2c 20 73 74 61 74 65 50 74 72 2c 20 63 6f ep, statePtr, co
1630: 6c 6c 65 63 74 2c 20 4e 55 4c 4c 2c 20 4e 55 4c llect, NULL, NUL
1640: 4c 29 3b 0d 0a 20 09 72 65 74 75 72 6e 20 54 63 L);.. .return Tc
1650: 6c 4e 52 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 lNREvalObjEx(int
1660: 65 72 70 2c 20 73 74 61 74 65 50 74 72 2d 3e 62 erp, statePtr->b
1670: 6f 64 79 50 74 72 2c 20 30 2c 0d 0a 20 09 09 28 odyPtr, 0,.. ..(
1680: 28 49 6e 74 65 72 70 20 2a 29 20 69 6e 74 65 72 (Interp *) inter
1690: 70 29 2d 3e 63 6d 64 46 72 61 6d 65 50 74 72 2c p)->cmdFramePtr,
16a0: 20 73 74 61 74 65 50 74 72 2d 3e 62 6f 64 79 49 statePtr->bodyI
16b0: 64 78 29 3b 0d 0a 20 20 20 20 20 7d 0d 0a 20 0d dx);.. }.. .
16c0: 0a 20 20 20 20 20 2f 2a 0d 0a 20 20 20 20 20 20 . /*..
16d0: 2a 20 57 65 27 72 65 20 64 6f 6e 65 2e 20 54 69 * We're done. Ti
16e0: 64 79 20 75 70 20 6f 75 72 20 77 6f 72 6b 20 73 dy up our work s
16f0: 70 61 63 65 20 61 6e 64 20 66 69 6e 69 73 68 20 pace and finish
1700: 6f 66 66 2e 0d 0a 20 20 20 20 20 20 2a 2f 0d 0a off... */..
1710: 2d 0d 0a 2d 20 20 20 20 54 63 6c 5f 52 65 73 65 -..- Tcl_Rese
1720: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b tResult(interp);
1730: 0d 0a 2b 20 20 66 69 6e 69 73 68 3a 0d 0a 2b 20 ..+ finish:..+
1740: 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 Tcl_SetObjRes
1750: 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 74 61 74 ult(interp, stat
1760: 65 50 74 72 2d 3e 72 65 73 75 6c 74 4c 69 73 74 ePtr->resultList
1770: 29 3b 0d 0a 2b 20 20 20 20 73 74 61 74 65 50 74 );..+ statePt
1780: 72 2d 3e 72 65 73 75 6c 74 4c 69 73 74 20 3d 20 r->resultList =
1790: 4e 55 4c 4c 3b 20 2f 2a 20 44 6f 6e 27 74 20 63 NULL; /* Don't c
17a0: 6c 65 61 6e 20 69 74 20 75 70 20 2a 2f 0d 0a 20 lean it up */..
17b0: 20 20 64 6f 6e 65 3a 0d 0a 20 20 20 20 20 46 6f done:.. Fo
17c0: 72 65 61 63 68 43 6c 65 61 6e 75 70 28 69 6e 74 reachCleanup(int
17d0: 65 72 70 2c 20 73 74 61 74 65 50 74 72 29 3b 0d erp, statePtr);.
17e0: 0a 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 . return res
17f0: 75 6c 74 3b 0d 0a 20 7d 0d 0a 20 0d 0a 40 40 20 ult;.. }.. ..@@
1800: 2d 32 38 31 30 2c 31 30 20 2b 32 38 35 33 2c 31 -2810,10 +2853,1
1810: 33 20 40 40 0d 0a 20 09 20 20 20 20 54 63 6c 44 3 @@.. . TclD
1820: 65 63 72 52 65 66 43 6f 75 6e 74 28 73 74 61 74 ecrRefCount(stat
1830: 65 50 74 72 2d 3e 76 43 6f 70 79 4c 69 73 74 5b ePtr->vCopyList[
1840: 69 5d 29 3b 0d 0a 20 09 7d 0d 0a 20 09 69 66 20 i]);.. .}.. .if
1850: 28 73 74 61 74 65 50 74 72 2d 3e 61 43 6f 70 79 (statePtr->aCopy
1860: 4c 69 73 74 5b 69 5d 29 20 7b 0d 0a 20 09 20 20 List[i]) {.. .
1870: 20 20 54 63 6c 44 65 63 72 52 65 66 43 6f 75 6e TclDecrRefCoun
1880: 74 28 73 74 61 74 65 50 74 72 2d 3e 61 43 6f 70 t(statePtr->aCop
1890: 79 4c 69 73 74 5b 69 5d 29 3b 0d 0a 20 09 7d 0d yList[i]);.. .}.
18a0: 0a 2b 09 69 66 20 28 73 74 61 74 65 50 74 72 2d .+.if (statePtr-
18b0: 3e 72 65 73 75 6c 74 4c 69 73 74 29 20 7b 0d 0a >resultList) {..
18c0: 2b 09 20 20 20 20 54 63 6c 44 65 63 72 52 65 66 +. TclDecrRef
18d0: 43 6f 75 6e 74 28 73 74 61 74 65 50 74 72 2d 3e Count(statePtr->
18e0: 72 65 73 75 6c 74 4c 69 73 74 29 3b 0d 0a 2b 09 resultList);..+.
18f0: 7d 0d 0a 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. }..
1900: 54 63 6c 53 74 61 63 6b 46 72 65 65 28 69 6e 74 TclStackFree(int
1910: 65 72 70 2c 20 73 74 61 74 65 50 74 72 29 3b 0d erp, statePtr);.
1920: 0a 20 7d 0d 0a 20 0c 0d 0a 20 2f 2a 0d 0a 0d 0a . }.. ... /*....
1930: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 Index: generic/t
1940: 63 6c 43 6f 6d 70 43 6d 64 73 2e 63 0d 0a 3d 3d clCompCmds.c..==
1950: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1960: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1970: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1980: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1990: 0d 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 ..--- generic/tc
19a0: 6c 43 6f 6d 70 43 6d 64 73 2e 63 0d 0a 2b 2b 2b lCompCmds.c..+++
19b0: 20 67 65 6e 65 72 69 63 2f 74 63 6c 43 6f 6d 70 generic/tclComp
19c0: 43 6d 64 73 2e 63 0d 0a 40 40 20 2d 33 38 2c 31 Cmds.c..@@ -38,1
19d0: 30 20 2b 33 38 2c 31 34 20 40 40 0d 0a 20 73 74 0 +38,14 @@.. st
19e0: 61 74 69 63 20 69 6e 74 09 09 50 75 73 68 56 61 atic int..PushVa
19f0: 72 4e 61 6d 65 28 54 63 6c 5f 49 6e 74 65 72 70 rName(Tcl_Interp
1a00: 20 2a 69 6e 74 65 72 70 2c 0d 0a 20 09 09 09 20 *interp,.. ...
1a10: 20 20 20 54 63 6c 5f 54 6f 6b 65 6e 20 2a 76 61 Tcl_Token *va
1a20: 72 54 6f 6b 65 6e 50 74 72 2c 20 43 6f 6d 70 69 rTokenPtr, Compi
1a30: 6c 65 45 6e 76 20 2a 65 6e 76 50 74 72 2c 0d 0a leEnv *envPtr,..
1a40: 20 09 09 09 20 20 20 20 69 6e 74 20 66 6c 61 67 ... int flag
1a50: 73 2c 20 69 6e 74 20 2a 6c 6f 63 61 6c 49 6e 64 s, int *localInd
1a60: 65 78 50 74 72 2c 0d 0a 20 09 09 09 20 20 20 20 exPtr,.. ...
1a70: 69 6e 74 20 2a 73 69 6d 70 6c 65 56 61 72 4e 61 int *simpleVarNa
1a80: 6d 65 50 74 72 2c 20 69 6e 74 20 2a 69 73 53 63 mePtr, int *isSc
1a90: 61 6c 61 72 50 74 72 2c 0d 0a 20 09 09 09 20 20 alarPtr,.. ...
1aa0: 20 20 69 6e 74 20 6c 69 6e 65 2c 20 69 6e 74 20 int line, int
1ab0: 2a 63 6c 4e 65 78 74 29 3b 0d 0a 2b 73 74 61 74 *clNext);..+stat
1ac0: 69 63 20 69 6e 74 09 09 54 63 6c 43 6f 6d 70 69 ic int..TclCompi
1ad0: 6c 65 45 61 63 68 6c 6f 6f 70 43 6d 64 28 54 63 leEachloopCmd(Tc
1ae0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 l_Interp *interp
1af0: 2c 0d 0a 2b 09 09 09 20 20 20 20 54 63 6c 5f 50 ,..+... Tcl_P
1b00: 61 72 73 65 20 2a 70 61 72 73 65 50 74 72 2c 20 arse *parsePtr,
1b10: 43 6f 6d 6d 61 6e 64 20 2a 63 6d 64 50 74 72 2c Command *cmdPtr,
1b20: 09 20 43 6f 6d 70 69 6c 65 45 6e 76 20 2a 65 6e . CompileEnv *en
1b30: 76 50 74 72 2c 0d 0a 2b 09 09 09 20 20 20 20 69 vPtr,..+... i
1b40: 6e 74 20 63 6f 6c 6c 65 63 74 29 3b 0d 0a 2b 0d nt collect);..+.
1b50: 0a 20 0d 0a 20 2f 2a 0d 0a 20 20 2a 20 4d 61 63 . .. /*.. * Mac
1b60: 72 6f 20 74 68 61 74 20 65 6e 63 61 70 73 75 6c ro that encapsul
1b70: 61 74 65 73 20 61 6e 20 65 66 66 69 63 69 65 6e ates an efficien
1b80: 63 79 20 74 72 69 63 6b 20 74 68 61 74 20 61 76 cy trick that av
1b90: 6f 69 64 73 20 61 20 66 75 6e 63 74 69 6f 6e 20 oids a function
1ba0: 63 61 6c 6c 20 66 6f 72 0d 0a 20 20 2a 20 74 68 call for.. * th
1bb0: 65 20 73 69 6d 70 6c 65 73 74 20 6f 66 20 63 6f e simplest of co
1bc0: 6d 70 69 6c 65 73 2e 20 54 68 65 20 41 4e 53 49 mpiles. The ANSI
1bd0: 20 43 20 22 70 72 6f 74 6f 74 79 70 65 22 20 66 C "prototype" f
1be0: 6f 72 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73 or this macro is
1bf0: 3a 0d 0a 20 20 2a 0d 0a 40 40 20 2d 31 38 36 38 :.. *..@@ -1868
1c00: 2c 31 38 20 2b 31 38 37 32 2c 35 31 20 40 40 0d ,18 +1872,51 @@.
1c10: 0a 20 09 09 09 09 20 2a 20 63 72 65 61 74 65 64 . .... * created
1c20: 20 62 79 20 54 63 6c 5f 50 61 72 73 65 43 6f 6d by Tcl_ParseCom
1c30: 6d 61 6e 64 2e 20 2a 2f 0d 0a 20 20 20 20 20 43 mand. */.. C
1c40: 6f 6d 6d 61 6e 64 20 2a 63 6d 64 50 74 72 2c 09 ommand *cmdPtr,.
1c50: 09 2f 2a 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 ./* Points to de
1c60: 66 69 6e 74 69 6f 6e 20 6f 66 20 63 6f 6d 6d 61 fintion of comma
1c70: 6e 64 20 62 65 69 6e 67 0d 0a 20 09 09 09 09 20 nd being.. ....
1c80: 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 2a 2f 0d 0a * compiled. */..
1c90: 20 20 20 20 20 43 6f 6d 70 69 6c 65 45 6e 76 20 CompileEnv
1ca0: 2a 65 6e 76 50 74 72 29 09 09 2f 2a 20 48 6f 6c *envPtr)../* Hol
1cb0: 64 73 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 73 ds resulting ins
1cc0: 74 72 75 63 74 69 6f 6e 73 2e 20 2a 2f 0d 0a 20 tructions. */..
1cd0: 7b 0d 0a 2b 20 20 72 65 74 75 72 6e 20 54 63 6c {..+ return Tcl
1ce0: 43 6f 6d 70 69 6c 65 45 61 63 68 6c 6f 6f 70 43 CompileEachloopC
1cf0: 6d 64 28 69 6e 74 65 72 70 2c 20 70 61 72 73 65 md(interp, parse
1d00: 50 74 72 2c 20 63 6d 64 50 74 72 2c 20 65 6e 76 Ptr, cmdPtr, env
1d10: 50 74 72 2c 20 30 29 3b 0d 0a 2b 7d 0d 0a 2b 0c Ptr, 0);..+}..+.
1d20: 0d 0a 2b 2f 2a 0d 0a 2b 20 2a 2d 2d 2d 2d 2d 2d ..+/*..+ *------
1d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1d70: 0d 0a 2b 20 2a 0d 0a 2b 20 2a 20 54 63 6c 43 6f ..+ *..+ * TclCo
1d80: 6d 70 69 6c 65 45 61 63 68 6c 6f 6f 70 43 6d 64 mpileEachloopCmd
1d90: 20 2d 2d 0d 0a 2b 20 2a 0d 0a 2b 20 2a 09 50 72 --..+ *..+ *.Pr
1da0: 6f 63 65 64 75 72 65 20 63 61 6c 6c 65 64 20 74 ocedure called t
1db0: 6f 20 63 6f 6d 70 69 6c 65 20 74 68 65 20 22 66 o compile the "f
1dc0: 6f 72 65 61 63 68 22 20 61 6e 64 20 22 6d 61 70 oreach" and "map
1dd0: 65 61 63 68 22 20 63 6f 6d 6d 61 6e 64 73 2e 0d each" commands..
1de0: 0a 2b 20 2a 0d 0a 2b 20 2a 20 52 65 73 75 6c 74 .+ *..+ * Result
1df0: 73 3a 0d 0a 2b 20 2a 09 52 65 74 75 72 6e 73 20 s:..+ *.Returns
1e00: 54 43 4c 5f 4f 4b 20 66 6f 72 20 61 20 73 75 63 TCL_OK for a suc
1e10: 63 65 73 73 66 75 6c 20 63 6f 6d 70 69 6c 65 2e cessful compile.
1e20: 20 52 65 74 75 72 6e 73 20 54 43 4c 5f 45 52 52 Returns TCL_ERR
1e30: 4f 52 20 74 6f 20 64 65 66 65 72 0d 0a 2b 20 2a OR to defer..+ *
1e40: 09 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 72 .evaluation to r
1e50: 75 6e 74 69 6d 65 2e 0d 0a 2b 20 2a 0d 0a 2b 20 untime...+ *..+
1e60: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0d * Side effects:.
1e70: 0a 2b 20 2a 09 49 6e 73 74 72 75 63 74 69 6f 6e .+ *.Instruction
1e80: 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 65 s are added to e
1e90: 6e 76 50 74 72 20 74 6f 20 65 78 65 63 75 74 65 nvPtr to execute
1ea0: 20 74 68 65 20 22 66 6f 72 65 61 63 68 22 20 63 the "foreach" c
1eb0: 6f 6d 6d 61 6e 64 20 61 74 0d 0a 2b 20 2a 09 72 ommand at..+ *.r
1ec0: 75 6e 74 69 6d 65 2e 0d 0a 2b 20 2a 0d 0a 2b 20 untime...+ *..+
1ed0: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *---------------
1ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1f10: 2d 2d 2d 2d 2d 2d 2d 0d 0a 2b 20 2a 2f 0d 0a 2b -------..+ */..+
1f20: 0d 0a 2b 73 74 61 74 69 63 20 69 6e 74 0d 0a 2b ..+static int..+
1f30: 54 63 6c 43 6f 6d 70 69 6c 65 45 61 63 68 6c 6f TclCompileEachlo
1f40: 6f 70 43 6d 64 28 0d 0a 2b 20 20 20 20 54 63 6c opCmd(..+ Tcl
1f50: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c _Interp *interp,
1f60: 09 09 2f 2a 20 55 73 65 64 20 66 6f 72 20 65 72 ../* Used for er
1f70: 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 2e 20 2a ror reporting. *
1f80: 2f 0d 0a 2b 20 20 20 20 54 63 6c 5f 50 61 72 73 /..+ Tcl_Pars
1f90: 65 20 2a 70 61 72 73 65 50 74 72 2c 09 2f 2a 20 e *parsePtr,./*
1fa0: 50 6f 69 6e 74 73 20 74 6f 20 61 20 70 61 72 73 Points to a pars
1fb0: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 e structure for
1fc0: 74 68 65 20 63 6f 6d 6d 61 6e 64 0d 0a 2b 09 09 the command..+..
1fd0: 09 09 20 2a 20 63 72 65 61 74 65 64 20 62 79 20 .. * created by
1fe0: 54 63 6c 5f 50 61 72 73 65 43 6f 6d 6d 61 6e 64 Tcl_ParseCommand
1ff0: 2e 20 2a 2f 0d 0a 2b 20 20 20 20 43 6f 6d 6d 61 . */..+ Comma
2000: 6e 64 20 2a 63 6d 64 50 74 72 2c 09 09 2f 2a 20 nd *cmdPtr,../*
2010: 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 74 Points to defint
2020: 69 6f 6e 20 6f 66 20 63 6f 6d 6d 61 6e 64 20 62 ion of command b
2030: 65 69 6e 67 0d 0a 2b 09 09 09 09 20 2a 20 63 6f eing..+.... * co
2040: 6d 70 69 6c 65 64 2e 20 2a 2f 0d 0a 2b 20 20 20 mpiled. */..+
2050: 20 43 6f 6d 70 69 6c 65 45 6e 76 20 2a 65 6e 76 CompileEnv *env
2060: 50 74 72 2c 09 09 2f 2a 20 48 6f 6c 64 73 20 72 Ptr,../* Holds r
2070: 65 73 75 6c 74 69 6e 67 20 69 6e 73 74 72 75 63 esulting instruc
2080: 74 69 6f 6e 73 2e 20 2a 2f 0d 0a 2b 20 20 20 20 tions. */..+
2090: 69 6e 74 20 63 6f 6c 6c 65 63 74 29 09 09 2f 2a int collect)../*
20a0: 20 46 6c 61 67 20 3d 3d 20 31 20 74 6f 20 63 6f Flag == 1 to co
20b0: 6c 6c 65 63 74 20 61 6e 64 20 72 65 74 75 72 6e llect and return
20c0: 20 6c 6f 6f 70 20 62 6f 64 79 20 72 65 73 75 6c loop body resul
20d0: 74 2e 20 2a 2f 0d 0a 2b 7b 0d 0a 20 20 20 20 20 t. */..+{..
20e0: 50 72 6f 63 20 2a 70 72 6f 63 50 74 72 20 3d 20 Proc *procPtr =
20f0: 65 6e 76 50 74 72 2d 3e 70 72 6f 63 50 74 72 3b envPtr->procPtr;
2100: 0d 0a 20 20 20 20 20 46 6f 72 65 61 63 68 49 6e .. ForeachIn
2110: 66 6f 20 2a 69 6e 66 6f 50 74 72 3b 09 2f 2a 20 fo *infoPtr;./*
2120: 50 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 74 Points to the st
2130: 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 ructure describi
2140: 6e 67 20 74 68 69 73 0d 0a 20 09 09 09 09 20 2a ng this.. .... *
2150: 20 66 6f 72 65 61 63 68 20 63 6f 6d 6d 61 6e 64 foreach command
2160: 2e 20 53 74 6f 72 65 64 20 69 6e 20 61 20 41 75 . Stored in a Au
2170: 78 44 61 74 61 0d 0a 20 09 09 09 09 20 2a 20 72 xData.. .... * r
2180: 65 63 6f 72 64 20 69 6e 20 74 68 65 20 42 79 74 ecord in the Byt
2190: 65 43 6f 64 65 2e 20 2a 2f 0d 0a 20 20 20 20 20 eCode. */..
21a0: 69 6e 74 20 66 69 72 73 74 56 61 6c 75 65 54 65 int firstValueTe
21b0: 6d 70 3b 09 09 2f 2a 20 49 6e 64 65 78 20 6f 66 mp;../* Index of
21c0: 20 74 68 65 20 66 69 72 73 74 20 74 65 6d 70 20 the first temp
21d0: 76 61 72 20 69 6e 20 74 68 65 20 66 72 61 6d 65 var in the frame
21e0: 0d 0a 20 09 09 09 09 20 2a 20 75 73 65 64 20 74 .. .... * used t
21f0: 6f 20 70 6f 69 6e 74 20 74 6f 20 61 20 76 61 6c o point to a val
2200: 75 65 20 6c 69 73 74 2e 20 2a 2f 0d 0a 20 20 20 ue list. */..
2210: 20 20 69 6e 74 20 6c 6f 6f 70 43 74 54 65 6d 70 int loopCtTemp
2220: 3b 09 09 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 ;../* Index of t
2230: 65 6d 70 20 76 61 72 20 68 6f 6c 64 69 6e 67 20 emp var holding
2240: 74 68 65 20 6c 6f 6f 70 27 73 0d 0a 20 09 09 09 the loop's.. ...
2250: 09 20 2a 20 69 74 65 72 61 74 69 6f 6e 20 63 6f . * iteration co
2260: 75 6e 74 2e 20 2a 2f 0d 0a 2b 20 20 20 20 69 6e unt. */..+ in
2270: 74 20 63 6f 6c 6c 65 63 74 54 65 6d 70 3b 20 2f t collectTemp; /
2280: 2a 20 49 6e 64 65 78 20 6f 66 20 74 65 6d 70 20 * Index of temp
2290: 76 61 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 var holding the
22a0: 72 65 73 75 6c 74 20 6c 69 73 74 2e 20 2a 2f 0d result list. */.
22b0: 0a 2b 0d 0a 20 20 20 20 20 54 63 6c 5f 54 6f 6b .+.. Tcl_Tok
22c0: 65 6e 20 2a 74 6f 6b 65 6e 50 74 72 2c 20 2a 62 en *tokenPtr, *b
22d0: 6f 64 79 54 6f 6b 65 6e 50 74 72 3b 0d 0a 20 20 odyTokenPtr;..
22e0: 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 unsigned char
22f0: 20 2a 6a 75 6d 70 50 63 3b 0d 0a 20 20 20 20 20 *jumpPc;..
2300: 4a 75 6d 70 46 69 78 75 70 20 6a 75 6d 70 46 61 JumpFixup jumpFa
2310: 6c 73 65 46 69 78 75 70 3b 0d 0a 20 20 20 20 20 lseFixup;..
2320: 69 6e 74 20 6a 75 6d 70 42 61 63 6b 44 69 73 74 int jumpBackDist
2330: 2c 20 6a 75 6d 70 42 61 63 6b 4f 66 66 73 65 74 , jumpBackOffset
2340: 2c 20 69 6e 66 6f 49 6e 64 65 78 2c 20 72 61 6e , infoIndex, ran
2350: 67 65 2c 20 62 6f 64 79 49 6e 64 65 78 3b 0d 0a ge, bodyIndex;..
2360: 20 20 20 20 20 69 6e 74 20 6e 75 6d 57 6f 72 64 int numWord
2370: 73 2c 20 6e 75 6d 4c 69 73 74 73 2c 20 6e 75 6d s, numLists, num
2380: 56 61 72 73 2c 20 6c 6f 6f 70 49 6e 64 65 78 2c Vars, loopIndex,
2390: 20 74 65 6d 70 56 61 72 2c 20 69 2c 20 6a 2c 20 tempVar, i, j,
23a0: 63 6f 64 65 3b 0d 0a 40 40 20 2d 32 30 36 35 2c code;..@@ -2065,
23b0: 31 30 20 2b 32 31 30 32 2c 32 36 20 40 40 0d 0a 10 +2102,26 @@..
23c0: 20 09 20 20 20 20 45 6d 69 74 31 34 49 6e 73 74 . Emit14Inst
23d0: 28 09 09 49 4e 53 54 5f 53 54 4f 52 45 5f 53 43 (..INST_STORE_SC
23e0: 41 4c 41 52 2c 20 74 65 6d 70 56 61 72 2c 09 65 ALAR, tempVar,.e
23f0: 6e 76 50 74 72 29 3b 0d 0a 20 09 20 20 20 20 54 nvPtr);.. . T
2400: 63 6c 45 6d 69 74 4f 70 63 6f 64 65 28 09 49 4e clEmitOpcode(.IN
2410: 53 54 5f 50 4f 50 2c 09 09 09 65 6e 76 50 74 72 ST_POP,...envPtr
2420: 29 3b 0d 0a 20 09 20 20 20 20 6c 6f 6f 70 49 6e );.. . loopIn
2430: 64 65 78 2b 2b 3b 0d 0a 20 09 7d 0d 0a 20 20 20 dex++;.. .}..
2440: 20 20 7d 0d 0a 2b 0d 0a 2b 20 20 20 20 2f 2a 0d }..+..+ /*.
2450: 0a 2b 20 20 20 20 20 2a 20 43 72 65 61 74 65 20 .+ * Create
2460: 74 65 6d 70 6f 72 61 72 79 20 76 61 72 69 61 62 temporary variab
2470: 6c 65 20 74 6f 20 63 61 70 74 75 72 65 20 72 65 le to capture re
2480: 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d turn values from
2490: 20 6c 6f 6f 70 20 62 6f 64 79 2e 0d 0a 2b 20 20 loop body...+
24a0: 20 20 20 2a 2f 0d 0a 2b 20 20 20 20 20 0d 0a 2b */..+ ..+
24b0: 20 20 20 20 69 66 20 28 63 6f 6c 6c 65 63 74 20 if (collect
24c0: 3d 3d 20 31 29 20 7b 0d 0a 2b 09 20 20 20 20 63 == 1) {..+. c
24d0: 6f 6c 6c 65 63 74 54 65 6d 70 20 3d 20 54 63 6c ollectTemp = Tcl
24e0: 46 69 6e 64 43 6f 6d 70 69 6c 65 64 4c 6f 63 61 FindCompiledLoca
24f0: 6c 28 4e 55 4c 4c 2c 20 2f 2a 6e 61 6d 65 43 68 l(NULL, /*nameCh
2500: 61 72 73 2a 2f 20 30 2c 20 2f 2a 63 72 65 61 74 ars*/ 0, /*creat
2510: 65 2a 2f 20 31 2c 20 65 6e 76 50 74 72 29 3b 0d e*/ 1, envPtr);.
2520: 0a 2b 09 20 20 20 20 0d 0a 2b 09 20 20 20 20 50 .+. ..+. P
2530: 75 73 68 4c 69 74 65 72 61 6c 28 65 6e 76 50 74 ushLiteral(envPt
2540: 72 2c 20 22 22 2c 20 30 29 3b 0d 0a 2b 09 20 20 r, "", 0);..+.
2550: 20 20 69 66 20 28 63 6f 6c 6c 65 63 74 54 65 6d if (collectTem
2560: 70 20 3c 3d 20 32 35 35 29 20 7b 0d 0a 2b 09 20 p <= 255) {..+.
2570: 20 20 20 20 20 54 63 6c 45 6d 69 74 49 6e 73 74 TclEmitInst
2580: 49 6e 74 31 28 20 20 49 4e 53 54 5f 53 54 4f 52 Int1( INST_STOR
2590: 45 5f 53 43 41 4c 41 52 31 2c 20 63 6f 6c 6c 65 E_SCALAR1, colle
25a0: 63 74 54 65 6d 70 2c 20 65 6e 76 50 74 72 29 3b ctTemp, envPtr);
25b0: 0d 0a 2b 09 20 20 20 20 7d 20 65 6c 73 65 20 7b ..+. } else {
25c0: 0d 0a 2b 09 20 20 20 20 20 20 54 63 6c 45 6d 69 ..+. TclEmi
25d0: 74 49 6e 73 74 49 6e 74 34 28 20 20 49 4e 53 54 tInstInt4( INST
25e0: 5f 53 54 4f 52 45 5f 53 43 41 4c 41 52 34 2c 20 _STORE_SCALAR4,
25f0: 63 6f 6c 6c 65 63 74 54 65 6d 70 2c 20 65 6e 76 collectTemp, env
2600: 50 74 72 29 3b 0d 0a 2b 09 20 20 20 20 7d 0d 0a Ptr);..+. }..
2610: 2b 09 20 20 20 20 54 63 6c 45 6d 69 74 4f 70 63 +. TclEmitOpc
2620: 6f 64 65 28 20 20 20 20 20 20 49 4e 53 54 5f 50 ode( INST_P
2630: 4f 50 2c 20 20 20 20 20 20 20 65 6e 76 50 74 72 OP, envPtr
2640: 29 3b 0d 0a 2b 20 20 20 20 7d 0d 0a 20 0d 0a 20 );..+ }.. ..
2650: 20 20 20 20 2f 2a 0d 0a 20 20 20 20 20 20 2a 20 /*.. *
2660: 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 74 Initialize the t
2670: 65 6d 70 6f 72 61 72 79 20 76 61 72 20 74 68 61 emporary var tha
2680: 74 20 68 6f 6c 64 73 20 74 68 65 20 63 6f 75 6e t holds the coun
2690: 74 20 6f 66 20 6c 6f 6f 70 20 69 74 65 72 61 74 t of loop iterat
26a0: 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 2a 2f 0d ions... */.
26b0: 0a 20 0d 0a 40 40 20 2d 32 30 39 30 2c 31 31 20 . ..@@ -2090,11
26c0: 2b 32 31 34 33 2c 32 30 20 40 40 0d 0a 20 20 20 +2143,20 @@..
26d0: 20 20 53 65 74 4c 69 6e 65 49 6e 66 6f 72 6d 61 SetLineInforma
26e0: 74 69 6f 6e 28 62 6f 64 79 49 6e 64 65 78 29 3b tion(bodyIndex);
26f0: 0d 0a 20 20 20 20 20 45 78 63 65 70 74 69 6f 6e .. Exception
2700: 52 61 6e 67 65 53 74 61 72 74 73 28 65 6e 76 50 RangeStarts(envP
2710: 74 72 2c 20 72 61 6e 67 65 29 3b 0d 0a 20 20 20 tr, range);..
2720: 20 20 43 6f 6d 70 69 6c 65 42 6f 64 79 28 65 6e CompileBody(en
2730: 76 50 74 72 2c 20 62 6f 64 79 54 6f 6b 65 6e 50 vPtr, bodyTokenP
2740: 74 72 2c 20 69 6e 74 65 72 70 29 3b 0d 0a 20 20 tr, interp);..
2750: 20 20 20 45 78 63 65 70 74 69 6f 6e 52 61 6e 67 ExceptionRang
2760: 65 45 6e 64 73 28 65 6e 76 50 74 72 2c 20 72 61 eEnds(envPtr, ra
2770: 6e 67 65 29 3b 0d 0a 20 20 20 20 20 65 6e 76 50 nge);.. envP
2780: 74 72 2d 3e 63 75 72 72 53 74 61 63 6b 44 65 70 tr->currStackDep
2790: 74 68 20 3d 20 73 61 76 65 64 53 74 61 63 6b 44 th = savedStackD
27a0: 65 70 74 68 20 2b 20 31 3b 0d 0a 2d 20 20 20 20 epth + 1;..-
27b0: 54 63 6c 45 6d 69 74 4f 70 63 6f 64 65 28 09 09 TclEmitOpcode(..
27c0: 49 4e 53 54 5f 50 4f 50 2c 09 09 09 65 6e 76 50 INST_POP,...envP
27d0: 74 72 29 3b 0d 0a 2b 0d 0a 2b 20 20 20 20 69 66 tr);..+..+ if
27e0: 20 28 63 6f 6c 6c 65 63 74 20 3d 3d 20 31 29 20 (collect == 1)
27f0: 7b 0d 0a 2b 09 20 20 20 20 69 66 20 28 63 6f 6c {..+. if (col
2800: 6c 65 63 74 54 65 6d 70 20 3c 3d 20 32 35 35 29 lectTemp <= 255)
2810: 20 7b 0d 0a 2b 09 20 20 20 20 20 20 54 63 6c 45 {..+. TclE
2820: 6d 69 74 49 6e 73 74 49 6e 74 31 28 20 20 49 4e mitInstInt1( IN
2830: 53 54 5f 4c 41 50 50 45 4e 44 5f 53 43 41 4c 41 ST_LAPPEND_SCALA
2840: 52 31 2c 20 63 6f 6c 6c 65 63 74 54 65 6d 70 2c R1, collectTemp,
2850: 20 65 6e 76 50 74 72 29 3b 0d 0a 2b 09 20 20 20 envPtr);..+.
2860: 20 7d 20 65 6c 73 65 20 7b 0d 0a 2b 09 20 20 20 } else {..+.
2870: 20 20 20 54 63 6c 45 6d 69 74 49 6e 73 74 49 6e TclEmitInstIn
2880: 74 34 28 20 20 49 4e 53 54 5f 4c 41 50 50 45 4e t4( INST_LAPPEN
2890: 44 5f 53 43 41 4c 41 52 34 2c 20 63 6f 6c 6c 65 D_SCALAR4, colle
28a0: 63 74 54 65 6d 70 2c 20 65 6e 76 50 74 72 29 3b ctTemp, envPtr);
28b0: 0d 0a 2b 09 20 20 20 20 7d 0d 0a 2b 20 20 20 20 ..+. }..+
28c0: 7d 0d 0a 2b 20 20 20 20 54 63 6c 45 6d 69 74 4f }..+ TclEmitO
28d0: 70 63 6f 64 65 28 20 20 20 20 20 20 20 20 49 4e pcode( IN
28e0: 53 54 5f 50 4f 50 2c 20 20 20 20 20 20 20 20 20 ST_POP,
28f0: 20 20 65 6e 76 50 74 72 29 3b 0d 0a 2b 0d 0a 20 envPtr);..+..
2900: 0d 0a 20 20 20 20 20 2f 2a 0d 0a 20 20 20 20 20 .. /*..
2910: 20 2a 20 4a 75 6d 70 20 62 61 63 6b 20 74 6f 20 * Jump back to
2920: 74 68 65 20 74 65 73 74 20 61 74 20 74 68 65 20 the test at the
2930: 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70 2e top of the loop.
2940: 20 47 65 6e 65 72 61 74 65 20 61 20 34 20 62 79 Generate a 4 by
2950: 74 65 20 6a 75 6d 70 20 69 66 0d 0a 20 20 20 20 te jump if..
2960: 20 20 2a 20 74 68 65 20 64 69 73 74 61 6e 63 65 * the distance
2970: 20 74 6f 20 74 68 65 20 74 65 73 74 20 69 73 20 to the test is
2980: 3e 20 31 32 30 20 62 79 74 65 73 2e 20 54 68 69 > 120 bytes. Thi
2990: 73 20 69 73 20 63 6f 6e 73 65 72 76 61 74 69 76 s is conservativ
29a0: 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 2a 20 65 e and.. * e
29b0: 6e 73 75 72 65 73 20 74 68 61 74 20 77 65 20 77 nsures that we w
29c0: 6f 6e 27 74 20 68 61 76 65 20 74 6f 20 72 65 70 on't have to rep
29d0: 6c 61 63 65 20 74 68 69 73 20 6a 75 6d 70 20 69 lace this jump i
29e0: 66 20 77 65 20 6c 61 74 65 72 20 6e 65 65 64 20 f we later need
29f0: 74 6f 0d 0a 40 40 20 2d 32 31 34 30 2c 31 35 20 to..@@ -2140,15
2a00: 2b 32 32 30 32 2c 32 34 20 40 40 0d 0a 20 20 20 +2202,24 @@..
2a10: 20 20 20 2a 2f 0d 0a 20 0d 0a 20 20 20 20 20 45 */.. .. E
2a20: 78 63 65 70 74 69 6f 6e 52 61 6e 67 65 54 61 72 xceptionRangeTar
2a30: 67 65 74 28 65 6e 76 50 74 72 2c 20 72 61 6e 67 get(envPtr, rang
2a40: 65 2c 20 62 72 65 61 6b 4f 66 66 73 65 74 29 3b e, breakOffset);
2a50: 0d 0a 20 0d 0a 20 20 20 20 20 2f 2a 0d 0a 2d 20 .. .. /*..-
2a60: 20 20 20 20 2a 20 54 68 65 20 66 6f 72 65 61 63 * The foreac
2a70: 68 20 63 6f 6d 6d 61 6e 64 27 73 20 72 65 73 75 h command's resu
2a80: 6c 74 20 69 73 20 61 6e 20 65 6d 70 74 79 20 73 lt is an empty s
2a90: 74 72 69 6e 67 2e 0d 0a 2b 20 20 20 20 20 2a 20 tring...+ *
2aa0: 54 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 72 65 The command's re
2ab0: 73 75 6c 74 20 69 73 20 61 6e 20 65 6d 70 74 79 sult is an empty
2ac0: 20 73 74 72 69 6e 67 20 69 66 20 6e 6f 74 20 63 string if not c
2ad0: 6f 6c 6c 65 63 74 69 6e 67 2c 20 6f 72 20 74 68 ollecting, or th
2ae0: 65 0d 0a 2b 20 20 20 20 20 2a 20 6c 69 73 74 20 e..+ * list
2af0: 6f 66 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 of results from
2b00: 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 6c evaluating the l
2b10: 6f 6f 70 20 62 6f 64 79 2e 0d 0a 20 20 20 20 20 oop body...
2b20: 20 2a 2f 0d 0a 20 0d 0a 20 20 20 20 20 65 6e 76 */.. .. env
2b30: 50 74 72 2d 3e 63 75 72 72 53 74 61 63 6b 44 65 Ptr->currStackDe
2b40: 70 74 68 20 3d 20 73 61 76 65 64 53 74 61 63 6b pth = savedStack
2b50: 44 65 70 74 68 3b 0d 0a 2d 20 20 20 20 50 75 73 Depth;..- Pus
2b60: 68 4c 69 74 65 72 61 6c 28 65 6e 76 50 74 72 2c hLiteral(envPtr,
2b70: 20 22 22 2c 20 30 29 3b 0d 0a 2b 20 20 20 20 69 "", 0);..+ i
2b80: 66 20 28 63 6f 6c 6c 65 63 74 20 3d 3d 20 31 29 f (collect == 1)
2b90: 20 7b 0d 0a 2b 09 20 20 20 20 69 66 20 28 63 6f {..+. if (co
2ba0: 6c 6c 65 63 74 54 65 6d 70 20 3c 3d 20 32 35 35 llectTemp <= 255
2bb0: 29 20 7b 0d 0a 2b 09 20 20 20 20 20 20 54 63 6c ) {..+. Tcl
2bc0: 45 6d 69 74 49 6e 73 74 49 6e 74 31 28 20 20 49 EmitInstInt1( I
2bd0: 4e 53 54 5f 4c 4f 41 44 5f 53 43 41 4c 41 52 31 NST_LOAD_SCALAR1
2be0: 2c 20 63 6f 6c 6c 65 63 74 54 65 6d 70 2c 20 65 , collectTemp, e
2bf0: 6e 76 50 74 72 29 3b 0d 0a 2b 09 20 20 20 20 7d nvPtr);..+. }
2c00: 20 65 6c 73 65 20 7b 0d 0a 2b 09 20 20 20 20 20 else {..+.
2c10: 20 54 63 6c 45 6d 69 74 49 6e 73 74 49 6e 74 34 TclEmitInstInt4
2c20: 28 20 20 49 4e 53 54 5f 4c 4f 41 44 5f 53 43 41 ( INST_LOAD_SCA
2c30: 4c 41 52 34 2c 20 63 6f 6c 6c 65 63 74 54 65 6d LAR4, collectTem
2c40: 70 2c 20 65 6e 76 50 74 72 29 3b 0d 0a 2b 09 20 p, envPtr);..+.
2c50: 20 20 20 7d 0d 0a 2b 20 20 20 20 7d 20 65 6c 73 }..+ } els
2c60: 65 20 7b 0d 0a 2b 09 20 20 20 20 50 75 73 68 4c e {..+. PushL
2c70: 69 74 65 72 61 6c 28 65 6e 76 50 74 72 2c 20 22 iteral(envPtr, "
2c80: 22 2c 20 30 29 3b 0d 0a 2b 20 20 20 20 7d 0d 0a ", 0);..+ }..
2c90: 20 20 20 20 20 65 6e 76 50 74 72 2d 3e 63 75 72 envPtr->cur
2ca0: 72 53 74 61 63 6b 44 65 70 74 68 20 3d 20 73 61 rStackDepth = sa
2cb0: 76 65 64 53 74 61 63 6b 44 65 70 74 68 20 2b 20 vedStackDepth +
2cc0: 31 3b 0d 0a 20 0d 0a 20 20 20 64 6f 6e 65 3a 0d 1;.. .. done:.
2cd0: 0a 20 20 20 20 20 66 6f 72 20 28 6c 6f 6f 70 49 . for (loopI
2ce0: 6e 64 65 78 20 3d 20 30 3b 20 20 6c 6f 6f 70 49 ndex = 0; loopI
2cf0: 6e 64 65 78 20 3c 20 6e 75 6d 4c 69 73 74 73 3b ndex < numLists;
2d00: 20 20 6c 6f 6f 70 49 6e 64 65 78 2b 2b 29 20 7b loopIndex++) {
2d10: 0d 0a 20 09 69 66 20 28 76 61 72 76 4c 69 73 74 .. .if (varvList
2d20: 5b 6c 6f 6f 70 49 6e 64 65 78 5d 20 21 3d 20 4e [loopIndex] != N
2d30: 55 4c 4c 29 20 7b 0d 0a 40 40 20 2d 33 36 39 34 ULL) {..@@ -3694
2d40: 2c 31 30 20 2b 33 37 36 35 2c 34 30 20 40 40 0d ,10 +3765,40 @@.
2d50: 0a 20 09 7d 0d 0a 20 20 20 20 20 7d 0d 0a 20 0d . .}.. }.. .
2d60: 0a 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c . return TCL
2d70: 5f 4f 4b 3b 0d 0a 20 7d 0d 0a 2b 0c 0d 0a 2b 2f _OK;.. }..+...+/
2d80: 2a 0d 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *..+ *----------
2d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2b 20 ------------..+
2dd0: 2a 0d 0a 2b 20 2a 20 54 63 6c 43 6f 6d 70 69 6c *..+ * TclCompil
2de0: 65 4d 61 70 65 61 63 68 43 6d 64 20 2d 2d 0d 0a eMapeachCmd --..
2df0: 2b 20 2a 0d 0a 2b 20 2a 09 50 72 6f 63 65 64 75 + *..+ *.Procedu
2e00: 72 65 20 63 61 6c 6c 65 64 20 74 6f 20 63 6f 6d re called to com
2e10: 70 69 6c 65 20 74 68 65 20 22 6d 61 70 65 61 63 pile the "mapeac
2e20: 68 22 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 2b 20 2a h" command...+ *
2e30: 0d 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0d 0a ..+ * Results:..
2e40: 2b 20 2a 09 52 65 74 75 72 6e 73 20 54 43 4c 5f + *.Returns TCL_
2e50: 4f 4b 20 66 6f 72 20 61 20 73 75 63 63 65 73 73 OK for a success
2e60: 66 75 6c 20 63 6f 6d 70 69 6c 65 2e 20 52 65 74 ful compile. Ret
2e70: 75 72 6e 73 20 54 43 4c 5f 45 52 52 4f 52 20 74 urns TCL_ERROR t
2e80: 6f 20 64 65 66 65 72 0d 0a 2b 20 2a 09 65 76 61 o defer..+ *.eva
2e90: 6c 75 61 74 69 6f 6e 20 74 6f 20 72 75 6e 74 69 luation to runti
2ea0: 6d 65 2e 0d 0a 2b 20 2a 0d 0a 2b 20 2a 20 53 69 me...+ *..+ * Si
2eb0: 64 65 20 65 66 66 65 63 74 73 3a 0d 0a 2b 20 2a de effects:..+ *
2ec0: 09 49 6e 73 74 72 75 63 74 69 6f 6e 73 20 61 72 .Instructions ar
2ed0: 65 20 61 64 64 65 64 20 74 6f 20 65 6e 76 50 74 e added to envPt
2ee0: 72 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65 r to execute the
2ef0: 20 22 6d 61 70 65 61 63 68 22 20 63 6f 6d 6d 61 "mapeach" comma
2f00: 6e 64 20 61 74 0d 0a 2b 20 2a 09 72 75 6e 74 69 nd at..+ *.runti
2f10: 6d 65 2e 0d 0a 2b 20 2a 0d 0a 2b 20 2a 2d 2d 2d me...+ *..+ *---
2f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2f60: 2d 2d 2d 0d 0a 2b 20 2a 2f 0d 0a 2b 0d 0a 2b 69 ---..+ */..+..+i
2f70: 6e 74 0d 0a 2b 54 63 6c 43 6f 6d 70 69 6c 65 4d nt..+TclCompileM
2f80: 61 70 65 61 63 68 43 6d 64 28 0d 0a 2b 20 20 20 apeachCmd(..+
2f90: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 Tcl_Interp *int
2fa0: 65 72 70 2c 09 09 2f 2a 20 55 73 65 64 20 66 6f erp,../* Used fo
2fb0: 72 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69 6e r error reportin
2fc0: 67 2e 20 2a 2f 0d 0a 2b 20 20 20 20 54 63 6c 5f g. */..+ Tcl_
2fd0: 50 61 72 73 65 20 2a 70 61 72 73 65 50 74 72 2c Parse *parsePtr,
2fe0: 09 2f 2a 20 50 6f 69 6e 74 73 20 74 6f 20 61 20 ./* Points to a
2ff0: 70 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 parse structure
3000: 66 6f 72 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0d for the command.
3010: 0a 2b 09 09 09 09 20 2a 20 63 72 65 61 74 65 64 .+.... * created
3020: 20 62 79 20 54 63 6c 5f 50 61 72 73 65 43 6f 6d by Tcl_ParseCom
3030: 6d 61 6e 64 2e 20 2a 2f 0d 0a 2b 20 20 20 20 43 mand. */..+ C
3040: 6f 6d 6d 61 6e 64 20 2a 63 6d 64 50 74 72 2c 09 ommand *cmdPtr,.
3050: 09 2f 2a 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 ./* Points to de
3060: 66 69 6e 74 69 6f 6e 20 6f 66 20 63 6f 6d 6d 61 fintion of comma
3070: 6e 64 20 62 65 69 6e 67 0d 0a 2b 09 09 09 09 20 nd being..+....
3080: 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 2a 2f 0d 0a * compiled. */..
3090: 2b 20 20 20 20 43 6f 6d 70 69 6c 65 45 6e 76 20 + CompileEnv
30a0: 2a 65 6e 76 50 74 72 29 09 09 2f 2a 20 48 6f 6c *envPtr)../* Hol
30b0: 64 73 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 73 ds resulting ins
30c0: 74 72 75 63 74 69 6f 6e 73 2e 20 2a 2f 0d 0a 2b tructions. */..+
30d0: 7b 0d 0a 2b 20 20 72 65 74 75 72 6e 20 54 63 6c {..+ return Tcl
30e0: 43 6f 6d 70 69 6c 65 45 61 63 68 6c 6f 6f 70 43 CompileEachloopC
30f0: 6d 64 28 69 6e 74 65 72 70 2c 20 70 61 72 73 65 md(interp, parse
3100: 50 74 72 2c 20 63 6d 64 50 74 72 2c 20 65 6e 76 Ptr, cmdPtr, env
3110: 50 74 72 2c 20 31 29 3b 0d 0a 2b 7d 0d 0a 20 0c Ptr, 1);..+}.. .
3120: 0d 0a 20 2f 2a 0d 0a 20 20 2a 2d 2d 2d 2d 2d 2d .. /*.. *------
3130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3170: 0d 0a 20 20 2a 0d 0a 20 20 2a 20 54 63 6c 43 6f .. *.. * TclCo
3180: 6d 70 69 6c 65 4e 61 6d 65 73 70 61 63 65 43 6d mpileNamespaceCm
3190: 64 20 2d 2d 0d 0a 0d 0a 49 6e 64 65 78 3a 20 67 d --....Index: g
31a0: 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e 68 0d eneric/tclInt.h.
31b0: 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .===============
31c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
31d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
31e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
31f0: 3d 3d 3d 0d 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 ===..--- generic
3200: 2f 74 63 6c 49 6e 74 2e 68 0d 0a 2b 2b 2b 20 67 /tclInt.h..+++ g
3210: 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e 68 0d eneric/tclInt.h.
3220: 0a 40 40 20 2d 32 37 37 32 2c 31 30 20 2b 32 37 .@@ -2772,10 +27
3230: 37 32 2c 31 31 20 40 40 0d 0a 20 4d 4f 44 55 4c 72,11 @@.. MODUL
3240: 45 5f 53 43 4f 50 45 20 54 63 6c 5f 4f 62 6a 43 E_SCOPE Tcl_ObjC
3250: 6d 64 50 72 6f 63 20 54 63 6c 4e 52 43 61 74 63 mdProc TclNRCatc
3260: 68 4f 62 6a 43 6d 64 3b 0d 0a 20 4d 4f 44 55 4c hObjCmd;.. MODUL
3270: 45 5f 53 43 4f 50 45 20 54 63 6c 5f 4f 62 6a 43 E_SCOPE Tcl_ObjC
3280: 6d 64 50 72 6f 63 20 54 63 6c 4e 52 45 78 70 72 mdProc TclNRExpr
3290: 4f 62 6a 43 6d 64 3b 0d 0a 20 4d 4f 44 55 4c 45 ObjCmd;.. MODULE
32a0: 5f 53 43 4f 50 45 20 54 63 6c 5f 4f 62 6a 43 6d _SCOPE Tcl_ObjCm
32b0: 64 50 72 6f 63 20 54 63 6c 4e 52 46 6f 72 4f 62 dProc TclNRForOb
32c0: 6a 43 6d 64 3b 0d 0a 20 4d 4f 44 55 4c 45 5f 53 jCmd;.. MODULE_S
32d0: 43 4f 50 45 20 54 63 6c 5f 4f 62 6a 43 6d 64 50 COPE Tcl_ObjCmdP
32e0: 72 6f 63 20 54 63 6c 4e 52 46 6f 72 65 61 63 68 roc TclNRForeach
32f0: 43 6d 64 3b 0d 0a 20 4d 4f 44 55 4c 45 5f 53 43 Cmd;.. MODULE_SC
3300: 4f 50 45 20 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 OPE Tcl_ObjCmdPr
3310: 6f 63 20 54 63 6c 4e 52 49 66 4f 62 6a 43 6d 64 oc TclNRIfObjCmd
3320: 3b 0d 0a 2b 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 ;..+MODULE_SCOPE
3330: 20 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63 20 Tcl_ObjCmdProc
3340: 54 63 6c 4e 52 4d 61 70 65 61 63 68 43 6d 64 3b TclNRMapeachCmd;
3350: 0d 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 .. MODULE_SCOPE
3360: 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63 20 54 Tcl_ObjCmdProc T
3370: 63 6c 4e 52 53 6f 75 72 63 65 4f 62 6a 43 6d 64 clNRSourceObjCmd
3380: 3b 0d 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 ;.. MODULE_SCOPE
3390: 20 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63 20 Tcl_ObjCmdProc
33a0: 54 63 6c 4e 52 53 75 62 73 74 4f 62 6a 43 6d 64 TclNRSubstObjCmd
33b0: 3b 0d 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 ;.. MODULE_SCOPE
33c0: 20 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63 20 Tcl_ObjCmdProc
33d0: 54 63 6c 4e 52 53 77 69 74 63 68 4f 62 6a 43 6d TclNRSwitchObjCm
33e0: 64 3b 0d 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 d;.. MODULE_SCOP
33f0: 45 20 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63 E Tcl_ObjCmdProc
3400: 20 54 63 6c 4e 52 54 72 79 4f 62 6a 43 6d 64 3b TclNRTryObjCmd;
3410: 0d 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 .. MODULE_SCOPE
3420: 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63 20 54 Tcl_ObjCmdProc T
3430: 63 6c 4e 52 55 70 6c 65 76 65 6c 4f 62 6a 43 6d clNRUplevelObjCm
3440: 64 3b 0d 0a 40 40 20 2d 33 33 36 33 2c 31 30 20 d;..@@ -3363,10
3450: 2b 33 33 36 34 2c 31 33 20 40 40 0d 0a 20 4d 4f +3364,13 @@.. MO
3460: 44 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 54 DULE_SCOPE int.T
3470: 63 6c 5f 4c 73 65 74 4f 62 6a 43 6d 64 28 43 6c cl_LsetObjCmd(Cl
3480: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 ientData clientD
3490: 61 74 61 2c 0d 0a 20 09 09 09 20 20 20 20 54 63 ata,.. ... Tc
34a0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 l_Interp *interp
34b0: 2c 20 69 6e 74 20 6f 62 6a 63 2c 0d 0a 20 09 09 , int objc,.. ..
34c0: 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f . Tcl_Obj *co
34d0: 6e 73 74 20 6f 62 6a 76 5b 5d 29 3b 0d 0a 20 4d nst objv[]);.. M
34e0: 4f 44 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 ODULE_SCOPE int.
34f0: 54 63 6c 5f 4c 73 6f 72 74 4f 62 6a 43 6d 64 28 Tcl_LsortObjCmd(
3500: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e ClientData clien
3510: 74 44 61 74 61 2c 0d 0a 20 09 09 09 20 20 20 20 tData,.. ...
3520: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 Tcl_Interp *inte
3530: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 0d 0a 2b rp, int objc,..+
3540: 09 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a ... Tcl_Obj *
3550: 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d 29 3b 0d 0a const objv[]);..
3560: 2b 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 69 6e +MODULE_SCOPE in
3570: 74 09 54 63 6c 5f 4d 61 70 65 61 63 68 4f 62 6a t.Tcl_MapeachObj
3580: 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 20 63 Cmd(ClientData c
3590: 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 2b 09 09 09 lientData,..+...
35a0: 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a Tcl_Interp *
35b0: 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 interp, int objc
35c0: 2c 0d 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 4f ,.. ... Tcl_O
35d0: 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d bj *const objv[]
35e0: 29 3b 0d 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 );.. MODULE_SCOP
35f0: 45 20 54 63 6c 5f 43 6f 6d 6d 61 6e 64 20 54 63 E Tcl_Command Tc
3600: 6c 49 6e 69 74 4e 61 6d 65 73 70 61 63 65 43 6d lInitNamespaceCm
3610: 64 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e d(Tcl_Interp *in
3620: 74 65 72 70 29 3b 0d 0a 20 4d 4f 44 55 4c 45 5f terp);.. MODULE_
3630: 53 43 4f 50 45 20 69 6e 74 09 54 63 6c 4e 61 6d SCOPE int.TclNam
3640: 65 73 70 61 63 65 45 6e 73 65 6d 62 6c 65 43 6d espaceEnsembleCm
3650: 64 28 43 6c 69 65 6e 74 44 61 74 61 20 64 75 6d d(ClientData dum
3660: 6d 79 2c 0d 0a 20 09 09 09 20 20 20 20 54 63 6c my,.. ... Tcl
3670: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c _Interp *interp,
3680: 20 69 6e 74 20 6f 62 6a 63 2c 0d 0a 20 09 09 09 int objc,.. ...
3690: 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e Tcl_Obj *con
36a0: 73 74 20 6f 62 6a 76 5b 5d 29 3b 0d 0a 40 40 20 st objv[]);..@@
36b0: 2d 33 35 35 38 2c 31 30 20 2b 33 35 36 32 2c 31 -3558,10 +3562,1
36c0: 33 20 40 40 0d 0a 20 4d 4f 44 55 4c 45 5f 53 43 3 @@.. MODULE_SC
36d0: 4f 50 45 20 69 6e 74 09 54 63 6c 43 6f 6d 70 69 OPE int.TclCompi
36e0: 6c 65 4c 72 65 70 6c 61 63 65 43 6d 64 28 54 63 leLreplaceCmd(Tc
36f0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 l_Interp *interp
3700: 2c 0d 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 50 ,.. ... Tcl_P
3710: 61 72 73 65 20 2a 70 61 72 73 65 50 74 72 2c 20 arse *parsePtr,
3720: 43 6f 6d 6d 61 6e 64 20 2a 63 6d 64 50 74 72 2c Command *cmdPtr,
3730: 0d 0a 20 09 09 09 20 20 20 20 73 74 72 75 63 74 .. ... struct
3740: 20 43 6f 6d 70 69 6c 65 45 6e 76 20 2a 65 6e 76 CompileEnv *env
3750: 50 74 72 29 3b 0d 0a 20 4d 4f 44 55 4c 45 5f 53 Ptr);.. MODULE_S
3760: 43 4f 50 45 20 69 6e 74 09 54 63 6c 43 6f 6d 70 COPE int.TclComp
3770: 69 6c 65 4c 73 65 74 43 6d 64 28 54 63 6c 5f 49 ileLsetCmd(Tcl_I
3780: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0d 0a nterp *interp,..
3790: 20 09 09 09 20 20 20 20 54 63 6c 5f 50 61 72 73 ... Tcl_Pars
37a0: 65 20 2a 70 61 72 73 65 50 74 72 2c 20 43 6f 6d e *parsePtr, Com
37b0: 6d 61 6e 64 20 2a 63 6d 64 50 74 72 2c 0d 0a 2b mand *cmdPtr,..+
37c0: 09 09 09 20 20 20 20 73 74 72 75 63 74 20 43 6f ... struct Co
37d0: 6d 70 69 6c 65 45 6e 76 20 2a 65 6e 76 50 74 72 mpileEnv *envPtr
37e0: 29 3b 0d 0a 2b 4d 4f 44 55 4c 45 5f 53 43 4f 50 );..+MODULE_SCOP
37f0: 45 20 69 6e 74 09 54 63 6c 43 6f 6d 70 69 6c 65 E int.TclCompile
3800: 4d 61 70 65 61 63 68 43 6d 64 28 54 63 6c 5f 49 MapeachCmd(Tcl_I
3810: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0d 0a nterp *interp,..
3820: 2b 09 09 09 20 20 20 20 54 63 6c 5f 50 61 72 73 +... Tcl_Pars
3830: 65 20 2a 70 61 72 73 65 50 74 72 2c 20 43 6f 6d e *parsePtr, Com
3840: 6d 61 6e 64 20 2a 63 6d 64 50 74 72 2c 0d 0a 20 mand *cmdPtr,..
3850: 09 09 09 20 20 20 20 73 74 72 75 63 74 20 43 6f ... struct Co
3860: 6d 70 69 6c 65 45 6e 76 20 2a 65 6e 76 50 74 72 mpileEnv *envPtr
3870: 29 3b 0d 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 );.. MODULE_SCOP
3880: 45 20 69 6e 74 09 54 63 6c 43 6f 6d 70 69 6c 65 E int.TclCompile
3890: 4e 61 6d 65 73 70 61 63 65 55 70 76 61 72 43 6d NamespaceUpvarCm
38a0: 64 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e d(Tcl_Interp *in
38b0: 74 65 72 70 2c 0d 0a 20 09 09 09 20 20 20 20 54 terp,.. ... T
38c0: 63 6c 5f 50 61 72 73 65 20 2a 70 61 72 73 65 50 cl_Parse *parseP
38d0: 74 72 2c 20 43 6f 6d 6d 61 6e 64 20 2a 63 6d 64 tr, Command *cmd
38e0: 50 74 72 2c 0d 0a 20 09 09 09 20 20 20 20 73 74 Ptr,.. ... st
38f0: 72 75 63 74 20 43 6f 6d 70 69 6c 65 45 6e 76 20 ruct CompileEnv
3900: 2a 65 6e 76 50 74 72 29 3b 0d 0a 20 4d 4f 44 55 *envPtr);.. MODU
3910: 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 54 63 6c LE_SCOPE int.Tcl
3920: 43 6f 6d 70 69 6c 65 4e 6f 4f 70 28 54 63 6c 5f CompileNoOp(Tcl_
3930: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0d Interp *interp,.
3940: 0a 0d 0a 41 44 44 45 44 20 20 20 20 74 65 73 74 ...ADDED test
3950: 73 2f 6d 61 70 65 61 63 68 2e 74 65 73 74 0d 0a s/mapeach.test..
3960: 49 6e 64 65 78 3a 20 74 65 73 74 73 2f 6d 61 70 Index: tests/map
3970: 65 61 63 68 2e 74 65 73 74 0d 0a 3d 3d 3d 3d 3d each.test..=====
3980: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3990: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
39a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
39b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2d =============..-
39c0: 2d 2d 20 74 65 73 74 73 2f 6d 61 70 65 61 63 68 -- tests/mapeach
39d0: 2e 74 65 73 74 0d 0a 2b 2b 2b 20 74 65 73 74 73 .test..+++ tests
39e0: 2f 6d 61 70 65 61 63 68 2e 74 65 73 74 0d 0a 40 /mapeach.test..@
39f0: 40 20 2d 30 2c 30 20 2b 31 2c 34 38 35 20 40 40 @ -0,0 +1,485 @@
3a00: 0d 0a 2b 23 20 43 6f 6d 6d 61 6e 64 73 20 63 6f ..+# Commands co
3a10: 76 65 72 65 64 3a 20 20 6d 61 70 65 61 63 68 2c vered: mapeach,
3a20: 20 63 6f 6e 74 69 6e 75 65 2c 20 62 72 65 61 6b continue, break
3a30: 0d 0a 2b 23 0d 0a 2b 23 20 54 68 69 73 20 66 69 ..+#..+# This fi
3a40: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 63 6f le contains a co
3a50: 6c 6c 65 63 74 69 6f 6e 20 6f 66 20 74 65 73 74 llection of test
3a60: 73 20 66 6f 72 20 6f 6e 65 20 6f 72 20 6d 6f 72 s for one or mor
3a70: 65 20 6f 66 20 74 68 65 20 54 63 6c 0d 0a 2b 23 e of the Tcl..+#
3a80: 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6d 6d 61 6e built-in comman
3a90: 64 73 2e 20 20 53 6f 75 72 63 69 6e 67 20 74 68 ds. Sourcing th
3aa0: 69 73 20 66 69 6c 65 20 69 6e 74 6f 20 54 63 6c is file into Tcl
3ab0: 20 72 75 6e 73 20 74 68 65 20 74 65 73 74 73 20 runs the tests
3ac0: 61 6e 64 0d 0a 2b 23 20 67 65 6e 65 72 61 74 65 and..+# generate
3ad0: 73 20 6f 75 74 70 75 74 20 66 6f 72 20 65 72 72 s output for err
3ae0: 6f 72 73 2e 20 20 4e 6f 20 6f 75 74 70 75 74 20 ors. No output
3af0: 6d 65 61 6e 73 20 6e 6f 20 65 72 72 6f 72 73 20 means no errors
3b00: 77 65 72 65 20 66 6f 75 6e 64 2e 0d 0a 2b 23 0d were found...+#.
3b10: 0a 2b 23 20 43 6f 70 79 72 69 67 68 74 20 28 63 .+# Copyright (c
3b20: 29 20 31 39 39 31 2d 31 39 39 33 20 54 68 65 20 ) 1991-1993 The
3b30: 52 65 67 65 6e 74 73 20 6f 66 20 74 68 65 20 55 Regents of the U
3b40: 6e 69 76 65 72 73 69 74 79 20 6f 66 20 43 61 6c niversity of Cal
3b50: 69 66 6f 72 6e 69 61 2e 0d 0a 2b 23 20 43 6f 70 ifornia...+# Cop
3b60: 79 72 69 67 68 74 20 28 63 29 20 31 39 39 34 2d yright (c) 1994-
3b70: 31 39 39 37 20 53 75 6e 20 4d 69 63 72 6f 73 79 1997 Sun Microsy
3b80: 73 74 65 6d 73 2c 20 49 6e 63 2e 0d 0a 2b 23 20 stems, Inc...+#
3b90: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30 Copyright (c) 20
3ba0: 31 31 20 54 72 65 76 6f 72 20 44 61 76 65 6c 0d 11 Trevor Davel.
3bb0: 0a 2b 23 0d 0a 2b 23 20 53 65 65 20 74 68 65 20 .+#..+# See the
3bc0: 66 69 6c 65 20 22 6c 69 63 65 6e 73 65 2e 74 65 file "license.te
3bd0: 72 6d 73 22 20 66 6f 72 20 69 6e 66 6f 72 6d 61 rms" for informa
3be0: 74 69 6f 6e 20 6f 6e 20 75 73 61 67 65 20 61 6e tion on usage an
3bf0: 64 20 72 65 64 69 73 74 72 69 62 75 74 69 6f 6e d redistribution
3c00: 0d 0a 2b 23 20 6f 66 20 74 68 69 73 20 66 69 6c ..+# of this fil
3c10: 65 2c 20 61 6e 64 20 66 6f 72 20 61 20 44 49 53 e, and for a DIS
3c20: 43 4c 41 49 4d 45 52 20 4f 46 20 41 4c 4c 20 57 CLAIMER OF ALL W
3c30: 41 52 52 41 4e 54 49 45 53 2e 0d 0a 2b 23 0d 0a ARRANTIES...+#..
3c40: 2b 23 20 52 43 53 3a 20 40 28 23 29 20 24 49 64 +# RCS: @(#) $Id
3c50: 3a 20 24 0d 0a 2b 0d 0a 2b 69 66 20 7b 5b 6c 73 : $..+..+if {[ls
3c60: 65 61 72 63 68 20 5b 6e 61 6d 65 73 70 61 63 65 earch [namespace
3c70: 20 63 68 69 6c 64 72 65 6e 5d 20 3a 3a 74 63 6c children] ::tcl
3c80: 74 65 73 74 5d 20 3d 3d 20 2d 31 7d 20 7b 0d 0a test] == -1} {..
3c90: 2b 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 + package req
3ca0: 75 69 72 65 20 74 63 6c 74 65 73 74 0d 0a 2b 20 uire tcltest..+
3cb0: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 namespace imp
3cc0: 6f 72 74 20 2d 66 6f 72 63 65 20 3a 3a 74 63 6c ort -force ::tcl
3cd0: 74 65 73 74 3a 3a 2a 0d 0a 2b 7d 0d 0a 2b 0d 0a test::*..+}..+..
3ce0: 2b 63 61 74 63 68 20 7b 75 6e 73 65 74 20 61 7d +catch {unset a}
3cf0: 0d 0a 2b 63 61 74 63 68 20 7b 75 6e 73 65 74 20 ..+catch {unset
3d00: 69 7d 0d 0a 2b 63 61 74 63 68 20 7b 75 6e 73 65 i}..+catch {unse
3d10: 74 20 78 7d 0d 0a 2b 0d 0a 2b 23 20 2d 2d 2d 2d t x}..+..+# ----
3d20: 2d 20 4e 6f 6e 2d 63 6f 6d 70 69 6c 65 64 20 6f - Non-compiled o
3d30: 70 65 72 61 74 69 6f 6e 20 2d 2d 2d 2d 2d 2d 2d peration -------
3d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2b 0d 0a 2b ----------..+..+
3d70: 0d 0a 2b 23 20 42 61 73 69 63 20 22 6d 61 70 65 ..+# Basic "mape
3d80: 61 63 68 22 20 6f 70 65 72 61 74 69 6f 6e 20 28 ach" operation (
3d90: 6e 6f 6e 2d 63 6f 6d 70 69 6c 65 64 29 0d 0a 2b non-compiled)..+
3da0: 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 68 2d ..+test mapeach-
3db0: 31 2e 31 20 7b 62 61 73 69 63 20 6d 61 70 65 61 1.1 {basic mapea
3dc0: 63 68 20 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 ch tests} {..+
3dd0: 20 20 73 65 74 20 61 20 7b 7d 0d 0a 2b 20 20 20 set a {}..+
3de0: 20 6d 61 70 65 61 63 68 20 69 20 7b 61 20 62 20 mapeach i {a b
3df0: 63 20 64 7d 20 7b 0d 0a 2b 09 73 65 74 20 61 20 c d} {..+.set a
3e00: 5b 63 6f 6e 63 61 74 20 24 61 20 24 69 5d 0d 0a [concat $a $i]..
3e10: 2b 20 20 20 20 7d 0d 0a 2b 7d 20 7b 61 20 7b 61 + }..+} {a {a
3e20: 20 62 7d 20 7b 61 20 62 20 63 7d 20 7b 61 20 62 b} {a b c} {a b
3e30: 20 63 20 64 7d 7d 0d 0a 2b 74 65 73 74 20 6d 61 c d}}..+test ma
3e40: 70 65 61 63 68 2d 31 2e 32 20 7b 62 61 73 69 63 peach-1.2 {basic
3e50: 20 6d 61 70 65 61 63 68 20 74 65 73 74 73 7d 20 mapeach tests}
3e60: 7b 0d 0a 2b 20 20 20 20 6d 61 70 65 61 63 68 20 {..+ mapeach
3e70: 69 20 7b 61 20 62 20 7b 7b 63 20 64 7d 20 65 7d i {a b {{c d} e}
3e80: 20 7b 31 32 33 20 7b 7b 78 7d 7d 7d 7d 20 7b 0d {123 {{x}}}} {.
3e90: 0a 2b 09 73 65 74 20 69 0d 0a 2b 20 20 20 20 7d .+.set i..+ }
3ea0: 0d 0a 2b 7d 20 7b 61 20 62 20 7b 7b 63 20 64 7d ..+} {a b {{c d}
3eb0: 20 65 7d 20 7b 31 32 33 20 7b 7b 78 7d 7d 7d 7d e} {123 {{x}}}}
3ec0: 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 68 2d ..+test mapeach-
3ed0: 31 2e 32 61 20 7b 62 61 73 69 63 20 6d 61 70 65 1.2a {basic mape
3ee0: 61 63 68 20 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 ach tests} {..+
3ef0: 20 20 20 6d 61 70 65 61 63 68 20 69 20 7b 61 20 mapeach i {a
3f00: 62 20 7b 7b 63 20 64 7d 20 65 7d 20 7b 31 32 33 b {{c d} e} {123
3f10: 20 7b 7b 78 7d 7d 7d 7d 20 7b 0d 0a 2b 20 20 72 {{x}}}} {..+ r
3f20: 65 74 75 72 6e 20 2d 6c 65 76 65 6c 20 30 20 24 eturn -level 0 $
3f30: 69 0d 0a 2b 20 20 20 20 7d 0d 0a 2b 7d 20 7b 61 i..+ }..+} {a
3f40: 20 62 20 7b 7b 63 20 64 7d 20 65 7d 20 7b 31 32 b {{c d} e} {12
3f50: 33 20 7b 7b 78 7d 7d 7d 7d 0d 0a 2b 74 65 73 74 3 {{x}}}}..+test
3f60: 20 6d 61 70 65 61 63 68 2d 31 2e 33 20 7b 62 61 mapeach-1.3 {ba
3f70: 73 69 63 20 6d 61 70 65 61 63 68 20 74 65 73 74 sic mapeach test
3f80: 73 7d 20 7b 63 61 74 63 68 20 7b 6d 61 70 65 61 s} {catch {mapea
3f90: 63 68 7d 20 6d 73 67 7d 20 31 0d 0a 2b 74 65 73 ch} msg} 1..+tes
3fa0: 74 20 6d 61 70 65 61 63 68 2d 31 2e 34 20 7b 62 t mapeach-1.4 {b
3fb0: 61 73 69 63 20 6d 61 70 65 61 63 68 20 74 65 73 asic mapeach tes
3fc0: 74 73 7d 20 7b 0d 0a 2b 20 20 20 20 63 61 74 63 ts} {..+ catc
3fd0: 68 20 7b 6d 61 70 65 61 63 68 7d 20 6d 73 67 0d h {mapeach} msg.
3fe0: 0a 2b 20 20 20 20 73 65 74 20 6d 73 67 0d 0a 2b .+ set msg..+
3ff0: 7d 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a } {wrong # args:
4000: 20 73 68 6f 75 6c 64 20 62 65 20 22 6d 61 70 65 should be "mape
4010: 61 63 68 20 76 61 72 4c 69 73 74 20 6c 69 73 74 ach varList list
4020: 20 3f 76 61 72 4c 69 73 74 20 6c 69 73 74 20 2e ?varList list .
4030: 2e 2e 3f 20 63 6f 6d 6d 61 6e 64 22 7d 0d 0a 2b ..? command"}..+
4040: 74 65 73 74 20 6d 61 70 65 61 63 68 2d 31 2e 35 test mapeach-1.5
4050: 20 7b 62 61 73 69 63 20 6d 61 70 65 61 63 68 20 {basic mapeach
4060: 74 65 73 74 73 7d 20 7b 63 61 74 63 68 20 7b 6d tests} {catch {m
4070: 61 70 65 61 63 68 20 69 7d 20 6d 73 67 7d 20 31 apeach i} msg} 1
4080: 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 68 2d ..+test mapeach-
4090: 31 2e 36 20 7b 62 61 73 69 63 20 6d 61 70 65 61 1.6 {basic mapea
40a0: 63 68 20 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 ch tests} {..+
40b0: 20 20 63 61 74 63 68 20 7b 6d 61 70 65 61 63 68 catch {mapeach
40c0: 20 69 7d 20 6d 73 67 0d 0a 2b 20 20 20 20 73 65 i} msg..+ se
40d0: 74 20 6d 73 67 0d 0a 2b 7d 20 7b 77 72 6f 6e 67 t msg..+} {wrong
40e0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 # args: should
40f0: 62 65 20 22 6d 61 70 65 61 63 68 20 76 61 72 4c be "mapeach varL
4100: 69 73 74 20 6c 69 73 74 20 3f 76 61 72 4c 69 73 ist list ?varLis
4110: 74 20 6c 69 73 74 20 2e 2e 2e 3f 20 63 6f 6d 6d t list ...? comm
4120: 61 6e 64 22 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 and"}..+test map
4130: 65 61 63 68 2d 31 2e 37 20 7b 62 61 73 69 63 20 each-1.7 {basic
4140: 6d 61 70 65 61 63 68 20 74 65 73 74 73 7d 20 7b mapeach tests} {
4150: 63 61 74 63 68 20 7b 6d 61 70 65 61 63 68 20 69 catch {mapeach i
4160: 20 6a 7d 20 6d 73 67 7d 20 31 0d 0a 2b 74 65 73 j} msg} 1..+tes
4170: 74 20 6d 61 70 65 61 63 68 2d 31 2e 38 20 7b 62 t mapeach-1.8 {b
4180: 61 73 69 63 20 6d 61 70 65 61 63 68 20 74 65 73 asic mapeach tes
4190: 74 73 7d 20 7b 0d 0a 2b 20 20 20 20 63 61 74 63 ts} {..+ catc
41a0: 68 20 7b 6d 61 70 65 61 63 68 20 69 20 6a 7d 20 h {mapeach i j}
41b0: 6d 73 67 0d 0a 2b 20 20 20 20 73 65 74 20 6d 73 msg..+ set ms
41c0: 67 0d 0a 2b 7d 20 7b 77 72 6f 6e 67 20 23 20 61 g..+} {wrong # a
41d0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 rgs: should be "
41e0: 6d 61 70 65 61 63 68 20 76 61 72 4c 69 73 74 20 mapeach varList
41f0: 6c 69 73 74 20 3f 76 61 72 4c 69 73 74 20 6c 69 list ?varList li
4200: 73 74 20 2e 2e 2e 3f 20 63 6f 6d 6d 61 6e 64 22 st ...? command"
4210: 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 68 }..+test mapeach
4220: 2d 31 2e 39 20 7b 62 61 73 69 63 20 6d 61 70 65 -1.9 {basic mape
4230: 61 63 68 20 74 65 73 74 73 7d 20 7b 63 61 74 63 ach tests} {catc
4240: 68 20 7b 6d 61 70 65 61 63 68 20 69 20 6a 20 6b h {mapeach i j k
4250: 20 6c 7d 20 6d 73 67 7d 20 31 0d 0a 2b 74 65 73 l} msg} 1..+tes
4260: 74 20 6d 61 70 65 61 63 68 2d 31 2e 31 30 20 7b t mapeach-1.10 {
4270: 62 61 73 69 63 20 6d 61 70 65 61 63 68 20 74 65 basic mapeach te
4280: 73 74 73 7d 20 7b 0d 0a 2b 20 20 20 20 63 61 74 sts} {..+ cat
4290: 63 68 20 7b 6d 61 70 65 61 63 68 20 69 20 6a 20 ch {mapeach i j
42a0: 6b 20 6c 7d 20 6d 73 67 0d 0a 2b 20 20 20 20 73 k l} msg..+ s
42b0: 65 74 20 6d 73 67 0d 0a 2b 7d 20 7b 77 72 6f 6e et msg..+} {wron
42c0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 g # args: should
42d0: 20 62 65 20 22 6d 61 70 65 61 63 68 20 76 61 72 be "mapeach var
42e0: 4c 69 73 74 20 6c 69 73 74 20 3f 76 61 72 4c 69 List list ?varLi
42f0: 73 74 20 6c 69 73 74 20 2e 2e 2e 3f 20 63 6f 6d st list ...? com
4300: 6d 61 6e 64 22 7d 0d 0a 2b 74 65 73 74 20 6d 61 mand"}..+test ma
4310: 70 65 61 63 68 2d 31 2e 31 31 20 7b 62 61 73 69 peach-1.11 {basi
4320: 63 20 6d 61 70 65 61 63 68 20 74 65 73 74 73 7d c mapeach tests}
4330: 20 7b 0d 0a 2b 20 20 20 20 6d 61 70 65 61 63 68 {..+ mapeach
4340: 20 69 20 7b 7d 20 7b 0d 0a 2b 20 20 20 20 20 20 i {} {..+
4350: 73 65 74 20 69 0d 0a 2b 20 20 20 20 7d 0d 0a 2b set i..+ }..+
4360: 7d 20 7b 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 65 } {}..+test mape
4370: 61 63 68 2d 31 2e 31 32 20 7b 62 61 73 69 63 20 ach-1.12 {basic
4380: 6d 61 70 65 61 63 68 20 74 65 73 74 73 7d 20 7b mapeach tests} {
4390: 0d 0a 2b 20 20 20 20 6d 61 70 65 61 63 68 20 69 ..+ mapeach i
43a0: 20 7b 7d 20 7b 0d 0a 2b 20 20 20 20 20 20 72 65 {} {..+ re
43b0: 74 75 72 6e 20 2d 6c 65 76 65 6c 20 30 20 78 0d turn -level 0 x.
43c0: 0a 2b 20 20 20 20 7d 0d 0a 2b 7d 20 7b 7d 0d 0a .+ }..+} {}..
43d0: 2b 74 65 73 74 20 6d 61 70 65 61 63 68 2d 31 2e +test mapeach-1.
43e0: 31 33 20 7b 6d 61 70 65 61 63 68 20 65 72 72 6f 13 {mapeach erro
43f0: 72 73 7d 20 7b 0d 0a 2b 20 20 20 20 6c 69 73 74 rs} {..+ list
4400: 20 5b 63 61 74 63 68 20 7b 6d 61 70 65 61 63 68 [catch {mapeach
4410: 20 7b 7b 61 7d 7b 62 7d 7d 20 7b 31 20 32 20 33 {{a}{b}} {1 2 3
4420: 7d 20 7b 7d 7d 20 6d 73 67 5d 20 24 6d 73 67 0d } {}} msg] $msg.
4430: 0a 2b 7d 20 7b 31 20 7b 6c 69 73 74 20 65 6c 65 .+} {1 {list ele
4440: 6d 65 6e 74 20 69 6e 20 62 72 61 63 65 73 20 66 ment in braces f
4450: 6f 6c 6c 6f 77 65 64 20 62 79 20 22 7b 62 7d 22 ollowed by "{b}"
4460: 20 69 6e 73 74 65 61 64 20 6f 66 20 73 70 61 63 instead of spac
4470: 65 7d 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 e}}..+test mapea
4480: 63 68 2d 31 2e 31 34 20 7b 6d 61 70 65 61 63 68 ch-1.14 {mapeach
4490: 20 65 72 72 6f 72 73 7d 20 7b 0d 0a 2b 20 20 20 errors} {..+
44a0: 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 6d 61 list [catch {ma
44b0: 70 65 61 63 68 20 61 20 7b 7b 31 20 32 7d 33 7d peach a {{1 2}3}
44c0: 20 7b 7d 7d 20 6d 73 67 5d 20 24 6d 73 67 0d 0a {}} msg] $msg..
44d0: 2b 7d 20 7b 31 20 7b 6c 69 73 74 20 65 6c 65 6d +} {1 {list elem
44e0: 65 6e 74 20 69 6e 20 62 72 61 63 65 73 20 66 6f ent in braces fo
44f0: 6c 6c 6f 77 65 64 20 62 79 20 22 33 22 20 69 6e llowed by "3" in
4500: 73 74 65 61 64 20 6f 66 20 73 70 61 63 65 7d 7d stead of space}}
4510: 0d 0a 2b 63 61 74 63 68 20 7b 75 6e 73 65 74 20 ..+catch {unset
4520: 61 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 a}..+test mapeac
4530: 68 2d 31 2e 31 35 20 7b 6d 61 70 65 61 63 68 20 h-1.15 {mapeach
4540: 65 72 72 6f 72 73 7d 20 7b 0d 0a 2b 20 20 20 20 errors} {..+
4550: 63 61 74 63 68 20 7b 75 6e 73 65 74 20 61 7d 0d catch {unset a}.
4560: 0a 2b 20 20 20 20 73 65 74 20 61 28 30 29 20 34 .+ set a(0) 4
4570: 34 0d 0a 2b 20 20 20 20 6c 69 73 74 20 5b 63 61 4..+ list [ca
4580: 74 63 68 20 7b 6d 61 70 65 61 63 68 20 61 20 7b tch {mapeach a {
4590: 31 20 32 20 33 7d 20 7b 7d 7d 20 6d 73 67 20 6f 1 2 3} {}} msg o
45a0: 5d 20 24 6d 73 67 20 24 3a 3a 65 72 72 6f 72 49 ] $msg $::errorI
45b0: 6e 66 6f 0d 0a 2b 7d 20 7b 31 20 7b 63 61 6e 27 nfo..+} {1 {can'
45c0: 74 20 73 65 74 20 22 61 22 3a 20 76 61 72 69 61 t set "a": varia
45d0: 62 6c 65 20 69 73 20 61 72 72 61 79 7d 20 7b 63 ble is array} {c
45e0: 61 6e 27 74 20 73 65 74 20 22 61 22 3a 20 76 61 an't set "a": va
45f0: 72 69 61 62 6c 65 20 69 73 20 61 72 72 61 79 0d riable is array.
4600: 0a 2b 20 20 20 20 28 73 65 74 74 69 6e 67 20 66 .+ (setting f
4610: 6f 72 65 61 63 68 20 6c 6f 6f 70 20 76 61 72 69 oreach loop vari
4620: 61 62 6c 65 20 22 61 22 29 0d 0a 2b 20 20 20 20 able "a")..+
4630: 69 6e 76 6f 6b 65 64 20 66 72 6f 6d 20 77 69 74 invoked from wit
4640: 68 69 6e 0d 0a 2b 22 6d 61 70 65 61 63 68 20 61 hin..+"mapeach a
4650: 20 7b 31 20 32 20 33 7d 20 7b 7d 22 7d 7d 0d 0a {1 2 3} {}"}}..
4660: 2b 74 65 73 74 20 6d 61 70 65 61 63 68 2d 31 2e +test mapeach-1.
4670: 31 36 20 7b 6d 61 70 65 61 63 68 20 65 72 72 6f 16 {mapeach erro
4680: 72 73 7d 20 7b 0d 0a 2b 20 20 20 20 6c 69 73 74 rs} {..+ list
4690: 20 5b 63 61 74 63 68 20 7b 6d 61 70 65 61 63 68 [catch {mapeach
46a0: 20 7b 7d 20 7b 7d 20 7b 7d 7d 20 6d 73 67 5d 20 {} {} {}} msg]
46b0: 24 6d 73 67 0d 0a 2b 7d 20 7b 31 20 7b 66 6f 72 $msg..+} {1 {for
46c0: 65 61 63 68 20 76 61 72 6c 69 73 74 20 69 73 20 each varlist is
46d0: 65 6d 70 74 79 7d 7d 0d 0a 2b 63 61 74 63 68 20 empty}}..+catch
46e0: 7b 75 6e 73 65 74 20 61 7d 0d 0a 2b 0d 0a 2b 0d {unset a}..+..+.
46f0: 0a 2b 23 20 50 61 72 61 6c 6c 65 6c 20 22 6d 61 .+# Parallel "ma
4700: 70 65 61 63 68 22 20 6f 70 65 72 61 74 69 6f 6e peach" operation
4710: 20 28 6e 6f 6e 2d 63 6f 6d 70 69 6c 65 64 29 0d (non-compiled).
4720: 0a 2b 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 .+..+test mapeac
4730: 68 2d 32 2e 31 20 7b 70 61 72 61 6c 6c 65 6c 20 h-2.1 {parallel
4740: 6d 61 70 65 61 63 68 20 74 65 73 74 73 7d 20 7b mapeach tests} {
4750: 0d 0a 2b 20 20 20 20 6d 61 70 65 61 63 68 20 7b ..+ mapeach {
4760: 61 20 62 7d 20 7b 31 20 32 20 33 20 34 7d 20 7b a b} {1 2 3 4} {
4770: 0d 0a 2b 09 6c 69 73 74 20 24 62 20 24 61 0d 0a ..+.list $b $a..
4780: 2b 20 20 20 20 7d 0d 0a 2b 7d 20 7b 7b 32 20 31 + }..+} {{2 1
4790: 7d 20 7b 34 20 33 7d 7d 0d 0a 2b 74 65 73 74 20 } {4 3}}..+test
47a0: 6d 61 70 65 61 63 68 2d 32 2e 32 20 7b 70 61 72 mapeach-2.2 {par
47b0: 61 6c 6c 65 6c 20 6d 61 70 65 61 63 68 20 74 65 allel mapeach te
47c0: 73 74 73 7d 20 7b 0d 0a 2b 20 20 20 20 6d 61 70 sts} {..+ map
47d0: 65 61 63 68 20 7b 61 20 62 7d 20 7b 31 20 32 20 each {a b} {1 2
47e0: 33 20 34 20 35 7d 20 7b 0d 0a 2b 09 6c 69 73 74 3 4 5} {..+.list
47f0: 20 24 62 20 24 61 0d 0a 2b 20 20 20 20 7d 0d 0a $b $a..+ }..
4800: 2b 7d 20 7b 7b 32 20 31 7d 20 7b 34 20 33 7d 20 +} {{2 1} {4 3}
4810: 7b 7b 7d 20 35 7d 7d 0d 0a 2b 74 65 73 74 20 6d {{} 5}}..+test m
4820: 61 70 65 61 63 68 2d 32 2e 33 20 7b 70 61 72 61 apeach-2.3 {para
4830: 6c 6c 65 6c 20 6d 61 70 65 61 63 68 20 74 65 73 llel mapeach tes
4840: 74 73 7d 20 7b 0d 0a 2b 20 20 20 20 6d 61 70 65 ts} {..+ mape
4850: 61 63 68 20 61 20 7b 31 20 32 20 33 7d 20 62 20 ach a {1 2 3} b
4860: 7b 34 20 35 20 36 7d 20 7b 0d 0a 2b 09 6c 69 73 {4 5 6} {..+.lis
4870: 74 20 24 62 20 24 61 0d 0a 2b 20 20 20 20 7d 0d t $b $a..+ }.
4880: 0a 2b 7d 20 7b 7b 34 20 31 7d 20 7b 35 20 32 7d .+} {{4 1} {5 2}
4890: 20 7b 36 20 33 7d 7d 0d 0a 2b 74 65 73 74 20 6d {6 3}}..+test m
48a0: 61 70 65 61 63 68 2d 32 2e 34 20 7b 70 61 72 61 apeach-2.4 {para
48b0: 6c 6c 65 6c 20 6d 61 70 65 61 63 68 20 74 65 73 llel mapeach tes
48c0: 74 73 7d 20 7b 0d 0a 2b 20 20 20 20 6d 61 70 65 ts} {..+ mape
48d0: 61 63 68 20 61 20 7b 31 20 32 20 33 7d 20 62 20 ach a {1 2 3} b
48e0: 7b 34 20 35 20 36 20 37 20 38 7d 20 7b 0d 0a 2b {4 5 6 7 8} {..+
48f0: 09 6c 69 73 74 20 24 62 20 24 61 0d 0a 2b 20 20 .list $b $a..+
4900: 20 20 7d 0d 0a 2b 7d 20 7b 7b 34 20 31 7d 20 7b }..+} {{4 1} {
4910: 35 20 32 7d 20 7b 36 20 33 7d 20 7b 37 20 7b 7d 5 2} {6 3} {7 {}
4920: 7d 20 7b 38 20 7b 7d 7d 7d 0d 0a 2b 74 65 73 74 } {8 {}}}..+test
4930: 20 6d 61 70 65 61 63 68 2d 32 2e 35 20 7b 70 61 mapeach-2.5 {pa
4940: 72 61 6c 6c 65 6c 20 6d 61 70 65 61 63 68 20 74 rallel mapeach t
4950: 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 20 20 6d 61 ests} {..+ ma
4960: 70 65 61 63 68 20 7b 61 20 62 7d 20 7b 61 20 62 peach {a b} {a b
4970: 20 41 20 42 20 61 61 20 62 62 7d 20 63 20 7b 63 A B aa bb} c {c
4980: 20 43 20 63 63 20 43 43 7d 20 7b 0d 0a 2b 09 6c C cc CC} {..+.l
4990: 69 73 74 20 24 61 20 24 62 20 24 63 0d 0a 2b 20 ist $a $b $c..+
49a0: 20 20 20 7d 0d 0a 2b 7d 20 7b 7b 61 20 62 20 63 }..+} {{a b c
49b0: 7d 20 7b 41 20 42 20 43 7d 20 7b 61 61 20 62 62 } {A B C} {aa bb
49c0: 20 63 63 7d 20 7b 7b 7d 20 7b 7d 20 43 43 7d 7d cc} {{} {} CC}}
49d0: 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 68 2d ..+test mapeach-
49e0: 32 2e 36 20 7b 70 61 72 61 6c 6c 65 6c 20 6d 61 2.6 {parallel ma
49f0: 70 65 61 63 68 20 74 65 73 74 73 7d 20 7b 0d 0a peach tests} {..
4a00: 2b 20 20 20 20 6d 61 70 65 61 63 68 20 61 20 7b + mapeach a {
4a10: 31 20 32 20 33 7d 20 62 20 7b 31 20 32 20 33 7d 1 2 3} b {1 2 3}
4a20: 20 63 20 7b 31 20 32 20 33 7d 20 64 20 7b 31 20 c {1 2 3} d {1
4a30: 32 20 33 7d 20 65 20 7b 31 20 32 20 33 7d 20 7b 2 3} e {1 2 3} {
4a40: 0d 0a 2b 09 6c 69 73 74 20 24 61 24 62 24 63 24 ..+.list $a$b$c$
4a50: 64 24 65 0d 0a 2b 20 20 20 20 7d 0d 0a 2b 7d 20 d$e..+ }..+}
4a60: 7b 31 31 31 31 31 20 32 32 32 32 32 20 33 33 33 {11111 22222 333
4a70: 33 33 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 33}..+test mapea
4a80: 63 68 2d 32 2e 37 20 7b 70 61 72 61 6c 6c 65 6c ch-2.7 {parallel
4a90: 20 6d 61 70 65 61 63 68 20 74 65 73 74 73 7d 20 mapeach tests}
4aa0: 7b 0d 0a 2b 20 20 20 20 6d 61 70 65 61 63 68 20 {..+ mapeach
4ab0: 61 20 7b 7d 20 62 20 7b 31 20 32 20 33 7d 20 63 a {} b {1 2 3} c
4ac0: 20 7b 31 20 32 7d 20 64 20 7b 31 20 32 20 33 20 {1 2} d {1 2 3
4ad0: 34 7d 20 65 20 7b 7b 31 20 32 7d 7d 20 7b 0d 0a 4} e {{1 2}} {..
4ae0: 2b 09 73 65 74 20 78 20 24 61 24 62 24 63 24 64 +.set x $a$b$c$d
4af0: 24 65 0d 0a 2b 20 20 20 20 7d 0d 0a 2b 7d 20 7b $e..+ }..+} {
4b00: 7b 31 31 31 31 20 32 7d 20 32 32 32 20 33 33 20 {1111 2} 222 33
4b10: 34 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 4}..+test mapeac
4b20: 68 2d 32 2e 38 20 7b 70 61 72 61 6c 6c 65 6c 20 h-2.8 {parallel
4b30: 6d 61 70 65 61 63 68 20 74 65 73 74 73 7d 20 7b mapeach tests} {
4b40: 0d 0a 2b 20 20 20 20 6d 61 70 65 61 63 68 20 61 ..+ mapeach a
4b50: 20 7b 7d 20 62 20 7b 31 20 32 20 33 7d 20 63 20 {} b {1 2 3} c
4b60: 7b 31 20 32 7d 20 64 20 7b 31 20 32 20 33 20 34 {1 2} d {1 2 3 4
4b70: 7d 20 65 20 7b 7b 31 20 32 7d 7d 20 7b 0d 0a 2b } e {{1 2}} {..+
4b80: 09 6a 6f 69 6e 20 5b 6c 69 73 74 20 24 61 20 24 .join [list $a $
4b90: 62 20 24 63 20 24 64 20 24 65 5d 20 2e 0d 0a 2b b $c $d $e] ...+
4ba0: 20 20 20 20 7d 0d 0a 2b 7d 20 7b 7b 2e 31 2e 31 }..+} {{.1.1
4bb0: 2e 31 2e 31 20 32 7d 20 2e 32 2e 32 2e 32 2e 20 .1.1 2} .2.2.2.
4bc0: 2e 33 2e 2e 33 2e 20 2e 2e 2e 34 2e 7d 0d 0a 2b .3..3. ...4.}..+
4bd0: 74 65 73 74 20 6d 61 70 65 61 63 68 2d 32 2e 39 test mapeach-2.9
4be0: 20 7b 6d 61 70 65 61 63 68 20 6f 6e 6c 79 20 73 {mapeach only s
4bf0: 65 74 73 20 76 61 72 73 20 69 66 20 72 65 70 65 ets vars if repe
4c00: 61 74 69 6e 67 20 6c 6f 6f 70 7d 20 7b 0d 0a 2b ating loop} {..+
4c10: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c namespace eval
4c20: 20 3a 3a 6d 61 70 65 61 63 68 5f 74 65 73 74 20 ::mapeach_test
4c30: 7b 0d 0a 2b 20 20 20 20 73 65 74 20 72 67 62 20 {..+ set rgb
4c40: 7b 36 35 35 33 35 20 30 20 30 7d 0d 0a 2b 20 20 {65535 0 0}..+
4c50: 20 20 6d 61 70 65 61 63 68 20 7b 72 20 67 20 62 mapeach {r g b
4c60: 7d 20 5b 73 65 74 20 72 67 62 5d 20 7b 7d 0d 0a } [set rgb] {}..
4c70: 2b 20 20 20 20 73 65 74 20 3a 3a 78 20 22 72 3d + set ::x "r=
4c80: 24 72 2c 20 67 3d 24 67 2c 20 62 3d 24 62 22 0d $r, g=$g, b=$b".
4c90: 0a 2b 20 20 7d 0d 0a 2b 20 20 6e 61 6d 65 73 70 .+ }..+ namesp
4ca0: 61 63 65 20 64 65 6c 65 74 65 20 3a 3a 6d 61 70 ace delete ::map
4cb0: 65 61 63 68 5f 74 65 73 74 0d 0a 2b 20 20 73 65 each_test..+ se
4cc0: 74 20 78 0d 0a 2b 7d 20 7b 72 3d 36 35 35 33 35 t x..+} {r=65535
4cd0: 2c 20 67 3d 30 2c 20 62 3d 30 7d 0d 0a 2b 74 65 , g=0, b=0}..+te
4ce0: 73 74 20 6d 61 70 65 61 63 68 2d 32 2e 31 30 20 st mapeach-2.10
4cf0: 7b 6d 61 70 65 61 63 68 20 6f 6e 6c 79 20 73 75 {mapeach only su
4d00: 70 70 6f 72 74 73 20 6c 6f 63 61 6c 20 73 63 61 pports local sca
4d10: 6c 61 72 20 76 61 72 69 61 62 6c 65 73 7d 20 7b lar variables} {
4d20: 0d 0a 2b 20 20 63 61 74 63 68 20 7b 20 75 6e 73 ..+ catch { uns
4d30: 65 74 20 61 20 7d 0d 0a 2b 20 20 6d 61 70 65 61 et a }..+ mapea
4d40: 63 68 20 7b 61 28 33 29 7d 20 7b 31 20 32 20 33 ch {a(3)} {1 2 3
4d50: 20 34 7d 20 7b 73 65 74 20 7b 61 28 33 29 7d 7d 4} {set {a(3)}}
4d60: 0d 0a 2b 7d 20 7b 31 20 32 20 33 20 34 7d 0d 0a ..+} {1 2 3 4}..
4d70: 2b 63 61 74 63 68 20 7b 20 75 6e 73 65 74 20 61 +catch { unset a
4d80: 20 7d 0d 0a 2b 0d 0a 2b 0d 0a 2b 23 20 22 6d 61 }..+..+..+# "ma
4d90: 70 65 61 63 68 22 20 77 69 74 68 20 22 63 6f 6e peach" with "con
4da0: 74 69 6e 75 65 22 20 61 6e 64 20 22 62 72 65 61 tinue" and "brea
4db0: 6b 22 20 28 6e 6f 6e 2d 63 6f 6d 70 69 6c 65 64 k" (non-compiled
4dc0: 29 0d 0a 2b 0d 0a 2b 74 65 73 74 20 6d 61 70 65 )..+..+test mape
4dd0: 61 63 68 2d 33 2e 31 20 7b 63 6f 6e 74 69 6e 75 ach-3.1 {continu
4de0: 65 20 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 20 e tests} {..+
4df0: 20 6d 61 70 65 61 63 68 20 69 20 7b 61 20 62 20 mapeach i {a b
4e00: 63 20 64 7d 20 7b 0d 0a 2b 09 69 66 20 7b 5b 73 c d} {..+.if {[s
4e10: 74 72 69 6e 67 20 63 6f 6d 70 61 72 65 20 24 69 tring compare $i
4e20: 20 22 62 22 5d 20 3d 3d 20 30 7d 20 63 6f 6e 74 "b"] == 0} cont
4e30: 69 6e 75 65 0d 0a 2b 09 73 65 74 20 69 0d 0a 2b inue..+.set i..+
4e40: 20 20 20 20 7d 0d 0a 2b 7d 20 7b 61 20 63 20 64 }..+} {a c d
4e50: 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 68 }..+test mapeach
4e60: 2d 33 2e 32 20 7b 63 6f 6e 74 69 6e 75 65 20 74 -3.2 {continue t
4e70: 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 20 20 73 65 ests} {..+ se
4e80: 74 20 78 20 30 0d 0a 2b 20 20 20 20 6c 69 73 74 t x 0..+ list
4e90: 20 5b 6d 61 70 65 61 63 68 20 69 20 7b 61 20 62 [mapeach i {a b
4ea0: 20 63 20 64 7d 20 7b 0d 0a 2b 20 20 20 20 09 69 c d} {..+ .i
4eb0: 6e 63 72 20 78 0d 0a 2b 20 20 20 20 09 69 66 20 ncr x..+ .if
4ec0: 7b 5b 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 65 {[string compare
4ed0: 20 24 69 20 22 62 22 5d 20 21 3d 20 30 7d 20 63 $i "b"] != 0} c
4ee0: 6f 6e 74 69 6e 75 65 0d 0a 2b 20 20 20 20 09 73 ontinue..+ .s
4ef0: 65 74 20 69 0d 0a 2b 20 20 20 20 7d 5d 20 24 78 et i..+ }] $x
4f00: 0d 0a 2b 7d 20 7b 62 20 34 7d 0d 0a 2b 74 65 73 ..+} {b 4}..+tes
4f10: 74 20 6d 61 70 65 61 63 68 2d 33 2e 33 20 7b 62 t mapeach-3.3 {b
4f20: 72 65 61 6b 20 74 65 73 74 73 7d 20 7b 0d 0a 2b reak tests} {..+
4f30: 20 20 20 20 73 65 74 20 78 20 30 0d 0a 2b 20 20 set x 0..+
4f40: 20 20 6c 69 73 74 20 5b 6d 61 70 65 61 63 68 20 list [mapeach
4f50: 69 20 7b 61 20 62 20 63 20 64 7d 20 7b 0d 0a 2b i {a b c d} {..+
4f60: 20 20 20 20 20 20 69 6e 63 72 20 78 0d 0a 2b 20 incr x..+
4f70: 20 20 20 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 .if {[string
4f80: 63 6f 6d 70 61 72 65 20 24 69 20 22 63 22 5d 20 compare $i "c"]
4f90: 3d 3d 20 30 7d 20 62 72 65 61 6b 0d 0a 2b 20 20 == 0} break..+
4fa0: 20 20 09 73 65 74 20 69 0d 0a 2b 20 20 20 20 7d .set i..+ }
4fb0: 5d 20 24 78 0d 0a 2b 7d 20 7b 7b 61 20 62 7d 20 ] $x..+} {{a b}
4fc0: 33 7d 0d 0a 2b 23 20 43 68 65 63 6b 20 66 6f 72 3}..+# Check for
4fd0: 20 62 75 67 20 73 69 6d 69 6c 61 72 20 74 6f 20 bug similar to
4fe0: 23 34 30 36 37 30 39 0d 0a 2b 74 65 73 74 20 6d #406709..+test m
4ff0: 61 70 65 61 63 68 2d 33 2e 34 20 7b 62 72 65 61 apeach-3.4 {brea
5000: 6b 20 74 65 73 74 73 7d 20 7b 0d 0a 2b 09 73 65 k tests} {..+.se
5010: 74 20 61 20 31 0d 0a 2b 09 6d 61 70 65 61 63 68 t a 1..+.mapeach
5020: 20 62 20 62 20 7b 6c 69 73 74 20 5b 63 6f 6e 63 b b {list [conc
5030: 61 74 20 61 3b 20 62 72 65 61 6b 5d 3b 20 69 6e at a; break]; in
5040: 63 72 20 61 7d 0d 0a 2b 09 69 6e 63 72 20 61 0d cr a}..+.incr a.
5050: 0a 2b 7d 20 7b 32 7d 0d 0a 2b 0d 0a 2b 0d 0a 2b .+} {2}..+..+..+
5060: 23 20 2d 2d 2d 2d 2d 20 43 6f 6d 70 69 6c 65 64 # ----- Compiled
5070: 20 6f 70 65 72 61 74 69 6f 6e 20 2d 2d 2d 2d 2d operation -----
5080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
50a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
50b0: 2d 0d 0a 2b 0d 0a 2b 23 20 42 61 73 69 63 20 22 -..+..+# Basic "
50c0: 6d 61 70 65 61 63 68 22 20 6f 70 65 72 61 74 69 mapeach" operati
50d0: 6f 6e 20 28 63 6f 6d 70 69 6c 65 64 29 0d 0a 2b on (compiled)..+
50e0: 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 68 2d ..+test mapeach-
50f0: 34 2e 31 20 7b 62 61 73 69 63 20 6d 61 70 65 61 4.1 {basic mapea
5100: 63 68 20 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 ch tests} {..+
5110: 61 70 70 6c 79 20 7b 7b 7d 20 7b 0d 0a 2b 20 20 apply {{} {..+
5120: 20 20 73 65 74 20 61 20 7b 7d 0d 0a 2b 20 20 20 set a {}..+
5130: 20 6d 61 70 65 61 63 68 20 69 20 7b 61 20 62 20 mapeach i {a b
5140: 63 20 64 7d 20 7b 0d 0a 2b 20 20 20 20 20 20 73 c d} {..+ s
5150: 65 74 20 61 20 5b 63 6f 6e 63 61 74 20 24 61 20 et a [concat $a
5160: 24 69 5d 0d 0a 2b 20 20 20 20 7d 0d 0a 2b 20 20 $i]..+ }..+
5170: 7d 7d 0d 0a 2b 7d 20 7b 61 20 7b 61 20 62 7d 20 }}..+} {a {a b}
5180: 7b 61 20 62 20 63 7d 20 7b 61 20 62 20 63 20 64 {a b c} {a b c d
5190: 7d 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 }}..+test mapeac
51a0: 68 2d 34 2e 32 20 7b 62 61 73 69 63 20 6d 61 70 h-4.2 {basic map
51b0: 65 61 63 68 20 74 65 73 74 73 7d 20 7b 0d 0a 2b each tests} {..+
51c0: 20 20 61 70 70 6c 79 20 7b 7b 7d 20 7b 0d 0a 2b apply {{} {..+
51d0: 20 20 20 20 6d 61 70 65 61 63 68 20 69 20 7b 61 mapeach i {a
51e0: 20 62 20 7b 7b 63 20 64 7d 20 65 7d 20 7b 31 32 b {{c d} e} {12
51f0: 33 20 7b 7b 78 7d 7d 7d 7d 20 7b 0d 0a 2b 20 20 3 {{x}}}} {..+
5200: 20 20 20 20 73 65 74 20 69 0d 0a 2b 20 20 20 20 set i..+
5210: 7d 0d 0a 2b 20 20 7d 7d 0d 0a 2b 7d 20 7b 61 20 }..+ }}..+} {a
5220: 62 20 7b 7b 63 20 64 7d 20 65 7d 20 7b 31 32 33 b {{c d} e} {123
5230: 20 7b 7b 78 7d 7d 7d 7d 0d 0a 2b 74 65 73 74 20 {{x}}}}..+test
5240: 6d 61 70 65 61 63 68 2d 34 2e 32 61 20 7b 62 61 mapeach-4.2a {ba
5250: 73 69 63 20 6d 61 70 65 61 63 68 20 74 65 73 74 sic mapeach test
5260: 73 7d 20 7b 0d 0a 2b 20 20 61 70 70 6c 79 20 7b s} {..+ apply {
5270: 7b 7d 20 7b 0d 0a 2b 20 20 20 20 6d 61 70 65 61 {} {..+ mapea
5280: 63 68 20 69 20 7b 61 20 62 20 7b 7b 63 20 64 7d ch i {a b {{c d}
5290: 20 65 7d 20 7b 31 32 33 20 7b 7b 78 7d 7d 7d 7d e} {123 {{x}}}}
52a0: 20 7b 0d 0a 2b 20 20 20 20 20 20 72 65 74 75 72 {..+ retur
52b0: 6e 20 2d 6c 65 76 65 6c 20 30 20 24 69 0d 0a 2b n -level 0 $i..+
52c0: 20 20 20 20 7d 0d 0a 2b 20 20 7d 7d 0d 0a 2b 7d }..+ }}..+}
52d0: 20 7b 61 20 62 20 7b 7b 63 20 64 7d 20 65 7d 20 {a b {{c d} e}
52e0: 7b 31 32 33 20 7b 7b 78 7d 7d 7d 7d 0d 0a 2b 74 {123 {{x}}}}..+t
52f0: 65 73 74 20 6d 61 70 65 61 63 68 2d 34 2e 33 20 est mapeach-4.3
5300: 7b 62 61 73 69 63 20 6d 61 70 65 61 63 68 20 74 {basic mapeach t
5310: 65 73 74 73 7d 20 7b 63 61 74 63 68 20 7b 20 61 ests} {catch { a
5320: 70 70 6c 79 20 7b 7b 7d 20 7b 20 6d 61 70 65 61 pply {{} { mapea
5330: 63 68 20 7d 7d 20 7d 20 6d 73 67 7d 20 31 0d 0a ch }} } msg} 1..
5340: 2b 74 65 73 74 20 6d 61 70 65 61 63 68 2d 34 2e +test mapeach-4.
5350: 34 20 7b 62 61 73 69 63 20 6d 61 70 65 61 63 68 4 {basic mapeach
5360: 20 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 20 20 tests} {..+
5370: 63 61 74 63 68 20 7b 20 61 70 70 6c 79 20 7b 7b catch { apply {{
5380: 7d 20 7b 20 6d 61 70 65 61 63 68 20 7d 7d 20 7d } { mapeach }} }
5390: 20 6d 73 67 0d 0a 2b 20 20 20 20 73 65 74 20 6d msg..+ set m
53a0: 73 67 0d 0a 2b 7d 20 7b 77 72 6f 6e 67 20 23 20 sg..+} {wrong #
53b0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 args: should be
53c0: 22 6d 61 70 65 61 63 68 20 76 61 72 4c 69 73 74 "mapeach varList
53d0: 20 6c 69 73 74 20 3f 76 61 72 4c 69 73 74 20 6c list ?varList l
53e0: 69 73 74 20 2e 2e 2e 3f 20 63 6f 6d 6d 61 6e 64 ist ...? command
53f0: 22 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 "}..+test mapeac
5400: 68 2d 34 2e 35 20 7b 62 61 73 69 63 20 6d 61 70 h-4.5 {basic map
5410: 65 61 63 68 20 74 65 73 74 73 7d 20 7b 63 61 74 each tests} {cat
5420: 63 68 20 7b 20 61 70 70 6c 79 20 7b 7b 7d 20 7b ch { apply {{} {
5430: 20 6d 61 70 65 61 63 68 20 69 20 7d 7d 20 7d 20 mapeach i }} }
5440: 6d 73 67 7d 20 31 0d 0a 2b 74 65 73 74 20 6d 61 msg} 1..+test ma
5450: 70 65 61 63 68 2d 34 2e 36 20 7b 62 61 73 69 63 peach-4.6 {basic
5460: 20 6d 61 70 65 61 63 68 20 74 65 73 74 73 7d 20 mapeach tests}
5470: 7b 0d 0a 2b 20 20 20 20 63 61 74 63 68 20 7b 20 {..+ catch {
5480: 61 70 70 6c 79 20 7b 7b 7d 20 7b 20 6d 61 70 65 apply {{} { mape
5490: 61 63 68 20 69 20 7d 7d 20 7d 20 6d 73 67 0d 0a ach i }} } msg..
54a0: 2b 20 20 20 20 73 65 74 20 6d 73 67 0d 0a 2b 7d + set msg..+}
54b0: 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 {wrong # args:
54c0: 73 68 6f 75 6c 64 20 62 65 20 22 6d 61 70 65 61 should be "mapea
54d0: 63 68 20 76 61 72 4c 69 73 74 20 6c 69 73 74 20 ch varList list
54e0: 3f 76 61 72 4c 69 73 74 20 6c 69 73 74 20 2e 2e ?varList list ..
54f0: 2e 3f 20 63 6f 6d 6d 61 6e 64 22 7d 0d 0a 2b 74 .? command"}..+t
5500: 65 73 74 20 6d 61 70 65 61 63 68 2d 34 2e 37 20 est mapeach-4.7
5510: 7b 62 61 73 69 63 20 6d 61 70 65 61 63 68 20 74 {basic mapeach t
5520: 65 73 74 73 7d 20 7b 63 61 74 63 68 20 7b 20 61 ests} {catch { a
5530: 70 70 6c 79 20 7b 7b 7d 20 7b 20 6d 61 70 65 61 pply {{} { mapea
5540: 63 68 20 69 20 6a 20 7d 7d 20 7d 20 6d 73 67 7d ch i j }} } msg}
5550: 20 31 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 1..+test mapeac
5560: 68 2d 34 2e 38 20 7b 62 61 73 69 63 20 6d 61 70 h-4.8 {basic map
5570: 65 61 63 68 20 74 65 73 74 73 7d 20 7b 0d 0a 2b each tests} {..+
5580: 20 20 20 20 63 61 74 63 68 20 7b 20 61 70 70 6c catch { appl
5590: 79 20 7b 7b 7d 20 7b 20 6d 61 70 65 61 63 68 20 y {{} { mapeach
55a0: 69 20 6a 20 7d 7d 20 7d 20 6d 73 67 0d 0a 2b 20 i j }} } msg..+
55b0: 20 20 20 73 65 74 20 6d 73 67 0d 0a 2b 7d 20 7b set msg..+} {
55c0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 wrong # args: sh
55d0: 6f 75 6c 64 20 62 65 20 22 6d 61 70 65 61 63 68 ould be "mapeach
55e0: 20 76 61 72 4c 69 73 74 20 6c 69 73 74 20 3f 76 varList list ?v
55f0: 61 72 4c 69 73 74 20 6c 69 73 74 20 2e 2e 2e 3f arList list ...?
5600: 20 63 6f 6d 6d 61 6e 64 22 7d 0d 0a 2b 74 65 73 command"}..+tes
5610: 74 20 6d 61 70 65 61 63 68 2d 34 2e 39 20 7b 62 t mapeach-4.9 {b
5620: 61 73 69 63 20 6d 61 70 65 61 63 68 20 74 65 73 asic mapeach tes
5630: 74 73 7d 20 7b 63 61 74 63 68 20 7b 20 61 70 70 ts} {catch { app
5640: 6c 79 20 7b 7b 7d 20 7b 20 6d 61 70 65 61 63 68 ly {{} { mapeach
5650: 20 69 20 6a 20 6b 20 6c 20 7d 7d 20 7d 20 6d 73 i j k l }} } ms
5660: 67 7d 20 31 0d 0a 2b 74 65 73 74 20 6d 61 70 65 g} 1..+test mape
5670: 61 63 68 2d 34 2e 31 30 20 7b 62 61 73 69 63 20 ach-4.10 {basic
5680: 6d 61 70 65 61 63 68 20 74 65 73 74 73 7d 20 7b mapeach tests} {
5690: 0d 0a 2b 20 20 20 20 63 61 74 63 68 20 7b 20 61 ..+ catch { a
56a0: 70 70 6c 79 20 7b 7b 7d 20 7b 20 6d 61 70 65 61 pply {{} { mapea
56b0: 63 68 20 69 20 6a 20 6b 20 6c 20 7d 7d 20 7d 20 ch i j k l }} }
56c0: 6d 73 67 0d 0a 2b 20 20 20 20 73 65 74 20 6d 73 msg..+ set ms
56d0: 67 0d 0a 2b 7d 20 7b 77 72 6f 6e 67 20 23 20 61 g..+} {wrong # a
56e0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 rgs: should be "
56f0: 6d 61 70 65 61 63 68 20 76 61 72 4c 69 73 74 20 mapeach varList
5700: 6c 69 73 74 20 3f 76 61 72 4c 69 73 74 20 6c 69 list ?varList li
5710: 73 74 20 2e 2e 2e 3f 20 63 6f 6d 6d 61 6e 64 22 st ...? command"
5720: 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 68 }..+test mapeach
5730: 2d 34 2e 31 31 20 7b 62 61 73 69 63 20 6d 61 70 -4.11 {basic map
5740: 65 61 63 68 20 74 65 73 74 73 7d 20 7b 0d 0a 2b each tests} {..+
5750: 20 20 61 70 70 6c 79 20 7b 7b 7d 20 7b 20 6d 61 apply {{} { ma
5760: 70 65 61 63 68 20 69 20 7b 7d 20 7b 20 73 65 74 peach i {} { set
5770: 20 69 20 7d 20 7d 7d 0d 0a 2b 7d 20 7b 7d 0d 0a i } }}..+} {}..
5780: 2b 74 65 73 74 20 6d 61 70 65 61 63 68 2d 34 2e +test mapeach-4.
5790: 31 32 20 7b 62 61 73 69 63 20 6d 61 70 65 61 63 12 {basic mapeac
57a0: 68 20 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 61 h tests} {..+ a
57b0: 70 70 6c 79 20 7b 7b 7d 20 7b 20 6d 61 70 65 61 pply {{} { mapea
57c0: 63 68 20 69 20 7b 7d 20 7b 20 72 65 74 75 72 6e ch i {} { return
57d0: 20 2d 6c 65 76 65 6c 20 30 20 78 20 7d 20 7d 7d -level 0 x } }}
57e0: 0d 0a 2b 7d 20 7b 7d 0d 0a 2b 74 65 73 74 20 6d ..+} {}..+test m
57f0: 61 70 65 61 63 68 2d 34 2e 31 33 20 7b 6d 61 70 apeach-4.13 {map
5800: 65 61 63 68 20 65 72 72 6f 72 73 7d 20 7b 0d 0a each errors} {..
5810: 2b 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 + list [catch
5820: 20 7b 20 61 70 70 6c 79 20 7b 7b 7d 20 7b 20 6d { apply {{} { m
5830: 61 70 65 61 63 68 20 7b 7b 61 7d 7b 62 7d 7d 20 apeach {{a}{b}}
5840: 7b 31 20 32 20 33 7d 20 7b 7d 20 7d 7d 20 7d 20 {1 2 3} {} }} }
5850: 6d 73 67 5d 20 24 6d 73 67 0d 0a 2b 7d 20 7b 31 msg] $msg..+} {1
5860: 20 7b 6c 69 73 74 20 65 6c 65 6d 65 6e 74 20 69 {list element i
5870: 6e 20 62 72 61 63 65 73 20 66 6f 6c 6c 6f 77 65 n braces followe
5880: 64 20 62 79 20 22 7b 62 7d 22 20 69 6e 73 74 65 d by "{b}" inste
5890: 61 64 20 6f 66 20 73 70 61 63 65 7d 7d 0d 0a 2b ad of space}}..+
58a0: 74 65 73 74 20 6d 61 70 65 61 63 68 2d 34 2e 31 test mapeach-4.1
58b0: 34 20 7b 6d 61 70 65 61 63 68 20 65 72 72 6f 72 4 {mapeach error
58c0: 73 7d 20 7b 0d 0a 2b 20 20 20 20 6c 69 73 74 20 s} {..+ list
58d0: 5b 63 61 74 63 68 20 7b 20 61 70 70 6c 79 20 7b [catch { apply {
58e0: 7b 7d 20 7b 20 6d 61 70 65 61 63 68 20 61 20 7b {} { mapeach a {
58f0: 7b 31 20 32 7d 33 7d 20 7b 7d 20 7d 7d 20 7d 20 {1 2}3} {} }} }
5900: 6d 73 67 5d 20 24 6d 73 67 0d 0a 2b 7d 20 7b 31 msg] $msg..+} {1
5910: 20 7b 6c 69 73 74 20 65 6c 65 6d 65 6e 74 20 69 {list element i
5920: 6e 20 62 72 61 63 65 73 20 66 6f 6c 6c 6f 77 65 n braces followe
5930: 64 20 62 79 20 22 33 22 20 69 6e 73 74 65 61 64 d by "3" instead
5940: 20 6f 66 20 73 70 61 63 65 7d 7d 0d 0a 2b 63 61 of space}}..+ca
5950: 74 63 68 20 7b 75 6e 73 65 74 20 61 7d 0d 0a 2b tch {unset a}..+
5960: 74 65 73 74 20 6d 61 70 65 61 63 68 2d 34 2e 31 test mapeach-4.1
5970: 35 20 7b 6d 61 70 65 61 63 68 20 65 72 72 6f 72 5 {mapeach error
5980: 73 7d 20 7b 0d 0a 2b 20 20 20 20 61 70 70 6c 79 s} {..+ apply
5990: 20 7b 7b 7d 20 7b 20 0d 0a 2b 20 20 20 20 20 20 {{} { ..+
59a0: 73 65 74 20 61 28 30 29 20 34 34 0d 0a 2b 20 20 set a(0) 44..+
59b0: 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 list [catch
59c0: 7b 6d 61 70 65 61 63 68 20 61 20 7b 31 20 32 20 {mapeach a {1 2
59d0: 33 7d 20 7b 7d 7d 20 6d 73 67 20 6f 5d 20 24 6d 3} {}} msg o] $m
59e0: 73 67 20 24 3a 3a 65 72 72 6f 72 49 6e 66 6f 20 sg $::errorInfo
59f0: 0d 0a 2b 20 20 20 20 7d 7d 20 0d 0a 2b 7d 20 7b ..+ }} ..+} {
5a00: 31 20 7b 63 61 6e 27 74 20 73 65 74 20 22 61 22 1 {can't set "a"
5a10: 3a 20 76 61 72 69 61 62 6c 65 20 69 73 20 61 72 : variable is ar
5a20: 72 61 79 7d 20 7b 63 61 6e 27 74 20 73 65 74 20 ray} {can't set
5a30: 22 61 22 3a 20 76 61 72 69 61 62 6c 65 20 69 73 "a": variable is
5a40: 20 61 72 72 61 79 0d 0a 2b 20 20 20 20 77 68 69 array..+ whi
5a50: 6c 65 20 65 78 65 63 75 74 69 6e 67 0d 0a 2b 22 le executing..+"
5a60: 6d 61 70 65 61 63 68 20 61 20 7b 31 20 32 20 33 mapeach a {1 2 3
5a70: 7d 20 7b 7d 22 7d 7d 0d 0a 2b 74 65 73 74 20 6d } {}"}}..+test m
5a80: 61 70 65 61 63 68 2d 34 2e 31 36 20 7b 6d 61 70 apeach-4.16 {map
5a90: 65 61 63 68 20 65 72 72 6f 72 73 7d 20 7b 0d 0a each errors} {..
5aa0: 2b 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 + list [catch
5ab0: 20 7b 20 61 70 70 6c 79 20 7b 7b 7d 20 7b 20 6d { apply {{} { m
5ac0: 61 70 65 61 63 68 20 7b 7d 20 7b 7d 20 7b 7d 20 apeach {} {} {}
5ad0: 7d 7d 20 7d 20 6d 73 67 5d 20 24 6d 73 67 0d 0a }} } msg] $msg..
5ae0: 2b 7d 20 7b 31 20 7b 66 6f 72 65 61 63 68 20 76 +} {1 {foreach v
5af0: 61 72 6c 69 73 74 20 69 73 20 65 6d 70 74 79 7d arlist is empty}
5b00: 7d 0d 0a 2b 63 61 74 63 68 20 7b 75 6e 73 65 74 }..+catch {unset
5b10: 20 61 7d 0d 0a 2b 0d 0a 2b 0d 0a 2b 23 20 50 61 a}..+..+..+# Pa
5b20: 72 61 6c 6c 65 6c 20 22 6d 61 70 65 61 63 68 22 rallel "mapeach"
5b30: 20 6f 70 65 72 61 74 69 6f 6e 20 28 63 6f 6d 70 operation (comp
5b40: 69 6c 65 64 29 0d 0a 2b 0d 0a 2b 74 65 73 74 20 iled)..+..+test
5b50: 6d 61 70 65 61 63 68 2d 35 2e 31 20 7b 70 61 72 mapeach-5.1 {par
5b60: 61 6c 6c 65 6c 20 6d 61 70 65 61 63 68 20 74 65 allel mapeach te
5b70: 73 74 73 7d 20 7b 0d 0a 2b 20 20 61 70 70 6c 79 sts} {..+ apply
5b80: 20 7b 7b 7d 20 7b 0d 0a 2b 20 20 20 20 6d 61 70 {{} {..+ map
5b90: 65 61 63 68 20 7b 61 20 62 7d 20 7b 31 20 32 20 each {a b} {1 2
5ba0: 33 20 34 7d 20 7b 0d 0a 2b 20 20 20 20 20 20 6c 3 4} {..+ l
5bb0: 69 73 74 20 24 62 20 24 61 0d 0a 2b 20 20 20 20 ist $b $a..+
5bc0: 7d 0d 0a 2b 20 20 7d 7d 0d 0a 2b 7d 20 7b 7b 32 }..+ }}..+} {{2
5bd0: 20 31 7d 20 7b 34 20 33 7d 7d 0d 0a 2b 74 65 73 1} {4 3}}..+tes
5be0: 74 20 6d 61 70 65 61 63 68 2d 35 2e 32 20 7b 70 t mapeach-5.2 {p
5bf0: 61 72 61 6c 6c 65 6c 20 6d 61 70 65 61 63 68 20 arallel mapeach
5c00: 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 61 70 70 tests} {..+ app
5c10: 6c 79 20 7b 7b 7d 20 7b 0d 0a 2b 20 20 20 20 6d ly {{} {..+ m
5c20: 61 70 65 61 63 68 20 7b 61 20 62 7d 20 7b 31 20 apeach {a b} {1
5c30: 32 20 33 20 34 20 35 7d 20 7b 0d 0a 2b 20 20 20 2 3 4 5} {..+
5c40: 20 20 20 6c 69 73 74 20 24 62 20 24 61 0d 0a 2b list $b $a..+
5c50: 20 20 20 20 7d 0d 0a 2b 20 20 7d 7d 0d 0a 2b 7d }..+ }}..+}
5c60: 20 7b 7b 32 20 31 7d 20 7b 34 20 33 7d 20 7b 7b {{2 1} {4 3} {{
5c70: 7d 20 35 7d 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 } 5}}..+test map
5c80: 65 61 63 68 2d 35 2e 33 20 7b 70 61 72 61 6c 6c each-5.3 {parall
5c90: 65 6c 20 6d 61 70 65 61 63 68 20 74 65 73 74 73 el mapeach tests
5ca0: 7d 20 7b 0d 0a 2b 20 20 61 70 70 6c 79 20 7b 7b } {..+ apply {{
5cb0: 7d 20 7b 0d 0a 2b 20 20 20 20 6d 61 70 65 61 63 } {..+ mapeac
5cc0: 68 20 61 20 7b 31 20 32 20 33 7d 20 62 20 7b 34 h a {1 2 3} b {4
5cd0: 20 35 20 36 7d 20 7b 0d 0a 2b 20 20 20 20 20 20 5 6} {..+
5ce0: 6c 69 73 74 20 24 62 20 24 61 0d 0a 2b 20 20 20 list $b $a..+
5cf0: 20 7d 0d 0a 2b 20 20 7d 7d 0d 0a 2b 7d 20 7b 7b }..+ }}..+} {{
5d00: 34 20 31 7d 20 7b 35 20 32 7d 20 7b 36 20 33 7d 4 1} {5 2} {6 3}
5d10: 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 68 }..+test mapeach
5d20: 2d 35 2e 34 20 7b 70 61 72 61 6c 6c 65 6c 20 6d -5.4 {parallel m
5d30: 61 70 65 61 63 68 20 74 65 73 74 73 7d 20 7b 0d apeach tests} {.
5d40: 0a 2b 20 20 61 70 70 6c 79 20 7b 7b 7d 20 7b 0d .+ apply {{} {.
5d50: 0a 2b 20 20 20 20 6d 61 70 65 61 63 68 20 61 20 .+ mapeach a
5d60: 7b 31 20 32 20 33 7d 20 62 20 7b 34 20 35 20 36 {1 2 3} b {4 5 6
5d70: 20 37 20 38 7d 20 7b 0d 0a 2b 09 6c 69 73 74 20 7 8} {..+.list
5d80: 24 62 20 24 61 0d 0a 2b 20 20 20 20 7d 0d 0a 2b $b $a..+ }..+
5d90: 20 20 7d 7d 0d 0a 2b 7d 20 7b 7b 34 20 31 7d 20 }}..+} {{4 1}
5da0: 7b 35 20 32 7d 20 7b 36 20 33 7d 20 7b 37 20 7b {5 2} {6 3} {7 {
5db0: 7d 7d 20 7b 38 20 7b 7d 7d 7d 0d 0a 2b 74 65 73 }} {8 {}}}..+tes
5dc0: 74 20 6d 61 70 65 61 63 68 2d 35 2e 35 20 7b 70 t mapeach-5.5 {p
5dd0: 61 72 61 6c 6c 65 6c 20 6d 61 70 65 61 63 68 20 arallel mapeach
5de0: 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 61 70 70 tests} {..+ app
5df0: 6c 79 20 7b 7b 7d 20 7b 0d 0a 2b 20 20 20 20 6d ly {{} {..+ m
5e00: 61 70 65 61 63 68 20 7b 61 20 62 7d 20 7b 61 20 apeach {a b} {a
5e10: 62 20 41 20 42 20 61 61 20 62 62 7d 20 63 20 7b b A B aa bb} c {
5e20: 63 20 43 20 63 63 20 43 43 7d 20 7b 0d 0a 2b 20 c C cc CC} {..+
5e30: 20 20 20 20 20 6c 69 73 74 20 24 61 20 24 62 20 list $a $b
5e40: 24 63 0d 0a 2b 20 20 20 20 7d 0d 0a 2b 20 20 7d $c..+ }..+ }
5e50: 7d 0d 0a 2b 7d 20 7b 7b 61 20 62 20 63 7d 20 7b }..+} {{a b c} {
5e60: 41 20 42 20 43 7d 20 7b 61 61 20 62 62 20 63 63 A B C} {aa bb cc
5e70: 7d 20 7b 7b 7d 20 7b 7d 20 43 43 7d 7d 0d 0a 2b } {{} {} CC}}..+
5e80: 74 65 73 74 20 6d 61 70 65 61 63 68 2d 35 2e 36 test mapeach-5.6
5e90: 20 7b 70 61 72 61 6c 6c 65 6c 20 6d 61 70 65 61 {parallel mapea
5ea0: 63 68 20 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 ch tests} {..+
5eb0: 61 70 70 6c 79 20 7b 7b 7d 20 7b 0d 0a 2b 20 20 apply {{} {..+
5ec0: 20 20 6d 61 70 65 61 63 68 20 61 20 7b 31 20 32 mapeach a {1 2
5ed0: 20 33 7d 20 62 20 7b 31 20 32 20 33 7d 20 63 20 3} b {1 2 3} c
5ee0: 7b 31 20 32 20 33 7d 20 64 20 7b 31 20 32 20 33 {1 2 3} d {1 2 3
5ef0: 7d 20 65 20 7b 31 20 32 20 33 7d 20 7b 0d 0a 2b } e {1 2 3} {..+
5f00: 20 20 20 20 20 20 6c 69 73 74 20 24 61 24 62 24 list $a$b$
5f10: 63 24 64 24 65 0d 0a 2b 20 20 20 20 7d 0d 0a 2b c$d$e..+ }..+
5f20: 20 20 7d 7d 0d 0a 2b 7d 20 7b 31 31 31 31 31 20 }}..+} {11111
5f30: 32 32 32 32 32 20 33 33 33 33 33 7d 0d 0a 2b 74 22222 33333}..+t
5f40: 65 73 74 20 6d 61 70 65 61 63 68 2d 35 2e 37 20 est mapeach-5.7
5f50: 7b 70 61 72 61 6c 6c 65 6c 20 6d 61 70 65 61 63 {parallel mapeac
5f60: 68 20 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 61 h tests} {..+ a
5f70: 70 70 6c 79 20 7b 7b 7d 20 7b 0d 0a 2b 20 20 20 pply {{} {..+
5f80: 20 6d 61 70 65 61 63 68 20 61 20 7b 7d 20 62 20 mapeach a {} b
5f90: 7b 31 20 32 20 33 7d 20 63 20 7b 31 20 32 7d 20 {1 2 3} c {1 2}
5fa0: 64 20 7b 31 20 32 20 33 20 34 7d 20 65 20 7b 7b d {1 2 3 4} e {{
5fb0: 31 20 32 7d 7d 20 7b 0d 0a 2b 20 20 20 20 20 20 1 2}} {..+
5fc0: 73 65 74 20 78 20 24 61 24 62 24 63 24 64 24 65 set x $a$b$c$d$e
5fd0: 0d 0a 2b 20 20 20 20 7d 0d 0a 2b 20 20 7d 7d 0d ..+ }..+ }}.
5fe0: 0a 2b 7d 20 7b 7b 31 31 31 31 20 32 7d 20 32 32 .+} {{1111 2} 22
5ff0: 32 20 33 33 20 34 7d 0d 0a 2b 74 65 73 74 20 6d 2 33 4}..+test m
6000: 61 70 65 61 63 68 2d 35 2e 38 20 7b 70 61 72 61 apeach-5.8 {para
6010: 6c 6c 65 6c 20 6d 61 70 65 61 63 68 20 74 65 73 llel mapeach tes
6020: 74 73 7d 20 7b 0d 0a 2b 20 20 61 70 70 6c 79 20 ts} {..+ apply
6030: 7b 7b 7d 20 7b 0d 0a 2b 20 20 20 20 6d 61 70 65 {{} {..+ mape
6040: 61 63 68 20 61 20 7b 7d 20 62 20 7b 31 20 32 20 ach a {} b {1 2
6050: 33 7d 20 63 20 7b 31 20 32 7d 20 64 20 7b 31 20 3} c {1 2} d {1
6060: 32 20 33 20 34 7d 20 65 20 7b 7b 31 20 32 7d 7d 2 3 4} e {{1 2}}
6070: 20 7b 0d 0a 2b 20 20 20 20 20 20 6a 6f 69 6e 20 {..+ join
6080: 5b 6c 69 73 74 20 24 61 20 24 62 20 24 63 20 24 [list $a $b $c $
6090: 64 20 24 65 5d 20 2e 0d 0a 2b 20 20 20 20 7d 0d d $e] ...+ }.
60a0: 0a 2b 20 20 7d 7d 0d 0a 2b 7d 20 7b 7b 2e 31 2e .+ }}..+} {{.1.
60b0: 31 2e 31 2e 31 20 32 7d 20 2e 32 2e 32 2e 32 2e 1.1.1 2} .2.2.2.
60c0: 20 2e 33 2e 2e 33 2e 20 2e 2e 2e 34 2e 7d 0d 0a .3..3. ...4.}..
60d0: 2b 74 65 73 74 20 6d 61 70 65 61 63 68 2d 35 2e +test mapeach-5.
60e0: 39 20 7b 6d 61 70 65 61 63 68 20 6f 6e 6c 79 20 9 {mapeach only
60f0: 73 65 74 73 20 76 61 72 73 20 69 66 20 72 65 70 sets vars if rep
6100: 65 61 74 69 6e 67 20 6c 6f 6f 70 7d 20 7b 0d 0a eating loop} {..
6110: 2b 20 20 20 20 61 70 70 6c 79 20 7b 7b 7d 20 7b + apply {{} {
6120: 0d 0a 2b 20 20 20 20 20 20 20 20 73 65 74 20 72 ..+ set r
6130: 67 62 20 7b 36 35 35 33 35 20 30 20 30 7d 0d 0a gb {65535 0 0}..
6140: 2b 20 20 20 20 20 20 20 20 6d 61 70 65 61 63 68 + mapeach
6150: 20 7b 72 20 67 20 62 7d 20 5b 73 65 74 20 72 67 {r g b} [set rg
6160: 62 5d 20 7b 7d 0d 0a 2b 20 20 20 20 20 20 20 20 b] {}..+
6170: 72 65 74 75 72 6e 20 22 72 3d 24 72 2c 20 67 3d return "r=$r, g=
6180: 24 67 2c 20 62 3d 24 62 22 0d 0a 2b 20 20 20 20 $g, b=$b"..+
6190: 7d 7d 0d 0a 2b 7d 20 7b 72 3d 36 35 35 33 35 2c }}..+} {r=65535,
61a0: 20 67 3d 30 2c 20 62 3d 30 7d 0d 0a 2b 74 65 73 g=0, b=0}..+tes
61b0: 74 20 6d 61 70 65 61 63 68 2d 35 2e 31 30 20 7b t mapeach-5.10 {
61c0: 6d 61 70 65 61 63 68 20 6f 6e 6c 79 20 73 75 70 mapeach only sup
61d0: 70 6f 72 74 73 20 6c 6f 63 61 6c 20 73 63 61 6c ports local scal
61e0: 61 72 20 76 61 72 69 61 62 6c 65 73 7d 20 7b 0d ar variables} {.
61f0: 0a 2b 20 20 20 20 61 70 70 6c 79 20 7b 7b 7d 20 .+ apply {{}
6200: 7b 0d 0a 2b 20 20 20 20 20 20 20 20 6d 61 70 65 {..+ mape
6210: 61 63 68 20 7b 61 28 33 29 7d 20 7b 31 20 32 20 ach {a(3)} {1 2
6220: 33 20 34 7d 20 7b 73 65 74 20 7b 61 28 33 29 7d 3 4} {set {a(3)}
6230: 7d 0d 0a 2b 20 20 20 20 7d 7d 0d 0a 2b 7d 20 7b }..+ }}..+} {
6240: 31 20 32 20 33 20 34 7d 0d 0a 2b 0d 0a 2b 0d 0a 1 2 3 4}..+..+..
6250: 2b 23 20 22 6d 61 70 65 61 63 68 22 20 77 69 74 +# "mapeach" wit
6260: 68 20 22 63 6f 6e 74 69 6e 75 65 22 20 61 6e 64 h "continue" and
6270: 20 22 62 72 65 61 6b 22 20 28 63 6f 6d 70 69 6c "break" (compil
6280: 65 64 29 0d 0a 2b 0d 0a 2b 74 65 73 74 20 6d 61 ed)..+..+test ma
6290: 70 65 61 63 68 2d 36 2e 31 20 7b 63 6f 6e 74 69 peach-6.1 {conti
62a0: 6e 75 65 20 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 nue tests} {..+
62b0: 20 61 70 70 6c 79 20 7b 7b 7d 20 7b 0d 0a 2b 20 apply {{} {..+
62c0: 20 20 20 6d 61 70 65 61 63 68 20 69 20 7b 61 20 mapeach i {a
62d0: 62 20 63 20 64 7d 20 7b 0d 0a 2b 20 20 20 20 20 b c d} {..+
62e0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 63 6f 6d if {[string com
62f0: 70 61 72 65 20 24 69 20 22 62 22 5d 20 3d 3d 20 pare $i "b"] ==
6300: 30 7d 20 63 6f 6e 74 69 6e 75 65 0d 0a 2b 20 20 0} continue..+
6310: 20 20 20 20 73 65 74 20 69 0d 0a 2b 20 20 20 20 set i..+
6320: 7d 0d 0a 2b 20 20 7d 7d 0d 0a 2b 7d 20 7b 61 20 }..+ }}..+} {a
6330: 63 20 64 7d 0d 0a 2b 74 65 73 74 20 6d 61 70 65 c d}..+test mape
6340: 61 63 68 2d 36 2e 32 20 7b 63 6f 6e 74 69 6e 75 ach-6.2 {continu
6350: 65 20 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 61 e tests} {..+ a
6360: 70 70 6c 79 20 7b 7b 7d 20 7b 0d 0a 2b 20 20 20 pply {{} {..+
6370: 20 6c 69 73 74 20 5b 6d 61 70 65 61 63 68 20 69 list [mapeach i
6380: 20 7b 61 20 62 20 63 20 64 7d 20 7b 0d 0a 2b 20 {a b c d} {..+
6390: 20 20 20 20 20 69 6e 63 72 20 78 0d 0a 2b 20 20 incr x..+
63a0: 20 20 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 63 .if {[string c
63b0: 6f 6d 70 61 72 65 20 24 69 20 22 62 22 5d 20 21 ompare $i "b"] !
63c0: 3d 20 30 7d 20 63 6f 6e 74 69 6e 75 65 0d 0a 2b = 0} continue..+
63d0: 20 20 20 20 09 73 65 74 20 69 0d 0a 2b 20 20 20 .set i..+
63e0: 20 7d 5d 20 24 78 0d 0a 2b 20 20 7d 7d 0d 0a 2b }] $x..+ }}..+
63f0: 7d 20 7b 62 20 34 7d 0d 0a 2b 74 65 73 74 20 6d } {b 4}..+test m
6400: 61 70 65 61 63 68 2d 36 2e 33 20 7b 62 72 65 61 apeach-6.3 {brea
6410: 6b 20 74 65 73 74 73 7d 20 7b 0d 0a 2b 20 20 61 k tests} {..+ a
6420: 70 70 6c 79 20 7b 7b 7d 20 7b 0d 0a 2b 20 20 20 pply {{} {..+
6430: 20 6c 69 73 74 20 5b 6d 61 70 65 61 63 68 20 69 list [mapeach i
6440: 20 7b 61 20 62 20 63 20 64 7d 20 7b 0d 0a 2b 20 {a b c d} {..+
6450: 20 20 20 20 20 69 6e 63 72 20 78 0d 0a 2b 20 20 incr x..+
6460: 20 20 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 63 .if {[string c
6470: 6f 6d 70 61 72 65 20 24 69 20 22 63 22 5d 20 3d ompare $i "c"] =
6480: 3d 20 30 7d 20 62 72 65 61 6b 0d 0a 2b 20 20 20 = 0} break..+
6490: 20 09 73 65 74 20 69 0d 0a 2b 20 20 20 20 7d 5d .set i..+ }]
64a0: 20 24 78 0d 0a 2b 20 20 7d 7d 0d 0a 2b 7d 20 7b $x..+ }}..+} {
64b0: 7b 61 20 62 7d 20 33 7d 0d 0a 2b 23 20 43 68 65 {a b} 3}..+# Che
64c0: 63 6b 20 66 6f 72 20 62 75 67 20 73 69 6d 69 6c ck for bug simil
64d0: 61 72 20 74 6f 20 23 34 30 36 37 30 39 0d 0a 2b ar to #406709..+
64e0: 74 65 73 74 20 6d 61 70 65 61 63 68 2d 36 2e 34 test mapeach-6.4
64f0: 20 7b 62 72 65 61 6b 20 74 65 73 74 73 7d 20 7b {break tests} {
6500: 0d 0a 2b 20 20 20 20 61 70 70 6c 79 20 7b 7b 7d ..+ apply {{}
6510: 20 7b 0d 0a 2b 09 73 65 74 20 61 20 31 0d 0a 2b {..+.set a 1..+
6520: 09 6d 61 70 65 61 63 68 20 62 20 62 20 7b 6c 69 .mapeach b b {li
6530: 73 74 20 5b 63 6f 6e 63 61 74 20 61 3b 20 62 72 st [concat a; br
6540: 65 61 6b 5d 3b 20 69 6e 63 72 20 61 7d 0d 0a 2b eak]; incr a}..+
6550: 09 69 6e 63 72 20 61 0d 0a 2b 20 20 20 20 7d 7d .incr a..+ }}
6560: 0d 0a 2b 7d 20 7b 32 7d 0d 0a 2b 0d 0a 2b 0d 0a ..+} {2}..+..+..
6570: 2b 0d 0a 2b 23 20 2d 2d 2d 2d 2d 20 53 70 65 63 +..+# ----- Spec
6580: 69 61 6c 20 63 61 73 65 73 20 61 6e 64 20 62 75 ial cases and bu
6590: 67 73 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d gs -------------
65a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
65b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
65c0: 2d 2d 2d 2d 0d 0a 2b 0d 0a 2b 0d 0a 2b 74 65 73 ----..+..+..+tes
65d0: 74 20 6d 61 70 65 61 63 68 2d 37 2e 31 20 7b 63 t mapeach-7.1 {c
65e0: 6f 6d 70 69 6c 65 64 20 6d 61 70 65 61 63 68 20 ompiled mapeach
65f0: 62 61 63 6b 77 61 72 64 20 6a 75 6d 70 20 77 6f backward jump wo
6600: 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 7d 20 7b rks correctly} {
6610: 0d 0a 2b 20 20 20 20 63 61 74 63 68 20 7b 75 6e ..+ catch {un
6620: 73 65 74 20 78 7d 0d 0a 2b 20 20 20 20 61 72 72 set x}..+ arr
6630: 61 79 20 73 65 74 20 78 20 7b 30 20 7a 65 72 6f ay set x {0 zero
6640: 20 31 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 1 one 2 two 3 t
6650: 68 72 65 65 7d 0d 0a 2b 20 20 20 20 6c 73 6f 72 hree}..+ lsor
6660: 74 20 5b 61 70 70 6c 79 20 7b 7b 61 72 72 61 79 t [apply {{array
6670: 4e 61 6d 65 7d 20 7b 0d 0a 2b 20 20 20 20 20 20 Name} {..+
6680: 20 20 75 70 76 61 72 20 31 20 24 61 72 72 61 79 upvar 1 $array
6690: 4e 61 6d 65 20 61 0d 0a 2b 20 20 20 20 20 20 20 Name a..+
66a0: 20 6d 61 70 65 61 63 68 20 6d 65 6d 62 65 72 20 mapeach member
66b0: 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 61 5d 20 [array names a]
66c0: 7b 0d 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 {..+
66d0: 6c 69 73 74 20 24 6d 65 6d 62 65 72 20 5b 73 65 list $member [se
66e0: 74 20 61 28 24 6d 65 6d 62 65 72 29 5d 0d 0a 2b t a($member)]..+
66f0: 20 20 20 20 20 20 20 20 7d 0d 0a 2b 20 20 20 20 }..+
6700: 7d 7d 20 78 5d 0d 0a 2b 7d 20 5b 6c 73 6f 72 74 }} x]..+} [lsort
6710: 20 7b 7b 30 20 7a 65 72 6f 7d 20 7b 31 20 6f 6e {{0 zero} {1 on
6720: 65 7d 20 7b 32 20 74 77 6f 7d 20 7b 33 20 74 68 e} {2 two} {3 th
6730: 72 65 65 7d 7d 5d 0d 0a 2b 0d 0a 2b 74 65 73 74 ree}}]..+..+test
6740: 20 6d 61 70 65 61 63 68 2d 37 2e 32 20 7b 6e 6f mapeach-7.2 {no
6750: 6e 63 6f 6d 70 69 6c 65 64 20 6d 61 70 65 61 63 ncompiled mapeac
6760: 68 20 61 6e 64 20 73 68 61 72 65 64 20 76 61 72 h and shared var
6770: 69 61 62 6c 65 20 6f 72 20 76 61 6c 75 65 20 6c iable or value l
6780: 69 73 74 20 6f 62 6a 65 63 74 73 20 74 68 61 74 ist objects that
6790: 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 74 are converted t
67a0: 6f 20 61 6e 6f 74 68 65 72 20 74 79 70 65 7d 20 o another type}
67b0: 7b 0d 0a 2b 20 20 20 20 63 61 74 63 68 20 7b 75 {..+ catch {u
67c0: 6e 73 65 74 20 78 7d 0d 0a 2b 20 20 20 20 6d 61 nset x}..+ ma
67d0: 70 65 61 63 68 20 7b 31 32 2e 30 7d 20 7b 61 20 peach {12.0} {a
67e0: 62 20 63 7d 20 7b 0d 0a 2b 20 20 20 20 20 20 20 b c} {..+
67f0: 20 73 65 74 20 78 20 31 32 2e 30 0d 0a 2b 20 20 set x 12.0..+
6800: 20 20 20 20 20 20 73 65 74 20 78 20 5b 65 78 70 set x [exp
6810: 72 20 24 78 20 2b 20 31 5d 0d 0a 2b 20 20 20 20 r $x + 1]..+
6820: 7d 0d 0a 2b 7d 20 7b 31 33 2e 30 20 31 33 2e 30 }..+} {13.0 13.0
6830: 20 31 33 2e 30 7d 0d 0a 2b 0d 0a 2b 23 20 54 65 13.0}..+..+# Te
6840: 73 74 20 66 6f 72 20 69 6e 63 6f 72 72 65 63 74 st for incorrect
6850: 20 22 64 6f 75 62 6c 65 20 65 76 61 6c 75 61 74 "double evaluat
6860: 69 6f 6e 22 20 73 65 6d 61 6e 74 69 63 73 0d 0a ion" semantics..
6870: 2b 74 65 73 74 20 6d 61 70 65 61 63 68 2d 37 2e +test mapeach-7.
6880: 33 20 7b 64 65 6c 61 79 65 64 20 73 75 62 73 74 3 {delayed subst
6890: 69 74 75 74 69 6f 6e 20 6f 66 20 62 6f 64 79 7d itution of body}
68a0: 20 7b 0d 0a 2b 20 20 20 20 61 70 70 6c 79 20 7b {..+ apply {
68b0: 7b 7d 20 7b 0d 0a 2b 20 20 20 20 20 20 20 73 65 {} {..+ se
68c0: 74 20 61 20 30 0d 0a 2b 20 20 20 20 20 20 20 6d t a 0..+ m
68d0: 61 70 65 61 63 68 20 61 20 5b 6c 69 73 74 20 31 apeach a [list 1
68e0: 20 32 20 33 5d 20 22 0d 0a 2b 20 20 20 20 20 20 2 3] "..+
68f0: 20 20 20 20 20 73 65 74 20 78 20 24 61 0d 0a 2b set x $a..+
6900: 20 20 20 20 20 20 20 22 0d 0a 2b 20 20 20 20 20 "..+
6910: 20 20 73 65 74 20 78 0d 0a 2b 20 20 20 20 7d 7d set x..+ }}
6920: 0d 0a 2b 7d 20 7b 30 7d 0d 0a 2b 0d 0a 2b 23 20 ..+} {0}..+..+#
6930: 52 65 6c 61 74 65 64 20 74 6f 20 22 66 6f 72 65 Related to "fore
6940: 61 63 68 22 20 74 65 73 74 20 66 6f 72 20 5b 42 ach" test for [B
6950: 75 67 20 31 31 38 39 32 37 34 5d 3b 20 63 72 61 ug 1189274]; cra
6960: 73 68 20 6f 6e 20 66 61 69 6c 75 72 65 0d 0a 2b sh on failure..+
6970: 74 65 73 74 20 6d 61 70 65 61 63 68 2d 37 2e 34 test mapeach-7.4
6980: 20 7b 65 6d 70 74 79 20 6c 69 73 74 20 68 61 6e {empty list han
6990: 64 6c 69 6e 67 7d 20 7b 0d 0a 2b 20 20 20 20 70 dling} {..+ p
69a0: 72 6f 63 20 63 72 61 73 68 20 7b 7d 20 7b 0d 0a roc crash {} {..
69b0: 2b 09 72 65 6e 61 6d 65 20 63 72 61 73 68 20 7b +.rename crash {
69c0: 7d 0d 0a 2b 09 73 65 74 20 61 20 22 78 20 79 20 }..+.set a "x y
69d0: 7a 22 0d 0a 2b 09 73 65 74 20 62 20 22 22 0d 0a z"..+.set b ""..
69e0: 2b 09 6d 61 70 65 61 63 68 20 61 61 20 24 61 20 +.mapeach aa $a
69f0: 62 62 20 24 62 20 7b 20 73 65 74 20 78 20 22 61 bb $b { set x "a
6a00: 61 20 3d 20 24 61 61 20 62 62 20 3d 20 24 62 62 a = $aa bb = $bb
6a10: 22 20 7d 0d 0a 2b 20 20 20 20 7d 0d 0a 2b 20 20 " }..+ }..+
6a20: 20 20 63 72 61 73 68 0d 0a 2b 7d 20 7b 7b 61 61 crash..+} {{aa
6a30: 20 3d 20 78 20 62 62 20 3d 20 7d 20 7b 61 61 20 = x bb = } {aa
6a40: 3d 20 79 20 62 62 20 3d 20 7d 20 7b 61 61 20 3d = y bb = } {aa =
6a50: 20 7a 20 62 62 20 3d 20 7d 7d 0d 0a 2b 0d 0a 2b z bb = }}..+..+
6a60: 23 20 52 65 6c 61 74 65 64 20 74 6f 20 5b 42 75 # Related to [Bu
6a70: 67 20 31 36 37 31 31 33 38 5d 3b 20 69 6e 66 69 g 1671138]; infi
6a80: 6e 69 74 65 20 6c 6f 6f 70 20 77 69 74 68 20 65 nite loop with e
6a90: 6d 70 74 79 20 76 61 72 20 6c 69 73 74 20 69 6e mpty var list in
6aa0: 20 62 79 74 65 63 6f 6d 70 69 6c 65 64 20 76 65 bytecompiled ve
6ab0: 72 73 69 6f 6e 0d 0a 2b 74 65 73 74 20 6d 61 70 rsion..+test map
6ac0: 65 61 63 68 2d 37 2e 35 20 7b 63 6f 6d 70 69 6c each-7.5 {compil
6ad0: 65 64 20 65 6d 70 74 79 20 76 61 72 20 6c 69 73 ed empty var lis
6ae0: 74 7d 20 7b 0d 0a 2b 20 20 20 20 70 72 6f 63 20 t} {..+ proc
6af0: 66 6f 6f 20 7b 7d 20 7b 0d 0a 2b 09 6d 61 70 65 foo {} {..+.mape
6b00: 61 63 68 20 7b 7d 20 78 20 7b 0d 0a 2b 09 20 20 ach {} x {..+.
6b10: 20 20 65 72 72 6f 72 20 22 72 65 61 63 68 65 64 error "reached
6b20: 20 62 6f 64 79 22 0d 0a 2b 09 7d 0d 0a 2b 20 20 body"..+.}..+
6b30: 20 20 7d 0d 0a 2b 20 20 20 20 6c 69 73 74 20 5b }..+ list [
6b40: 63 61 74 63 68 20 7b 20 66 6f 6f 20 7d 20 6d 73 catch { foo } ms
6b50: 67 5d 20 24 6d 73 67 0d 0a 2b 7d 20 7b 31 20 7b g] $msg..+} {1 {
6b60: 66 6f 72 65 61 63 68 20 76 61 72 6c 69 73 74 20 foreach varlist
6b70: 69 73 20 65 6d 70 74 79 7d 7d 0d 0a 2b 0d 0a 2b is empty}}..+..+
6b80: 74 65 73 74 20 6d 61 70 65 61 63 68 2d 37 2e 36 test mapeach-7.6
6b90: 20 7b 6d 61 70 65 61 63 68 3a 20 72 65 6c 61 74 {mapeach: relat
6ba0: 65 64 20 74 6f 20 22 66 6f 72 65 61 63 68 22 20 ed to "foreach"
6bb0: 5b 42 75 67 20 31 36 37 31 30 38 37 5d 7d 20 2d [Bug 1671087]} -
6bc0: 73 65 74 75 70 20 7b 0d 0a 2b 20 20 20 20 70 72 setup {..+ pr
6bd0: 6f 63 20 64 65 6d 6f 20 7b 7d 20 7b 0d 0a 2b 09 oc demo {} {..+.
6be0: 73 65 74 20 76 61 6c 73 20 7b 31 20 32 20 33 20 set vals {1 2 3
6bf0: 34 7d 0d 0a 2b 09 74 72 61 63 65 20 61 64 64 20 4}..+.trace add
6c00: 76 61 72 69 61 62 6c 65 20 78 20 77 72 69 74 65 variable x write
6c10: 20 7b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {string length
6c20: 24 76 61 6c 73 20 3b 23 20 7d 0d 0a 2b 09 6d 61 $vals ;# }..+.ma
6c30: 70 65 61 63 68 20 7b 78 20 79 7d 20 24 76 61 6c peach {x y} $val
6c40: 73 20 7b 66 6f 72 6d 61 74 20 24 79 7d 0d 0a 2b s {format $y}..+
6c50: 20 20 20 20 7d 0d 0a 2b 7d 20 2d 62 6f 64 79 20 }..+} -body
6c60: 7b 0d 0a 2b 20 20 20 20 64 65 6d 6f 0d 0a 2b 7d {..+ demo..+}
6c70: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 2b 20 20 -cleanup {..+
6c80: 20 20 72 65 6e 61 6d 65 20 64 65 6d 6f 20 7b 7d rename demo {}
6c90: 0d 0a 2b 7d 20 2d 72 65 73 75 6c 74 20 7b 32 20 ..+} -result {2
6ca0: 34 7d 0d 0a 2b 0d 0a 2b 23 20 48 75 67 65 20 6c 4}..+..+# Huge l
6cb0: 69 73 74 73 20 6d 75 73 74 20 6e 6f 74 20 6f 76 ists must not ov
6cc0: 65 72 66 6c 6f 77 20 74 68 65 20 62 79 74 65 63 erflow the bytec
6cd0: 6f 64 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 ode interpreter
6ce0: 28 64 65 76 65 6c 6f 70 6d 65 6e 74 20 62 75 67 (development bug
6cf0: 29 0d 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 68 )..+test mapeach
6d00: 2d 37 2e 37 20 7b 68 75 67 65 20 6c 69 73 74 20 -7.7 {huge list
6d10: 6e 6f 6e 2d 63 6f 6d 70 69 6c 65 64 7d 20 7b 0d non-compiled} {.
6d20: 0a 2b 20 20 73 65 74 20 78 20 5b 6d 61 70 65 61 .+ set x [mapea
6d30: 63 68 20 61 20 5b 6c 72 65 70 65 61 74 20 31 30 ch a [lrepeat 10
6d40: 30 30 30 30 30 20 78 5d 20 7b 20 73 65 74 20 62 00000 x] { set b
6d50: 20 79 24 61 20 7d 5d 0d 0a 2b 20 20 6c 69 73 74 y$a }]..+ list
6d60: 20 24 62 20 5b 6c 6c 65 6e 67 74 68 20 24 78 5d $b [llength $x]
6d70: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length
6d80: 24 78 5d 0d 0a 2b 7d 20 7b 79 78 20 31 30 30 30 $x]..+} {yx 1000
6d90: 30 30 30 20 32 39 39 39 39 39 39 7d 0d 0a 2b 0d 000 2999999}..+.
6da0: 0a 2b 74 65 73 74 20 6d 61 70 65 61 63 68 2d 37 .+test mapeach-7
6db0: 2e 38 20 7b 68 75 67 65 20 6c 69 73 74 20 63 6f .8 {huge list co
6dc0: 6d 70 69 6c 65 64 7d 20 7b 0d 0a 2b 20 20 73 65 mpiled} {..+ se
6dd0: 74 20 78 20 5b 61 70 70 6c 79 20 7b 7b 74 69 6d t x [apply {{tim
6de0: 65 73 7d 20 7b 20 6d 61 70 65 61 63 68 20 61 20 es} { mapeach a
6df0: 5b 6c 72 65 70 65 61 74 20 24 74 69 6d 65 73 20 [lrepeat $times
6e00: 78 5d 20 7b 20 73 65 74 20 62 20 79 24 61 20 7d x] { set b y$a }
6e10: 7d 7d 20 31 30 30 30 30 30 30 5d 0d 0a 2b 20 20 }} 1000000]..+
6e20: 6c 69 73 74 20 24 62 20 5b 6c 6c 65 6e 67 74 68 list $b [llength
6e30: 20 24 78 5d 20 5b 73 74 72 69 6e 67 20 6c 65 6e $x] [string len
6e40: 67 74 68 20 24 78 5d 0d 0a 2b 7d 20 7b 79 78 20 gth $x]..+} {yx
6e50: 31 30 30 30 30 30 30 20 32 39 39 39 39 39 39 7d 1000000 2999999}
6e60: 0d 0a 2b 0d 0a 2b 0d 0a 2b 23 20 2d 2d 2d 2d 2d ..+..+..+# -----
6e70: 20 43 6f 72 6f 75 74 69 6e 65 73 20 2d 2d 2d 2d Coroutines ----
6e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2b 0d 0a 2b 74 ---------..+..+t
6ec0: 65 73 74 20 6d 61 70 65 61 63 68 2d 38 2e 31 20 est mapeach-8.1
6ed0: 7b 6d 61 70 65 61 63 68 20 6e 6f 6e 2d 63 6f 6d {mapeach non-com
6ee0: 70 69 6c 65 64 20 77 69 74 68 20 63 6f 72 6f 75 piled with corou
6ef0: 74 69 6e 65 73 7d 20 7b 0d 0a 2b 20 20 63 6f 72 tines} {..+ cor
6f00: 6f 75 74 69 6e 65 20 63 6f 72 6f 20 61 70 70 6c outine coro appl
6f10: 79 20 7b 7b 7d 20 7b 0d 0a 2b 20 20 20 20 73 65 y {{} {..+ se
6f20: 74 20 76 61 6c 75 65 73 20 5b 79 69 65 6c 64 20 t values [yield
6f30: 5b 69 6e 66 6f 20 63 6f 72 6f 75 74 69 6e 65 5d [info coroutine]
6f40: 5d 0d 0a 2b 20 20 20 20 65 76 61 6c 20 6d 61 70 ]..+ eval map
6f50: 65 61 63 68 20 69 20 5b 6c 69 73 74 20 24 76 61 each i [list $va
6f60: 6c 75 65 73 5d 20 7b 7b 20 79 69 65 6c 64 20 24 lues] {{ yield $
6f70: 69 20 7d 7d 0d 0a 2b 20 20 7d 7d 20 3b 23 20 72 i }}..+ }} ;# r
6f80: 65 74 75 72 6e 73 20 27 63 6f 72 6f 27 0d 0a 2b eturns 'coro'..+
6f90: 20 20 63 6f 72 6f 20 7b 61 20 62 20 63 20 64 20 coro {a b c d
6fa0: 65 20 66 7d 20 3b 23 20 2d 3e 20 61 0d 0a 2b 20 e f} ;# -> a..+
6fb0: 20 63 6f 72 6f 20 31 20 3b 23 20 2d 3e 20 62 0d coro 1 ;# -> b.
6fc0: 0a 2b 20 20 63 6f 72 6f 20 32 20 3b 23 20 2d 3e .+ coro 2 ;# ->
6fd0: 20 63 0d 0a 2b 20 20 63 6f 72 6f 20 33 20 3b 23 c..+ coro 3 ;#
6fe0: 20 2d 3e 20 64 0d 0a 2b 20 20 63 6f 72 6f 20 34 -> d..+ coro 4
6ff0: 20 3b 23 20 2d 3e 20 65 0d 0a 2b 20 20 63 6f 72 ;# -> e..+ cor
7000: 6f 20 35 20 3b 23 20 2d 3e 20 66 0d 0a 2b 20 20 o 5 ;# -> f..+
7010: 6c 69 73 74 20 5b 63 6f 72 6f 20 36 5d 20 5b 69 list [coro 6] [i
7020: 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 63 6f 72 nfo commands cor
7030: 6f 5d 0d 0a 2b 7d 20 7b 7b 31 20 32 20 33 20 34 o]..+} {{1 2 3 4
7040: 20 35 20 36 7d 20 7b 7d 7d 0d 0a 2b 0d 0a 2b 74 5 6} {}}..+..+t
7050: 65 73 74 20 6d 61 70 65 61 63 68 2d 38 2e 32 20 est mapeach-8.2
7060: 7b 6d 61 70 65 61 63 68 20 63 6f 6d 70 69 6c 65 {mapeach compile
7070: 64 20 77 69 74 68 20 63 6f 72 6f 75 74 69 6e 65 d with coroutine
7080: 73 7d 20 7b 0d 0a 2b 20 20 63 6f 72 6f 75 74 69 s} {..+ corouti
7090: 6e 65 20 63 6f 72 6f 20 61 70 70 6c 79 20 7b 7b ne coro apply {{
70a0: 7d 20 7b 0d 0a 2b 20 20 20 20 73 65 74 20 76 61 } {..+ set va
70b0: 6c 75 65 73 20 5b 79 69 65 6c 64 20 5b 69 6e 66 lues [yield [inf
70c0: 6f 20 63 6f 72 6f 75 74 69 6e 65 5d 5d 0d 0a 2b o coroutine]]..+
70d0: 20 20 20 20 6d 61 70 65 61 63 68 20 69 20 24 76 mapeach i $v
70e0: 61 6c 75 65 73 20 7b 20 79 69 65 6c 64 20 24 69 alues { yield $i
70f0: 20 7d 0d 0a 2b 20 20 7d 7d 20 3b 23 20 72 65 74 }..+ }} ;# ret
7100: 75 72 6e 73 20 27 63 6f 72 6f 27 0d 0a 2b 20 20 urns 'coro'..+
7110: 63 6f 72 6f 20 7b 61 20 62 20 63 20 64 20 65 20 coro {a b c d e
7120: 66 7d 20 3b 23 20 2d 3e 20 61 0d 0a 2b 20 20 63 f} ;# -> a..+ c
7130: 6f 72 6f 20 31 20 3b 23 20 2d 3e 20 62 0d 0a 2b oro 1 ;# -> b..+
7140: 20 20 63 6f 72 6f 20 32 20 3b 23 20 2d 3e 20 63 coro 2 ;# -> c
7150: 0d 0a 2b 20 20 63 6f 72 6f 20 33 20 3b 23 20 2d ..+ coro 3 ;# -
7160: 3e 20 64 0d 0a 2b 20 20 63 6f 72 6f 20 34 20 3b > d..+ coro 4 ;
7170: 23 20 2d 3e 20 65 0d 0a 2b 20 20 63 6f 72 6f 20 # -> e..+ coro
7180: 35 20 3b 23 20 2d 3e 20 66 0d 0a 2b 20 20 6c 69 5 ;# -> f..+ li
7190: 73 74 20 5b 63 6f 72 6f 20 36 5d 20 5b 69 6e 66 st [coro 6] [inf
71a0: 6f 20 63 6f 6d 6d 61 6e 64 73 20 63 6f 72 6f 5d o commands coro]
71b0: 0d 0a 2b 7d 20 7b 7b 31 20 32 20 33 20 34 20 35 ..+} {{1 2 3 4 5
71c0: 20 36 7d 20 7b 7d 7d 0d 0a 2b 0d 0a 2b 0d 0a 2b 6} {}}..+..+..+
71d0: 23 20 63 6c 65 61 6e 75 70 0d 0a 2b 63 61 74 63 # cleanup..+catc
71e0: 68 20 7b 75 6e 73 65 74 20 61 7d 0d 0a 2b 63 61 h {unset a}..+ca
71f0: 74 63 68 20 7b 75 6e 73 65 74 20 78 7d 0d 0a 2b tch {unset x}..+
7200: 63 61 74 63 68 20 7b 72 65 6e 61 6d 65 20 66 6f catch {rename fo
7210: 6f 20 7b 7d 7d 0d 0a 2b 3a 3a 74 63 6c 74 65 73 o {}}..+::tcltes
7220: 74 3a 3a 63 6c 65 61 6e 75 70 54 65 73 74 73 0d t::cleanupTests.
7230: 0a 2b 72 65 74 75 72 6e 0d 0a 0d 0a .+return....