Tcl Source Code

Hex Artifact Content
Login

Artifact ed6062067de551f82430e33fad5f41894c241fbc:

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....