Tcl Source Code

Hex Artifact Content
Login

Artifact 3753f2de90aa7ef1cc7024a3fac07d776b2b51f7:

Attachment "tip87.patch" to ticket [522849ffff] added by trier 2002-02-28 00:40:24.
0000: 2a 2a 2a 20 2e 2e 2f 6f 72 69 67 2f 67 65 6e 65  *** ../orig/gene
0010: 72 69 63 2f 74 63 6c 49 6e 74 65 72 70 2e 63 09  ric/tclInterp.c.
0020: 46 72 69 20 46 65 62 20 31 35 20 30 39 3a 32 38  Fri Feb 15 09:28
0030: 3a 34 39 20 32 30 30 32 0a 2d 2d 2d 20 67 65 6e  :49 2002.--- gen
0040: 65 72 69 63 2f 74 63 6c 49 6e 74 65 72 70 2e 63  eric/tclInterp.c
0050: 09 57 65 64 20 46 65 62 20 32 37 20 31 31 3a 32  .Wed Feb 27 11:2
0060: 39 3a 31 30 20 32 30 30 32 0a 2a 2a 2a 2a 2a 2a  9:10 2002.******
0070: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 33 35  *********.*** 35
0080: 31 2c 33 36 34 20 2a 2a 2a 2a 0a 20 20 20 20 20  1,364 ****.     
0090: 20 20 20 20 20 22 61 6c 69 61 73 22 2c 09 22 61       "alias",."a
00a0: 6c 69 61 73 65 73 22 2c 09 22 63 72 65 61 74 65  liases",."create
00b0: 22 2c 09 22 64 65 6c 65 74 65 22 2c 20 0a 20 20  ",."delete", .  
00c0: 09 22 65 76 61 6c 22 2c 09 09 22 65 78 69 73 74  ."eval",.."exist
00d0: 73 22 2c 09 22 65 78 70 6f 73 65 22 2c 09 22 68  s",."expose",."h
00e0: 69 64 65 22 2c 20 0a 20 20 09 22 68 69 64 64 65  ide", .  ."hidde
00f0: 6e 22 2c 09 22 69 73 73 61 66 65 22 2c 09 22 69  n",."issafe",."i
0100: 6e 76 6f 6b 65 68 69 64 64 65 6e 22 2c 09 22 6d  nvokehidden",."m
0110: 61 72 6b 74 72 75 73 74 65 64 22 2c 20 0a 21 20  arktrusted", .! 
0120: 09 22 73 6c 61 76 65 73 22 2c 09 22 73 68 61 72  ."slaves",."shar
0130: 65 22 2c 09 22 74 61 72 67 65 74 22 2c 09 22 74  e",."target",."t
0140: 72 61 6e 73 66 65 72 22 2c 0a 20 20 20 20 20 20  ransfer",.      
0150: 20 20 20 20 4e 55 4c 4c 0a 20 20 20 20 20 20 7d      NULL.      }
0160: 3b 0a 20 20 20 20 20 20 65 6e 75 6d 20 6f 70 74  ;.      enum opt
0170: 69 6f 6e 20 7b 0a 20 20 09 4f 50 54 5f 41 4c 49  ion {.  .OPT_ALI
0180: 41 53 2c 09 4f 50 54 5f 41 4c 49 41 53 45 53 2c  AS,.OPT_ALIASES,
0190: 09 4f 50 54 5f 43 52 45 41 54 45 2c 09 4f 50 54  .OPT_CREATE,.OPT
01a0: 5f 44 45 4c 45 54 45 2c 0a 20 20 09 4f 50 54 5f  _DELETE,.  .OPT_
01b0: 45 56 41 4c 2c 09 4f 50 54 5f 45 58 49 53 54 53  EVAL,.OPT_EXISTS
01c0: 2c 09 4f 50 54 5f 45 58 50 4f 53 45 2c 09 4f 50  ,.OPT_EXPOSE,.OP
01d0: 54 5f 48 49 44 45 2c 0a 20 20 09 4f 50 54 5f 48  T_HIDE,.  .OPT_H
01e0: 49 44 44 45 4e 2c 09 4f 50 54 5f 49 53 53 41 46  IDDEN,.OPT_ISSAF
01f0: 45 2c 09 4f 50 54 5f 49 4e 56 4f 4b 45 48 49 44  E,.OPT_INVOKEHID
0200: 2c 09 4f 50 54 5f 4d 41 52 4b 54 52 55 53 54 45  ,.OPT_MARKTRUSTE
0210: 44 2c 0a 21 20 09 4f 50 54 5f 53 4c 41 56 45 53  D,.! .OPT_SLAVES
0220: 2c 09 4f 50 54 5f 53 48 41 52 45 2c 09 4f 50 54  ,.OPT_SHARE,.OPT
0230: 5f 54 41 52 47 45 54 2c 09 4f 50 54 5f 54 52 41  _TARGET,.OPT_TRA
0240: 4e 53 46 45 52 0a 20 20 20 20 20 20 7d 3b 0a 20  NSFER.      };. 
0250: 20 0a 20 20 0a 2d 2d 2d 20 33 35 31 2c 33 36 36   .  .--- 351,366
0260: 20 2d 2d 2d 2d 0a 20 20 20 20 20 20 20 20 20 20   ----.          
0270: 22 61 6c 69 61 73 22 2c 09 22 61 6c 69 61 73 65  "alias",."aliase
0280: 73 22 2c 09 22 63 72 65 61 74 65 22 2c 09 22 64  s",."create",."d
0290: 65 6c 65 74 65 22 2c 20 0a 20 20 09 22 65 76 61  elete", .  ."eva
02a0: 6c 22 2c 09 09 22 65 78 69 73 74 73 22 2c 09 22  l",.."exists",."
02b0: 65 78 70 6f 73 65 22 2c 09 22 68 69 64 65 22 2c  expose",."hide",
02c0: 20 0a 20 20 09 22 68 69 64 64 65 6e 22 2c 09 22   .  ."hidden",."
02d0: 69 73 73 61 66 65 22 2c 09 22 69 6e 76 6f 6b 65  issafe",."invoke
02e0: 68 69 64 64 65 6e 22 2c 09 22 6d 61 72 6b 74 72  hidden",."marktr
02f0: 75 73 74 65 64 22 2c 20 0a 21 20 09 22 72 65 63  usted", .! ."rec
0300: 75 72 73 69 6f 6e 6c 69 6d 69 74 22 2c 09 09 22  ursionlimit",.."
0310: 73 6c 61 76 65 73 22 2c 09 22 73 68 61 72 65 22  slaves",."share"
0320: 2c 0a 21 20 09 22 74 61 72 67 65 74 22 2c 09 22  ,.! ."target",."
0330: 74 72 61 6e 73 66 65 72 22 2c 0a 20 20 20 20 20  transfer",.     
0340: 20 20 20 20 20 4e 55 4c 4c 0a 20 20 20 20 20 20       NULL.      
0350: 7d 3b 0a 20 20 20 20 20 20 65 6e 75 6d 20 6f 70  };.      enum op
0360: 74 69 6f 6e 20 7b 0a 20 20 09 4f 50 54 5f 41 4c  tion {.  .OPT_AL
0370: 49 41 53 2c 09 4f 50 54 5f 41 4c 49 41 53 45 53  IAS,.OPT_ALIASES
0380: 2c 09 4f 50 54 5f 43 52 45 41 54 45 2c 09 4f 50  ,.OPT_CREATE,.OP
0390: 54 5f 44 45 4c 45 54 45 2c 0a 20 20 09 4f 50 54  T_DELETE,.  .OPT
03a0: 5f 45 56 41 4c 2c 09 4f 50 54 5f 45 58 49 53 54  _EVAL,.OPT_EXIST
03b0: 53 2c 09 4f 50 54 5f 45 58 50 4f 53 45 2c 09 4f  S,.OPT_EXPOSE,.O
03c0: 50 54 5f 48 49 44 45 2c 0a 20 20 09 4f 50 54 5f  PT_HIDE,.  .OPT_
03d0: 48 49 44 44 45 4e 2c 09 4f 50 54 5f 49 53 53 41  HIDDEN,.OPT_ISSA
03e0: 46 45 2c 09 4f 50 54 5f 49 4e 56 4f 4b 45 48 49  FE,.OPT_INVOKEHI
03f0: 44 2c 09 4f 50 54 5f 4d 41 52 4b 54 52 55 53 54  D,.OPT_MARKTRUST
0400: 45 44 2c 0a 21 20 09 4f 50 54 5f 52 45 43 4c 49  ED,.! .OPT_RECLI
0410: 4d 49 54 2c 09 09 09 4f 50 54 5f 53 4c 41 56 45  MIT,...OPT_SLAVE
0420: 53 2c 09 4f 50 54 5f 53 48 41 52 45 2c 0a 21 20  S,.OPT_SHARE,.! 
0430: 09 4f 50 54 5f 54 41 52 47 45 54 2c 09 4f 50 54  .OPT_TARGET,.OPT
0440: 5f 54 52 41 4e 53 46 45 52 0a 20 20 20 20 20 20  _TRANSFER.      
0450: 7d 3b 0a 20 20 0a 20 20 0a 2a 2a 2a 2a 2a 2a 2a  };.  .  .*******
0460: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 36 33 30  ********.*** 630
0470: 2c 36 33 35 20 2a 2a 2a 2a 0a 2d 2d 2d 20 36 33  ,635 ****.--- 63
0480: 32 2c 36 38 32 20 2d 2d 2d 2d 0a 20 20 09 20 20  2,682 ----.  .  
0490: 20 20 7d 0a 20 20 09 20 20 20 20 72 65 74 75 72    }.  .    retur
04a0: 6e 20 53 6c 61 76 65 4d 61 72 6b 54 72 75 73 74  n SlaveMarkTrust
04b0: 65 64 28 69 6e 74 65 72 70 2c 20 73 6c 61 76 65  ed(interp, slave
04c0: 49 6e 74 65 72 70 29 3b 0a 20 20 09 7d 0a 2b 20  Interp);.  .}.+ 
04d0: 09 63 61 73 65 20 4f 50 54 5f 52 45 43 4c 49 4d  .case OPT_RECLIM
04e0: 49 54 3a 20 7b 0a 2b 20 09 20 20 20 20 54 63 6c  IT: {.+ .    Tcl
04f0: 5f 49 6e 74 65 72 70 20 2a 73 6c 61 76 65 49 6e  _Interp *slaveIn
0500: 74 65 72 70 3b 0a 2b 20 09 20 20 20 20 49 6e 74  terp;.+ .    Int
0510: 65 72 70 20 2a 69 50 74 72 3b 0a 2b 20 09 20 20  erp *iPtr;.+ .  
0520: 20 20 69 6e 74 20 6c 69 6d 69 74 3b 0a 2b 20 0a    int limit;.+ .
0530: 2b 20 09 20 20 20 20 69 66 20 28 6f 62 6a 63 20  + .    if (objc 
0540: 21 3d 20 33 20 26 26 20 6f 62 6a 63 20 21 3d 20  != 3 && objc != 
0550: 34 29 20 7b 0a 2b 20 09 09 54 63 6c 5f 57 72 6f  4) {.+ ..Tcl_Wro
0560: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
0570: 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 70 61 74 68  , 2, objv, "path
0580: 20 3f 6e 65 77 6c 69 6d 69 74 3f 22 29 3b 0a 2b   ?newlimit?");.+
0590: 20 09 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ..return TCL_ER
05a0: 52 4f 52 3b 0a 2b 20 09 20 20 20 20 7d 0a 2b 20  ROR;.+ .    }.+ 
05b0: 09 20 20 20 20 73 6c 61 76 65 49 6e 74 65 72 70  .    slaveInterp
05c0: 20 3d 20 47 65 74 49 6e 74 65 72 70 28 69 6e 74   = GetInterp(int
05d0: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 29 3b 0a 2b  erp, objv[2]);.+
05e0: 20 09 20 20 20 20 69 66 20 28 73 6c 61 76 65 49   .    if (slaveI
05f0: 6e 74 65 72 70 20 3d 3d 20 4e 55 4c 4c 29 20 7b  nterp == NULL) {
0600: 0a 2b 20 09 09 72 65 74 75 72 6e 20 54 43 4c 5f  .+ ..return TCL_
0610: 45 52 52 4f 52 3b 0a 2b 20 09 20 20 20 20 7d 0a  ERROR;.+ .    }.
0620: 2b 20 09 20 20 20 20 69 66 20 28 6f 62 6a 63 20  + .    if (objc 
0630: 3d 3d 20 34 29 20 7b 0a 2b 20 09 09 69 66 20 28  == 4) {.+ ..if (
0640: 54 63 6c 5f 49 73 53 61 66 65 28 69 6e 74 65 72  Tcl_IsSafe(inter
0650: 70 29 29 20 7b 0a 2b 20 09 09 20 20 20 20 54 63  p)) {.+ ..    Tc
0660: 6c 5f 41 70 70 65 6e 64 53 74 72 69 6e 67 73 54  l_AppendStringsT
0670: 6f 4f 62 6a 28 54 63 6c 5f 47 65 74 4f 62 6a 52  oObj(Tcl_GetObjR
0680: 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 0a 2b  esult(interp),.+
0690: 20 09 09 20 20 20 20 20 20 20 20 20 20 20 20 22   ..            "
06a0: 70 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65  permission denie
06b0: 64 3a 20 22 2c 0a 2b 20 09 09 20 20 20 20 20 20  d: ",.+ ..      
06c0: 20 20 20 20 20 20 22 73 61 66 65 20 69 6e 74 65        "safe inte
06d0: 72 70 72 65 74 65 72 73 20 63 61 6e 6e 6f 74 20  rpreters cannot 
06e0: 63 68 61 6e 67 65 20 72 65 63 75 72 73 69 6f 6e  change recursion
06f0: 20 6c 69 6d 69 74 22 2c 0a 2b 20 09 09 20 20 20   limit",.+ ..   
0700: 20 20 20 20 20 20 20 20 20 28 63 68 61 72 20 2a           (char *
0710: 29 20 4e 55 4c 4c 29 3b 0a 2b 20 09 09 20 20 20  ) NULL);.+ ..   
0720: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
0730: 52 3b 0a 2b 20 09 09 7d 0a 2b 20 09 09 69 66 20  R;.+ ..}.+ ..if 
0740: 28 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f  (Tcl_GetIntFromO
0750: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
0760: 33 5d 2c 0a 2b 20 09 09 09 26 6c 69 6d 69 74 29  3],.+ ...&limit)
0770: 20 3d 3d 20 54 43 4c 5f 45 52 52 4f 52 29 20 7b   == TCL_ERROR) {
0780: 0a 2b 20 09 09 20 20 20 20 72 65 74 75 72 6e 20  .+ ..    return 
0790: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 09 09 7d  TCL_ERROR;.+ ..}
07a0: 0a 2b 20 09 09 69 66 20 28 6c 69 6d 69 74 20 3c  .+ ..if (limit <
07b0: 3d 20 30 29 20 7b 0a 2b 20 20 20 20 20 20 20 20  = 0) {.+        
07c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c               Tcl
07d0: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
07e0: 74 65 72 70 2c 0a 2b 20 20 20 20 20 20 20 20 20  terp,.+         
07f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0800: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
0810: 62 6a 28 22 72 65 63 75 72 73 69 6f 6e 20 6c 69  bj("recursion li
0820: 6d 69 74 20 6d 75 73 74 20 62 65 20 3e 20 30 22  mit must be > 0"
0830: 2c 20 2d 31 29 29 3b 0a 2b 20 09 09 20 20 20 20  , -1));.+ ..    
0840: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
0850: 3b 0a 2b 20 09 09 7d 0a 2b 20 09 09 54 63 6c 5f  ;.+ ..}.+ ..Tcl_
0860: 53 65 74 52 65 63 75 72 73 69 6f 6e 4c 69 6d 69  SetRecursionLimi
0870: 74 28 73 6c 61 76 65 49 6e 74 65 72 70 2c 20 6c  t(slaveInterp, l
0880: 69 6d 69 74 29 3b 0a 2b 20 09 09 69 50 74 72 20  imit);.+ ..iPtr 
0890: 3d 20 28 49 6e 74 65 72 70 20 2a 29 20 73 6c 61  = (Interp *) sla
08a0: 76 65 49 6e 74 65 72 70 3b 0a 2b 20 09 09 69 66  veInterp;.+ ..if
08b0: 20 28 69 6e 74 65 72 70 20 3d 3d 20 73 6c 61 76   (interp == slav
08c0: 65 49 6e 74 65 72 70 20 26 26 20 69 50 74 72 2d  eInterp && iPtr-
08d0: 3e 6e 75 6d 4c 65 76 65 6c 73 20 3e 20 6c 69 6d  >numLevels > lim
08e0: 69 74 29 20 7b 0a 2b 20 09 09 20 20 20 20 54 63  it) {.+ ..    Tc
08f0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
0900: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
0910: 72 69 6e 67 4f 62 6a 28 0a 2b 20 09 09 09 20 20  ringObj(.+ ...  
0920: 20 20 22 66 61 6c 6c 69 6e 67 20 62 61 63 6b 20    "falling back 
0930: 64 75 65 20 74 6f 20 6e 65 77 20 72 65 63 75 72  due to new recur
0940: 73 69 6f 6e 20 6c 69 6d 69 74 22 2c 20 2d 31 29  sion limit", -1)
0950: 29 3b 0a 2b 20 09 09 20 20 20 20 72 65 74 75 72  );.+ ..    retur
0960: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 09  n TCL_ERROR;.+ .
0970: 09 7d 0a 2b 20 09 09 54 63 6c 5f 53 65 74 4f 62  .}.+ ..Tcl_SetOb
0980: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
0990: 6f 62 6a 76 5b 33 5d 29 3b 0a 2b 20 09 20 20 20  objv[3]);.+ .   
09a0: 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f       return TCL_
09b0: 4f 4b 3b 0a 2b 20 09 20 20 20 20 7d 20 65 6c 73  OK;.+ .    } els
09c0: 65 20 7b 0a 2b 20 09 09 6c 69 6d 69 74 20 3d 20  e {.+ ..limit = 
09d0: 54 63 6c 5f 53 65 74 52 65 63 75 72 73 69 6f 6e  Tcl_SetRecursion
09e0: 4c 69 6d 69 74 28 73 6c 61 76 65 49 6e 74 65 72  Limit(slaveInter
09f0: 70 2c 20 30 29 3b 0a 2b 20 09 09 54 63 6c 5f 53  p, 0);.+ ..Tcl_S
0a00: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
0a10: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
0a20: 6a 28 6c 69 6d 69 74 29 29 3b 0a 2b 20 09 20 20  j(limit));.+ .  
0a30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c        return TCL
0a40: 5f 4f 4b 3b 0a 2b 20 09 20 20 20 20 7d 0a 2b 20  _OK;.+ .    }.+ 
0a50: 09 7d 0a 20 20 09 63 61 73 65 20 4f 50 54 5f 53  .}.  .case OPT_S
0a60: 4c 41 56 45 53 3a 20 7b 0a 20 20 09 20 20 20 20  LAVES: {.  .    
0a70: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 73 6c 61 76  Tcl_Interp *slav
0a80: 65 49 6e 74 65 72 70 3b 0a 20 20 09 20 20 20 20  eInterp;.  .    
0a90: 49 6e 74 65 72 70 49 6e 66 6f 20 2a 69 69 50 74  InterpInfo *iiPt
0aa0: 72 3b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  r;.*************
0ab0: 2a 2a 0a 2a 2a 2a 20 31 38 33 32 2c 31 38 34 33  **.*** 1832,1843
0ac0: 20 2a 2a 2a 2a 0a 20 20 20 20 20 20 73 74 61 74   ****.      stat
0ad0: 69 63 20 43 4f 4e 53 54 20 63 68 61 72 20 2a 6f  ic CONST char *o
0ae0: 70 74 69 6f 6e 73 5b 5d 20 3d 20 7b 0a 20 20 20  ptions[] = {.   
0af0: 20 20 20 20 20 20 20 22 61 6c 69 61 73 22 2c 09         "alias",.
0b00: 22 61 6c 69 61 73 65 73 22 2c 09 22 65 76 61 6c  "aliases",."eval
0b10: 22 2c 09 09 22 65 78 70 6f 73 65 22 2c 0a 20 20  ",.."expose",.  
0b20: 20 20 20 20 20 20 20 20 22 68 69 64 65 22 2c 09          "hide",.
0b30: 09 22 68 69 64 64 65 6e 22 2c 09 22 69 73 73 61  ."hidden",."issa
0b40: 66 65 22 2c 09 22 69 6e 76 6f 6b 65 68 69 64 64  fe",."invokehidd
0b50: 65 6e 22 2c 0a 21 20 20 20 20 20 20 20 20 20 22  en",.!         "
0b60: 6d 61 72 6b 74 72 75 73 74 65 64 22 2c 09 4e 55  marktrusted",.NU
0b70: 4c 4c 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  LL.      };.    
0b80: 20 20 65 6e 75 6d 20 6f 70 74 69 6f 6e 73 20 7b    enum options {
0b90: 0a 20 20 09 4f 50 54 5f 41 4c 49 41 53 2c 09 4f  .  .OPT_ALIAS,.O
0ba0: 50 54 5f 41 4c 49 41 53 45 53 2c 09 4f 50 54 5f  PT_ALIASES,.OPT_
0bb0: 45 56 41 4c 2c 09 4f 50 54 5f 45 58 50 4f 53 45  EVAL,.OPT_EXPOSE
0bc0: 2c 0a 20 20 09 4f 50 54 5f 48 49 44 45 2c 09 4f  ,.  .OPT_HIDE,.O
0bd0: 50 54 5f 48 49 44 44 45 4e 2c 09 4f 50 54 5f 49  PT_HIDDEN,.OPT_I
0be0: 53 53 41 46 45 2c 09 4f 50 54 5f 49 4e 56 4f 4b  SSAFE,.OPT_INVOK
0bf0: 45 48 49 44 44 45 4e 2c 0a 21 20 09 4f 50 54 5f  EHIDDEN,.! .OPT_
0c00: 4d 41 52 4b 54 52 55 53 54 45 44 0a 20 20 20 20  MARKTRUSTED.    
0c10: 20 20 7d 3b 0a 20 20 20 20 20 20 0a 20 20 20 20    };.      .    
0c20: 20 20 73 6c 61 76 65 49 6e 74 65 72 70 20 3d 20    slaveInterp = 
0c30: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 20 63  (Tcl_Interp *) c
0c40: 6c 69 65 6e 74 44 61 74 61 3b 0a 2d 2d 2d 20 31  lientData;.--- 1
0c50: 38 37 39 2c 31 38 39 30 20 2d 2d 2d 2d 0a 20 20  879,1890 ----.  
0c60: 20 20 20 20 73 74 61 74 69 63 20 43 4f 4e 53 54      static CONST
0c70: 20 63 68 61 72 20 2a 6f 70 74 69 6f 6e 73 5b 5d   char *options[]
0c80: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 22   = {.          "
0c90: 61 6c 69 61 73 22 2c 09 22 61 6c 69 61 73 65 73  alias",."aliases
0ca0: 22 2c 09 22 65 76 61 6c 22 2c 09 09 22 65 78 70  ",."eval",.."exp
0cb0: 6f 73 65 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ose",.          
0cc0: 22 68 69 64 65 22 2c 09 09 22 68 69 64 64 65 6e  "hide",.."hidden
0cd0: 22 2c 09 22 69 73 73 61 66 65 22 2c 09 22 69 6e  ",."issafe",."in
0ce0: 76 6f 6b 65 68 69 64 64 65 6e 22 2c 0a 21 20 20  vokehidden",.!  
0cf0: 20 20 20 20 20 20 20 22 6d 61 72 6b 74 72 75 73         "marktrus
0d00: 74 65 64 22 2c 09 22 72 65 63 75 72 73 69 6f 6e  ted",."recursion
0d10: 6c 69 6d 69 74 22 2c 20 4e 55 4c 4c 0a 20 20 20  limit", NULL.   
0d20: 20 20 20 7d 3b 0a 20 20 20 20 20 20 65 6e 75 6d     };.      enum
0d30: 20 6f 70 74 69 6f 6e 73 20 7b 0a 20 20 09 4f 50   options {.  .OP
0d40: 54 5f 41 4c 49 41 53 2c 09 4f 50 54 5f 41 4c 49  T_ALIAS,.OPT_ALI
0d50: 41 53 45 53 2c 09 4f 50 54 5f 45 56 41 4c 2c 09  ASES,.OPT_EVAL,.
0d60: 4f 50 54 5f 45 58 50 4f 53 45 2c 0a 20 20 09 4f  OPT_EXPOSE,.  .O
0d70: 50 54 5f 48 49 44 45 2c 09 4f 50 54 5f 48 49 44  PT_HIDE,.OPT_HID
0d80: 44 45 4e 2c 09 4f 50 54 5f 49 53 53 41 46 45 2c  DEN,.OPT_ISSAFE,
0d90: 09 4f 50 54 5f 49 4e 56 4f 4b 45 48 49 44 44 45  .OPT_INVOKEHIDDE
0da0: 4e 2c 0a 21 20 09 4f 50 54 5f 4d 41 52 4b 54 52  N,.! .OPT_MARKTR
0db0: 55 53 54 45 44 2c 20 4f 50 54 5f 52 45 43 4c 49  USTED, OPT_RECLI
0dc0: 4d 49 54 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20  MIT.      };.   
0dd0: 20 20 20 0a 20 20 20 20 20 20 73 6c 61 76 65 49     .      slaveI
0de0: 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74  nterp = (Tcl_Int
0df0: 65 72 70 20 2a 29 20 63 6c 69 65 6e 74 44 61 74  erp *) clientDat
0e00: 61 3b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  a;.*************
0e10: 2a 2a 0a 2a 2a 2a 20 31 39 35 34 2c 31 39 35 39  **.*** 1954,1959
0e20: 20 2a 2a 2a 2a 0a 2d 2d 2d 20 32 30 30 31 2c 32   ****.--- 2001,2
0e30: 30 34 36 20 2d 2d 2d 2d 0a 20 20 09 09 72 65 74  046 ----.  ..ret
0e40: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
0e50: 20 09 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20   .    }.        
0e60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 6c 61        return Sla
0e70: 76 65 4d 61 72 6b 54 72 75 73 74 65 64 28 69 6e  veMarkTrusted(in
0e80: 74 65 72 70 2c 20 73 6c 61 76 65 49 6e 74 65 72  terp, slaveInter
0e90: 70 29 3b 0a 2b 20 09 7d 0a 2b 20 09 63 61 73 65  p);.+ .}.+ .case
0ea0: 20 4f 50 54 5f 52 45 43 4c 49 4d 49 54 3a 20 7b   OPT_RECLIMIT: {
0eb0: 0a 2b 20 09 20 20 20 20 49 6e 74 65 72 70 20 2a  .+ .    Interp *
0ec0: 69 50 74 72 3b 0a 2b 20 09 20 20 20 20 69 6e 74  iPtr;.+ .    int
0ed0: 20 6c 69 6d 69 74 3b 0a 2b 20 0a 2b 20 09 20 20   limit;.+ .+ .  
0ee0: 20 20 69 66 20 28 6f 62 6a 63 20 21 3d 20 32 20    if (objc != 2 
0ef0: 26 26 20 6f 62 6a 63 20 21 3d 20 33 29 20 7b 0a  && objc != 3) {.
0f00: 2b 20 09 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d  + ..Tcl_WrongNum
0f10: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 32 2c 20  Args(interp, 2, 
0f20: 6f 62 6a 76 2c 20 22 3f 6e 65 77 6c 69 6d 69 74  objv, "?newlimit
0f30: 3f 22 29 3b 0a 2b 20 09 09 72 65 74 75 72 6e 20  ?");.+ ..return 
0f40: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 09 20 20  TCL_ERROR;.+ .  
0f50: 20 20 7d 0a 2b 20 09 20 20 20 20 69 66 20 28 6f    }.+ .    if (o
0f60: 62 6a 63 20 3d 3d 20 33 29 20 7b 0a 2b 20 09 09  bjc == 3) {.+ ..
0f70: 69 66 20 28 54 63 6c 5f 49 73 53 61 66 65 28 69  if (Tcl_IsSafe(i
0f80: 6e 74 65 72 70 29 29 20 7b 0a 2b 20 09 09 20 20  nterp)) {.+ ..  
0f90: 20 20 54 63 6c 5f 41 70 70 65 6e 64 53 74 72 69    Tcl_AppendStri
0fa0: 6e 67 73 54 6f 4f 62 6a 28 54 63 6c 5f 47 65 74  ngsToObj(Tcl_Get
0fb0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
0fc0: 29 2c 0a 2b 20 09 09 20 20 20 20 20 20 20 20 20  ),.+ ..         
0fd0: 20 20 20 22 70 65 72 6d 69 73 73 69 6f 6e 20 64     "permission d
0fe0: 65 6e 69 65 64 3a 20 22 2c 0a 2b 20 09 09 20 20  enied: ",.+ ..  
0ff0: 20 20 20 20 20 20 20 20 20 20 22 73 61 66 65 20            "safe 
1000: 69 6e 74 65 72 70 72 65 74 65 72 73 20 63 61 6e  interpreters can
1010: 6e 6f 74 20 63 68 61 6e 67 65 20 72 65 63 75 72  not change recur
1020: 73 69 6f 6e 20 6c 69 6d 69 74 22 2c 0a 2b 20 09  sion limit",.+ .
1030: 09 20 20 20 20 20 20 20 20 20 20 20 20 28 63 68  .            (ch
1040: 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 2b 20 09  ar *) NULL);.+ .
1050: 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
1060: 45 52 52 4f 52 3b 0a 2b 20 09 09 7d 0a 2b 20 09  ERROR;.+ ..}.+ .
1070: 09 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 74 46  .if (Tcl_GetIntF
1080: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
1090: 62 6a 76 5b 32 5d 2c 0a 2b 20 09 20 20 20 20 20  bjv[2],.+ .     
10a0: 20 20 20 20 20 20 20 20 20 20 20 26 6c 69 6d 69             &limi
10b0: 74 29 20 3d 3d 20 54 43 4c 5f 45 52 52 4f 52 29  t) == TCL_ERROR)
10c0: 20 7b 0a 2b 20 09 09 20 20 20 20 72 65 74 75 72   {.+ ..    retur
10d0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 09  n TCL_ERROR;.+ .
10e0: 09 7d 0a 2b 20 09 09 69 66 20 28 6c 69 6d 69 74  .}.+ ..if (limit
10f0: 20 3c 3d 20 30 29 20 7b 0a 2b 20 20 20 20 20 20   <= 0) {.+      
1100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1110: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
1120: 69 6e 74 65 72 70 2c 0a 2b 20 20 20 20 20 20 20  interp,.+       
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1140: 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e      Tcl_NewStrin
1150: 67 4f 62 6a 28 22 72 65 63 75 72 73 69 6f 6e 20  gObj("recursion 
1160: 6c 69 6d 69 74 20 6d 75 73 74 20 62 65 20 3e 20  limit must be > 
1170: 30 22 2c 20 2d 31 29 29 3b 0a 2b 20 09 09 20 20  0", -1));.+ ..  
1180: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
1190: 4f 52 3b 0a 2b 20 09 09 7d 0a 2b 20 09 09 54 63  OR;.+ ..}.+ ..Tc
11a0: 6c 5f 53 65 74 52 65 63 75 72 73 69 6f 6e 4c 69  l_SetRecursionLi
11b0: 6d 69 74 28 73 6c 61 76 65 49 6e 74 65 72 70 2c  mit(slaveInterp,
11c0: 20 6c 69 6d 69 74 29 3b 0a 2b 20 09 09 69 50 74   limit);.+ ..iPt
11d0: 72 20 3d 20 28 49 6e 74 65 72 70 20 2a 29 20 73  r = (Interp *) s
11e0: 6c 61 76 65 49 6e 74 65 72 70 3b 0a 2b 20 09 09  laveInterp;.+ ..
11f0: 69 66 20 28 69 6e 74 65 72 70 20 3d 3d 20 73 6c  if (interp == sl
1200: 61 76 65 49 6e 74 65 72 70 20 26 26 20 69 50 74  aveInterp && iPt
1210: 72 2d 3e 6e 75 6d 4c 65 76 65 6c 73 20 3e 20 6c  r->numLevels > l
1220: 69 6d 69 74 29 20 7b 0a 2b 20 09 09 20 20 20 20  imit) {.+ ..    
1230: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
1240: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
1250: 53 74 72 69 6e 67 4f 62 6a 28 0a 2b 20 09 09 09  StringObj(.+ ...
1260: 20 20 20 20 22 66 61 6c 6c 69 6e 67 20 62 61 63      "falling bac
1270: 6b 20 64 75 65 20 74 6f 20 6e 65 77 20 72 65 63  k due to new rec
1280: 75 72 73 69 6f 6e 20 6c 69 6d 69 74 22 2c 20 2d  ursion limit", -
1290: 31 29 29 3b 0a 2b 20 09 09 20 20 20 20 72 65 74  1));.+ ..    ret
12a0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b  urn TCL_ERROR;.+
12b0: 20 09 09 7d 0a 2b 20 09 09 54 63 6c 5f 53 65 74   ..}.+ ..Tcl_Set
12c0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
12d0: 2c 20 6f 62 6a 76 5b 32 5d 29 3b 0a 2b 20 09 20  , objv[2]);.+ . 
12e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43         return TC
12f0: 4c 5f 4f 4b 3b 0a 2b 20 09 20 20 20 20 7d 20 65  L_OK;.+ .    } e
1300: 6c 73 65 20 7b 0a 2b 20 09 09 6c 69 6d 69 74 20  lse {.+ ..limit 
1310: 3d 20 54 63 6c 5f 53 65 74 52 65 63 75 72 73 69  = Tcl_SetRecursi
1320: 6f 6e 4c 69 6d 69 74 28 73 6c 61 76 65 49 6e 74  onLimit(slaveInt
1330: 65 72 70 2c 20 30 29 3b 0a 2b 20 09 09 54 63 6c  erp, 0);.+ ..Tcl
1340: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
1350: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
1360: 4f 62 6a 28 6c 69 6d 69 74 29 29 3b 0a 2b 20 09  Obj(limit));.+ .
1370: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
1380: 43 4c 5f 4f 4b 3b 0a 2b 20 09 20 20 20 20 7d 0a  CL_OK;.+ .    }.
1390: 20 20 09 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a    .}.      }.  .
13a0: 2a 2a 2a 20 2e 2e 2f 6f 72 69 67 2f 67 65 6e 65  *** ../orig/gene
13b0: 72 69 63 2f 74 63 6c 54 65 73 74 2e 63 09 46 72  ric/tclTest.c.Fr
13c0: 69 20 46 65 62 20 31 35 20 31 38 3a 34 32 3a 31  i Feb 15 18:42:1
13d0: 32 20 32 30 30 32 0a 2d 2d 2d 20 67 65 6e 65 72  2 2002.--- gener
13e0: 69 63 2f 74 63 6c 54 65 73 74 2e 63 09 54 75 65  ic/tclTest.c.Tue
13f0: 20 46 65 62 20 32 36 20 31 32 3a 34 33 3a 30 36   Feb 26 12:43:06
1400: 20 32 30 30 32 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   2002.**********
1410: 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 33 30 31 2c 33 30  *****.*** 301,30
1420: 39 20 2a 2a 2a 2a 0a 20 20 09 09 09 20 20 20 20  9 ****.  ...    
1430: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1440: 72 70 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68  rp, int argc, ch
1450: 61 72 20 2a 2a 61 72 67 76 29 29 3b 0a 20 20 73  ar **argv));.  s
1460: 74 61 74 69 63 20 69 6e 74 09 09 54 65 73 74 73  tatic int..Tests
1470: 65 74 70 6c 61 74 66 6f 72 6d 43 6d 64 20 5f 41  etplatformCmd _A
1480: 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e  NSI_ARGS_((Clien
1490: 74 44 61 74 61 20 64 75 6d 6d 79 2c 0a 20 20 09  tData dummy,.  .
14a0: 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  ..    Tcl_Interp
14b0: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 61 72   *interp, int ar
14c0: 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 29  gc, char **argv)
14d0: 29 3b 0a 2d 20 73 74 61 74 69 63 20 69 6e 74 09  );.- static int.
14e0: 09 54 65 73 74 73 65 74 72 65 63 75 72 73 69 6f  .Testsetrecursio
14f0: 6e 6c 69 6d 69 74 43 6d 64 20 5f 41 4e 53 49 5f  nlimitCmd _ANSI_
1500: 41 52 47 53 5f 28 28 0a 2d 20 20 20 20 20 20 20  ARGS_((.-       
1510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1520: 20 20 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61        ClientData
1530: 20 64 75 6d 6d 79 2c 20 54 63 6c 5f 49 6e 74 65   dummy, Tcl_Inte
1540: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 2d 20 09 09  rp *interp,.- ..
1550: 09 20 20 20 20 69 6e 74 20 6f 62 6a 63 2c 20 54  .    int objc, T
1560: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
1570: 6a 76 5b 5d 29 29 3b 0a 20 20 73 74 61 74 69 63  jv[]));.  static
1580: 20 69 6e 74 09 09 54 65 73 74 73 74 61 74 69 63   int..Teststatic
1590: 70 6b 67 43 6d 64 20 5f 41 4e 53 49 5f 41 52 47  pkgCmd _ANSI_ARG
15a0: 53 5f 28 28 43 6c 69 65 6e 74 44 61 74 61 20 64  S_((ClientData d
15b0: 75 6d 6d 79 2c 0a 20 20 09 09 09 20 20 20 20 54  ummy,.  ...    T
15c0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
15d0: 70 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61  p, int argc, cha
15e0: 72 20 2a 2a 61 72 67 76 29 29 3b 0a 20 20 73 74  r **argv));.  st
15f0: 61 74 69 63 20 69 6e 74 09 09 50 72 65 74 65 6e  atic int..Preten
1600: 64 54 63 6c 70 53 74 61 74 20 5f 41 4e 53 49 5f  dTclpStat _ANSI_
1610: 41 52 47 53 5f 28 28 43 4f 4e 53 54 20 63 68 61  ARGS_((CONST cha
1620: 72 20 2a 70 61 74 68 2c 0a 2d 2d 2d 20 33 30 31  r *path,.--- 301
1630: 2c 33 30 36 20 2d 2d 2d 2d 0a 2a 2a 2a 2a 2a 2a  ,306 ----.******
1640: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 35 36  *********.*** 56
1650: 39 2c 35 37 37 20 2a 2a 2a 2a 0a 20 20 09 20 20  9,577 ****.  .  
1660: 20 20 28 54 63 6c 5f 43 6d 64 44 65 6c 65 74 65    (Tcl_CmdDelete
1670: 50 72 6f 63 20 2a 29 20 4e 55 4c 4c 29 3b 0a 20  Proc *) NULL);. 
1680: 20 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65 43       Tcl_CreateC
1690: 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22  ommand(interp, "
16a0: 74 65 73 74 73 65 74 70 6c 61 74 66 6f 72 6d 22  testsetplatform"
16b0: 2c 20 54 65 73 74 73 65 74 70 6c 61 74 66 6f 72  , Testsetplatfor
16c0: 6d 43 6d 64 2c 0a 20 20 09 20 20 20 20 28 43 6c  mCmd,.  .    (Cl
16d0: 69 65 6e 74 44 61 74 61 29 20 30 2c 20 28 54 63  ientData) 0, (Tc
16e0: 6c 5f 43 6d 64 44 65 6c 65 74 65 50 72 6f 63 20  l_CmdDeleteProc 
16f0: 2a 29 20 4e 55 4c 4c 29 3b 0a 2d 20 20 20 20 20  *) NULL);.-     
1700: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
1710: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 74 65  mand(interp, "te
1720: 73 74 73 65 74 72 65 63 75 72 73 69 6f 6e 6c 69  stsetrecursionli
1730: 6d 69 74 22 2c 0a 2d 20 09 20 20 20 20 54 65 73  mit",.- .    Tes
1740: 74 73 65 74 72 65 63 75 72 73 69 6f 6e 6c 69 6d  tsetrecursionlim
1750: 69 74 43 6d 64 2c 0a 2d 20 09 20 20 20 20 28 43  itCmd,.- .    (C
1760: 6c 69 65 6e 74 44 61 74 61 29 20 30 2c 20 28 54  lientData) 0, (T
1770: 63 6c 5f 43 6d 64 44 65 6c 65 74 65 50 72 6f 63  cl_CmdDeleteProc
1780: 20 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20   *) NULL);.     
1790: 20 54 63 6c 5f 43 72 65 61 74 65 43 6f 6d 6d 61   Tcl_CreateComma
17a0: 6e 64 28 69 6e 74 65 72 70 2c 20 22 74 65 73 74  nd(interp, "test
17b0: 73 74 61 74 69 63 70 6b 67 22 2c 20 54 65 73 74  staticpkg", Test
17c0: 73 74 61 74 69 63 70 6b 67 43 6d 64 2c 0a 20 20  staticpkgCmd,.  
17d0: 09 20 20 20 20 28 43 6c 69 65 6e 74 44 61 74 61  .    (ClientData
17e0: 29 20 30 2c 20 28 54 63 6c 5f 43 6d 64 44 65 6c  ) 0, (Tcl_CmdDel
17f0: 65 74 65 50 72 6f 63 20 2a 29 20 4e 55 4c 4c 29  eteProc *) NULL)
1800: 3b 0a 20 20 20 20 20 20 54 63 6c 5f 43 72 65 61  ;.      Tcl_Crea
1810: 74 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70  teCommand(interp
1820: 2c 20 22 74 65 73 74 74 72 61 6e 73 6c 61 74 65  , "testtranslate
1830: 66 69 6c 65 6e 61 6d 65 22 2c 0a 2d 2d 2d 20 35  filename",.--- 5
1840: 36 36 2c 35 37 31 20 2d 2d 2d 2d 0a 2a 2a 2a 2a  66,571 ----.****
1850: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20  ***********.*** 
1860: 33 32 38 33 2c 33 33 32 39 20 2a 2a 2a 2a 0a 20  3283,3329 ****. 
1870: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
1880: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20 7d 0a  urn TCL_OK;.  }.
1890: 2d 20 0c 0a 2d 20 2f 2a 0a 2d 20 20 2a 2d 2d 2d  - ..- /*.-  *---
18a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18e0: 2d 2d 2d 0a 2d 20 20 2a 0a 2d 20 20 2a 20 54 65  ---.-  *.-  * Te
18f0: 73 74 73 65 74 72 65 63 75 72 73 69 6f 6e 6c 69  stsetrecursionli
1900: 6d 69 74 43 6d 64 20 2d 2d 0a 2d 20 20 2a 0a 2d  mitCmd --.-  *.-
1910: 20 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75    *.This procedu
1920: 72 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  re implements th
1930: 65 20 22 74 65 73 74 73 65 74 72 65 63 75 72 73  e "testsetrecurs
1940: 69 6f 6e 6c 69 6d 69 74 22 20 63 6f 6d 6d 61 6e  ionlimit" comman
1950: 64 2e 20 49 74 20 69 73 0a 2d 20 20 2a 09 75 73  d. It is.-  *.us
1960: 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65  ed to change the
1970: 20 69 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f   interp recursio
1980: 6e 20 6c 69 6d 69 74 20 28 74 6f 20 74 65 73 74  n limit (to test
1990: 20 74 68 65 20 65 66 66 65 63 74 73 0a 2d 20 20   the effects.-  
19a0: 2a 20 20 20 20 20 20 6f 66 20 54 63 6c 5f 53 65  *      of Tcl_Se
19b0: 74 52 65 63 75 72 73 69 6f 6e 4c 69 6d 69 74 29  tRecursionLimit)
19c0: 2e 0a 2d 20 20 2a 0a 2d 20 20 2a 20 52 65 73 75  ..-  *.-  * Resu
19d0: 6c 74 73 3a 0a 2d 20 20 2a 09 41 20 73 74 61 6e  lts:.-  *.A stan
19e0: 64 61 72 64 20 54 63 6c 20 72 65 73 75 6c 74 2e  dard Tcl result.
19f0: 0a 2d 20 20 2a 0a 2d 20 20 2a 20 53 69 64 65 20  .-  *.-  * Side 
1a00: 65 66 66 65 63 74 73 3a 0a 2d 20 20 2a 09 53 65  effects:.-  *.Se
1a10: 74 73 20 74 68 65 20 69 6e 74 65 72 70 27 73 20  ts the interp's 
1a20: 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 2e  recursion limit.
1a30: 0a 2d 20 20 2a 0a 2d 20 20 2a 2d 2d 2d 2d 2d 2d  .-  *.-  *------
1a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a80: 0a 2d 20 20 2a 2f 0a 2d 20 0a 2d 20 73 74 61 74  .-  */.- .- stat
1a90: 69 63 20 69 6e 74 0a 2d 20 54 65 73 74 73 65 74  ic int.- Testset
1aa0: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 43 6d  recursionlimitCm
1ab0: 64 28 64 75 6d 6d 79 2c 20 69 6e 74 65 72 70 2c  d(dummy, interp,
1ac0: 20 6f 62 6a 63 2c 20 6f 62 6a 76 29 0a 2d 20 20   objc, objv).-  
1ad0: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 64 75     ClientData du
1ae0: 6d 6d 79 3b 09 09 2f 2a 20 4e 6f 74 20 75 73 65  mmy;../* Not use
1af0: 64 2e 20 2a 2f 0a 2d 20 20 20 20 20 54 63 6c 5f  d. */.-     Tcl_
1b00: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 09  Interp *interp;.
1b10: 09 2f 2a 20 43 75 72 72 65 6e 74 20 69 6e 74 65  ./* Current inte
1b20: 72 70 72 65 74 65 72 2e 20 2a 2f 0a 2d 20 20 20  rpreter. */.-   
1b30: 20 20 69 6e 74 20 6f 62 6a 63 3b 09 09 09 2f 2a    int objc;.../*
1b40: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
1b50: 65 6e 74 73 2e 20 2a 2f 0a 2d 20 20 20 20 20 54  ents. */.-     T
1b60: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
1b70: 6a 76 5b 5d 3b 09 2f 2a 20 54 68 65 20 61 72 67  jv[];./* The arg
1b80: 75 6d 65 6e 74 20 6f 62 6a 65 63 74 73 2e 20 2a  ument objects. *
1b90: 2f 0a 2d 20 7b 0a 2d 20 20 20 20 20 69 6e 74 20  /.- {.-     int 
1ba0: 20 20 20 20 76 61 6c 75 65 3b 0a 2d 20 0a 2d 20      value;.- .- 
1bb0: 20 20 20 20 69 66 20 28 6f 62 6a 63 20 21 3d 20      if (objc != 
1bc0: 32 29 20 7b 0a 2d 20 20 20 20 20 09 54 63 6c 5f  2) {.-     .Tcl_
1bd0: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
1be0: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 69  erp, 1, objv, "i
1bf0: 6e 74 65 67 65 72 22 29 3b 0a 2d 20 09 72 65 74  nteger");.- .ret
1c00: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2d  urn TCL_ERROR;.-
1c10: 20 20 20 20 20 7d 0a 2d 20 20 20 20 20 69 66 20       }.-     if 
1c20: 28 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f  (Tcl_GetIntFromO
1c30: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
1c40: 31 5d 2c 20 26 76 61 6c 75 65 29 20 21 3d 20 54  1], &value) != T
1c50: 43 4c 5f 4f 4b 29 20 7b 0a 2d 20 09 72 65 74 75  CL_OK) {.- .retu
1c60: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2d 20  rn TCL_ERROR;.- 
1c70: 20 20 20 20 7d 0a 2d 20 20 20 20 20 76 61 6c 75      }.-     valu
1c80: 65 20 3d 20 54 63 6c 5f 53 65 74 52 65 63 75 72  e = Tcl_SetRecur
1c90: 73 69 6f 6e 4c 69 6d 69 74 28 69 6e 74 65 72 70  sionLimit(interp
1ca0: 2c 20 76 61 6c 75 65 29 3b 0a 2d 20 20 20 20 20  , value);.-     
1cb0: 54 63 6c 5f 53 65 74 49 6e 74 4f 62 6a 28 54 63  Tcl_SetIntObj(Tc
1cc0: 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_GetObjResult(i
1cd0: 6e 74 65 72 70 29 2c 20 76 61 6c 75 65 29 3b 0a  nterp), value);.
1ce0: 2d 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  -     return TCL
1cf0: 5f 4f 4b 3b 0a 2d 20 7d 0a 2d 20 0a 2d 20 0a 20  _OK;.- }.- .- . 
1d00: 20 0c 0a 20 20 2f 2a 0a 20 20 20 2a 2d 2d 2d 2d   ..  /*.   *----
1d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d50: 2d 2d 0a 2d 2d 2d 20 33 32 37 37 2c 33 32 38 32  --.--- 3277,3282
1d60: 20 2d 2d 2d 2d 0a 2a 2a 2a 20 2e 2e 2f 6f 72 69   ----.*** ../ori
1d70: 67 2f 74 65 73 74 73 2f 69 6e 74 65 72 70 2e 74  g/tests/interp.t
1d80: 65 73 74 09 46 72 69 20 4e 6f 76 20 31 36 20 31  est.Fri Nov 16 1
1d90: 37 3a 32 38 3a 30 38 20 32 30 30 31 0a 2d 2d 2d  7:28:08 2001.---
1da0: 20 74 65 73 74 73 2f 69 6e 74 65 72 70 2e 74 65   tests/interp.te
1db0: 73 74 09 57 65 64 20 46 65 62 20 32 37 20 31 32  st.Wed Feb 27 12
1dc0: 3a 33 30 3a 33 35 20 32 30 30 32 0a 2a 2a 2a 2a  :30:35 2002.****
1dd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20  ***********.*** 
1de0: 33 37 2c 34 33 20 2a 2a 2a 2a 0a 20 20 7d 20 7b  37,43 ****.  } {
1df0: 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  1 {wrong # args:
1e00: 20 73 68 6f 75 6c 64 20 62 65 20 22 69 6e 74 65   should be "inte
1e10: 72 70 20 63 6d 64 20 3f 61 72 67 20 2e 2e 2e 3f  rp cmd ?arg ...?
1e20: 22 7d 7d 0a 20 20 74 65 73 74 20 69 6e 74 65 72  "}}.  test inter
1e30: 70 2d 31 2e 32 20 7b 6f 70 74 69 6f 6e 73 20 66  p-1.2 {options f
1e40: 6f 72 20 69 6e 74 65 72 70 20 63 6f 6d 6d 61 6e  or interp comman
1e50: 64 7d 20 7b 0a 20 20 20 20 20 20 6c 69 73 74 20  d} {.      list 
1e60: 5b 63 61 74 63 68 20 7b 69 6e 74 65 72 70 20 66  [catch {interp f
1e70: 72 6f 62 6f 78 7d 20 6d 73 67 5d 20 24 6d 73 67  robox} msg] $msg
1e80: 0a 21 20 7d 20 7b 31 20 7b 62 61 64 20 6f 70 74  .! } {1 {bad opt
1e90: 69 6f 6e 20 22 66 72 6f 62 6f 78 22 3a 20 6d 75  ion "frobox": mu
1ea0: 73 74 20 62 65 20 61 6c 69 61 73 2c 20 61 6c 69  st be alias, ali
1eb0: 61 73 65 73 2c 20 63 72 65 61 74 65 2c 20 64 65  ases, create, de
1ec0: 6c 65 74 65 2c 20 65 76 61 6c 2c 20 65 78 69 73  lete, eval, exis
1ed0: 74 73 2c 20 65 78 70 6f 73 65 2c 20 68 69 64 65  ts, expose, hide
1ee0: 2c 20 68 69 64 64 65 6e 2c 20 69 73 73 61 66 65  , hidden, issafe
1ef0: 2c 20 69 6e 76 6f 6b 65 68 69 64 64 65 6e 2c 20  , invokehidden, 
1f00: 6d 61 72 6b 74 72 75 73 74 65 64 2c 20 73 6c 61  marktrusted, sla
1f10: 76 65 73 2c 20 73 68 61 72 65 2c 20 74 61 72 67  ves, share, targ
1f20: 65 74 2c 20 6f 72 20 74 72 61 6e 73 66 65 72 7d  et, or transfer}
1f30: 7d 0a 20 20 74 65 73 74 20 69 6e 74 65 72 70 2d  }.  test interp-
1f40: 31 2e 33 20 7b 6f 70 74 69 6f 6e 73 20 66 6f 72  1.3 {options for
1f50: 20 69 6e 74 65 72 70 20 63 6f 6d 6d 61 6e 64 7d   interp command}
1f60: 20 7b 0a 20 20 20 20 20 20 69 6e 74 65 72 70 20   {.      interp 
1f70: 64 65 6c 65 74 65 0a 20 20 7d 20 22 22 0a 2d 2d  delete.  } "".--
1f80: 2d 20 33 37 2c 34 33 20 2d 2d 2d 2d 0a 20 20 7d  - 37,43 ----.  }
1f90: 20 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67   {1 {wrong # arg
1fa0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 69 6e  s: should be "in
1fb0: 74 65 72 70 20 63 6d 64 20 3f 61 72 67 20 2e 2e  terp cmd ?arg ..
1fc0: 2e 3f 22 7d 7d 0a 20 20 74 65 73 74 20 69 6e 74  .?"}}.  test int
1fd0: 65 72 70 2d 31 2e 32 20 7b 6f 70 74 69 6f 6e 73  erp-1.2 {options
1fe0: 20 66 6f 72 20 69 6e 74 65 72 70 20 63 6f 6d 6d   for interp comm
1ff0: 61 6e 64 7d 20 7b 0a 20 20 20 20 20 20 6c 69 73  and} {.      lis
2000: 74 20 5b 63 61 74 63 68 20 7b 69 6e 74 65 72 70  t [catch {interp
2010: 20 66 72 6f 62 6f 78 7d 20 6d 73 67 5d 20 24 6d   frobox} msg] $m
2020: 73 67 0a 21 20 7d 20 7b 31 20 7b 62 61 64 20 6f  sg.! } {1 {bad o
2030: 70 74 69 6f 6e 20 22 66 72 6f 62 6f 78 22 3a 20  ption "frobox": 
2040: 6d 75 73 74 20 62 65 20 61 6c 69 61 73 2c 20 61  must be alias, a
2050: 6c 69 61 73 65 73 2c 20 63 72 65 61 74 65 2c 20  liases, create, 
2060: 64 65 6c 65 74 65 2c 20 65 76 61 6c 2c 20 65 78  delete, eval, ex
2070: 69 73 74 73 2c 20 65 78 70 6f 73 65 2c 20 68 69  ists, expose, hi
2080: 64 65 2c 20 68 69 64 64 65 6e 2c 20 69 73 73 61  de, hidden, issa
2090: 66 65 2c 20 69 6e 76 6f 6b 65 68 69 64 64 65 6e  fe, invokehidden
20a0: 2c 20 6d 61 72 6b 74 72 75 73 74 65 64 2c 20 72  , marktrusted, r
20b0: 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 2c 20 73  ecursionlimit, s
20c0: 6c 61 76 65 73 2c 20 73 68 61 72 65 2c 20 74 61  laves, share, ta
20d0: 72 67 65 74 2c 20 6f 72 20 74 72 61 6e 73 66 65  rget, or transfe
20e0: 72 7d 7d 0a 20 20 74 65 73 74 20 69 6e 74 65 72  r}}.  test inter
20f0: 70 2d 31 2e 33 20 7b 6f 70 74 69 6f 6e 73 20 66  p-1.3 {options f
2100: 6f 72 20 69 6e 74 65 72 70 20 63 6f 6d 6d 61 6e  or interp comman
2110: 64 7d 20 7b 0a 20 20 20 20 20 20 69 6e 74 65 72  d} {.      inter
2120: 70 20 64 65 6c 65 74 65 0a 20 20 7d 20 22 22 0a  p delete.  } "".
2130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
2140: 2a 2a 2a 20 35 35 2c 37 31 20 2a 2a 2a 2a 0a 20  *** 55,71 ****. 
2150: 20 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61   } {1 {wrong # a
2160: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22  rgs: should be "
2170: 69 6e 74 65 72 70 20 73 6c 61 76 65 73 20 3f 70  interp slaves ?p
2180: 61 74 68 3f 22 7d 7d 0a 20 20 74 65 73 74 20 69  ath?"}}.  test i
2190: 6e 74 65 72 70 2d 31 2e 37 20 7b 6f 70 74 69 6f  nterp-1.7 {optio
21a0: 6e 73 20 66 6f 72 20 69 6e 74 65 72 70 20 63 6f  ns for interp co
21b0: 6d 6d 61 6e 64 7d 20 7b 0a 20 20 20 20 20 20 6c  mmand} {.      l
21c0: 69 73 74 20 5b 63 61 74 63 68 20 7b 69 6e 74 65  ist [catch {inte
21d0: 72 70 20 68 65 6c 6c 6f 7d 20 6d 73 67 5d 20 24  rp hello} msg] $
21e0: 6d 73 67 0a 21 20 7d 20 7b 31 20 7b 62 61 64 20  msg.! } {1 {bad 
21f0: 6f 70 74 69 6f 6e 20 22 68 65 6c 6c 6f 22 3a 20  option "hello": 
2200: 6d 75 73 74 20 62 65 20 61 6c 69 61 73 2c 20 61  must be alias, a
2210: 6c 69 61 73 65 73 2c 20 63 72 65 61 74 65 2c 20  liases, create, 
2220: 64 65 6c 65 74 65 2c 20 65 76 61 6c 2c 20 65 78  delete, eval, ex
2230: 69 73 74 73 2c 20 65 78 70 6f 73 65 2c 20 68 69  ists, expose, hi
2240: 64 65 2c 20 68 69 64 64 65 6e 2c 20 69 73 73 61  de, hidden, issa
2250: 66 65 2c 20 69 6e 76 6f 6b 65 68 69 64 64 65 6e  fe, invokehidden
2260: 2c 20 6d 61 72 6b 74 72 75 73 74 65 64 2c 20 73  , marktrusted, s
2270: 6c 61 76 65 73 2c 20 73 68 61 72 65 2c 20 74 61  laves, share, ta
2280: 72 67 65 74 2c 20 6f 72 20 74 72 61 6e 73 66 65  rget, or transfe
2290: 72 7d 7d 0a 20 20 74 65 73 74 20 69 6e 74 65 72  r}}.  test inter
22a0: 70 2d 31 2e 38 20 7b 6f 70 74 69 6f 6e 73 20 66  p-1.8 {options f
22b0: 6f 72 20 69 6e 74 65 72 70 20 63 6f 6d 6d 61 6e  or interp comman
22c0: 64 7d 20 7b 0a 20 20 20 20 20 20 6c 69 73 74 20  d} {.      list 
22d0: 5b 63 61 74 63 68 20 7b 69 6e 74 65 72 70 20 2d  [catch {interp -
22e0: 66 72 6f 62 6f 7a 7d 20 6d 73 67 5d 20 24 6d 73  froboz} msg] $ms
22f0: 67 0a 21 20 7d 20 7b 31 20 7b 62 61 64 20 6f 70  g.! } {1 {bad op
2300: 74 69 6f 6e 20 22 2d 66 72 6f 62 6f 7a 22 3a 20  tion "-froboz": 
2310: 6d 75 73 74 20 62 65 20 61 6c 69 61 73 2c 20 61  must be alias, a
2320: 6c 69 61 73 65 73 2c 20 63 72 65 61 74 65 2c 20  liases, create, 
2330: 64 65 6c 65 74 65 2c 20 65 76 61 6c 2c 20 65 78  delete, eval, ex
2340: 69 73 74 73 2c 20 65 78 70 6f 73 65 2c 20 68 69  ists, expose, hi
2350: 64 65 2c 20 68 69 64 64 65 6e 2c 20 69 73 73 61  de, hidden, issa
2360: 66 65 2c 20 69 6e 76 6f 6b 65 68 69 64 64 65 6e  fe, invokehidden
2370: 2c 20 6d 61 72 6b 74 72 75 73 74 65 64 2c 20 73  , marktrusted, s
2380: 6c 61 76 65 73 2c 20 73 68 61 72 65 2c 20 74 61  laves, share, ta
2390: 72 67 65 74 2c 20 6f 72 20 74 72 61 6e 73 66 65  rget, or transfe
23a0: 72 7d 7d 0a 20 20 74 65 73 74 20 69 6e 74 65 72  r}}.  test inter
23b0: 70 2d 31 2e 39 20 7b 6f 70 74 69 6f 6e 73 20 66  p-1.9 {options f
23c0: 6f 72 20 69 6e 74 65 72 70 20 63 6f 6d 6d 61 6e  or interp comman
23d0: 64 7d 20 7b 0a 20 20 20 20 20 20 6c 69 73 74 20  d} {.      list 
23e0: 5b 63 61 74 63 68 20 7b 69 6e 74 65 72 70 20 2d  [catch {interp -
23f0: 66 72 6f 62 6f 7a 20 2d 73 61 66 65 7d 20 6d 73  froboz -safe} ms
2400: 67 5d 20 24 6d 73 67 0a 21 20 7d 20 7b 31 20 7b  g] $msg.! } {1 {
2410: 62 61 64 20 6f 70 74 69 6f 6e 20 22 2d 66 72 6f  bad option "-fro
2420: 62 6f 7a 22 3a 20 6d 75 73 74 20 62 65 20 61 6c  boz": must be al
2430: 69 61 73 2c 20 61 6c 69 61 73 65 73 2c 20 63 72  ias, aliases, cr
2440: 65 61 74 65 2c 20 64 65 6c 65 74 65 2c 20 65 76  eate, delete, ev
2450: 61 6c 2c 20 65 78 69 73 74 73 2c 20 65 78 70 6f  al, exists, expo
2460: 73 65 2c 20 68 69 64 65 2c 20 68 69 64 64 65 6e  se, hide, hidden
2470: 2c 20 69 73 73 61 66 65 2c 20 69 6e 76 6f 6b 65  , issafe, invoke
2480: 68 69 64 64 65 6e 2c 20 6d 61 72 6b 74 72 75 73  hidden, marktrus
2490: 74 65 64 2c 20 73 6c 61 76 65 73 2c 20 73 68 61  ted, slaves, sha
24a0: 72 65 2c 20 74 61 72 67 65 74 2c 20 6f 72 20 74  re, target, or t
24b0: 72 61 6e 73 66 65 72 7d 7d 20 0a 20 20 74 65 73  ransfer}} .  tes
24c0: 74 20 69 6e 74 65 72 70 2d 31 2e 31 30 20 7b 6f  t interp-1.10 {o
24d0: 70 74 69 6f 6e 73 20 66 6f 72 20 69 6e 74 65 72  ptions for inter
24e0: 70 20 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 20 20 20  p command} {.   
24f0: 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b     list [catch {
2500: 69 6e 74 65 72 70 20 74 61 72 67 65 74 7d 20 6d  interp target} m
2510: 73 67 5d 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20  sg] $msg.  } {1 
2520: 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  {wrong # args: s
2530: 68 6f 75 6c 64 20 62 65 20 22 69 6e 74 65 72 70  hould be "interp
2540: 20 74 61 72 67 65 74 20 70 61 74 68 20 61 6c 69   target path ali
2550: 61 73 22 7d 7d 0a 20 20 0a 20 20 23 20 50 61 72  as"}}.  .  # Par
2560: 74 20 31 3a 20 42 61 73 69 63 20 69 6e 74 65 72  t 1: Basic inter
2570: 70 72 65 74 65 72 20 63 72 65 61 74 69 6f 6e 20  preter creation 
2580: 74 65 73 74 73 3a 0a 20 20 74 65 73 74 20 69 6e  tests:.  test in
2590: 74 65 72 70 2d 32 2e 31 20 7b 62 61 73 69 63 20  terp-2.1 {basic 
25a0: 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61  interpreter crea
25b0: 74 69 6f 6e 7d 20 7b 0a 20 20 20 20 20 20 69 6e  tion} {.      in
25c0: 74 65 72 70 20 63 72 65 61 74 65 20 61 0a 2d 2d  terp create a.--
25d0: 2d 20 35 35 2c 37 32 20 2d 2d 2d 2d 0a 20 20 7d  - 55,72 ----.  }
25e0: 20 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67   {1 {wrong # arg
25f0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 69 6e  s: should be "in
2600: 74 65 72 70 20 73 6c 61 76 65 73 20 3f 70 61 74  terp slaves ?pat
2610: 68 3f 22 7d 7d 0a 20 20 74 65 73 74 20 69 6e 74  h?"}}.  test int
2620: 65 72 70 2d 31 2e 37 20 7b 6f 70 74 69 6f 6e 73  erp-1.7 {options
2630: 20 66 6f 72 20 69 6e 74 65 72 70 20 63 6f 6d 6d   for interp comm
2640: 61 6e 64 7d 20 7b 0a 20 20 20 20 20 20 6c 69 73  and} {.      lis
2650: 74 20 5b 63 61 74 63 68 20 7b 69 6e 74 65 72 70  t [catch {interp
2660: 20 68 65 6c 6c 6f 7d 20 6d 73 67 5d 20 24 6d 73   hello} msg] $ms
2670: 67 0a 21 20 7d 20 7b 31 20 7b 62 61 64 20 6f 70  g.! } {1 {bad op
2680: 74 69 6f 6e 20 22 68 65 6c 6c 6f 22 3a 20 6d 75  tion "hello": mu
2690: 73 74 20 62 65 20 61 6c 69 61 73 2c 20 61 6c 69  st be alias, ali
26a0: 61 73 65 73 2c 20 63 72 65 61 74 65 2c 20 64 65  ases, create, de
26b0: 6c 65 74 65 2c 20 65 76 61 6c 2c 20 65 78 69 73  lete, eval, exis
26c0: 74 73 2c 20 65 78 70 6f 73 65 2c 20 68 69 64 65  ts, expose, hide
26d0: 2c 20 68 69 64 64 65 6e 2c 20 69 73 73 61 66 65  , hidden, issafe
26e0: 2c 20 69 6e 76 6f 6b 65 68 69 64 64 65 6e 2c 20  , invokehidden, 
26f0: 6d 61 72 6b 74 72 75 73 74 65 64 2c 20 72 65 63  marktrusted, rec
2700: 75 72 73 69 6f 6e 6c 69 6d 69 74 2c 20 73 6c 61  ursionlimit, sla
2710: 76 65 73 2c 20 73 68 61 72 65 2c 20 74 61 72 67  ves, share, targ
2720: 65 74 2c 20 6f 72 20 74 72 61 6e 73 66 65 72 7d  et, or transfer}
2730: 7d 0a 20 20 74 65 73 74 20 69 6e 74 65 72 70 2d  }.  test interp-
2740: 31 2e 38 20 7b 6f 70 74 69 6f 6e 73 20 66 6f 72  1.8 {options for
2750: 20 69 6e 74 65 72 70 20 63 6f 6d 6d 61 6e 64 7d   interp command}
2760: 20 7b 0a 20 20 20 20 20 20 6c 69 73 74 20 5b 63   {.      list [c
2770: 61 74 63 68 20 7b 69 6e 74 65 72 70 20 2d 66 72  atch {interp -fr
2780: 6f 62 6f 7a 7d 20 6d 73 67 5d 20 24 6d 73 67 0a  oboz} msg] $msg.
2790: 21 20 7d 20 7b 31 20 7b 62 61 64 20 6f 70 74 69  ! } {1 {bad opti
27a0: 6f 6e 20 22 2d 66 72 6f 62 6f 7a 22 3a 20 6d 75  on "-froboz": mu
27b0: 73 74 20 62 65 20 61 6c 69 61 73 2c 20 61 6c 69  st be alias, ali
27c0: 61 73 65 73 2c 20 63 72 65 61 74 65 2c 20 64 65  ases, create, de
27d0: 6c 65 74 65 2c 20 65 76 61 6c 2c 20 65 78 69 73  lete, eval, exis
27e0: 74 73 2c 20 65 78 70 6f 73 65 2c 20 68 69 64 65  ts, expose, hide
27f0: 2c 20 68 69 64 64 65 6e 2c 20 69 73 73 61 66 65  , hidden, issafe
2800: 2c 20 69 6e 76 6f 6b 65 68 69 64 64 65 6e 2c 20  , invokehidden, 
2810: 6d 61 72 6b 74 72 75 73 74 65 64 2c 20 72 65 63  marktrusted, rec
2820: 75 72 73 69 6f 6e 6c 69 6d 69 74 2c 20 73 6c 61  ursionlimit, sla
2830: 76 65 73 2c 20 73 68 61 72 65 2c 20 74 61 72 67  ves, share, targ
2840: 65 74 2c 20 6f 72 20 74 72 61 6e 73 66 65 72 7d  et, or transfer}
2850: 7d 0a 20 20 74 65 73 74 20 69 6e 74 65 72 70 2d  }.  test interp-
2860: 31 2e 39 20 7b 6f 70 74 69 6f 6e 73 20 66 6f 72  1.9 {options for
2870: 20 69 6e 74 65 72 70 20 63 6f 6d 6d 61 6e 64 7d   interp command}
2880: 20 7b 0a 20 20 20 20 20 20 6c 69 73 74 20 5b 63   {.      list [c
2890: 61 74 63 68 20 7b 69 6e 74 65 72 70 20 2d 66 72  atch {interp -fr
28a0: 6f 62 6f 7a 20 2d 73 61 66 65 7d 20 6d 73 67 5d  oboz -safe} msg]
28b0: 20 24 6d 73 67 0a 21 20 7d 20 7b 31 20 7b 62 61   $msg.! } {1 {ba
28c0: 64 20 6f 70 74 69 6f 6e 20 22 2d 66 72 6f 62 6f  d option "-frobo
28d0: 7a 22 3a 20 6d 75 73 74 20 62 65 20 61 6c 69 61  z": must be alia
28e0: 73 2c 20 61 6c 69 61 73 65 73 2c 20 63 72 65 61  s, aliases, crea
28f0: 74 65 2c 20 64 65 6c 65 74 65 2c 20 65 76 61 6c  te, delete, eval
2900: 2c 20 65 78 69 73 74 73 2c 20 65 78 70 6f 73 65  , exists, expose
2910: 2c 20 68 69 64 65 2c 20 68 69 64 64 65 6e 2c 20  , hide, hidden, 
2920: 69 73 73 61 66 65 2c 20 69 6e 76 6f 6b 65 68 69  issafe, invokehi
2930: 64 64 65 6e 2c 20 6d 61 72 6b 74 72 75 73 74 65  dden, marktruste
2940: 64 2c 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  d, recursionlimi
2950: 74 2c 20 73 6c 61 76 65 73 2c 20 73 68 61 72 65  t, slaves, share
2960: 2c 20 74 61 72 67 65 74 2c 20 6f 72 20 74 72 61  , target, or tra
2970: 6e 73 66 65 72 7d 7d 20 0a 20 20 74 65 73 74 20  nsfer}} .  test 
2980: 69 6e 74 65 72 70 2d 31 2e 31 30 20 7b 6f 70 74  interp-1.10 {opt
2990: 69 6f 6e 73 20 66 6f 72 20 69 6e 74 65 72 70 20  ions for interp 
29a0: 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 20 20 20 20 20  command} {.     
29b0: 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 69 6e   list [catch {in
29c0: 74 65 72 70 20 74 61 72 67 65 74 7d 20 6d 73 67  terp target} msg
29d0: 5d 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 77  ] $msg.  } {1 {w
29e0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
29f0: 75 6c 64 20 62 65 20 22 69 6e 74 65 72 70 20 74  uld be "interp t
2a00: 61 72 67 65 74 20 70 61 74 68 20 61 6c 69 61 73  arget path alias
2a10: 22 7d 7d 0a 20 20 0a 2b 20 0a 20 20 23 20 50 61  "}}.  .+ .  # Pa
2a20: 72 74 20 31 3a 20 42 61 73 69 63 20 69 6e 74 65  rt 1: Basic inte
2a30: 72 70 72 65 74 65 72 20 63 72 65 61 74 69 6f 6e  rpreter creation
2a40: 20 74 65 73 74 73 3a 0a 20 20 74 65 73 74 20 69   tests:.  test i
2a50: 6e 74 65 72 70 2d 32 2e 31 20 7b 62 61 73 69 63  nterp-2.1 {basic
2a60: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65   interpreter cre
2a70: 61 74 69 6f 6e 7d 20 7b 0a 20 20 20 20 20 20 69  ation} {.      i
2a80: 6e 74 65 72 70 20 63 72 65 61 74 65 20 61 0a 2a  nterp create a.*
2a90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
2aa0: 2a 2a 20 34 34 38 2c 34 35 34 20 2a 2a 2a 2a 0a  ** 448,454 ****.
2ab0: 20 20 20 20 20 20 69 6e 74 65 72 70 20 63 72 65        interp cre
2ac0: 61 74 65 20 7b 61 20 78 33 20 66 6f 6f 7d 0a 20  ate {a x3 foo}. 
2ad0: 20 20 20 20 20 61 20 65 76 61 6c 20 78 33 20 65       a eval x3 e
2ae0: 76 61 6c 20 66 6f 6f 20 69 73 73 61 66 65 0a 20  val foo issafe. 
2af0: 20 7d 20 31 0a 21 20 74 65 73 74 20 69 6e 74 65   } 1.! test inte
2b00: 72 70 2d 37 2e 36 20 7b 74 65 73 74 69 6e 67 20  rp-7.6 {testing 
2b10: 69 73 73 61 66 65 20 61 72 67 20 63 68 65 63 6b  issafe arg check
2b20: 69 6e 67 7d 20 7b 0a 20 20 20 20 20 20 63 61 74  ing} {.      cat
2b30: 63 68 20 7b 69 6e 74 65 72 70 20 63 72 65 61 74  ch {interp creat
2b40: 65 20 61 7d 0a 20 20 20 20 20 20 6c 69 73 74 20  e a}.      list 
2b50: 5b 63 61 74 63 68 20 7b 61 20 69 73 73 61 66 65  [catch {a issafe
2b60: 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67 73 7d 20   too many args} 
2b70: 6d 73 67 5d 20 24 6d 73 67 0a 20 20 7d 20 7b 31  msg] $msg.  } {1
2b80: 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   {wrong # args: 
2b90: 73 68 6f 75 6c 64 20 62 65 20 22 61 20 69 73 73  should be "a iss
2ba0: 61 66 65 22 7d 7d 0a 2d 2d 2d 20 34 34 39 2c 34  afe"}}.--- 449,4
2bb0: 35 35 20 2d 2d 2d 2d 0a 20 20 20 20 20 20 69 6e  55 ----.      in
2bc0: 74 65 72 70 20 63 72 65 61 74 65 20 7b 61 20 78  terp create {a x
2bd0: 33 20 66 6f 6f 7d 0a 20 20 20 20 20 20 61 20 65  3 foo}.      a e
2be0: 76 61 6c 20 78 33 20 65 76 61 6c 20 66 6f 6f 20  val x3 eval foo 
2bf0: 69 73 73 61 66 65 0a 20 20 7d 20 31 0a 21 20 74  issafe.  } 1.! t
2c00: 65 73 74 20 69 6e 74 65 72 70 2d 31 33 2e 34 20  est interp-13.4 
2c10: 7b 74 65 73 74 69 6e 67 20 69 73 73 61 66 65 20  {testing issafe 
2c20: 61 72 67 20 63 68 65 63 6b 69 6e 67 7d 20 7b 0a  arg checking} {.
2c30: 20 20 20 20 20 20 63 61 74 63 68 20 7b 69 6e 74        catch {int
2c40: 65 72 70 20 63 72 65 61 74 65 20 61 7d 0a 20 20  erp create a}.  
2c50: 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20      list [catch 
2c60: 7b 61 20 69 73 73 61 66 65 20 74 6f 6f 20 6d 61  {a issafe too ma
2c70: 6e 79 20 61 72 67 73 7d 20 6d 73 67 5d 20 24 6d  ny args} msg] $m
2c80: 73 67 0a 20 20 7d 20 7b 31 20 7b 77 72 6f 6e 67  sg.  } {1 {wrong
2c90: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
2ca0: 62 65 20 22 61 20 69 73 73 61 66 65 22 7d 7d 0a  be "a issafe"}}.
2cb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
2cc0: 2a 2a 2a 20 32 32 37 38 2c 32 33 30 39 20 2a 2a  *** 2278,2309 **
2cd0: 2a 2a 0a 20 20 20 20 20 20 73 65 74 20 72 0a 20  **.      set r. 
2ce0: 20 7d 20 7b 7d 0a 20 20 0a 21 20 23 20 54 65 73   } {}.  .! # Tes
2cf0: 74 73 20 6f 66 20 72 65 63 75 72 73 69 6f 6e 6c  ts of recursionl
2d00: 69 6d 69 74 0a 21 20 23 20 57 65 20 6e 65 65 64  imit.! # We need
2d10: 20 74 65 73 74 73 65 74 72 65 63 75 72 73 69 6f   testsetrecursio
2d20: 6e 6c 69 6d 69 74 20 73 6f 20 77 65 20 6e 65 65  nlimit so we nee
2d30: 64 20 54 63 6c 74 65 73 74 20 70 61 63 6b 61 67  d Tcltest packag
2d40: 65 0a 21 20 69 66 20 7b 5b 63 61 74 63 68 20 7b  e.! if {[catch {
2d50: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
2d60: 54 63 6c 74 65 73 74 7d 20 6d 73 67 5d 7d 20 7b  Tcltest} msg]} {
2d70: 0a 21 20 20 20 20 20 70 75 74 73 20 22 54 68 69  .!     puts "Thi
2d80: 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 68 61  s application ha
2d90: 73 6e 27 74 20 62 65 65 6e 20 63 6f 6d 70 69 6c  sn't been compil
2da0: 65 64 20 77 69 74 68 20 54 63 6c 74 65 73 74 22  ed with Tcltest"
2db0: 0a 21 20 20 20 20 20 70 75 74 73 20 22 73 6b 69  .!     puts "ski
2dc0: 70 70 69 6e 67 20 72 65 6d 69 6e 69 6e 67 20 69  pping remining i
2dd0: 6e 74 65 72 70 20 74 65 73 74 73 20 74 68 61 74  nterp tests that
2de0: 20 72 65 6c 69 65 73 20 6f 6e 20 69 74 2e 22 0a   relies on it.".
2df0: 21 20 7d 20 65 6c 73 65 20 7b 0a 21 20 20 20 20  ! } else {.!    
2e00: 20 23 20 0a 21 20 74 65 73 74 20 69 6e 74 65 72   # .! test inter
2e10: 70 2d 32 39 2e 31 20 7b 72 65 63 75 72 73 69 6f  p-29.1 {recursio
2e20: 6e 20 6c 69 6d 69 74 7d 20 7b 0a 20 20 20 20 20  n limit} {.     
2e30: 20 73 65 74 20 69 20 5b 69 6e 74 65 72 70 20 63   set i [interp c
2e40: 72 65 61 74 65 5d 0a 2d 20 20 20 20 20 6c 6f 61  reate].-     loa
2e50: 64 20 7b 7d 20 54 63 6c 74 65 73 74 20 24 69 0a  d {} Tcltest $i.
2e60: 20 20 20 20 20 20 73 65 74 20 72 20 5b 69 6e 74        set r [int
2e70: 65 72 70 20 65 76 61 6c 20 24 69 20 7b 0a 21 20  erp eval $i {.! 
2e80: 09 74 65 73 74 73 65 74 72 65 63 75 72 73 69 6f  .testsetrecursio
2e90: 6e 6c 69 6d 69 74 20 35 30 0a 20 20 09 70 72 6f  nlimit 50.  .pro
2ea0: 63 20 70 20 7b 7d 20 7b 69 6e 63 72 20 3a 3a 69  c p {} {incr ::i
2eb0: 3b 20 70 7d 0a 20 20 09 73 65 74 20 69 20 30 0a  ; p}.  .set i 0.
2ec0: 21 20 09 63 61 74 63 68 20 70 0a 21 20 09 73 65  ! .catch p.! .se
2ed0: 74 20 69 0a 20 20 20 20 20 20 7d 5d 0a 20 20 20  t i.      }].   
2ee0: 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65 20    interp delete 
2ef0: 24 69 0a 20 20 20 20 20 73 65 74 20 72 0a 21 20  $i.     set r.! 
2f00: 7d 20 34 39 0a 20 20 0a 21 20 74 65 73 74 20 69  } 49.  .! test i
2f10: 6e 74 65 72 70 2d 32 39 2e 32 20 7b 72 65 63 75  nterp-29.2 {recu
2f20: 72 73 69 6f 6e 20 6c 69 6d 69 74 20 69 6e 68 65  rsion limit inhe
2f30: 72 69 74 61 6e 63 65 7d 20 7b 0a 20 20 20 20 20  ritance} {.     
2f40: 20 73 65 74 20 69 20 5b 69 6e 74 65 72 70 20 63   set i [interp c
2f50: 72 65 61 74 65 5d 0a 2d 20 20 20 20 20 6c 6f 61  reate].-     loa
2f60: 64 20 7b 7d 20 54 63 6c 74 65 73 74 20 24 69 0a  d {} Tcltest $i.
2f70: 20 20 20 20 20 20 73 65 74 20 69 69 20 5b 69 6e        set ii [in
2f80: 74 65 72 70 20 65 76 61 6c 20 24 69 20 7b 0a 21  terp eval $i {.!
2f90: 20 09 74 65 73 74 73 65 74 72 65 63 75 72 73 69   .testsetrecursi
2fa0: 6f 6e 6c 69 6d 69 74 20 35 30 0a 20 20 09 69 6e  onlimit 50.  .in
2fb0: 74 65 72 70 20 63 72 65 61 74 65 0a 20 20 20 20  terp create.    
2fc0: 20 20 7d 5d 0a 20 20 20 20 20 20 73 65 74 20 72    }].      set r
2fd0: 20 5b 69 6e 74 65 72 70 20 65 76 61 6c 20 5b 6c   [interp eval [l
2fe0: 69 73 74 20 24 69 20 24 69 69 5d 20 7b 0a 2d 2d  ist $i $ii] {.--
2ff0: 2d 20 32 32 37 39 2c 32 36 34 39 20 2d 2d 2d 2d  - 2279,2649 ----
3000: 0a 20 20 20 20 20 20 73 65 74 20 72 0a 20 20 7d  .      set r.  }
3010: 20 7b 7d 0a 20 20 0a 21 20 23 20 50 61 72 74 20   {}.  .! # Part 
3020: 32 39 3a 20 72 65 63 75 72 73 69 6f 6e 20 6c 69  29: recursion li
3030: 6d 69 74 0a 21 20 23 20 20 32 39 2e 31 2e 2a 20  mit.! #  29.1.* 
3040: 20 41 72 67 75 6d 65 6e 74 20 63 68 65 63 6b 69   Argument checki
3050: 6e 67 0a 21 20 23 20 20 32 39 2e 32 2e 2a 20 20  ng.! #  29.2.*  
3060: 52 65 61 64 69 6e 67 20 61 6e 64 20 73 65 74 74  Reading and sett
3070: 69 6e 67 20 74 68 65 20 72 65 63 75 72 73 69 6f  ing the recursio
3080: 6e 20 6c 69 6d 69 74 0a 21 20 23 20 20 32 39 2e  n limit.! #  29.
3090: 33 2e 2a 20 20 44 6f 65 73 20 74 68 65 20 72 65  3.*  Does the re
30a0: 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20 77 6f  cursion limit wo
30b0: 72 6b 3f 0a 21 20 23 20 20 32 39 2e 34 2e 2a 20  rk?.! #  29.4.* 
30c0: 20 52 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74   Recursion limit
30d0: 20 69 6e 68 65 72 69 74 61 6e 63 65 20 62 79 20   inheritance by 
30e0: 73 75 62 2d 69 6e 74 65 72 70 72 65 74 65 72 73  sub-interpreters
30f0: 0a 21 20 23 20 20 32 39 2e 35 2e 2a 20 20 43 6f  .! #  29.5.*  Co
3100: 6e 66 69 72 6d 69 6e 67 20 74 68 65 20 72 65 63  nfirming the rec
3110: 75 72 73 69 6f 6e 6c 69 6d 69 74 20 63 6f 6d 6d  ursionlimit comm
3120: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 61 66 66  and does not aff
3130: 65 63 74 20 74 68 65 20 70 61 72 65 6e 74 0a 21  ect the parent.!
3140: 20 23 20 20 32 39 2e 36 2e 2a 20 20 53 61 66 65   #  29.6.*  Safe
3150: 20 69 6e 74 65 72 70 72 65 74 65 72 20 72 65 73   interpreter res
3160: 74 72 69 63 74 69 6f 6e 0a 21 20 0a 21 20 74 65  triction.! .! te
3170: 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 31 2e 31  st interp-29.1.1
3180: 20 7b 69 6e 74 65 72 70 20 72 65 63 75 72 73 69   {interp recursi
3190: 6f 6e 6c 69 6d 69 74 20 61 72 67 75 6d 65 6e 74  onlimit argument
31a0: 20 63 68 65 63 6b 69 6e 67 7d 20 7b 0a 21 20 20   checking} {.!  
31b0: 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b     list [catch {
31c0: 69 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e  interp recursion
31d0: 6c 69 6d 69 74 7d 20 6d 73 67 5d 20 24 6d 73 67  limit} msg] $msg
31e0: 0a 21 20 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 23  .! } {1 {wrong #
31f0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
3200: 20 22 69 6e 74 65 72 70 20 72 65 63 75 72 73 69   "interp recursi
3210: 6f 6e 6c 69 6d 69 74 20 70 61 74 68 20 3f 6e 65  onlimit path ?ne
3220: 77 6c 69 6d 69 74 3f 22 7d 7d 0a 21 20 0a 21 20  wlimit?"}}.! .! 
3230: 74 65 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 31  test interp-29.1
3240: 2e 32 20 7b 69 6e 74 65 72 70 20 72 65 63 75 72  .2 {interp recur
3250: 73 69 6f 6e 6c 69 6d 69 74 20 61 72 67 75 6d 65  sionlimit argume
3260: 6e 74 20 63 68 65 63 6b 69 6e 67 7d 20 7b 0a 21  nt checking} {.!
3270: 20 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68       list [catch
3280: 20 7b 69 6e 74 65 72 70 20 72 65 63 75 72 73 69   {interp recursi
3290: 6f 6e 6c 69 6d 69 74 20 66 6f 6f 20 62 61 72 7d  onlimit foo bar}
32a0: 20 6d 73 67 5d 20 24 6d 73 67 0a 21 20 7d 20 7b   msg] $msg.! } {
32b0: 31 20 7b 63 6f 75 6c 64 20 6e 6f 74 20 66 69 6e  1 {could not fin
32c0: 64 20 69 6e 74 65 72 70 72 65 74 65 72 20 22 66  d interpreter "f
32d0: 6f 6f 22 7d 7d 0a 21 20 0a 21 20 74 65 73 74 20  oo"}}.! .! test 
32e0: 69 6e 74 65 72 70 2d 32 39 2e 31 2e 33 20 7b 69  interp-29.1.3 {i
32f0: 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c  nterp recursionl
3300: 69 6d 69 74 20 61 72 67 75 6d 65 6e 74 20 63 68  imit argument ch
3310: 65 63 6b 69 6e 67 7d 20 7b 0a 21 20 20 20 20 20  ecking} {.!     
3320: 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 69 6e 74  list [catch {int
3330: 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d  erp recursionlim
3340: 69 74 20 66 6f 6f 20 62 61 72 20 62 61 7a 7d 20  it foo bar baz} 
3350: 6d 73 67 5d 20 24 6d 73 67 0a 21 20 7d 20 7b 31  msg] $msg.! } {1
3360: 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   {wrong # args: 
3370: 73 68 6f 75 6c 64 20 62 65 20 22 69 6e 74 65 72  should be "inter
3380: 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74  p recursionlimit
3390: 20 70 61 74 68 20 3f 6e 65 77 6c 69 6d 69 74 3f   path ?newlimit?
33a0: 22 7d 7d 0a 21 20 0a 21 20 74 65 73 74 20 69 6e  "}}.! .! test in
33b0: 74 65 72 70 2d 32 39 2e 31 2e 34 20 7b 69 6e 74  terp-29.1.4 {int
33c0: 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d  erp recursionlim
33d0: 69 74 20 61 72 67 75 6d 65 6e 74 20 63 68 65 63  it argument chec
33e0: 6b 69 6e 67 7d 20 7b 0a 21 20 20 20 20 20 69 6e  king} {.!     in
33f0: 74 65 72 70 20 63 72 65 61 74 65 20 6d 6f 6f 0a  terp create moo.
3400: 21 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74  !     set result
3410: 20 5b 63 61 74 63 68 20 7b 69 6e 74 65 72 70 20   [catch {interp 
3420: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 6d  recursionlimit m
3430: 6f 6f 20 62 61 72 7d 20 6d 73 67 5d 0a 21 20 20  oo bar} msg].!  
3440: 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65     interp delete
3450: 20 6d 6f 6f 0a 21 20 20 20 20 20 6c 69 73 74 20   moo.!     list 
3460: 24 72 65 73 75 6c 74 20 24 6d 73 67 0a 21 20 7d  $result $msg.! }
3470: 20 7b 31 20 7b 65 78 70 65 63 74 65 64 20 69 6e   {1 {expected in
3480: 74 65 67 65 72 20 62 75 74 20 67 6f 74 20 22 62  teger but got "b
3490: 61 72 22 7d 7d 0a 21 20 0a 21 20 74 65 73 74 20  ar"}}.! .! test 
34a0: 69 6e 74 65 72 70 2d 32 39 2e 31 2e 35 20 7b 69  interp-29.1.5 {i
34b0: 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c  nterp recursionl
34c0: 69 6d 69 74 20 61 72 67 75 6d 65 6e 74 20 63 68  imit argument ch
34d0: 65 63 6b 69 6e 67 7d 20 7b 0a 21 20 20 20 20 20  ecking} {.!     
34e0: 69 6e 74 65 72 70 20 63 72 65 61 74 65 20 6d 6f  interp create mo
34f0: 6f 0a 21 20 20 20 20 20 73 65 74 20 72 65 73 75  o.!     set resu
3500: 6c 74 20 5b 63 61 74 63 68 20 7b 69 6e 74 65 72  lt [catch {inter
3510: 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74  p recursionlimit
3520: 20 6d 6f 6f 20 30 7d 20 6d 73 67 5d 0a 21 20 20   moo 0} msg].!  
3530: 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65     interp delete
3540: 20 6d 6f 6f 0a 21 20 20 20 20 20 6c 69 73 74 20   moo.!     list 
3550: 24 72 65 73 75 6c 74 20 24 6d 73 67 0a 21 20 7d  $result $msg.! }
3560: 20 7b 31 20 7b 72 65 63 75 72 73 69 6f 6e 20 6c   {1 {recursion l
3570: 69 6d 69 74 20 6d 75 73 74 20 62 65 20 3e 20 30  imit must be > 0
3580: 7d 7d 0a 21 20 0a 21 20 74 65 73 74 20 69 6e 74  }}.! .! test int
3590: 65 72 70 2d 32 39 2e 31 2e 36 20 7b 69 6e 74 65  erp-29.1.6 {inte
35a0: 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  rp recursionlimi
35b0: 74 20 61 72 67 75 6d 65 6e 74 20 63 68 65 63 6b  t argument check
35c0: 69 6e 67 7d 20 7b 0a 21 20 20 20 20 20 69 6e 74  ing} {.!     int
35d0: 65 72 70 20 63 72 65 61 74 65 20 6d 6f 6f 0a 21  erp create moo.!
35e0: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20       set result 
35f0: 5b 63 61 74 63 68 20 7b 69 6e 74 65 72 70 20 72  [catch {interp r
3600: 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 6d 6f  ecursionlimit mo
3610: 6f 20 2d 31 7d 20 6d 73 67 5d 0a 21 20 20 20 20  o -1} msg].!    
3620: 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65 20 6d   interp delete m
3630: 6f 6f 0a 21 20 20 20 20 20 6c 69 73 74 20 24 72  oo.!     list $r
3640: 65 73 75 6c 74 20 24 6d 73 67 0a 21 20 7d 20 7b  esult $msg.! } {
3650: 31 20 7b 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d  1 {recursion lim
3660: 69 74 20 6d 75 73 74 20 62 65 20 3e 20 30 7d 7d  it must be > 0}}
3670: 0a 21 20 0a 21 20 74 65 73 74 20 69 6e 74 65 72  .! .! test inter
3680: 70 2d 32 39 2e 31 2e 37 20 7b 73 6c 61 76 65 20  p-29.1.7 {slave 
3690: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 61  recursionlimit a
36a0: 72 67 75 6d 65 6e 74 20 63 68 65 63 6b 69 6e 67  rgument checking
36b0: 7d 20 7b 0a 21 20 20 20 20 20 69 6e 74 65 72 70  } {.!     interp
36c0: 20 63 72 65 61 74 65 20 6d 6f 6f 0a 21 20 20 20   create moo.!   
36d0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63 61    set result [ca
36e0: 74 63 68 20 7b 6d 6f 6f 20 72 65 63 75 72 73 69  tch {moo recursi
36f0: 6f 6e 6c 69 6d 69 74 20 66 6f 6f 20 62 61 72 7d  onlimit foo bar}
3700: 20 6d 73 67 5d 0a 21 20 20 20 20 20 69 6e 74 65   msg].!     inte
3710: 72 70 20 64 65 6c 65 74 65 20 6d 6f 6f 0a 21 20  rp delete moo.! 
3720: 20 20 20 20 6c 69 73 74 20 24 72 65 73 75 6c 74      list $result
3730: 20 24 6d 73 67 0a 21 20 7d 20 7b 31 20 7b 77 72   $msg.! } {1 {wr
3740: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
3750: 6c 64 20 62 65 20 22 6d 6f 6f 20 72 65 63 75 72  ld be "moo recur
3760: 73 69 6f 6e 6c 69 6d 69 74 20 3f 6e 65 77 6c 69  sionlimit ?newli
3770: 6d 69 74 3f 22 7d 7d 0a 21 20 0a 21 20 74 65 73  mit?"}}.! .! tes
3780: 74 20 69 6e 74 65 72 70 2d 32 39 2e 31 2e 38 20  t interp-29.1.8 
3790: 7b 73 6c 61 76 65 20 72 65 63 75 72 73 69 6f 6e  {slave recursion
37a0: 6c 69 6d 69 74 20 61 72 67 75 6d 65 6e 74 20 63  limit argument c
37b0: 68 65 63 6b 69 6e 67 7d 20 7b 0a 21 20 20 20 20  hecking} {.!    
37c0: 20 69 6e 74 65 72 70 20 63 72 65 61 74 65 20 6d   interp create m
37d0: 6f 6f 0a 21 20 20 20 20 20 73 65 74 20 72 65 73  oo.!     set res
37e0: 75 6c 74 20 5b 63 61 74 63 68 20 7b 6d 6f 6f 20  ult [catch {moo 
37f0: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 66  recursionlimit f
3800: 6f 6f 7d 20 6d 73 67 5d 0a 21 20 20 20 20 20 69  oo} msg].!     i
3810: 6e 74 65 72 70 20 64 65 6c 65 74 65 20 6d 6f 6f  nterp delete moo
3820: 0a 21 20 20 20 20 20 6c 69 73 74 20 24 72 65 73  .!     list $res
3830: 75 6c 74 20 24 6d 73 67 0a 21 20 7d 20 7b 31 20  ult $msg.! } {1 
3840: 7b 65 78 70 65 63 74 65 64 20 69 6e 74 65 67 65  {expected intege
3850: 72 20 62 75 74 20 67 6f 74 20 22 66 6f 6f 22 7d  r but got "foo"}
3860: 7d 0a 21 20 0a 21 20 74 65 73 74 20 69 6e 74 65  }.! .! test inte
3870: 72 70 2d 32 39 2e 31 2e 39 20 7b 73 6c 61 76 65  rp-29.1.9 {slave
3880: 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20   recursionlimit 
3890: 61 72 67 75 6d 65 6e 74 20 63 68 65 63 6b 69 6e  argument checkin
38a0: 67 7d 20 7b 0a 21 20 20 20 20 20 69 6e 74 65 72  g} {.!     inter
38b0: 70 20 63 72 65 61 74 65 20 6d 6f 6f 0a 21 20 20  p create moo.!  
38c0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63     set result [c
38d0: 61 74 63 68 20 7b 6d 6f 6f 20 72 65 63 75 72 73  atch {moo recurs
38e0: 69 6f 6e 6c 69 6d 69 74 20 30 7d 20 6d 73 67 5d  ionlimit 0} msg]
38f0: 0a 21 20 20 20 20 20 69 6e 74 65 72 70 20 64 65  .!     interp de
3900: 6c 65 74 65 20 6d 6f 6f 0a 21 20 20 20 20 20 6c  lete moo.!     l
3910: 69 73 74 20 24 72 65 73 75 6c 74 20 24 6d 73 67  ist $result $msg
3920: 0a 21 20 7d 20 7b 31 20 7b 72 65 63 75 72 73 69  .! } {1 {recursi
3930: 6f 6e 20 6c 69 6d 69 74 20 6d 75 73 74 20 62 65  on limit must be
3940: 20 3e 20 30 7d 7d 0a 21 20 0a 21 20 74 65 73 74   > 0}}.! .! test
3950: 20 69 6e 74 65 72 70 2d 32 39 2e 31 2e 31 30 20   interp-29.1.10 
3960: 7b 73 6c 61 76 65 20 72 65 63 75 72 73 69 6f 6e  {slave recursion
3970: 6c 69 6d 69 74 20 61 72 67 75 6d 65 6e 74 20 63  limit argument c
3980: 68 65 63 6b 69 6e 67 7d 20 7b 0a 21 20 20 20 20  hecking} {.!    
3990: 20 69 6e 74 65 72 70 20 63 72 65 61 74 65 20 6d   interp create m
39a0: 6f 6f 0a 21 20 20 20 20 20 73 65 74 20 72 65 73  oo.!     set res
39b0: 75 6c 74 20 5b 63 61 74 63 68 20 7b 6d 6f 6f 20  ult [catch {moo 
39c0: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 2d  recursionlimit -
39d0: 31 7d 20 6d 73 67 5d 0a 21 20 20 20 20 20 69 6e  1} msg].!     in
39e0: 74 65 72 70 20 64 65 6c 65 74 65 20 6d 6f 6f 0a  terp delete moo.
39f0: 21 20 20 20 20 20 6c 69 73 74 20 24 72 65 73 75  !     list $resu
3a00: 6c 74 20 24 6d 73 67 0a 21 20 7d 20 7b 31 20 7b  lt $msg.! } {1 {
3a10: 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20  recursion limit 
3a20: 6d 75 73 74 20 62 65 20 3e 20 30 7d 7d 0a 21 20  must be > 0}}.! 
3a30: 0a 21 20 74 65 73 74 20 69 6e 74 65 72 70 2d 32  .! test interp-2
3a40: 39 2e 32 2e 31 20 7b 71 75 65 72 79 20 72 65 63  9.2.1 {query rec
3a50: 75 72 73 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b 0a  ursion limit} {.
3a60: 21 20 20 20 20 20 69 6e 74 65 72 70 20 72 65 63  !     interp rec
3a70: 75 72 73 69 6f 6e 6c 69 6d 69 74 20 7b 7d 0a 21  ursionlimit {}.!
3a80: 20 7d 20 31 30 30 30 0a 21 20 0a 21 20 74 65 73   } 1000.! .! tes
3a90: 74 20 69 6e 74 65 72 70 2d 32 39 2e 32 2e 32 20  t interp-29.2.2 
3aa0: 7b 71 75 65 72 79 20 72 65 63 75 72 73 69 6f 6e  {query recursion
3ab0: 20 6c 69 6d 69 74 7d 20 7b 0a 21 20 20 20 20 20   limit} {.!     
3ac0: 73 65 74 20 69 20 5b 69 6e 74 65 72 70 20 63 72  set i [interp cr
3ad0: 65 61 74 65 5d 0a 21 20 20 20 20 20 73 65 74 20  eate].!     set 
3ae0: 6e 20 5b 69 6e 74 65 72 70 20 72 65 63 75 72 73  n [interp recurs
3af0: 69 6f 6e 6c 69 6d 69 74 20 24 69 5d 0a 21 20 20  ionlimit $i].!  
3b00: 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65     interp delete
3b10: 20 24 69 0a 21 20 20 20 20 20 73 65 74 20 6e 0a   $i.!     set n.
3b20: 21 20 7d 20 31 30 30 30 0a 21 20 0a 21 20 74 65  ! } 1000.! .! te
3b30: 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 32 2e 33  st interp-29.2.3
3b40: 20 7b 71 75 65 72 79 20 72 65 63 75 72 73 69 6f   {query recursio
3b50: 6e 20 6c 69 6d 69 74 7d 20 7b 0a 21 20 20 20 20  n limit} {.!    
3b60: 20 73 65 74 20 69 20 5b 69 6e 74 65 72 70 20 63   set i [interp c
3b70: 72 65 61 74 65 5d 0a 21 20 20 20 20 20 73 65 74  reate].!     set
3b80: 20 6e 20 5b 24 69 20 72 65 63 75 72 73 69 6f 6e   n [$i recursion
3b90: 6c 69 6d 69 74 5d 0a 21 20 20 20 20 20 69 6e 74  limit].!     int
3ba0: 65 72 70 20 64 65 6c 65 74 65 20 24 69 0a 21 20  erp delete $i.! 
3bb0: 20 20 20 20 73 65 74 20 6e 0a 21 20 7d 20 31 30      set n.! } 10
3bc0: 30 30 0a 21 20 0a 21 20 74 65 73 74 20 69 6e 74  00.! .! test int
3bd0: 65 72 70 2d 32 39 2e 32 2e 34 20 7b 71 75 65 72  erp-29.2.4 {quer
3be0: 79 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69  y recursion limi
3bf0: 74 7d 20 7b 0a 21 20 20 20 20 20 73 65 74 20 69  t} {.!     set i
3c00: 20 5b 69 6e 74 65 72 70 20 63 72 65 61 74 65 5d   [interp create]
3c10: 0a 21 20 20 20 20 20 73 65 74 20 72 20 5b 24 69  .!     set r [$i
3c20: 20 65 76 61 6c 20 7b 0a 21 20 09 73 65 74 20 6e   eval {.! .set n
3c30: 31 20 5b 69 6e 74 65 72 70 20 72 65 63 75 72 73  1 [interp recurs
3c40: 69 6f 6e 6c 69 6d 69 74 20 7b 7d 20 34 32 5d 0a  ionlimit {} 42].
3c50: 21 20 09 73 65 74 20 6e 32 20 5b 69 6e 74 65 72  ! .set n2 [inter
3c60: 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74  p recursionlimit
3c70: 20 7b 7d 5d 0a 21 20 09 6c 69 73 74 20 24 6e 31   {}].! .list $n1
3c80: 20 24 6e 32 0a 21 20 20 20 20 20 7d 5d 0a 21 20   $n2.!     }].! 
3c90: 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74      interp delet
3ca0: 65 20 24 69 0a 21 20 20 20 20 20 73 65 74 20 72  e $i.!     set r
3cb0: 0a 21 20 7d 20 7b 34 32 20 34 32 7d 0a 21 20 0a  .! } {42 42}.! .
3cc0: 21 20 74 65 73 74 20 69 6e 74 65 72 70 2d 32 39  ! test interp-29
3cd0: 2e 32 2e 35 20 7b 71 75 65 72 79 20 72 65 63 75  .2.5 {query recu
3ce0: 72 73 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b 0a 21  rsion limit} {.!
3cf0: 20 20 20 20 20 73 65 74 20 69 20 5b 69 6e 74 65       set i [inte
3d00: 72 70 20 63 72 65 61 74 65 5d 0a 21 20 20 20 20  rp create].!    
3d10: 20 73 65 74 20 6e 31 20 5b 69 6e 74 65 72 70 20   set n1 [interp 
3d20: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 24  recursionlimit $
3d30: 69 20 34 32 5d 0a 21 20 20 20 20 20 73 65 74 20  i 42].!     set 
3d40: 6e 32 20 5b 69 6e 74 65 72 70 20 72 65 63 75 72  n2 [interp recur
3d50: 73 69 6f 6e 6c 69 6d 69 74 20 24 69 5d 0a 21 20  sionlimit $i].! 
3d60: 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74      interp delet
3d70: 65 20 24 69 0a 21 20 20 20 20 20 6c 69 73 74 20  e $i.!     list 
3d80: 24 6e 31 20 24 6e 32 0a 21 20 7d 20 7b 34 32 20  $n1 $n2.! } {42 
3d90: 34 32 7d 0a 21 20 0a 21 20 74 65 73 74 20 69 6e  42}.! .! test in
3da0: 74 65 72 70 2d 32 39 2e 32 2e 36 20 7b 71 75 65  terp-29.2.6 {que
3db0: 72 79 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d  ry recursion lim
3dc0: 69 74 7d 20 7b 0a 21 20 20 20 20 20 73 65 74 20  it} {.!     set 
3dd0: 69 20 5b 69 6e 74 65 72 70 20 63 72 65 61 74 65  i [interp create
3de0: 5d 0a 21 20 20 20 20 20 73 65 74 20 6e 31 20 5b  ].!     set n1 [
3df0: 69 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e  interp recursion
3e00: 6c 69 6d 69 74 20 24 69 20 34 32 5d 0a 21 20 20  limit $i 42].!  
3e10: 20 20 20 73 65 74 20 6e 32 20 5b 24 69 20 72 65     set n2 [$i re
3e20: 63 75 72 73 69 6f 6e 6c 69 6d 69 74 5d 0a 21 20  cursionlimit].! 
3e30: 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74      interp delet
3e40: 65 20 24 69 0a 21 20 20 20 20 20 6c 69 73 74 20  e $i.!     list 
3e50: 24 6e 31 20 24 6e 32 0a 21 20 7d 20 7b 34 32 20  $n1 $n2.! } {42 
3e60: 34 32 7d 0a 21 20 0a 21 20 74 65 73 74 20 69 6e  42}.! .! test in
3e70: 74 65 72 70 2d 32 39 2e 32 2e 37 20 7b 71 75 65  terp-29.2.7 {que
3e80: 72 79 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d  ry recursion lim
3e90: 69 74 7d 20 7b 0a 21 20 20 20 20 20 73 65 74 20  it} {.!     set 
3ea0: 69 20 5b 69 6e 74 65 72 70 20 63 72 65 61 74 65  i [interp create
3eb0: 5d 0a 21 20 20 20 20 20 73 65 74 20 6e 31 20 5b  ].!     set n1 [
3ec0: 24 69 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  $i recursionlimi
3ed0: 74 20 34 32 5d 0a 21 20 20 20 20 20 73 65 74 20  t 42].!     set 
3ee0: 6e 32 20 5b 69 6e 74 65 72 70 20 72 65 63 75 72  n2 [interp recur
3ef0: 73 69 6f 6e 6c 69 6d 69 74 20 24 69 5d 0a 21 20  sionlimit $i].! 
3f00: 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74      interp delet
3f10: 65 20 24 69 0a 21 20 20 20 20 20 6c 69 73 74 20  e $i.!     list 
3f20: 24 6e 31 20 24 6e 32 0a 21 20 7d 20 7b 34 32 20  $n1 $n2.! } {42 
3f30: 34 32 7d 0a 21 20 0a 21 20 74 65 73 74 20 69 6e  42}.! .! test in
3f40: 74 65 72 70 2d 32 39 2e 32 2e 38 20 7b 71 75 65  terp-29.2.8 {que
3f50: 72 79 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d  ry recursion lim
3f60: 69 74 7d 20 7b 0a 21 20 20 20 20 20 73 65 74 20  it} {.!     set 
3f70: 69 20 5b 69 6e 74 65 72 70 20 63 72 65 61 74 65  i [interp create
3f80: 5d 0a 21 20 20 20 20 20 73 65 74 20 6e 31 20 5b  ].!     set n1 [
3f90: 24 69 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  $i recursionlimi
3fa0: 74 20 34 32 5d 0a 21 20 20 20 20 20 73 65 74 20  t 42].!     set 
3fb0: 6e 32 20 5b 24 69 20 72 65 63 75 72 73 69 6f 6e  n2 [$i recursion
3fc0: 6c 69 6d 69 74 5d 0a 21 20 20 20 20 20 69 6e 74  limit].!     int
3fd0: 65 72 70 20 64 65 6c 65 74 65 20 24 69 0a 21 20  erp delete $i.! 
3fe0: 20 20 20 20 6c 69 73 74 20 24 6e 31 20 24 6e 32      list $n1 $n2
3ff0: 0a 21 20 7d 20 7b 34 32 20 34 32 7d 0a 21 20 0a  .! } {42 42}.! .
4000: 21 20 74 65 73 74 20 69 6e 74 65 72 70 2d 32 39  ! test interp-29
4010: 2e 33 2e 31 20 7b 72 65 63 75 72 73 69 6f 6e 20  .3.1 {recursion 
4020: 6c 69 6d 69 74 7d 20 7b 0a 20 20 20 20 20 20 73  limit} {.      s
4030: 65 74 20 69 20 5b 69 6e 74 65 72 70 20 63 72 65  et i [interp cre
4040: 61 74 65 5d 0a 20 20 20 20 20 20 73 65 74 20 72  ate].      set r
4050: 20 5b 69 6e 74 65 72 70 20 65 76 61 6c 20 24 69   [interp eval $i
4060: 20 7b 0a 21 20 09 69 6e 74 65 72 70 20 72 65 63   {.! .interp rec
4070: 75 72 73 69 6f 6e 6c 69 6d 69 74 20 7b 7d 20 35  ursionlimit {} 5
4080: 30 0a 20 20 09 70 72 6f 63 20 70 20 7b 7d 20 7b  0.  .proc p {} {
4090: 69 6e 63 72 20 3a 3a 69 3b 20 70 7d 0a 20 20 09  incr ::i; p}.  .
40a0: 73 65 74 20 69 20 30 0a 21 20 09 6c 69 73 74 20  set i 0.! .list 
40b0: 5b 63 61 74 63 68 20 70 20 6d 73 67 5d 20 24 6d  [catch p msg] $m
40c0: 73 67 20 24 69 0a 21 20 20 20 20 20 7d 5d 0a 21  sg $i.!     }].!
40d0: 20 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65       interp dele
40e0: 74 65 20 24 69 0a 21 20 20 20 20 20 73 65 74 20  te $i.!     set 
40f0: 72 0a 21 20 7d 20 7b 31 20 7b 74 6f 6f 20 6d 61  r.! } {1 {too ma
4100: 6e 79 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  ny nested calls 
4110: 74 6f 20 54 63 6c 5f 45 76 61 6c 20 28 69 6e 66  to Tcl_Eval (inf
4120: 69 6e 69 74 65 20 6c 6f 6f 70 3f 29 7d 20 34 38  inite loop?)} 48
4130: 7d 0a 21 20 0a 21 20 74 65 73 74 20 69 6e 74 65  }.! .! test inte
4140: 72 70 2d 32 39 2e 33 2e 32 20 7b 72 65 63 75 72  rp-29.3.2 {recur
4150: 73 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b 0a 21 20  sion limit} {.! 
4160: 20 20 20 20 73 65 74 20 69 20 5b 69 6e 74 65 72      set i [inter
4170: 70 20 63 72 65 61 74 65 5d 0a 21 20 20 20 20 20  p create].!     
4180: 69 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e  interp recursion
4190: 6c 69 6d 69 74 20 24 69 20 35 30 0a 21 20 20 20  limit $i 50.!   
41a0: 20 20 73 65 74 20 72 20 5b 69 6e 74 65 72 70 20    set r [interp 
41b0: 65 76 61 6c 20 24 69 20 7b 0a 21 20 09 70 72 6f  eval $i {.! .pro
41c0: 63 20 70 20 7b 7d 20 7b 69 6e 63 72 20 3a 3a 69  c p {} {incr ::i
41d0: 3b 20 70 7d 0a 21 20 09 73 65 74 20 69 20 30 0a  ; p}.! .set i 0.
41e0: 21 20 09 6c 69 73 74 20 5b 63 61 74 63 68 20 70  ! .list [catch p
41f0: 20 6d 73 67 5d 20 24 6d 73 67 20 24 69 0a 20 20   msg] $msg $i.  
4200: 20 20 20 20 7d 5d 0a 20 20 20 20 20 69 6e 74 65      }].     inte
4210: 72 70 20 64 65 6c 65 74 65 20 24 69 0a 20 20 20  rp delete $i.   
4220: 20 20 73 65 74 20 72 0a 21 20 7d 20 7b 31 20 7b    set r.! } {1 {
4230: 74 6f 6f 20 6d 61 6e 79 20 6e 65 73 74 65 64 20  too many nested 
4240: 63 61 6c 6c 73 20 74 6f 20 54 63 6c 5f 45 76 61  calls to Tcl_Eva
4250: 6c 20 28 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70  l (infinite loop
4260: 3f 29 7d 20 34 38 7d 0a 21 20 0a 21 20 74 65 73  ?)} 48}.! .! tes
4270: 74 20 69 6e 74 65 72 70 2d 32 39 2e 33 2e 33 20  t interp-29.3.3 
4280: 7b 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74  {recursion limit
4290: 7d 20 7b 0a 21 20 20 20 20 20 73 65 74 20 69 20  } {.!     set i 
42a0: 5b 69 6e 74 65 72 70 20 63 72 65 61 74 65 5d 0a  [interp create].
42b0: 21 20 20 20 20 20 24 69 20 72 65 63 75 72 73 69  !     $i recursi
42c0: 6f 6e 6c 69 6d 69 74 20 35 30 0a 21 20 20 20 20  onlimit 50.!    
42d0: 20 73 65 74 20 72 20 5b 69 6e 74 65 72 70 20 65   set r [interp e
42e0: 76 61 6c 20 24 69 20 7b 0a 21 20 09 70 72 6f 63  val $i {.! .proc
42f0: 20 70 20 7b 7d 20 7b 69 6e 63 72 20 3a 3a 69 3b   p {} {incr ::i;
4300: 20 70 7d 0a 21 20 09 73 65 74 20 69 20 30 0a 21   p}.! .set i 0.!
4310: 20 09 6c 69 73 74 20 5b 63 61 74 63 68 20 70 20   .list [catch p 
4320: 6d 73 67 5d 20 24 6d 73 67 20 24 69 0a 21 20 20  msg] $msg $i.!  
4330: 20 20 20 7d 5d 0a 21 20 20 20 20 69 6e 74 65 72     }].!    inter
4340: 70 20 64 65 6c 65 74 65 20 24 69 0a 21 20 20 20  p delete $i.!   
4350: 20 73 65 74 20 72 0a 21 20 7d 20 7b 31 20 7b 74   set r.! } {1 {t
4360: 6f 6f 20 6d 61 6e 79 20 6e 65 73 74 65 64 20 63  oo many nested c
4370: 61 6c 6c 73 20 74 6f 20 54 63 6c 5f 45 76 61 6c  alls to Tcl_Eval
4380: 20 28 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 3f   (infinite loop?
4390: 29 7d 20 34 38 7d 0a 21 20 0a 21 20 74 65 73 74  )} 48}.! .! test
43a0: 20 69 6e 74 65 72 70 2d 32 39 2e 33 2e 34 20 7b   interp-29.3.4 {
43b0: 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20  recursion limit 
43c0: 65 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 7d  error reporting}
43d0: 20 7b 0a 21 20 20 20 20 20 69 6e 74 65 72 70 20   {.!     interp 
43e0: 63 72 65 61 74 65 20 73 6c 61 76 65 0a 21 20 20  create slave.!  
43f0: 20 20 20 73 65 74 20 72 31 20 5b 73 6c 61 76 65     set r1 [slave
4400: 20 65 76 61 6c 20 7b 0a 21 20 20 20 20 20 20 20   eval {.!       
4410: 20 20 63 61 74 63 68 20 7b 20 09 09 23 20 6e 65    catch { ..# ne
4420: 73 74 69 6e 67 20 6c 65 76 65 6c 20 31 0a 21 20  sting level 1.! 
4430: 09 20 20 20 20 65 76 61 6c 20 7b 09 09 23 20 32  .    eval {..# 2
4440: 0a 21 20 09 20 20 20 20 20 20 20 20 65 76 61 6c  .! .        eval
4450: 20 7b 09 09 23 20 33 0a 21 20 09 09 20 20 20 20   {..# 3.! ..    
4460: 65 76 61 6c 20 7b 09 23 20 34 0a 21 20 09 09 20  eval {.# 4.! .. 
4470: 20 20 20 20 20 20 20 65 76 61 6c 20 7b 09 23 20         eval {.# 
4480: 35 0a 21 20 09 09 09 20 20 20 20 20 69 6e 74 65  5.! ...     inte
4490: 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  rp recursionlimi
44a0: 74 20 7b 7d 20 35 0a 21 20 09 09 09 20 20 20 20  t {} 5.! ...    
44b0: 20 73 65 74 20 78 20 6f 6b 0a 21 20 09 09 09 7d   set x ok.! ...}
44c0: 0a 21 20 09 09 20 20 20 20 7d 0a 21 20 09 09 7d  .! ..    }.! ..}
44d0: 0a 21 20 09 20 20 20 20 7d 0a 21 20 09 7d 20 6d  .! .    }.! .} m
44e0: 73 67 0a 21 20 20 20 20 20 7d 5d 0a 21 20 20 20  sg.!     }].!   
44f0: 20 20 73 65 74 20 72 32 20 5b 73 6c 61 76 65 20    set r2 [slave 
4500: 65 76 61 6c 20 7b 20 73 65 74 20 6d 73 67 20 7d  eval { set msg }
4510: 5d 0a 21 20 20 20 20 20 69 6e 74 65 72 70 20 64  ].!     interp d
4520: 65 6c 65 74 65 20 73 6c 61 76 65 0a 21 20 20 20  elete slave.!   
4530: 20 20 6c 69 73 74 20 24 72 31 20 24 72 32 0a 21    list $r1 $r2.!
4540: 20 7d 20 7b 31 20 7b 66 61 6c 6c 69 6e 67 20 62   } {1 {falling b
4550: 61 63 6b 20 64 75 65 20 74 6f 20 6e 65 77 20 72  ack due to new r
4560: 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 7d 7d  ecursion limit}}
4570: 0a 21 20 0a 21 20 74 65 73 74 20 69 6e 74 65 72  .! .! test inter
4580: 70 2d 32 39 2e 33 2e 35 20 7b 72 65 63 75 72 73  p-29.3.5 {recurs
4590: 69 6f 6e 20 6c 69 6d 69 74 20 65 72 72 6f 72 20  ion limit error 
45a0: 72 65 70 6f 72 74 69 6e 67 7d 20 7b 0a 21 20 20  reporting} {.!  
45b0: 20 20 20 69 6e 74 65 72 70 20 63 72 65 61 74 65     interp create
45c0: 20 73 6c 61 76 65 0a 21 20 20 20 20 20 73 65 74   slave.!     set
45d0: 20 72 31 20 5b 73 6c 61 76 65 20 65 76 61 6c 20   r1 [slave eval 
45e0: 7b 0a 21 20 20 20 20 20 20 20 20 20 63 61 74 63  {.!         catc
45f0: 68 20 7b 09 09 09 23 20 6e 65 73 74 69 6e 67 20  h {...# nesting 
4600: 6c 65 76 65 6c 20 31 0a 21 20 09 20 20 20 20 65  level 1.! .    e
4610: 76 61 6c 20 7b 09 09 23 20 32 0a 21 20 09 20 20  val {..# 2.! .  
4620: 20 20 20 20 20 20 65 76 61 6c 20 7b 09 09 23 20        eval {..# 
4630: 33 0a 21 20 09 09 20 20 20 20 65 76 61 6c 20 7b  3.! ..    eval {
4640: 09 23 20 34 0a 21 20 09 09 20 20 20 20 20 20 20  .# 4.! ..       
4650: 20 65 76 61 6c 20 7b 09 23 20 35 0a 21 20 09 09   eval {.# 5.! ..
4660: 09 20 20 20 20 69 6e 74 65 72 70 20 72 65 63 75  .    interp recu
4670: 72 73 69 6f 6e 6c 69 6d 69 74 20 7b 7d 20 34 0a  rsionlimit {} 4.
4680: 21 20 09 09 09 20 20 20 20 73 65 74 20 78 20 6f  ! ...    set x o
4690: 6b 0a 21 20 09 09 09 7d 0a 21 20 09 09 20 20 20  k.! ...}.! ..   
46a0: 20 7d 0a 21 20 09 09 7d 0a 21 20 09 20 20 20 20   }.! ..}.! .    
46b0: 7d 0a 21 20 09 7d 20 6d 73 67 0a 21 20 20 20 20  }.! .} msg.!    
46c0: 20 7d 5d 0a 21 20 20 20 20 20 73 65 74 20 72 32   }].!     set r2
46d0: 20 5b 73 6c 61 76 65 20 65 76 61 6c 20 7b 20 73   [slave eval { s
46e0: 65 74 20 6d 73 67 20 7d 5d 0a 21 20 20 20 20 20  et msg }].!     
46f0: 69 6e 74 65 72 70 20 64 65 6c 65 74 65 20 73 6c  interp delete sl
4700: 61 76 65 0a 21 20 20 20 20 20 6c 69 73 74 20 24  ave.!     list $
4710: 72 31 20 24 72 32 0a 21 20 7d 20 7b 31 20 7b 66  r1 $r2.! } {1 {f
4720: 61 6c 6c 69 6e 67 20 62 61 63 6b 20 64 75 65 20  alling back due 
4730: 74 6f 20 6e 65 77 20 72 65 63 75 72 73 69 6f 6e  to new recursion
4740: 20 6c 69 6d 69 74 7d 7d 0a 21 20 0a 21 20 74 65   limit}}.! .! te
4750: 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 33 2e 36  st interp-29.3.6
4760: 20 7b 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69   {recursion limi
4770: 74 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69 6e  t error reportin
4780: 67 7d 20 7b 0a 21 20 20 20 20 20 69 6e 74 65 72  g} {.!     inter
4790: 70 20 63 72 65 61 74 65 20 73 6c 61 76 65 0a 21  p create slave.!
47a0: 20 20 20 20 20 73 65 74 20 72 31 20 5b 73 6c 61       set r1 [sla
47b0: 76 65 20 65 76 61 6c 20 7b 0a 21 20 20 20 20 20  ve eval {.!     
47c0: 20 20 20 20 63 61 74 63 68 20 7b 09 09 09 23 20      catch {...# 
47d0: 6e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 31 0a  nesting level 1.
47e0: 21 20 09 20 20 20 20 65 76 61 6c 20 7b 09 09 23  ! .    eval {..#
47f0: 20 32 0a 21 20 09 20 20 20 20 20 20 20 20 65 76   2.! .        ev
4800: 61 6c 20 7b 09 09 23 20 33 0a 21 20 09 09 20 20  al {..# 3.! ..  
4810: 20 20 65 76 61 6c 20 7b 09 23 20 34 0a 21 20 09    eval {.# 4.! .
4820: 09 20 20 20 20 20 20 20 20 65 76 61 6c 20 7b 09  .        eval {.
4830: 23 20 35 0a 21 20 09 09 09 20 20 20 20 69 6e 74  # 5.! ...    int
4840: 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d  erp recursionlim
4850: 69 74 20 7b 7d 20 36 0a 21 20 09 09 09 20 20 20  it {} 6.! ...   
4860: 20 73 65 74 20 78 20 6f 6b 0a 21 20 09 09 09 7d   set x ok.! ...}
4870: 0a 21 20 09 09 20 20 20 20 7d 0a 21 20 09 09 7d  .! ..    }.! ..}
4880: 0a 21 20 09 20 20 20 20 7d 0a 21 20 09 7d 20 6d  .! .    }.! .} m
4890: 73 67 0a 21 20 20 20 20 20 7d 5d 0a 21 20 20 20  sg.!     }].!   
48a0: 20 20 73 65 74 20 72 32 20 5b 73 6c 61 76 65 20    set r2 [slave 
48b0: 65 76 61 6c 20 7b 20 73 65 74 20 6d 73 67 20 7d  eval { set msg }
48c0: 5d 0a 21 20 20 20 20 20 69 6e 74 65 72 70 20 64  ].!     interp d
48d0: 65 6c 65 74 65 20 73 6c 61 76 65 0a 21 20 20 20  elete slave.!   
48e0: 20 20 6c 69 73 74 20 24 72 31 20 24 72 32 0a 21    list $r1 $r2.!
48f0: 20 7d 20 7b 30 20 6f 6b 7d 0a 21 20 0a 21 20 74   } {0 ok}.! .! t
4900: 65 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 33 2e  est interp-29.3.
4910: 37 20 7b 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d  7 {recursion lim
4920: 69 74 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69  it error reporti
4930: 6e 67 7d 20 7b 0a 21 20 20 20 20 20 69 6e 74 65  ng} {.!     inte
4940: 72 70 20 63 72 65 61 74 65 20 73 6c 61 76 65 0a  rp create slave.
4950: 21 20 20 20 20 20 61 66 74 65 72 20 30 20 7b 69  !     after 0 {i
4960: 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c  nterp recursionl
4970: 69 6d 69 74 20 73 6c 61 76 65 20 35 7d 0a 21 20  imit slave 5}.! 
4980: 20 20 20 20 73 65 74 20 72 31 20 5b 73 6c 61 76      set r1 [slav
4990: 65 20 65 76 61 6c 20 7b 0a 21 20 20 20 20 20 20  e eval {.!      
49a0: 20 20 20 63 61 74 63 68 20 7b 20 09 09 23 20 6e     catch { ..# n
49b0: 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 31 0a 21  esting level 1.!
49c0: 20 09 20 20 20 20 65 76 61 6c 20 7b 09 09 23 20   .    eval {..# 
49d0: 32 0a 21 20 09 20 20 20 20 20 20 20 20 65 76 61  2.! .        eva
49e0: 6c 20 7b 09 09 23 20 33 0a 21 20 09 09 20 20 20  l {..# 3.! ..   
49f0: 20 65 76 61 6c 20 7b 09 23 20 34 0a 21 20 09 09   eval {.# 4.! ..
4a00: 20 20 20 20 20 20 20 20 65 76 61 6c 20 7b 09 23          eval {.#
4a10: 20 35 0a 21 20 09 09 09 20 20 20 20 20 75 70 64   5.! ...     upd
4a20: 61 74 65 0a 21 20 09 09 09 20 20 20 20 20 73 65  ate.! ...     se
4a30: 74 20 78 20 6f 6b 0a 21 20 09 09 09 7d 0a 21 20  t x ok.! ...}.! 
4a40: 09 09 20 20 20 20 7d 0a 21 20 09 09 7d 0a 21 20  ..    }.! ..}.! 
4a50: 09 20 20 20 20 7d 0a 21 20 09 7d 20 6d 73 67 0a  .    }.! .} msg.
4a60: 21 20 20 20 20 20 7d 5d 0a 21 20 20 20 20 20 73  !     }].!     s
4a70: 65 74 20 72 32 20 5b 73 6c 61 76 65 20 65 76 61  et r2 [slave eva
4a80: 6c 20 7b 20 73 65 74 20 6d 73 67 20 7d 5d 0a 21  l { set msg }].!
4a90: 20 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65       interp dele
4aa0: 74 65 20 73 6c 61 76 65 0a 21 20 20 20 20 20 6c  te slave.!     l
4ab0: 69 73 74 20 24 72 31 20 24 72 32 0a 21 20 7d 20  ist $r1 $r2.! } 
4ac0: 7b 31 20 7b 74 6f 6f 20 6d 61 6e 79 20 6e 65 73  {1 {too many nes
4ad0: 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 54 63 6c  ted calls to Tcl
4ae0: 5f 45 76 61 6c 20 28 69 6e 66 69 6e 69 74 65 20  _Eval (infinite 
4af0: 6c 6f 6f 70 3f 29 7d 7d 0a 21 20 0a 21 20 74 65  loop?)}}.! .! te
4b00: 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 33 2e 38  st interp-29.3.8
4b10: 20 7b 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69   {recursion limi
4b20: 74 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69 6e  t error reportin
4b30: 67 7d 20 7b 0a 21 20 20 20 20 20 69 6e 74 65 72  g} {.!     inter
4b40: 70 20 63 72 65 61 74 65 20 73 6c 61 76 65 0a 21  p create slave.!
4b50: 20 20 20 20 20 61 66 74 65 72 20 30 20 7b 69 6e       after 0 {in
4b60: 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69  terp recursionli
4b70: 6d 69 74 20 73 6c 61 76 65 20 34 7d 0a 21 20 20  mit slave 4}.!  
4b80: 20 20 20 73 65 74 20 72 31 20 5b 73 6c 61 76 65     set r1 [slave
4b90: 20 65 76 61 6c 20 7b 0a 21 20 20 20 20 20 20 20   eval {.!       
4ba0: 20 20 63 61 74 63 68 20 7b 20 09 09 23 20 6e 65    catch { ..# ne
4bb0: 73 74 69 6e 67 20 6c 65 76 65 6c 20 31 0a 21 20  sting level 1.! 
4bc0: 09 20 20 20 20 65 76 61 6c 20 7b 09 09 23 20 32  .    eval {..# 2
4bd0: 0a 21 20 09 20 20 20 20 20 20 20 20 65 76 61 6c  .! .        eval
4be0: 20 7b 09 09 23 20 33 0a 21 20 09 09 20 20 20 20   {..# 3.! ..    
4bf0: 65 76 61 6c 20 7b 09 23 20 34 0a 21 20 09 09 20  eval {.# 4.! .. 
4c00: 20 20 20 20 20 20 20 65 76 61 6c 20 7b 09 23 20         eval {.# 
4c10: 35 0a 21 20 09 09 09 20 20 20 20 20 75 70 64 61  5.! ...     upda
4c20: 74 65 0a 21 20 09 09 09 20 20 20 20 20 73 65 74  te.! ...     set
4c30: 20 78 20 6f 6b 0a 21 20 09 09 09 7d 0a 21 20 09   x ok.! ...}.! .
4c40: 09 20 20 20 20 7d 0a 21 20 09 09 7d 0a 21 20 09  .    }.! ..}.! .
4c50: 20 20 20 20 7d 0a 21 20 09 7d 20 6d 73 67 0a 21      }.! .} msg.!
4c60: 20 20 20 20 20 7d 5d 0a 21 20 20 20 20 20 73 65       }].!     se
4c70: 74 20 72 32 20 5b 73 6c 61 76 65 20 65 76 61 6c  t r2 [slave eval
4c80: 20 7b 20 73 65 74 20 6d 73 67 20 7d 5d 0a 21 20   { set msg }].! 
4c90: 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74      interp delet
4ca0: 65 20 73 6c 61 76 65 0a 21 20 20 20 20 20 6c 69  e slave.!     li
4cb0: 73 74 20 24 72 31 20 24 72 32 0a 21 20 7d 20 7b  st $r1 $r2.! } {
4cc0: 31 20 7b 74 6f 6f 20 6d 61 6e 79 20 6e 65 73 74  1 {too many nest
4cd0: 65 64 20 63 61 6c 6c 73 20 74 6f 20 54 63 6c 5f  ed calls to Tcl_
4ce0: 45 76 61 6c 20 28 69 6e 66 69 6e 69 74 65 20 6c  Eval (infinite l
4cf0: 6f 6f 70 3f 29 7d 7d 0a 21 20 0a 21 20 74 65 73  oop?)}}.! .! tes
4d00: 74 20 69 6e 74 65 72 70 2d 32 39 2e 33 2e 39 20  t interp-29.3.9 
4d10: 7b 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74  {recursion limit
4d20: 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67   error reporting
4d30: 7d 20 7b 0a 21 20 20 20 20 20 69 6e 74 65 72 70  } {.!     interp
4d40: 20 63 72 65 61 74 65 20 73 6c 61 76 65 0a 21 20   create slave.! 
4d50: 20 20 20 20 61 66 74 65 72 20 30 20 7b 69 6e 74      after 0 {int
4d60: 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d  erp recursionlim
4d70: 69 74 20 73 6c 61 76 65 20 36 7d 0a 21 20 20 20  it slave 6}.!   
4d80: 20 20 73 65 74 20 72 31 20 5b 73 6c 61 76 65 20    set r1 [slave 
4d90: 65 76 61 6c 20 7b 0a 21 20 20 20 20 20 20 20 20  eval {.!        
4da0: 20 63 61 74 63 68 20 7b 20 09 09 23 20 6e 65 73   catch { ..# nes
4db0: 74 69 6e 67 20 6c 65 76 65 6c 20 31 0a 21 20 09  ting level 1.! .
4dc0: 20 20 20 20 65 76 61 6c 20 7b 09 09 23 20 32 0a      eval {..# 2.
4dd0: 21 20 09 20 20 20 20 20 20 20 20 65 76 61 6c 20  ! .        eval 
4de0: 7b 09 09 23 20 33 0a 21 20 09 09 20 20 20 20 65  {..# 3.! ..    e
4df0: 76 61 6c 20 7b 09 23 20 34 0a 21 20 09 09 20 20  val {.# 4.! ..  
4e00: 20 20 20 20 20 20 65 76 61 6c 20 7b 09 23 20 35        eval {.# 5
4e10: 0a 21 20 09 09 09 20 20 20 20 20 75 70 64 61 74  .! ...     updat
4e20: 65 0a 21 20 09 09 09 20 20 20 20 20 73 65 74 20  e.! ...     set 
4e30: 78 20 6f 6b 0a 21 20 09 09 09 7d 0a 21 20 09 09  x ok.! ...}.! ..
4e40: 20 20 20 20 7d 0a 21 20 09 09 7d 0a 21 20 09 20      }.! ..}.! . 
4e50: 20 20 20 7d 0a 21 20 09 7d 20 6d 73 67 0a 21 20     }.! .} msg.! 
4e60: 20 20 20 20 7d 5d 0a 21 20 20 20 20 20 73 65 74      }].!     set
4e70: 20 72 32 20 5b 73 6c 61 76 65 20 65 76 61 6c 20   r2 [slave eval 
4e80: 7b 20 73 65 74 20 6d 73 67 20 7d 5d 0a 21 20 20  { set msg }].!  
4e90: 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65     interp delete
4ea0: 20 73 6c 61 76 65 0a 21 20 20 20 20 20 6c 69 73   slave.!     lis
4eb0: 74 20 24 72 31 20 24 72 32 0a 21 20 7d 20 7b 30  t $r1 $r2.! } {0
4ec0: 20 6f 6b 7d 0a 21 20 0a 21 20 74 65 73 74 20 69   ok}.! .! test i
4ed0: 6e 74 65 72 70 2d 32 39 2e 33 2e 31 30 20 7b 72  nterp-29.3.10 {r
4ee0: 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20 65  ecursion limit e
4ef0: 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 7d 20  rror reporting} 
4f00: 7b 0a 21 20 20 20 20 20 69 6e 74 65 72 70 20 63  {.!     interp c
4f10: 72 65 61 74 65 20 73 6c 61 76 65 0a 21 20 20 20  reate slave.!   
4f20: 20 20 61 66 74 65 72 20 30 20 7b 73 6c 61 76 65    after 0 {slave
4f30: 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20   recursionlimit 
4f40: 34 7d 0a 21 20 20 20 20 20 73 65 74 20 72 31 20  4}.!     set r1 
4f50: 5b 73 6c 61 76 65 20 65 76 61 6c 20 7b 0a 21 20  [slave eval {.! 
4f60: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 20          catch { 
4f70: 09 09 23 20 6e 65 73 74 69 6e 67 20 6c 65 76 65  ..# nesting leve
4f80: 6c 20 31 0a 21 20 09 20 20 20 20 65 76 61 6c 20  l 1.! .    eval 
4f90: 7b 09 09 23 20 32 0a 21 20 09 20 20 20 20 20 20  {..# 2.! .      
4fa0: 20 20 65 76 61 6c 20 7b 09 09 23 20 33 0a 21 20    eval {..# 3.! 
4fb0: 09 09 20 20 20 20 65 76 61 6c 20 7b 09 23 20 34  ..    eval {.# 4
4fc0: 0a 21 20 09 09 20 20 20 20 20 20 20 20 65 76 61  .! ..        eva
4fd0: 6c 20 7b 09 23 20 35 0a 21 20 09 09 09 20 20 20  l {.# 5.! ...   
4fe0: 20 20 75 70 64 61 74 65 0a 21 20 09 09 09 20 20    update.! ...  
4ff0: 20 20 20 73 65 74 20 78 20 6f 6b 0a 21 20 09 09     set x ok.! ..
5000: 09 7d 0a 21 20 09 09 20 20 20 20 7d 0a 21 20 09  .}.! ..    }.! .
5010: 09 7d 0a 21 20 09 20 20 20 20 7d 0a 21 20 09 7d  .}.! .    }.! .}
5020: 20 6d 73 67 0a 21 20 20 20 20 20 7d 5d 0a 21 20   msg.!     }].! 
5030: 20 20 20 20 73 65 74 20 72 32 20 5b 73 6c 61 76      set r2 [slav
5040: 65 20 65 76 61 6c 20 7b 20 73 65 74 20 6d 73 67  e eval { set msg
5050: 20 7d 5d 0a 21 20 20 20 20 20 69 6e 74 65 72 70   }].!     interp
5060: 20 64 65 6c 65 74 65 20 73 6c 61 76 65 0a 21 20   delete slave.! 
5070: 20 20 20 20 6c 69 73 74 20 24 72 31 20 24 72 32      list $r1 $r2
5080: 0a 21 20 7d 20 7b 31 20 7b 74 6f 6f 20 6d 61 6e  .! } {1 {too man
5090: 79 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  y nested calls t
50a0: 6f 20 54 63 6c 5f 45 76 61 6c 20 28 69 6e 66 69  o Tcl_Eval (infi
50b0: 6e 69 74 65 20 6c 6f 6f 70 3f 29 7d 7d 0a 21 20  nite loop?)}}.! 
50c0: 0a 21 20 74 65 73 74 20 69 6e 74 65 72 70 2d 32  .! test interp-2
50d0: 39 2e 33 2e 31 31 20 7b 72 65 63 75 72 73 69 6f  9.3.11 {recursio
50e0: 6e 20 6c 69 6d 69 74 20 65 72 72 6f 72 20 72 65  n limit error re
50f0: 70 6f 72 74 69 6e 67 7d 20 7b 0a 21 20 20 20 20  porting} {.!    
5100: 20 69 6e 74 65 72 70 20 63 72 65 61 74 65 20 73   interp create s
5110: 6c 61 76 65 0a 21 20 20 20 20 20 61 66 74 65 72  lave.!     after
5120: 20 30 20 7b 73 6c 61 76 65 20 72 65 63 75 72 73   0 {slave recurs
5130: 69 6f 6e 6c 69 6d 69 74 20 35 7d 0a 21 20 20 20  ionlimit 5}.!   
5140: 20 20 73 65 74 20 72 31 20 5b 73 6c 61 76 65 20    set r1 [slave 
5150: 65 76 61 6c 20 7b 0a 21 20 20 20 20 20 20 20 20  eval {.!        
5160: 20 63 61 74 63 68 20 7b 20 09 09 23 20 6e 65 73   catch { ..# nes
5170: 74 69 6e 67 20 6c 65 76 65 6c 20 31 0a 21 20 09  ting level 1.! .
5180: 20 20 20 20 65 76 61 6c 20 7b 09 09 23 20 32 0a      eval {..# 2.
5190: 21 20 09 20 20 20 20 20 20 20 20 65 76 61 6c 20  ! .        eval 
51a0: 7b 09 09 23 20 33 0a 21 20 09 09 20 20 20 20 65  {..# 3.! ..    e
51b0: 76 61 6c 20 7b 09 23 20 34 0a 21 20 09 09 20 20  val {.# 4.! ..  
51c0: 20 20 20 20 20 20 65 76 61 6c 20 7b 09 23 20 35        eval {.# 5
51d0: 0a 21 20 09 09 09 20 20 20 20 20 75 70 64 61 74  .! ...     updat
51e0: 65 0a 21 20 09 09 09 20 20 20 20 20 73 65 74 20  e.! ...     set 
51f0: 78 20 6f 6b 0a 21 20 09 09 09 7d 0a 21 20 09 09  x ok.! ...}.! ..
5200: 20 20 20 20 7d 0a 21 20 09 09 7d 0a 21 20 09 20      }.! ..}.! . 
5210: 20 20 20 7d 0a 21 20 09 7d 20 6d 73 67 0a 21 20     }.! .} msg.! 
5220: 20 20 20 20 7d 5d 0a 21 20 20 20 20 20 73 65 74      }].!     set
5230: 20 72 32 20 5b 73 6c 61 76 65 20 65 76 61 6c 20   r2 [slave eval 
5240: 7b 20 73 65 74 20 6d 73 67 20 7d 5d 0a 21 20 20  { set msg }].!  
5250: 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65     interp delete
5260: 20 73 6c 61 76 65 0a 21 20 20 20 20 20 6c 69 73   slave.!     lis
5270: 74 20 24 72 31 20 24 72 32 0a 21 20 7d 20 7b 31  t $r1 $r2.! } {1
5280: 20 7b 74 6f 6f 20 6d 61 6e 79 20 6e 65 73 74 65   {too many neste
5290: 64 20 63 61 6c 6c 73 20 74 6f 20 54 63 6c 5f 45  d calls to Tcl_E
52a0: 76 61 6c 20 28 69 6e 66 69 6e 69 74 65 20 6c 6f  val (infinite lo
52b0: 6f 70 3f 29 7d 7d 0a 21 20 0a 21 20 74 65 73 74  op?)}}.! .! test
52c0: 20 69 6e 74 65 72 70 2d 32 39 2e 33 2e 31 32 20   interp-29.3.12 
52d0: 7b 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74  {recursion limit
52e0: 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67   error reporting
52f0: 7d 20 7b 0a 21 20 20 20 20 20 69 6e 74 65 72 70  } {.!     interp
5300: 20 63 72 65 61 74 65 20 73 6c 61 76 65 0a 21 20   create slave.! 
5310: 20 20 20 20 61 66 74 65 72 20 30 20 7b 73 6c 61      after 0 {sla
5320: 76 65 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  ve recursionlimi
5330: 74 20 36 7d 0a 21 20 20 20 20 20 73 65 74 20 72  t 6}.!     set r
5340: 31 20 5b 73 6c 61 76 65 20 65 76 61 6c 20 7b 0a  1 [slave eval {.
5350: 21 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20  !         catch 
5360: 7b 20 09 09 23 20 6e 65 73 74 69 6e 67 20 6c 65  { ..# nesting le
5370: 76 65 6c 20 31 0a 21 20 09 20 20 20 20 65 76 61  vel 1.! .    eva
5380: 6c 20 7b 09 09 23 20 32 0a 21 20 09 20 20 20 20  l {..# 2.! .    
5390: 20 20 20 20 65 76 61 6c 20 7b 09 09 23 20 33 0a      eval {..# 3.
53a0: 21 20 09 09 20 20 20 20 65 76 61 6c 20 7b 09 23  ! ..    eval {.#
53b0: 20 34 0a 21 20 09 09 20 20 20 20 20 20 20 20 65   4.! ..        e
53c0: 76 61 6c 20 7b 09 23 20 35 0a 21 20 09 09 09 20  val {.# 5.! ... 
53d0: 20 20 20 20 75 70 64 61 74 65 0a 21 20 09 09 09      update.! ...
53e0: 20 20 20 20 20 73 65 74 20 78 20 6f 6b 0a 21 20       set x ok.! 
53f0: 09 09 09 7d 0a 21 20 09 09 20 20 20 20 7d 0a 21  ...}.! ..    }.!
5400: 20 09 09 7d 0a 21 20 09 20 20 20 20 7d 0a 21 20   ..}.! .    }.! 
5410: 09 7d 20 6d 73 67 0a 21 20 20 20 20 20 7d 5d 0a  .} msg.!     }].
5420: 21 20 20 20 20 20 73 65 74 20 72 32 20 5b 73 6c  !     set r2 [sl
5430: 61 76 65 20 65 76 61 6c 20 7b 20 73 65 74 20 6d  ave eval { set m
5440: 73 67 20 7d 5d 0a 21 20 20 20 20 20 69 6e 74 65  sg }].!     inte
5450: 72 70 20 64 65 6c 65 74 65 20 73 6c 61 76 65 0a  rp delete slave.
5460: 21 20 20 20 20 20 6c 69 73 74 20 24 72 31 20 24  !     list $r1 $
5470: 72 32 0a 21 20 7d 20 7b 30 20 6f 6b 7d 0a 20 20  r2.! } {0 ok}.  
5480: 0a 21 20 74 65 73 74 20 69 6e 74 65 72 70 2d 32  .! test interp-2
5490: 39 2e 34 2e 31 20 7b 72 65 63 75 72 73 69 6f 6e  9.4.1 {recursion
54a0: 20 6c 69 6d 69 74 20 69 6e 68 65 72 69 74 61 6e   limit inheritan
54b0: 63 65 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  ce} {.      set 
54c0: 69 20 5b 69 6e 74 65 72 70 20 63 72 65 61 74 65  i [interp create
54d0: 5d 0a 20 20 20 20 20 20 73 65 74 20 69 69 20 5b  ].      set ii [
54e0: 69 6e 74 65 72 70 20 65 76 61 6c 20 24 69 20 7b  interp eval $i {
54f0: 0a 21 20 09 69 6e 74 65 72 70 20 72 65 63 75 72  .! .interp recur
5500: 73 69 6f 6e 6c 69 6d 69 74 20 7b 7d 20 35 30 0a  sionlimit {} 50.
5510: 20 20 09 69 6e 74 65 72 70 20 63 72 65 61 74 65    .interp create
5520: 0a 20 20 20 20 20 20 7d 5d 0a 20 20 20 20 20 20  .      }].      
5530: 73 65 74 20 72 20 5b 69 6e 74 65 72 70 20 65 76  set r [interp ev
5540: 61 6c 20 5b 6c 69 73 74 20 24 69 20 24 69 69 5d  al [list $i $ii]
5550: 20 7b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   {.*************
5560: 2a 2a 0a 2a 2a 2a 20 32 33 31 36 2c 32 33 32 31  **.*** 2316,2321
5570: 20 2a 2a 2a 2a 0a 2d 2d 2d 20 32 36 35 36 2c 32   ****.--- 2656,2
5580: 38 30 37 20 2d 2d 2d 2d 0a 20 20 20 20 20 73 65  807 ----.     se
5590: 74 20 72 0a 20 20 7d 20 34 39 0a 20 20 0a 2b 20  t r.  } 49.  .+ 
55a0: 74 65 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 34  test interp-29.4
55b0: 2e 32 20 7b 72 65 63 75 72 73 69 6f 6e 20 6c 69  .2 {recursion li
55c0: 6d 69 74 20 69 6e 68 65 72 69 74 61 6e 63 65 7d  mit inheritance}
55d0: 20 7b 0a 2b 20 20 20 20 20 73 65 74 20 69 20 5b   {.+     set i [
55e0: 69 6e 74 65 72 70 20 63 72 65 61 74 65 5d 0a 2b  interp create].+
55f0: 20 20 20 20 20 24 69 20 72 65 63 75 72 73 69 6f       $i recursio
5600: 6e 6c 69 6d 69 74 20 35 30 0a 2b 20 20 20 20 20  nlimit 50.+     
5610: 73 65 74 20 69 69 20 5b 69 6e 74 65 72 70 20 65  set ii [interp e
5620: 76 61 6c 20 24 69 20 7b 69 6e 74 65 72 70 20 63  val $i {interp c
5630: 72 65 61 74 65 7d 5d 0a 2b 20 20 20 20 20 73 65  reate}].+     se
5640: 74 20 72 20 5b 69 6e 74 65 72 70 20 65 76 61 6c  t r [interp eval
5650: 20 5b 6c 69 73 74 20 24 69 20 24 69 69 5d 20 7b   [list $i $ii] {
5660: 0a 2b 20 09 70 72 6f 63 20 70 20 7b 7d 20 7b 69  .+ .proc p {} {i
5670: 6e 63 72 20 3a 3a 69 3b 20 70 7d 0a 2b 20 09 73  ncr ::i; p}.+ .s
5680: 65 74 20 69 20 30 0a 2b 20 09 63 61 74 63 68 20  et i 0.+ .catch 
5690: 70 0a 2b 20 09 73 65 74 20 69 0a 2b 20 20 20 20  p.+ .set i.+    
56a0: 20 7d 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20   }].+    interp 
56b0: 64 65 6c 65 74 65 20 24 69 0a 2b 20 20 20 20 73  delete $i.+    s
56c0: 65 74 20 72 0a 2b 20 7d 20 34 39 0a 2b 20 0a 2b  et r.+ } 49.+ .+
56d0: 20 74 65 73 74 20 69 6e 74 65 72 70 2d 32 39 2e   test interp-29.
56e0: 35 2e 31 20 7b 64 6f 65 73 20 73 6c 61 76 65 20  5.1 {does slave 
56f0: 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20  recursion limit 
5700: 61 66 66 65 63 74 20 6d 61 73 74 65 72 3f 7d 20  affect master?} 
5710: 7b 0a 2b 20 20 20 20 20 73 65 74 20 62 65 66 6f  {.+     set befo
5720: 72 65 20 5b 69 6e 74 65 72 70 20 72 65 63 75 72  re [interp recur
5730: 73 69 6f 6e 6c 69 6d 69 74 20 7b 7d 5d 0a 2b 20  sionlimit {}].+ 
5740: 20 20 20 20 73 65 74 20 69 20 5b 69 6e 74 65 72      set i [inter
5750: 70 20 63 72 65 61 74 65 5d 0a 2b 20 20 20 20 20  p create].+     
5760: 69 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e  interp recursion
5770: 6c 69 6d 69 74 20 24 69 20 32 30 30 30 30 0a 2b  limit $i 20000.+
5780: 20 20 20 20 20 73 65 74 20 61 66 74 65 72 20 5b       set after [
5790: 69 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e  interp recursion
57a0: 6c 69 6d 69 74 20 7b 7d 5d 0a 2b 20 20 20 20 20  limit {}].+     
57b0: 73 65 74 20 73 6c 61 76 65 6c 69 6d 69 74 20 5b  set slavelimit [
57c0: 69 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e  interp recursion
57d0: 6c 69 6d 69 74 20 24 69 5d 0a 2b 20 20 20 20 20  limit $i].+     
57e0: 69 6e 74 65 72 70 20 64 65 6c 65 74 65 20 24 69  interp delete $i
57f0: 0a 2b 20 20 20 20 20 6c 69 73 74 20 5b 65 78 70  .+     list [exp
5800: 72 20 7b 24 62 65 66 6f 72 65 20 3d 3d 20 24 61  r {$before == $a
5810: 66 74 65 72 7d 5d 20 24 73 6c 61 76 65 6c 69 6d  fter}] $slavelim
5820: 69 74 0a 2b 20 7d 20 7b 31 20 32 30 30 30 30 7d  it.+ } {1 20000}
5830: 0a 2b 20 0a 2b 20 74 65 73 74 20 69 6e 74 65 72  .+ .+ test inter
5840: 70 2d 32 39 2e 35 2e 32 20 7b 64 6f 65 73 20 73  p-29.5.2 {does s
5850: 6c 61 76 65 20 72 65 63 75 72 73 69 6f 6e 20 6c  lave recursion l
5860: 69 6d 69 74 20 61 66 66 65 63 74 20 6d 61 73 74  imit affect mast
5870: 65 72 3f 7d 20 7b 0a 2b 20 20 20 20 20 73 65 74  er?} {.+     set
5880: 20 62 65 66 6f 72 65 20 5b 69 6e 74 65 72 70 20   before [interp 
5890: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 7b  recursionlimit {
58a0: 7d 5d 0a 2b 20 20 20 20 20 73 65 74 20 69 20 5b  }].+     set i [
58b0: 69 6e 74 65 72 70 20 63 72 65 61 74 65 5d 0a 2b  interp create].+
58c0: 20 20 20 20 20 69 6e 74 65 72 70 20 72 65 63 75       interp recu
58d0: 72 73 69 6f 6e 6c 69 6d 69 74 20 24 69 20 32 30  rsionlimit $i 20
58e0: 30 30 30 0a 2b 20 20 20 20 20 73 65 74 20 61 66  000.+     set af
58f0: 74 65 72 20 5b 69 6e 74 65 72 70 20 72 65 63 75  ter [interp recu
5900: 72 73 69 6f 6e 6c 69 6d 69 74 20 7b 7d 5d 0a 2b  rsionlimit {}].+
5910: 20 20 20 20 20 73 65 74 20 73 6c 61 76 65 6c 69       set slaveli
5920: 6d 69 74 20 5b 24 69 20 72 65 63 75 72 73 69 6f  mit [$i recursio
5930: 6e 6c 69 6d 69 74 5d 0a 2b 20 20 20 20 20 69 6e  nlimit].+     in
5940: 74 65 72 70 20 64 65 6c 65 74 65 20 24 69 0a 2b  terp delete $i.+
5950: 20 20 20 20 20 6c 69 73 74 20 5b 65 78 70 72 20       list [expr 
5960: 7b 24 62 65 66 6f 72 65 20 3d 3d 20 24 61 66 74  {$before == $aft
5970: 65 72 7d 5d 20 24 73 6c 61 76 65 6c 69 6d 69 74  er}] $slavelimit
5980: 0a 2b 20 7d 20 7b 31 20 32 30 30 30 30 7d 0a 2b  .+ } {1 20000}.+
5990: 20 0a 2b 20 74 65 73 74 20 69 6e 74 65 72 70 2d   .+ test interp-
59a0: 32 39 2e 35 2e 33 20 7b 64 6f 65 73 20 73 6c 61  29.5.3 {does sla
59b0: 76 65 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d  ve recursion lim
59c0: 69 74 20 61 66 66 65 63 74 20 6d 61 73 74 65 72  it affect master
59d0: 3f 7d 20 7b 0a 2b 20 20 20 20 20 73 65 74 20 62  ?} {.+     set b
59e0: 65 66 6f 72 65 20 5b 69 6e 74 65 72 70 20 72 65  efore [interp re
59f0: 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 7b 7d 5d  cursionlimit {}]
5a00: 0a 2b 20 20 20 20 20 73 65 74 20 69 20 5b 69 6e  .+     set i [in
5a10: 74 65 72 70 20 63 72 65 61 74 65 5d 0a 2b 20 20  terp create].+  
5a20: 20 20 20 24 69 20 72 65 63 75 72 73 69 6f 6e 6c     $i recursionl
5a30: 69 6d 69 74 20 32 30 30 30 30 0a 2b 20 20 20 20  imit 20000.+    
5a40: 20 73 65 74 20 61 66 74 65 72 20 5b 69 6e 74 65   set after [inte
5a50: 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  rp recursionlimi
5a60: 74 20 7b 7d 5d 0a 2b 20 20 20 20 20 73 65 74 20  t {}].+     set 
5a70: 73 6c 61 76 65 6c 69 6d 69 74 20 5b 69 6e 74 65  slavelimit [inte
5a80: 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  rp recursionlimi
5a90: 74 20 24 69 5d 0a 2b 20 20 20 20 20 69 6e 74 65  t $i].+     inte
5aa0: 72 70 20 64 65 6c 65 74 65 20 24 69 0a 2b 20 20  rp delete $i.+  
5ab0: 20 20 20 6c 69 73 74 20 5b 65 78 70 72 20 7b 24     list [expr {$
5ac0: 62 65 66 6f 72 65 20 3d 3d 20 24 61 66 74 65 72  before == $after
5ad0: 7d 5d 20 24 73 6c 61 76 65 6c 69 6d 69 74 0a 2b  }] $slavelimit.+
5ae0: 20 7d 20 7b 31 20 32 30 30 30 30 7d 0a 2b 20 0a   } {1 20000}.+ .
5af0: 2b 20 74 65 73 74 20 69 6e 74 65 72 70 2d 32 39  + test interp-29
5b00: 2e 35 2e 34 20 7b 64 6f 65 73 20 73 6c 61 76 65  .5.4 {does slave
5b10: 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74   recursion limit
5b20: 20 61 66 66 65 63 74 20 6d 61 73 74 65 72 3f 7d   affect master?}
5b30: 20 7b 0a 2b 20 20 20 20 20 73 65 74 20 62 65 66   {.+     set bef
5b40: 6f 72 65 20 5b 69 6e 74 65 72 70 20 72 65 63 75  ore [interp recu
5b50: 72 73 69 6f 6e 6c 69 6d 69 74 20 7b 7d 5d 0a 2b  rsionlimit {}].+
5b60: 20 20 20 20 20 73 65 74 20 69 20 5b 69 6e 74 65       set i [inte
5b70: 72 70 20 63 72 65 61 74 65 5d 0a 2b 20 20 20 20  rp create].+    
5b80: 20 24 69 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d   $i recursionlim
5b90: 69 74 20 32 30 30 30 30 0a 2b 20 20 20 20 20 73  it 20000.+     s
5ba0: 65 74 20 61 66 74 65 72 20 5b 69 6e 74 65 72 70  et after [interp
5bb0: 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20   recursionlimit 
5bc0: 7b 7d 5d 0a 2b 20 20 20 20 20 73 65 74 20 73 6c  {}].+     set sl
5bd0: 61 76 65 6c 69 6d 69 74 20 5b 24 69 20 72 65 63  avelimit [$i rec
5be0: 75 72 73 69 6f 6e 6c 69 6d 69 74 5d 0a 2b 20 20  ursionlimit].+  
5bf0: 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65     interp delete
5c00: 20 24 69 0a 2b 20 20 20 20 20 6c 69 73 74 20 5b   $i.+     list [
5c10: 65 78 70 72 20 7b 24 62 65 66 6f 72 65 20 3d 3d  expr {$before ==
5c20: 20 24 61 66 74 65 72 7d 5d 20 24 73 6c 61 76 65   $after}] $slave
5c30: 6c 69 6d 69 74 0a 2b 20 7d 20 7b 31 20 32 30 30  limit.+ } {1 200
5c40: 30 30 7d 0a 2b 20 0a 2b 20 74 65 73 74 20 69 6e  00}.+ .+ test in
5c50: 74 65 72 70 2d 32 39 2e 36 2e 31 20 7b 73 61 66  terp-29.6.1 {saf
5c60: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 72 65  e interpreter re
5c70: 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b  cursion limit} {
5c80: 0a 2b 20 20 20 20 20 69 6e 74 65 72 70 20 63 72  .+     interp cr
5c90: 65 61 74 65 20 73 6c 61 76 65 20 2d 73 61 66 65  eate slave -safe
5ca0: 0a 2b 20 20 20 20 20 73 65 74 20 6e 20 5b 69 6e  .+     set n [in
5cb0: 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69  terp recursionli
5cc0: 6d 69 74 20 73 6c 61 76 65 5d 0a 2b 20 20 20 20  mit slave].+    
5cd0: 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65 20 73   interp delete s
5ce0: 6c 61 76 65 0a 2b 20 20 20 20 20 73 65 74 20 6e  lave.+     set n
5cf0: 0a 2b 20 7d 20 31 30 30 30 0a 2b 20 0a 2b 20 74  .+ } 1000.+ .+ t
5d00: 65 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 36 2e  est interp-29.6.
5d10: 32 20 7b 73 61 66 65 20 69 6e 74 65 72 70 72 65  2 {safe interpre
5d20: 74 65 72 20 72 65 63 75 72 73 69 6f 6e 20 6c 69  ter recursion li
5d30: 6d 69 74 7d 20 7b 0a 2b 20 20 20 20 20 69 6e 74  mit} {.+     int
5d40: 65 72 70 20 63 72 65 61 74 65 20 73 6c 61 76 65  erp create slave
5d50: 20 2d 73 61 66 65 0a 2b 20 20 20 20 20 73 65 74   -safe.+     set
5d60: 20 6e 20 5b 73 6c 61 76 65 20 72 65 63 75 72 73   n [slave recurs
5d70: 69 6f 6e 6c 69 6d 69 74 5d 0a 2b 20 20 20 20 20  ionlimit].+     
5d80: 69 6e 74 65 72 70 20 64 65 6c 65 74 65 20 73 6c  interp delete sl
5d90: 61 76 65 0a 2b 20 20 20 20 20 73 65 74 20 6e 0a  ave.+     set n.
5da0: 2b 20 7d 20 31 30 30 30 0a 2b 20 0a 2b 20 74 65  + } 1000.+ .+ te
5db0: 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 36 2e 33  st interp-29.6.3
5dc0: 20 7b 73 61 66 65 20 69 6e 74 65 72 70 72 65 74   {safe interpret
5dd0: 65 72 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d  er recursion lim
5de0: 69 74 7d 20 7b 0a 2b 20 20 20 20 20 69 6e 74 65  it} {.+     inte
5df0: 72 70 20 63 72 65 61 74 65 20 73 6c 61 76 65 20  rp create slave 
5e00: 2d 73 61 66 65 0a 2b 20 20 20 20 20 73 65 74 20  -safe.+     set 
5e10: 6e 31 20 5b 69 6e 74 65 72 70 20 72 65 63 75 72  n1 [interp recur
5e20: 73 69 6f 6e 6c 69 6d 69 74 20 73 6c 61 76 65 20  sionlimit slave 
5e30: 34 32 5d 0a 2b 20 20 20 20 20 73 65 74 20 6e 32  42].+     set n2
5e40: 20 5b 69 6e 74 65 72 70 20 72 65 63 75 72 73 69   [interp recursi
5e50: 6f 6e 6c 69 6d 69 74 20 73 6c 61 76 65 5d 0a 2b  onlimit slave].+
5e60: 20 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65       interp dele
5e70: 74 65 20 73 6c 61 76 65 0a 2b 20 20 20 20 20 6c  te slave.+     l
5e80: 69 73 74 20 24 6e 31 20 24 6e 32 0a 2b 20 7d 20  ist $n1 $n2.+ } 
5e90: 7b 34 32 20 34 32 7d 0a 2b 20 0a 2b 20 74 65 73  {42 42}.+ .+ tes
5ea0: 74 20 69 6e 74 65 72 70 2d 32 39 2e 36 2e 34 20  t interp-29.6.4 
5eb0: 7b 73 61 66 65 20 69 6e 74 65 72 70 72 65 74 65  {safe interprete
5ec0: 72 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69  r recursion limi
5ed0: 74 7d 20 7b 0a 2b 20 20 20 20 20 69 6e 74 65 72  t} {.+     inter
5ee0: 70 20 63 72 65 61 74 65 20 73 6c 61 76 65 20 2d  p create slave -
5ef0: 73 61 66 65 0a 2b 20 20 20 20 20 73 65 74 20 6e  safe.+     set n
5f00: 31 20 5b 73 6c 61 76 65 20 72 65 63 75 72 73 69  1 [slave recursi
5f10: 6f 6e 6c 69 6d 69 74 20 34 32 5d 0a 2b 20 20 20  onlimit 42].+   
5f20: 20 20 73 65 74 20 6e 32 20 5b 69 6e 74 65 72 70    set n2 [interp
5f30: 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20   recursionlimit 
5f40: 73 6c 61 76 65 5d 0a 2b 20 20 20 20 20 69 6e 74  slave].+     int
5f50: 65 72 70 20 64 65 6c 65 74 65 20 73 6c 61 76 65  erp delete slave
5f60: 0a 2b 20 20 20 20 20 6c 69 73 74 20 24 6e 31 20  .+     list $n1 
5f70: 24 6e 32 0a 2b 20 7d 20 7b 34 32 20 34 32 7d 0a  $n2.+ } {42 42}.
5f80: 2b 20 0a 2b 20 74 65 73 74 20 69 6e 74 65 72 70  + .+ test interp
5f90: 2d 32 39 2e 36 2e 35 20 7b 73 61 66 65 20 69 6e  -29.6.5 {safe in
5fa0: 74 65 72 70 72 65 74 65 72 20 72 65 63 75 72 73  terpreter recurs
5fb0: 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b 0a 2b 20 20  ion limit} {.+  
5fc0: 20 20 20 69 6e 74 65 72 70 20 63 72 65 61 74 65     interp create
5fd0: 20 73 6c 61 76 65 20 2d 73 61 66 65 0a 2b 20 20   slave -safe.+  
5fe0: 20 20 20 73 65 74 20 6e 31 20 5b 69 6e 74 65 72     set n1 [inter
5ff0: 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74  p recursionlimit
6000: 20 73 6c 61 76 65 20 34 32 5d 0a 2b 20 20 20 20   slave 42].+    
6010: 20 73 65 74 20 6e 32 20 5b 73 6c 61 76 65 20 72   set n2 [slave r
6020: 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 5d 0a 2b  ecursionlimit].+
6030: 20 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65       interp dele
6040: 74 65 20 73 6c 61 76 65 0a 2b 20 20 20 20 20 6c  te slave.+     l
6050: 69 73 74 20 24 6e 31 20 24 6e 32 0a 2b 20 7d 20  ist $n1 $n2.+ } 
6060: 7b 34 32 20 34 32 7d 0a 2b 20 0a 2b 20 74 65 73  {42 42}.+ .+ tes
6070: 74 20 69 6e 74 65 72 70 2d 32 39 2e 36 2e 36 20  t interp-29.6.6 
6080: 7b 73 61 66 65 20 69 6e 74 65 72 70 72 65 74 65  {safe interprete
6090: 72 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69  r recursion limi
60a0: 74 7d 20 7b 0a 2b 20 20 20 20 20 69 6e 74 65 72  t} {.+     inter
60b0: 70 20 63 72 65 61 74 65 20 73 6c 61 76 65 20 2d  p create slave -
60c0: 73 61 66 65 0a 2b 20 20 20 20 20 73 65 74 20 6e  safe.+     set n
60d0: 31 20 5b 73 6c 61 76 65 20 72 65 63 75 72 73 69  1 [slave recursi
60e0: 6f 6e 6c 69 6d 69 74 20 34 32 5d 0a 2b 20 20 20  onlimit 42].+   
60f0: 20 20 73 65 74 20 6e 32 20 5b 73 6c 61 76 65 20    set n2 [slave 
6100: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 5d 0a  recursionlimit].
6110: 2b 20 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c  +     interp del
6120: 65 74 65 20 73 6c 61 76 65 0a 2b 20 20 20 20 20  ete slave.+     
6130: 6c 69 73 74 20 24 6e 31 20 24 6e 32 0a 2b 20 7d  list $n1 $n2.+ }
6140: 20 7b 34 32 20 34 32 7d 0a 2b 20 0a 2b 20 74 65   {42 42}.+ .+ te
6150: 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 36 2e 37  st interp-29.6.7
6160: 20 7b 73 61 66 65 20 69 6e 74 65 72 70 72 65 74   {safe interpret
6170: 65 72 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d  er recursion lim
6180: 69 74 7d 20 7b 0a 2b 20 20 20 20 20 69 6e 74 65  it} {.+     inte
6190: 72 70 20 63 72 65 61 74 65 20 73 6c 61 76 65 20  rp create slave 
61a0: 2d 73 61 66 65 0a 2b 20 20 20 20 20 73 65 74 20  -safe.+     set 
61b0: 6e 31 20 5b 73 6c 61 76 65 20 72 65 63 75 72 73  n1 [slave recurs
61c0: 69 6f 6e 6c 69 6d 69 74 20 34 32 5d 0a 2b 20 20  ionlimit 42].+  
61d0: 20 20 20 73 65 74 20 6e 32 20 5b 73 6c 61 76 65     set n2 [slave
61e0: 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 5d   recursionlimit]
61f0: 0a 2b 20 20 20 20 20 69 6e 74 65 72 70 20 64 65  .+     interp de
6200: 6c 65 74 65 20 73 6c 61 76 65 0a 2b 20 20 20 20  lete slave.+    
6210: 20 6c 69 73 74 20 24 6e 31 20 24 6e 32 0a 2b 20   list $n1 $n2.+ 
6220: 7d 20 7b 34 32 20 34 32 7d 0a 2b 20 0a 2b 20 74  } {42 42}.+ .+ t
6230: 65 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 36 2e  est interp-29.6.
6240: 38 20 7b 73 61 66 65 20 69 6e 74 65 72 70 72 65  8 {safe interpre
6250: 74 65 72 20 72 65 63 75 72 73 69 6f 6e 20 6c 69  ter recursion li
6260: 6d 69 74 7d 20 7b 0a 2b 20 20 20 20 20 69 6e 74  mit} {.+     int
6270: 65 72 70 20 63 72 65 61 74 65 20 73 6c 61 76 65  erp create slave
6280: 20 2d 73 61 66 65 0a 2b 20 20 20 20 20 73 65 74   -safe.+     set
6290: 20 6e 20 5b 63 61 74 63 68 20 7b 73 6c 61 76 65   n [catch {slave
62a0: 20 65 76 61 6c 20 7b 69 6e 74 65 72 70 20 72 65   eval {interp re
62b0: 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 7b 7d 20  cursionlimit {} 
62c0: 34 32 7d 7d 20 6d 73 67 5d 0a 2b 20 20 20 20 20  42}} msg].+     
62d0: 69 6e 74 65 72 70 20 64 65 6c 65 74 65 20 73 6c  interp delete sl
62e0: 61 76 65 0a 2b 20 20 20 20 20 6c 69 73 74 20 24  ave.+     list $
62f0: 6e 20 24 6d 73 67 0a 2b 20 7d 20 7b 31 20 7b 70  n $msg.+ } {1 {p
6300: 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65 64  ermission denied
6310: 3a 20 73 61 66 65 20 69 6e 74 65 72 70 72 65 74  : safe interpret
6320: 65 72 73 20 63 61 6e 6e 6f 74 20 63 68 61 6e 67  ers cannot chang
6330: 65 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69  e recursion limi
6340: 74 7d 7d 0a 2b 20 0a 2b 20 74 65 73 74 20 69 6e  t}}.+ .+ test in
6350: 74 65 72 70 2d 32 39 2e 36 2e 39 20 7b 73 61 66  terp-29.6.9 {saf
6360: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 72 65  e interpreter re
6370: 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b  cursion limit} {
6380: 0a 2b 20 20 20 20 20 69 6e 74 65 72 70 20 63 72  .+     interp cr
6390: 65 61 74 65 20 73 6c 61 76 65 20 2d 73 61 66 65  eate slave -safe
63a0: 0a 2b 20 20 20 20 20 73 65 74 20 72 65 73 75 6c  .+     set resul
63b0: 74 20 5b 0a 2b 20 09 73 6c 61 76 65 20 65 76 61  t [.+ .slave eva
63c0: 6c 20 7b 0a 2b 20 09 20 20 20 20 69 6e 74 65 72  l {.+ .    inter
63d0: 70 20 63 72 65 61 74 65 20 73 6c 61 76 65 32 20  p create slave2 
63e0: 2d 73 61 66 65 0a 2b 20 09 20 20 20 20 73 65 74  -safe.+ .    set
63f0: 20 6e 20 5b 63 61 74 63 68 20 7b 0a 2b 20 09 20   n [catch {.+ . 
6400: 20 20 20 20 20 20 20 69 6e 74 65 72 70 20 72 65         interp re
6410: 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 73 6c 61  cursionlimit sla
6420: 76 65 32 20 34 32 0a 2b 20 20 20 20 20 20 20 20  ve2 42.+        
6430: 20 20 20 20 20 7d 20 6d 73 67 5d 0a 2b 20 20 20       } msg].+   
6440: 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 20 24            list $
6450: 6e 20 24 6d 73 67 0a 2b 20 20 20 20 20 20 20 20  n $msg.+        
6460: 20 7d 0a 2b 20 20 20 20 20 5d 0a 2b 20 20 20 20   }.+     ].+    
6470: 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65 20 73   interp delete s
6480: 6c 61 76 65 0a 2b 20 20 20 20 20 73 65 74 20 72  lave.+     set r
6490: 65 73 75 6c 74 0a 2b 20 7d 20 7b 31 20 7b 70 65  esult.+ } {1 {pe
64a0: 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65 64 3a  rmission denied:
64b0: 20 73 61 66 65 20 69 6e 74 65 72 70 72 65 74 65   safe interprete
64c0: 72 73 20 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65  rs cannot change
64d0: 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74   recursion limit
64e0: 7d 7d 0a 2b 20 0a 2b 20 74 65 73 74 20 69 6e 74  }}.+ .+ test int
64f0: 65 72 70 2d 32 39 2e 36 2e 31 30 20 7b 73 61 66  erp-29.6.10 {saf
6500: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 72 65  e interpreter re
6510: 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b  cursion limit} {
6520: 0a 2b 20 20 20 20 20 69 6e 74 65 72 70 20 63 72  .+     interp cr
6530: 65 61 74 65 20 73 6c 61 76 65 20 2d 73 61 66 65  eate slave -safe
6540: 0a 2b 20 20 20 20 20 73 65 74 20 72 65 73 75 6c  .+     set resul
6550: 74 20 5b 0a 2b 20 20 20 20 20 20 20 20 20 73 6c  t [.+         sl
6560: 61 76 65 20 65 76 61 6c 20 7b 0a 2b 20 09 20 20  ave eval {.+ .  
6570: 20 20 69 6e 74 65 72 70 20 63 72 65 61 74 65 20    interp create 
6580: 73 6c 61 76 65 32 20 2d 73 61 66 65 0a 2b 20 09  slave2 -safe.+ .
6590: 20 20 20 20 73 65 74 20 6e 20 5b 63 61 74 63 68      set n [catch
65a0: 20 7b 0a 2b 20 09 20 20 20 20 20 20 20 20 73 6c   {.+ .        sl
65b0: 61 76 65 32 20 72 65 63 75 72 73 69 6f 6e 6c 69  ave2 recursionli
65c0: 6d 69 74 20 34 32 0a 2b 20 20 20 20 20 20 20 20  mit 42.+        
65d0: 20 20 20 20 20 7d 20 6d 73 67 5d 0a 2b 20 20 20       } msg].+   
65e0: 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 20 24            list $
65f0: 6e 20 24 6d 73 67 0a 2b 20 20 20 20 20 20 20 20  n $msg.+        
6600: 20 7d 0a 2b 20 20 20 20 20 5d 0a 2b 20 20 20 20   }.+     ].+    
6610: 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65 20 73   interp delete s
6620: 6c 61 76 65 0a 2b 20 20 20 20 20 73 65 74 20 72  lave.+     set r
6630: 65 73 75 6c 74 0a 2b 20 7d 20 7b 31 20 7b 70 65  esult.+ } {1 {pe
6640: 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65 64 3a  rmission denied:
6650: 20 73 61 66 65 20 69 6e 74 65 72 70 72 65 74 65   safe interprete
6660: 72 73 20 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65  rs cannot change
6670: 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74   recursion limit
6680: 7d 7d 0a 2b 20 0a 2b 20 0a 20 20 23 20 20 20 20  }}.+ .+ .  #    
6690: 23 20 44 65 65 70 20 72 65 63 75 72 73 69 6f 6e  # Deep recursion
66a0: 20 28 69 6e 74 6f 20 69 6e 74 65 72 70 73 20 77   (into interps w
66b0: 68 65 6e 20 74 68 65 20 72 65 67 75 6c 61 72 20  hen the regular 
66c0: 6f 6e 65 20 66 61 69 6c 73 29 3a 0a 20 20 23 20  one fails):.  # 
66d0: 20 20 20 23 20 73 74 69 6c 6c 20 63 72 61 73 68     # still crash
66e0: 65 73 2e 2e 2e 0a 20 20 23 20 20 20 20 70 72 6f  es....  #    pro
66f0: 63 20 70 20 7b 7d 20 7b 0a 2a 2a 2a 2a 2a 2a 2a  c p {} {.*******
6700: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 32 33 33  ********.*** 233
6710: 39 2c 32 33 34 35 20 2a 2a 2a 2a 0a 20 20 23 7d  9,2345 ****.  #}
6720: 20 7b 7d 0a 20 20 0a 20 20 23 20 45 6e 64 20 6f   {}.  .  # End o
6730: 66 20 73 74 61 63 6b 2d 72 65 63 75 72 73 69 6f  f stack-recursio
6740: 6e 20 74 65 73 74 73 0a 2d 20 7d 0a 20 20 0a 20  n tests.- }.  . 
6750: 20 23 20 54 68 69 73 20 74 65 73 74 20 64 75 6d   # This test dum
6760: 70 73 20 63 6f 72 65 20 69 6e 20 54 63 6c 20 38  ps core in Tcl 8
6770: 2e 30 2e 33 21 0a 20 20 74 65 73 74 20 69 6e 74  .0.3!.  test int
6780: 65 72 70 2d 33 30 2e 31 20 7b 64 65 6c 65 74 69  erp-30.1 {deleti
6790: 6f 6e 20 6f 66 20 61 6c 69 61 73 65 73 20 69 6e  on of aliases in
67a0: 73 69 64 65 20 6e 61 6d 65 73 70 61 63 65 73 7d  side namespaces}
67b0: 20 7b 0a 2d 2d 2d 20 32 38 32 35 2c 32 38 33 30   {.--- 2825,2830
67c0: 20 2d 2d 2d 2d 0a 2a 2a 2a 20 2e 2e 2f 6f 72 69   ----.*** ../ori
67d0: 67 2f 64 6f 63 2f 69 6e 74 65 72 70 2e 6e 09 4d  g/doc/interp.n.M
67e0: 6f 6e 20 41 75 67 20 20 36 20 32 32 3a 35 34 3a  on Aug  6 22:54:
67f0: 33 30 20 32 30 30 31 0a 2d 2d 2d 20 64 6f 63 2f  30 2001.--- doc/
6800: 69 6e 74 65 72 70 2e 6e 09 54 75 65 20 46 65 62  interp.n.Tue Feb
6810: 20 32 36 20 31 33 3a 33 33 3a 34 33 20 32 30 30   26 13:33:43 200
6820: 32 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  2.**************
6830: 2a 0a 2a 2a 2a 20 32 32 32 2c 32 32 37 20 2a 2a  *.*** 222,227 **
6840: 2a 2a 0a 2d 2d 2d 20 32 32 32 2c 32 34 33 20 2d  **.--- 222,243 -
6850: 2d 2d 2d 0a 20 20 61 6c 72 65 61 64 79 20 74 72  ---.  already tr
6860: 75 73 74 65 64 2e 0a 20 20 2e 56 45 0a 20 20 2e  usted..  .VE.  .
6870: 54 50 0a 2b 20 5c 66 42 69 6e 74 65 72 70 5c 66  TP.+ \fBinterp\f
6880: 52 20 5c 66 42 72 65 63 75 72 73 69 6f 6e 6c 69  R \fBrecursionli
6890: 6d 69 74 5c 66 52 20 5c 66 49 70 61 74 68 5c 66  mit\fR \fIpath\f
68a0: 52 20 3f 5c 66 49 6e 65 77 6c 69 6d 69 74 5c 66  R ?\fInewlimit\f
68b0: 52 3f 0a 2b 20 52 65 74 75 72 6e 73 20 61 6e 64  R?.+ Returns and
68c0: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 63 68 61 6e   optionally chan
68d0: 67 65 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ges the maximum 
68e0: 61 6c 6c 6f 77 61 62 6c 65 20 6e 65 73 74 69 6e  allowable nestin
68f0: 67 20 64 65 70 74 68 20 66 6f 72 0a 2b 20 74 68  g depth for.+ th
6900: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 73 70  e interpreter sp
6910: 65 63 69 66 69 65 64 20 62 79 20 5c 66 49 70 61  ecified by \fIpa
6920: 74 68 5c 66 52 2e 20 20 49 66 20 5c 66 49 6e 65  th\fR.  If \fIne
6930: 77 6c 69 6d 69 74 5c 66 52 20 69 73 20 73 75 70  wlimit\fR is sup
6940: 70 6c 69 65 64 2c 0a 2b 20 69 74 20 62 65 63 6f  plied,.+ it beco
6950: 6d 65 73 20 74 68 65 20 6e 65 77 20 6d 61 78 69  mes the new maxi
6960: 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 6e 65  mum number of ne
6970: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 5c 66  sted calls to \f
6980: 42 54 63 6c 5f 45 76 61 6c 28 29 5c 66 52 0a 2b  BTcl_Eval()\fR.+
6990: 20 61 6e 64 20 72 65 6c 61 74 65 64 20 70 72 6f   and related pro
69a0: 63 65 64 75 72 65 73 20 74 68 61 74 20 6d 61 79  cedures that may
69b0: 20 62 65 20 6d 61 64 65 20 62 65 66 6f 72 65 20   be made before 
69c0: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2e  an error occurs.
69d0: 20 20 49 74 20 6d 75 73 74 0a 2b 20 62 65 20 61    It must.+ be a
69e0: 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
69f0: 72 2e 20 20 49 66 20 5c 66 49 6e 65 77 6c 69 6d  r.  If \fInewlim
6a00: 69 74 5c 66 52 20 69 73 20 6e 6f 74 20 73 75 70  it\fR is not sup
6a10: 70 6c 69 65 64 2c 20 74 68 65 20 63 6f 6d 6d 61  plied, the comma
6a20: 6e 64 0a 2b 20 72 65 74 75 72 6e 73 20 74 68 65  nd.+ returns the
6a30: 20 63 75 72 72 65 6e 74 20 72 65 63 75 72 73 69   current recursi
6a40: 6f 6e 20 6c 69 6d 69 74 20 66 6f 72 20 74 68 65  on limit for the
6a50: 20 69 6e 74 65 72 70 72 65 74 65 72 20 69 64 65   interpreter ide
6a60: 6e 74 69 66 69 65 64 20 62 79 0a 2b 20 5c 66 49  ntified by.+ \fI
6a70: 70 61 74 68 5c 66 52 2e 20 20 0a 2b 20 54 68 65  path\fR.  .+ The
6a80: 20 63 6f 6d 6d 61 6e 64 20 73 65 74 73 20 74 68   command sets th
6a90: 65 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f  e maximum size o
6aa0: 66 20 74 68 65 20 54 63 6c 20 63 61 6c 6c 20 73  f the Tcl call s
6ab0: 74 61 63 6b 20 6f 6e 6c 79 2e 20 49 74 20 63 61  tack only. It ca
6ac0: 6e 6e 6f 74 0a 2b 20 62 79 20 69 74 73 65 6c 66  nnot.+ by itself
6ad0: 20 70 72 65 76 65 6e 74 20 73 74 61 63 6b 20 6f   prevent stack o
6ae0: 76 65 72 66 6c 6f 77 73 20 6f 6e 20 74 68 65 20  verflows on the 
6af0: 43 20 73 74 61 63 6b 20 62 65 69 6e 67 20 75 73  C stack being us
6b00: 65 64 20 62 79 20 74 68 65 0a 2b 20 61 70 70 6c  ed by the.+ appl
6b10: 69 63 61 74 69 6f 6e 2e 20 49 66 20 79 6f 75 72  ication. If your
6b20: 20 6d 61 63 68 69 6e 65 20 68 61 73 20 61 20 6c   machine has a l
6b30: 69 6d 69 74 20 6f 6e 20 74 68 65 20 73 69 7a 65  imit on the size
6b40: 20 6f 66 20 74 68 65 20 43 20 73 74 61 63 6b 2c   of the C stack,
6b50: 20 79 6f 75 0a 2b 20 6d 61 79 20 67 65 74 20 73   you.+ may get s
6b60: 74 61 63 6b 20 6f 76 65 72 66 6c 6f 77 73 20 62  tack overflows b
6b70: 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74  efore reaching t
6b80: 68 65 20 6c 69 6d 69 74 20 73 65 74 20 62 79 20  he limit set by 
6b90: 74 68 65 20 63 6f 6d 6d 61 6e 64 2e 20 49 66 0a  the command. If.
6ba0: 2b 20 74 68 69 73 20 68 61 70 70 65 6e 73 2c 20  + this happens, 
6bb0: 73 65 65 20 69 66 20 74 68 65 72 65 20 69 73 20  see if there is 
6bc0: 61 20 6d 65 63 68 61 6e 69 73 6d 20 69 6e 20 79  a mechanism in y
6bd0: 6f 75 72 20 73 79 73 74 65 6d 20 66 6f 72 20 69  our system for i
6be0: 6e 63 72 65 61 73 69 6e 67 0a 2b 20 74 68 65 20  ncreasing.+ the 
6bf0: 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20  maximum size of 
6c00: 74 68 65 20 43 20 73 74 61 63 6b 2e 20 57 68 65  the C stack. Whe
6c10: 6e 20 61 20 73 75 62 2d 69 6e 74 65 72 70 72 65  n a sub-interpre
6c20: 74 65 72 20 69 73 20 63 72 65 61 74 65 64 2c 20  ter is created, 
6c30: 69 74 73 0a 2b 20 69 6e 69 74 69 61 6c 20 72 65  its.+ initial re
6c40: 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20 69 73  cursion limit is
6c50: 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 73   the same as its
6c60: 20 70 61 72 65 6e 74 27 73 2e 0a 2b 20 2e 54 50   parent's..+ .TP
6c70: 0a 20 20 5c 66 42 69 6e 74 65 72 70 5c 66 52 20  .  \fBinterp\fR 
6c80: 5c 66 42 73 68 61 72 65 5c 66 52 20 5c 66 49 73  \fBshare\fR \fIs
6c90: 72 63 50 61 74 68 20 63 68 61 6e 6e 65 6c 49 64  rcPath channelId
6ca0: 20 64 65 73 74 50 61 74 68 5c 66 52 0a 20 20 43   destPath\fR.  C
6cb0: 61 75 73 65 73 20 74 68 65 20 49 4f 20 63 68 61  auses the IO cha
6cc0: 6e 6e 65 6c 20 69 64 65 6e 74 69 66 69 65 64 20  nnel identified 
6cd0: 62 79 20 5c 66 49 63 68 61 6e 6e 65 6c 49 64 5c  by \fIchannelId\
6ce0: 66 52 20 74 6f 20 62 65 63 6f 6d 65 20 73 68 61  fR to become sha
6cf0: 72 65 64 0a 20 20 62 65 74 77 65 65 6e 20 74 68  red.  between th
6d00: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 69 64  e interpreter id
6d10: 65 6e 74 69 66 69 65 64 20 62 79 20 5c 66 49 73  entified by \fIs
6d20: 72 63 50 61 74 68 5c 66 52 20 61 6e 64 20 74 68  rcPath\fR and th
6d30: 65 20 69 6e 74 65 72 70 72 65 74 65 72 0a 2a 2a  e interpreter.**
6d40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
6d50: 2a 20 33 34 39 2c 33 35 34 20 2a 2a 2a 2a 0a 2d  * 349,354 ****.-
6d60: 2d 2d 20 33 36 35 2c 33 38 35 20 2d 2d 2d 2d 0a  -- 365,385 ----.
6d70: 20 20 63 6f 6d 6d 61 6e 64 73 20 69 6e 20 74 68    commands in th
6d80: 65 20 73 6c 61 76 65 20 69 6e 74 65 72 70 72 65  e slave interpre
6d90: 74 65 72 2e 20 54 68 65 20 63 6f 6d 6d 61 6e 64  ter. The command
6da0: 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20 69   has no effect i
6db0: 66 20 74 68 65 20 73 6c 61 76 65 0a 20 20 69 73  f the slave.  is
6dc0: 20 61 6c 72 65 61 64 79 20 74 72 75 73 74 65 64   already trusted
6dd0: 2e 0a 20 20 2e 56 45 0a 2b 20 2e 54 50 0a 2b 20  ..  .VE.+ .TP.+ 
6de0: 5c 66 49 73 6c 61 76 65 5c 66 52 20 5c 66 42 72  \fIslave\fR \fBr
6df0: 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 5c 66 52  ecursionlimit\fR
6e00: 20 3f 5c 66 49 6e 65 77 6c 69 6d 69 74 5c 66 52   ?\fInewlimit\fR
6e10: 3f 0a 2b 20 52 65 74 75 72 6e 73 20 61 6e 64 20  ?.+ Returns and 
6e20: 6f 70 74 69 6f 6e 61 6c 6c 79 20 63 68 61 6e 67  optionally chang
6e30: 65 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 61  es the maximum a
6e40: 6c 6c 6f 77 61 62 6c 65 20 6e 65 73 74 69 6e 67  llowable nesting
6e50: 20 64 65 70 74 68 20 66 6f 72 20 74 68 65 0a 2b   depth for the.+
6e60: 20 73 6c 61 76 65 20 69 6e 74 65 72 70 72 65 74   slave interpret
6e70: 65 72 2e 20 20 49 66 20 5c 66 49 6e 65 77 6c 69  er.  If \fInewli
6e80: 6d 69 74 5c 66 52 20 69 73 20 73 75 70 70 6c 69  mit\fR is suppli
6e90: 65 64 2c 20 69 74 20 62 65 63 6f 6d 65 73 20 74  ed, it becomes t
6ea0: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 0a 2b  he new maximum.+
6eb0: 20 6e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   number of neste
6ec0: 64 20 63 61 6c 6c 73 20 74 6f 20 5c 66 42 54 63  d calls to \fBTc
6ed0: 6c 5f 45 76 61 6c 28 29 5c 66 52 20 61 6e 64 20  l_Eval()\fR and 
6ee0: 72 65 6c 61 74 65 64 20 66 75 6e 63 74 69 6f 6e  related function
6ef0: 73 20 74 68 61 74 20 6d 61 79 20 62 65 0a 2b 20  s that may be.+ 
6f00: 6d 61 64 65 20 62 65 66 6f 72 65 20 61 6e 20 65  made before an e
6f10: 72 72 6f 72 20 6f 63 63 75 72 73 2e 20 20 49 74  rror occurs.  It
6f20: 20 6d 75 73 74 20 62 65 20 61 20 70 6f 73 69 74   must be a posit
6f30: 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 49 66  ive integer.  If
6f40: 0a 2b 20 5c 66 49 6e 65 77 6c 69 6d 69 74 5c 66  .+ \fInewlimit\f
6f50: 52 20 69 73 20 6e 6f 74 20 73 75 70 70 6c 69 65  R is not supplie
6f60: 64 2c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 72  d, the command r
6f70: 65 74 75 72 6e 73 20 74 68 65 20 63 75 72 72 65  eturns the curre
6f80: 6e 74 20 72 65 63 75 72 73 69 6f 6e 0a 2b 20 6c  nt recursion.+ l
6f90: 69 6d 69 74 20 66 6f 72 20 74 68 65 20 73 6c 61  imit for the sla
6fa0: 76 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0a  ve interpreter..
6fb0: 2b 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 73 65  + The command se
6fc0: 74 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 73  ts the maximum s
6fd0: 69 7a 65 20 6f 66 20 74 68 65 20 54 63 6c 20 63  ize of the Tcl c
6fe0: 61 6c 6c 20 73 74 61 63 6b 20 6f 6e 6c 79 2e 20  all stack only. 
6ff0: 49 74 20 63 61 6e 6e 6f 74 0a 2b 20 62 79 20 69  It cannot.+ by i
7000: 74 73 65 6c 66 20 70 72 65 76 65 6e 74 20 73 74  tself prevent st
7010: 61 63 6b 20 6f 76 65 72 66 6c 6f 77 73 20 6f 6e  ack overflows on
7020: 20 74 68 65 20 43 20 73 74 61 63 6b 20 62 65 69   the C stack bei
7030: 6e 67 20 75 73 65 64 20 62 79 20 74 68 65 0a 2b  ng used by the.+
7040: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 20 49 66   application. If
7050: 20 79 6f 75 72 20 6d 61 63 68 69 6e 65 20 68 61   your machine ha
7060: 73 20 61 20 6c 69 6d 69 74 20 6f 6e 20 74 68 65  s a limit on the
7070: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 43 20 73   size of the C s
7080: 74 61 63 6b 2c 20 79 6f 75 20 0a 2b 20 6d 61 79  tack, you .+ may
7090: 20 67 65 74 20 73 74 61 63 6b 20 6f 76 65 72 66   get stack overf
70a0: 6c 6f 77 73 20 62 65 66 6f 72 65 20 72 65 61 63  lows before reac
70b0: 68 69 6e 67 20 74 68 65 20 6c 69 6d 69 74 20 73  hing the limit s
70c0: 65 74 20 62 79 20 74 68 65 20 63 6f 6d 6d 61 6e  et by the comman
70d0: 64 2e 20 49 66 20 0a 2b 20 74 68 69 73 20 68 61  d. If .+ this ha
70e0: 70 70 65 6e 73 2c 20 73 65 65 20 69 66 20 74 68  ppens, see if th
70f0: 65 72 65 20 69 73 20 61 20 6d 65 63 68 61 6e 69  ere is a mechani
7100: 73 6d 20 69 6e 20 79 6f 75 72 20 73 79 73 74 65  sm in your syste
7110: 6d 20 66 6f 72 20 69 6e 63 72 65 61 73 69 6e 67  m for increasing
7120: 20 0a 2b 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   .+ the maximum 
7130: 73 69 7a 65 20 6f 66 20 74 68 65 20 43 20 73 74  size of the C st
7140: 61 63 6b 2e 20 57 68 65 6e 20 61 20 73 6c 61 76  ack. When a slav
7150: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 69 73  e interpreter is
7160: 20 63 72 65 61 74 65 64 2c 20 69 74 73 0a 2b 20   created, its.+ 
7170: 69 6e 69 74 69 61 6c 20 72 65 63 75 72 73 69 6f  initial recursio
7180: 6e 20 6c 69 6d 69 74 20 69 73 20 74 68 65 20 73  n limit is the s
7190: 61 6d 65 20 61 73 20 69 74 73 20 70 61 72 65 6e  ame as its paren
71a0: 74 27 73 2e 0a 20 20 0a 20 20 2e 53 48 20 22 53  t's..  .  .SH "S
71b0: 41 46 45 20 49 4e 54 45 52 50 52 45 54 45 52 53  AFE INTERPRETERS
71c0: 22 0a 20 20 2e 50 50 0a 2a 2a 2a 2a 2a 2a 2a 2a  ".  .PP.********
71d0: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 34 35 30 2c  *******.*** 450,
71e0: 34 35 35 20 2a 2a 2a 2a 0a 2d 2d 2d 20 34 38 31  455 ****.--- 481
71f0: 2c 34 38 39 20 2d 2d 2d 2d 0a 20 20 74 68 65 69  ,489 ----.  thei
7200: 72 20 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 61 6c  r own functional
7210: 69 74 79 20 74 6f 20 65 6c 69 6d 69 6e 61 74 65  ity to eliminate
7220: 20 75 6e 73 61 66 65 20 63 6f 6d 6d 61 6e 64 73   unsafe commands
7230: 2e 20 46 6f 72 20 61 20 64 69 73 63 75 73 73 69  . For a discussi
7240: 6f 6e 20 6f 66 0a 20 20 6d 61 6e 61 67 65 6d 65  on of.  manageme
7250: 6e 74 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73  nt of extensions
7260: 20 66 6f 72 20 73 61 66 65 74 79 20 73 65 65 20   for safety see 
7270: 74 68 65 20 6d 61 6e 75 61 6c 20 65 6e 74 72 69  the manual entri
7280: 65 73 20 66 6f 72 0a 20 20 5c 66 42 53 61 66 65  es for.  \fBSafe
7290: 5c 2d 54 63 6c 5c 66 52 20 61 6e 64 20 74 68 65  \-Tcl\fR and the
72a0: 20 5c 66 42 6c 6f 61 64 5c 66 52 20 54 63 6c 20   \fBload\fR Tcl 
72b0: 63 6f 6d 6d 61 6e 64 2e 0a 2b 20 2e 50 50 0a 2b  command..+ .PP.+
72c0: 20 41 20 73 61 66 65 20 69 6e 74 65 72 70 72 65   A safe interpre
72d0: 74 65 72 20 6d 61 79 20 6e 6f 74 20 61 6c 74 65  ter may not alte
72e0: 72 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20  r the recursion 
72f0: 6c 69 6d 69 74 20 6f 66 20 61 6e 79 20 69 6e 74  limit of any int
7300: 65 72 70 72 65 74 65 72 2c 0a 2b 20 69 6e 63 6c  erpreter,.+ incl
7310: 75 64 69 6e 67 20 69 74 73 65 6c 66 2e 0a 20 20  uding itself..  
7320: 0a 20 20 2e 53 48 20 22 41 4c 49 41 53 20 49 4e  .  .SH "ALIAS IN
7330: 56 4f 43 41 54 49 4f 4e 22 0a 20 20 2e 50 50 0a  VOCATION".  .PP.