Tcl Source Code

Hex Artifact Content
Login

Artifact f937713f44c319e11038a4335a55dd3819ee3dda:

Attachment "684982-alt.patch" to ticket [684982ffff] added by dgp 2003-03-13 09:39:58.
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 0a 3d 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 0a 52 43  =============.RC
0060: 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74  S file: /cvsroot
0070: 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63  /tcl/tcl/generic
0080: 2f 74 63 6c 42 61 73 69 63 2e 63 2c 76 0a 72 65  /tclBasic.c,v.re
0090: 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f  trieving revisio
00a0: 6e 20 31 2e 37 36 0a 64 69 66 66 20 2d 75 20 2d  n 1.76.diff -u -
00b0: 72 31 2e 37 36 20 74 63 6c 42 61 73 69 63 2e 63  r1.76 tclBasic.c
00c0: 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c  .--- generic/tcl
00d0: 42 61 73 69 63 2e 63 09 35 20 4d 61 72 20 32 30  Basic.c.5 Mar 20
00e0: 30 33 20 32 32 3a 33 31 3a 32 32 20 2d 30 30 30  03 22:31:22 -000
00f0: 30 09 31 2e 37 36 0a 2b 2b 2b 20 67 65 6e 65 72  0.1.76.+++ gener
0100: 69 63 2f 74 63 6c 42 61 73 69 63 2e 63 09 31 33  ic/tclBasic.c.13
0110: 20 4d 61 72 20 32 30 30 33 20 30 32 3a 32 36 3a   Mar 2003 02:26:
0120: 35 38 20 2d 30 30 30 30 0a 40 40 20 2d 33 34 36  58 -0000.@@ -346
0130: 2c 37 20 2b 33 34 36 2c 36 20 40 40 0a 20 20 20  ,7 +346,6 @@.   
0140: 20 20 54 63 6c 5f 49 6e 69 74 48 61 73 68 54 61    Tcl_InitHashTa
0150: 62 6c 65 28 26 69 50 74 72 2d 3e 70 61 63 6b 61  ble(&iPtr->packa
0160: 67 65 54 61 62 6c 65 2c 20 54 43 4c 5f 53 54 52  geTable, TCL_STR
0170: 49 4e 47 5f 4b 45 59 53 29 3b 0a 20 20 20 20 20  ING_KEYS);.     
0180: 69 50 74 72 2d 3e 70 61 63 6b 61 67 65 55 6e 6b  iPtr->packageUnk
0190: 6e 6f 77 6e 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20  nown = NULL;.   
01a0: 20 20 69 50 74 72 2d 3e 63 6d 64 43 6f 75 6e 74    iPtr->cmdCount
01b0: 20 3d 20 30 3b 0a 2d 20 20 20 20 69 50 74 72 2d   = 0;.-    iPtr-
01c0: 3e 74 65 72 6d 4f 66 66 73 65 74 20 3d 20 30 3b  >termOffset = 0;
01d0: 0a 20 20 20 20 20 54 63 6c 49 6e 69 74 4c 69 74  .     TclInitLit
01e0: 65 72 61 6c 54 61 62 6c 65 28 26 28 69 50 74 72  eralTable(&(iPtr
01f0: 2d 3e 6c 69 74 65 72 61 6c 54 61 62 6c 65 29 29  ->literalTable))
0200: 3b 0a 20 20 20 20 20 69 50 74 72 2d 3e 63 6f 6d  ;.     iPtr->com
0210: 70 69 6c 65 45 70 6f 63 68 20 3d 20 30 3b 0a 20  pileEpoch = 0;. 
0220: 20 20 20 20 69 50 74 72 2d 3e 63 6f 6d 70 69 6c      iPtr->compil
0230: 65 64 50 72 6f 63 50 74 72 20 3d 20 4e 55 4c 4c  edProcPtr = NULL
0240: 3b 0a 40 40 20 2d 33 33 34 37 2c 31 34 33 20 2b  ;.@@ -3347,143 +
0250: 33 33 34 36 2c 37 20 40 40 0a 20 20 20 20 20 69  3346,7 @@.     i
0260: 6e 74 20 63 6f 75 6e 74 3b 09 09 09 2f 2a 20 4e  nt count;.../* N
0270: 75 6d 62 65 72 20 6f 66 20 74 6f 6b 65 6e 73 20  umber of tokens 
0280: 74 6f 20 63 6f 6e 73 69 64 65 72 20 61 74 20 74  to consider at t
0290: 6f 6b 65 6e 50 74 72 2e 0a 20 09 09 09 09 20 2a  okenPtr.. .... *
02a0: 20 4d 75 73 74 20 62 65 20 61 74 20 6c 65 61 73   Must be at leas
02b0: 74 20 31 2e 20 2a 2f 0a 20 7b 0a 2d 20 20 20 20  t 1. */. {.-    
02c0: 54 63 6c 5f 4f 62 6a 20 2a 72 65 73 75 6c 74 50  Tcl_Obj *resultP
02d0: 74 72 2c 20 2a 69 6e 64 65 78 50 74 72 2c 20 2a  tr, *indexPtr, *
02e0: 76 61 6c 75 65 50 74 72 3b 0a 2d 20 20 20 20 63  valuePtr;.-    c
02f0: 68 61 72 20 62 75 66 66 65 72 5b 54 43 4c 5f 55  har buffer[TCL_U
0300: 54 46 5f 4d 41 58 5d 3b 0a 2d 23 69 66 64 65 66  TF_MAX];.-#ifdef
0310: 20 54 43 4c 5f 4d 45 4d 5f 44 45 42 55 47 0a 2d   TCL_MEM_DEBUG.-
0320: 23 20 20 20 64 65 66 69 6e 65 20 20 4d 41 58 5f  #   define  MAX_
0330: 56 41 52 5f 43 48 41 52 53 20 35 0a 2d 23 65 6c  VAR_CHARS 5.-#el
0340: 73 65 0a 2d 23 20 20 20 64 65 66 69 6e 65 20 20  se.-#   define  
0350: 4d 41 58 5f 56 41 52 5f 43 48 41 52 53 20 33 30  MAX_VAR_CHARS 30
0360: 0a 2d 23 65 6e 64 69 66 0a 2d 20 20 20 20 63 68  .-#endif.-    ch
0370: 61 72 20 6e 61 6d 65 42 75 66 66 65 72 5b 4d 41  ar nameBuffer[MA
0380: 58 5f 56 41 52 5f 43 48 41 52 53 2b 31 5d 3b 0a  X_VAR_CHARS+1];.
0390: 2d 20 20 20 20 63 68 61 72 20 2a 76 61 72 4e 61  -    char *varNa
03a0: 6d 65 2c 20 2a 69 6e 64 65 78 3b 0a 2d 20 20 20  me, *index;.-   
03b0: 20 43 4f 4e 53 54 20 63 68 61 72 20 2a 70 20 3d   CONST char *p =
03c0: 20 4e 55 4c 4c 3b 09 2f 2a 20 49 6e 69 74 69 61   NULL;./* Initia
03d0: 6c 69 7a 65 64 20 74 6f 20 61 76 6f 69 64 20 63  lized to avoid c
03e0: 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e  ompiler warning.
03f0: 20 2a 2f 0a 2d 20 20 20 20 69 6e 74 20 6c 65 6e   */.-    int len
0400: 67 74 68 2c 20 63 6f 64 65 3b 0a 2d 0a 2d 20 20  gth, code;.-.-  
0410: 20 20 2f 2a 0a 2d 20 20 20 20 20 2a 20 54 68 65    /*.-     * The
0420: 20 6f 6e 6c 79 20 74 72 69 63 6b 79 20 74 68 69   only tricky thi
0430: 6e 67 20 61 62 6f 75 74 20 74 68 69 73 20 70 72  ng about this pr
0440: 6f 63 65 64 75 72 65 20 69 73 20 74 68 61 74 20  ocedure is that 
0450: 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 2d  it attempts to.-
0460: 20 20 20 20 20 2a 20 61 76 6f 69 64 20 6f 62 6a       * avoid obj
0470: 65 63 74 20 63 72 65 61 74 69 6f 6e 20 61 6e 64  ect creation and
0480: 20 73 74 72 69 6e 67 20 63 6f 70 79 69 6e 67 20   string copying 
0490: 77 68 65 6e 65 76 65 72 20 70 6f 73 73 69 62 6c  whenever possibl
04a0: 65 2e 20 20 46 6f 72 0a 2d 20 20 20 20 20 2a 20  e.  For.-     * 
04b0: 65 78 61 6d 70 6c 65 2c 20 69 66 20 74 68 65 20  example, if the 
04c0: 76 61 6c 75 65 20 69 73 20 6a 75 73 74 20 61 20  value is just a 
04d0: 6e 65 73 74 65 64 20 63 6f 6d 6d 61 6e 64 2c 20  nested command, 
04e0: 74 68 65 6e 20 75 73 65 20 74 68 65 0a 2d 20 20  then use the.-  
04f0: 20 20 20 2a 20 63 6f 6d 6d 61 6e 64 27 73 20 72     * command's r
0500: 65 73 75 6c 74 20 6f 62 6a 65 63 74 20 64 69 72  esult object dir
0510: 65 63 74 6c 79 2e 0a 2d 20 20 20 20 20 2a 2f 0a  ectly..-     */.
0520: 2d 0a 2d 20 20 20 20 63 6f 64 65 20 3d 20 54 43  -.-    code = TC
0530: 4c 5f 4f 4b 3b 0a 2d 20 20 20 20 72 65 73 75 6c  L_OK;.-    resul
0540: 74 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 2d 20 20  tPtr = NULL;.-  
0550: 20 20 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c    Tcl_ResetResul
0560: 74 28 69 6e 74 65 72 70 29 3b 0a 2d 20 20 20 20  t(interp);.-    
0570: 66 6f 72 20 28 20 3b 20 63 6f 75 6e 74 20 3e 20  for ( ; count > 
0580: 30 3b 20 63 6f 75 6e 74 2d 2d 2c 20 74 6f 6b 65  0; count--, toke
0590: 6e 50 74 72 2b 2b 29 20 7b 0a 2d 09 76 61 6c 75  nPtr++) {.-.valu
05a0: 65 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 2d 0a 2d  ePtr = NULL;.-.-
05b0: 09 2f 2a 0a 2d 09 20 2a 20 54 68 65 20 73 77 69  ./*.-. * The swi
05c0: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 62 65  tch statement be
05d0: 6c 6f 77 20 63 6f 6d 70 75 74 65 73 20 74 68 65  low computes the
05e0: 20 6e 65 78 74 20 76 61 6c 75 65 20 74 6f 20 62   next value to b
05f0: 65 0a 2d 09 20 2a 20 63 6f 6e 63 61 74 20 74 6f  e.-. * concat to
0600: 20 74 68 65 20 72 65 73 75 6c 74 2c 20 61 73 20   the result, as 
0610: 65 69 74 68 65 72 20 61 20 72 61 6e 67 65 20 6f  either a range o
0620: 66 20 74 65 78 74 20 6f 72 20 61 6e 0a 2d 09 20  f text or an.-. 
0630: 2a 20 6f 62 6a 65 63 74 2e 0a 2d 09 20 2a 2f 0a  * object..-. */.
0640: 2d 0a 2d 09 73 77 69 74 63 68 20 28 74 6f 6b 65  -.-.switch (toke
0650: 6e 50 74 72 2d 3e 74 79 70 65 29 20 7b 0a 2d 09  nPtr->type) {.-.
0660: 20 20 20 20 63 61 73 65 20 54 43 4c 5f 54 4f 4b      case TCL_TOK
0670: 45 4e 5f 54 45 58 54 3a 0a 2d 09 09 70 20 3d 20  EN_TEXT:.-..p = 
0680: 74 6f 6b 65 6e 50 74 72 2d 3e 73 74 61 72 74 3b  tokenPtr->start;
0690: 0a 2d 09 09 6c 65 6e 67 74 68 20 3d 20 74 6f 6b  .-..length = tok
06a0: 65 6e 50 74 72 2d 3e 73 69 7a 65 3b 0a 2d 09 09  enPtr->size;.-..
06b0: 62 72 65 61 6b 3b 0a 2d 0a 2d 09 20 20 20 20 63  break;.-.-.    c
06c0: 61 73 65 20 54 43 4c 5f 54 4f 4b 45 4e 5f 42 53  ase TCL_TOKEN_BS
06d0: 3a 0a 2d 09 09 6c 65 6e 67 74 68 20 3d 20 54 63  :.-..length = Tc
06e0: 6c 5f 55 74 66 42 61 63 6b 73 6c 61 73 68 28 74  l_UtfBackslash(t
06f0: 6f 6b 65 6e 50 74 72 2d 3e 73 74 61 72 74 2c 20  okenPtr->start, 
0700: 28 69 6e 74 20 2a 29 20 4e 55 4c 4c 2c 0a 2d 09  (int *) NULL,.-.
0710: 09 09 62 75 66 66 65 72 29 3b 0a 2d 09 09 70 20  ..buffer);.-..p 
0720: 3d 20 62 75 66 66 65 72 3b 0a 2d 09 09 62 72 65  = buffer;.-..bre
0730: 61 6b 3b 0a 2d 0a 2d 09 20 20 20 20 63 61 73 65  ak;.-.-.    case
0740: 20 54 43 4c 5f 54 4f 4b 45 4e 5f 43 4f 4d 4d 41   TCL_TOKEN_COMMA
0750: 4e 44 3a 0a 2d 09 09 63 6f 64 65 20 3d 20 54 63  ND:.-..code = Tc
0760: 6c 5f 45 76 61 6c 45 78 28 69 6e 74 65 72 70 2c  l_EvalEx(interp,
0770: 20 74 6f 6b 65 6e 50 74 72 2d 3e 73 74 61 72 74   tokenPtr->start
0780: 2b 31 2c 20 74 6f 6b 65 6e 50 74 72 2d 3e 73 69  +1, tokenPtr->si
0790: 7a 65 2d 32 2c 0a 2d 09 09 09 30 29 3b 0a 2d 09  ze-2,.-...0);.-.
07a0: 09 69 66 20 28 63 6f 64 65 20 21 3d 20 54 43 4c  .if (code != TCL
07b0: 5f 4f 4b 29 20 7b 0a 2d 09 09 20 20 20 20 67 6f  _OK) {.-..    go
07c0: 74 6f 20 64 6f 6e 65 3b 0a 2d 09 09 7d 0a 2d 09  to done;.-..}.-.
07d0: 09 76 61 6c 75 65 50 74 72 20 3d 20 54 63 6c 5f  .valuePtr = Tcl_
07e0: 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  GetObjResult(int
07f0: 65 72 70 29 3b 0a 2d 09 09 62 72 65 61 6b 3b 0a  erp);.-..break;.
0800: 2d 0a 2d 09 20 20 20 20 63 61 73 65 20 54 43 4c  -.-.    case TCL
0810: 5f 54 4f 4b 45 4e 5f 56 41 52 49 41 42 4c 45 3a  _TOKEN_VARIABLE:
0820: 0a 2d 09 09 69 66 20 28 74 6f 6b 65 6e 50 74 72  .-..if (tokenPtr
0830: 2d 3e 6e 75 6d 43 6f 6d 70 6f 6e 65 6e 74 73 20  ->numComponents 
0840: 3d 3d 20 31 29 20 7b 0a 2d 09 09 20 20 20 20 69  == 1) {.-..    i
0850: 6e 64 65 78 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a  ndexPtr = NULL;.
0860: 2d 09 09 20 20 20 20 69 6e 64 65 78 20 3d 20 4e  -..    index = N
0870: 55 4c 4c 3b 0a 2d 09 09 7d 20 65 6c 73 65 20 7b  ULL;.-..} else {
0880: 0a 2d 09 09 20 20 20 20 63 6f 64 65 20 3d 20 54  .-..    code = T
0890: 63 6c 5f 45 76 61 6c 54 6f 6b 65 6e 73 53 74 61  cl_EvalTokensSta
08a0: 6e 64 61 72 64 28 69 6e 74 65 72 70 2c 20 74 6f  ndard(interp, to
08b0: 6b 65 6e 50 74 72 2b 32 2c 0a 2d 09 09 09 20 20  kenPtr+2,.-...  
08c0: 20 20 74 6f 6b 65 6e 50 74 72 2d 3e 6e 75 6d 43    tokenPtr->numC
08d0: 6f 6d 70 6f 6e 65 6e 74 73 20 2d 20 31 29 3b 0a  omponents - 1);.
08e0: 2d 09 09 20 20 20 20 69 66 20 28 63 6f 64 65 20  -..    if (code 
08f0: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2d 09 09  != TCL_OK) {.-..
0900: 09 67 6f 74 6f 20 64 6f 6e 65 3b 0a 2d 09 09 20  .goto done;.-.. 
0910: 20 20 20 7d 0a 2d 09 09 20 20 20 20 69 6e 64 65     }.-..    inde
0920: 78 50 74 72 20 3d 20 54 63 6c 5f 47 65 74 4f 62  xPtr = Tcl_GetOb
0930: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b  jResult(interp);
0940: 0a 2d 09 09 20 20 20 20 54 63 6c 5f 49 6e 63 72  .-..    Tcl_Incr
0950: 52 65 66 43 6f 75 6e 74 28 69 6e 64 65 78 50 74  RefCount(indexPt
0960: 72 29 3b 0a 2d 09 09 20 20 20 20 69 6e 64 65 78  r);.-..    index
0970: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
0980: 28 69 6e 64 65 78 50 74 72 29 3b 0a 2d 09 09 7d  (indexPtr);.-..}
0990: 0a 2d 0a 2d 09 09 2f 2a 0a 2d 09 09 20 2a 20 57  .-.-../*.-.. * W
09a0: 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 61  e have to make a
09b0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 72   copy of the var
09c0: 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 6f 72  iable name in or
09d0: 64 65 72 0a 2d 09 09 20 2a 20 74 6f 20 68 61 76  der.-.. * to hav
09e0: 65 20 61 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61  e a null-termina
09f0: 74 65 64 20 73 74 72 69 6e 67 2e 20 20 57 65 20  ted string.  We 
0a00: 63 61 6e 27 74 20 6d 61 6b 65 20 61 0a 2d 09 09  can't make a.-..
0a10: 20 2a 20 74 65 6d 70 6f 72 61 72 79 20 6d 6f 64   * temporary mod
0a20: 69 66 69 63 61 74 69 6f 6e 20 74 6f 20 74 68 65  ification to the
0a30: 20 73 63 72 69 70 74 20 74 6f 20 6e 75 6c 6c 2d   script to null-
0a40: 74 65 72 6d 69 6e 61 74 65 0a 2d 09 09 20 2a 20  terminate.-.. * 
0a50: 74 68 65 20 6e 61 6d 65 2c 20 62 65 63 61 75 73  the name, becaus
0a60: 65 20 61 20 74 72 61 63 65 20 63 61 6c 6c 62 61  e a trace callba
0a70: 63 6b 20 6d 69 67 68 74 20 70 6f 74 65 6e 74 69  ck might potenti
0a80: 61 6c 6c 79 0a 2d 09 09 20 2a 20 72 65 75 73 65  ally.-.. * reuse
0a90: 20 74 68 65 20 73 63 72 69 70 74 20 61 6e 64 20   the script and 
0aa0: 62 65 20 61 66 66 65 63 74 65 64 20 62 79 20 74  be affected by t
0ab0: 68 65 20 6e 75 6c 6c 20 63 68 61 72 61 63 74 65  he null characte
0ac0: 72 2e 0a 2d 09 09 20 2a 2f 0a 2d 0a 2d 09 09 69  r..-.. */.-.-..i
0ad0: 66 20 28 74 6f 6b 65 6e 50 74 72 5b 31 5d 2e 73  f (tokenPtr[1].s
0ae0: 69 7a 65 20 3c 3d 20 4d 41 58 5f 56 41 52 5f 43  ize <= MAX_VAR_C
0af0: 48 41 52 53 29 20 7b 0a 2d 09 09 20 20 20 20 76  HARS) {.-..    v
0b00: 61 72 4e 61 6d 65 20 3d 20 6e 61 6d 65 42 75 66  arName = nameBuf
0b10: 66 65 72 3b 0a 2d 09 09 7d 20 65 6c 73 65 20 7b  fer;.-..} else {
0b20: 0a 2d 09 09 20 20 20 20 76 61 72 4e 61 6d 65 20  .-..    varName 
0b30: 3d 20 63 6b 61 6c 6c 6f 63 28 28 75 6e 73 69 67  = ckalloc((unsig
0b40: 6e 65 64 29 20 28 74 6f 6b 65 6e 50 74 72 5b 31  ned) (tokenPtr[1
0b50: 5d 2e 73 69 7a 65 20 2b 20 31 29 29 3b 0a 2d 09  ].size + 1));.-.
0b60: 09 7d 0a 2d 09 09 73 74 72 6e 63 70 79 28 76 61  .}.-..strncpy(va
0b70: 72 4e 61 6d 65 2c 20 74 6f 6b 65 6e 50 74 72 5b  rName, tokenPtr[
0b80: 31 5d 2e 73 74 61 72 74 2c 20 28 73 69 7a 65 5f  1].start, (size_
0b90: 74 29 20 74 6f 6b 65 6e 50 74 72 5b 31 5d 2e 73  t) tokenPtr[1].s
0ba0: 69 7a 65 29 3b 0a 2d 09 09 76 61 72 4e 61 6d 65  ize);.-..varName
0bb0: 5b 74 6f 6b 65 6e 50 74 72 5b 31 5d 2e 73 69 7a  [tokenPtr[1].siz
0bc0: 65 5d 20 3d 20 30 3b 0a 2d 09 09 76 61 6c 75 65  e] = 0;.-..value
0bd0: 50 74 72 20 3d 20 54 63 6c 5f 47 65 74 56 61 72  Ptr = Tcl_GetVar
0be0: 32 45 78 28 69 6e 74 65 72 70 2c 20 76 61 72 4e  2Ex(interp, varN
0bf0: 61 6d 65 2c 20 69 6e 64 65 78 2c 0a 2d 09 09 09  ame, index,.-...
0c00: 54 43 4c 5f 4c 45 41 56 45 5f 45 52 52 5f 4d 53  TCL_LEAVE_ERR_MS
0c10: 47 29 3b 0a 2d 09 09 69 66 20 28 76 61 72 4e 61  G);.-..if (varNa
0c20: 6d 65 20 21 3d 20 6e 61 6d 65 42 75 66 66 65 72  me != nameBuffer
0c30: 29 20 7b 0a 2d 09 09 20 20 20 20 63 6b 66 72 65  ) {.-..    ckfre
0c40: 65 28 76 61 72 4e 61 6d 65 29 3b 0a 2d 09 09 7d  e(varName);.-..}
0c50: 0a 2d 09 09 69 66 20 28 69 6e 64 65 78 50 74 72  .-..if (indexPtr
0c60: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 09 09 20   != NULL) {.-.. 
0c70: 20 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f     Tcl_DecrRefCo
0c80: 75 6e 74 28 69 6e 64 65 78 50 74 72 29 3b 0a 2d  unt(indexPtr);.-
0c90: 09 09 7d 0a 2d 09 09 69 66 20 28 76 61 6c 75 65  ..}.-..if (value
0ca0: 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2d  Ptr == NULL) {.-
0cb0: 09 09 20 20 20 20 63 6f 64 65 20 3d 20 54 43 4c  ..    code = TCL
0cc0: 5f 45 52 52 4f 52 3b 0a 2d 09 09 20 20 20 20 67  _ERROR;.-..    g
0cd0: 6f 74 6f 20 64 6f 6e 65 3b 0a 2d 09 09 7d 0a 2d  oto done;.-..}.-
0ce0: 09 09 63 6f 75 6e 74 20 2d 3d 20 74 6f 6b 65 6e  ..count -= token
0cf0: 50 74 72 2d 3e 6e 75 6d 43 6f 6d 70 6f 6e 65 6e  Ptr->numComponen
0d00: 74 73 3b 0a 2d 09 09 74 6f 6b 65 6e 50 74 72 20  ts;.-..tokenPtr 
0d10: 2b 3d 20 74 6f 6b 65 6e 50 74 72 2d 3e 6e 75 6d  += tokenPtr->num
0d20: 43 6f 6d 70 6f 6e 65 6e 74 73 3b 0a 2d 09 09 62  Components;.-..b
0d30: 72 65 61 6b 3b 0a 2d 0a 2d 09 20 20 20 20 64 65  reak;.-.-.    de
0d40: 66 61 75 6c 74 3a 0a 2d 09 09 70 61 6e 69 63 28  fault:.-..panic(
0d50: 22 75 6e 65 78 70 65 63 74 65 64 20 74 6f 6b 65  "unexpected toke
0d60: 6e 20 74 79 70 65 20 69 6e 20 54 63 6c 5f 45 76  n type in Tcl_Ev
0d70: 61 6c 54 6f 6b 65 6e 73 53 74 61 6e 64 61 72 64  alTokensStandard
0d80: 22 29 3b 0a 2d 09 7d 0a 2d 0a 2d 09 2f 2a 0a 2d  ");.-.}.-.-./*.-
0d90: 09 20 2a 20 49 66 20 76 61 6c 75 65 50 74 72 20  . * If valuePtr 
0da0: 69 73 6e 27 74 20 4e 55 4c 4c 2c 20 74 68 65 20  isn't NULL, the 
0db0: 6e 65 78 74 20 70 69 65 63 65 20 6f 66 20 74 65  next piece of te
0dc0: 78 74 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68  xt comes from th
0dd0: 61 74 0a 2d 09 20 2a 20 6f 62 6a 65 63 74 3b 20  at.-. * object; 
0de0: 6f 74 68 65 72 77 69 73 65 2c 20 74 61 6b 65 20  otherwise, take 
0df0: 6c 65 6e 67 74 68 20 62 79 74 65 73 20 73 74 61  length bytes sta
0e00: 72 74 69 6e 67 20 61 74 20 70 2e 0a 2d 09 20 2a  rting at p..-. *
0e10: 2f 0a 2d 0a 2d 09 69 66 20 28 72 65 73 75 6c 74  /.-.-.if (result
0e20: 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2d  Ptr == NULL) {.-
0e30: 09 20 20 20 20 69 66 20 28 76 61 6c 75 65 50 74  .    if (valuePt
0e40: 72 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 09 09  r != NULL) {.-..
0e50: 72 65 73 75 6c 74 50 74 72 20 3d 20 76 61 6c 75  resultPtr = valu
0e60: 65 50 74 72 3b 0a 2d 09 20 20 20 20 7d 20 65 6c  ePtr;.-.    } el
0e70: 73 65 20 7b 0a 2d 09 09 72 65 73 75 6c 74 50 74  se {.-..resultPt
0e80: 72 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  r = Tcl_NewStrin
0e90: 67 4f 62 6a 28 70 2c 20 6c 65 6e 67 74 68 29 3b  gObj(p, length);
0ea0: 0a 2d 09 20 20 20 20 7d 0a 2d 09 20 20 20 20 54  .-.    }.-.    T
0eb0: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
0ec0: 72 65 73 75 6c 74 50 74 72 29 3b 0a 2d 09 7d 20  resultPtr);.-.} 
0ed0: 65 6c 73 65 20 7b 0a 2d 09 20 20 20 20 69 66 20  else {.-.    if 
0ee0: 28 54 63 6c 5f 49 73 53 68 61 72 65 64 28 72 65  (Tcl_IsShared(re
0ef0: 73 75 6c 74 50 74 72 29 29 20 7b 0a 2d 09 09 54  sultPtr)) {.-..T
0f00: 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
0f10: 72 65 73 75 6c 74 50 74 72 29 3b 0a 2d 09 09 72  resultPtr);.-..r
0f20: 65 73 75 6c 74 50 74 72 20 3d 20 54 63 6c 5f 44  esultPtr = Tcl_D
0f30: 75 70 6c 69 63 61 74 65 4f 62 6a 28 72 65 73 75  uplicateObj(resu
0f40: 6c 74 50 74 72 29 3b 0a 2d 09 09 54 63 6c 5f 49  ltPtr);.-..Tcl_I
0f50: 6e 63 72 52 65 66 43 6f 75 6e 74 28 72 65 73 75  ncrRefCount(resu
0f60: 6c 74 50 74 72 29 3b 0a 2d 09 20 20 20 20 7d 0a  ltPtr);.-.    }.
0f70: 2d 09 20 20 20 20 69 66 20 28 76 61 6c 75 65 50  -.    if (valueP
0f80: 74 72 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 09  tr != NULL) {.-.
0f90: 09 70 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  .p = Tcl_GetStri
0fa0: 6e 67 46 72 6f 6d 4f 62 6a 28 76 61 6c 75 65 50  ngFromObj(valueP
0fb0: 74 72 2c 20 26 6c 65 6e 67 74 68 29 3b 0a 2d 09  tr, &length);.-.
0fc0: 20 20 20 20 7d 0a 2d 09 20 20 20 20 54 63 6c 5f      }.-.    Tcl_
0fd0: 41 70 70 65 6e 64 54 6f 4f 62 6a 28 72 65 73 75  AppendToObj(resu
0fe0: 6c 74 50 74 72 2c 20 70 2c 20 6c 65 6e 67 74 68  ltPtr, p, length
0ff0: 29 3b 0a 2d 09 7d 0a 2d 20 20 20 20 7d 0a 2d 20  );.-.}.-    }.- 
1000: 20 20 20 69 66 20 28 72 65 73 75 6c 74 50 74 72     if (resultPtr
1010: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 09 54 63   != NULL) {.-.Tc
1020: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
1030: 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 50 74 72  nterp, resultPtr
1040: 29 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 7b  );.-    } else {
1050: 0a 2d 09 63 6f 64 65 20 3d 20 54 43 4c 5f 45 52  .-.code = TCL_ER
1060: 52 4f 52 3b 0a 2d 20 20 20 20 7d 0a 2d 0a 2d 20  ROR;.-    }.-.- 
1070: 20 20 20 64 6f 6e 65 3a 0a 2d 20 20 20 20 69 66     done:.-    if
1080: 20 28 72 65 73 75 6c 74 50 74 72 20 21 3d 20 4e   (resultPtr != N
1090: 55 4c 4c 29 20 7b 0a 2d 09 54 63 6c 5f 44 65 63  ULL) {.-.Tcl_Dec
10a0: 72 52 65 66 43 6f 75 6e 74 28 72 65 73 75 6c 74  rRefCount(result
10b0: 50 74 72 29 3b 0a 2d 20 20 20 20 7d 0a 2d 20 20  Ptr);.-    }.-  
10c0: 20 20 72 65 74 75 72 6e 20 63 6f 64 65 3b 0a 2b    return code;.+
10d0: 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c 53 75      return TclSu
10e0: 62 73 74 54 6f 6b 65 6e 73 28 69 6e 74 65 72 70  bstTokens(interp
10f0: 2c 20 74 6f 6b 65 6e 50 74 72 2c 20 63 6f 75 6e  , tokenPtr, coun
1100: 74 2c 20 2f 2a 20 6e 75 6d 4c 65 66 74 50 74 72  t, /* numLeftPtr
1110: 20 2a 2f 20 4e 55 4c 4c 29 3b 0a 20 7d 0a 20 0a   */ NULL);. }. .
1120: 20 0a 40 40 20 2d 33 35 37 39 2c 37 20 2b 33 34   .@@ -3579,7 +34
1130: 34 32 2c 37 20 40 40 0a 20 23 64 65 66 69 6e 65  42,7 @@. #define
1140: 20 4e 55 4d 5f 53 54 41 54 49 43 5f 4f 42 4a 53   NUM_STATIC_OBJS
1150: 20 32 30 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a   20.     Tcl_Obj
1160: 20 2a 73 74 61 74 69 63 4f 62 6a 41 72 72 61 79   *staticObjArray
1170: 5b 4e 55 4d 5f 53 54 41 54 49 43 5f 4f 42 4a 53  [NUM_STATIC_OBJS
1180: 5d 2c 20 2a 2a 6f 62 6a 76 3b 0a 20 20 20 20 20  ], **objv;.     
1190: 54 63 6c 5f 54 6f 6b 65 6e 20 2a 74 6f 6b 65 6e  Tcl_Token *token
11a0: 50 74 72 3b 0a 2d 20 20 20 20 69 6e 74 20 69 2c  Ptr;.-    int i,
11b0: 20 63 6f 64 65 2c 20 63 6f 6d 6d 61 6e 64 4c 65   code, commandLe
11c0: 6e 67 74 68 2c 20 62 79 74 65 73 4c 65 66 74 2c  ngth, bytesLeft,
11d0: 20 6e 65 73 74 65 64 3b 0a 2b 20 20 20 20 69 6e   nested;.+    in
11e0: 74 20 69 2c 20 63 6f 64 65 2c 20 63 6f 6d 6d 61  t i, code, comma
11f0: 6e 64 4c 65 6e 67 74 68 2c 20 62 79 74 65 73 4c  ndLength, bytesL
1200: 65 66 74 3b 0a 20 20 20 20 20 43 61 6c 6c 46 72  eft;.     CallFr
1210: 61 6d 65 20 2a 73 61 76 65 64 56 61 72 46 72 61  ame *savedVarFra
1220: 6d 65 50 74 72 3b 20 20 20 2f 2a 20 53 61 76 65  mePtr;   /* Save
1230: 73 20 6f 6c 64 20 63 6f 70 79 20 6f 66 20 69 50  s old copy of iP
1240: 74 72 2d 3e 76 61 72 46 72 61 6d 65 50 74 72 0a  tr->varFramePtr.
1250: 20 09 09 09 09 20 20 20 20 2a 20 69 6e 20 63 61   ....    * in ca
1260: 73 65 20 54 43 4c 5f 45 56 41 4c 5f 47 4c 4f 42  se TCL_EVAL_GLOB
1270: 41 4c 20 77 61 73 20 73 65 74 2e 20 2a 2f 0a 20  AL was set. */. 
1280: 20 20 20 20 69 6e 74 20 61 6c 6c 6f 77 45 78 63      int allowExc
1290: 65 70 74 69 6f 6e 73 20 3d 20 28 69 50 74 72 2d  eptions = (iPtr-
12a0: 3e 65 76 61 6c 46 6c 61 67 73 20 26 20 54 43 4c  >evalFlags & TCL
12b0: 5f 41 4c 4c 4f 57 5f 45 58 43 45 50 54 49 4f 4e  _ALLOW_EXCEPTION
12c0: 53 29 3b 0a 40 40 20 2d 33 36 31 30 2c 33 31 20  S);.@@ -3610,31 
12d0: 2b 33 34 37 33 2c 31 34 20 40 40 0a 20 20 20 20  +3473,14 @@.    
12e0: 20 6f 62 6a 76 20 3d 20 73 74 61 74 69 63 4f 62   objv = staticOb
12f0: 6a 41 72 72 61 79 3b 0a 20 20 20 20 20 70 20 3d  jArray;.     p =
1300: 20 73 63 72 69 70 74 3b 0a 20 20 20 20 20 62 79   script;.     by
1310: 74 65 73 4c 65 66 74 20 3d 20 6e 75 6d 42 79 74  tesLeft = numByt
1320: 65 73 3b 0a 2d 20 20 20 20 69 66 20 28 69 50 74  es;.-    if (iPt
1330: 72 2d 3e 65 76 61 6c 46 6c 61 67 73 20 26 20 54  r->evalFlags & T
1340: 43 4c 5f 42 52 41 43 4b 45 54 5f 54 45 52 4d 29  CL_BRACKET_TERM)
1350: 20 7b 0a 2d 09 6e 65 73 74 65 64 20 3d 20 31 3b   {.-.nested = 1;
1360: 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2d  .-    } else {.-
1370: 09 6e 65 73 74 65 64 20 3d 20 30 3b 0a 2d 20 20  .nested = 0;.-  
1380: 20 20 7d 0a 20 20 20 20 20 69 50 74 72 2d 3e 65    }.     iPtr->e
1390: 76 61 6c 46 6c 61 67 73 20 3d 20 30 3b 0a 20 20  valFlags = 0;.  
13a0: 20 20 20 64 6f 20 7b 0a 2d 09 69 66 20 28 54 63     do {.-.if (Tc
13b0: 6c 5f 50 61 72 73 65 43 6f 6d 6d 61 6e 64 28 69  l_ParseCommand(i
13c0: 6e 74 65 72 70 2c 20 70 2c 20 62 79 74 65 73 4c  nterp, p, bytesL
13d0: 65 66 74 2c 20 6e 65 73 74 65 64 2c 20 26 70 61  eft, nested, &pa
13e0: 72 73 65 29 0a 2b 09 69 66 20 28 54 63 6c 5f 50  rse).+.if (Tcl_P
13f0: 61 72 73 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 65  arseCommand(inte
1400: 72 70 2c 20 70 2c 20 62 79 74 65 73 4c 65 66 74  rp, p, bytesLeft
1410: 2c 20 30 2c 20 26 70 61 72 73 65 29 0a 20 09 20  , 0, &parse). . 
1420: 20 20 20 20 20 20 20 21 3d 20 54 43 4c 5f 4f 4b         != TCL_OK
1430: 29 20 7b 0a 20 09 20 20 20 20 63 6f 64 65 20 3d  ) {. .    code =
1440: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 09 20 20   TCL_ERROR;. .  
1450: 20 20 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 20 09    goto error;. .
1460: 7d 0a 20 09 67 6f 74 50 61 72 73 65 20 3d 20 31  }. .gotParse = 1
1470: 3b 20 0a 2d 0a 2d 09 69 66 20 28 6e 65 73 74 65  ; .-.-.if (neste
1480: 64 20 26 26 20 70 61 72 73 65 2e 74 65 72 6d 20  d && parse.term 
1490: 3d 3d 20 28 73 63 72 69 70 74 20 2b 20 6e 75 6d  == (script + num
14a0: 42 79 74 65 73 29 29 20 7b 0a 2d 09 20 20 20 20  Bytes)) {.-.    
14b0: 2f 2a 0a 2d 09 20 20 20 20 20 2a 20 41 20 6e 65  /*.-.     * A ne
14c0: 73 74 65 64 20 73 63 72 69 70 74 20 63 61 6e 20  sted script can 
14d0: 6f 6e 6c 79 20 74 65 72 6d 69 6e 61 74 65 20 69  only terminate i
14e0: 6e 20 27 5d 27 2e 20 49 66 0a 2d 09 20 20 20 20  n ']'. If.-.    
14f0: 20 2a 20 74 68 65 20 70 61 72 73 69 6e 67 20 67   * the parsing g
1500: 6f 74 20 74 65 72 6d 69 6e 61 74 65 64 20 61 74  ot terminated at
1510: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
1520: 73 63 72 69 70 74 2c 0a 2d 09 20 20 20 20 20 2a  script,.-.     *
1530: 20 74 68 65 72 65 20 77 61 73 20 6e 6f 20 63 6c   there was no cl
1540: 6f 73 69 6e 67 20 27 5d 27 2e 20 20 52 65 70 6f  osing ']'.  Repo
1550: 72 74 20 74 68 65 20 73 79 6e 74 61 78 20 65 72  rt the syntax er
1560: 72 6f 72 2e 0a 2d 09 20 20 20 20 20 2a 2f 0a 2d  ror..-.     */.-
1570: 0a 2d 09 20 20 20 20 63 6f 64 65 20 3d 20 54 43  .-.    code = TC
1580: 4c 5f 45 52 52 4f 52 3b 0a 2d 09 20 20 20 20 67  L_ERROR;.-.    g
1590: 6f 74 6f 20 65 72 72 6f 72 3b 0a 2d 09 7d 0a 2d  oto error;.-.}.-
15a0: 0a 20 09 69 66 20 28 70 61 72 73 65 2e 6e 75 6d  . .if (parse.num
15b0: 57 6f 72 64 73 20 3e 20 30 29 20 7b 0a 20 09 20  Words > 0) {. . 
15c0: 20 20 20 2f 2a 0a 20 09 20 20 20 20 20 2a 20 47     /*. .     * G
15d0: 65 6e 65 72 61 74 65 20 61 6e 20 61 72 72 61 79  enerate an array
15e0: 20 6f 66 20 6f 62 6a 65 63 74 73 20 66 6f 72 20   of objects for 
15f0: 74 68 65 20 77 6f 72 64 73 20 6f 66 20 74 68 65  the words of the
1600: 20 63 6f 6d 6d 61 6e 64 2e 0a 40 40 20 2d 33 36   command..@@ -36
1610: 34 39 2c 38 20 2b 33 34 39 35 2c 38 20 40 40 0a  49,8 +3495,8 @@.
1620: 20 09 20 20 20 20 66 6f 72 20 28 6f 62 6a 65 63   .    for (objec
1630: 74 73 55 73 65 64 20 3d 20 30 2c 20 74 6f 6b 65  tsUsed = 0, toke
1640: 6e 50 74 72 20 3d 20 70 61 72 73 65 2e 74 6f 6b  nPtr = parse.tok
1650: 65 6e 50 74 72 3b 0a 20 09 09 20 20 20 20 6f 62  enPtr;. ..    ob
1660: 6a 65 63 74 73 55 73 65 64 20 3c 20 70 61 72 73  jectsUsed < pars
1670: 65 2e 6e 75 6d 57 6f 72 64 73 3b 0a 20 09 09 20  e.numWords;. .. 
1680: 20 20 20 6f 62 6a 65 63 74 73 55 73 65 64 2b 2b     objectsUsed++
1690: 2c 20 74 6f 6b 65 6e 50 74 72 20 2b 3d 20 28 74  , tokenPtr += (t
16a0: 6f 6b 65 6e 50 74 72 2d 3e 6e 75 6d 43 6f 6d 70  okenPtr->numComp
16b0: 6f 6e 65 6e 74 73 20 2b 20 31 29 29 20 7b 0a 2d  onents + 1)) {.-
16c0: 09 09 63 6f 64 65 20 3d 20 54 63 6c 5f 45 76 61  ..code = Tcl_Eva
16d0: 6c 54 6f 6b 65 6e 73 53 74 61 6e 64 61 72 64 28  lTokensStandard(
16e0: 69 6e 74 65 72 70 2c 20 74 6f 6b 65 6e 50 74 72  interp, tokenPtr
16f0: 2b 31 2c 20 0a 2d 09 09 20 20 20 20 20 20 20 20  +1, .-..        
1700: 20 20 20 20 74 6f 6b 65 6e 50 74 72 2d 3e 6e 75      tokenPtr->nu
1710: 6d 43 6f 6d 70 6f 6e 65 6e 74 73 29 3b 0a 2b 09  mComponents);.+.
1720: 09 63 6f 64 65 20 3d 20 54 63 6c 53 75 62 73 74  .code = TclSubst
1730: 54 6f 6b 65 6e 73 28 69 6e 74 65 72 70 2c 20 74  Tokens(interp, t
1740: 6f 6b 65 6e 50 74 72 2b 31 2c 20 0a 2b 09 09 20  okenPtr+1, .+.. 
1750: 20 20 20 20 20 20 20 20 20 20 20 74 6f 6b 65 6e             token
1760: 50 74 72 2d 3e 6e 75 6d 43 6f 6d 70 6f 6e 65 6e  Ptr->numComponen
1770: 74 73 2c 20 4e 55 4c 4c 29 3b 0a 20 09 09 69 66  ts, NULL);. ..if
1780: 20 28 63 6f 64 65 20 3d 3d 20 54 43 4c 5f 4f 4b   (code == TCL_OK
1790: 29 20 7b 0a 20 09 09 20 20 20 20 6f 62 6a 76 5b  ) {. ..    objv[
17a0: 6f 62 6a 65 63 74 73 55 73 65 64 5d 20 3d 20 54  objectsUsed] = T
17b0: 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_GetObjResult(
17c0: 69 6e 74 65 72 70 29 3b 0a 20 09 09 20 20 20 20  interp);. ..    
17d0: 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74  Tcl_IncrRefCount
17e0: 28 6f 62 6a 76 5b 6f 62 6a 65 63 74 73 55 73 65  (objv[objectsUse
17f0: 64 5d 29 3b 0a 40 40 20 2d 33 37 30 33 2c 32 30  d]);.@@ -3703,20
1800: 20 2b 33 35 34 39 2c 37 20 40 40 0a 20 09 70 20   +3549,7 @@. .p 
1810: 3d 20 6e 65 78 74 3b 0a 20 09 54 63 6c 5f 46 72  = next;. .Tcl_Fr
1820: 65 65 50 61 72 73 65 28 26 70 61 72 73 65 29 3b  eeParse(&parse);
1830: 0a 20 09 67 6f 74 50 61 72 73 65 20 3d 20 30 3b  . .gotParse = 0;
1840: 0a 2d 09 69 66 20 28 6e 65 73 74 65 64 20 26 26  .-.if (nested &&
1850: 20 28 2a 70 61 72 73 65 2e 74 65 72 6d 20 3d 3d   (*parse.term ==
1860: 20 27 5d 27 29 29 20 7b 0a 2d 09 20 20 20 20 2f   ']')) {.-.    /
1870: 2a 0a 2d 09 20 20 20 20 20 2a 20 57 65 20 67 65  *.-.     * We ge
1880: 74 20 68 65 72 65 20 69 6e 20 74 68 65 20 73 70  t here in the sp
1890: 65 63 69 61 6c 20 63 61 73 65 20 77 68 65 72 65  ecial case where
18a0: 20 74 68 65 20 54 43 4c 5f 42 52 41 43 4b 45 54   the TCL_BRACKET
18b0: 5f 54 45 52 4d 0a 2d 09 20 20 20 20 20 2a 20 66  _TERM.-.     * f
18c0: 6c 61 67 20 77 61 73 20 73 65 74 20 69 6e 20 74  lag was set in t
18d0: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 61  he interpreter a
18e0: 6e 64 20 74 68 65 20 6c 61 74 65 73 74 20 70 61  nd the latest pa
18f0: 72 73 65 64 20 63 6f 6d 6d 61 6e 64 0a 2d 09 20  rsed command.-. 
1900: 20 20 20 20 2a 20 77 61 73 20 74 65 72 6d 69 6e      * was termin
1910: 61 74 65 64 20 62 79 20 74 68 65 20 6d 61 74 63  ated by the matc
1920: 68 69 6e 67 20 63 6c 6f 73 65 2d 62 72 61 63 6b  hing close-brack
1930: 65 74 20 77 65 20 73 65 65 6b 2e 0a 2d 09 20 20  et we seek..-.  
1940: 20 20 20 2a 20 52 65 74 75 72 6e 20 69 6d 6d 65     * Return imme
1950: 64 69 61 74 65 6c 79 2e 0a 2d 09 20 20 20 20 20  diately..-.     
1960: 2a 2f 0a 2d 0a 2d 09 20 20 20 20 69 50 74 72 2d  */.-.-.    iPtr-
1970: 3e 74 65 72 6d 4f 66 66 73 65 74 20 3d 20 28 70  >termOffset = (p
1980: 20 2d 20 31 29 20 2d 20 73 63 72 69 70 74 3b 0a   - 1) - script;.
1990: 2d 09 20 20 20 20 69 50 74 72 2d 3e 76 61 72 46  -.    iPtr->varF
19a0: 72 61 6d 65 50 74 72 20 3d 20 73 61 76 65 64 56  ramePtr = savedV
19b0: 61 72 46 72 61 6d 65 50 74 72 3b 0a 2d 09 20 20  arFramePtr;.-.  
19c0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
19d0: 0a 2d 09 7d 0a 20 20 20 20 20 7d 20 77 68 69 6c  .-.}.     } whil
19e0: 65 20 28 62 79 74 65 73 4c 65 66 74 20 3e 20 30  e (bytesLeft > 0
19f0: 29 3b 0a 2d 20 20 20 20 69 50 74 72 2d 3e 74 65  );.-    iPtr->te
1a00: 72 6d 4f 66 66 73 65 74 20 3d 20 70 20 2d 20 73  rmOffset = p - s
1a10: 63 72 69 70 74 3b 0a 20 20 20 20 20 69 50 74 72  cript;.     iPtr
1a20: 2d 3e 76 61 72 46 72 61 6d 65 50 74 72 20 3d 20  ->varFramePtr = 
1a30: 73 61 76 65 64 56 61 72 46 72 61 6d 65 50 74 72  savedVarFramePtr
1a40: 3b 0a 20 20 20 20 20 72 65 74 75 72 6e 20 54 43  ;.     return TC
1a50: 4c 5f 4f 4b 3b 0a 20 0a 40 40 20 2d 33 37 35 33  L_OK;. .@@ -3753
1a60: 2c 38 35 20 2b 33 35 38 36 2c 36 20 40 40 0a 20  ,85 +3586,6 @@. 
1a70: 09 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a 29  .ckfree((char *)
1a80: 20 6f 62 6a 76 29 3b 0a 20 20 20 20 20 7d 0a 20   objv);.     }. 
1a90: 20 20 20 20 69 50 74 72 2d 3e 76 61 72 46 72 61      iPtr->varFra
1aa0: 6d 65 50 74 72 20 3d 20 73 61 76 65 64 56 61 72  mePtr = savedVar
1ab0: 46 72 61 6d 65 50 74 72 3b 0a 2d 0a 2d 20 20 20  FramePtr;.-.-   
1ac0: 20 2f 2a 0a 2d 20 20 20 20 20 2a 20 41 6c 6c 20   /*.-     * All 
1ad0: 74 68 61 74 27 73 20 6c 65 66 74 20 74 6f 20 64  that's left to d
1ae0: 6f 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  o before returni
1af0: 6e 67 20 69 73 20 74 6f 20 73 65 74 20 69 50 74  ng is to set iPt
1b00: 72 2d 3e 74 65 72 6d 4f 66 66 73 65 74 0a 2d 20  r->termOffset.- 
1b10: 20 20 20 20 2a 20 74 6f 20 70 6f 69 6e 74 20 70      * to point p
1b20: 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ast the end of t
1b30: 68 65 20 73 63 72 69 70 74 20 77 65 20 6a 75 73  he script we jus
1b40: 74 20 65 76 61 6c 75 61 74 65 64 2e 0a 2d 20 20  t evaluated..-  
1b50: 20 20 20 2a 2f 0a 2d 0a 2d 20 20 20 20 6e 65 78     */.-.-    nex
1b60: 74 20 3d 20 70 61 72 73 65 2e 63 6f 6d 6d 61 6e  t = parse.comman
1b70: 64 53 74 61 72 74 20 2b 20 70 61 72 73 65 2e 63  dStart + parse.c
1b80: 6f 6d 6d 61 6e 64 53 69 7a 65 3b 0a 2d 20 20 20  ommandSize;.-   
1b90: 20 62 79 74 65 73 4c 65 66 74 20 2d 3d 20 6e 65   bytesLeft -= ne
1ba0: 78 74 20 2d 20 70 3b 0a 2d 20 20 20 20 70 20 3d  xt - p;.-    p =
1bb0: 20 6e 65 78 74 3b 0a 2d 0a 2d 20 20 20 20 69 66   next;.-.-    if
1bc0: 20 28 21 6e 65 73 74 65 64 29 20 7b 0a 2d 09 69   (!nested) {.-.i
1bd0: 50 74 72 2d 3e 74 65 72 6d 4f 66 66 73 65 74 20  Ptr->termOffset 
1be0: 3d 20 70 20 2d 20 73 63 72 69 70 74 3b 0a 2d 09  = p - script;.-.
1bf0: 72 65 74 75 72 6e 20 63 6f 64 65 3b 0a 2d 20 20  return code;.-  
1c00: 20 20 7d 0a 2d 0a 2d 20 20 20 20 2f 2a 0a 2d 20    }.-.-    /*.- 
1c10: 20 20 20 20 2a 20 57 68 65 6e 20 77 65 20 61 72      * When we ar
1c20: 65 20 6e 65 73 74 65 64 20 28 74 68 65 20 54 43  e nested (the TC
1c30: 4c 5f 42 52 41 43 4b 45 54 5f 54 45 52 4d 20 66  L_BRACKET_TERM f
1c40: 6c 61 67 20 77 61 73 20 73 65 74 20 69 6e 20 74  lag was set in t
1c50: 68 65 0a 2d 20 20 20 20 20 2a 20 69 6e 74 65 72  he.-     * inter
1c60: 70 72 65 74 65 72 29 2c 20 77 65 20 6d 75 73 74  preter), we must
1c70: 20 66 69 6e 64 20 74 68 65 20 6d 61 74 63 68 69   find the matchi
1c80: 6e 67 20 63 6c 6f 73 65 2d 62 72 61 63 6b 65 74  ng close-bracket
1c90: 20 74 6f 0a 2d 20 20 20 20 20 2a 20 65 6e 64 20   to.-     * end 
1ca0: 74 68 65 20 73 63 72 69 70 74 20 77 65 20 61 72  the script we ar
1cb0: 65 20 65 76 61 6c 75 61 74 69 6e 67 2e 0a 2d 20  e evaluating..- 
1cc0: 20 20 20 20 2a 0a 2d 20 20 20 20 20 2a 20 57 68      *.-     * Wh
1cd0: 65 6e 20 6f 75 72 20 72 65 74 75 72 6e 20 63 6f  en our return co
1ce0: 64 65 20 69 73 20 54 43 4c 5f 43 4f 4e 54 49 4e  de is TCL_CONTIN
1cf0: 55 45 20 6f 72 20 54 43 4c 5f 52 45 54 55 52 4e  UE or TCL_RETURN
1d00: 2c 20 77 65 20 77 61 6e 74 0a 2d 20 20 20 20 20  , we want.-     
1d10: 2a 20 74 6f 20 63 6f 72 72 65 63 74 6c 79 20 73  * to correctly s
1d20: 65 74 20 69 50 74 72 2d 3e 74 65 72 6d 4f 66 66  et iPtr->termOff
1d30: 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  set to point to 
1d40: 74 68 61 74 20 6d 61 74 63 68 69 6e 67 0a 2d 20  that matching.- 
1d50: 20 20 20 20 2a 20 63 6c 6f 73 65 2d 62 72 61 63      * close-brac
1d60: 6b 65 74 20 73 6f 20 6f 75 72 20 63 61 6c 6c 65  ket so our calle
1d70: 72 20 63 61 6e 20 6d 6f 76 65 20 74 6f 20 74 68  r can move to th
1d80: 65 20 70 61 72 74 20 6f 66 20 74 68 65 0a 2d 20  e part of the.- 
1d90: 20 20 20 20 2a 20 73 74 72 69 6e 67 20 62 65 79      * string bey
1da0: 6f 6e 64 20 74 68 65 20 73 63 72 69 70 74 20 77  ond the script w
1db0: 65 20 77 65 72 65 20 61 73 6b 65 64 20 74 6f 20  e were asked to 
1dc0: 65 76 61 6c 75 61 74 65 2e 0a 2d 20 20 20 20 20  evaluate..-     
1dd0: 2a 20 53 6f 20 77 65 20 74 72 79 20 74 6f 20 70  * So we try to p
1de0: 61 72 73 65 20 70 61 73 74 20 74 68 65 20 72 65  arse past the re
1df0: 73 74 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61 6e  st of the comman
1e00: 64 73 2e 0a 2d 20 20 20 20 20 2a 2f 0a 2d 0a 2d  ds..-     */.-.-
1e10: 20 20 20 20 6e 65 78 74 20 3d 20 4e 55 4c 4c 3b      next = NULL;
1e20: 0a 2d 20 20 20 20 77 68 69 6c 65 20 28 62 79 74  .-    while (byt
1e30: 65 73 4c 65 66 74 20 26 26 20 28 2a 70 61 72 73  esLeft && (*pars
1e40: 65 2e 74 65 72 6d 20 21 3d 20 27 5d 27 29 29 20  e.term != ']')) 
1e50: 7b 0a 2d 09 69 66 20 28 54 43 4c 5f 4f 4b 20 21  {.-.if (TCL_OK !
1e60: 3d 20 54 63 6c 5f 50 61 72 73 65 43 6f 6d 6d 61  = Tcl_ParseComma
1e70: 6e 64 28 4e 55 4c 4c 2c 20 70 2c 20 62 79 74 65  nd(NULL, p, byte
1e80: 73 4c 65 66 74 2c 20 31 2c 20 26 70 61 72 73 65  sLeft, 1, &parse
1e90: 29 29 20 7b 0a 2d 09 20 20 20 20 2f 2a 0a 2d 09  )) {.-.    /*.-.
1ea0: 20 20 20 20 20 2a 20 53 79 6e 74 61 78 20 65 72       * Syntax er
1eb0: 72 6f 72 2e 20 20 53 65 74 20 74 68 65 20 74 65  ror.  Set the te
1ec0: 72 6d 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20  rmOffset to the 
1ed0: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2d 09 20  beginning of.-. 
1ee0: 20 20 20 20 2a 20 74 68 65 20 6c 61 73 74 20 63      * the last c
1ef0: 6f 6d 6d 61 6e 64 20 70 61 72 73 65 64 2e 0a 2d  ommand parsed..-
1f00: 09 20 20 20 20 20 2a 2f 0a 2d 0a 2d 09 20 20 20  .     */.-.-.   
1f10: 20 69 66 20 28 6e 65 78 74 20 3d 3d 20 4e 55 4c   if (next == NUL
1f20: 4c 29 20 7b 0a 2d 09 20 20 20 20 20 20 20 20 69  L) {.-.        i
1f30: 50 74 72 2d 3e 74 65 72 6d 4f 66 66 73 65 74 20  Ptr->termOffset 
1f40: 3d 20 28 70 61 72 73 65 2e 63 6f 6d 6d 61 6e 64  = (parse.command
1f50: 53 74 61 72 74 20 2d 20 31 29 20 2d 20 73 63 72  Start - 1) - scr
1f60: 69 70 74 3b 0a 2d 09 20 20 20 20 7d 20 65 6c 73  ipt;.-.    } els
1f70: 65 20 7b 0a 2d 09 20 20 20 20 20 20 20 20 69 50  e {.-.        iP
1f80: 74 72 2d 3e 74 65 72 6d 4f 66 66 73 65 74 20 3d  tr->termOffset =
1f90: 20 28 6e 65 78 74 20 2d 20 31 29 20 2d 20 73 63   (next - 1) - sc
1fa0: 72 69 70 74 3b 0a 2d 09 20 20 20 20 7d 0a 2d 09  ript;.-.    }.-.
1fb0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 64 65 3b      return code;
1fc0: 0a 2d 09 7d 0a 2d 09 6e 65 78 74 20 3d 20 70 61  .-.}.-.next = pa
1fd0: 72 73 65 2e 63 6f 6d 6d 61 6e 64 53 74 61 72 74  rse.commandStart
1fe0: 20 2b 20 70 61 72 73 65 2e 63 6f 6d 6d 61 6e 64   + parse.command
1ff0: 53 69 7a 65 3b 0a 2d 09 62 79 74 65 73 4c 65 66  Size;.-.bytesLef
2000: 74 20 2d 3d 20 6e 65 78 74 20 2d 20 70 3b 0a 2d  t -= next - p;.-
2010: 09 70 20 3d 20 6e 65 78 74 3b 0a 2d 09 6e 65 78  .p = next;.-.nex
2020: 74 20 3d 20 70 61 72 73 65 2e 63 6f 6d 6d 61 6e  t = parse.comman
2030: 64 53 74 61 72 74 3b 0a 2d 09 54 63 6c 5f 46 72  dStart;.-.Tcl_Fr
2040: 65 65 50 61 72 73 65 28 26 70 61 72 73 65 29 3b  eeParse(&parse);
2050: 0a 2d 20 20 20 20 7d 0a 2d 0a 2d 20 20 20 20 69  .-    }.-.-    i
2060: 66 20 28 62 79 74 65 73 4c 65 66 74 29 20 7b 0a  f (bytesLeft) {.
2070: 2d 09 2f 2a 20 0a 2d 09 20 2a 20 70 61 72 73 65  -./* .-. * parse
2080: 2e 74 65 72 6d 20 70 6f 69 6e 74 73 20 74 6f 20  .term points to 
2090: 74 68 65 20 63 6c 6f 73 65 2d 62 72 61 63 6b 65  the close-bracke
20a0: 74 2e 0a 2d 09 20 2a 2f 0a 2d 0a 2d 09 69 50 74  t..-. */.-.-.iPt
20b0: 72 2d 3e 74 65 72 6d 4f 66 66 73 65 74 20 3d 20  r->termOffset = 
20c0: 70 61 72 73 65 2e 74 65 72 6d 20 2d 20 73 63 72  parse.term - scr
20d0: 69 70 74 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 65  ipt;.-    } else
20e0: 20 69 66 20 28 70 61 72 73 65 2e 74 65 72 6d 20   if (parse.term 
20f0: 3d 3d 20 73 63 72 69 70 74 20 2b 20 6e 75 6d 42  == script + numB
2100: 79 74 65 73 29 20 7b 0a 2d 09 2f 2a 0a 2d 09 20  ytes) {.-./*.-. 
2110: 2a 20 54 68 65 72 65 20 77 61 73 20 6e 6f 20 63  * There was no c
2120: 6c 6f 73 65 2d 62 72 61 63 6b 65 74 2e 20 20 53  lose-bracket.  S
2130: 79 6e 74 61 78 20 65 72 72 6f 72 2e 0a 2d 09 20  yntax error..-. 
2140: 2a 2f 0a 2d 0a 2d 09 69 50 74 72 2d 3e 74 65 72  */.-.-.iPtr->ter
2150: 6d 4f 66 66 73 65 74 20 3d 20 70 61 72 73 65 2e  mOffset = parse.
2160: 74 65 72 6d 20 2d 20 73 63 72 69 70 74 3b 0a 2d  term - script;.-
2170: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
2180: 74 28 69 6e 74 65 72 70 2c 0a 2d 09 09 54 63 6c  t(interp,.-..Tcl
2190: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 6d  _NewStringObj("m
21a0: 69 73 73 69 6e 67 20 63 6c 6f 73 65 2d 62 72 61  issing close-bra
21b0: 63 6b 65 74 22 2c 20 2d 31 29 29 3b 0a 2d 09 72  cket", -1));.-.r
21c0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
21d0: 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20  .-    } else if 
21e0: 28 2a 70 61 72 73 65 2e 74 65 72 6d 20 21 3d 20  (*parse.term != 
21f0: 27 5d 27 29 20 7b 0a 2d 09 2f 2a 0a 2d 09 20 2a  ']') {.-./*.-. *
2200: 20 54 68 65 72 65 20 77 61 73 20 6e 6f 20 63 6c   There was no cl
2210: 6f 73 65 2d 62 72 61 63 6b 65 74 2e 20 20 53 79  ose-bracket.  Sy
2220: 6e 74 61 78 20 65 72 72 6f 72 2e 0a 2d 09 20 2a  ntax error..-. *
2230: 2f 0a 2d 0a 2d 09 69 50 74 72 2d 3e 74 65 72 6d  /.-.-.iPtr->term
2240: 4f 66 66 73 65 74 20 3d 20 28 70 61 72 73 65 2e  Offset = (parse.
2250: 74 65 72 6d 20 2b 20 31 29 20 2d 20 73 63 72 69  term + 1) - scri
2260: 70 74 3b 0a 2d 09 54 63 6c 5f 53 65 74 4f 62 6a  pt;.-.Tcl_SetObj
2270: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 0a 2d  Result(interp,.-
2280: 09 09 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  ..Tcl_NewStringO
2290: 62 6a 28 22 6d 69 73 73 69 6e 67 20 63 6c 6f 73  bj("missing clos
22a0: 65 2d 62 72 61 63 6b 65 74 22 2c 20 2d 31 29 29  e-bracket", -1))
22b0: 3b 0a 2d 09 72 65 74 75 72 6e 20 54 43 4c 5f 45  ;.-.return TCL_E
22c0: 52 52 4f 52 3b 0a 2d 20 20 20 20 7d 20 65 6c 73  RROR;.-    } els
22d0: 65 20 7b 0a 2d 09 2f 2a 20 0a 2d 09 20 2a 20 70  e {.-./* .-. * p
22e0: 61 72 73 65 2e 74 65 72 6d 20 70 6f 69 6e 74 73  arse.term points
22f0: 20 74 6f 20 74 68 65 20 63 6c 6f 73 65 2d 62 72   to the close-br
2300: 61 63 6b 65 74 2e 0a 2d 09 20 2a 2f 0a 2d 09 69  acket..-. */.-.i
2310: 50 74 72 2d 3e 74 65 72 6d 4f 66 66 73 65 74 20  Ptr->termOffset 
2320: 3d 20 70 61 72 73 65 2e 74 65 72 6d 20 2d 20 73  = parse.term - s
2330: 63 72 69 70 74 3b 0a 2d 20 20 20 20 7d 0a 20 20  cript;.-    }.  
2340: 20 20 20 72 65 74 75 72 6e 20 63 6f 64 65 3b 0a     return code;.
2350: 20 7d 0a 20 0c 0a 40 40 20 2d 33 39 33 32 2c 39   }. ..@@ -3932,9
2360: 20 2b 33 36 38 36 2c 36 20 40 40 0a 20 20 2a 09   +3686,6 @@.  *.
2370: 68 6f 6c 64 73 20 74 68 65 20 62 79 74 65 63 6f  holds the byteco
2380: 64 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  de instructions 
2390: 66 6f 72 20 74 68 65 20 63 6f 6d 6d 61 6e 64 73  for the commands
23a0: 2e 20 45 78 65 63 75 74 69 6e 67 20 74 68 65 0a  . Executing the.
23b0: 20 20 2a 09 63 6f 6d 6d 61 6e 64 73 20 77 69 6c    *.commands wil
23c0: 6c 20 61 6c 6d 6f 73 74 20 63 65 72 74 61 69 6e  l almost certain
23d0: 6c 79 20 68 61 76 65 20 73 69 64 65 20 65 66 66  ly have side eff
23e0: 65 63 74 73 20 74 68 61 74 20 64 65 70 65 6e 64  ects that depend
23f0: 0a 20 20 2a 09 6f 6e 20 74 68 6f 73 65 20 63 6f  .  *.on those co
2400: 6d 6d 61 6e 64 73 2e 0a 2d 20 2a 0a 2d 20 2a 09  mmands..- *.- *.
2410: 4a 75 73 74 20 61 73 20 69 6e 20 54 63 6c 5f 45  Just as in Tcl_E
2420: 76 61 6c 2c 20 69 6e 74 65 72 70 2d 3e 74 65 72  val, interp->ter
2430: 6d 4f 66 66 73 65 74 20 69 73 20 73 65 74 20 74  mOffset is set t
2440: 6f 20 74 68 65 20 6f 66 66 73 65 74 20 6f 66 20  o the offset of 
2450: 74 68 65 0a 2d 20 2a 09 6c 61 73 74 20 63 68 61  the.- *.last cha
2460: 72 61 63 74 65 72 20 65 78 65 63 75 74 65 64 20  racter executed 
2470: 69 6e 20 74 68 65 20 6f 62 6a 50 74 72 27 73 20  in the objPtr's 
2480: 73 74 72 69 6e 67 2e 0a 20 20 2a 0a 20 20 2a 2d  string..  *.  *-
2490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
24a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
24b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
24c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
24d0: 2d 2d 2d 2d 2d 0a 20 20 2a 2f 0a 49 6e 64 65 78  -----.  */.Index
24e0: 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 43 6d 64  : generic/tclCmd
24f0: 4d 5a 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  MZ.c.===========
2500: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2510: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2520: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2530: 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c  ========.RCS fil
2540: 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f  e: /cvsroot/tcl/
2550: 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c 43  tcl/generic/tclC
2560: 6d 64 4d 5a 2e 63 2c 76 0a 72 65 74 72 69 65 76  mdMZ.c,v.retriev
2570: 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 38  ing revision 1.8
2580: 32 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 38 32  2.diff -u -r1.82
2590: 20 74 63 6c 43 6d 64 4d 5a 2e 63 0a 2d 2d 2d 20   tclCmdMZ.c.--- 
25a0: 67 65 6e 65 72 69 63 2f 74 63 6c 43 6d 64 4d 5a  generic/tclCmdMZ
25b0: 2e 63 09 32 37 20 46 65 62 20 32 30 30 33 20 30  .c.27 Feb 2003 0
25c0: 30 3a 35 34 3a 33 36 20 2d 30 30 30 30 09 31 2e  0:54:36 -0000.1.
25d0: 38 32 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74  82.+++ generic/t
25e0: 63 6c 43 6d 64 4d 5a 2e 63 09 31 33 20 4d 61 72  clCmdMZ.c.13 Mar
25f0: 20 32 30 30 33 20 30 32 3a 32 36 3a 35 38 20 2d   2003 02:26:58 -
2600: 30 30 30 30 0a 40 40 20 2d 32 34 39 30 2c 31 35  0000.@@ -2490,15
2610: 39 20 2b 32 34 39 30 2c 36 20 40 40 0a 20 2f 2a  9 +2490,6 @@. /*
2620: 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  *------------
2630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a 2d  ----------.  *.-
2670: 20 2a 20 54 63 6c 5f 53 75 62 73 74 4f 62 6a 20   * Tcl_SubstObj 
2680: 2d 2d 0a 2d 20 2a 0a 2d 20 2a 09 54 68 69 73 20  --.- *.- *.This 
2690: 66 75 6e 63 74 69 6f 6e 20 70 65 72 66 6f 72 6d  function perform
26a0: 73 20 74 68 65 20 73 75 62 73 74 69 74 75 74 69  s the substituti
26b0: 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20 6f 6e  ons specified on
26c0: 20 74 68 65 0a 2d 20 2a 09 67 69 76 65 6e 20 73   the.- *.given s
26d0: 74 72 69 6e 67 20 61 73 20 64 65 73 63 72 69 62  tring as describ
26e0: 65 64 20 69 6e 20 74 68 65 20 75 73 65 72 20 64  ed in the user d
26f0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
2700: 20 74 68 65 0a 2d 20 2a 09 22 73 75 62 73 74 22   the.- *."subst"
2710: 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54   Tcl command.  T
2720: 68 69 73 20 63 6f 64 65 20 69 73 20 68 65 61 76  his code is heav
2730: 69 6c 79 20 62 61 73 65 64 20 6f 6e 20 61 6e 0a  ily based on an.
2740: 2d 20 2a 09 69 6d 70 6c 65 6d 65 6e 74 61 74 69  - *.implementati
2750: 6f 6e 20 62 79 20 41 6e 64 72 65 77 20 50 61 79  on by Andrew Pay
2760: 6e 65 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 69  ne.  Note that i
2770: 66 20 61 20 63 6f 6d 6d 61 6e 64 0a 2d 20 2a 09  f a command.- *.
2780: 73 75 62 73 74 69 74 75 74 69 6f 6e 20 72 65 74  substitution ret
2790: 75 72 6e 73 20 54 43 4c 5f 43 4f 4e 54 49 4e 55  urns TCL_CONTINU
27a0: 45 20 6f 72 20 54 43 4c 5f 52 45 54 55 52 4e 20  E or TCL_RETURN 
27b0: 66 72 6f 6d 20 69 74 73 0a 2d 20 2a 09 65 76 61  from its.- *.eva
27c0: 6c 75 61 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e  luation and is n
27d0: 6f 74 20 63 6f 6d 70 6c 65 74 65 6c 79 20 77 65  ot completely we
27e0: 6c 6c 2d 66 6f 72 6d 65 64 2c 20 74 68 65 20 72  ll-formed, the r
27f0: 65 73 75 6c 74 73 20 61 72 65 0a 2d 20 2a 09 6e  esults are.- *.n
2800: 6f 74 20 64 65 66 69 6e 65 64 20 28 6f 72 20 61  ot defined (or a
2810: 74 20 6c 65 61 73 74 20 68 61 72 64 20 74 6f 20  t least hard to 
2820: 63 68 61 72 61 63 74 65 72 69 73 65 2e 29 20 20  characterise.)  
2830: 54 68 69 73 20 66 61 75 6c 74 0a 2d 20 2a 09 77  This fault.- *.w
2840: 69 6c 6c 20 62 65 20 66 69 78 65 64 20 61 74 20  ill be fixed at 
2850: 73 6f 6d 65 20 70 6f 69 6e 74 2c 20 62 75 74 20  some point, but 
2860: 74 68 65 20 63 6f 73 74 20 6f 66 20 74 68 65 20  the cost of the 
2870: 6f 6e 6c 79 20 73 61 6e 65 0a 2d 20 2a 09 66 69  only sane.- *.fi
2880: 78 20 28 77 65 6c 6c 2d 66 6f 72 6d 65 64 6e 65  x (well-formedne
2890: 73 73 20 63 68 65 63 6b 20 66 69 72 73 74 29 20  ss check first) 
28a0: 69 73 20 73 75 63 68 20 74 68 61 74 20 79 6f 75  is such that you
28b0: 20 6e 65 65 64 20 74 6f 0a 2d 20 2a 09 22 70 72   need to.- *."pr
28c0: 65 63 6f 6d 70 69 6c 65 20 61 6e 64 20 63 61 63  ecompile and cac
28d0: 68 65 22 20 74 6f 20 73 74 6f 70 20 65 76 65 72  he" to stop ever
28e0: 79 6f 6e 65 20 66 72 6f 6d 20 62 65 69 6e 67 20  yone from being 
28f0: 68 69 74 20 77 69 74 68 0a 2d 20 2a 09 74 68 65  hit with.- *.the
2900: 20 63 6f 6e 73 65 71 75 65 6e 63 65 73 20 65 76   consequences ev
2910: 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68  ery time through
2920: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
2930: 20 63 75 72 72 65 6e 74 0a 2d 20 2a 09 62 65 68   current.- *.beh
2940: 61 76 69 6f 75 72 20 69 73 20 6e 6f 74 20 61 20  aviour is not a 
2950: 73 65 63 75 72 69 74 79 20 68 6f 6c 65 3b 20 69  security hole; i
2960: 74 20 6a 75 73 74 20 72 65 73 74 61 72 74 73 20  t just restarts 
2970: 70 61 72 73 69 6e 67 0a 2d 20 2a 09 74 68 65 20  parsing.- *.the 
2980: 73 74 72 69 6e 67 20 66 6f 6c 6c 6f 77 69 6e 67  string following
2990: 20 74 68 65 20 73 75 62 73 74 69 74 75 74 69 6f   the substitutio
29a0: 6e 20 69 6e 20 61 20 6d 69 6c 64 6c 79 20 73 75  n in a mildly su
29b0: 72 70 72 69 73 69 6e 67 0a 2d 20 2a 09 70 6c 61  rprising.- *.pla
29c0: 63 65 2c 20 61 6e 64 20 69 74 20 69 73 20 61 20  ce, and it is a 
29d0: 76 65 72 79 20 62 61 64 20 69 64 65 61 20 74 6f  very bad idea to
29e0: 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 72   count on this r
29f0: 65 6d 61 69 6e 69 6e 67 0a 2d 20 2a 09 74 68 65  emaining.- *.the
2a00: 20 73 61 6d 65 20 69 6e 20 66 75 74 75 72 65 2e   same in future.
2a10: 2e 2e 0a 2d 20 2a 0a 2d 20 2a 20 52 65 73 75 6c  ...- *.- * Resul
2a20: 74 73 3a 0a 2d 20 2a 09 41 20 54 63 6c 5f 4f 62  ts:.- *.A Tcl_Ob
2a30: 6a 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  j* containing th
2a40: 65 20 73 75 62 73 74 69 74 75 74 65 64 20 73 74  e substituted st
2a50: 72 69 6e 67 2c 20 6f 72 20 4e 55 4c 4c 20 74 6f  ring, or NULL to
2a60: 0a 2d 20 2a 09 69 6e 64 69 63 61 74 65 20 74 68  .- *.indicate th
2a70: 61 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  at an error occu
2a80: 72 72 65 64 2e 0a 2d 20 2a 0a 2d 20 2a 20 53 69  rred..- *.- * Si
2a90: 64 65 20 65 66 66 65 63 74 73 3a 0a 2d 20 2a 09  de effects:.- *.
2aa0: 53 65 65 20 74 68 65 20 75 73 65 72 20 64 6f 63  See the user doc
2ab0: 75 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2d 20 2a 0a  umentation..- *.
2ac0: 2d 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  - *-------------
2ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 2f 0a 2d  ---------.- */.-
2b10: 0a 2d 54 63 6c 5f 4f 62 6a 20 2a 0a 2d 54 63 6c  .-Tcl_Obj *.-Tcl
2b20: 5f 53 75 62 73 74 4f 62 6a 28 69 6e 74 65 72 70  _SubstObj(interp
2b30: 2c 20 6f 62 6a 50 74 72 2c 20 66 6c 61 67 73 29  , objPtr, flags)
2b40: 0a 2d 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  .-    Tcl_Interp
2b50: 20 2a 69 6e 74 65 72 70 3b 0a 2d 20 20 20 20 54   *interp;.-    T
2b60: 63 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 3b 0a  cl_Obj *objPtr;.
2b70: 2d 20 20 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a  -    int flags;.
2b80: 2d 7b 0a 2d 20 20 20 20 54 63 6c 5f 4f 62 6a 20  -{.-    Tcl_Obj 
2b90: 2a 72 65 73 75 6c 74 4f 62 6a 3b 0a 2d 20 20 20  *resultObj;.-   
2ba0: 20 63 68 61 72 20 2a 70 2c 20 2a 6f 6c 64 3b 0a   char *p, *old;.
2bb0: 2d 0a 2d 20 20 20 20 6f 6c 64 20 3d 20 70 20 3d  -.-    old = p =
2bc0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
2bd0: 62 6a 50 74 72 29 3b 0a 2d 20 20 20 20 72 65 73  bjPtr);.-    res
2be0: 75 6c 74 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77  ultObj = Tcl_New
2bf0: 53 74 72 69 6e 67 4f 62 6a 28 22 22 2c 20 30 29  StringObj("", 0)
2c00: 3b 0a 2d 20 20 20 20 77 68 69 6c 65 20 28 31 29  ;.-    while (1)
2c10: 20 7b 0a 2d 09 73 77 69 74 63 68 20 28 2a 70 29   {.-.switch (*p)
2c20: 20 7b 0a 2d 09 63 61 73 65 20 30 3a 0a 2d 09 20   {.-.case 0:.-. 
2c30: 20 20 20 69 66 20 28 70 20 21 3d 20 6f 6c 64 29     if (p != old)
2c40: 20 7b 0a 2d 09 09 54 63 6c 5f 41 70 70 65 6e 64   {.-..Tcl_Append
2c50: 54 6f 4f 62 6a 28 72 65 73 75 6c 74 4f 62 6a 2c  ToObj(resultObj,
2c60: 20 6f 6c 64 2c 20 70 2d 6f 6c 64 29 3b 0a 2d 09   old, p-old);.-.
2c70: 20 20 20 20 7d 0a 2d 09 20 20 20 20 72 65 74 75      }.-.    retu
2c80: 72 6e 20 72 65 73 75 6c 74 4f 62 6a 3b 0a 2d 0a  rn resultObj;.-.
2c90: 2d 09 63 61 73 65 20 27 5c 5c 27 3a 0a 2d 09 20  -.case '\\':.-. 
2ca0: 20 20 20 69 66 20 28 66 6c 61 67 73 20 26 20 54     if (flags & T
2cb0: 43 4c 5f 53 55 42 53 54 5f 42 41 43 4b 53 4c 41  CL_SUBST_BACKSLA
2cc0: 53 48 45 53 29 20 7b 0a 2d 09 09 63 68 61 72 20  SHES) {.-..char 
2cd0: 62 75 66 5b 54 43 4c 5f 55 54 46 5f 4d 41 58 5d  buf[TCL_UTF_MAX]
2ce0: 3b 0a 2d 09 09 69 6e 74 20 63 6f 75 6e 74 3b 0a  ;.-..int count;.
2cf0: 2d 0a 2d 09 09 69 66 20 28 70 20 21 3d 20 6f 6c  -.-..if (p != ol
2d00: 64 29 20 7b 0a 2d 09 09 20 20 20 20 54 63 6c 5f  d) {.-..    Tcl_
2d10: 41 70 70 65 6e 64 54 6f 4f 62 6a 28 72 65 73 75  AppendToObj(resu
2d20: 6c 74 4f 62 6a 2c 20 6f 6c 64 2c 20 70 2d 6f 6c  ltObj, old, p-ol
2d30: 64 29 3b 0a 2d 09 09 7d 0a 2d 09 09 54 63 6c 5f  d);.-..}.-..Tcl_
2d40: 41 70 70 65 6e 64 54 6f 4f 62 6a 28 72 65 73 75  AppendToObj(resu
2d50: 6c 74 4f 62 6a 2c 20 62 75 66 2c 0a 2d 09 09 09  ltObj, buf,.-...
2d60: 09 54 63 6c 5f 55 74 66 42 61 63 6b 73 6c 61 73  .Tcl_UtfBackslas
2d70: 68 28 70 2c 20 26 63 6f 75 6e 74 2c 20 62 75 66  h(p, &count, buf
2d80: 29 29 3b 0a 2d 09 09 70 20 2b 3d 20 63 6f 75 6e  ));.-..p += coun
2d90: 74 3b 0a 2d 09 09 6f 6c 64 20 3d 20 70 3b 0a 2d  t;.-..old = p;.-
2da0: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2d 09  .    } else {.-.
2db0: 09 70 2b 2b 3b 0a 2d 09 20 20 20 20 7d 0a 2d 09  .p++;.-.    }.-.
2dc0: 20 20 20 20 62 72 65 61 6b 3b 0a 2d 0a 2d 09 63      break;.-.-.c
2dd0: 61 73 65 20 27 24 27 3a 0a 2d 09 20 20 20 20 69  ase '$':.-.    i
2de0: 66 20 28 66 6c 61 67 73 20 26 20 54 43 4c 5f 53  f (flags & TCL_S
2df0: 55 42 53 54 5f 56 41 52 49 41 42 4c 45 53 29 20  UBST_VARIABLES) 
2e00: 7b 0a 2d 09 09 54 63 6c 5f 50 61 72 73 65 20 70  {.-..Tcl_Parse p
2e10: 61 72 73 65 3b 0a 2d 09 09 69 6e 74 20 63 6f 64  arse;.-..int cod
2e20: 65 3b 0a 2d 0a 2d 09 09 2f 2a 0a 2d 09 09 20 2a  e;.-.-../*.-.. *
2e30: 20 43 6f 64 65 20 69 73 20 73 69 6d 70 6c 65 72   Code is simpler
2e40: 20 6f 76 65 72 61 6c 6c 20 69 66 20 77 65 20 28   overall if we (
2e50: 65 66 66 65 63 74 69 76 65 6c 79 29 20 69 6e 6c  effectively) inl
2e60: 69 6e 65 0a 2d 09 09 20 2a 20 54 63 6c 5f 50 61  ine.-.. * Tcl_Pa
2e70: 72 73 65 56 61 72 2c 20 70 61 72 74 69 63 75 6c  rseVar, particul
2e80: 61 72 6c 79 20 61 73 20 74 68 61 74 20 61 6c 6c  arly as that all
2e90: 6f 77 73 20 75 73 20 74 6f 20 75 73 65 0a 2d 09  ows us to use.-.
2ea0: 09 20 2a 20 61 20 6e 6f 6e 2d 73 74 72 69 6e 67  . * a non-string
2eb0: 20 69 6e 74 65 72 66 61 63 65 20 77 68 65 6e 20   interface when 
2ec0: 77 65 20 63 6f 6d 65 20 74 6f 20 61 70 70 65 6e  we come to appen
2ed0: 64 69 6e 67 0a 2d 09 09 20 2a 20 74 68 65 20 76  ding.-.. * the v
2ee0: 61 72 69 61 62 6c 65 20 63 6f 6e 74 65 6e 74 73  ariable contents
2ef0: 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 6f   to the result o
2f00: 62 6a 65 63 74 2e 20 20 54 68 65 72 65 0a 2d 09  bject.  There.-.
2f10: 09 20 2a 20 61 72 65 20 61 20 66 65 77 20 6f 74  . * are a few ot
2f20: 68 65 72 20 6f 70 74 69 6d 69 73 61 74 69 6f 6e  her optimisation
2f30: 73 20 74 68 61 74 20 64 6f 69 6e 67 20 74 68 69  s that doing thi
2f40: 73 0a 2d 09 09 20 2a 20 65 6e 61 62 6c 65 73 20  s.-.. * enables 
2f50: 28 6c 69 6b 65 20 62 65 69 6e 67 20 61 62 6c 65  (like being able
2f60: 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 74 68 65   to continue the
2f70: 20 72 75 6e 20 6f 66 0a 2d 09 09 20 2a 20 75 6e   run of.-.. * un
2f80: 73 75 62 73 74 69 74 75 74 65 64 20 63 68 61 72  substituted char
2f90: 61 63 74 65 72 73 20 73 74 72 61 69 67 68 74 20  acters straight 
2fa0: 74 68 72 6f 75 67 68 20 69 66 20 61 20 27 24 27  through if a '$'
2fb0: 0a 2d 09 09 20 2a 20 64 6f 65 73 20 6e 6f 74 20  .-.. * does not 
2fc0: 70 72 65 63 65 64 65 20 61 20 76 61 72 69 61 62  precede a variab
2fd0: 6c 65 20 6e 61 6d 65 2e 29 0a 2d 09 09 20 2a 2f  le name.).-.. */
2fe0: 0a 2d 09 09 69 66 20 28 54 63 6c 5f 50 61 72 73  .-..if (Tcl_Pars
2ff0: 65 56 61 72 4e 61 6d 65 28 69 6e 74 65 72 70 2c  eVarName(interp,
3000: 20 70 2c 20 2d 31 2c 20 26 70 61 72 73 65 2c 20   p, -1, &parse, 
3010: 30 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  0) != TCL_OK) {.
3020: 2d 09 09 20 20 20 20 67 6f 74 6f 20 65 72 72 6f  -..    goto erro
3030: 72 52 65 73 75 6c 74 3b 0a 2d 09 09 7d 0a 2d 09  rResult;.-..}.-.
3040: 09 69 66 20 28 70 61 72 73 65 2e 6e 75 6d 54 6f  .if (parse.numTo
3050: 6b 65 6e 73 20 3d 3d 20 31 29 20 7b 0a 2d 09 09  kens == 1) {.-..
3060: 20 20 20 20 2f 2a 0a 2d 09 09 20 20 20 20 20 2a      /*.-..     *
3070: 20 54 68 65 72 65 20 69 73 6e 27 74 20 61 20 76   There isn't a v
3080: 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 61 66 74  ariable name aft
3090: 65 72 20 61 6c 6c 3a 20 74 68 65 20 24 20 69 73  er all: the $ is
30a0: 0a 2d 09 09 20 20 20 20 20 2a 20 6a 75 73 74 20  .-..     * just 
30b0: 61 20 24 2e 0a 2d 09 09 20 20 20 20 20 2a 2f 0a  a $..-..     */.
30c0: 2d 09 09 20 20 20 20 70 2b 2b 3b 0a 2d 09 09 20  -..    p++;.-.. 
30d0: 20 20 20 62 72 65 61 6b 3b 0a 2d 09 09 7d 0a 2d     break;.-..}.-
30e0: 09 09 69 66 20 28 70 20 21 3d 20 6f 6c 64 29 20  ..if (p != old) 
30f0: 7b 0a 2d 09 09 20 20 20 20 54 63 6c 5f 41 70 70  {.-..    Tcl_App
3100: 65 6e 64 54 6f 4f 62 6a 28 72 65 73 75 6c 74 4f  endToObj(resultO
3110: 62 6a 2c 20 6f 6c 64 2c 20 70 2d 6f 6c 64 29 3b  bj, old, p-old);
3120: 0a 2d 09 09 7d 0a 2d 09 09 70 20 2b 3d 20 70 61  .-..}.-..p += pa
3130: 72 73 65 2e 74 6f 6b 65 6e 50 74 72 2d 3e 73 69  rse.tokenPtr->si
3140: 7a 65 3b 0a 2d 09 09 63 6f 64 65 20 3d 20 54 63  ze;.-..code = Tc
3150: 6c 5f 45 76 61 6c 54 6f 6b 65 6e 73 53 74 61 6e  l_EvalTokensStan
3160: 64 61 72 64 28 69 6e 74 65 72 70 2c 20 70 61 72  dard(interp, par
3170: 73 65 2e 74 6f 6b 65 6e 50 74 72 2c 0a 2d 09 09  se.tokenPtr,.-..
3180: 20 20 20 20 20 20 20 20 70 61 72 73 65 2e 6e 75          parse.nu
3190: 6d 54 6f 6b 65 6e 73 29 3b 0a 2d 09 09 69 66 20  mTokens);.-..if 
31a0: 28 63 6f 64 65 20 3d 3d 20 54 43 4c 5f 45 52 52  (code == TCL_ERR
31b0: 4f 52 29 20 7b 0a 2d 09 09 20 20 20 20 67 6f 74  OR) {.-..    got
31c0: 6f 20 65 72 72 6f 72 52 65 73 75 6c 74 3b 0a 2d  o errorResult;.-
31d0: 09 09 7d 0a 2d 09 09 69 66 20 28 63 6f 64 65 20  ..}.-..if (code 
31e0: 3d 3d 20 54 43 4c 5f 42 52 45 41 4b 29 20 7b 0a  == TCL_BREAK) {.
31f0: 2d 09 09 20 20 20 20 54 63 6c 5f 52 65 73 65 74  -..    Tcl_Reset
3200: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a  Result(interp);.
3210: 2d 09 09 20 20 20 20 72 65 74 75 72 6e 20 72 65  -..    return re
3220: 73 75 6c 74 4f 62 6a 3b 0a 2d 09 09 7d 0a 2d 09  sultObj;.-..}.-.
3230: 09 69 66 20 28 63 6f 64 65 20 21 3d 20 54 43 4c  .if (code != TCL
3240: 5f 43 4f 4e 54 49 4e 55 45 29 20 7b 0a 2d 09 09  _CONTINUE) {.-..
3250: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 4f 62      Tcl_AppendOb
3260: 6a 54 6f 4f 62 6a 28 72 65 73 75 6c 74 4f 62 6a  jToObj(resultObj
3270: 2c 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75  , Tcl_GetObjResu
3280: 6c 74 28 69 6e 74 65 72 70 29 29 3b 0a 2d 09 09  lt(interp));.-..
3290: 7d 0a 2d 09 09 54 63 6c 5f 52 65 73 65 74 52 65  }.-..Tcl_ResetRe
32a0: 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 2d 09  sult(interp);.-.
32b0: 09 6f 6c 64 20 3d 20 70 3b 0a 2d 09 20 20 20 20  .old = p;.-.    
32c0: 7d 20 65 6c 73 65 20 7b 0a 2d 09 09 70 2b 2b 3b  } else {.-..p++;
32d0: 0a 2d 09 20 20 20 20 7d 0a 2d 09 20 20 20 20 62  .-.    }.-.    b
32e0: 72 65 61 6b 3b 0a 2d 0a 2d 09 63 61 73 65 20 27  reak;.-.-.case '
32f0: 5b 27 3a 0a 2d 09 20 20 20 20 69 66 20 28 66 6c  [':.-.    if (fl
3300: 61 67 73 20 26 20 54 43 4c 5f 53 55 42 53 54 5f  ags & TCL_SUBST_
3310: 43 4f 4d 4d 41 4e 44 53 29 20 7b 0a 2d 09 09 49  COMMANDS) {.-..I
3320: 6e 74 65 72 70 20 2a 69 50 74 72 20 3d 20 28 49  nterp *iPtr = (I
3330: 6e 74 65 72 70 20 2a 29 20 69 6e 74 65 72 70 3b  nterp *) interp;
3340: 0a 2d 09 09 69 6e 74 20 63 6f 64 65 3b 0a 2d 0a  .-..int code;.-.
3350: 2d 09 09 69 66 20 28 70 20 21 3d 20 6f 6c 64 29  -..if (p != old)
3360: 20 7b 0a 2d 09 09 20 20 20 20 54 63 6c 5f 41 70   {.-..    Tcl_Ap
3370: 70 65 6e 64 54 6f 4f 62 6a 28 72 65 73 75 6c 74  pendToObj(result
3380: 4f 62 6a 2c 20 6f 6c 64 2c 20 70 2d 6f 6c 64 29  Obj, old, p-old)
3390: 3b 0a 2d 09 09 7d 0a 2d 09 09 69 50 74 72 2d 3e  ;.-..}.-..iPtr->
33a0: 65 76 61 6c 46 6c 61 67 73 20 3d 20 54 43 4c 5f  evalFlags = TCL_
33b0: 42 52 41 43 4b 45 54 5f 54 45 52 4d 3b 0a 2d 09  BRACKET_TERM;.-.
33c0: 09 63 6f 64 65 20 3d 20 54 63 6c 5f 45 76 61 6c  .code = Tcl_Eval
33d0: 45 78 28 69 6e 74 65 72 70 2c 20 70 2b 31 2c 20  Ex(interp, p+1, 
33e0: 2d 31 2c 20 30 29 3b 0a 2d 09 09 73 77 69 74 63  -1, 0);.-..switc
33f0: 68 20 28 63 6f 64 65 29 20 7b 0a 2d 09 09 63 61  h (code) {.-..ca
3400: 73 65 20 54 43 4c 5f 45 52 52 4f 52 3a 0a 2d 09  se TCL_ERROR:.-.
3410: 09 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 52  .    goto errorR
3420: 65 73 75 6c 74 3b 0a 2d 09 09 63 61 73 65 20 54  esult;.-..case T
3430: 43 4c 5f 42 52 45 41 4b 3a 0a 2d 09 09 20 20 20  CL_BREAK:.-..   
3440: 20 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74   Tcl_ResetResult
3450: 28 69 6e 74 65 72 70 29 3b 0a 2d 09 09 20 20 20  (interp);.-..   
3460: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 4f 62   return resultOb
3470: 6a 3b 0a 2d 09 09 64 65 66 61 75 6c 74 3a 0a 2d  j;.-..default:.-
3480: 09 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ..    Tcl_Append
3490: 4f 62 6a 54 6f 4f 62 6a 28 72 65 73 75 6c 74 4f  ObjToObj(resultO
34a0: 62 6a 2c 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65  bj, Tcl_GetObjRe
34b0: 73 75 6c 74 28 69 6e 74 65 72 70 29 29 3b 0a 2d  sult(interp));.-
34c0: 09 09 63 61 73 65 20 54 43 4c 5f 43 4f 4e 54 49  ..case TCL_CONTI
34d0: 4e 55 45 3a 0a 2d 09 09 20 20 20 20 54 63 6c 5f  NUE:.-..    Tcl_
34e0: 52 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65  ResetResult(inte
34f0: 72 70 29 3b 0a 2d 09 09 20 20 20 20 6f 6c 64 20  rp);.-..    old 
3500: 3d 20 70 20 3d 20 28 70 2b 31 20 2b 20 69 50 74  = p = (p+1 + iPt
3510: 72 2d 3e 74 65 72 6d 4f 66 66 73 65 74 20 2b 20  r->termOffset + 
3520: 31 29 3b 0a 2d 09 09 7d 0a 2d 09 20 20 20 20 7d  1);.-..}.-.    }
3530: 20 65 6c 73 65 20 7b 0a 2d 09 09 70 2b 2b 3b 0a   else {.-..p++;.
3540: 2d 09 20 20 20 20 7d 0a 2d 09 20 20 20 20 62 72  -.    }.-.    br
3550: 65 61 6b 3b 0a 2d 09 64 65 66 61 75 6c 74 3a 0a  eak;.-.default:.
3560: 2d 09 20 20 20 20 70 2b 2b 3b 0a 2d 09 20 20 20  -.    p++;.-.   
3570: 20 62 72 65 61 6b 3b 0a 2d 09 7d 0a 2d 20 20 20   break;.-.}.-   
3580: 20 7d 0a 2d 0a 2d 20 65 72 72 6f 72 52 65 73 75   }.-.- errorResu
3590: 6c 74 3a 0a 2d 20 20 20 20 54 63 6c 5f 44 65 63  lt:.-    Tcl_Dec
35a0: 72 52 65 66 43 6f 75 6e 74 28 72 65 73 75 6c 74  rRefCount(result
35b0: 4f 62 6a 29 3b 0a 2d 20 20 20 20 72 65 74 75 72  Obj);.-    retur
35c0: 6e 20 4e 55 4c 4c 3b 0a 2d 7d 0a 2d 0c 0a 2d 2f  n NULL;.-}.-..-/
35d0: 2a 0a 2d 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.- *-----------
35e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
35f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 0a  -----------.- *.
3620: 20 20 2a 20 54 63 6c 5f 53 77 69 74 63 68 4f 62    * Tcl_SwitchOb
3630: 6a 43 6d 64 20 2d 2d 0a 20 20 2a 0a 20 20 2a 09  jCmd --.  *.  *.
3640: 54 68 69 73 20 6f 62 6a 65 63 74 2d 62 61 73 65  This object-base
3650: 64 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 69  d procedure is i
3660: 6e 76 6f 6b 65 64 20 74 6f 20 70 72 6f 63 65 73  nvoked to proces
3670: 73 20 74 68 65 20 22 73 77 69 74 63 68 22 20 54  s the "switch" T
3680: 63 6c 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69  cl.Index: generi
3690: 63 2f 74 63 6c 43 6f 6d 70 43 6d 64 73 2e 63 0a  c/tclCompCmds.c.
36a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
36b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
36c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
36d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
36e0: 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63  ===.RCS file: /c
36f0: 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67  vsroot/tcl/tcl/g
3700: 65 6e 65 72 69 63 2f 74 63 6c 43 6f 6d 70 43 6d  eneric/tclCompCm
3710: 64 73 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e  ds.c,v.retrievin
3720: 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 34 31 0a  g revision 1.41.
3730: 64 69 66 66 20 2d 75 20 2d 72 31 2e 34 31 20 74  diff -u -r1.41 t
3740: 63 6c 43 6f 6d 70 43 6d 64 73 2e 63 0a 2d 2d 2d  clCompCmds.c.---
3750: 20 67 65 6e 65 72 69 63 2f 74 63 6c 43 6f 6d 70   generic/tclComp
3760: 43 6d 64 73 2e 63 09 36 20 4d 61 72 20 32 30 30  Cmds.c.6 Mar 200
3770: 33 20 32 33 3a 31 37 3a 30 39 20 2d 30 30 30 30  3 23:17:09 -0000
3780: 09 31 2e 34 31 0a 2b 2b 2b 20 67 65 6e 65 72 69  .1.41.+++ generi
3790: 63 2f 74 63 6c 43 6f 6d 70 43 6d 64 73 2e 63 09  c/tclCompCmds.c.
37a0: 31 33 20 4d 61 72 20 32 30 30 33 20 30 32 3a 32  13 Mar 2003 02:2
37b0: 36 3a 35 38 20 2d 30 30 30 30 0a 40 40 20 2d 33  6:58 -0000.@@ -3
37c0: 31 34 30 2c 37 20 2b 33 31 34 30 2c 37 20 40 40  140,7 +3140,7 @@
37d0: 0a 20 09 54 63 6c 45 6d 69 74 4f 70 63 6f 64 65  . .TclEmitOpcode
37e0: 28 49 4e 53 54 5f 50 4f 50 2c 20 65 6e 76 50 74  (INST_POP, envPt
37f0: 72 29 3b 0a 20 09 65 6e 76 50 74 72 2d 3e 63 75  r);. .envPtr->cu
3800: 72 72 53 74 61 63 6b 44 65 70 74 68 20 3d 20 73  rrStackDepth = s
3810: 61 76 65 64 53 74 61 63 6b 44 65 70 74 68 20 2b  avedStackDepth +
3820: 20 31 3b 0a 20 09 63 6f 64 65 20 3d 20 54 63 6c   1;. .code = Tcl
3830: 43 6f 6d 70 69 6c 65 53 63 72 69 70 74 28 69 6e  CompileScript(in
3840: 74 65 72 70 2c 20 62 6f 64 79 54 6f 6b 65 6e 41  terp, bodyTokenA
3850: 72 72 61 79 5b 69 2b 31 5d 2e 73 74 61 72 74 2c  rray[i+1].start,
3860: 0a 2d 09 09 62 6f 64 79 54 6f 6b 65 6e 41 72 72  .-..bodyTokenArr
3870: 61 79 5b 69 2b 31 5d 2e 73 69 7a 65 2c 20 2f 2a  ay[i+1].size, /*
3880: 6e 65 73 74 65 64 2a 2f 20 30 2c 20 65 6e 76 50  nested*/ 0, envP
3890: 74 72 29 3b 0a 2b 09 09 62 6f 64 79 54 6f 6b 65  tr);.+..bodyToke
38a0: 6e 41 72 72 61 79 5b 69 2b 31 5d 2e 73 69 7a 65  nArray[i+1].size
38b0: 2c 20 65 6e 76 50 74 72 29 3b 0a 20 09 69 66 20  , envPtr);. .if 
38c0: 28 63 6f 64 65 20 21 3d 20 54 43 4c 5f 4f 4b 29  (code != TCL_OK)
38d0: 20 7b 0a 20 09 20 20 20 20 63 6b 66 72 65 65 28   {. .    ckfree(
38e0: 28 63 68 61 72 20 2a 29 61 72 67 76 29 3b 0a 20  (char *)argv);. 
38f0: 09 20 20 20 20 63 6b 66 72 65 65 28 28 63 68 61  .    ckfree((cha
3900: 72 20 2a 29 62 6f 64 79 54 6f 6b 65 6e 41 72 72  r *)bodyTokenArr
3910: 61 79 29 3b 0a 49 6e 64 65 78 3a 20 67 65 6e 65  ay);.Index: gene
3920: 72 69 63 2f 74 63 6c 43 6f 6d 70 45 78 70 72 2e  ric/tclCompExpr.
3930: 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  c.==============
3940: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3950: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3960: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3970: 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20  =====.RCS file: 
3980: 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c  /cvsroot/tcl/tcl
3990: 2f 67 65 6e 65 72 69 63 2f 74 63 6c 43 6f 6d 70  /generic/tclComp
39a0: 45 78 70 72 2e 63 2c 76 0a 72 65 74 72 69 65 76  Expr.c,v.retriev
39b0: 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 31  ing revision 1.1
39c0: 33 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 31 33  3.diff -u -r1.13
39d0: 20 74 63 6c 43 6f 6d 70 45 78 70 72 2e 63 0a 2d   tclCompExpr.c.-
39e0: 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 43 6f  -- generic/tclCo
39f0: 6d 70 45 78 70 72 2e 63 09 31 36 20 46 65 62 20  mpExpr.c.16 Feb 
3a00: 32 30 30 33 20 30 31 3a 33 36 3a 33 32 20 2d 30  2003 01:36:32 -0
3a10: 30 30 30 09 31 2e 31 33 0a 2b 2b 2b 20 67 65 6e  000.1.13.+++ gen
3a20: 65 72 69 63 2f 74 63 6c 43 6f 6d 70 45 78 70 72  eric/tclCompExpr
3a30: 2e 63 09 31 33 20 4d 61 72 20 32 30 30 33 20 30  .c.13 Mar 2003 0
3a40: 32 3a 32 36 3a 35 38 20 2d 30 30 30 30 0a 40 40  2:26:58 -0000.@@
3a50: 20 2d 33 39 38 2c 37 20 2b 33 39 38 2c 37 20 40   -398,7 +398,7 @
3a60: 40 0a 20 09 20 20 20 20 0a 20 20 20 20 20 20 20  @. .    .       
3a70: 20 20 63 61 73 65 20 54 43 4c 5f 54 4f 4b 45 4e    case TCL_TOKEN
3a80: 5f 43 4f 4d 4d 41 4e 44 3a 0a 20 09 20 20 20 20  _COMMAND:. .    
3a90: 63 6f 64 65 20 3d 20 54 63 6c 43 6f 6d 70 69 6c  code = TclCompil
3aa0: 65 53 63 72 69 70 74 28 69 6e 74 65 72 70 2c 20  eScript(interp, 
3ab0: 74 6f 6b 65 6e 50 74 72 2d 3e 73 74 61 72 74 2b  tokenPtr->start+
3ac0: 31 2c 0a 2d 09 09 20 20 20 20 74 6f 6b 65 6e 50  1,.-..    tokenP
3ad0: 74 72 2d 3e 73 69 7a 65 2d 32 2c 20 2f 2a 6e 65  tr->size-2, /*ne
3ae0: 73 74 65 64 2a 2f 20 30 2c 20 65 6e 76 50 74 72  sted*/ 0, envPtr
3af0: 29 3b 0a 2b 09 09 20 20 20 20 74 6f 6b 65 6e 50  );.+..    tokenP
3b00: 74 72 2d 3e 73 69 7a 65 2d 32 2c 20 65 6e 76 50  tr->size-2, envP
3b10: 74 72 29 3b 0a 20 09 20 20 20 20 69 66 20 28 63  tr);. .    if (c
3b20: 6f 64 65 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  ode != TCL_OK) {
3b30: 0a 20 09 09 67 6f 74 6f 20 64 6f 6e 65 3b 0a 20  . ..goto done;. 
3b40: 09 20 20 20 20 7d 0a 49 6e 64 65 78 3a 20 67 65  .    }.Index: ge
3b50: 6e 65 72 69 63 2f 74 63 6c 43 6f 6d 70 69 6c 65  neric/tclCompile
3b60: 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .c.=============
3b70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3b80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3b90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3ba0: 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a  ======.RCS file:
3bb0: 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63   /cvsroot/tcl/tc
3bc0: 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c 43 6f 6d  l/generic/tclCom
3bd0: 70 69 6c 65 2e 63 2c 76 0a 72 65 74 72 69 65 76  pile.c,v.retriev
3be0: 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 34  ing revision 1.4
3bf0: 33 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 34 33  3.diff -u -r1.43
3c00: 20 74 63 6c 43 6f 6d 70 69 6c 65 2e 63 0a 2d 2d   tclCompile.c.--
3c10: 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 43 6f 6d  - generic/tclCom
3c20: 70 69 6c 65 2e 63 09 31 39 20 46 65 62 20 32 30  pile.c.19 Feb 20
3c30: 30 33 20 31 34 3a 33 33 3a 33 39 20 2d 30 30 30  03 14:33:39 -000
3c40: 30 09 31 2e 34 33 0a 2b 2b 2b 20 67 65 6e 65 72  0.1.43.+++ gener
3c50: 69 63 2f 74 63 6c 43 6f 6d 70 69 6c 65 2e 63 09  ic/tclCompile.c.
3c60: 31 33 20 4d 61 72 20 32 30 30 33 20 30 32 3a 32  13 Mar 2003 02:2
3c70: 36 3a 35 38 20 2d 30 30 30 30 0a 40 40 20 2d 33  6:58 -0000.@@ -3
3c80: 34 38 2c 31 34 20 2b 33 34 38 2c 31 36 20 40 40  48,14 +348,16 @@
3c90: 0a 20 20 20 20 20 43 6f 6d 70 69 6c 65 48 6f 6f  .     CompileHoo
3ca0: 6b 50 72 6f 63 20 2a 68 6f 6f 6b 50 72 6f 63 3b  kProc *hookProc;
3cb0: 09 2f 2a 20 50 72 6f 63 65 64 75 72 65 20 74 6f  ./* Procedure to
3cc0: 20 69 6e 76 6f 6b 65 20 61 66 74 65 72 20 63 6f   invoke after co
3cd0: 6d 70 69 6c 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20  mpilation. */.  
3ce0: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c     ClientData cl
3cf0: 69 65 6e 74 44 61 74 61 3b 09 2f 2a 20 48 6f 6f  ientData;./* Hoo
3d00: 6b 20 70 72 6f 63 65 64 75 72 65 20 70 72 69 76  k procedure priv
3d10: 61 74 65 20 64 61 74 61 2e 20 2a 2f 0a 20 7b 0a  ate data. */. {.
3d20: 2b 23 69 66 64 65 66 20 54 43 4c 5f 43 4f 4d 50  +#ifdef TCL_COMP
3d30: 49 4c 45 5f 44 45 42 55 47 0a 20 20 20 20 20 49  ILE_DEBUG.     I
3d40: 6e 74 65 72 70 20 2a 69 50 74 72 20 3d 20 28 49  nterp *iPtr = (I
3d50: 6e 74 65 72 70 20 2a 29 20 69 6e 74 65 72 70 3b  nterp *) interp;
3d60: 0a 2b 23 65 6e 64 69 66 20 2f 2a 54 43 4c 5f 43  .+#endif /*TCL_C
3d70: 4f 4d 50 49 4c 45 5f 44 45 42 55 47 2a 2f 0a 20  OMPILE_DEBUG*/. 
3d80: 20 20 20 20 43 6f 6d 70 69 6c 65 45 6e 76 20 63      CompileEnv c
3d90: 6f 6d 70 45 6e 76 3b 09 09 2f 2a 20 43 6f 6d 70  ompEnv;../* Comp
3da0: 69 6c 61 74 69 6f 6e 20 65 6e 76 69 72 6f 6e 6d  ilation environm
3db0: 65 6e 74 20 73 74 72 75 63 74 75 72 65 0a 20 09  ent structure. .
3dc0: 09 09 09 20 2a 20 61 6c 6c 6f 63 61 74 65 64 20  ... * allocated 
3dd0: 69 6e 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20  in frame. */.   
3de0: 20 20 4c 69 74 65 72 61 6c 54 61 62 6c 65 20 2a    LiteralTable *
3df0: 6c 6f 63 61 6c 54 61 62 6c 65 50 74 72 20 3d 20  localTablePtr = 
3e00: 26 28 63 6f 6d 70 45 6e 76 2e 6c 6f 63 61 6c 4c  &(compEnv.localL
3e10: 69 74 54 61 62 6c 65 29 3b 0a 20 20 20 20 20 72  itTable);.     r
3e20: 65 67 69 73 74 65 72 20 41 75 78 44 61 74 61 20  egister AuxData 
3e30: 2a 61 75 78 44 61 74 61 50 74 72 3b 0a 20 20 20  *auxDataPtr;.   
3e40: 20 20 4c 69 74 65 72 61 6c 45 6e 74 72 79 20 2a    LiteralEntry *
3e50: 65 6e 74 72 79 50 74 72 3b 0a 20 20 20 20 20 72  entryPtr;.     r
3e60: 65 67 69 73 74 65 72 20 69 6e 74 20 69 3b 0a 2d  egister int i;.-
3e70: 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 2c 20      int length, 
3e80: 6e 65 73 74 65 64 2c 20 72 65 73 75 6c 74 3b 0a  nested, result;.
3e90: 2b 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 2c  +    int length,
3ea0: 20 72 65 73 75 6c 74 3b 0a 20 20 20 20 20 63 68   result;.     ch
3eb0: 61 72 20 2a 73 74 72 69 6e 67 3b 0a 20 0a 20 23  ar *string;. . #
3ec0: 69 66 64 65 66 20 54 43 4c 5f 43 4f 4d 50 49 4c  ifdef TCL_COMPIL
3ed0: 45 5f 44 45 42 55 47 0a 40 40 20 2d 33 36 38 2c  E_DEBUG.@@ -368,
3ee0: 32 31 20 2b 33 37 30 2c 31 35 20 40 40 0a 20 20  21 +370,15 @@.  
3ef0: 20 20 20 7d 0a 20 23 65 6e 64 69 66 0a 20 0a 2d     }. #endif. .-
3f00: 20 20 20 20 69 66 20 28 69 50 74 72 2d 3e 65 76      if (iPtr->ev
3f10: 61 6c 46 6c 61 67 73 20 26 20 54 43 4c 5f 42 52  alFlags & TCL_BR
3f20: 41 43 4b 45 54 5f 54 45 52 4d 29 20 7b 0a 2d 09  ACKET_TERM) {.-.
3f30: 6e 65 73 74 65 64 20 3d 20 31 3b 0a 2d 20 20 20  nested = 1;.-   
3f40: 20 7d 20 65 6c 73 65 20 7b 0a 2d 09 6e 65 73 74   } else {.-.nest
3f50: 65 64 20 3d 20 30 3b 0a 2d 20 20 20 20 7d 0a 20  ed = 0;.-    }. 
3f60: 20 20 20 20 73 74 72 69 6e 67 20 3d 20 54 63 6c      string = Tcl
3f70: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
3f80: 6a 28 6f 62 6a 50 74 72 2c 20 26 6c 65 6e 67 74  j(objPtr, &lengt
3f90: 68 29 3b 0a 20 20 20 20 20 54 63 6c 49 6e 69 74  h);.     TclInit
3fa0: 43 6f 6d 70 69 6c 65 45 6e 76 28 69 6e 74 65 72  CompileEnv(inter
3fb0: 70 2c 20 26 63 6f 6d 70 45 6e 76 2c 20 73 74 72  p, &compEnv, str
3fc0: 69 6e 67 2c 20 6c 65 6e 67 74 68 29 3b 0a 2d 20  ing, length);.- 
3fd0: 20 20 20 72 65 73 75 6c 74 20 3d 20 54 63 6c 43     result = TclC
3fe0: 6f 6d 70 69 6c 65 53 63 72 69 70 74 28 69 6e 74  ompileScript(int
3ff0: 65 72 70 2c 20 73 74 72 69 6e 67 2c 20 6c 65 6e  erp, string, len
4000: 67 74 68 2c 20 6e 65 73 74 65 64 2c 20 26 63 6f  gth, nested, &co
4010: 6d 70 45 6e 76 29 3b 0a 2b 20 20 20 20 72 65 73  mpEnv);.+    res
4020: 75 6c 74 20 3d 20 54 63 6c 43 6f 6d 70 69 6c 65  ult = TclCompile
4030: 53 63 72 69 70 74 28 69 6e 74 65 72 70 2c 20 73  Script(interp, s
4040: 74 72 69 6e 67 2c 20 6c 65 6e 67 74 68 2c 20 26  tring, length, &
4050: 63 6f 6d 70 45 6e 76 29 3b 0a 20 0a 20 20 20 20  compEnv);. .    
4060: 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 54   if (result == T
4070: 43 4c 5f 4f 4b 29 20 7b 0a 20 09 2f 2a 0a 20 09  CL_OK) {. ./*. .
4080: 20 2a 20 53 75 63 63 65 73 73 66 75 6c 20 63 6f   * Successful co
4090: 6d 70 69 6c 61 74 69 6f 6e 2e 20 41 64 64 20 61  mpilation. Add a
40a0: 20 22 64 6f 6e 65 22 20 69 6e 73 74 72 75 63 74   "done" instruct
40b0: 69 6f 6e 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  ion at the end..
40c0: 20 09 20 2a 2f 0a 20 0a 2d 09 63 6f 6d 70 45 6e   . */. .-.compEn
40d0: 76 2e 6e 75 6d 53 72 63 42 79 74 65 73 20 3d 20  v.numSrcBytes = 
40e0: 69 50 74 72 2d 3e 74 65 72 6d 4f 66 66 73 65 74  iPtr->termOffset
40f0: 3b 0a 20 09 54 63 6c 45 6d 69 74 4f 70 63 6f 64  ;. .TclEmitOpcod
4100: 65 28 49 4e 53 54 5f 44 4f 4e 45 2c 20 26 63 6f  e(INST_DONE, &co
4110: 6d 70 45 6e 76 29 3b 0a 20 0a 20 09 2f 2a 0a 40  mpEnv);. . ./*.@
4120: 40 20 2d 37 38 36 2c 31 30 20 2b 37 38 32 2c 36  @ -786,10 +782,6
4130: 20 40 40 0a 20 20 2a 09 6f 6e 20 66 61 69 6c 75   @@.  *.on failu
4140: 72 65 2e 20 49 66 20 54 43 4c 5f 45 52 52 4f 52  re. If TCL_ERROR
4150: 20 69 73 20 72 65 74 75 72 6e 65 64 2c 20 74 68   is returned, th
4160: 65 6e 20 74 68 65 20 69 6e 74 65 72 70 72 65 74  en the interpret
4170: 65 72 27 73 20 72 65 73 75 6c 74 0a 20 20 2a 09  er's result.  *.
4180: 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 72 72 6f  contains an erro
4190: 72 20 6d 65 73 73 61 67 65 2e 0a 20 20 2a 0a 2d  r message..  *.-
41a0: 20 2a 09 69 6e 74 65 72 70 2d 3e 74 65 72 6d 4f   *.interp->termO
41b0: 66 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20  ffset is set to 
41c0: 74 68 65 20 6f 66 66 73 65 74 20 6f 66 20 74 68  the offset of th
41d0: 65 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74  e character in t
41e0: 68 65 0a 2d 20 2a 09 73 63 72 69 70 74 20 6a 75  he.- *.script ju
41f0: 73 74 20 61 66 74 65 72 20 74 68 65 20 6c 61 73  st after the las
4200: 74 20 6f 6e 65 20 73 75 63 63 65 73 73 66 75 6c  t one successful
4210: 6c 79 20 70 72 6f 63 65 73 73 65 64 3b 20 74 68  ly processed; th
4220: 69 73 20 77 69 6c 6c 20 62 65 0a 2d 20 2a 09 74  is will be.- *.t
4230: 68 65 20 6f 66 66 73 65 74 20 6f 66 20 74 68 65  he offset of the
4240: 20 27 5d 27 20 69 66 20 28 66 6c 61 67 73 20 26   ']' if (flags &
4250: 20 54 43 4c 5f 42 52 41 43 4b 45 54 5f 54 45 52   TCL_BRACKET_TER
4260: 4d 29 2e 0a 2d 20 2a 0a 20 20 2a 20 53 69 64 65  M)..- *.  * Side
4270: 20 65 66 66 65 63 74 73 3a 0a 20 20 2a 09 41 64   effects:.  *.Ad
4280: 64 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ds instructions 
4290: 74 6f 20 65 6e 76 50 74 72 20 74 6f 20 65 76 61  to envPtr to eva
42a0: 6c 75 61 74 65 20 74 68 65 20 73 63 72 69 70 74  luate the script
42b0: 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 20 20 2a   at runtime..  *
42c0: 0a 40 40 20 2d 37 39 37 2c 37 20 2b 37 38 39 2c  .@@ -797,7 +789,
42d0: 37 20 40 40 0a 20 20 2a 2f 0a 20 0a 20 69 6e 74  7 @@.  */. . int
42e0: 0a 2d 54 63 6c 43 6f 6d 70 69 6c 65 53 63 72 69  .-TclCompileScri
42f0: 70 74 28 69 6e 74 65 72 70 2c 20 73 63 72 69 70  pt(interp, scrip
4300: 74 2c 20 6e 75 6d 42 79 74 65 73 2c 20 6e 65 73  t, numBytes, nes
4310: 74 65 64 2c 20 65 6e 76 50 74 72 29 0a 2b 54 63  ted, envPtr).+Tc
4320: 6c 43 6f 6d 70 69 6c 65 53 63 72 69 70 74 28 69  lCompileScript(i
4330: 6e 74 65 72 70 2c 20 73 63 72 69 70 74 2c 20 6e  nterp, script, n
4340: 75 6d 42 79 74 65 73 2c 20 65 6e 76 50 74 72 29  umBytes, envPtr)
4350: 0a 20 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  .     Tcl_Interp
4360: 20 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 55 73   *interp;../* Us
4370: 65 64 20 66 6f 72 20 65 72 72 6f 72 20 61 6e 64  ed for error and
4380: 20 73 74 61 74 75 73 20 72 65 70 6f 72 74 69 6e   status reportin
4390: 67 2e 0a 20 09 09 09 09 20 2a 20 41 6c 73 6f 20  g.. .... * Also 
43a0: 73 65 72 76 65 73 20 61 73 20 63 6f 6e 74 65 78  serves as contex
43b0: 74 20 66 6f 72 20 66 69 6e 64 69 6e 67 20 61 6e  t for finding an
43c0: 64 0a 20 09 09 09 09 20 2a 20 63 6f 6d 70 69 6c  d. .... * compil
43d0: 69 6e 67 20 63 6f 6d 6d 61 6e 64 73 2e 20 20 4d  ing commands.  M
43e0: 61 79 20 6e 6f 74 20 62 65 20 4e 55 4c 4c 2e 20  ay not be NULL. 
43f0: 2a 2f 0a 40 40 20 2d 38 30 35 2c 31 30 20 2b 37  */.@@ -805,10 +7
4400: 39 37 2c 36 20 40 40 0a 20 20 20 20 20 69 6e 74  97,6 @@.     int
4410: 20 6e 75 6d 42 79 74 65 73 3b 09 09 2f 2a 20 4e   numBytes;../* N
4420: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
4430: 6e 20 73 63 72 69 70 74 2e 20 49 66 20 3c 20 30  n script. If < 0
4440: 2c 20 74 68 65 0a 20 09 09 09 09 20 2a 20 73 63  , the. .... * sc
4450: 72 69 70 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  ript consists of
4460: 20 61 6c 6c 20 62 79 74 65 73 20 75 70 20 74 6f   all bytes up to
4470: 20 74 68 65 0a 20 09 09 09 09 20 2a 20 66 69 72   the. .... * fir
4480: 73 74 20 6e 75 6c 6c 20 63 68 61 72 61 63 74 65  st null characte
4490: 72 2e 20 2a 2f 0a 2d 20 20 20 20 69 6e 74 20 6e  r. */.-    int n
44a0: 65 73 74 65 64 3b 09 09 09 2f 2a 20 4e 6f 6e 2d  ested;.../* Non-
44b0: 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68 69 73 20  zero means this 
44c0: 69 73 20 61 20 6e 65 73 74 65 64 20 63 6f 6d 6d  is a nested comm
44d0: 61 6e 64 3a 0a 2d 09 09 09 09 20 2a 20 63 6c 6f  and:.-.... * clo
44e0: 73 65 20 62 72 61 63 6b 65 74 20 27 5d 27 20 73  se bracket ']' s
44f0: 68 6f 75 6c 64 20 62 65 20 63 6f 6e 73 69 64 65  hould be conside
4500: 72 65 64 20 61 0a 2d 09 09 09 09 20 2a 20 63 6f  red a.-.... * co
4510: 6d 6d 61 6e 64 20 74 65 72 6d 69 6e 61 74 6f 72  mmand terminator
4520: 2e 20 49 66 20 7a 65 72 6f 2c 20 63 6c 6f 73 65  . If zero, close
4530: 0a 2d 09 09 09 09 20 2a 20 62 72 61 63 6b 65 74  .-.... * bracket
4540: 20 68 61 73 20 6e 6f 20 73 70 65 63 69 61 6c 20   has no special 
4550: 6d 65 61 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  meaning. */.    
4560: 20 43 6f 6d 70 69 6c 65 45 6e 76 20 2a 65 6e 76   CompileEnv *env
4570: 50 74 72 3b 09 09 2f 2a 20 48 6f 6c 64 73 20 72  Ptr;../* Holds r
4580: 65 73 75 6c 74 69 6e 67 20 69 6e 73 74 72 75 63  esulting instruc
4590: 74 69 6f 6e 73 2e 20 2a 2f 0a 20 7b 0a 20 20 20  tions. */. {.   
45a0: 20 20 49 6e 74 65 72 70 20 2a 69 50 74 72 20 3d    Interp *iPtr =
45b0: 20 28 49 6e 74 65 72 70 20 2a 29 20 69 6e 74 65   (Interp *) inte
45c0: 72 70 3b 0a 40 40 20 2d 38 34 35 2c 35 35 20 2b  rp;.@@ -845,55 +
45d0: 38 33 33 2c 31 31 20 40 40 0a 20 20 20 20 20 62  833,11 @@.     b
45e0: 79 74 65 73 4c 65 66 74 20 3d 20 6e 75 6d 42 79  ytesLeft = numBy
45f0: 74 65 73 3b 0a 20 20 20 20 20 67 6f 74 50 61 72  tes;.     gotPar
4600: 73 65 20 3d 20 30 3b 0a 20 20 20 20 20 64 6f 20  se = 0;.     do 
4610: 7b 0a 2d 09 69 66 20 28 54 63 6c 5f 50 61 72 73  {.-.if (Tcl_Pars
4620: 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  eCommand(interp,
4630: 20 70 2c 20 62 79 74 65 73 4c 65 66 74 2c 20 6e   p, bytesLeft, n
4640: 65 73 74 65 64 2c 20 26 70 61 72 73 65 29 20 21  ested, &parse) !
4650: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 69 66  = TCL_OK) {.+.if
4660: 20 28 54 63 6c 5f 50 61 72 73 65 43 6f 6d 6d 61   (Tcl_ParseComma
4670: 6e 64 28 69 6e 74 65 72 70 2c 20 70 2c 20 62 79  nd(interp, p, by
4680: 74 65 73 4c 65 66 74 2c 20 30 2c 20 26 70 61 72  tesLeft, 0, &par
4690: 73 65 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  se) != TCL_OK) {
46a0: 0a 20 09 20 20 20 20 63 6f 64 65 20 3d 20 54 43  . .    code = TC
46b0: 4c 5f 45 52 52 4f 52 3b 0a 20 09 20 20 20 20 67  L_ERROR;. .    g
46c0: 6f 74 6f 20 65 72 72 6f 72 3b 0a 20 09 7d 0a 20  oto error;. .}. 
46d0: 09 67 6f 74 50 61 72 73 65 20 3d 20 31 3b 0a 2d  .gotParse = 1;.-
46e0: 09 69 66 20 28 6e 65 73 74 65 64 29 20 7b 0a 2d  .if (nested) {.-
46f0: 09 20 20 20 20 2f 2a 0a 2d 09 20 20 20 20 20 2a  .    /*.-.     *
4700: 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e 75 73   This is an unus
4710: 75 61 6c 20 73 69 74 75 61 74 69 6f 6e 20 77 68  ual situation wh
4720: 65 72 65 20 74 68 65 20 63 61 6c 6c 65 72 20 68  ere the caller h
4730: 61 73 20 70 61 73 73 65 64 20 75 73 0a 2d 09 20  as passed us.-. 
4740: 20 20 20 20 2a 20 61 20 6e 6f 6e 2d 7a 65 72 6f      * a non-zero
4750: 20 76 61 6c 75 65 20 66 6f 72 20 22 6e 65 73 74   value for "nest
4760: 65 64 22 2e 20 20 48 6f 77 20 75 6e 75 73 75 61  ed".  How unusua
4770: 6c 3f 20 20 57 65 6c 6c 2c 20 74 68 69 73 0a 2d  l?  Well, this.-
4780: 09 20 20 20 20 20 2a 20 70 72 6f 63 65 64 75 72  .     * procedur
4790: 65 2c 20 54 63 6c 43 6f 6d 70 69 6c 65 53 63 72  e, TclCompileScr
47a0: 69 70 74 2c 20 69 73 20 69 6e 74 65 72 6e 61 6c  ipt, is internal
47b0: 20 74 6f 20 54 63 6c 2c 20 73 6f 20 61 6c 6c 0a   to Tcl, so all.
47c0: 2d 09 20 20 20 20 20 2a 20 63 61 6c 6c 65 72 73  -.     * callers
47d0: 20 73 68 6f 75 6c 64 20 62 65 20 77 69 74 68 69   should be withi
47e0: 6e 20 54 63 6c 20 69 74 73 65 6c 66 2e 20 20 41  n Tcl itself.  A
47f0: 6c 6c 20 62 75 74 20 6f 6e 65 20 6f 66 20 74 68  ll but one of th
4800: 6f 73 65 0a 2d 09 20 20 20 20 20 2a 20 63 61 6c  ose.-.     * cal
4810: 6c 65 72 73 20 65 78 70 6c 69 63 69 74 6c 79 20  lers explicitly 
4820: 70 61 73 73 20 69 6e 20 28 6e 65 73 74 65 64 20  pass in (nested 
4830: 3d 20 30 29 2e 20 20 54 68 65 20 65 78 63 65 70  = 0).  The excep
4840: 74 69 6f 6e 61 6c 0a 2d 09 20 20 20 20 20 2a 20  tional.-.     * 
4850: 63 61 6c 6c 65 72 20 69 73 20 54 63 6c 53 65 74  caller is TclSet
4860: 42 79 74 65 43 6f 64 65 46 72 6f 6d 41 6e 79 2c  ByteCodeFromAny,
4870: 20 77 68 69 63 68 20 77 69 6c 6c 20 70 61 73 73   which will pass
4880: 20 69 6e 0a 2d 09 20 20 20 20 20 2a 20 28 6e 65   in.-.     * (ne
4890: 73 74 65 64 20 3d 20 31 29 20 69 66 20 61 6e 64  sted = 1) if and
48a0: 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66 6c 61   only if the fla
48b0: 67 20 54 43 4c 5f 42 52 41 43 4b 45 54 5f 54 45  g TCL_BRACKET_TE
48c0: 52 4d 0a 2d 09 20 20 20 20 20 2a 20 69 73 20 73  RM.-.     * is s
48d0: 65 74 20 69 6e 20 74 68 65 20 65 76 61 6c 46 6c  et in the evalFl
48e0: 61 67 73 20 66 69 65 6c 64 20 6f 66 20 69 6e 74  ags field of int
48f0: 65 72 70 2e 0a 2d 09 20 20 20 20 20 2a 0a 2d 09  erp..-.     *.-.
4900: 20 20 20 20 20 2a 20 49 74 20 61 70 70 65 61 72       * It appear
4910: 73 20 74 68 61 74 20 74 68 65 20 54 43 4c 5f 42  s that the TCL_B
4920: 52 41 43 4b 45 54 5f 54 45 52 4d 20 66 6c 61 67  RACKET_TERM flag
4930: 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 73 65   is only ever se
4940: 74 0a 2d 09 20 20 20 20 20 2a 20 62 79 20 54 63  t.-.     * by Tc
4950: 6c 5f 53 75 62 73 74 4f 62 6a 2c 20 61 6e 64 20  l_SubstObj, and 
4960: 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63  it immediately c
4970: 61 6c 6c 73 20 54 63 6c 5f 45 76 61 6c 45 78 0a  alls Tcl_EvalEx.
4980: 2d 09 20 20 20 20 20 2a 20 77 68 69 63 68 20 63  -.     * which c
4990: 6c 65 61 72 73 20 74 68 65 20 66 6c 61 67 20 62  lears the flag b
49a0: 65 66 6f 72 65 20 70 61 73 73 69 6e 67 20 74 68  efore passing th
49b0: 65 20 69 6e 74 65 72 70 20 61 6c 6f 6e 67 2e 0a  e interp along..
49c0: 2d 09 20 20 20 20 20 2a 20 53 6f 2c 20 49 20 64  -.     * So, I d
49d0: 6f 6e 27 74 20 74 68 69 6e 6b 20 74 68 69 73 20  on't think this 
49e0: 70 72 6f 63 65 64 75 72 65 2c 20 54 63 6c 43 6f  procedure, TclCo
49f0: 6d 70 69 6c 65 53 63 72 69 70 74 2c 20 69 73 0a  mpileScript, is.
4a00: 2d 09 20 20 20 20 20 2a 20 2a 2a 65 76 65 72 2a  -.     * **ever*
4a10: 2a 20 63 61 6c 6c 65 64 20 77 69 74 68 20 28 6e  * called with (n
4a20: 65 73 74 65 64 20 21 3d 20 30 29 2e 20 0a 2d 09  ested != 0). .-.
4a30: 20 20 20 20 20 2a 20 28 54 68 65 20 74 65 73 74       * (The test
4a40: 73 75 69 74 65 20 69 6e 64 65 65 64 20 64 6f 65  suite indeed doe
4a50: 73 6e 27 74 20 65 78 65 72 63 69 73 65 20 74 68  sn't exercise th
4a60: 69 73 20 63 6f 64 65 2e 20 4d 53 29 0a 2d 09 20  is code. MS).-. 
4a70: 20 20 20 20 2a 0a 2d 09 20 20 20 20 20 2a 20 54      *.-.     * T
4a80: 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 20 74  his means that t
4a90: 68 65 20 62 72 61 6e 63 68 65 73 20 69 6e 20 74  he branches in t
4aa0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 74 68  his procedure th
4ab0: 61 74 20 61 72 65 0a 2d 09 20 20 20 20 20 2a 20  at are.-.     * 
4ac0: 6f 6e 6c 79 20 61 63 74 69 76 65 20 77 68 65 6e  only active when
4ad0: 20 28 6e 65 73 74 65 64 20 21 3d 20 30 29 20 61   (nested != 0) a
4ae0: 72 65 20 70 72 6f 62 61 62 6c 79 20 6e 65 76 65  re probably neve
4af0: 72 20 65 78 65 72 63 69 73 65 64 2e 0a 2d 09 20  r exercised..-. 
4b00: 20 20 20 20 2a 20 54 68 69 73 20 6d 65 61 6e 73      * This means
4b10: 20 74 68 61 74 20 61 6e 79 20 62 75 67 73 20 69   that any bugs i
4b20: 6e 20 74 68 65 6d 20 67 6f 20 75 6e 6e 6f 74 69  n them go unnoti
4b30: 63 65 64 2c 20 61 6e 64 20 61 6e 79 20 62 75 67  ced, and any bug
4b40: 0a 2d 09 20 20 20 20 20 2a 20 66 69 78 65 73 20  .-.     * fixes 
4b50: 69 6e 20 74 68 65 6d 20 68 61 76 65 20 61 20 73  in them have a s
4b60: 65 6d 69 2d 74 68 65 6f 72 65 74 69 63 61 6c 20  emi-theoretical 
4b70: 6e 61 74 75 72 65 2e 0a 2d 09 20 20 20 20 20 2a  nature..-.     *
4b80: 0a 2d 09 20 20 20 20 20 2a 20 41 6c 6c 20 74 68  .-.     * All th
4b90: 61 74 20 73 61 69 64 2c 20 74 68 65 20 73 70 65  at said, the spe
4ba0: 63 20 66 6f 72 20 74 68 69 73 20 70 72 6f 63 65  c for this proce
4bb0: 64 75 72 65 20 73 61 79 73 20 69 74 20 73 68 6f  dure says it sho
4bc0: 75 6c 64 0a 2d 09 20 20 20 20 20 2a 20 68 61 6e  uld.-.     * han
4bd0: 64 6c 65 20 74 68 65 20 28 6e 65 73 74 65 64 20  dle the (nested 
4be0: 21 3d 20 30 29 20 63 61 73 65 2c 20 73 6f 20 68  != 0) case, so h
4bf0: 65 72 65 27 73 20 61 6e 20 61 74 74 65 6d 70 74  ere's an attempt
4c00: 20 74 6f 20 66 69 78 0a 2d 09 20 20 20 20 20 2a   to fix.-.     *
4c10: 20 62 75 67 73 20 28 54 63 6c 20 42 75 67 20 36   bugs (Tcl Bug 6
4c20: 38 31 38 34 31 29 20 69 6e 20 74 68 61 74 20 63  81841) in that c
4c30: 61 73 65 2e 20 20 4a 75 73 74 20 69 6e 20 63 61  ase.  Just in ca
4c40: 73 65 20 73 6f 6d 65 0a 2d 09 20 20 20 20 20 2a  se some.-.     *
4c50: 20 63 61 6c 6c 65 72 73 20 65 76 65 6e 74 75 61   callers eventua
4c60: 6c 6c 79 20 63 6f 6d 65 20 61 6c 6f 6e 67 20 61  lly come along a
4c70: 6e 64 20 65 78 70 65 63 74 20 69 74 20 74 6f 20  nd expect it to 
4c80: 77 6f 72 6b 2e 2e 2e 0a 2d 09 20 20 20 20 20 2a  work....-.     *
4c90: 2f 0a 2d 0a 2d 09 20 20 20 20 69 66 20 28 70 61  /.-.-.    if (pa
4ca0: 72 73 65 2e 74 65 72 6d 20 3d 3d 20 28 73 63 72  rse.term == (scr
4cb0: 69 70 74 20 2b 20 6e 75 6d 42 79 74 65 73 29 29  ipt + numBytes))
4cc0: 20 7b 0a 2d 09 09 2f 2a 20 0a 2d 09 09 20 2a 20   {.-../* .-.. * 
4cd0: 54 68 65 20 28 6e 65 73 74 65 64 20 21 3d 20 30  The (nested != 0
4ce0: 29 20 63 61 73 65 20 69 73 20 6d 65 61 6e 74 20  ) case is meant 
4cf0: 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
4d00: 20 74 68 65 0a 2d 09 09 20 2a 20 63 61 6c 6c 65   the.-.. * calle
4d10: 72 20 66 6f 75 6e 64 20 61 6e 20 6f 70 65 6e 20  r found an open 
4d20: 62 72 61 63 6b 65 74 20 28 5b 29 20 61 6e 64 20  bracket ([) and 
4d30: 61 73 6b 65 64 20 75 73 20 74 6f 0a 2d 09 09 20  asked us to.-.. 
4d40: 2a 20 70 61 72 73 65 20 61 6e 64 20 63 6f 6d 70  * parse and comp
4d50: 69 6c 65 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 73  ile Tcl commands
4d60: 20 75 70 20 74 6f 20 74 68 65 20 6d 61 74 63 68   up to the match
4d70: 69 6e 67 0a 2d 09 09 20 2a 20 63 6c 6f 73 65 20  ing.-.. * close 
4d80: 62 72 61 63 6b 65 74 20 28 5d 29 2e 20 20 57 65  bracket (]).  We
4d90: 20 68 61 76 65 20 74 6f 20 64 65 74 65 63 74 20   have to detect 
4da0: 61 6e 64 20 68 61 6e 64 6c 65 0a 2d 09 09 20 2a  and handle.-.. *
4db0: 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
4dc0: 74 68 65 20 63 6c 6f 73 65 20 62 72 61 63 6b 65  the close bracke
4dd0: 74 20 69 73 20 6d 69 73 73 69 6e 67 2e 0a 2d 09  t is missing..-.
4de0: 09 20 2a 2f 0a 2d 0a 2d 09 09 54 63 6c 5f 53 65  . */.-.-..Tcl_Se
4df0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
4e00: 70 2c 0a 2d 09 09 09 54 63 6c 5f 4e 65 77 53 74  p,.-...Tcl_NewSt
4e10: 72 69 6e 67 4f 62 6a 28 22 6d 69 73 73 69 6e 67  ringObj("missing
4e20: 20 63 6c 6f 73 65 2d 62 72 61 63 6b 65 74 22 2c   close-bracket",
4e30: 20 2d 31 29 29 3b 0a 2d 09 09 63 6f 64 65 20 3d   -1));.-..code =
4e40: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2d 09 09 67   TCL_ERROR;.-..g
4e50: 6f 74 6f 20 65 72 72 6f 72 3b 0a 2d 09 20 20 20  oto error;.-.   
4e60: 20 7d 0a 2d 09 7d 0a 20 09 69 66 20 28 70 61 72   }.-.}. .if (par
4e70: 73 65 2e 6e 75 6d 57 6f 72 64 73 20 3e 20 30 29  se.numWords > 0)
4e80: 20 7b 0a 20 09 20 20 20 20 2f 2a 0a 20 09 20 20   {. .    /*. .  
4e90: 20 20 20 2a 20 49 66 20 6e 6f 74 20 74 68 65 20     * If not the 
4ea0: 66 69 72 73 74 20 63 6f 6d 6d 61 6e 64 2c 20 70  first command, p
4eb0: 6f 70 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  op the previous 
4ec0: 63 6f 6d 6d 61 6e 64 27 73 20 72 65 73 75 6c 74  command's result
4ed0: 0a 40 40 20 2d 39 30 33 2c 31 31 20 2b 38 34 37  .@@ -903,11 +847
4ee0: 2c 38 20 40 40 0a 20 0a 20 09 20 20 20 20 69 66  ,8 @@. . .    if
4ef0: 20 28 21 69 73 46 69 72 73 74 43 6d 64 29 20 7b   (!isFirstCmd) {
4f00: 0a 20 09 09 54 63 6c 45 6d 69 74 4f 70 63 6f 64  . ..TclEmitOpcod
4f10: 65 28 49 4e 53 54 5f 50 4f 50 2c 20 65 6e 76 50  e(INST_POP, envP
4f20: 74 72 29 3b 0a 2d 09 09 69 66 20 28 21 6e 65 73  tr);.-..if (!nes
4f30: 74 65 64 29 20 7b 0a 2d 09 09 20 20 20 20 65 6e  ted) {.-..    en
4f40: 76 50 74 72 2d 3e 63 6d 64 4d 61 70 50 74 72 5b  vPtr->cmdMapPtr[
4f50: 6c 61 73 74 54 6f 70 4c 65 76 65 6c 43 6d 64 49  lastTopLevelCmdI
4f60: 6e 64 65 78 5d 2e 6e 75 6d 43 6f 64 65 42 79 74  ndex].numCodeByt
4f70: 65 73 20 3d 0a 2d 09 09 09 20 20 20 28 65 6e 76  es =.-...   (env
4f80: 50 74 72 2d 3e 63 6f 64 65 4e 65 78 74 20 2d 20  Ptr->codeNext - 
4f90: 65 6e 76 50 74 72 2d 3e 63 6f 64 65 53 74 61 72  envPtr->codeStar
4fa0: 74 29 0a 2d 09 09 09 20 20 20 2d 20 73 74 61 72  t).-...   - star
4fb0: 74 43 6f 64 65 4f 66 66 73 65 74 3b 0a 2d 09 09  tCodeOffset;.-..
4fc0: 7d 0a 2b 09 09 65 6e 76 50 74 72 2d 3e 63 6d 64  }.+..envPtr->cmd
4fd0: 4d 61 70 50 74 72 5b 6c 61 73 74 54 6f 70 4c 65  MapPtr[lastTopLe
4fe0: 76 65 6c 43 6d 64 49 6e 64 65 78 5d 2e 6e 75 6d  velCmdIndex].num
4ff0: 43 6f 64 65 42 79 74 65 73 20 3d 0a 2b 09 09 09  CodeBytes =.+...
5000: 28 65 6e 76 50 74 72 2d 3e 63 6f 64 65 4e 65 78  (envPtr->codeNex
5010: 74 20 2d 20 65 6e 76 50 74 72 2d 3e 63 6f 64 65  t - envPtr->code
5020: 53 74 61 72 74 29 20 2d 20 73 74 61 72 74 43 6f  Start) - startCo
5030: 64 65 4f 66 66 73 65 74 3b 0a 20 09 20 20 20 20  deOffset;. .    
5040: 7d 0a 20 0a 20 09 20 20 20 20 2f 2a 0a 40 40 20  }. . .    /*.@@ 
5050: 2d 39 33 31 2c 38 20 2b 38 37 32 2c 37 20 40 40  -931,8 +872,7 @@
5060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a  .              *
5070: 20 49 66 20 74 72 61 63 69 6e 67 2c 20 70 72 69   If tracing, pri
5080: 6e 74 20 61 20 6c 69 6e 65 20 66 6f 72 20 65 61  nt a line for ea
5090: 63 68 20 74 6f 70 20 6c 65 76 65 6c 20 63 6f 6d  ch top level com
50a0: 6d 61 6e 64 20 63 6f 6d 70 69 6c 65 64 2e 0a 20  mand compiled.. 
50b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
50c0: 20 0a 2d 09 20 20 20 20 69 66 20 28 28 74 63 6c   .-.    if ((tcl
50d0: 54 72 61 63 65 43 6f 6d 70 69 6c 65 20 3e 3d 20  TraceCompile >= 
50e0: 31 29 0a 2d 09 09 20 20 20 20 26 26 20 21 6e 65  1).-..    && !ne
50f0: 73 74 65 64 20 26 26 20 28 65 6e 76 50 74 72 2d  sted && (envPtr-
5100: 3e 70 72 6f 63 50 74 72 20 3d 3d 20 4e 55 4c 4c  >procPtr == NULL
5110: 29 29 20 7b 0a 2b 09 20 20 20 20 69 66 20 28 28  )) {.+.    if ((
5120: 74 63 6c 54 72 61 63 65 43 6f 6d 70 69 6c 65 20  tclTraceCompile 
5130: 3e 3d 20 31 29 20 26 26 20 28 65 6e 76 50 74 72  >= 1) && (envPtr
5140: 2d 3e 70 72 6f 63 50 74 72 20 3d 3d 20 4e 55 4c  ->procPtr == NUL
5150: 4c 29 29 20 7b 0a 20 09 09 66 70 72 69 6e 74 66  L)) {. ..fprintf
5160: 28 73 74 64 6f 75 74 2c 20 22 20 20 43 6f 6d 70  (stdout, "  Comp
5170: 69 6c 69 6e 67 3a 20 22 29 3b 0a 20 09 09 54 63  iling: ");. ..Tc
5180: 6c 50 72 69 6e 74 53 6f 75 72 63 65 28 73 74 64  lPrintSource(std
5190: 6f 75 74 2c 20 70 61 72 73 65 2e 63 6f 6d 6d 61  out, parse.comma
51a0: 6e 64 53 74 61 72 74 2c 0a 20 09 09 09 54 63 6c  ndStart,. ...Tcl
51b0: 4d 69 6e 28 63 6f 6d 6d 61 6e 64 4c 65 6e 67 74  Min(commandLengt
51c0: 68 2c 20 35 35 29 29 3b 0a 40 40 20 2d 39 34 36  h, 55));.@@ -946
51d0: 2c 39 20 2b 38 38 36 2c 37 20 40 40 0a 20 09 20  ,9 +886,7 @@. . 
51e0: 20 20 20 0a 20 09 20 20 20 20 65 6e 76 50 74 72     . .    envPtr
51f0: 2d 3e 6e 75 6d 43 6f 6d 6d 61 6e 64 73 2b 2b 3b  ->numCommands++;
5200: 0a 20 09 20 20 20 20 63 75 72 72 43 6d 64 49 6e  . .    currCmdIn
5210: 64 65 78 20 3d 20 28 65 6e 76 50 74 72 2d 3e 6e  dex = (envPtr->n
5220: 75 6d 43 6f 6d 6d 61 6e 64 73 20 2d 20 31 29 3b  umCommands - 1);
5230: 0a 2d 09 20 20 20 20 69 66 20 28 21 6e 65 73 74  .-.    if (!nest
5240: 65 64 29 20 7b 0a 2d 09 09 6c 61 73 74 54 6f 70  ed) {.-..lastTop
5250: 4c 65 76 65 6c 43 6d 64 49 6e 64 65 78 20 3d 20  LevelCmdIndex = 
5260: 63 75 72 72 43 6d 64 49 6e 64 65 78 3b 0a 2d 09  currCmdIndex;.-.
5270: 20 20 20 20 7d 0a 2b 09 20 20 20 20 6c 61 73 74      }.+.    last
5280: 54 6f 70 4c 65 76 65 6c 43 6d 64 49 6e 64 65 78  TopLevelCmdIndex
5290: 20 3d 20 63 75 72 72 43 6d 64 49 6e 64 65 78 3b   = currCmdIndex;
52a0: 0a 20 09 20 20 20 20 73 74 61 72 74 43 6f 64 65  . .    startCode
52b0: 4f 66 66 73 65 74 20 3d 20 28 65 6e 76 50 74 72  Offset = (envPtr
52c0: 2d 3e 63 6f 64 65 4e 65 78 74 20 2d 20 65 6e 76  ->codeNext - env
52d0: 50 74 72 2d 3e 63 6f 64 65 53 74 61 72 74 29 3b  Ptr->codeStart);
52e0: 0a 20 09 20 20 20 20 45 6e 74 65 72 43 6d 64 53  . .    EnterCmdS
52f0: 74 61 72 74 44 61 74 61 28 65 6e 76 50 74 72 2c  tartData(envPtr,
5300: 20 63 75 72 72 43 6d 64 49 6e 64 65 78 2c 0a 20   currCmdIndex,. 
5310: 09 20 20 20 20 20 20 20 20 20 20 20 20 28 70 61  .            (pa
5320: 72 73 65 2e 63 6f 6d 6d 61 6e 64 53 74 61 72 74  rse.commandStart
5330: 20 2d 20 65 6e 76 50 74 72 2d 3e 73 6f 75 72 63   - envPtr->sourc
5340: 65 29 2c 20 73 74 61 72 74 43 6f 64 65 4f 66 66  e), startCodeOff
5350: 73 65 74 29 3b 0a 40 40 20 2d 31 30 37 31 2c 31  set);.@@ -1071,1
5360: 36 20 2b 31 30 30 39 2c 36 20 40 40 0a 20 09 70  6 +1009,6 @@. .p
5370: 20 3d 20 6e 65 78 74 3b 0a 20 09 54 63 6c 5f 46   = next;. .Tcl_F
5380: 72 65 65 50 61 72 73 65 28 26 70 61 72 73 65 29  reeParse(&parse)
5390: 3b 0a 20 09 67 6f 74 50 61 72 73 65 20 3d 20 30  ;. .gotParse = 0
53a0: 3b 0a 2d 09 69 66 20 28 6e 65 73 74 65 64 20 26  ;.-.if (nested &
53b0: 26 20 28 2a 70 61 72 73 65 2e 74 65 72 6d 20 3d  & (*parse.term =
53c0: 3d 20 27 5d 27 29 29 20 7b 0a 2d 09 20 20 20 20  = ']')) {.-.    
53d0: 2f 2a 0a 2d 09 20 20 20 20 20 2a 20 57 65 20 67  /*.-.     * We g
53e0: 65 74 20 68 65 72 65 20 69 6e 20 74 68 65 20 73  et here in the s
53f0: 70 65 63 69 61 6c 20 63 61 73 65 20 77 68 65 72  pecial case wher
5400: 65 20 54 43 4c 5f 42 52 41 43 4b 45 54 5f 54 45  e TCL_BRACKET_TE
5410: 52 4d 20 77 61 73 0a 2d 09 20 20 20 20 20 2a 20  RM was.-.     * 
5420: 73 65 74 20 69 6e 20 74 68 65 20 69 6e 74 65 72  set in the inter
5430: 70 72 65 74 65 72 20 61 6e 64 20 74 68 65 20 6c  preter and the l
5440: 61 74 65 73 74 20 70 61 72 73 65 64 20 63 6f 6d  atest parsed com
5450: 6d 61 6e 64 20 77 61 73 0a 2d 09 20 20 20 20 20  mand was.-.     
5460: 2a 20 74 65 72 6d 69 6e 61 74 65 64 20 62 79 20  * terminated by 
5470: 74 68 65 20 6d 61 74 63 68 69 6e 67 20 63 6c 6f  the matching clo
5480: 73 65 2d 62 72 61 63 6b 65 74 20 77 65 20 77 65  se-bracket we we
5490: 72 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 2e 0a  re looking for..
54a0: 2d 09 20 20 20 20 20 2a 20 53 74 6f 70 20 63 6f  -.     * Stop co
54b0: 6d 70 69 6c 61 74 69 6f 6e 2e 0a 2d 09 20 20 20  mpilation..-.   
54c0: 20 20 2a 2f 0a 2d 09 20 20 20 20 0a 2d 09 20 20    */.-.    .-.  
54d0: 20 20 62 72 65 61 6b 3b 0a 2d 09 7d 0a 20 20 20    break;.-.}.   
54e0: 20 20 7d 20 77 68 69 6c 65 20 28 62 79 74 65 73    } while (bytes
54f0: 4c 65 66 74 20 3e 20 30 29 3b 0a 20 0a 20 20 20  Left > 0);. .   
5500: 20 20 2f 2a 0a 40 40 20 2d 31 30 39 33 2c 31 37    /*.@@ -1093,17
5510: 20 2b 31 30 32 31 2c 37 20 40 40 0a 20 09 20 20   +1021,7 @@. .  
5520: 20 20 20 20 20 20 65 6e 76 50 74 72 29 3b 0a 20        envPtr);. 
5530: 20 20 20 20 7d 0a 20 20 20 20 20 0a 2d 20 20 20      }.     .-   
5540: 20 69 66 20 28 6e 65 73 74 65 64 29 20 7b 0a 2d   if (nested) {.-
5550: 09 2f 2a 0a 2d 09 20 2a 20 57 68 65 6e 20 28 6e  ./*.-. * When (n
5560: 65 73 74 65 64 20 21 3d 20 30 29 20 62 61 63 6b  ested != 0) back
5570: 20 75 70 20 31 20 63 68 61 72 61 63 74 65 72 20   up 1 character 
5580: 74 6f 20 68 61 76 65 20 0a 2d 09 20 2a 20 69 50  to have .-. * iP
5590: 74 72 2d 3e 74 65 72 6d 4f 66 66 73 65 74 20 69  tr->termOffset i
55a0: 6e 64 69 63 61 74 65 20 74 68 65 20 6f 66 66 73  ndicate the offs
55b0: 65 74 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69  et to the matchi
55c0: 6e 67 0a 2d 09 20 2a 20 63 6c 6f 73 65 2d 62 72  ng.-. * close-br
55d0: 61 63 6b 65 74 2e 0a 2d 09 20 2a 2f 0a 2d 0a 2d  acket..-. */.-.-
55e0: 09 69 50 74 72 2d 3e 74 65 72 6d 4f 66 66 73 65  .iPtr->termOffse
55f0: 74 20 3d 20 28 70 20 2d 20 31 29 20 2d 20 73 63  t = (p - 1) - sc
5600: 72 69 70 74 3b 0a 2d 20 20 20 20 7d 20 65 6c 73  ript;.-    } els
5610: 65 20 7b 0a 2d 09 69 50 74 72 2d 3e 74 65 72 6d  e {.-.iPtr->term
5620: 4f 66 66 73 65 74 20 3d 20 28 70 20 2d 20 73 63  Offset = (p - sc
5630: 72 69 70 74 29 3b 0a 2d 20 20 20 20 7d 0a 2b 20  ript);.-    }.+ 
5640: 20 20 20 65 6e 76 50 74 72 2d 3e 6e 75 6d 53 72     envPtr->numSr
5650: 63 42 79 74 65 73 20 3d 20 28 70 20 2d 20 73 63  cBytes = (p - sc
5660: 72 69 70 74 29 3b 0a 20 20 20 20 20 54 63 6c 5f  ript);.     Tcl_
5670: 44 53 74 72 69 6e 67 46 72 65 65 28 26 64 73 29  DStringFree(&ds)
5680: 3b 0a 20 20 20 20 20 72 65 74 75 72 6e 20 54 43  ;.     return TC
5690: 4c 5f 4f 4b 3b 0a 20 09 0a 40 40 20 2d 31 31 33  L_OK;. ..@@ -113
56a0: 32 2c 37 20 2b 31 30 35 30 2c 37 20 40 40 0a 20  2,7 +1050,7 @@. 
56b0: 20 20 20 20 69 66 20 28 67 6f 74 50 61 72 73 65      if (gotParse
56c0: 29 20 7b 0a 20 09 54 63 6c 5f 46 72 65 65 50 61  ) {. .Tcl_FreePa
56d0: 72 73 65 28 26 70 61 72 73 65 29 3b 0a 20 20 20  rse(&parse);.   
56e0: 20 20 7d 0a 2d 20 20 20 20 69 50 74 72 2d 3e 74    }.-    iPtr->t
56f0: 65 72 6d 4f 66 66 73 65 74 20 3d 20 28 70 20 2d  ermOffset = (p -
5700: 20 73 63 72 69 70 74 29 3b 0a 2b 20 20 20 20 65   script);.+    e
5710: 6e 76 50 74 72 2d 3e 6e 75 6d 53 72 63 42 79 74  nvPtr->numSrcByt
5720: 65 73 20 3d 20 28 70 20 2d 20 73 63 72 69 70 74  es = (p - script
5730: 29 3b 0a 20 20 20 20 20 54 63 6c 5f 44 53 74 72  );.     Tcl_DStr
5740: 69 6e 67 46 72 65 65 28 26 64 73 29 3b 0a 20 20  ingFree(&ds);.  
5750: 20 20 20 72 65 74 75 72 6e 20 63 6f 64 65 3b 0a     return code;.
5760: 20 7d 0a 40 40 20 2d 31 32 30 37 2c 37 20 2b 31   }.@@ -1207,7 +1
5770: 31 32 35 2c 37 20 40 40 0a 20 09 09 7d 0a 20 09  125,7 @@. ..}. .
5780: 09 0a 20 09 09 63 6f 64 65 20 3d 20 54 63 6c 43  .. ..code = TclC
5790: 6f 6d 70 69 6c 65 53 63 72 69 70 74 28 69 6e 74  ompileScript(int
57a0: 65 72 70 2c 20 74 6f 6b 65 6e 50 74 72 2d 3e 73  erp, tokenPtr->s
57b0: 74 61 72 74 2b 31 2c 0a 2d 09 09 09 74 6f 6b 65  tart+1,.-...toke
57c0: 6e 50 74 72 2d 3e 73 69 7a 65 2d 32 2c 20 2f 2a  nPtr->size-2, /*
57d0: 6e 65 73 74 65 64 2a 2f 20 30 2c 09 65 6e 76 50  nested*/ 0,.envP
57e0: 74 72 29 3b 0a 2b 09 09 09 74 6f 6b 65 6e 50 74  tr);.+...tokenPt
57f0: 72 2d 3e 73 69 7a 65 2d 32 2c 20 65 6e 76 50 74  r->size-2, envPt
5800: 72 29 3b 0a 20 09 09 69 66 20 28 63 6f 64 65 20  r);. ..if (code 
5810: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 09 09  != TCL_OK) {. ..
5820: 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 3b 0a      goto error;.
5830: 20 09 09 7d 0a 40 40 20 2d 31 33 39 36 2c 38 20   ..}.@@ -1396,8 
5840: 2b 31 33 31 34 2c 37 20 40 40 0a 20 20 20 20 20  +1314,7 @@.     
5850: 20 2a 2f 0a 20 20 20 20 20 0a 20 20 20 20 20 69   */.     .     i
5860: 66 20 28 28 63 6f 75 6e 74 20 3d 3d 20 31 29 20  f ((count == 1) 
5870: 26 26 20 28 74 6f 6b 65 6e 50 74 72 2d 3e 74 79  && (tokenPtr->ty
5880: 70 65 20 3d 3d 20 54 43 4c 5f 54 4f 4b 45 4e 5f  pe == TCL_TOKEN_
5890: 54 45 58 54 29 29 20 7b 0a 2d 09 63 6f 64 65 20  TEXT)) {.-.code 
58a0: 3d 20 54 63 6c 43 6f 6d 70 69 6c 65 53 63 72 69  = TclCompileScri
58b0: 70 74 28 69 6e 74 65 72 70 2c 20 74 6f 6b 65 6e  pt(interp, token
58c0: 50 74 72 2d 3e 73 74 61 72 74 2c 20 74 6f 6b 65  Ptr->start, toke
58d0: 6e 50 74 72 2d 3e 73 69 7a 65 2c 0a 2d 09 20 20  nPtr->size,.-.  
58e0: 20 20 20 20 20 20 2f 2a 6e 65 73 74 65 64 2a 2f        /*nested*/
58f0: 20 30 2c 20 65 6e 76 50 74 72 29 3b 0a 2b 09 63   0, envPtr);.+.c
5900: 6f 64 65 20 3d 20 54 63 6c 43 6f 6d 70 69 6c 65  ode = TclCompile
5910: 53 63 72 69 70 74 28 69 6e 74 65 72 70 2c 20 74  Script(interp, t
5920: 6f 6b 65 6e 50 74 72 2d 3e 73 74 61 72 74 2c 20  okenPtr->start, 
5930: 74 6f 6b 65 6e 50 74 72 2d 3e 73 69 7a 65 2c 20  tokenPtr->size, 
5940: 65 6e 76 50 74 72 29 3b 0a 20 09 72 65 74 75 72  envPtr);. .retur
5950: 6e 20 63 6f 64 65 3b 0a 20 20 20 20 20 7d 0a 20  n code;.     }. 
5960: 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f  .Index: generic/
5970: 74 63 6c 43 6f 6d 70 69 6c 65 2e 68 0a 3d 3d 3d  tclCompile.h.===
5980: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5990: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
59a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
59b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
59c0: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72  .RCS file: /cvsr
59d0: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65  oot/tcl/tcl/gene
59e0: 72 69 63 2f 74 63 6c 43 6f 6d 70 69 6c 65 2e 68  ric/tclCompile.h
59f0: 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65  ,v.retrieving re
5a00: 76 69 73 69 6f 6e 20 31 2e 33 34 0a 64 69 66 66  vision 1.34.diff
5a10: 20 2d 75 20 2d 72 31 2e 33 34 20 74 63 6c 43 6f   -u -r1.34 tclCo
5a20: 6d 70 69 6c 65 2e 68 0a 2d 2d 2d 20 67 65 6e 65  mpile.h.--- gene
5a30: 72 69 63 2f 74 63 6c 43 6f 6d 70 69 6c 65 2e 68  ric/tclCompile.h
5a40: 09 35 20 4d 61 72 20 32 30 30 33 20 32 32 3a 33  .5 Mar 2003 22:3
5a50: 31 3a 32 33 20 2d 30 30 30 30 09 31 2e 33 34 0a  1:23 -0000.1.34.
5a60: 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 43  +++ generic/tclC
5a70: 6f 6d 70 69 6c 65 2e 68 09 31 33 20 4d 61 72 20  ompile.h.13 Mar 
5a80: 32 30 30 33 20 30 32 3a 32 36 3a 35 39 20 2d 30  2003 02:26:59 -0
5a90: 30 30 30 0a 40 40 20 2d 37 34 38 2c 38 20 2b 37  000.@@ -748,8 +7
5aa0: 34 38 2c 37 20 40 40 0a 20 09 09 09 20 20 20 20  48,7 @@. ...    
5ab0: 54 63 6c 5f 54 6f 6b 65 6e 20 2a 74 6f 6b 65 6e  Tcl_Token *token
5ac0: 50 74 72 2c 20 69 6e 74 20 6e 75 6d 57 6f 72 64  Ptr, int numWord
5ad0: 73 2c 0a 20 09 09 09 20 20 20 20 43 6f 6d 70 69  s,. ...    Compi
5ae0: 6c 65 45 6e 76 20 2a 65 6e 76 50 74 72 29 29 3b  leEnv *envPtr));
5af0: 0a 20 45 58 54 45 52 4e 20 69 6e 74 09 09 54 63  . EXTERN int..Tc
5b00: 6c 43 6f 6d 70 69 6c 65 53 63 72 69 70 74 20 5f  lCompileScript _
5b10: 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f  ANSI_ARGS_((Tcl_
5b20: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
5b30: 2d 09 09 09 20 20 20 20 43 4f 4e 53 54 20 63 68  -...    CONST ch
5b40: 61 72 20 2a 73 63 72 69 70 74 2c 20 69 6e 74 20  ar *script, int 
5b50: 6e 75 6d 42 79 74 65 73 2c 20 69 6e 74 20 6e 65  numBytes, int ne
5b60: 73 74 65 64 2c 0a 2d 09 09 09 20 20 20 20 43 6f  sted,.-...    Co
5b70: 6d 70 69 6c 65 45 6e 76 20 2a 65 6e 76 50 74 72  mpileEnv *envPtr
5b80: 29 29 3b 0a 2b 09 09 09 20 20 20 20 43 4f 4e 53  ));.+...    CONS
5b90: 54 20 63 68 61 72 20 2a 73 63 72 69 70 74 2c 20  T char *script, 
5ba0: 69 6e 74 20 6e 75 6d 42 79 74 65 73 2c 20 43 6f  int numBytes, Co
5bb0: 6d 70 69 6c 65 45 6e 76 20 2a 65 6e 76 50 74 72  mpileEnv *envPtr
5bc0: 29 29 3b 0a 20 45 58 54 45 52 4e 20 69 6e 74 09  ));. EXTERN int.
5bd0: 09 54 63 6c 43 6f 6d 70 69 6c 65 54 6f 6b 65 6e  .TclCompileToken
5be0: 73 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54  s _ANSI_ARGS_((T
5bf0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
5c00: 70 2c 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 54  p,. ...    Tcl_T
5c10: 6f 6b 65 6e 20 2a 74 6f 6b 65 6e 50 74 72 2c 20  oken *tokenPtr, 
5c20: 69 6e 74 20 63 6f 75 6e 74 2c 0a 20 09 09 09 20  int count,. ... 
5c30: 20 20 20 43 6f 6d 70 69 6c 65 45 6e 76 20 2a 65     CompileEnv *e
5c40: 6e 76 50 74 72 29 29 3b 0a 49 6e 64 65 78 3a 20  nvPtr));.Index: 
5c50: 67 65 6e 65 72 69 63 2f 74 63 6c 45 78 65 63 75  generic/tclExecu
5c60: 74 65 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  te.c.===========
5c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5c90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5ca0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c  ========.RCS fil
5cb0: 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f  e: /cvsroot/tcl/
5cc0: 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c 45  tcl/generic/tclE
5cd0: 78 65 63 75 74 65 2e 63 2c 76 0a 72 65 74 72 69  xecute.c,v.retri
5ce0: 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31  eving revision 1
5cf0: 2e 39 34 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e  .94.diff -u -r1.
5d00: 39 34 20 74 63 6c 45 78 65 63 75 74 65 2e 63 0a  94 tclExecute.c.
5d10: 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 45  --- generic/tclE
5d20: 78 65 63 75 74 65 2e 63 09 31 39 20 46 65 62 20  xecute.c.19 Feb 
5d30: 32 30 30 33 20 31 34 3a 33 33 3a 33 39 20 2d 30  2003 14:33:39 -0
5d40: 30 30 30 09 31 2e 39 34 0a 2b 2b 2b 20 67 65 6e  000.1.94.+++ gen
5d50: 65 72 69 63 2f 74 63 6c 45 78 65 63 75 74 65 2e  eric/tclExecute.
5d60: 63 09 31 33 20 4d 61 72 20 32 30 30 33 20 30 32  c.13 Mar 2003 02
5d70: 3a 32 36 3a 35 39 20 2d 30 30 30 30 0a 40 40 20  :26:59 -0000.@@ 
5d80: 2d 38 33 31 2c 37 20 2b 38 33 31 2c 36 20 40 40  -831,7 +831,6 @@
5d90: 0a 20 09 20 2a 20 61 6e 64 20 61 75 78 20 64 61  . . * and aux da
5da0: 74 61 20 69 74 65 6d 73 20 69 73 20 67 69 76 65  ta items is give
5db0: 6e 20 74 6f 20 74 68 65 20 42 79 74 65 43 6f 64  n to the ByteCod
5dc0: 65 20 6f 62 6a 65 63 74 2e 0a 20 09 20 2a 2f 0a  e object.. . */.
5dd0: 20 0a 2d 09 63 6f 6d 70 45 6e 76 2e 6e 75 6d 53   .-.compEnv.numS
5de0: 72 63 42 79 74 65 73 20 3d 20 69 50 74 72 2d 3e  rcBytes = iPtr->
5df0: 74 65 72 6d 4f 66 66 73 65 74 3b 0a 20 09 54 63  termOffset;. .Tc
5e00: 6c 45 6d 69 74 4f 70 63 6f 64 65 28 49 4e 53 54  lEmitOpcode(INST
5e10: 5f 44 4f 4e 45 2c 20 26 63 6f 6d 70 45 6e 76 29  _DONE, &compEnv)
5e20: 3b 0a 20 09 54 63 6c 49 6e 69 74 42 79 74 65 43  ;. .TclInitByteC
5e30: 6f 64 65 4f 62 6a 28 6f 62 6a 50 74 72 2c 20 26  odeObj(objPtr, &
5e40: 63 6f 6d 70 45 6e 76 29 3b 0a 20 09 54 63 6c 46  compEnv);. .TclF
5e50: 72 65 65 43 6f 6d 70 69 6c 65 45 6e 76 28 26 63  reeCompileEnv(&c
5e60: 6f 6d 70 45 6e 76 29 3b 0a 40 40 20 2d 31 30 33  ompEnv);.@@ -103
5e70: 37 2c 31 36 20 2b 31 30 33 36 2c 37 20 40 40 0a  7,16 +1036,7 @@.
5e80: 20 09 7d 0a 20 20 20 20 20 7d 0a 20 0a 2d 20 20   .}.     }. .-  
5e90: 20 20 2f 2a 0a 2d 20 20 20 20 20 2a 20 53 65 74    /*.-     * Set
5ea0: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
5eb0: 27 73 20 74 65 72 6d 4f 66 66 73 65 74 20 6d 65  's termOffset me
5ec0: 6d 62 65 72 20 74 6f 20 74 68 65 20 6f 66 66 73  mber to the offs
5ed0: 65 74 20 6f 66 20 74 68 65 0a 2d 20 20 20 20 20  et of the.-     
5ee0: 2a 20 63 68 61 72 61 63 74 65 72 20 6a 75 73 74  * character just
5ef0: 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20   after the last 
5f00: 6f 6e 65 20 65 78 65 63 75 74 65 64 2e 20 57 65  one executed. We
5f10: 20 61 70 70 72 6f 78 69 6d 61 74 65 20 74 68 65   approximate the
5f20: 20 6f 66 66 73 65 74 0a 2d 20 20 20 20 20 2a 20   offset.-     * 
5f30: 6f 66 20 74 68 65 20 6c 61 73 74 20 63 68 61 72  of the last char
5f40: 61 63 74 65 72 20 65 78 65 63 75 74 65 64 20 62  acter executed b
5f50: 79 20 75 73 69 6e 67 20 74 68 65 20 6e 75 6d 62  y using the numb
5f60: 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
5f70: 0a 2d 20 20 20 20 20 2a 20 63 6f 6d 70 69 6c 65  .-     * compile
5f80: 64 2e 20 0a 2d 20 20 20 20 20 2a 2f 0a 2d 0a 2d  d. .-     */.-.-
5f90: 20 20 20 20 69 50 74 72 2d 3e 74 65 72 6d 4f 66      iPtr->termOf
5fa0: 66 73 65 74 20 3d 20 6e 75 6d 53 72 63 42 79 74  fset = numSrcByt
5fb0: 65 73 3b 0a 20 20 20 20 20 69 50 74 72 2d 3e 66  es;.     iPtr->f
5fc0: 6c 61 67 73 20 26 3d 20 7e 45 52 52 5f 41 4c 52  lags &= ~ERR_ALR
5fd0: 45 41 44 59 5f 4c 4f 47 47 45 44 3b 0a 2d 0a 20  EADY_LOGGED;.-. 
5fe0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
5ff0: 74 3b 0a 20 7d 0a 20 0c 0a 49 6e 64 65 78 3a 20  t;. }. ..Index: 
6000: 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e 68  generic/tclInt.h
6010: 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .===============
6020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6050: 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f  ====.RCS file: /
6060: 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f  cvsroot/tcl/tcl/
6070: 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e 68  generic/tclInt.h
6080: 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65  ,v.retrieving re
6090: 76 69 73 69 6f 6e 20 31 2e 31 31 39 0a 64 69 66  vision 1.119.dif
60a0: 66 20 2d 75 20 2d 72 31 2e 31 31 39 20 74 63 6c  f -u -r1.119 tcl
60b0: 49 6e 74 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72 69  Int.h.--- generi
60c0: 63 2f 74 63 6c 49 6e 74 2e 68 09 35 20 4d 61 72  c/tclInt.h.5 Mar
60d0: 20 32 30 30 33 20 32 32 3a 33 31 3a 32 34 20 2d   2003 22:31:24 -
60e0: 30 30 30 30 09 31 2e 31 31 39 0a 2b 2b 2b 20 67  0000.1.119.+++ g
60f0: 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e 68 09  eneric/tclInt.h.
6100: 31 33 20 4d 61 72 20 32 30 30 33 20 30 32 3a 32  13 Mar 2003 02:2
6110: 36 3a 35 39 20 2d 30 30 30 30 0a 40 40 20 2d 31  6:59 -0000.@@ -1
6120: 32 34 39 2c 38 20 2b 31 32 34 39 2c 37 20 40 40  249,8 +1249,7 @@
6130: 0a 20 09 09 09 09 20 2a 20 4e 6f 72 6d 61 6c 6c  . .... * Normall
6140: 79 20 7a 65 72 6f 2c 20 62 75 74 20 6d 61 79 20  y zero, but may 
6150: 62 65 20 73 65 74 20 62 65 66 6f 72 65 0a 20 09  be set before. .
6160: 09 09 09 20 2a 20 63 61 6c 6c 69 6e 67 20 54 63  ... * calling Tc
6170: 6c 5f 45 76 61 6c 2e 20 20 53 65 65 20 62 65 6c  l_Eval.  See bel
6180: 6f 77 20 66 6f 72 20 76 61 6c 69 64 0a 20 09 09  ow for valid. ..
6190: 09 09 20 2a 20 76 61 6c 75 65 73 2e 20 2a 2f 0a  .. * values. */.
61a0: 2d 20 20 20 20 69 6e 74 20 74 65 72 6d 4f 66 66  -    int termOff
61b0: 73 65 74 3b 09 09 2f 2a 20 4f 66 66 73 65 74 20  set;../* Offset 
61c0: 6f 66 20 63 68 61 72 61 63 74 65 72 20 6a 75 73  of character jus
61d0: 74 20 61 66 74 65 72 20 6c 61 73 74 20 6f 6e 65  t after last one
61e0: 0a 2d 09 09 09 09 20 2a 20 63 6f 6d 70 69 6c 65  .-.... * compile
61f0: 64 20 6f 72 20 65 78 65 63 75 74 65 64 20 62 79  d or executed by
6200: 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 2e 20 2a 2f   Tcl_EvalObj. */
6210: 0a 2b 20 20 20 20 69 6e 74 20 75 6e 75 73 65 64  .+    int unused
6220: 31 3b 09 09 2f 2a 20 4e 6f 20 6c 6f 6e 67 65 72  1;../* No longer
6230: 20 75 73 65 64 20 28 77 61 73 20 74 65 72 6d 4f   used (was termO
6240: 66 66 73 65 74 29 20 2a 2f 0a 20 20 20 20 20 4c  ffset) */.     L
6250: 69 74 65 72 61 6c 54 61 62 6c 65 20 6c 69 74 65  iteralTable lite
6260: 72 61 6c 54 61 62 6c 65 3b 09 2f 2a 20 43 6f 6e  ralTable;./* Con
6270: 74 61 69 6e 73 20 4c 69 74 65 72 61 6c 45 6e 74  tains LiteralEnt
6280: 72 79 27 73 20 64 65 73 63 72 69 62 69 6e 67 20  ry's describing 
6290: 61 6c 6c 0a 20 09 09 09 09 20 2a 20 54 63 6c 20  all. .... * Tcl 
62a0: 6f 62 6a 65 63 74 73 20 68 6f 6c 64 69 6e 67 20  objects holding 
62b0: 6c 69 74 65 72 61 6c 73 20 6f 66 20 73 63 72 69  literals of scri
62c0: 70 74 73 0a 20 09 09 09 09 20 2a 20 63 6f 6d 70  pts. .... * comp
62d0: 69 6c 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  iled by the inte
62e0: 72 70 72 65 74 65 72 2e 20 49 6e 64 65 78 65 64  rpreter. Indexed
62f0: 20 62 79 0a 40 40 20 2d 31 33 32 30 2c 31 34 20   by.@@ -1320,14 
6300: 2b 31 33 31 39 2c 31 31 20 40 40 0a 20 2f 2a 0a  +1319,11 @@. /*.
6310: 20 20 2a 20 45 76 61 6c 46 6c 61 67 20 62 69 74    * EvalFlag bit
6320: 73 20 66 6f 72 20 49 6e 74 65 72 70 20 73 74 72  s for Interp str
6330: 75 63 74 75 72 65 73 3a 0a 20 20 2a 0a 2d 20 2a  uctures:.  *.- *
6340: 20 54 43 4c 5f 42 52 41 43 4b 45 54 5f 54 45 52   TCL_BRACKET_TER
6350: 4d 09 31 20 6d 65 61 6e 73 20 74 68 61 74 20 74  M.1 means that t
6360: 68 65 20 63 75 72 72 65 6e 74 20 73 63 72 69 70  he current scrip
6370: 74 20 69 73 20 74 65 72 6d 69 6e 61 74 65 64 20  t is terminated 
6380: 62 79 0a 2d 20 2a 09 09 09 61 20 63 6c 6f 73 65  by.- *...a close
6390: 20 62 72 61 63 6b 65 74 20 72 61 74 68 65 72 20   bracket rather 
63a0: 74 68 61 6e 20 74 68 65 20 65 6e 64 20 6f 66 20  than the end of 
63b0: 74 68 65 20 73 74 72 69 6e 67 2e 0a 20 20 2a 20  the string..  * 
63c0: 54 43 4c 5f 41 4c 4c 4f 57 5f 45 58 43 45 50 54  TCL_ALLOW_EXCEPT
63d0: 49 4f 4e 53 09 31 20 6d 65 61 6e 73 20 69 74 27  IONS.1 means it'
63e0: 73 20 4f 4b 20 66 6f 72 20 74 68 65 20 73 63 72  s OK for the scr
63f0: 69 70 74 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  ipt to terminate
6400: 20 77 69 74 68 0a 20 20 2a 09 09 09 61 20 63 6f   with.  *...a co
6410: 64 65 20 6f 74 68 65 72 20 74 68 61 6e 20 54 43  de other than TC
6420: 4c 5f 4f 4b 20 6f 72 20 54 43 4c 5f 45 52 52 4f  L_OK or TCL_ERRO
6430: 52 3b 09 30 20 6d 65 61 6e 73 0a 20 20 2a 09 09  R;.0 means.  *..
6440: 09 63 6f 64 65 73 20 6f 74 68 65 72 20 74 68 61  .codes other tha
6450: 6e 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 62  n these should b
6460: 65 20 74 75 72 6e 65 64 20 69 6e 74 6f 20 65 72  e turned into er
6470: 72 6f 72 73 2e 0a 20 20 2a 2f 0a 20 0a 2d 23 64  rors..  */. .-#d
6480: 65 66 69 6e 65 20 54 43 4c 5f 42 52 41 43 4b 45  efine TCL_BRACKE
6490: 54 5f 54 45 52 4d 09 20 20 31 0a 20 23 64 65 66  T_TERM.  1. #def
64a0: 69 6e 65 20 54 43 4c 5f 41 4c 4c 4f 57 5f 45 58  ine TCL_ALLOW_EX
64b0: 43 45 50 54 49 4f 4e 53 09 20 20 34 0a 20 0a 20  CEPTIONS.  4. . 
64c0: 2f 2a 0a 40 40 20 2d 31 38 30 32 2c 37 20 2b 31  /*.@@ -1802,7 +1
64d0: 37 39 38 2c 31 30 20 40 40 0a 20 45 58 54 45 52  798,10 @@. EXTER
64e0: 4e 20 56 4f 49 44 20 20 20 20 20 20 20 20 20 20  N VOID          
64f0: 20 20 20 54 63 6c 52 65 6d 65 6d 62 65 72 4a 6f     TclRememberJo
6500: 69 6e 61 62 6c 65 54 68 72 65 61 64 20 5f 41 4e  inableThread _AN
6510: 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 54 68  SI_ARGS_((Tcl_Th
6520: 72 65 61 64 49 64 20 69 64 29 29 3b 0a 20 45 58  readId id));. EX
6530: 54 45 52 4e 20 76 6f 69 64 09 09 54 63 6c 52 65  TERN void..TclRe
6540: 6d 65 6d 62 65 72 4d 75 74 65 78 20 5f 41 4e 53  memberMutex _ANS
6550: 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 4d 75 74  I_ARGS_((Tcl_Mut
6560: 65 78 20 2a 6d 75 74 65 78 29 29 3b 0a 20 45 58  ex *mutex));. EX
6570: 54 45 52 4e 20 56 4f 49 44 20 20 20 20 20 20 20  TERN VOID       
6580: 20 20 20 20 20 20 54 63 6c 53 69 67 6e 61 6c 45        TclSignalE
6590: 78 69 74 54 68 72 65 61 64 20 5f 41 4e 53 49 5f  xitThread _ANSI_
65a0: 41 52 47 53 5f 28 28 54 63 6c 5f 54 68 72 65 61  ARGS_((Tcl_Threa
65b0: 64 49 64 20 69 64 2c 0a 2d 09 09 09 20 20 20 20  dId id,.-...    
65c0: 20 69 6e 74 20 72 65 73 75 6c 74 29 29 3b 0a 2b   int result));.+
65d0: 09 09 09 20 20 20 20 69 6e 74 20 72 65 73 75 6c  ...    int resul
65e0: 74 29 29 3b 0a 2b 45 58 54 45 52 4e 20 69 6e 74  t));.+EXTERN int
65f0: 09 09 54 63 6c 53 75 62 73 74 54 6f 6b 65 6e 73  ..TclSubstTokens
6600: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63   _ANSI_ARGS_((Tc
6610: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
6620: 2c 0a 2b 09 09 09 20 20 20 20 54 63 6c 5f 54 6f  ,.+...    Tcl_To
6630: 6b 65 6e 20 2a 74 6f 6b 65 6e 50 74 72 2c 20 69  ken *tokenPtr, i
6640: 6e 74 20 63 6f 75 6e 74 2c 0a 2b 09 09 09 20 20  nt count,.+...  
6650: 20 20 69 6e 74 20 2a 74 6f 6b 65 6e 73 4c 65 66    int *tokensLef
6660: 74 50 74 72 29 29 3b 0a 20 45 58 54 45 52 4e 20  tPtr));. EXTERN 
6670: 76 6f 69 64 09 09 54 63 6c 54 72 61 6e 73 66 65  void..TclTransfe
6680: 72 52 65 73 75 6c 74 20 5f 41 4e 53 49 5f 41 52  rResult _ANSI_AR
6690: 47 53 5f 28 28 54 63 6c 5f 49 6e 74 65 72 70 20  GS_((Tcl_Interp 
66a0: 2a 73 6f 75 72 63 65 49 6e 74 65 72 70 2c 0a 20  *sourceInterp,. 
66b0: 09 09 09 20 20 20 20 69 6e 74 20 72 65 73 75 6c  ...    int resul
66c0: 74 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 74  t, Tcl_Interp *t
66d0: 61 72 67 65 74 49 6e 74 65 72 70 29 29 3b 0a 20  argetInterp));. 
66e0: 45 58 54 45 52 4e 20 54 63 6c 5f 4f 62 6a 2a 20  EXTERN Tcl_Obj* 
66f0: 20 20 20 20 20 20 20 20 54 63 6c 70 4e 61 74 69          TclpNati
6700: 76 65 54 6f 4e 6f 72 6d 61 6c 69 7a 65 64 20 0a  veToNormalized .
6710: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74  Index: generic/t
6720: 63 6c 50 61 72 73 65 2e 63 0a 3d 3d 3d 3d 3d 3d  clParse.c.======
6730: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6740: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6750: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6760: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43  =============.RC
6770: 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74  S file: /cvsroot
6780: 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63  /tcl/tcl/generic
6790: 2f 74 63 6c 50 61 72 73 65 2e 63 2c 76 0a 72 65  /tclParse.c,v.re
67a0: 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f  trieving revisio
67b0: 6e 20 31 2e 32 35 0a 64 69 66 66 20 2d 75 20 2d  n 1.25.diff -u -
67c0: 72 31 2e 32 35 20 74 63 6c 50 61 72 73 65 2e 63  r1.25 tclParse.c
67d0: 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c  .--- generic/tcl
67e0: 50 61 72 73 65 2e 63 09 31 36 20 46 65 62 20 32  Parse.c.16 Feb 2
67f0: 30 30 33 20 30 31 3a 33 36 3a 33 32 20 2d 30 30  003 01:36:32 -00
6800: 30 30 09 31 2e 32 35 0a 2b 2b 2b 20 67 65 6e 65  00.1.25.+++ gene
6810: 72 69 63 2f 74 63 6c 50 61 72 73 65 2e 63 09 31  ric/tclParse.c.1
6820: 33 20 4d 61 72 20 32 30 30 33 20 30 32 3a 32 36  3 Mar 2003 02:26
6830: 3a 35 39 20 2d 30 30 30 30 0a 40 40 20 2d 31 37  :59 -0000.@@ -17
6840: 39 2c 37 20 2b 31 37 39 2c 37 20 40 40 0a 20 73  9,7 +179,7 @@. s
6850: 74 61 74 69 63 20 69 6e 74 09 09 50 61 72 73 65  tatic int..Parse
6860: 43 6f 6d 6d 65 6e 74 20 5f 41 4e 53 49 5f 41 52  Comment _ANSI_AR
6870: 47 53 5f 28 28 43 4f 4e 53 54 20 63 68 61 72 20  GS_((CONST char 
6880: 2a 73 72 63 2c 20 69 6e 74 20 6e 75 6d 42 79 74  *src, int numByt
6890: 65 73 2c 0a 20 09 09 09 20 20 20 20 54 63 6c 5f  es,. ...    Tcl_
68a0: 50 61 72 73 65 20 2a 70 61 72 73 65 50 74 72 29  Parse *parsePtr)
68b0: 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09  );. static int..
68c0: 50 61 72 73 65 54 6f 6b 65 6e 73 20 5f 41 4e 53  ParseTokens _ANS
68d0: 49 5f 41 52 47 53 5f 28 28 43 4f 4e 53 54 20 63  I_ARGS_((CONST c
68e0: 68 61 72 20 2a 73 72 63 2c 20 69 6e 74 20 6e 75  har *src, int nu
68f0: 6d 42 79 74 65 73 2c 0a 2d 09 09 09 20 20 20 20  mBytes,.-...    
6900: 69 6e 74 20 6d 61 73 6b 2c 20 54 63 6c 5f 50 61  int mask, Tcl_Pa
6910: 72 73 65 20 2a 70 61 72 73 65 50 74 72 29 29 3b  rse *parsePtr));
6920: 0a 2b 09 09 09 20 20 20 20 69 6e 74 20 6d 61 73  .+...    int mas
6930: 6b 2c 20 69 6e 74 20 66 6c 61 67 73 2c 20 54 63  k, int flags, Tc
6940: 6c 5f 50 61 72 73 65 20 2a 70 61 72 73 65 50 74  l_Parse *parsePt
6950: 72 29 29 3b 0a 20 0a 20 2f 2a 0a 20 20 2a 2d 2d  r));. . /*.  *--
6960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
69a0: 2d 2d 2d 2d 0a 40 40 20 2d 33 34 33 2c 37 20 2b  ----.@@ -343,7 +
69b0: 33 34 33 2c 37 20 40 40 0a 20 09 20 20 20 20 20  343,7 @@. .     
69c0: 2a 2f 0a 20 0a 20 09 20 20 20 20 69 66 20 28 50  */. . .    if (P
69d0: 61 72 73 65 54 6f 6b 65 6e 73 28 73 72 63 2c 20  arseTokens(src, 
69e0: 6e 75 6d 42 79 74 65 73 2c 20 54 59 50 45 5f 53  numBytes, TYPE_S
69f0: 50 41 43 45 7c 74 65 72 6d 69 6e 61 74 6f 72 73  PACE|terminators
6a00: 2c 0a 2d 09 09 20 20 20 20 70 61 72 73 65 50 74  ,.-..    parsePt
6a10: 72 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  r) != TCL_OK) {.
6a20: 2b 09 09 20 20 20 20 54 43 4c 5f 53 55 42 53 54  +..    TCL_SUBST
6a30: 5f 41 4c 4c 2c 20 70 61 72 73 65 50 74 72 29 20  _ALL, parsePtr) 
6a40: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 09 09  != TCL_OK) {. ..
6a50: 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 20 09 20 20  goto error;. .  
6a60: 20 20 7d 0a 20 09 20 20 20 20 73 72 63 20 3d 20    }. .    src = 
6a70: 70 61 72 73 65 50 74 72 2d 3e 74 65 72 6d 3b 20  parsePtr->term; 
6a80: 6e 75 6d 42 79 74 65 73 20 3d 20 70 61 72 73 65  numBytes = parse
6a90: 50 74 72 2d 3e 65 6e 64 20 2d 20 73 72 63 3b 0a  Ptr->end - src;.
6aa0: 40 40 20 2d 37 38 35 2c 39 20 2b 37 38 35 2c 31  @@ -785,9 +785,1
6ab0: 33 20 40 40 0a 20 20 2a 2f 0a 20 0a 20 73 74 61  3 @@.  */. . sta
6ac0: 74 69 63 20 69 6e 74 0a 2d 50 61 72 73 65 54 6f  tic int.-ParseTo
6ad0: 6b 65 6e 73 28 73 72 63 2c 20 6e 75 6d 42 79 74  kens(src, numByt
6ae0: 65 73 2c 20 6d 61 73 6b 2c 20 70 61 72 73 65 50  es, mask, parseP
6af0: 74 72 29 0a 2b 50 61 72 73 65 54 6f 6b 65 6e 73  tr).+ParseTokens
6b00: 28 73 72 63 2c 20 6e 75 6d 42 79 74 65 73 2c 20  (src, numBytes, 
6b10: 6d 61 73 6b 2c 20 66 6c 61 67 73 2c 20 70 61 72  mask, flags, par
6b20: 73 65 50 74 72 29 0a 20 20 20 20 20 72 65 67 69  sePtr).     regi
6b30: 73 74 65 72 20 43 4f 4e 53 54 20 63 68 61 72 20  ster CONST char 
6b40: 2a 73 72 63 3b 09 2f 2a 20 46 69 72 73 74 20 63  *src;./* First c
6b50: 68 61 72 61 63 74 65 72 20 74 6f 20 70 61 72 73  haracter to pars
6b60: 65 2e 20 2a 2f 0a 20 20 20 20 20 72 65 67 69 73  e. */.     regis
6b70: 74 65 72 20 69 6e 74 20 6e 75 6d 42 79 74 65 73  ter int numBytes
6b80: 3b 09 2f 2a 20 4d 61 78 20 6e 75 6d 62 65 72 20  ;./* Max number 
6b90: 6f 66 20 62 79 74 65 73 20 74 6f 20 73 63 61 6e  of bytes to scan
6ba0: 2e 20 2a 2f 0a 2b 20 20 20 20 69 6e 74 20 66 6c  . */.+    int fl
6bb0: 61 67 73 3b 09 09 09 2f 2a 20 4f 52 2d 65 64 20  ags;.../* OR-ed 
6bc0: 62 69 74 73 20 69 6e 64 69 63 61 74 69 6e 67 20  bits indicating 
6bd0: 77 68 61 74 20 73 75 62 73 74 69 74 75 74 69 6f  what substitutio
6be0: 6e 73 0a 2b 09 09 09 09 20 20 20 74 6f 20 70 65  ns.+....   to pe
6bf0: 72 66 6f 72 6d 3a 20 54 43 4c 5f 53 55 42 53 54  rform: TCL_SUBST
6c00: 5f 43 4f 4d 4d 41 4e 44 53 2c 0a 2b 09 09 09 09  _COMMANDS,.+....
6c10: 20 20 20 54 43 4c 5f 53 55 42 53 54 5f 56 41 52     TCL_SUBST_VAR
6c20: 49 41 42 4c 45 53 2c 20 61 6e 64 20 0a 2b 09 09  IABLES, and .+..
6c30: 09 09 20 20 20 54 43 4c 5f 53 55 42 53 54 5f 42  ..   TCL_SUBST_B
6c40: 41 43 4b 53 4c 41 53 48 45 53 20 2a 2f 0a 20 20  ACKSLASHES */.  
6c50: 20 20 20 69 6e 74 20 6d 61 73 6b 3b 09 09 09 2f     int mask;.../
6c60: 2a 20 53 70 65 63 69 66 69 65 73 20 77 68 65 6e  * Specifies when
6c70: 20 74 6f 20 73 74 6f 70 20 70 61 72 73 69 6e 67   to stop parsing
6c80: 2e 20 20 54 68 65 0a 20 09 09 09 09 20 2a 20 70  .  The. .... * p
6c90: 61 72 73 65 20 73 74 6f 70 73 20 61 74 20 74 68  arse stops at th
6ca0: 65 20 66 69 72 73 74 20 75 6e 71 75 6f 74 65 64  e first unquoted
6cb0: 0a 20 09 09 09 09 20 2a 20 63 68 61 72 61 63 74  . .... * charact
6cc0: 65 72 20 77 68 6f 73 65 20 43 48 41 52 5f 54 59  er whose CHAR_TY
6cd0: 50 45 20 63 6f 6e 74 61 69 6e 73 0a 40 40 20 2d  PE contains.@@ -
6ce0: 37 39 38 2c 36 20 2b 38 30 32 2c 39 20 40 40 0a  798,6 +802,9 @@.
6cf0: 20 7b 0a 20 20 20 20 20 63 68 61 72 20 74 79 70   {.     char typ
6d00: 65 3b 20 0a 20 20 20 20 20 69 6e 74 20 6f 72 69  e; .     int ori
6d10: 67 69 6e 61 6c 54 6f 6b 65 6e 73 2c 20 76 61 72  ginalTokens, var
6d20: 54 6f 6b 65 6e 3b 0a 2b 20 20 20 20 69 6e 74 20  Token;.+    int 
6d30: 6e 6f 53 75 62 73 74 43 6d 64 73 20 3d 20 21 28  noSubstCmds = !(
6d40: 66 6c 61 67 73 20 26 20 54 43 4c 5f 53 55 42 53  flags & TCL_SUBS
6d50: 54 5f 43 4f 4d 4d 41 4e 44 53 29 3b 0a 2b 20 20  T_COMMANDS);.+  
6d60: 20 20 69 6e 74 20 6e 6f 53 75 62 73 74 56 61 72    int noSubstVar
6d70: 73 20 3d 20 21 28 66 6c 61 67 73 20 26 20 54 43  s = !(flags & TC
6d80: 4c 5f 53 55 42 53 54 5f 56 41 52 49 41 42 4c 45  L_SUBST_VARIABLE
6d90: 53 29 3b 0a 2b 20 20 20 20 69 6e 74 20 6e 6f 53  S);.+    int noS
6da0: 75 62 73 74 42 53 20 3d 20 21 28 66 6c 61 67 73  ubstBS = !(flags
6db0: 20 26 20 54 43 4c 5f 53 55 42 53 54 5f 42 41 43   & TCL_SUBST_BAC
6dc0: 4b 53 4c 41 53 48 45 53 29 3b 0a 20 20 20 20 20  KSLASHES);.     
6dd0: 54 63 6c 5f 54 6f 6b 65 6e 20 2a 74 6f 6b 65 6e  Tcl_Token *token
6de0: 50 74 72 3b 0a 20 20 20 20 20 54 63 6c 5f 50 61  Ptr;.     Tcl_Pa
6df0: 72 73 65 20 6e 65 73 74 65 64 3b 0a 20 0a 40 40  rse nested;. .@@
6e00: 20 2d 38 33 31 2c 36 20 2b 38 33 38 2c 31 33 20   -831,6 +838,13 
6e10: 40 40 0a 20 09 20 20 20 20 74 6f 6b 65 6e 50 74  @@. .    tokenPt
6e20: 72 2d 3e 73 69 7a 65 20 3d 20 73 72 63 20 2d 20  r->size = src - 
6e30: 74 6f 6b 65 6e 50 74 72 2d 3e 73 74 61 72 74 3b  tokenPtr->start;
6e40: 0a 20 09 20 20 20 20 70 61 72 73 65 50 74 72 2d  . .    parsePtr-
6e50: 3e 6e 75 6d 54 6f 6b 65 6e 73 2b 2b 3b 0a 20 09  >numTokens++;. .
6e60: 7d 20 65 6c 73 65 20 69 66 20 28 2a 73 72 63 20  } else if (*src 
6e70: 3d 3d 20 27 24 27 29 20 7b 0a 2b 09 20 20 20 20  == '$') {.+.    
6e80: 69 66 20 28 6e 6f 53 75 62 73 74 56 61 72 73 29  if (noSubstVars)
6e90: 20 7b 0a 2b 09 09 74 6f 6b 65 6e 50 74 72 2d 3e   {.+..tokenPtr->
6ea0: 74 79 70 65 20 3d 20 54 43 4c 5f 54 4f 4b 45 4e  type = TCL_TOKEN
6eb0: 5f 54 45 58 54 3b 0a 2b 09 09 74 6f 6b 65 6e 50  _TEXT;.+..tokenP
6ec0: 74 72 2d 3e 73 69 7a 65 20 3d 20 31 3b 0a 2b 09  tr->size = 1;.+.
6ed0: 09 70 61 72 73 65 50 74 72 2d 3e 6e 75 6d 54 6f  .parsePtr->numTo
6ee0: 6b 65 6e 73 2b 2b 3b 0a 2b 09 09 73 72 63 2b 2b  kens++;.+..src++
6ef0: 3b 20 6e 75 6d 42 79 74 65 73 2d 2d 3b 0a 2b 09  ; numBytes--;.+.
6f00: 09 63 6f 6e 74 69 6e 75 65 3b 0a 2b 09 20 20 20  .continue;.+.   
6f10: 20 7d 0a 20 09 20 20 20 20 2f 2a 0a 20 09 20 20   }. .    /*. .  
6f20: 20 20 20 2a 20 54 68 69 73 20 69 73 20 61 20 76     * This is a v
6f30: 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63  ariable referenc
6f40: 65 2e 20 20 43 61 6c 6c 20 54 63 6c 5f 50 61 72  e.  Call Tcl_Par
6f50: 73 65 56 61 72 4e 61 6d 65 20 74 6f 20 64 6f 0a  seVarName to do.
6f60: 20 09 20 20 20 20 20 2a 20 61 6c 6c 20 74 68 65   .     * all the
6f70: 20 64 69 72 74 79 20 77 6f 72 6b 20 6f 66 20 70   dirty work of p
6f80: 61 72 73 69 6e 67 20 74 68 65 20 6e 61 6d 65 2e  arsing the name.
6f90: 0a 40 40 20 2d 38 34 34 2c 36 20 2b 38 35 38 2c  .@@ -844,6 +858,
6fa0: 31 33 20 40 40 0a 20 09 20 20 20 20 73 72 63 20  13 @@. .    src 
6fb0: 2b 3d 20 70 61 72 73 65 50 74 72 2d 3e 74 6f 6b  += parsePtr->tok
6fc0: 65 6e 50 74 72 5b 76 61 72 54 6f 6b 65 6e 5d 2e  enPtr[varToken].
6fd0: 73 69 7a 65 3b 0a 20 09 20 20 20 20 6e 75 6d 42  size;. .    numB
6fe0: 79 74 65 73 20 2d 3d 20 70 61 72 73 65 50 74 72  ytes -= parsePtr
6ff0: 2d 3e 74 6f 6b 65 6e 50 74 72 5b 76 61 72 54 6f  ->tokenPtr[varTo
7000: 6b 65 6e 5d 2e 73 69 7a 65 3b 0a 20 09 7d 20 65  ken].size;. .} e
7010: 6c 73 65 20 69 66 20 28 2a 73 72 63 20 3d 3d 20  lse if (*src == 
7020: 27 5b 27 29 20 7b 0a 2b 09 20 20 20 20 69 66 20  '[') {.+.    if 
7030: 28 6e 6f 53 75 62 73 74 43 6d 64 73 29 20 7b 0a  (noSubstCmds) {.
7040: 2b 09 09 74 6f 6b 65 6e 50 74 72 2d 3e 74 79 70  +..tokenPtr->typ
7050: 65 20 3d 20 54 43 4c 5f 54 4f 4b 45 4e 5f 54 45  e = TCL_TOKEN_TE
7060: 58 54 3b 0a 2b 09 09 74 6f 6b 65 6e 50 74 72 2d  XT;.+..tokenPtr-
7070: 3e 73 69 7a 65 20 3d 20 31 3b 0a 2b 09 09 70 61  >size = 1;.+..pa
7080: 72 73 65 50 74 72 2d 3e 6e 75 6d 54 6f 6b 65 6e  rsePtr->numToken
7090: 73 2b 2b 3b 0a 2b 09 09 73 72 63 2b 2b 3b 20 6e  s++;.+..src++; n
70a0: 75 6d 42 79 74 65 73 2d 2d 3b 0a 2b 09 09 63 6f  umBytes--;.+..co
70b0: 6e 74 69 6e 75 65 3b 0a 2b 09 20 20 20 20 7d 0a  ntinue;.+.    }.
70c0: 20 09 20 20 20 20 2f 2a 0a 20 09 20 20 20 20 20   .    /*. .     
70d0: 2a 20 43 6f 6d 6d 61 6e 64 20 73 75 62 73 74 69  * Command substi
70e0: 74 75 74 69 6f 6e 2e 20 20 43 61 6c 6c 20 54 63  tution.  Call Tc
70f0: 6c 5f 50 61 72 73 65 43 6f 6d 6d 61 6e 64 20 72  l_ParseCommand r
7100: 65 63 75 72 73 69 76 65 6c 79 0a 20 09 20 20 20  ecursively. .   
7110: 20 20 2a 20 28 61 6e 64 20 72 65 70 65 61 74 65    * (and repeate
7120: 64 6c 79 29 20 74 6f 20 70 61 72 73 65 20 74 68  dly) to parse th
7130: 65 20 6e 65 73 74 65 64 20 63 6f 6d 6d 61 6e 64  e nested command
7140: 28 73 29 2c 20 74 68 65 6e 0a 40 40 20 2d 38 39  (s), then.@@ -89
7150: 36 2c 36 20 2b 39 31 37 2c 31 33 20 40 40 0a 20  6,6 +917,13 @@. 
7160: 09 20 20 20 20 74 6f 6b 65 6e 50 74 72 2d 3e 73  .    tokenPtr->s
7170: 69 7a 65 20 3d 20 73 72 63 20 2d 20 74 6f 6b 65  ize = src - toke
7180: 6e 50 74 72 2d 3e 73 74 61 72 74 3b 0a 20 09 20  nPtr->start;. . 
7190: 20 20 20 70 61 72 73 65 50 74 72 2d 3e 6e 75 6d     parsePtr->num
71a0: 54 6f 6b 65 6e 73 2b 2b 3b 0a 20 09 7d 20 65 6c  Tokens++;. .} el
71b0: 73 65 20 69 66 20 28 2a 73 72 63 20 3d 3d 20 27  se if (*src == '
71c0: 5c 5c 27 29 20 7b 0a 2b 09 20 20 20 20 69 66 20  \\') {.+.    if 
71d0: 28 6e 6f 53 75 62 73 74 42 53 29 20 7b 0a 2b 09  (noSubstBS) {.+.
71e0: 09 74 6f 6b 65 6e 50 74 72 2d 3e 74 79 70 65 20  .tokenPtr->type 
71f0: 3d 20 54 43 4c 5f 54 4f 4b 45 4e 5f 54 45 58 54  = TCL_TOKEN_TEXT
7200: 3b 0a 2b 09 09 74 6f 6b 65 6e 50 74 72 2d 3e 73  ;.+..tokenPtr->s
7210: 69 7a 65 20 3d 20 31 3b 0a 2b 09 09 70 61 72 73  ize = 1;.+..pars
7220: 65 50 74 72 2d 3e 6e 75 6d 54 6f 6b 65 6e 73 2b  ePtr->numTokens+
7230: 2b 3b 0a 2b 09 09 73 72 63 2b 2b 3b 20 6e 75 6d  +;.+..src++; num
7240: 42 79 74 65 73 2d 2d 3b 0a 2b 09 09 63 6f 6e 74  Bytes--;.+..cont
7250: 69 6e 75 65 3b 0a 2b 09 20 20 20 20 7d 0a 20 09  inue;.+.    }. .
7260: 20 20 20 20 2f 2a 0a 20 09 20 20 20 20 20 2a 20      /*. .     * 
7270: 42 61 63 6b 73 6c 61 73 68 20 73 75 62 73 74 69  Backslash substi
7280: 74 75 74 69 6f 6e 2e 0a 20 09 20 20 20 20 20 2a  tution.. .     *
7290: 2f 0a 40 40 20 2d 31 32 31 30 2c 38 20 2b 31 32  /.@@ -1210,8 +12
72a0: 33 38 2c 38 20 40 40 0a 20 09 20 20 20 20 20 2a  38,8 @@. .     *
72b0: 20 73 69 6e 63 65 20 69 74 20 63 6f 75 6c 64 20   since it could 
72c0: 63 6f 6e 74 61 69 6e 20 61 6e 79 20 6e 75 6d 62  contain any numb
72d0: 65 72 20 6f 66 20 73 75 62 73 74 69 74 75 74 69  er of substituti
72e0: 6f 6e 73 2e 0a 20 09 20 20 20 20 20 2a 2f 0a 20  ons.. .     */. 
72f0: 0a 2d 09 20 20 20 20 69 66 20 28 50 61 72 73 65  .-.    if (Parse
7300: 54 6f 6b 65 6e 73 28 73 72 63 2b 31 2c 20 6e 75  Tokens(src+1, nu
7310: 6d 42 79 74 65 73 2d 31 2c 20 54 59 50 45 5f 43  mBytes-1, TYPE_C
7320: 4c 4f 53 45 5f 50 41 52 45 4e 2c 20 70 61 72 73  LOSE_PAREN, pars
7330: 65 50 74 72 29 0a 2d 09 09 20 20 20 20 21 3d 20  ePtr).-..    != 
7340: 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 20 20 20 20  TCL_OK) {.+.    
7350: 69 66 20 28 54 43 4c 5f 4f 4b 20 21 3d 20 50 61  if (TCL_OK != Pa
7360: 72 73 65 54 6f 6b 65 6e 73 28 73 72 63 2b 31 2c  rseTokens(src+1,
7370: 20 6e 75 6d 42 79 74 65 73 2d 31 2c 20 54 59 50   numBytes-1, TYP
7380: 45 5f 43 4c 4f 53 45 5f 50 41 52 45 4e 2c 0a 2b  E_CLOSE_PAREN,.+
7390: 09 09 20 20 20 20 54 43 4c 5f 53 55 42 53 54 5f  ..    TCL_SUBST_
73a0: 41 4c 4c 2c 20 70 61 72 73 65 50 74 72 29 29 20  ALL, parsePtr)) 
73b0: 7b 0a 20 09 09 67 6f 74 6f 20 65 72 72 6f 72 3b  {. ..goto error;
73c0: 0a 20 09 20 20 20 20 7d 0a 20 09 20 20 20 20 69  . .    }. .    i
73d0: 66 20 28 28 70 61 72 73 65 50 74 72 2d 3e 74 65  f ((parsePtr->te
73e0: 72 6d 20 3d 3d 20 28 73 72 63 20 2b 20 6e 75 6d  rm == (src + num
73f0: 42 79 74 65 73 29 29 20 0a 40 40 20 2d 31 33 30  Bytes)) .@@ -130
7400: 32 2c 37 20 2b 31 33 33 30 2c 37 20 40 40 0a 20  2,7 +1330,7 @@. 
7410: 09 72 65 74 75 72 6e 20 22 24 22 3b 0a 20 20 20  .return "$";.   
7420: 20 20 7d 0a 20 0a 2d 20 20 20 20 63 6f 64 65 20    }. .-    code 
7430: 3d 20 54 63 6c 5f 45 76 61 6c 54 6f 6b 65 6e 73  = Tcl_EvalTokens
7440: 53 74 61 6e 64 61 72 64 28 69 6e 74 65 72 70 2c  Standard(interp,
7450: 20 70 61 72 73 65 2e 74 6f 6b 65 6e 50 74 72 2c   parse.tokenPtr,
7460: 20 70 61 72 73 65 2e 6e 75 6d 54 6f 6b 65 6e 73   parse.numTokens
7470: 29 3b 0a 2b 20 20 20 20 63 6f 64 65 20 3d 20 54  );.+    code = T
7480: 63 6c 53 75 62 73 74 54 6f 6b 65 6e 73 28 69 6e  clSubstTokens(in
7490: 74 65 72 70 2c 20 70 61 72 73 65 2e 74 6f 6b 65  terp, parse.toke
74a0: 6e 50 74 72 2c 20 70 61 72 73 65 2e 6e 75 6d 54  nPtr, parse.numT
74b0: 6f 6b 65 6e 73 2c 20 4e 55 4c 4c 29 3b 0a 20 20  okens, NULL);.  
74c0: 20 20 20 69 66 20 28 63 6f 64 65 20 21 3d 20 54     if (code != T
74d0: 43 4c 5f 4f 4b 29 20 7b 0a 20 09 72 65 74 75 72  CL_OK) {. .retur
74e0: 6e 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 7d 0a 40  n NULL;.     }.@
74f0: 40 20 2d 31 36 30 36 2c 37 20 2b 31 36 33 34 2c  @ -1606,7 +1634,
7500: 38 20 40 40 0a 20 09 70 61 72 73 65 50 74 72 2d  8 @@. .parsePtr-
7510: 3e 65 72 72 6f 72 54 79 70 65 20 3d 20 54 43 4c  >errorType = TCL
7520: 5f 50 41 52 53 45 5f 53 55 43 43 45 53 53 3b 0a  _PARSE_SUCCESS;.
7530: 20 20 20 20 20 7d 0a 20 20 20 20 20 0a 2d 20 20       }.     .-  
7540: 20 20 69 66 20 28 50 61 72 73 65 54 6f 6b 65 6e    if (ParseToken
7550: 73 28 73 74 72 69 6e 67 2b 31 2c 20 6e 75 6d 42  s(string+1, numB
7560: 79 74 65 73 2d 31 2c 20 54 59 50 45 5f 51 55 4f  ytes-1, TYPE_QUO
7570: 54 45 2c 20 70 61 72 73 65 50 74 72 29 20 21 3d  TE, parsePtr) !=
7580: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 20 20 20 20   TCL_OK) {.+    
7590: 69 66 20 28 54 43 4c 5f 4f 4b 20 21 3d 20 50 61  if (TCL_OK != Pa
75a0: 72 73 65 54 6f 6b 65 6e 73 28 73 74 72 69 6e 67  rseTokens(string
75b0: 2b 31 2c 20 6e 75 6d 42 79 74 65 73 2d 31 2c 20  +1, numBytes-1, 
75c0: 54 59 50 45 5f 51 55 4f 54 45 2c 0a 2b 09 20 20  TYPE_QUOTE,.+.  
75d0: 20 20 54 43 4c 5f 53 55 42 53 54 5f 41 4c 4c 2c    TCL_SUBST_ALL,
75e0: 20 70 61 72 73 65 50 74 72 29 29 20 7b 0a 20 09   parsePtr)) {. .
75f0: 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 20 20 20 20  goto error;.    
7600: 20 7d 0a 20 20 20 20 20 69 66 20 28 2a 70 61 72   }.     if (*par
7610: 73 65 50 74 72 2d 3e 74 65 72 6d 20 21 3d 20 27  sePtr->term != '
7620: 22 27 29 20 7b 0a 40 40 20 2d 31 36 32 38 2c 36  "') {.@@ -1628,6
7630: 20 2b 31 36 35 37 2c 34 32 30 20 40 40 0a 20 20   +1657,420 @@.  
7640: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
7650: 52 4f 52 3b 0a 20 7d 0a 20 0a 2b 2f 2a 0a 2b 20  ROR;. }. .+/*.+ 
7660: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
7670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
76a0: 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20  -------.+ *.+ * 
76b0: 54 63 6c 5f 53 75 62 73 74 4f 62 6a 20 2d 2d 0a  Tcl_SubstObj --.
76c0: 2b 20 2a 0a 2b 20 2a 20 20 20 20 20 20 54 68 69  + *.+ *      Thi
76d0: 73 20 66 75 6e 63 74 69 6f 6e 20 70 65 72 66 6f  s function perfo
76e0: 72 6d 73 20 74 68 65 20 73 75 62 73 74 69 74 75  rms the substitu
76f0: 74 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20  tions specified 
7700: 6f 6e 20 74 68 65 0a 2b 20 2a 20 20 20 20 20 20  on the.+ *      
7710: 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20  given string as 
7720: 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68 65  described in the
7730: 20 75 73 65 72 20 64 6f 63 75 6d 65 6e 74 61 74   user documentat
7740: 69 6f 6e 20 66 6f 72 20 74 68 65 0a 2b 20 2a 20  ion for the.+ * 
7750: 20 20 20 20 20 22 73 75 62 73 74 22 20 54 63 6c       "subst" Tcl
7760: 20 63 6f 6d 6d 61 6e 64 2e 20 20 20 20 20 20 20   command.       
7770: 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73  .+ *.+ * Results
7780: 3a 0a 2b 20 2a 20 20 20 20 20 20 41 20 54 63 6c  :.+ *      A Tcl
7790: 5f 4f 62 6a 2a 20 63 6f 6e 74 61 69 6e 69 6e 67  _Obj* containing
77a0: 20 74 68 65 20 73 75 62 73 74 69 74 75 74 65 64   the substituted
77b0: 20 73 74 72 69 6e 67 2c 20 6f 72 20 4e 55 4c 4c   string, or NULL
77c0: 20 74 6f 0a 2b 20 2a 20 20 20 20 20 20 69 6e 64   to.+ *      ind
77d0: 69 63 61 74 65 20 74 68 61 74 20 61 6e 20 65 72  icate that an er
77e0: 72 6f 72 20 6f 63 63 75 72 72 65 64 2e 0a 2b 20  ror occurred..+ 
77f0: 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63  *.+ * Side effec
7800: 74 73 3a 0a 2b 20 2a 20 20 20 20 20 20 53 65 65  ts:.+ *      See
7810: 20 74 68 65 20 75 73 65 72 20 64 6f 63 75 6d 65   the user docume
7820: 6e 74 61 74 69 6f 6e 2e 0a 2b 20 2a 0a 2b 20 2a  ntation..+ *.+ *
7830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7870: 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 54  ------.+ */.+.+T
7880: 63 6c 5f 4f 62 6a 20 2a 0a 2b 54 63 6c 5f 53 75  cl_Obj *.+Tcl_Su
7890: 62 73 74 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  bstObj(interp, o
78a0: 62 6a 50 74 72 2c 20 66 6c 61 67 73 29 0a 2b 20  bjPtr, flags).+ 
78b0: 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69     Tcl_Interp *i
78c0: 6e 74 65 72 70 3b 09 2f 2a 20 49 6e 74 65 72 70  nterp;./* Interp
78d0: 72 65 74 65 72 20 69 6e 20 77 68 69 63 68 20 73  reter in which s
78e0: 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 63 63 75  ubstitution occu
78f0: 72 73 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 4f  rs */.+    Tcl_O
7900: 62 6a 20 2a 6f 62 6a 50 74 72 3b 09 2f 2a 20 54  bj *objPtr;./* T
7910: 68 65 20 76 61 6c 75 65 20 74 6f 20 62 65 20 73  he value to be s
7920: 75 62 73 74 69 74 75 74 65 64 20 2a 2f 0a 2b 20  ubstituted */.+ 
7930: 20 20 20 69 6e 74 20 66 6c 61 67 73 3b 09 09 2f     int flags;../
7940: 2a 20 57 68 61 74 20 73 75 62 73 74 69 74 75 74  * What substitut
7950: 69 6f 6e 73 20 74 6f 20 64 6f 20 2a 2f 0a 2b 7b  ions to do */.+{
7960: 0a 2b 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68  .+    int length
7970: 2c 20 74 6f 6b 65 6e 73 4c 65 66 74 2c 20 63 6f  , tokensLeft, co
7980: 64 65 3b 0a 2b 20 20 20 20 54 63 6c 5f 50 61 72  de;.+    Tcl_Par
7990: 73 65 20 70 61 72 73 65 3b 0a 2b 20 20 20 20 54  se parse;.+    T
79a0: 63 6c 5f 54 6f 6b 65 6e 20 2a 65 6e 64 54 6f 6b  cl_Token *endTok
79b0: 65 6e 50 74 72 3b 0a 2b 20 20 20 20 54 63 6c 5f  enPtr;.+    Tcl_
79c0: 4f 62 6a 20 2a 72 65 73 75 6c 74 3b 0a 2b 20 20  Obj *result;.+  
79d0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 65 72 72 4d 73    Tcl_Obj *errMs
79e0: 67 20 3d 20 4e 55 4c 4c 3b 0a 2b 20 20 20 20 43  g = NULL;.+    C
79f0: 4f 4e 53 54 20 63 68 61 72 20 2a 70 20 3d 20 54  ONST char *p = T
7a00: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
7a10: 4f 62 6a 28 6f 62 6a 50 74 72 2c 20 26 6c 65 6e  Obj(objPtr, &len
7a20: 67 74 68 29 3b 0a 2b 0a 2b 20 20 20 20 70 61 72  gth);.+.+    par
7a30: 73 65 2e 74 6f 6b 65 6e 50 74 72 20 3d 20 70 61  se.tokenPtr = pa
7a40: 72 73 65 2e 73 74 61 74 69 63 54 6f 6b 65 6e 73  rse.staticTokens
7a50: 3b 0a 2b 20 20 20 20 70 61 72 73 65 2e 6e 75 6d  ;.+    parse.num
7a60: 54 6f 6b 65 6e 73 20 3d 20 30 3b 0a 2b 20 20 20  Tokens = 0;.+   
7a70: 20 70 61 72 73 65 2e 74 6f 6b 65 6e 73 41 76 61   parse.tokensAva
7a80: 69 6c 61 62 6c 65 20 3d 20 4e 55 4d 5f 53 54 41  ilable = NUM_STA
7a90: 54 49 43 5f 54 4f 4b 45 4e 53 3b 0a 2b 20 20 20  TIC_TOKENS;.+   
7aa0: 20 70 61 72 73 65 2e 73 74 72 69 6e 67 20 3d 20   parse.string = 
7ab0: 70 3b 0a 2b 20 20 20 20 70 61 72 73 65 2e 65 6e  p;.+    parse.en
7ac0: 64 20 3d 20 70 20 2b 20 6c 65 6e 67 74 68 3b 0a  d = p + length;.
7ad0: 2b 20 20 20 20 70 61 72 73 65 2e 74 65 72 6d 20  +    parse.term 
7ae0: 3d 20 70 61 72 73 65 2e 65 6e 64 3b 0a 2b 20 20  = parse.end;.+  
7af0: 20 20 70 61 72 73 65 2e 69 6e 74 65 72 70 20 3d    parse.interp =
7b00: 20 69 6e 74 65 72 70 3b 0a 2b 20 20 20 20 70 61   interp;.+    pa
7b10: 72 73 65 2e 69 6e 63 6f 6d 70 6c 65 74 65 20 3d  rse.incomplete =
7b20: 20 30 3b 0a 2b 20 20 20 20 70 61 72 73 65 2e 65   0;.+    parse.e
7b30: 72 72 6f 72 54 79 70 65 20 3d 20 54 43 4c 5f 50  rrorType = TCL_P
7b40: 41 52 53 45 5f 53 55 43 43 45 53 53 3b 0a 2b 0a  ARSE_SUCCESS;.+.
7b50: 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20  +    /*.+     * 
7b60: 46 69 72 73 74 20 70 61 72 73 65 20 74 68 65 20  First parse the 
7b70: 73 74 72 69 6e 67 20 72 65 70 20 6f 66 20 6f 62  string rep of ob
7b80: 6a 50 74 72 2c 20 61 73 20 69 66 20 69 74 20 77  jPtr, as if it w
7b90: 65 72 65 20 65 6e 63 6c 6f 73 65 64 0a 2b 20 20  ere enclosed.+  
7ba0: 20 20 20 2a 20 61 73 20 61 20 22 2d 71 75 6f 74     * as a "-quot
7bb0: 65 64 20 77 6f 72 64 20 69 6e 20 61 20 6e 6f 72  ed word in a nor
7bc0: 6d 61 6c 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 2e  mal Tcl command.
7bd0: 20 20 48 6f 6e 6f 72 20 66 6c 61 67 73 20 74 68    Honor flags th
7be0: 61 74 0a 2b 20 20 20 20 20 2a 20 73 65 6c 65 63  at.+     * selec
7bf0: 74 69 76 65 6c 79 20 69 6e 68 69 62 69 74 20 74  tively inhibit t
7c00: 79 70 65 73 20 6f 66 20 73 75 62 73 74 69 74 75  ypes of substitu
7c10: 74 69 6f 6e 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b  tion..+     */.+
7c20: 0a 2b 20 20 20 20 69 66 20 28 54 43 4c 5f 4f 4b  .+    if (TCL_OK
7c30: 20 21 3d 20 50 61 72 73 65 54 6f 6b 65 6e 73 28   != ParseTokens(
7c40: 70 2c 20 6c 65 6e 67 74 68 2c 20 2f 2a 20 6d 61  p, length, /* ma
7c50: 73 6b 20 2a 2f 20 30 2c 20 66 6c 61 67 73 2c 20  sk */ 0, flags, 
7c60: 26 70 61 72 73 65 29 29 20 7b 0a 2b 0a 2b 09 2f  &parse)) {.+.+./
7c70: 2a 0a 2b 09 20 2a 20 54 68 65 72 65 20 77 61 73  *.+. * There was
7c80: 20 61 20 70 61 72 73 65 20 65 72 72 6f 72 2e 20   a parse error. 
7c90: 20 53 61 76 65 20 74 68 65 20 65 72 72 6f 72 20   Save the error 
7ca0: 6d 65 73 73 61 67 65 20 66 6f 72 0a 2b 09 20 2a  message for.+. *
7cb0: 20 70 6f 73 73 69 62 6c 65 20 72 65 70 6f 72 74   possible report
7cc0: 69 6e 67 20 6c 61 74 65 72 2e 0a 2b 09 20 2a 2f  ing later..+. */
7cd0: 0a 2b 0a 2b 09 65 72 72 4d 73 67 20 3d 20 54 63  .+.+.errMsg = Tc
7ce0: 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_GetObjResult(i
7cf0: 6e 74 65 72 70 29 3b 0a 2b 09 54 63 6c 5f 49 6e  nterp);.+.Tcl_In
7d00: 63 72 52 65 66 43 6f 75 6e 74 28 65 72 72 4d 73  crRefCount(errMs
7d10: 67 29 3b 0a 2b 0a 2b 09 2f 2a 0a 2b 09 20 2a 20  g);.+.+./*.+. * 
7d20: 57 65 20 6e 65 65 64 20 74 6f 20 72 65 2d 70 61  We need to re-pa
7d30: 72 73 65 20 74 6f 20 67 65 74 20 74 68 65 20 70  rse to get the p
7d40: 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74  ortion of the st
7d50: 72 69 6e 67 20 77 65 20 63 61 6e 0a 2b 09 20 2a  ring we can.+. *
7d60: 20 5b 73 75 62 73 74 5d 20 62 65 66 6f 72 65 20   [subst] before 
7d70: 74 68 65 20 70 61 72 73 65 20 65 72 72 6f 72 2e  the parse error.
7d80: 20 20 53 61 64 6c 79 2c 20 61 6c 6c 20 74 68 65    Sadly, all the
7d90: 20 54 63 6c 5f 54 6f 6b 65 6e 27 73 0a 2b 09 20   Tcl_Token's.+. 
7da0: 2a 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65  * created by the
7db0: 20 66 69 72 73 74 20 70 61 72 73 65 20 61 74 74   first parse att
7dc0: 65 6d 70 74 20 61 72 65 20 67 6f 6e 65 2c 20 66  empt are gone, f
7dd0: 72 65 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  reed according t
7de0: 6f 20 74 68 65 0a 2b 09 20 2a 20 70 75 62 6c 69  o the.+. * publi
7df0: 63 20 73 70 65 63 20 66 6f 72 20 74 68 65 20 54  c spec for the T
7e00: 63 6c 5f 50 61 72 73 65 2a 20 72 6f 75 74 69 6e  cl_Parse* routin
7e10: 65 73 2e 20 20 54 68 65 20 6f 6e 6c 79 20 63 6c  es.  The only cl
7e20: 75 65 20 77 65 20 68 61 76 65 0a 2b 09 20 2a 20  ue we have.+. * 
7e30: 69 73 20 70 61 72 73 65 2e 74 65 72 6d 2c 20 77  is parse.term, w
7e40: 68 69 63 68 20 70 6f 69 6e 74 73 20 74 6f 20 65  hich points to e
7e50: 69 74 68 65 72 20 74 68 65 20 75 6e 6d 61 74 63  ither the unmatc
7e60: 68 65 64 20 6f 70 65 6e 65 72 2c 20 6f 72 0a 2b  hed opener, or.+
7e70: 09 20 2a 20 74 6f 20 63 68 61 72 61 63 74 65 72  . * to character
7e80: 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 20 61 20  s that follow a 
7e90: 63 6c 6f 73 65 20 62 72 61 63 65 20 6f 72 20 63  close brace or c
7ea0: 6c 6f 73 65 20 71 75 6f 74 65 2e 0a 2b 09 20 2a  lose quote..+. *
7eb0: 0a 2b 09 20 2a 20 43 61 6c 6c 20 50 61 72 73 65  .+. * Call Parse
7ec0: 54 6f 6b 65 6e 73 20 61 67 61 69 6e 2c 20 77 6f  Tokens again, wo
7ed0: 72 6b 69 6e 67 20 6f 6e 20 74 68 65 20 73 74 72  rking on the str
7ee0: 69 6e 67 20 75 70 20 74 6f 20 70 61 72 73 65 2e  ing up to parse.
7ef0: 74 65 72 6d 2e 0a 2b 09 20 2a 20 4b 65 65 70 20  term..+. * Keep 
7f00: 72 65 70 65 61 74 69 6e 67 20 75 6e 74 69 6c 20  repeating until 
7f10: 77 65 20 67 65 74 20 61 20 67 6f 6f 64 20 70 61  we get a good pa
7f20: 72 73 65 20 6f 6e 20 61 20 70 72 65 66 69 78 2e  rse on a prefix.
7f30: 0a 2b 09 20 2a 2f 0a 2b 0a 2b 09 64 6f 20 7b 0a  .+. */.+.+.do {.
7f40: 2b 09 20 20 20 20 70 61 72 73 65 2e 6e 75 6d 54  +.    parse.numT
7f50: 6f 6b 65 6e 73 20 3d 20 30 3b 0a 2b 09 20 20 20  okens = 0;.+.   
7f60: 20 70 61 72 73 65 2e 74 6f 6b 65 6e 73 41 76 61   parse.tokensAva
7f70: 69 6c 61 62 6c 65 20 3d 20 4e 55 4d 5f 53 54 41  ilable = NUM_STA
7f80: 54 49 43 5f 54 4f 4b 45 4e 53 3b 0a 2b 09 20 20  TIC_TOKENS;.+.  
7f90: 20 20 70 61 72 73 65 2e 65 6e 64 20 3d 20 70 61    parse.end = pa
7fa0: 72 73 65 2e 74 65 72 6d 3b 0a 2b 09 20 20 20 20  rse.term;.+.    
7fb0: 70 61 72 73 65 2e 69 6e 63 6f 6d 70 6c 65 74 65  parse.incomplete
7fc0: 20 3d 20 30 3b 0a 2b 09 20 20 20 20 70 61 72 73   = 0;.+.    pars
7fd0: 65 2e 65 72 72 6f 72 54 79 70 65 20 3d 20 54 43  e.errorType = TC
7fe0: 4c 5f 50 41 52 53 45 5f 53 55 43 43 45 53 53 3b  L_PARSE_SUCCESS;
7ff0: 0a 2b 09 7d 20 77 68 69 6c 65 20 28 54 43 4c 5f  .+.} while (TCL_
8000: 4f 4b 20 21 3d 20 50 61 72 73 65 54 6f 6b 65 6e  OK != ParseToken
8010: 73 28 70 2c 20 70 61 72 73 65 2e 65 6e 64 20 2d  s(p, parse.end -
8020: 20 70 2c 20 30 2c 20 66 6c 61 67 73 2c 20 26 70   p, 0, flags, &p
8030: 61 72 73 65 29 29 3b 0a 2b 0a 2b 09 2f 2a 20 54  arse));.+.+./* T
8040: 68 65 20 67 6f 6f 64 20 70 61 72 73 65 20 77 69  he good parse wi
8050: 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 20 66 6f  ll have to be fo
8060: 6c 6c 6f 77 65 64 20 62 79 20 7b 2c 20 28 2c 20  llowed by {, (, 
8070: 6f 72 20 5b 2e 20 2a 2f 0a 2b 09 73 77 69 74 63  or [. */.+.switc
8080: 68 20 28 2a 70 61 72 73 65 2e 74 65 72 6d 29 20  h (*parse.term) 
8090: 7b 0a 2b 09 20 20 20 20 63 61 73 65 20 27 7b 27  {.+.    case '{'
80a0: 3a 0a 2b 09 09 2f 2a 0a 2b 09 09 20 2a 20 50 61  :.+../*.+.. * Pa
80b0: 72 73 65 20 65 72 72 6f 72 20 77 61 73 20 61 20  rse error was a 
80c0: 6d 69 73 73 69 6e 67 20 7d 20 69 6e 20 61 20 24  missing } in a $
80d0: 7b 76 61 72 6e 61 6d 65 7d 20 76 61 72 69 61 62  {varname} variab
80e0: 6c 65 0a 2b 09 09 20 2a 20 73 75 62 73 74 69 74  le.+.. * substit
80f0: 75 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ution at the top
8100: 6c 65 76 65 6c 2e 20 20 57 65 20 77 69 6c 6c 20  level.  We will 
8110: 73 75 62 73 74 20 65 76 65 72 79 74 68 69 6e 67  subst everything
8120: 0a 2b 09 09 20 2a 20 75 70 20 74 6f 20 74 68 61  .+.. * up to tha
8130: 74 20 62 72 6f 6b 65 6e 20 76 61 72 69 61 62 6c  t broken variabl
8140: 65 20 73 75 62 73 74 69 74 75 74 69 6f 6e 20 62  e substitution b
8150: 65 66 6f 72 65 20 72 65 70 6f 72 74 69 6e 67 0a  efore reporting.
8160: 2b 09 09 20 2a 20 74 68 65 20 70 61 72 73 65 20  +.. * the parse 
8170: 65 72 72 6f 72 2e 20 20 53 75 62 73 74 69 74 75  error.  Substitu
8180: 74 69 6e 67 20 74 68 65 20 6c 65 66 74 6f 76 65  ting the leftove
8190: 72 20 27 24 27 20 77 69 6c 6c 0a 2b 09 09 20 2a  r '$' will.+.. *
81a0: 20 68 61 76 65 20 6e 6f 20 73 69 64 65 2d 65 66   have no side-ef
81b0: 66 65 63 74 73 2c 20 73 6f 20 74 68 65 20 63 75  fects, so the cu
81c0: 72 72 65 6e 74 20 74 6f 6b 65 6e 20 73 74 72 65  rrent token stre
81d0: 61 6d 20 69 73 20 66 69 6e 65 2e 0a 2b 09 09 20  am is fine..+.. 
81e0: 2a 2f 0a 2b 09 09 62 72 65 61 6b 3b 0a 2b 09 20  */.+..break;.+. 
81f0: 20 20 20 63 61 73 65 20 27 28 27 3a 0a 2b 09 09     case '(':.+..
8200: 2f 2a 0a 2b 09 09 20 2a 20 50 61 72 73 65 20 65  /*.+.. * Parse e
8210: 72 72 6f 72 20 77 61 73 20 64 75 72 69 6e 67 20  rror was during 
8220: 74 68 65 20 70 61 72 73 69 6e 67 20 6f 66 20 74  the parsing of t
8230: 68 65 20 69 6e 64 65 78 20 70 61 72 74 20 6f 66  he index part of
8240: 0a 2b 09 09 20 2a 20 61 6e 20 61 72 72 61 79 20  .+.. * an array 
8250: 76 61 72 69 61 62 6c 65 20 73 75 62 73 74 69 74  variable substit
8260: 75 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ution at the top
8270: 6c 65 76 65 6c 2e 20 20 0a 2b 09 09 20 2a 2f 0a  level.  .+.. */.
8280: 2b 09 09 69 66 20 28 2a 28 70 61 72 73 65 2e 74  +..if (*(parse.t
8290: 65 72 6d 20 2d 20 31 29 20 3d 3d 20 27 24 27 29  erm - 1) == '$')
82a0: 20 7b 0a 2b 09 09 20 20 20 20 2f 2a 0a 2b 09 09   {.+..    /*.+..
82b0: 20 20 20 20 20 2a 20 53 70 65 63 69 61 6c 20 63       * Special c
82c0: 61 73 65 20 77 68 65 72 65 20 72 65 6d 6f 76 69  ase where removi
82d0: 6e 67 20 74 68 65 20 61 72 72 61 79 20 69 6e 64  ng the array ind
82e0: 65 78 20 6c 65 66 74 0a 2b 09 09 20 20 20 20 20  ex left.+..     
82f0: 2a 20 75 73 20 77 69 74 68 20 6a 75 73 74 20 61  * us with just a
8300: 20 64 6f 6c 6c 61 72 20 73 69 67 6e 20 28 61 72   dollar sign (ar
8310: 72 61 79 20 76 61 72 69 61 62 6c 65 20 77 69 74  ray variable wit
8320: 68 0a 2b 09 09 20 20 20 20 20 2a 20 6e 61 6d 65  h.+..     * name
8330: 20 74 68 65 20 65 6d 70 74 79 20 73 74 72 69 6e   the empty strin
8340: 67 20 61 73 20 69 74 73 20 6e 61 6d 65 29 2c 20  g as its name), 
8350: 69 6e 73 74 65 61 64 20 6f 66 0a 2b 09 09 20 20  instead of.+..  
8360: 20 20 20 2a 20 77 69 74 68 20 61 20 73 63 61 6c     * with a scal
8370: 61 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  ar variable refe
8380: 72 65 6e 63 65 2e 20 20 0a 2b 09 09 20 20 20 20  rence.  .+..    
8390: 20 2a 0a 2b 09 09 20 20 20 20 20 2a 20 41 73 20   *.+..     * As 
83a0: 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  in the previous 
83b0: 63 61 73 65 2c 20 65 78 69 73 74 69 6e 67 20 74  case, existing t
83c0: 6f 6b 65 6e 20 73 74 72 65 61 6d 20 69 73 20 4f  oken stream is O
83d0: 4b 2e 0a 2b 09 09 20 20 20 20 20 2a 2f 0a 2b 09  K..+..     */.+.
83e0: 09 7d 20 65 6c 73 65 20 7b 0a 2b 09 09 20 20 20  .} else {.+..   
83f0: 2f 2a 20 54 68 65 20 63 75 72 72 65 6e 74 20 70  /* The current p
8400: 61 72 73 65 20 69 6e 63 6c 75 64 65 73 20 61 20  arse includes a 
8410: 73 75 63 63 65 73 73 66 75 6c 20 70 61 72 73 65  successful parse
8420: 20 6f 66 20 61 0a 2b 09 09 20 20 20 20 2a 20 73   of a.+..    * s
8430: 63 61 6c 61 72 20 76 61 72 69 61 62 6c 65 20 73  calar variable s
8440: 75 62 73 74 69 74 75 74 69 6f 6e 20 77 68 65 72  ubstitution wher
8450: 65 20 74 68 65 72 65 20 73 68 6f 75 6c 64 20 68  e there should h
8460: 61 76 65 0a 2b 09 09 20 20 20 20 2a 20 62 65 65  ave.+..    * bee
8470: 6e 20 61 6e 20 61 72 72 61 79 20 76 61 72 69 61  n an array varia
8480: 62 6c 65 20 73 75 62 73 74 69 74 75 74 69 6f 6e  ble substitution
8490: 2e 20 20 57 65 20 72 65 6d 6f 76 65 20 74 68 61  .  We remove tha
84a0: 74 0a 2b 09 09 20 20 20 20 2a 20 6d 69 73 74 61  t.+..    * mista
84b0: 6b 65 6e 20 70 61 72 74 20 6f 66 20 74 68 65 20  ken part of the 
84c0: 70 61 72 73 65 20 62 65 66 6f 72 65 20 6d 6f 76  parse before mov
84d0: 69 6e 67 20 6f 6e 2e 20 20 41 20 73 63 61 6c 61  ing on.  A scala
84e0: 72 0a 2b 09 09 20 20 20 20 2a 20 76 61 72 69 61  r.+..    * varia
84f0: 62 6c 65 20 73 75 62 73 74 69 74 75 74 69 6f 6e  ble substitution
8500: 20 69 73 20 74 77 6f 20 74 6f 6b 65 6e 73 2e 0a   is two tokens..
8510: 2b 09 09 20 20 20 20 2a 2f 0a 2b 09 09 20 20 20  +..    */.+..   
8520: 20 54 63 6c 5f 54 6f 6b 65 6e 20 2a 76 61 72 54   Tcl_Token *varT
8530: 6f 6b 65 6e 50 74 72 20 3d 0a 2b 09 09 09 20 20  okenPtr =.+...  
8540: 20 20 70 61 72 73 65 2e 74 6f 6b 65 6e 50 74 72    parse.tokenPtr
8550: 20 2b 20 70 61 72 73 65 2e 6e 75 6d 54 6f 6b 65   + parse.numToke
8560: 6e 73 20 2d 20 32 3b 0a 2b 0a 2b 09 09 20 20 20  ns - 2;.+.+..   
8570: 20 69 66 20 28 76 61 72 54 6f 6b 65 6e 50 74 72   if (varTokenPtr
8580: 2d 3e 74 79 70 65 20 21 3d 20 54 43 4c 5f 54 4f  ->type != TCL_TO
8590: 4b 45 4e 5f 56 41 52 49 41 42 4c 45 29 20 7b 0a  KEN_VARIABLE) {.
85a0: 2b 09 09 09 54 63 6c 5f 50 61 6e 69 63 28 22 54  +...Tcl_Panic("T
85b0: 63 6c 5f 53 75 62 73 74 4f 62 6a 3a 20 70 72 6f  cl_SubstObj: pro
85c0: 67 72 61 6d 6d 69 6e 67 20 65 72 72 6f 72 22 29  gramming error")
85d0: 3b 0a 2b 09 09 20 20 20 20 7d 0a 2b 09 09 20 20  ;.+..    }.+..  
85e0: 20 20 69 66 20 28 76 61 72 54 6f 6b 65 6e 50 74    if (varTokenPt
85f0: 72 5b 31 5d 2e 74 79 70 65 20 21 3d 20 54 43 4c  r[1].type != TCL
8600: 5f 54 4f 4b 45 4e 5f 54 45 58 54 29 20 7b 0a 2b  _TOKEN_TEXT) {.+
8610: 09 09 09 54 63 6c 5f 50 61 6e 69 63 28 22 54 63  ...Tcl_Panic("Tc
8620: 6c 5f 53 75 62 73 74 4f 62 6a 3a 20 70 72 6f 67  l_SubstObj: prog
8630: 72 61 6d 6d 69 6e 67 20 65 72 72 6f 72 22 29 3b  ramming error");
8640: 0a 2b 09 09 20 20 20 20 7d 0a 2b 09 09 20 20 20  .+..    }.+..   
8650: 20 70 61 72 73 65 2e 6e 75 6d 54 6f 6b 65 6e 73   parse.numTokens
8660: 20 2d 3d 20 32 3b 0a 2b 09 09 7d 0a 2b 09 09 62   -= 2;.+..}.+..b
8670: 72 65 61 6b 3b 0a 2b 09 20 20 20 20 63 61 73 65  reak;.+.    case
8680: 20 27 5b 27 3a 0a 2b 09 09 2f 2a 0a 2b 09 09 20   '[':.+../*.+.. 
8690: 2a 20 50 61 72 73 65 20 65 72 72 6f 72 20 6f 63  * Parse error oc
86a0: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 70 61  curred during pa
86b0: 72 73 69 6e 67 20 6f 66 20 61 20 74 6f 70 6c 65  rsing of a tople
86c0: 76 65 6c 0a 2b 09 09 20 2a 20 63 6f 6d 6d 61 6e  vel.+.. * comman
86d0: 64 20 73 75 62 73 74 69 74 75 74 69 6f 6e 2e 20  d substitution. 
86e0: 20 0a 2b 09 09 20 2a 2f 0a 2b 0a 2b 09 09 70 61   .+.. */.+.+..pa
86f0: 72 73 65 2e 65 6e 64 20 3d 20 70 20 2b 20 6c 65  rse.end = p + le
8700: 6e 67 74 68 3b 0a 2b 09 09 70 20 3d 20 70 61 72  ngth;.+..p = par
8710: 73 65 2e 74 65 72 6d 20 2b 20 31 3b 0a 2b 09 09  se.term + 1;.+..
8720: 6c 65 6e 67 74 68 20 3d 20 70 61 72 73 65 2e 65  length = parse.e
8730: 6e 64 20 2d 20 70 3b 0a 2b 09 09 69 66 20 28 6c  nd - p;.+..if (l
8740: 65 6e 67 74 68 20 3d 3d 20 30 29 20 7b 0a 2b 09  ength == 0) {.+.
8750: 09 20 20 20 20 2f 2a 0a 2b 09 09 20 20 20 20 20  .    /*.+..     
8760: 2a 20 4e 6f 20 63 6f 6d 6d 61 6e 64 73 2c 20 6a  * No commands, j
8770: 75 73 74 20 61 6e 20 75 6e 6d 61 74 63 68 65 64  ust an unmatched
8780: 20 5b 2e 20 20 0a 2b 09 09 20 20 20 20 20 2a 20   [.  .+..     * 
8790: 41 73 20 69 6e 20 70 72 65 76 69 6f 75 73 20 63  As in previous c
87a0: 61 73 65 73 2c 20 65 78 69 73 74 69 6e 67 20 74  ases, existing t
87b0: 6f 6b 65 6e 20 73 74 72 65 61 6d 20 69 73 20 4f  oken stream is O
87c0: 4b 2e 0a 2b 09 09 20 20 20 20 20 2a 2f 0a 2b 09  K..+..     */.+.
87d0: 09 7d 20 65 6c 73 65 20 7b 0a 2b 09 09 20 20 20  .} else {.+..   
87e0: 20 2f 2a 20 0a 2b 09 09 20 20 20 20 20 2a 20 57   /* .+..     * W
87f0: 65 20 77 61 6e 74 20 74 6f 20 61 64 64 20 74 68  e want to add th
8800: 65 20 70 61 72 73 69 6e 67 20 6f 66 20 61 73 20  e parsing of as 
8810: 6d 61 6e 79 20 63 6f 6d 6d 61 6e 64 73 20 61 73  many commands as
8820: 20 77 65 0a 2b 09 09 20 20 20 20 20 2a 20 63 61   we.+..     * ca
8830: 6e 20 77 69 74 68 69 6e 20 74 68 61 74 20 73 75  n within that su
8840: 62 73 74 69 74 75 74 69 6f 6e 20 75 6e 74 69 6c  bstitution until
8850: 20 77 65 20 72 65 61 63 68 20 74 68 65 0a 2b 09   we reach the.+.
8860: 09 20 20 20 20 20 2a 20 61 63 74 75 61 6c 20 70  .     * actual p
8870: 61 72 73 65 20 65 72 72 6f 72 2e 20 20 57 65 27  arse error.  We'
8880: 6c 6c 20 64 6f 20 61 64 64 69 74 69 6f 6e 61 6c  ll do additional
8890: 20 70 61 72 73 69 6e 67 20 74 6f 0a 2b 09 09 20   parsing to.+.. 
88a0: 20 20 20 20 2a 20 64 65 74 65 72 6d 69 6e 65 20      * determine 
88b0: 77 68 61 74 20 6c 65 6e 67 74 68 20 74 6f 20 63  what length to c
88c0: 6c 61 69 6d 20 66 6f 72 20 74 68 65 20 66 69 6e  laim for the fin
88d0: 61 6c 0a 2b 09 09 20 20 20 20 20 2a 20 54 43 4c  al.+..     * TCL
88e0: 5f 54 4f 4b 45 4e 5f 43 4f 4d 4d 41 4e 44 20 74  _TOKEN_COMMAND t
88f0: 6f 6b 65 6e 2e 0a 2b 09 09 20 20 20 20 20 2a 2f  oken..+..     */
8900: 0a 2b 09 09 20 20 20 20 54 63 6c 5f 54 6f 6b 65  .+..    Tcl_Toke
8910: 6e 20 2a 74 6f 6b 65 6e 50 74 72 3b 0a 2b 09 09  n *tokenPtr;.+..
8920: 20 20 20 20 54 63 6c 5f 50 61 72 73 65 20 6e 65      Tcl_Parse ne
8930: 73 74 65 64 3b 0a 2b 09 09 20 20 20 20 43 4f 4e  sted;.+..    CON
8940: 53 54 20 63 68 61 72 20 2a 6c 61 73 74 54 65 72  ST char *lastTer
8950: 6d 20 3d 20 70 61 72 73 65 2e 74 65 72 6d 3b 0a  m = parse.term;.
8960: 2b 0a 2b 09 09 20 20 20 20 77 68 69 6c 65 20 28  +.+..    while (
8970: 54 43 4c 5f 4f 4b 20 3d 3d 20 0a 2b 09 09 09 20  TCL_OK == .+... 
8980: 20 20 20 54 63 6c 5f 50 61 72 73 65 43 6f 6d 6d     Tcl_ParseComm
8990: 61 6e 64 28 4e 55 4c 4c 2c 20 70 2c 20 6c 65 6e  and(NULL, p, len
89a0: 67 74 68 2c 20 30 2c 20 26 6e 65 73 74 65 64 29  gth, 0, &nested)
89b0: 29 20 7b 0a 2b 09 09 09 54 63 6c 5f 46 72 65 65  ) {.+...Tcl_Free
89c0: 50 61 72 73 65 28 26 6e 65 73 74 65 64 29 3b 0a  Parse(&nested);.
89d0: 2b 09 09 09 70 20 3d 20 6e 65 73 74 65 64 2e 74  +...p = nested.t
89e0: 65 72 6d 20 2b 20 28 6e 65 73 74 65 64 2e 74 65  erm + (nested.te
89f0: 72 6d 20 3c 20 6e 65 73 74 65 64 2e 65 6e 64 29  rm < nested.end)
8a00: 3b 0a 2b 09 09 09 6c 65 6e 67 74 68 20 3d 20 6e  ;.+...length = n
8a10: 65 73 74 65 64 2e 65 6e 64 20 2d 20 70 3b 0a 2b  ested.end - p;.+
8a20: 09 09 09 69 66 20 28 6c 65 6e 67 74 68 20 3d 3d  ...if (length ==
8a30: 20 30 29 20 7b 0a 2b 09 09 09 20 20 20 20 2f 2a   0) {.+...    /*
8a40: 0a 2b 09 09 09 20 20 20 20 20 2a 20 49 66 20 77  .+...     * If w
8a50: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 73 74 72  e run out of str
8a60: 69 6e 67 2c 20 62 6c 61 6d 65 20 74 68 65 20 6d  ing, blame the m
8a70: 69 73 73 69 6e 67 0a 2b 09 09 09 20 20 20 20 20  issing.+...     
8a80: 2a 20 63 6c 6f 73 65 20 62 72 61 63 6b 65 74 20  * close bracket 
8a90: 6f 6e 20 74 68 65 20 6c 61 73 74 20 63 6f 6d 6d  on the last comm
8aa0: 61 6e 64 2c 20 61 6e 64 20 64 6f 0a 2b 09 09 09  and, and do.+...
8ab0: 20 20 20 20 20 2a 20 6e 6f 74 20 65 76 61 6c 75       * not evalu
8ac0: 61 74 65 20 69 74 20 64 75 72 69 6e 67 20 73 75  ate it during su
8ad0: 62 73 74 69 74 75 74 69 6f 6e 2e 0a 2b 09 09 09  bstitution..+...
8ae0: 20 20 20 20 20 2a 2f 0a 2b 09 09 09 20 20 20 20       */.+...    
8af0: 62 72 65 61 6b 3b 0a 2b 09 09 09 7d 0a 2b 09 09  break;.+...}.+..
8b00: 09 6c 61 73 74 54 65 72 6d 20 3d 20 6e 65 73 74  .lastTerm = nest
8b10: 65 64 2e 74 65 72 6d 3b 0a 2b 09 09 20 20 20 20  ed.term;.+..    
8b20: 7d 0a 2b 0a 2b 09 09 20 20 20 20 69 66 20 28 6c  }.+.+..    if (l
8b30: 61 73 74 54 65 72 6d 20 3d 3d 20 70 61 72 73 65  astTerm == parse
8b40: 2e 74 65 72 6d 29 20 7b 0a 2b 09 09 09 2f 2a 0a  .term) {.+.../*.
8b50: 2b 09 09 09 20 2a 20 50 61 72 73 65 20 65 72 72  +... * Parse err
8b60: 6f 72 20 69 6e 20 66 69 72 73 74 20 63 6f 6d 6d  or in first comm
8b70: 61 6e 64 2e 20 20 4e 6f 20 63 6f 6d 6d 61 6e 64  and.  No command
8b80: 73 0a 2b 09 09 09 20 2a 20 74 6f 20 73 75 62 73  s.+... * to subs
8b90: 74 2c 20 61 64 64 20 6e 6f 20 6d 6f 72 65 20 74  t, add no more t
8ba0: 6f 6b 65 6e 73 2e 0a 2b 09 09 09 20 2a 2f 0a 2b  okens..+... */.+
8bb0: 09 09 09 62 72 65 61 6b 3b 0a 2b 09 09 20 20 20  ...break;.+..   
8bc0: 20 7d 0a 2b 0a 2b 09 09 20 20 20 20 2f 2a 0a 2b   }.+.+..    /*.+
8bd0: 09 09 20 20 20 20 20 2a 20 43 72 65 61 74 65 20  ..     * Create 
8be0: 61 20 63 6f 6d 6d 61 6e 64 20 73 75 62 73 74 69  a command substi
8bf0: 74 75 74 69 6f 6e 20 74 6f 6b 65 6e 20 66 6f 72  tution token for
8c00: 20 77 68 61 74 65 76 65 72 0a 2b 09 09 20 20 20   whatever.+..   
8c10: 20 20 2a 20 63 6f 6d 6d 61 6e 64 73 20 67 6f 74    * commands got
8c20: 20 70 61 72 73 65 64 2e 0a 2b 09 09 20 20 20 20   parsed..+..    
8c30: 20 2a 2f 0a 2b 0a 2b 09 09 20 20 20 20 69 66 20   */.+.+..    if 
8c40: 28 70 61 72 73 65 2e 6e 75 6d 54 6f 6b 65 6e 73  (parse.numTokens
8c50: 20 3d 3d 20 70 61 72 73 65 2e 74 6f 6b 65 6e 73   == parse.tokens
8c60: 41 76 61 69 6c 61 62 6c 65 29 20 7b 0a 2b 09 09  Available) {.+..
8c70: 09 54 63 6c 45 78 70 61 6e 64 54 6f 6b 65 6e 41  .TclExpandTokenA
8c80: 72 72 61 79 28 26 70 61 72 73 65 29 3b 0a 2b 09  rray(&parse);.+.
8c90: 09 20 20 20 20 7d 0a 2b 09 09 20 20 20 20 74 6f  .    }.+..    to
8ca0: 6b 65 6e 50 74 72 20 3d 20 26 70 61 72 73 65 2e  kenPtr = &parse.
8cb0: 74 6f 6b 65 6e 50 74 72 5b 70 61 72 73 65 2e 6e  tokenPtr[parse.n
8cc0: 75 6d 54 6f 6b 65 6e 73 5d 3b 0a 2b 09 09 20 20  umTokens];.+..  
8cd0: 20 20 74 6f 6b 65 6e 50 74 72 2d 3e 73 74 61 72    tokenPtr->star
8ce0: 74 20 3d 20 70 61 72 73 65 2e 74 65 72 6d 3b 0a  t = parse.term;.
8cf0: 2b 09 09 20 20 20 20 74 6f 6b 65 6e 50 74 72 2d  +..    tokenPtr-
8d00: 3e 6e 75 6d 43 6f 6d 70 6f 6e 65 6e 74 73 20 3d  >numComponents =
8d10: 20 30 3b 0a 2b 09 09 20 20 20 20 74 6f 6b 65 6e   0;.+..    token
8d20: 50 74 72 2d 3e 74 79 70 65 20 3d 20 54 43 4c 5f  Ptr->type = TCL_
8d30: 54 4f 4b 45 4e 5f 43 4f 4d 4d 41 4e 44 3b 0a 2b  TOKEN_COMMAND;.+
8d40: 09 09 20 20 20 20 74 6f 6b 65 6e 50 74 72 2d 3e  ..    tokenPtr->
8d50: 73 69 7a 65 20 3d 20 6c 61 73 74 54 65 72 6d 20  size = lastTerm 
8d60: 2d 20 74 6f 6b 65 6e 50 74 72 2d 3e 73 74 61 72  - tokenPtr->star
8d70: 74 20 2b 20 31 3b 0a 2b 09 09 20 20 20 20 70 61  t + 1;.+..    pa
8d80: 72 73 65 2e 6e 75 6d 54 6f 6b 65 6e 73 2b 2b 3b  rse.numTokens++;
8d90: 0a 2b 09 09 7d 0a 2b 09 09 62 72 65 61 6b 3b 0a  .+..}.+..break;.
8da0: 2b 0a 2b 09 20 20 20 20 64 65 66 61 75 6c 74 3a  +.+.    default:
8db0: 0a 2b 09 09 54 63 6c 5f 50 61 6e 69 63 28 22 62  .+..Tcl_Panic("b
8dc0: 61 64 20 70 61 72 73 65 20 69 6e 20 54 63 6c 5f  ad parse in Tcl_
8dd0: 53 75 62 73 74 4f 62 6a 3a 20 25 63 22 2c 20 70  SubstObj: %c", p
8de0: 5b 6c 65 6e 67 74 68 5d 29 3b 0a 2b 09 7d 0a 2b  [length]);.+.}.+
8df0: 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 2f 2a 20      }.+.+    /* 
8e00: 4e 65 78 74 2c 20 73 75 62 73 74 69 74 75 74 65  Next, substitute
8e10: 20 74 68 65 20 70 61 72 73 65 64 20 74 6f 6b 65   the parsed toke
8e20: 6e 73 20 6a 75 73 74 20 61 73 20 69 6e 20 6e 6f  ns just as in no
8e30: 72 6d 61 6c 20 54 63 6c 20 65 76 61 6c 75 61 74  rmal Tcl evaluat
8e40: 69 6f 6e 20 2a 2f 0a 2b 20 20 20 20 65 6e 64 54  ion */.+    endT
8e50: 6f 6b 65 6e 50 74 72 20 3d 20 70 61 72 73 65 2e  okenPtr = parse.
8e60: 74 6f 6b 65 6e 50 74 72 20 2b 20 70 61 72 73 65  tokenPtr + parse
8e70: 2e 6e 75 6d 54 6f 6b 65 6e 73 3b 0a 2b 20 20 20  .numTokens;.+   
8e80: 20 74 6f 6b 65 6e 73 4c 65 66 74 20 3d 20 70 61   tokensLeft = pa
8e90: 72 73 65 2e 6e 75 6d 54 6f 6b 65 6e 73 3b 0a 2b  rse.numTokens;.+
8ea0: 20 20 20 20 63 6f 64 65 20 3d 20 54 63 6c 53 75      code = TclSu
8eb0: 62 73 74 54 6f 6b 65 6e 73 28 69 6e 74 65 72 70  bstTokens(interp
8ec0: 2c 20 65 6e 64 54 6f 6b 65 6e 50 74 72 20 2d 20  , endTokenPtr - 
8ed0: 74 6f 6b 65 6e 73 4c 65 66 74 2c 20 74 6f 6b 65  tokensLeft, toke
8ee0: 6e 73 4c 65 66 74 2c 0a 2b 09 20 20 20 20 26 74  nsLeft,.+.    &t
8ef0: 6f 6b 65 6e 73 4c 65 66 74 29 3b 0a 2b 20 20 20  okensLeft);.+   
8f00: 20 69 66 20 28 63 6f 64 65 20 3d 3d 20 54 43 4c   if (code == TCL
8f10: 5f 4f 4b 29 20 7b 0a 2b 09 54 63 6c 5f 46 72 65  _OK) {.+.Tcl_Fre
8f20: 65 50 61 72 73 65 28 26 70 61 72 73 65 29 3b 0a  eParse(&parse);.
8f30: 2b 09 69 66 20 28 65 72 72 4d 73 67 20 21 3d 20  +.if (errMsg != 
8f40: 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 54 63  NULL) {.+.    Tc
8f50: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
8f60: 6e 74 65 72 70 2c 20 65 72 72 4d 73 67 29 3b 0a  nterp, errMsg);.
8f70: 2b 09 20 20 20 20 54 63 6c 5f 44 65 63 72 52 65  +.    Tcl_DecrRe
8f80: 66 43 6f 75 6e 74 28 65 72 72 4d 73 67 29 3b 0a  fCount(errMsg);.
8f90: 2b 09 20 20 20 20 72 65 74 75 72 6e 20 4e 55 4c  +.    return NUL
8fa0: 4c 3b 0a 2b 09 7d 0a 2b 09 72 65 74 75 72 6e 20  L;.+.}.+.return 
8fb0: 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_GetObjResult
8fc0: 28 69 6e 74 65 72 70 29 3b 0a 2b 20 20 20 20 7d  (interp);.+    }
8fd0: 0a 2b 20 20 20 20 72 65 73 75 6c 74 20 3d 20 54  .+    result = T
8fe0: 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a 2b 20 20  cl_NewObj();.+  
8ff0: 20 20 77 68 69 6c 65 20 28 31 29 20 7b 0a 2b 09    while (1) {.+.
9000: 73 77 69 74 63 68 20 28 63 6f 64 65 29 20 7b 0a  switch (code) {.
9010: 2b 09 20 20 20 20 63 61 73 65 20 54 43 4c 5f 45  +.    case TCL_E
9020: 52 52 4f 52 3a 0a 2b 09 09 54 63 6c 5f 46 72 65  RROR:.+..Tcl_Fre
9030: 65 50 61 72 73 65 28 26 70 61 72 73 65 29 3b 0a  eParse(&parse);.
9040: 2b 09 09 54 63 6c 5f 44 65 63 72 52 65 66 43 6f  +..Tcl_DecrRefCo
9050: 75 6e 74 28 72 65 73 75 6c 74 29 3b 0a 2b 09 09  unt(result);.+..
9060: 69 66 20 28 65 72 72 4d 73 67 20 21 3d 20 4e 55  if (errMsg != NU
9070: 4c 4c 29 20 7b 0a 2b 09 09 20 20 20 20 54 63 6c  LL) {.+..    Tcl
9080: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 65 72  _DecrRefCount(er
9090: 72 4d 73 67 29 3b 0a 2b 09 09 7d 0a 2b 09 09 72  rMsg);.+..}.+..r
90a0: 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 2b 09 20 20  eturn NULL;.+.  
90b0: 20 20 63 61 73 65 20 54 43 4c 5f 42 52 45 41 4b    case TCL_BREAK
90c0: 3a 0a 2b 09 09 74 6f 6b 65 6e 73 4c 65 66 74 20  :.+..tokensLeft 
90d0: 3d 20 30 3b 09 09 2f 2a 20 48 61 6c 74 20 73 75  = 0;../* Halt su
90e0: 62 73 74 69 74 75 74 69 6f 6e 20 2a 2f 0a 2b 09  bstitution */.+.
90f0: 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 2b 09 09      default:.+..
9100: 54 63 6c 5f 41 70 70 65 6e 64 4f 62 6a 54 6f 4f  Tcl_AppendObjToO
9110: 62 6a 28 72 65 73 75 6c 74 2c 20 54 63 6c 5f 47  bj(result, Tcl_G
9120: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
9130: 72 70 29 29 3b 0a 2b 09 7d 0a 2b 0a 2b 09 69 66  rp));.+.}.+.+.if
9140: 20 28 74 6f 6b 65 6e 73 4c 65 66 74 20 3d 3d 20   (tokensLeft == 
9150: 30 29 20 7b 0a 2b 09 20 20 20 20 54 63 6c 5f 46  0) {.+.    Tcl_F
9160: 72 65 65 50 61 72 73 65 28 26 70 61 72 73 65 29  reeParse(&parse)
9170: 3b 0a 2b 09 20 20 20 20 69 66 20 28 65 72 72 4d  ;.+.    if (errM
9180: 73 67 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09  sg != NULL) {.+.
9190: 09 69 66 20 28 63 6f 64 65 20 21 3d 20 54 43 4c  .if (code != TCL
91a0: 5f 42 52 45 41 4b 29 20 7b 0a 2b 09 09 20 20 20  _BREAK) {.+..   
91b0: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
91c0: 74 28 69 6e 74 65 72 70 2c 20 65 72 72 4d 73 67  t(interp, errMsg
91d0: 29 3b 0a 2b 09 09 20 20 20 20 54 63 6c 5f 44 65  );.+..    Tcl_De
91e0: 63 72 52 65 66 43 6f 75 6e 74 28 65 72 72 4d 73  crRefCount(errMs
91f0: 67 29 3b 0a 2b 09 09 20 20 20 20 72 65 74 75 72  g);.+..    retur
9200: 6e 20 4e 55 4c 4c 3b 0a 2b 09 09 7d 0a 2b 09 09  n NULL;.+..}.+..
9210: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
9220: 28 65 72 72 4d 73 67 29 3b 0a 2b 09 20 20 20 20  (errMsg);.+.    
9230: 7d 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 72  }.+.    return r
9240: 65 73 75 6c 74 3b 0a 2b 09 7d 0a 2b 0a 2b 09 63  esult;.+.}.+.+.c
9250: 6f 64 65 20 3d 20 54 63 6c 53 75 62 73 74 54 6f  ode = TclSubstTo
9260: 6b 65 6e 73 28 69 6e 74 65 72 70 2c 20 65 6e 64  kens(interp, end
9270: 54 6f 6b 65 6e 50 74 72 20 2d 20 74 6f 6b 65 6e  TokenPtr - token
9280: 73 4c 65 66 74 2c 20 74 6f 6b 65 6e 73 4c 65 66  sLeft, tokensLef
9290: 74 2c 0a 2b 09 09 26 74 6f 6b 65 6e 73 4c 65 66  t,.+..&tokensLef
92a0: 74 29 3b 0a 2b 20 20 20 20 7d 0a 2b 7d 0a 2b 0a  t);.+    }.+}.+.
92b0: 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  +/*.+ *---------
92c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
92d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
92e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
92f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20  -------------.+ 
9300: 2a 0a 2b 20 2a 20 54 63 6c 53 75 62 73 74 54 6f  *.+ * TclSubstTo
9310: 6b 65 6e 73 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a 09  kens --.+ *.+ *.
9320: 41 63 63 65 70 74 73 20 61 6e 20 61 72 72 61 79  Accepts an array
9330: 20 6f 66 20 63 6f 75 6e 74 20 54 63 6c 5f 54 6f   of count Tcl_To
9340: 6b 65 6e 27 73 2c 20 61 6e 64 20 63 72 65 61 74  ken's, and creat
9350: 65 73 20 61 20 72 65 73 75 6c 74 0a 2b 20 2a 09  es a result.+ *.
9360: 76 61 6c 75 65 20 69 6e 20 74 68 65 20 69 6e 74  value in the int
9370: 65 72 70 20 66 72 6f 6d 20 63 6f 6e 63 61 74 65  erp from concate
9380: 6e 61 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c  nating the resul
9390: 74 73 20 6f 66 20 0a 2b 20 2a 09 70 65 72 66 6f  ts of .+ *.perfo
93a0: 72 6d 69 6e 67 20 54 63 6c 20 73 75 62 73 74 69  rming Tcl substi
93b0: 74 75 74 69 6f 6e 20 6f 6e 20 65 61 63 68 20 54  tution on each T
93c0: 63 6c 5f 54 6f 6b 65 6e 2e 20 20 53 75 62 73 74  cl_Token.  Subst
93d0: 69 74 75 74 69 6f 6e 0a 2b 20 2a 09 69 73 20 69  itution.+ *.is i
93e0: 6e 74 65 72 72 75 70 74 65 64 20 69 66 20 61 6e  nterrupted if an
93f0: 79 20 6e 6f 6e 2d 54 43 4c 5f 4f 4b 20 63 6f 6d  y non-TCL_OK com
9400: 70 6c 65 74 69 6f 6e 20 63 6f 64 65 20 61 72 69  pletion code ari
9410: 73 65 73 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73  ses..+ *.+ * Res
9420: 75 6c 74 73 3a 0a 2b 20 2a 20 09 54 68 65 20 72  ults:.+ * .The r
9430: 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 61  eturn value is a
9440: 20 73 74 61 6e 64 61 72 64 20 54 63 6c 20 63 6f   standard Tcl co
9450: 6d 70 6c 65 74 69 6f 6e 20 63 6f 64 65 2e 20 20  mpletion code.  
9460: 54 68 65 0a 2b 20 2a 20 09 72 65 73 75 6c 74 20  The.+ * .result 
9470: 69 6e 20 69 6e 74 65 72 70 20 69 73 20 74 68 65  in interp is the
9480: 20 73 75 62 73 74 69 74 75 74 65 64 20 76 61 6c   substituted val
9490: 75 65 2c 20 6f 72 20 61 6e 20 65 72 72 6f 72 20  ue, or an error 
94a0: 6d 65 73 73 61 67 65 0a 2b 20 2a 20 09 69 66 20  message.+ * .if 
94b0: 54 43 4c 5f 45 52 52 4f 52 20 69 73 20 72 65 74  TCL_ERROR is ret
94c0: 75 72 6e 65 64 2e 20 20 49 66 20 74 6f 6b 65 6e  urned.  If token
94d0: 73 4c 65 66 74 50 74 72 20 69 73 20 6e 6f 74 20  sLeftPtr is not 
94e0: 4e 55 4c 4c 2c 20 74 68 65 6e 0a 2b 20 2a 20 09  NULL, then.+ * .
94f0: 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 6e 20  it points to an 
9500: 69 6e 74 20 77 68 65 72 65 20 74 68 65 20 6e 75  int where the nu
9510: 6d 62 65 72 20 6f 66 20 74 6f 6b 65 6e 73 20 72  mber of tokens r
9520: 65 6d 61 69 6e 69 6e 67 20 74 6f 0a 2b 20 2a 20  emaining to.+ * 
9530: 09 62 65 20 70 72 6f 63 65 73 73 65 64 20 69 73  .be processed is
9540: 20 77 72 69 74 74 65 6e 2e 0a 2b 20 2a 0a 2b 20   written..+ *.+ 
9550: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
9560: 2b 20 2a 20 09 43 61 6e 20 62 65 20 61 6e 79 74  + * .Can be anyt
9570: 68 69 6e 67 2c 20 64 65 70 65 6e 64 69 6e 67 20  hing, depending 
9580: 6f 6e 20 74 68 65 20 74 79 70 65 73 20 6f 66 20  on the types of 
9590: 73 75 62 73 74 69 74 75 74 69 6f 6e 20 64 6f 6e  substitution don
95a0: 65 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d  e..+ *.+ *------
95b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
95c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
95d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
95e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
95f0: 0a 2b 20 2a 2f 0a 2b 0a 2b 69 6e 74 0a 2b 54 63  .+ */.+.+int.+Tc
9600: 6c 53 75 62 73 74 54 6f 6b 65 6e 73 28 69 6e 74  lSubstTokens(int
9610: 65 72 70 2c 20 74 6f 6b 65 6e 50 74 72 2c 20 63  erp, tokenPtr, c
9620: 6f 75 6e 74 2c 20 74 6f 6b 65 6e 73 4c 65 66 74  ount, tokensLeft
9630: 50 74 72 29 0a 2b 20 20 20 20 54 63 6c 5f 49 6e  Ptr).+    Tcl_In
9640: 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 20 20 20  terp *interp;   
9650: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 72 70 72        /* Interpr
9660: 65 74 65 72 20 69 6e 20 77 68 69 63 68 20 74 6f  eter in which to
9670: 20 6c 6f 6f 6b 75 70 0a 2b 20 20 20 20 20 20 20   lookup.+       
9680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9690: 20 20 20 20 20 20 20 20 20 20 2a 20 76 61 72 69            * vari
96a0: 61 62 6c 65 73 2c 20 65 78 65 63 75 74 65 20 6e  ables, execute n
96b0: 65 73 74 65 64 20 63 6f 6d 6d 61 6e 64 73 2c 0a  ested commands,.
96c0: 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +               
96d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96e0: 20 20 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 65    * and report e
96f0: 72 72 6f 72 73 2e 20 2a 2f 0a 2b 20 20 20 20 54  rrors. */.+    T
9700: 63 6c 5f 54 6f 6b 65 6e 20 2a 74 6f 6b 65 6e 50  cl_Token *tokenP
9710: 74 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  tr;        /* Po
9720: 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 69  inter to first i
9730: 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 74 6f  n an array of to
9740: 6b 65 6e 73 0a 2b 20 20 20 20 20 20 20 20 20 20  kens.+          
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9760: 20 20 20 20 20 20 20 2a 20 74 6f 20 65 76 61 6c         * to eval
9770: 75 61 74 65 20 61 6e 64 20 63 6f 6e 63 61 74 65  uate and concate
9780: 6e 61 74 65 2e 20 2a 2f 0a 2b 20 20 20 20 69 6e  nate. */.+    in
9790: 74 20 63 6f 75 6e 74 3b 20 20 20 20 20 20 20 20  t count;        
97a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
97b0: 62 65 72 20 6f 66 20 74 6f 6b 65 6e 73 20 74 6f  ber of tokens to
97c0: 20 63 6f 6e 73 69 64 65 72 20 61 74 20 74 6f 6b   consider at tok
97d0: 65 6e 50 74 72 2e 0a 2b 20 20 20 20 20 20 20 20  enPtr..+        
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97f0: 20 20 20 20 20 20 20 20 20 2a 20 4d 75 73 74 20           * Must 
9800: 62 65 20 61 74 20 6c 65 61 73 74 20 31 2e 20 2a  be at least 1. *
9810: 2f 0a 2b 20 20 20 20 69 6e 74 20 2a 74 6f 6b 65  /.+    int *toke
9820: 6e 73 4c 65 66 74 50 74 72 3b 09 09 2f 2a 20 49  nsLeftPtr;../* I
9830: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 70 6f 69 6e  f not NULL, poin
9840: 74 73 20 74 6f 20 6d 65 6d 6f 72 79 20 77 68 65  ts to memory whe
9850: 72 65 20 61 6e 0a 2b 09 09 09 09 20 2a 20 69 6e  re an.+.... * in
9860: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 69  teger representi
9870: 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ng the number of
9880: 20 74 6f 6b 65 6e 73 0a 2b 09 09 09 09 20 2a 20   tokens.+.... * 
9890: 6c 65 66 74 20 74 6f 20 62 65 20 73 75 62 73 74  left to be subst
98a0: 69 74 75 74 65 64 20 77 69 6c 6c 20 62 65 20 77  ituted will be w
98b0: 72 69 74 74 65 6e 20 2a 2f 0a 2b 7b 0a 2b 20 20  ritten */.+{.+  
98c0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 72 65 73 75 6c    Tcl_Obj *resul
98d0: 74 3b 0a 2b 20 20 20 20 69 6e 74 20 63 6f 64 65  t;.+    int code
98e0: 20 3d 20 54 43 4c 5f 4f 4b 3b 0a 2b 0a 2b 20 20   = TCL_OK;.+.+  
98f0: 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20 45 61 63    /*.+     * Eac
9900: 68 20 70 61 73 73 20 74 68 72 6f 75 67 68 20 74  h pass through t
9910: 68 69 73 20 6c 6f 6f 70 20 77 69 6c 6c 20 73 75  his loop will su
9920: 62 73 74 69 74 75 74 65 20 6f 6e 65 20 74 6f 6b  bstitute one tok
9930: 65 6e 2c 20 61 6e 64 20 69 74 73 0a 2b 20 20 20  en, and its.+   
9940: 20 20 2a 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20    * components, 
9950: 69 66 20 61 6e 79 2e 20 20 54 68 65 20 6f 6e 6c  if any.  The onl
9960: 79 20 74 68 69 6e 67 20 74 72 69 63 6b 79 20 68  y thing tricky h
9970: 65 72 65 20 69 73 20 74 68 61 74 20 77 65 20 67  ere is that we g
9980: 6f 20 74 6f 0a 2b 20 20 20 20 20 2a 20 73 6f 6d  o to.+     * som
9990: 65 20 65 66 66 6f 72 74 20 74 6f 20 70 61 73 73  e effort to pass
99a0: 20 54 63 6c 5f 4f 62 6a 27 73 20 74 68 72 6f 75   Tcl_Obj's throu
99b0: 67 68 20 75 6e 74 6f 75 63 68 65 64 2c 20 74 6f  gh untouched, to
99c0: 20 61 76 6f 69 64 20 73 74 72 69 6e 67 0a 2b 20   avoid string.+ 
99d0: 20 20 20 20 2a 20 63 6f 70 79 69 6e 67 20 61 6e      * copying an
99e0: 64 20 54 63 6c 5f 4f 62 6a 20 63 72 65 61 74 69  d Tcl_Obj creati
99f0: 6f 6e 20 69 66 20 70 6f 73 73 69 62 6c 65 2c 20  on if possible, 
9a00: 74 6f 20 61 69 64 20 70 65 72 66 6f 72 6d 61 6e  to aid performan
9a10: 63 65 20 61 6e 64 0a 2b 20 20 20 20 20 2a 20 6c  ce and.+     * l
9a20: 69 6d 69 74 20 73 68 69 6d 6d 65 72 69 6e 67 2e  imit shimmering.
9a30: 0a 2b 20 20 20 20 20 2a 0a 2b 20 20 20 20 20 2a  .+     *.+     *
9a40: 20 46 75 72 74 68 65 72 20 6f 70 74 69 6d 69 7a   Further optimiz
9a50: 61 74 69 6f 6e 20 6f 70 70 6f 72 74 75 6e 69 74  ation opportunit
9a60: 69 65 73 20 6d 69 67 68 74 20 62 65 20 74 6f 20  ies might be to 
9a70: 63 68 65 63 6b 20 66 6f 72 20 74 68 65 0a 2b 20  check for the.+ 
9a80: 20 20 20 20 2a 20 65 71 75 69 76 61 6c 65 6e 74      * equivalent
9a90: 20 6f 66 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65   of Tcl_SetObjRe
9aa0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
9ab0: 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _GetObjResult(in
9ac0: 74 65 72 70 29 29 0a 2b 20 20 20 20 20 2a 20 61  terp)).+     * a
9ad0: 6e 64 20 6f 6d 69 74 20 74 68 65 6d 2e 0a 2b 20  nd omit them..+ 
9ae0: 20 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 72 65      */.+.+    re
9af0: 73 75 6c 74 20 3d 20 4e 55 4c 4c 3b 0a 2b 20 20  sult = NULL;.+  
9b00: 20 20 66 6f 72 20 28 20 3b 20 28 63 6f 75 6e 74    for ( ; (count
9b10: 20 3e 20 30 29 20 26 26 20 28 63 6f 64 65 20 3d   > 0) && (code =
9b20: 3d 20 54 43 4c 5f 4f 4b 29 3b 20 63 6f 75 6e 74  = TCL_OK); count
9b30: 2d 2d 2c 20 74 6f 6b 65 6e 50 74 72 2b 2b 29 20  --, tokenPtr++) 
9b40: 7b 0a 2b 09 54 63 6c 5f 4f 62 6a 20 2a 61 70 70  {.+.Tcl_Obj *app
9b50: 65 6e 64 4f 62 6a 20 3d 20 4e 55 4c 4c 3b 0a 2b  endObj = NULL;.+
9b60: 09 43 4f 4e 53 54 20 63 68 61 72 20 2a 61 70 70  .CONST char *app
9b70: 65 6e 64 20 3d 20 4e 55 4c 4c 3b 0a 2b 09 69 6e  end = NULL;.+.in
9b80: 74 20 61 70 70 65 6e 64 42 79 74 65 4c 65 6e 67  t appendByteLeng
9b90: 74 68 20 3d 20 30 3b 0a 2b 0a 2b 09 73 77 69 74  th = 0;.+.+.swit
9ba0: 63 68 20 28 74 6f 6b 65 6e 50 74 72 2d 3e 74 79  ch (tokenPtr->ty
9bb0: 70 65 29 20 7b 0a 2b 09 20 20 20 20 63 61 73 65  pe) {.+.    case
9bc0: 20 54 43 4c 5f 54 4f 4b 45 4e 5f 54 45 58 54 3a   TCL_TOKEN_TEXT:
9bd0: 0a 2b 09 09 61 70 70 65 6e 64 20 3d 20 74 6f 6b  .+..append = tok
9be0: 65 6e 50 74 72 2d 3e 73 74 61 72 74 3b 0a 2b 09  enPtr->start;.+.
9bf0: 09 61 70 70 65 6e 64 42 79 74 65 4c 65 6e 67 74  .appendByteLengt
9c00: 68 20 3d 20 74 6f 6b 65 6e 50 74 72 2d 3e 73 69  h = tokenPtr->si
9c10: 7a 65 3b 0a 2b 09 09 62 72 65 61 6b 3b 0a 2b 0a  ze;.+..break;.+.
9c20: 2b 09 20 20 20 20 63 61 73 65 20 54 43 4c 5f 54  +.    case TCL_T
9c30: 4f 4b 45 4e 5f 42 53 3a 20 7b 0a 2b 09 09 63 68  OKEN_BS: {.+..ch
9c40: 61 72 20 75 74 66 43 68 61 72 42 79 74 65 73 5b  ar utfCharBytes[
9c50: 54 43 4c 5f 55 54 46 5f 4d 41 58 5d 3b 0a 2b 09  TCL_UTF_MAX];.+.
9c60: 09 61 70 70 65 6e 64 42 79 74 65 4c 65 6e 67 74  .appendByteLengt
9c70: 68 20 3d 20 54 63 6c 5f 55 74 66 42 61 63 6b 73  h = Tcl_UtfBacks
9c80: 6c 61 73 68 28 74 6f 6b 65 6e 50 74 72 2d 3e 73  lash(tokenPtr->s
9c90: 74 61 72 74 2c 0a 2b 09 09 09 28 69 6e 74 20 2a  tart,.+...(int *
9ca0: 29 20 4e 55 4c 4c 2c 20 75 74 66 43 68 61 72 42  ) NULL, utfCharB
9cb0: 79 74 65 73 29 3b 0a 2b 09 09 61 70 70 65 6e 64  ytes);.+..append
9cc0: 20 3d 20 75 74 66 43 68 61 72 42 79 74 65 73 3b   = utfCharBytes;
9cd0: 0a 2b 09 09 62 72 65 61 6b 3b 0a 2b 09 20 20 20  .+..break;.+.   
9ce0: 20 7d 0a 2b 0a 2b 09 20 20 20 20 63 61 73 65 20   }.+.+.    case 
9cf0: 54 43 4c 5f 54 4f 4b 45 4e 5f 43 4f 4d 4d 41 4e  TCL_TOKEN_COMMAN
9d00: 44 3a 0a 2b 09 09 63 6f 64 65 20 3d 20 54 63 6c  D:.+..code = Tcl
9d10: 5f 45 76 61 6c 45 78 28 69 6e 74 65 72 70 2c 20  _EvalEx(interp, 
9d20: 74 6f 6b 65 6e 50 74 72 2d 3e 73 74 61 72 74 2b  tokenPtr->start+
9d30: 31 2c 20 74 6f 6b 65 6e 50 74 72 2d 3e 73 69 7a  1, tokenPtr->siz
9d40: 65 2d 32 2c 0a 2b 09 09 09 30 29 3b 0a 2b 09 09  e-2,.+...0);.+..
9d50: 61 70 70 65 6e 64 4f 62 6a 20 3d 20 54 63 6c 5f  appendObj = Tcl_
9d60: 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  GetObjResult(int
9d70: 65 72 70 29 3b 0a 2b 09 09 62 72 65 61 6b 3b 0a  erp);.+..break;.
9d80: 2b 0a 2b 09 20 20 20 20 63 61 73 65 20 54 43 4c  +.+.    case TCL
9d90: 5f 54 4f 4b 45 4e 5f 56 41 52 49 41 42 4c 45 3a  _TOKEN_VARIABLE:
9da0: 20 7b 0a 2b 09 09 54 63 6c 5f 4f 62 6a 20 2a 61   {.+..Tcl_Obj *a
9db0: 72 72 61 79 49 6e 64 65 78 20 3d 20 4e 55 4c 4c  rrayIndex = NULL
9dc0: 3b 0a 2b 09 09 54 63 6c 5f 4f 62 6a 20 2a 76 61  ;.+..Tcl_Obj *va
9dd0: 72 4e 61 6d 65 20 3d 20 4e 55 4c 4c 3b 0a 2b 09  rName = NULL;.+.
9de0: 09 69 66 20 28 74 6f 6b 65 6e 50 74 72 2d 3e 6e  .if (tokenPtr->n
9df0: 75 6d 43 6f 6d 70 6f 6e 65 6e 74 73 20 3e 20 31  umComponents > 1
9e00: 29 20 7b 0a 2b 09 09 20 20 20 20 2f 2a 20 53 75  ) {.+..    /* Su
9e10: 62 73 74 20 74 68 65 20 69 6e 64 65 78 20 70 61  bst the index pa
9e20: 72 74 20 6f 66 20 61 6e 20 61 72 72 61 79 20 76  rt of an array v
9e30: 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63  ariable referenc
9e40: 65 20 2a 2f 0a 2b 09 09 20 20 20 20 63 6f 64 65  e */.+..    code
9e50: 20 3d 20 54 63 6c 53 75 62 73 74 54 6f 6b 65 6e   = TclSubstToken
9e60: 73 28 69 6e 74 65 72 70 2c 20 74 6f 6b 65 6e 50  s(interp, tokenP
9e70: 74 72 2b 32 2c 0a 2b 09 09 09 20 20 20 20 74 6f  tr+2,.+...    to
9e80: 6b 65 6e 50 74 72 2d 3e 6e 75 6d 43 6f 6d 70 6f  kenPtr->numCompo
9e90: 6e 65 6e 74 73 20 2d 20 31 2c 20 4e 55 4c 4c 29  nents - 1, NULL)
9ea0: 3b 0a 2b 09 09 20 20 20 20 61 72 72 61 79 49 6e  ;.+..    arrayIn
9eb0: 64 65 78 20 3d 20 54 63 6c 5f 47 65 74 4f 62 6a  dex = Tcl_GetObj
9ec0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a  Result(interp);.
9ed0: 2b 09 09 20 20 20 20 54 63 6c 5f 49 6e 63 72 52  +..    Tcl_IncrR
9ee0: 65 66 43 6f 75 6e 74 28 61 72 72 61 79 49 6e 64  efCount(arrayInd
9ef0: 65 78 29 3b 0a 2b 09 09 7d 0a 2b 0a 2b 09 09 69  ex);.+..}.+.+..i
9f00: 66 20 28 63 6f 64 65 20 3d 3d 20 54 43 4c 5f 4f  f (code == TCL_O
9f10: 4b 29 20 7b 0a 2b 09 09 20 20 20 20 76 61 72 4e  K) {.+..    varN
9f20: 61 6d 65 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72  ame = Tcl_NewStr
9f30: 69 6e 67 4f 62 6a 28 74 6f 6b 65 6e 50 74 72 5b  ingObj(tokenPtr[
9f40: 31 5d 2e 73 74 61 72 74 2c 0a 2b 09 09 09 20 20  1].start,.+...  
9f50: 20 20 74 6f 6b 65 6e 50 74 72 5b 31 5d 2e 73 69    tokenPtr[1].si
9f60: 7a 65 29 3b 0a 2b 09 09 20 20 20 20 61 70 70 65  ze);.+..    appe
9f70: 6e 64 4f 62 6a 20 3d 20 54 63 6c 5f 4f 62 6a 47  ndObj = Tcl_ObjG
9f80: 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 76  etVar2(interp, v
9f90: 61 72 4e 61 6d 65 2c 20 61 72 72 61 79 49 6e 64  arName, arrayInd
9fa0: 65 78 2c 0a 2b 09 09 09 20 20 20 20 54 43 4c 5f  ex,.+...    TCL_
9fb0: 4c 45 41 56 45 5f 45 52 52 5f 4d 53 47 29 3b 0a  LEAVE_ERR_MSG);.
9fc0: 2b 09 09 20 20 20 20 54 63 6c 5f 44 65 63 72 52  +..    Tcl_DecrR
9fd0: 65 66 43 6f 75 6e 74 28 76 61 72 4e 61 6d 65 29  efCount(varName)
9fe0: 3b 0a 2b 09 09 20 20 20 20 69 66 20 28 61 70 70  ;.+..    if (app
9ff0: 65 6e 64 4f 62 6a 20 3d 3d 20 4e 55 4c 4c 29 20  endObj == NULL) 
a000: 7b 0a 2b 09 09 09 63 6f 64 65 20 3d 20 54 43 4c  {.+...code = TCL
a010: 5f 45 52 52 4f 52 3b 0a 2b 09 09 20 20 20 20 7d  _ERROR;.+..    }
a020: 0a 2b 09 09 7d 0a 2b 0a 2b 09 09 73 77 69 74 63  .+..}.+.+..switc
a030: 68 20 28 63 6f 64 65 29 20 7b 0a 2b 09 09 20 20  h (code) {.+..  
a040: 20 20 63 61 73 65 20 54 43 4c 5f 4f 4b 3a 09 2f    case TCL_OK:./
a050: 2a 20 47 6f 74 20 76 61 6c 75 65 20 2a 2f 0a 2b  * Got value */.+
a060: 09 09 20 20 20 20 63 61 73 65 20 54 43 4c 5f 45  ..    case TCL_E
a070: 52 52 4f 52 3a 09 2f 2a 20 41 6c 72 65 61 64 79  RROR:./* Already
a080: 20 68 61 76 65 20 65 72 72 6f 72 20 6d 65 73 73   have error mess
a090: 61 67 65 20 2a 2f 0a 2b 09 09 20 20 20 20 63 61  age */.+..    ca
a0a0: 73 65 20 54 43 4c 5f 42 52 45 41 4b 3a 09 2f 2a  se TCL_BREAK:./*
a0b0: 20 57 69 6c 6c 20 6e 6f 74 20 73 75 62 73 74 69   Will not substi
a0c0: 74 75 74 65 20 61 6e 79 77 61 79 20 2a 2f 0a 2b  tute anyway */.+
a0d0: 09 09 20 20 20 20 63 61 73 65 20 54 43 4c 5f 43  ..    case TCL_C
a0e0: 4f 4e 54 49 4e 55 45 3a 09 2f 2a 20 57 69 6c 6c  ONTINUE:./* Will
a0f0: 20 6e 6f 74 20 73 75 62 73 74 69 74 75 74 65 20   not substitute 
a100: 61 6e 79 77 61 79 20 2a 2f 0a 2b 09 09 09 62 72  anyway */.+...br
a110: 65 61 6b 3b 0a 2b 09 09 20 20 20 20 64 65 66 61  eak;.+..    defa
a120: 75 6c 74 3a 0a 2b 09 09 09 2f 2a 20 41 6c 6c 20  ult:.+.../* All 
a130: 6f 74 68 65 72 20 72 65 74 75 72 6e 20 63 6f 64  other return cod
a140: 65 73 2c 20 77 65 20 77 69 6c 6c 20 73 75 62 73  es, we will subs
a150: 74 20 74 68 65 0a 2b 09 09 09 20 2a 20 72 65 73  t the.+... * res
a160: 75 6c 74 20 66 72 6f 6d 20 74 68 65 20 63 6f 64  ult from the cod
a170: 65 2d 74 68 72 6f 77 69 6e 67 20 65 76 61 6c 75  e-throwing evalu
a180: 61 74 69 6f 6e 20 2a 2f 0a 2b 09 09 09 61 70 70  ation */.+...app
a190: 65 6e 64 4f 62 6a 20 3d 20 54 63 6c 5f 47 65 74  endObj = Tcl_Get
a1a0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
a1b0: 29 3b 0a 2b 09 09 7d 0a 2b 0a 2b 09 09 69 66 20  );.+..}.+.+..if 
a1c0: 28 61 72 72 61 79 49 6e 64 65 78 20 21 3d 20 4e  (arrayIndex != N
a1d0: 55 4c 4c 29 20 7b 0a 2b 09 09 20 20 20 20 54 63  ULL) {.+..    Tc
a1e0: 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 61  l_DecrRefCount(a
a1f0: 72 72 61 79 49 6e 64 65 78 29 3b 0a 2b 09 09 7d  rrayIndex);.+..}
a200: 0a 2b 09 09 63 6f 75 6e 74 20 2d 3d 20 74 6f 6b  .+..count -= tok
a210: 65 6e 50 74 72 2d 3e 6e 75 6d 43 6f 6d 70 6f 6e  enPtr->numCompon
a220: 65 6e 74 73 3b 0a 2b 09 09 74 6f 6b 65 6e 50 74  ents;.+..tokenPt
a230: 72 20 2b 3d 20 74 6f 6b 65 6e 50 74 72 2d 3e 6e  r += tokenPtr->n
a240: 75 6d 43 6f 6d 70 6f 6e 65 6e 74 73 3b 0a 2b 09  umComponents;.+.
a250: 09 62 72 65 61 6b 3b 0a 2b 09 20 20 20 20 7d 0a  .break;.+.    }.
a260: 2b 0a 2b 09 20 20 20 20 64 65 66 61 75 6c 74 3a  +.+.    default:
a270: 0a 2b 09 09 54 63 6c 5f 50 61 6e 69 63 28 22 75  .+..Tcl_Panic("u
a280: 6e 65 78 70 65 63 74 65 64 20 74 6f 6b 65 6e 20  nexpected token 
a290: 74 79 70 65 20 69 6e 20 54 63 6c 53 75 62 73 74  type in TclSubst
a2a0: 54 6f 6b 65 6e 73 3a 20 25 64 22 2c 0a 2b 09 09  Tokens: %d",.+..
a2b0: 09 74 6f 6b 65 6e 50 74 72 2d 3e 74 79 70 65 29  .tokenPtr->type)
a2c0: 3b 0a 2b 09 7d 0a 2b 0a 2b 09 69 66 20 28 28 63  ;.+.}.+.+.if ((c
a2d0: 6f 64 65 20 3d 3d 20 54 43 4c 5f 42 52 45 41 4b  ode == TCL_BREAK
a2e0: 29 20 7c 7c 20 28 63 6f 64 65 20 3d 3d 20 54 43  ) || (code == TC
a2f0: 4c 5f 43 4f 4e 54 49 4e 55 45 29 29 20 7b 0a 2b  L_CONTINUE)) {.+
a300: 09 20 20 20 20 2f 2a 20 49 6e 68 69 62 69 74 20  .    /* Inhibit 
a310: 73 75 62 73 74 69 74 75 74 69 6f 6e 20 2a 2f 0a  substitution */.
a320: 2b 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a  +.    continue;.
a330: 2b 09 7d 0a 2b 0a 2b 09 69 66 20 28 72 65 73 75  +.}.+.+.if (resu
a340: 6c 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09  lt == NULL) {.+.
a350: 20 20 20 20 2f 2a 20 0a 2b 09 20 20 20 20 20 2a      /* .+.     *
a360: 20 46 69 72 73 74 20 70 61 73 73 20 74 68 72 6f   First pass thro
a370: 75 67 68 2e 20 20 49 66 20 77 65 20 68 61 76 65  ugh.  If we have
a380: 20 61 20 54 63 6c 5f 4f 62 6a 2c 20 6a 75 73 74   a Tcl_Obj, just
a390: 20 75 73 65 20 69 74 2e 0a 2b 09 20 20 20 20 20   use it..+.     
a3a0: 2a 20 49 66 20 6e 6f 74 2c 20 63 72 65 61 74 65  * If not, create
a3b0: 20 6f 6e 65 20 66 72 6f 6d 20 6f 75 72 20 73 74   one from our st
a3c0: 72 69 6e 67 2e 20 0a 2b 09 20 20 20 20 20 2a 2f  ring. .+.     */
a3d0: 0a 2b 0a 2b 09 20 20 20 20 69 66 20 28 61 70 70  .+.+.    if (app
a3e0: 65 6e 64 4f 62 6a 20 21 3d 20 4e 55 4c 4c 29 20  endObj != NULL) 
a3f0: 7b 0a 2b 09 09 72 65 73 75 6c 74 20 3d 20 61 70  {.+..result = ap
a400: 70 65 6e 64 4f 62 6a 3b 0a 2b 09 20 20 20 20 7d  pendObj;.+.    }
a410: 20 65 6c 73 65 20 7b 0a 2b 09 09 72 65 73 75 6c   else {.+..resul
a420: 74 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  t = Tcl_NewStrin
a430: 67 4f 62 6a 28 61 70 70 65 6e 64 2c 20 61 70 70  gObj(append, app
a440: 65 6e 64 42 79 74 65 4c 65 6e 67 74 68 29 3b 3b  endByteLength);;
a450: 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 54  .+.    }.+.    T
a460: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
a470: 72 65 73 75 6c 74 29 3b 0a 2b 09 7d 20 65 6c 73  result);.+.} els
a480: 65 20 7b 0a 2b 09 20 20 20 20 2f 2a 20 53 75 62  e {.+.    /* Sub
a490: 73 65 71 75 65 6e 74 20 70 61 73 73 65 73 2e 20  sequent passes. 
a4a0: 20 41 70 70 65 6e 64 20 74 6f 20 72 65 73 75 6c   Append to resul
a4b0: 74 2e 20 2a 2f 0a 2b 09 20 20 20 20 69 66 20 28  t. */.+.    if (
a4c0: 54 63 6c 5f 49 73 53 68 61 72 65 64 28 72 65 73  Tcl_IsShared(res
a4d0: 75 6c 74 29 29 20 7b 0a 2b 09 09 54 63 6c 5f 44  ult)) {.+..Tcl_D
a4e0: 65 63 72 52 65 66 43 6f 75 6e 74 28 72 65 73 75  ecrRefCount(resu
a4f0: 6c 74 29 3b 0a 2b 09 09 72 65 73 75 6c 74 20 3d  lt);.+..result =
a500: 20 54 63 6c 5f 44 75 70 6c 69 63 61 74 65 4f 62   Tcl_DuplicateOb
a510: 6a 28 72 65 73 75 6c 74 29 3b 0a 2b 09 09 54 63  j(result);.+..Tc
a520: 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 72  l_IncrRefCount(r
a530: 65 73 75 6c 74 29 3b 0a 2b 09 20 20 20 20 7d 0a  esult);.+.    }.
a540: 2b 09 20 20 20 20 69 66 20 28 61 70 70 65 6e 64  +.    if (append
a550: 4f 62 6a 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b  Obj != NULL) {.+
a560: 09 09 54 63 6c 5f 41 70 70 65 6e 64 4f 62 6a 54  ..Tcl_AppendObjT
a570: 6f 4f 62 6a 28 72 65 73 75 6c 74 2c 20 61 70 70  oObj(result, app
a580: 65 6e 64 4f 62 6a 29 3b 0a 2b 09 20 20 20 20 7d  endObj);.+.    }
a590: 20 65 6c 73 65 20 7b 0a 2b 09 09 54 63 6c 5f 41   else {.+..Tcl_A
a5a0: 70 70 65 6e 64 54 6f 4f 62 6a 28 72 65 73 75 6c  ppendToObj(resul
a5b0: 74 2c 20 61 70 70 65 6e 64 2c 20 61 70 70 65 6e  t, append, appen
a5c0: 64 42 79 74 65 4c 65 6e 67 74 68 29 3b 0a 2b 09  dByteLength);.+.
a5d0: 20 20 20 20 7d 0a 2b 09 7d 0a 2b 20 20 20 20 7d      }.+.}.+    }
a5e0: 0a 2b 0a 2b 20 20 20 20 69 66 20 28 63 6f 64 65  .+.+    if (code
a5f0: 20 21 3d 20 54 43 4c 5f 45 52 52 4f 52 29 20 7b   != TCL_ERROR) {
a600: 09 2f 2a 20 4b 65 65 70 20 65 72 72 6f 72 20 6d  ./* Keep error m
a610: 65 73 73 61 67 65 20 69 6e 20 72 65 73 75 6c 74  essage in result
a620: 21 20 2a 2f 0a 2b 09 69 66 20 28 72 65 73 75 6c  ! */.+.if (resul
a630: 74 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20  t != NULL) {.+. 
a640: 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73     Tcl_SetObjRes
a650: 75 6c 74 28 69 6e 74 65 72 70 2c 20 72 65 73 75  ult(interp, resu
a660: 6c 74 29 3b 0a 2b 09 7d 20 65 6c 73 65 20 7b 0a  lt);.+.} else {.
a670: 2b 09 20 20 20 20 54 63 6c 5f 52 65 73 65 74 52  +.    Tcl_ResetR
a680: 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 2b  esult(interp);.+
a690: 09 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 69  .}.+    }.+    i
a6a0: 66 20 28 74 6f 6b 65 6e 73 4c 65 66 74 50 74 72  f (tokensLeftPtr
a6b0: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 2a 74   != NULL) {.+.*t
a6c0: 6f 6b 65 6e 73 4c 65 66 74 50 74 72 20 3d 20 63  okensLeftPtr = c
a6d0: 6f 75 6e 74 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20  ount;.+    }.+  
a6e0: 20 20 69 66 20 28 72 65 73 75 6c 74 20 21 3d 20    if (result != 
a6f0: 4e 55 4c 4c 29 20 7b 0a 2b 09 54 63 6c 5f 44 65  NULL) {.+.Tcl_De
a700: 63 72 52 65 66 43 6f 75 6e 74 28 72 65 73 75 6c  crRefCount(resul
a710: 74 29 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20  t);.+    }.+    
a720: 72 65 74 75 72 6e 20 63 6f 64 65 3b 0a 2b 7d 0a  return code;.+}.
a730: 2b 0c 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d  +.. /*.  *------
a740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a780: 0a 20 20 2a 0a 49 6e 64 65 78 3a 20 74 65 73 74  .  *.Index: test
a790: 73 2f 73 75 62 73 74 2e 74 65 73 74 0a 3d 3d 3d  s/subst.test.===
a7a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a7b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a7c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a7d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a7e0: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72  .RCS file: /cvsr
a7f0: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 74 65 73 74  oot/tcl/tcl/test
a800: 73 2f 73 75 62 73 74 2e 74 65 73 74 2c 76 0a 72  s/subst.test,v.r
a810: 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69  etrieving revisi
a820: 6f 6e 20 31 2e 31 33 0a 64 69 66 66 20 2d 75 20  on 1.13.diff -u 
a830: 2d 72 31 2e 31 33 20 73 75 62 73 74 2e 74 65 73  -r1.13 subst.tes
a840: 74 0a 2d 2d 2d 20 74 65 73 74 73 2f 73 75 62 73  t.--- tests/subs
a850: 74 2e 74 65 73 74 09 31 36 20 46 65 62 20 32 30  t.test.16 Feb 20
a860: 30 33 20 30 31 3a 33 36 3a 33 32 20 2d 30 30 30  03 01:36:32 -000
a870: 30 09 31 2e 31 33 0a 2b 2b 2b 20 74 65 73 74 73  0.1.13.+++ tests
a880: 2f 73 75 62 73 74 2e 74 65 73 74 09 31 33 20 4d  /subst.test.13 M
a890: 61 72 20 32 30 30 33 20 30 32 3a 32 37 3a 30 30  ar 2003 02:27:00
a8a0: 20 2d 30 30 30 30 0a 40 40 20 2d 31 34 2c 37 20   -0000.@@ -14,7 
a8b0: 2b 31 34 2c 37 20 40 40 0a 20 23 20 52 43 53 3a  +14,7 @@. # RCS:
a8c0: 20 40 28 23 29 20 24 49 64 3a 20 73 75 62 73 74   @(#) $Id: subst
a8d0: 2e 74 65 73 74 2c 76 20 31 2e 31 33 20 32 30 30  .test,v 1.13 200
a8e0: 33 2f 30 32 2f 31 36 20 30 31 3a 33 36 3a 33 32  3/02/16 01:36:32
a8f0: 20 6d 73 6f 66 65 72 20 45 78 70 20 24 0a 20 0a   msofer Exp $. .
a900: 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 5b 6e   if {[lsearch [n
a910: 61 6d 65 73 70 61 63 65 20 63 68 69 6c 64 72 65  amespace childre
a920: 6e 5d 20 3a 3a 74 63 6c 74 65 73 74 5d 20 3d 3d  n] ::tcltest] ==
a930: 20 2d 31 7d 20 7b 0a 2d 20 20 20 20 70 61 63 6b   -1} {.-    pack
a940: 61 67 65 20 72 65 71 75 69 72 65 20 74 63 6c 74  age require tclt
a950: 65 73 74 0a 2b 20 20 20 20 70 61 63 6b 61 67 65  est.+    package
a960: 20 72 65 71 75 69 72 65 20 74 63 6c 74 65 73 74   require tcltest
a970: 20 32 2e 31 0a 20 20 20 20 20 6e 61 6d 65 73 70   2.1.     namesp
a980: 61 63 65 20 69 6d 70 6f 72 74 20 2d 66 6f 72 63  ace import -forc
a990: 65 20 3a 3a 74 63 6c 74 65 73 74 3a 3a 2a 0a 20  e ::tcltest::*. 
a9a0: 7d 0a 20 0a 40 40 20 2d 33 34 2c 36 20 2b 33 34  }. .@@ -34,6 +34
a9b0: 2c 31 30 20 40 40 0a 20 74 65 73 74 20 73 75 62  ,10 @@. test sub
a9c0: 73 74 2d 32 2e 33 20 7b 73 69 6d 70 6c 65 20 73  st-2.3 {simple s
a9d0: 74 72 69 6e 67 73 7d 20 7b 0a 20 20 20 20 20 73  trings} {.     s
a9e0: 75 62 73 74 20 61 62 63 64 65 66 67 0a 20 7d 20  ubst abcdefg. } 
a9f0: 61 62 63 64 65 66 67 0a 2b 74 65 73 74 20 73 75  abcdefg.+test su
aa00: 62 73 74 2d 32 2e 34 20 7b 73 69 6d 70 6c 65 20  bst-2.4 {simple 
aa10: 73 74 72 69 6e 67 73 7d 20 7b 0a 2b 20 20 20 20  strings} {.+    
aa20: 23 20 54 63 6c 20 42 75 67 20 36 38 35 31 30 36  # Tcl Bug 685106
aa30: 0a 2b 20 20 20 20 73 75 62 73 74 20 5b 62 79 74  .+    subst [byt
aa40: 65 73 74 72 69 6e 67 20 62 61 72 5c 78 30 30 73  estring bar\x00s
aa50: 6f 6f 6d 5d 0a 2b 7d 20 5b 62 79 74 65 73 74 72  oom].+} [bytestr
aa60: 69 6e 67 20 62 61 72 5c 78 30 30 73 6f 6f 6d 5d  ing bar\x00soom]
aa70: 0a 20 0a 20 74 65 73 74 20 73 75 62 73 74 2d 33  . . test subst-3
aa80: 2e 31 20 7b 62 61 63 6b 73 6c 61 73 68 20 73 75  .1 {backslash su
aa90: 62 73 74 69 74 75 74 69 6f 6e 73 7d 20 7b 0a 20  bstitutions} {. 
aaa0: 20 20 20 20 73 75 62 73 74 20 7b 5c 78 5c 24 78      subst {\x\$x
aab0: 5c 5b 66 6f 6f 20 62 61 72 5d 5c 5c 7d 0a 40 40  \[foo bar]\\}.@@
aac0: 20 2d 31 35 38 2c 31 32 20 2b 31 36 32 2c 31 32   -158,12 +162,12
aad0: 20 40 40 0a 20 74 65 73 74 20 73 75 62 73 74 2d   @@. test subst-
aae0: 38 2e 36 20 7b 72 65 74 75 72 6e 20 69 6e 20 61  8.6 {return in a
aaf0: 20 73 75 62 73 74 7d 20 7b 0a 20 20 20 20 20 6c   subst} {.     l
ab00: 69 73 74 20 5b 63 61 74 63 68 20 7b 73 75 62 73  ist [catch {subs
ab10: 74 20 7b 66 6f 6f 20 5b 72 65 74 75 72 6e 20 7b  t {foo [return {
ab20: 78 7d 3b 20 62 6f 67 75 73 20 63 6f 64 65 20 62  x}; bogus code b
ab30: 61 72 7d 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20  ar}} msg] $msg. 
ab40: 7d 20 7b 31 20 7b 6d 69 73 73 69 6e 67 20 63 6c  } {1 {missing cl
ab50: 6f 73 65 2d 62 72 61 63 6b 65 74 7d 7d 0a 2d 74  ose-bracket}}.-t
ab60: 65 73 74 20 73 75 62 73 74 2d 38 2e 37 20 7b 72  est subst-8.7 {r
ab70: 65 74 75 72 6e 20 69 6e 20 61 20 73 75 62 73 74  eturn in a subst
ab80: 2c 20 70 61 72 73 65 20 65 72 72 6f 72 7d 20 7b  , parse error} {
ab90: 0a 2b 74 65 73 74 20 73 75 62 73 74 2d 38 2e 37  .+test subst-8.7
aba0: 20 7b 72 65 74 75 72 6e 20 69 6e 20 61 20 73 75   {return in a su
abb0: 62 73 74 2c 20 70 61 72 73 65 20 65 72 72 6f 72  bst, parse error
abc0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 20 73  } -body {.     s
abd0: 75 62 73 74 20 7b 66 6f 6f 20 5b 72 65 74 75 72  ubst {foo [retur
abe0: 6e 20 7b 78 7d 20 3b 20 73 65 74 20 61 20 7b 7d  n {x} ; set a {}
abf0: 22 20 3b 20 73 74 75 66 66 5d 20 62 61 72 7d 0a  " ; stuff] bar}.
ac00: 2d 7d 20 7b 66 6f 6f 20 78 73 65 74 20 61 20 7b  -} {foo xset a {
ac10: 7d 22 20 3b 20 73 74 75 66 66 5d 20 62 61 72 7d  }" ; stuff] bar}
ac20: 0a 2d 74 65 73 74 20 73 75 62 73 74 2d 38 2e 38  .-test subst-8.8
ac30: 20 7b 72 65 74 75 72 6e 20 69 6e 20 61 20 73 75   {return in a su
ac40: 62 73 74 2c 20 70 61 72 73 65 20 65 72 72 6f 72  bst, parse error
ac50: 7d 20 7b 0a 2b 7d 20 2d 72 65 74 75 72 6e 43 6f  } {.+} -returnCo
ac60: 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c  des error -resul
ac70: 74 20 7b 65 78 74 72 61 20 63 68 61 72 61 63 74  t {extra charact
ac80: 65 72 73 20 61 66 74 65 72 20 63 6c 6f 73 65 2d  ers after close-
ac90: 62 72 61 63 65 7d 0a 2b 74 65 73 74 20 73 75 62  brace}.+test sub
aca0: 73 74 2d 38 2e 38 20 7b 72 65 74 75 72 6e 20 69  st-8.8 {return i
acb0: 6e 20 61 20 73 75 62 73 74 2c 20 70 61 72 73 65  n a subst, parse
acc0: 20 65 72 72 6f 72 7d 20 2d 62 6f 64 79 20 7b 0a   error} -body {.
acd0: 20 20 20 20 20 73 75 62 73 74 20 7b 66 6f 6f 20       subst {foo 
ace0: 5b 72 65 74 75 72 6e 20 7b 78 7d 20 3b 20 73 65  [return {x} ; se
acf0: 74 20 62 61 72 20 62 61 7a 20 3b 20 73 65 74 20  t bar baz ; set 
ad00: 61 20 7b 7d 22 20 3b 20 73 74 75 66 66 5d 20 62  a {}" ; stuff] b
ad10: 61 72 7d 0a 2d 7d 20 7b 66 6f 6f 20 78 73 65 74  ar}.-} {foo xset
ad20: 20 62 61 72 20 62 61 7a 20 3b 20 73 65 74 20 61   bar baz ; set a
ad30: 20 7b 7d 22 20 3b 20 73 74 75 66 66 5d 20 62 61   {}" ; stuff] ba
ad40: 72 7d 0a 2b 7d 20 2d 72 65 74 75 72 6e 43 6f 64  r}.+} -returnCod
ad50: 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74  es error -result
ad60: 20 7b 65 78 74 72 61 20 63 68 61 72 61 63 74 65   {extra characte
ad70: 72 73 20 61 66 74 65 72 20 63 6c 6f 73 65 2d 62  rs after close-b
ad80: 72 61 63 65 7d 0a 20 74 65 73 74 20 73 75 62 73  race}. test subs
ad90: 74 2d 38 2e 39 20 7b 72 65 74 75 72 6e 20 69 6e  t-8.9 {return in
ada0: 20 61 20 76 61 72 69 61 62 6c 65 20 73 75 62 73   a variable subs
adb0: 74 7d 20 7b 0a 20 20 20 20 20 73 75 62 73 74 20  t} {.     subst 
adc0: 7b 66 6f 6f 20 24 76 61 72 28 5b 72 65 74 75 72  {foo $var([retur
add0: 6e 20 7b 78 7d 5d 29 20 62 61 72 7d 0a 20 7d 20  n {x}]) bar}. } 
ade0: 7b 66 6f 6f 20 78 20 62 61 72 7d 0a 40 40 20 2d  {foo x bar}.@@ -
adf0: 32 30 36 2c 31 32 20 2b 32 31 30 2c 31 32 20 40  206,12 +210,12 @
ae00: 40 0a 20 74 65 73 74 20 73 75 62 73 74 2d 31 31  @. test subst-11
ae10: 2e 33 20 7b 63 6f 6e 74 69 6e 75 65 20 69 6e 20  .3 {continue in 
ae20: 61 20 73 75 62 73 74 7d 20 7b 0a 20 20 20 20 20  a subst} {.     
ae30: 73 75 62 73 74 20 7b 66 6f 6f 20 5b 69 66 20 31  subst {foo [if 1
ae40: 20 7b 20 63 6f 6e 74 69 6e 75 65 3b 20 62 6f 67   { continue; bog
ae50: 75 73 20 63 6f 64 65 7d 5d 20 62 61 72 7d 0a 20  us code}] bar}. 
ae60: 7d 20 7b 66 6f 6f 20 20 62 61 72 7d 0a 2d 74 65  } {foo  bar}.-te
ae70: 73 74 20 73 75 62 73 74 2d 31 31 2e 34 20 7b 63  st subst-11.4 {c
ae80: 6f 6e 74 69 6e 75 65 20 69 6e 20 61 20 73 75 62  ontinue in a sub
ae90: 73 74 2c 20 70 61 72 73 65 20 65 72 72 6f 72 7d  st, parse error}
aea0: 20 7b 0a 2b 74 65 73 74 20 73 75 62 73 74 2d 31   {.+test subst-1
aeb0: 31 2e 34 20 7b 63 6f 6e 74 69 6e 75 65 20 69 6e  1.4 {continue in
aec0: 20 61 20 73 75 62 73 74 2c 20 70 61 72 73 65 20   a subst, parse 
aed0: 65 72 72 6f 72 7d 20 2d 62 6f 64 79 20 7b 0a 20  error} -body {. 
aee0: 20 20 20 20 73 75 62 73 74 20 7b 66 6f 6f 20 5b      subst {foo [
aef0: 63 6f 6e 74 69 6e 75 65 20 3b 20 73 65 74 20 61  continue ; set a
af00: 20 7b 7d 7b 7d 20 3b 20 73 74 75 66 66 5d 20 62   {}{} ; stuff] b
af10: 61 72 7d 0a 2d 7d 20 7b 66 6f 6f 20 73 65 74 20  ar}.-} {foo set 
af20: 61 20 7b 7d 7b 7d 20 3b 20 73 74 75 66 66 5d 20  a {}{} ; stuff] 
af30: 62 61 72 7d 0a 2d 74 65 73 74 20 73 75 62 73 74  bar}.-test subst
af40: 2d 31 31 2e 35 20 7b 63 6f 6e 74 69 6e 75 65 20  -11.5 {continue 
af50: 69 6e 20 61 20 73 75 62 73 74 2c 20 70 61 72 73  in a subst, pars
af60: 65 20 65 72 72 6f 72 7d 20 7b 0a 2b 7d 20 2d 72  e error} {.+} -r
af70: 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72  eturnCodes error
af80: 20 2d 72 65 73 75 6c 74 20 7b 65 78 74 72 61 20   -result {extra 
af90: 63 68 61 72 61 63 74 65 72 73 20 61 66 74 65 72  characters after
afa0: 20 63 6c 6f 73 65 2d 62 72 61 63 65 7d 0a 2b 74   close-brace}.+t
afb0: 65 73 74 20 73 75 62 73 74 2d 31 31 2e 35 20 7b  est subst-11.5 {
afc0: 63 6f 6e 74 69 6e 75 65 20 69 6e 20 61 20 73 75  continue in a su
afd0: 62 73 74 2c 20 70 61 72 73 65 20 65 72 72 6f 72  bst, parse error
afe0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 20 73  } -body {.     s
aff0: 75 62 73 74 20 7b 66 6f 6f 20 5b 63 6f 6e 74 69  ubst {foo [conti
b000: 6e 75 65 20 3b 73 65 74 20 62 61 72 20 62 61 7a  nue ;set bar baz
b010: 20 3b 73 65 74 20 61 20 7b 7d 7b 7d 20 3b 20 73   ;set a {}{} ; s
b020: 74 75 66 66 5d 20 62 61 72 7d 0a 2d 7d 20 7b 66  tuff] bar}.-} {f
b030: 6f 6f 20 73 65 74 20 62 61 72 20 62 61 7a 20 3b  oo set bar baz ;
b040: 73 65 74 20 61 20 7b 7d 7b 7d 20 3b 20 73 74 75  set a {}{} ; stu
b050: 66 66 5d 20 62 61 72 7d 0a 2b 7d 20 2d 72 65 74  ff] bar}.+} -ret
b060: 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d  urnCodes error -
b070: 72 65 73 75 6c 74 20 7b 65 78 74 72 61 20 63 68  result {extra ch
b080: 61 72 61 63 74 65 72 73 20 61 66 74 65 72 20 63  aracters after c
b090: 6c 6f 73 65 2d 62 72 61 63 65 7d 0a 20 74 65 73  lose-brace}. tes
b0a0: 74 20 73 75 62 73 74 2d 31 31 2e 36 20 7b 63 6f  t subst-11.6 {co
b0b0: 6e 74 69 6e 75 65 20 69 6e 20 61 20 76 61 72 69  ntinue in a vari
b0c0: 61 62 6c 65 20 73 75 62 73 74 7d 20 7b 0a 20 20  able subst} {.  
b0d0: 20 20 20 73 75 62 73 74 20 7b 66 6f 6f 20 24 76     subst {foo $v
b0e0: 61 72 28 5b 63 6f 6e 74 69 6e 75 65 5d 29 20 62  ar([continue]) b
b0f0: 61 72 7d 0a 20 7d 20 7b 66 6f 6f 20 20 62 61 72  ar}. } {foo  bar
b100: 7d 0a                                            }.