Tcl Source Code

Hex Artifact Content
Login

Artifact 2ba55aa570a93b7c54d85b8126ba049e829e438e:

Attachment "tip87dgp.patch" to ticket [522849ffff] added by dgp 2002-03-07 08:17:58.
0000: 49 6e 64 65 78 3a 20 64 6f 63 2f 69 6e 74 65 72  Index: doc/inter
0010: 70 2e 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  p.n.============
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0050: 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65  =======.RCS file
0060: 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74  : /cvsroot/tcl/t
0070: 63 6c 2f 64 6f 63 2f 69 6e 74 65 72 70 2e 6e 2c  cl/doc/interp.n,
0080: 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76  v.retrieving rev
0090: 69 73 69 6f 6e 20 31 2e 37 0a 64 69 66 66 20 2d  ision 1.7.diff -
00a0: 75 20 2d 75 20 2d 72 31 2e 37 20 69 6e 74 65 72  u -u -r1.7 inter
00b0: 70 2e 6e 0a 2d 2d 2d 20 64 6f 63 2f 69 6e 74 65  p.n.--- doc/inte
00c0: 72 70 2e 6e 09 37 20 41 75 67 20 32 30 30 31 20  rp.n.7 Aug 2001 
00d0: 30 32 3a 35 34 3a 33 30 20 2d 30 30 30 30 09 31  02:54:30 -0000.1
00e0: 2e 37 0a 2b 2b 2b 20 64 6f 63 2f 69 6e 74 65 72  .7.+++ doc/inter
00f0: 70 2e 6e 09 37 20 4d 61 72 20 32 30 30 32 20 30  p.n.7 Mar 2002 0
0100: 31 3a 30 32 3a 33 37 20 2d 30 30 30 30 0a 40 40  1:02:37 -0000.@@
0110: 20 2d 31 34 37 2c 36 20 2b 31 34 37 2c 38 20 40   -147,6 +147,8 @
0120: 40 0a 20 6e 65 77 20 69 6e 74 65 72 70 72 65 74  @. new interpret
0130: 65 72 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  er. The name of 
0140: 61 20 73 6c 61 76 65 20 69 6e 74 65 72 70 72 65  a slave interpre
0150: 74 65 72 20 6d 75 73 74 20 62 65 20 75 6e 69 71  ter must be uniq
0160: 75 65 20 61 6d 6f 6e 67 20 61 6c 6c 0a 20 74 68  ue among all. th
0170: 65 20 73 6c 61 76 65 73 20 66 6f 72 20 69 74 73  e slaves for its
0180: 20 6d 61 73 74 65 72 3b 20 20 61 6e 20 65 72 72   master;  an err
0190: 6f 72 20 6f 63 63 75 72 73 20 69 66 20 61 20 73  or occurs if a s
01a0: 6c 61 76 65 20 69 6e 74 65 72 70 72 65 74 65 72  lave interpreter
01b0: 20 62 79 20 74 68 65 0a 20 67 69 76 65 6e 20 6e   by the. given n
01c0: 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69 73  ame already exis
01d0: 74 73 20 69 6e 20 74 68 69 73 20 6d 61 73 74 65  ts in this maste
01e0: 72 2e 0a 2b 54 68 65 20 69 6e 69 74 69 61 6c 20  r..+The initial 
01f0: 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20  recursion limit 
0200: 6f 66 20 74 68 65 20 73 6c 61 76 65 20 69 6e 74  of the slave int
0210: 65 72 70 72 65 74 65 72 20 69 73 20 73 65 74 20  erpreter is set 
0220: 74 6f 20 74 68 65 0a 2b 63 75 72 72 65 6e 74 20  to the.+current 
0230: 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20  recursion limit 
0240: 6f 66 20 69 74 73 20 70 61 72 65 6e 74 20 69 6e  of its parent in
0250: 74 65 72 70 72 65 74 65 72 2e 0a 20 2e 54 50 0a  terpreter.. .TP.
0260: 20 5c 66 42 69 6e 74 65 72 70 5c 66 52 20 5c 66   \fBinterp\fR \f
0270: 42 64 65 6c 65 74 65 20 5c 66 52 3f 5c 66 49 70  Bdelete \fR?\fIp
0280: 61 74 68 20 2e 2e 2e 3f 5c 66 52 0a 20 44 65 6c  ath ...?\fR. Del
0290: 65 74 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  etes zero or mor
02a0: 65 20 69 6e 74 65 72 70 72 65 74 65 72 73 20 67  e interpreters g
02b0: 69 76 65 6e 20 62 79 20 74 68 65 20 6f 70 74 69  iven by the opti
02c0: 6f 6e 61 6c 20 5c 66 49 70 61 74 68 5c 66 52 0a  onal \fIpath\fR.
02d0: 40 40 20 2d 32 32 32 2c 36 20 2b 32 32 34 2c 32  @@ -222,6 +224,2
02e0: 33 20 40 40 0a 20 61 6c 72 65 61 64 79 20 74 72  3 @@. already tr
02f0: 75 73 74 65 64 2e 0a 20 2e 56 45 0a 20 2e 54 50  usted.. .VE. .TP
0300: 0a 2b 5c 66 42 69 6e 74 65 72 70 5c 66 52 20 5c  .+\fBinterp\fR \
0310: 66 42 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74  fBrecursionlimit
0320: 5c 66 52 20 5c 66 49 70 61 74 68 5c 66 52 20 3f  \fR \fIpath\fR ?
0330: 5c 66 49 6e 65 77 6c 69 6d 69 74 5c 66 52 3f 0a  \fInewlimit\fR?.
0340: 2b 52 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78  +Returns the max
0350: 69 6d 75 6d 20 61 6c 6c 6f 77 61 62 6c 65 20 6e  imum allowable n
0360: 65 73 74 69 6e 67 20 64 65 70 74 68 20 66 6f 72  esting depth for
0370: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
0380: 0a 2b 73 70 65 63 69 66 69 65 64 20 62 79 20 5c  .+specified by \
0390: 66 49 70 61 74 68 5c 66 52 2e 20 20 49 66 20 5c  fIpath\fR.  If \
03a0: 66 49 6e 65 77 6c 69 6d 69 74 5c 66 52 20 69 73  fInewlimit\fR is
03b0: 20 73 70 65 63 69 66 69 65 64 2c 0a 2b 74 68 65   specified,.+the
03c0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 72 65 63   interpreter rec
03d0: 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20 77 69 6c  ursion limit wil
03e0: 6c 20 62 65 20 73 65 74 20 73 6f 20 74 68 61 74  l be set so that
03f0: 20 6e 65 73 74 69 6e 67 0a 2b 6f 66 20 6d 6f 72   nesting.+of mor
0400: 65 20 74 68 61 6e 20 5c 66 49 6e 65 77 6c 69 6d  e than \fInewlim
0410: 69 74 5c 66 52 20 63 61 6c 6c 73 20 74 6f 20 5c  it\fR calls to \
0420: 66 42 54 63 6c 5f 45 76 61 6c 28 29 5c 66 52 0a  fBTcl_Eval()\fR.
0430: 2b 61 6e 64 20 72 65 6c 61 74 65 64 20 70 72 6f  +and related pro
0440: 63 65 64 75 72 65 73 20 69 6e 20 74 68 61 74 20  cedures in that 
0450: 69 6e 74 65 72 70 72 65 74 65 72 20 77 69 6c 6c  interpreter will
0460: 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
0470: 2e 0a 2b 54 68 65 20 5c 66 49 6e 65 77 6c 69 6d  ..+The \fInewlim
0480: 69 74 5c 66 52 20 76 61 6c 75 65 20 69 73 20 61  it\fR value is a
0490: 6c 73 6f 20 72 65 74 75 72 6e 65 64 2e 0a 2b 54  lso returned..+T
04a0: 68 65 20 5c 66 49 6e 65 77 6c 69 6d 69 74 5c 66  he \fInewlimit\f
04b0: 52 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20  R value must be 
04c0: 61 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  a positive integ
04d0: 65 72 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  er between 1 and
04e0: 20 74 68 65 0a 2b 6d 61 78 69 6d 75 6d 20 76 61   the.+maximum va
04f0: 6c 75 65 20 6f 66 20 61 20 6e 6f 6e 2d 6c 6f 6e  lue of a non-lon
0500: 67 20 69 6e 74 65 67 65 72 20 6f 6e 20 74 68 65  g integer on the
0510: 20 70 6c 61 74 66 6f 72 6d 2e 20 20 0a 2b 2e 73   platform.  .+.s
0520: 70 0a 2b 54 68 65 20 63 6f 6d 6d 61 6e 64 20 73  p.+The command s
0530: 65 74 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ets the maximum 
0540: 73 69 7a 65 20 6f 66 20 74 68 65 20 54 63 6c 20  size of the Tcl 
0550: 63 61 6c 6c 20 73 74 61 63 6b 20 6f 6e 6c 79 2e  call stack only.
0560: 20 49 74 20 63 61 6e 6e 6f 74 0a 2b 62 79 20 69   It cannot.+by i
0570: 74 73 65 6c 66 20 70 72 65 76 65 6e 74 20 73 74  tself prevent st
0580: 61 63 6b 20 6f 76 65 72 66 6c 6f 77 73 20 6f 6e  ack overflows on
0590: 20 74 68 65 20 43 20 73 74 61 63 6b 20 62 65 69   the C stack bei
05a0: 6e 67 20 75 73 65 64 20 62 79 20 74 68 65 0a 2b  ng used by the.+
05b0: 61 70 70 6c 69 63 61 74 69 6f 6e 2e 20 49 66 20  application. If 
05c0: 79 6f 75 72 20 6d 61 63 68 69 6e 65 20 68 61 73  your machine has
05d0: 20 61 20 6c 69 6d 69 74 20 6f 6e 20 74 68 65 20   a limit on the 
05e0: 73 69 7a 65 20 6f 66 20 74 68 65 20 43 20 73 74  size of the C st
05f0: 61 63 6b 2c 20 79 6f 75 0a 2b 6d 61 79 20 67 65  ack, you.+may ge
0600: 74 20 73 74 61 63 6b 20 6f 76 65 72 66 6c 6f 77  t stack overflow
0610: 73 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  s before reachin
0620: 67 20 74 68 65 20 6c 69 6d 69 74 20 73 65 74 20  g the limit set 
0630: 62 79 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2e 20  by the command. 
0640: 49 66 0a 2b 74 68 69 73 20 68 61 70 70 65 6e 73  If.+this happens
0650: 2c 20 73 65 65 20 69 66 20 74 68 65 72 65 20 69  , see if there i
0660: 73 20 61 20 6d 65 63 68 61 6e 69 73 6d 20 69 6e  s a mechanism in
0670: 20 79 6f 75 72 20 73 79 73 74 65 6d 20 66 6f 72   your system for
0680: 20 69 6e 63 72 65 61 73 69 6e 67 0a 2b 74 68 65   increasing.+the
0690: 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   maximum size of
06a0: 20 74 68 65 20 43 20 73 74 61 63 6b 2e 20 0a 2b   the C stack. .+
06b0: 2e 54 50 0a 20 5c 66 42 69 6e 74 65 72 70 5c 66  .TP. \fBinterp\f
06c0: 52 20 5c 66 42 73 68 61 72 65 5c 66 52 20 5c 66  R \fBshare\fR \f
06d0: 49 73 72 63 50 61 74 68 20 63 68 61 6e 6e 65 6c  IsrcPath channel
06e0: 49 64 20 64 65 73 74 50 61 74 68 5c 66 52 0a 20  Id destPath\fR. 
06f0: 43 61 75 73 65 73 20 74 68 65 20 49 4f 20 63 68  Causes the IO ch
0700: 61 6e 6e 65 6c 20 69 64 65 6e 74 69 66 69 65 64  annel identified
0710: 20 62 79 20 5c 66 49 63 68 61 6e 6e 65 6c 49 64   by \fIchannelId
0720: 5c 66 52 20 74 6f 20 62 65 63 6f 6d 65 20 73 68  \fR to become sh
0730: 61 72 65 64 0a 20 62 65 74 77 65 65 6e 20 74 68  ared. between th
0740: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 69 64  e interpreter id
0750: 65 6e 74 69 66 69 65 64 20 62 79 20 5c 66 49 73  entified by \fIs
0760: 72 63 50 61 74 68 5c 66 52 20 61 6e 64 20 74 68  rcPath\fR and th
0770: 65 20 69 6e 74 65 72 70 72 65 74 65 72 0a 40 40  e interpreter.@@
0780: 20 2d 33 34 39 2c 37 20 2b 33 36 38 2c 32 32 20   -349,7 +368,22 
0790: 40 40 0a 20 63 6f 6d 6d 61 6e 64 73 20 69 6e 20  @@. commands in 
07a0: 74 68 65 20 73 6c 61 76 65 20 69 6e 74 65 72 70  the slave interp
07b0: 72 65 74 65 72 2e 20 54 68 65 20 63 6f 6d 6d 61  reter. The comma
07c0: 6e 64 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74  nd has no effect
07d0: 20 69 66 20 74 68 65 20 73 6c 61 76 65 0a 20 69   if the slave. i
07e0: 73 20 61 6c 72 65 61 64 79 20 74 72 75 73 74 65  s already truste
07f0: 64 2e 0a 20 2e 56 45 0a 2d 0a 2b 2e 54 50 0a 2b  d.. .VE.-.+.TP.+
0800: 5c 66 49 73 6c 61 76 65 5c 66 52 20 5c 66 42 72  \fIslave\fR \fBr
0810: 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 5c 66 52  ecursionlimit\fR
0820: 20 3f 5c 66 49 6e 65 77 6c 69 6d 69 74 5c 66 52   ?\fInewlimit\fR
0830: 3f 0a 2b 52 65 74 75 72 6e 73 20 74 68 65 20 6d  ?.+Returns the m
0840: 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 61 62 6c 65  aximum allowable
0850: 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 66   nesting depth f
0860: 6f 72 20 74 68 65 20 5c 66 49 73 6c 61 76 65 5c  or the \fIslave\
0870: 66 52 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0a  fR interpreter..
0880: 2b 49 66 20 5c 66 49 6e 65 77 6c 69 6d 69 74 5c  +If \fInewlimit\
0890: 66 52 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  fR is specified,
08a0: 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 6c   the recursion l
08b0: 69 6d 69 74 20 69 6e 20 5c 66 49 73 6c 61 76 65  imit in \fIslave
08c0: 5c 66 52 20 77 69 6c 6c 20 62 65 0a 2b 73 65 74  \fR will be.+set
08d0: 20 73 6f 20 74 68 61 74 20 6e 65 73 74 69 6e 67   so that nesting
08e0: 20 6f 66 20 6d 6f 72 65 20 74 68 61 6e 20 5c 66   of more than \f
08f0: 49 6e 65 77 6c 69 6d 69 74 5c 66 52 20 63 61 6c  Inewlimit\fR cal
0900: 6c 73 20 74 6f 20 5c 66 42 54 63 6c 5f 45 76 61  ls to \fBTcl_Eva
0910: 6c 28 29 5c 66 52 0a 2b 61 6e 64 20 72 65 6c 61  l()\fR.+and rela
0920: 74 65 64 20 70 72 6f 63 65 64 75 72 65 73 20 69  ted procedures i
0930: 6e 20 5c 66 49 73 6c 61 76 65 5c 66 52 20 77 69  n \fIslave\fR wi
0940: 6c 6c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  ll return an err
0950: 6f 72 2e 0a 2b 54 68 65 20 5c 66 49 6e 65 77 6c  or..+The \fInewl
0960: 69 6d 69 74 5c 66 52 20 76 61 6c 75 65 20 69 73  imit\fR value is
0970: 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 2e 0a   also returned..
0980: 2b 54 68 65 20 5c 66 49 6e 65 77 6c 69 6d 69 74  +The \fInewlimit
0990: 5c 66 52 20 76 61 6c 75 65 20 6d 75 73 74 20 62  \fR value must b
09a0: 65 20 61 20 70 6f 73 69 74 69 76 65 20 69 6e 74  e a positive int
09b0: 65 67 65 72 20 62 65 74 77 65 65 6e 20 31 20 61  eger between 1 a
09c0: 6e 64 20 74 68 65 0a 2b 6d 61 78 69 6d 75 6d 20  nd the.+maximum 
09d0: 76 61 6c 75 65 20 6f 66 20 61 20 6e 6f 6e 2d 6c  value of a non-l
09e0: 6f 6e 67 20 69 6e 74 65 67 65 72 20 6f 6e 20 74  ong integer on t
09f0: 68 65 20 70 6c 61 74 66 6f 72 6d 2e 20 20 0a 2b  he platform.  .+
0a00: 2e 73 70 0a 2b 54 68 65 20 63 6f 6d 6d 61 6e 64  .sp.+The command
0a10: 20 73 65 74 73 20 74 68 65 20 6d 61 78 69 6d 75   sets the maximu
0a20: 6d 20 73 69 7a 65 20 6f 66 20 74 68 65 20 54 63  m size of the Tc
0a30: 6c 20 63 61 6c 6c 20 73 74 61 63 6b 20 6f 6e 6c  l call stack onl
0a40: 79 2e 20 49 74 20 63 61 6e 6e 6f 74 0a 2b 62 79  y. It cannot.+by
0a50: 20 69 74 73 65 6c 66 20 70 72 65 76 65 6e 74 20   itself prevent 
0a60: 73 74 61 63 6b 20 6f 76 65 72 66 6c 6f 77 73 20  stack overflows 
0a70: 6f 6e 20 74 68 65 20 43 20 73 74 61 63 6b 20 62  on the C stack b
0a80: 65 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 65  eing used by the
0a90: 0a 2b 61 70 70 6c 69 63 61 74 69 6f 6e 2e 20 49  .+application. I
0aa0: 66 20 79 6f 75 72 20 6d 61 63 68 69 6e 65 20 68  f your machine h
0ab0: 61 73 20 61 20 6c 69 6d 69 74 20 6f 6e 20 74 68  as a limit on th
0ac0: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 43 20  e size of the C 
0ad0: 73 74 61 63 6b 2c 20 79 6f 75 0a 2b 6d 61 79 20  stack, you.+may 
0ae0: 67 65 74 20 73 74 61 63 6b 20 6f 76 65 72 66 6c  get stack overfl
0af0: 6f 77 73 20 62 65 66 6f 72 65 20 72 65 61 63 68  ows before reach
0b00: 69 6e 67 20 74 68 65 20 6c 69 6d 69 74 20 73 65  ing the limit se
0b10: 74 20 62 79 20 74 68 65 20 63 6f 6d 6d 61 6e 64  t by the command
0b20: 2e 20 49 66 0a 2b 74 68 69 73 20 68 61 70 70 65  . If.+this happe
0b30: 6e 73 2c 20 73 65 65 20 69 66 20 74 68 65 72 65  ns, see if there
0b40: 20 69 73 20 61 20 6d 65 63 68 61 6e 69 73 6d 20   is a mechanism 
0b50: 69 6e 20 79 6f 75 72 20 73 79 73 74 65 6d 20 66  in your system f
0b60: 6f 72 20 69 6e 63 72 65 61 73 69 6e 67 0a 2b 74  or increasing.+t
0b70: 68 65 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  he maximum size 
0b80: 6f 66 20 74 68 65 20 43 20 73 74 61 63 6b 2e 20  of the C stack. 
0b90: 0a 20 2e 53 48 20 22 53 41 46 45 20 49 4e 54 45  . .SH "SAFE INTE
0ba0: 52 50 52 45 54 45 52 53 22 0a 20 2e 50 50 0a 20  RPRETERS". .PP. 
0bb0: 41 20 73 61 66 65 20 69 6e 74 65 72 70 72 65 74  A safe interpret
0bc0: 65 72 20 69 73 20 6f 6e 65 20 77 69 74 68 20 72  er is one with r
0bd0: 65 73 74 72 69 63 74 65 64 20 66 75 6e 63 74 69  estricted functi
0be0: 6f 6e 61 6c 69 74 79 2c 20 73 6f 20 74 68 61 74  onality, so that
0bf0: 0a 40 40 20 2d 34 35 30 2c 36 20 2b 34 38 34 2c  .@@ -450,6 +484,
0c00: 39 20 40 40 0a 20 74 68 65 69 72 20 6f 77 6e 20  9 @@. their own 
0c10: 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 74 6f  functionality to
0c20: 20 65 6c 69 6d 69 6e 61 74 65 20 75 6e 73 61 66   eliminate unsaf
0c30: 65 20 63 6f 6d 6d 61 6e 64 73 2e 20 46 6f 72 20  e commands. For 
0c40: 61 20 64 69 73 63 75 73 73 69 6f 6e 20 6f 66 0a  a discussion of.
0c50: 20 6d 61 6e 61 67 65 6d 65 6e 74 20 6f 66 20 65   management of e
0c60: 78 74 65 6e 73 69 6f 6e 73 20 66 6f 72 20 73 61  xtensions for sa
0c70: 66 65 74 79 20 73 65 65 20 74 68 65 20 6d 61 6e  fety see the man
0c80: 75 61 6c 20 65 6e 74 72 69 65 73 20 66 6f 72 0a  ual entries for.
0c90: 20 5c 66 42 53 61 66 65 5c 2d 54 63 6c 5c 66 52   \fBSafe\-Tcl\fR
0ca0: 20 61 6e 64 20 74 68 65 20 5c 66 42 6c 6f 61 64   and the \fBload
0cb0: 5c 66 52 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 2e  \fR Tcl command.
0cc0: 0a 2b 2e 50 50 0a 2b 41 20 73 61 66 65 20 69 6e  .+.PP.+A safe in
0cd0: 74 65 72 70 72 65 74 65 72 20 6d 61 79 20 6e 6f  terpreter may no
0ce0: 74 20 61 6c 74 65 72 20 74 68 65 20 72 65 63 75  t alter the recu
0cf0: 72 73 69 6f 6e 20 6c 69 6d 69 74 20 6f 66 20 61  rsion limit of a
0d00: 6e 79 20 69 6e 74 65 72 70 72 65 74 65 72 2c 0a  ny interpreter,.
0d10: 2b 69 6e 63 6c 75 64 69 6e 67 20 69 74 73 65 6c  +including itsel
0d20: 66 2e 0a 20 0a 20 2e 53 48 20 22 41 4c 49 41 53  f.. . .SH "ALIAS
0d30: 20 49 4e 56 4f 43 41 54 49 4f 4e 22 0a 20 2e 50   INVOCATION". .P
0d40: 50 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63  P.Index: generic
0d50: 2f 74 63 6c 49 6e 74 65 72 70 2e 63 0a 3d 3d 3d  /tclInterp.c.===
0d60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0d70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0d90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0da0: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72  .RCS file: /cvsr
0db0: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65  oot/tcl/tcl/gene
0dc0: 72 69 63 2f 74 63 6c 49 6e 74 65 72 70 2e 63 2c  ric/tclInterp.c,
0dd0: 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76  v.retrieving rev
0de0: 69 73 69 6f 6e 20 31 2e 31 31 0a 64 69 66 66 20  ision 1.11.diff 
0df0: 2d 75 20 2d 75 20 2d 72 31 2e 31 31 20 74 63 6c  -u -u -r1.11 tcl
0e00: 49 6e 74 65 72 70 2e 63 0a 2d 2d 2d 20 67 65 6e  Interp.c.--- gen
0e10: 65 72 69 63 2f 74 63 6c 49 6e 74 65 72 70 2e 63  eric/tclInterp.c
0e20: 09 31 35 20 46 65 62 20 32 30 30 32 20 31 34 3a  .15 Feb 2002 14:
0e30: 32 38 3a 34 39 20 2d 30 30 30 30 09 31 2e 31 31  28:49 -0000.1.11
0e40: 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c  .+++ generic/tcl
0e50: 49 6e 74 65 72 70 2e 63 09 37 20 4d 61 72 20 32  Interp.c.7 Mar 2
0e60: 30 30 32 20 30 31 3a 30 32 3a 33 38 20 2d 30 30  002 01:02:38 -00
0e70: 30 30 0a 40 40 20 2d 31 39 30 2c 36 20 2b 31 39  00.@@ -190,6 +19
0e80: 30 2c 31 30 20 40 40 0a 20 09 09 09 20 20 20 20  0,10 @@. ...    
0e90: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
0ea0: 62 6a 76 5b 5d 29 29 3b 0a 20 73 74 61 74 69 63  bjv[]));. static
0eb0: 20 76 6f 69 64 09 09 53 6c 61 76 65 4f 62 6a 43   void..SlaveObjC
0ec0: 6d 64 44 65 6c 65 74 65 50 72 6f 63 20 5f 41 4e  mdDeleteProc _AN
0ed0: 53 49 5f 41 52 47 53 5f 28 28 0a 20 09 09 09 20  SI_ARGS_((. ... 
0ee0: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c     ClientData cl
0ef0: 69 65 6e 74 44 61 74 61 29 29 3b 0a 2b 73 74 61  ientData));.+sta
0f00: 74 69 63 20 69 6e 74 09 09 53 6c 61 76 65 52 65  tic int..SlaveRe
0f10: 63 75 72 73 69 6f 6e 4c 69 6d 69 74 20 5f 41 4e  cursionLimit _AN
0f20: 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 49 6e  SI_ARGS_((Tcl_In
0f30: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 2b 09  terp *interp,.+.
0f40: 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  ..    Tcl_Interp
0f50: 20 2a 73 6c 61 76 65 49 6e 74 65 72 70 2c 20 69   *slaveInterp, i
0f60: 6e 74 20 6f 62 6a 63 2c 0a 2b 09 09 09 20 20 20  nt objc,.+...   
0f70: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
0f80: 6f 62 6a 76 5b 5d 29 29 3b 0a 2b 0a 20 0c 0a 20  objv[]));.+. .. 
0f90: 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*.  *----------
0fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fe0: 2d 0a 40 40 20 2d 33 35 31 2c 31 34 20 2b 33 35  -.@@ -351,14 +35
0ff0: 35 2c 31 36 20 40 40 0a 20 20 20 20 20 20 20 20  5,16 @@.        
1000: 20 22 61 6c 69 61 73 22 2c 09 22 61 6c 69 61 73   "alias",."alias
1010: 65 73 22 2c 09 22 63 72 65 61 74 65 22 2c 09 22  es",."create",."
1020: 64 65 6c 65 74 65 22 2c 20 0a 20 09 22 65 76 61  delete", . ."eva
1030: 6c 22 2c 09 09 22 65 78 69 73 74 73 22 2c 09 22  l",.."exists",."
1040: 65 78 70 6f 73 65 22 2c 09 22 68 69 64 65 22 2c  expose",."hide",
1050: 20 0a 20 09 22 68 69 64 64 65 6e 22 2c 09 22 69   . ."hidden",."i
1060: 73 73 61 66 65 22 2c 09 22 69 6e 76 6f 6b 65 68  ssafe",."invokeh
1070: 69 64 64 65 6e 22 2c 09 22 6d 61 72 6b 74 72 75  idden",."marktru
1080: 73 74 65 64 22 2c 20 0a 2d 09 22 73 6c 61 76 65  sted", .-."slave
1090: 73 22 2c 09 22 73 68 61 72 65 22 2c 09 22 74 61  s",."share",."ta
10a0: 72 67 65 74 22 2c 09 22 74 72 61 6e 73 66 65 72  rget",."transfer
10b0: 22 2c 0a 2b 09 22 72 65 63 75 72 73 69 6f 6e 6c  ",.+."recursionl
10c0: 69 6d 69 74 22 2c 09 09 22 73 6c 61 76 65 73 22  imit",.."slaves"
10d0: 2c 09 22 73 68 61 72 65 22 2c 0a 2b 09 22 74 61  ,."share",.+."ta
10e0: 72 67 65 74 22 2c 09 22 74 72 61 6e 73 66 65 72  rget",."transfer
10f0: 22 2c 0a 20 20 20 20 20 20 20 20 20 4e 55 4c 4c  ",.         NULL
1100: 0a 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 65 6e  .     };.     en
1110: 75 6d 20 6f 70 74 69 6f 6e 20 7b 0a 20 09 4f 50  um option {. .OP
1120: 54 5f 41 4c 49 41 53 2c 09 4f 50 54 5f 41 4c 49  T_ALIAS,.OPT_ALI
1130: 41 53 45 53 2c 09 4f 50 54 5f 43 52 45 41 54 45  ASES,.OPT_CREATE
1140: 2c 09 4f 50 54 5f 44 45 4c 45 54 45 2c 0a 20 09  ,.OPT_DELETE,. .
1150: 4f 50 54 5f 45 56 41 4c 2c 09 4f 50 54 5f 45 58  OPT_EVAL,.OPT_EX
1160: 49 53 54 53 2c 09 4f 50 54 5f 45 58 50 4f 53 45  ISTS,.OPT_EXPOSE
1170: 2c 09 4f 50 54 5f 48 49 44 45 2c 0a 20 09 4f 50  ,.OPT_HIDE,. .OP
1180: 54 5f 48 49 44 44 45 4e 2c 09 4f 50 54 5f 49 53  T_HIDDEN,.OPT_IS
1190: 53 41 46 45 2c 09 4f 50 54 5f 49 4e 56 4f 4b 45  SAFE,.OPT_INVOKE
11a0: 48 49 44 2c 09 4f 50 54 5f 4d 41 52 4b 54 52 55  HID,.OPT_MARKTRU
11b0: 53 54 45 44 2c 0a 2d 09 4f 50 54 5f 53 4c 41 56  STED,.-.OPT_SLAV
11c0: 45 53 2c 09 4f 50 54 5f 53 48 41 52 45 2c 09 4f  ES,.OPT_SHARE,.O
11d0: 50 54 5f 54 41 52 47 45 54 2c 09 4f 50 54 5f 54  PT_TARGET,.OPT_T
11e0: 52 41 4e 53 46 45 52 0a 2b 09 4f 50 54 5f 52 45  RANSFER.+.OPT_RE
11f0: 43 4c 49 4d 49 54 2c 09 09 09 4f 50 54 5f 53 4c  CLIMIT,...OPT_SL
1200: 41 56 45 53 2c 09 4f 50 54 5f 53 48 41 52 45 2c  AVES,.OPT_SHARE,
1210: 0a 2b 09 4f 50 54 5f 54 41 52 47 45 54 2c 09 4f  .+.OPT_TARGET,.O
1220: 50 54 5f 54 52 41 4e 53 46 45 52 0a 20 20 20 20  PT_TRANSFER.    
1230: 20 7d 3b 0a 20 0a 20 0a 40 40 20 2d 36 33 30 2c   };. . .@@ -630,
1240: 36 20 2b 36 33 36 2c 31 39 20 40 40 0a 20 09 20  6 +636,19 @@. . 
1250: 20 20 20 7d 0a 20 09 20 20 20 20 72 65 74 75 72     }. .    retur
1260: 6e 20 53 6c 61 76 65 4d 61 72 6b 54 72 75 73 74  n SlaveMarkTrust
1270: 65 64 28 69 6e 74 65 72 70 2c 20 73 6c 61 76 65  ed(interp, slave
1280: 49 6e 74 65 72 70 29 3b 0a 20 09 7d 0a 2b 09 63  Interp);. .}.+.c
1290: 61 73 65 20 4f 50 54 5f 52 45 43 4c 49 4d 49 54  ase OPT_RECLIMIT
12a0: 3a 20 7b 0a 2b 09 20 20 20 20 54 63 6c 5f 49 6e  : {.+.    Tcl_In
12b0: 74 65 72 70 20 2a 73 6c 61 76 65 49 6e 74 65 72  terp *slaveInter
12c0: 70 3b 0a 2b 0a 2b 09 20 20 20 20 69 66 20 28 6f  p;.+.+.    if (o
12d0: 62 6a 63 20 21 3d 20 33 20 26 26 20 6f 62 6a 63  bjc != 3 && objc
12e0: 20 21 3d 20 34 29 20 7b 0a 2b 09 09 54 63 6c 5f   != 4) {.+..Tcl_
12f0: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
1300: 65 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 70  erp, 2, objv, "p
1310: 61 74 68 20 3f 6e 65 77 6c 69 6d 69 74 3f 22 29  ath ?newlimit?")
1320: 3b 0a 2b 09 09 72 65 74 75 72 6e 20 54 43 4c 5f  ;.+..return TCL_
1330: 45 52 52 4f 52 3b 0a 2b 09 20 20 20 20 7d 0a 2b  ERROR;.+.    }.+
1340: 09 20 20 20 20 73 6c 61 76 65 49 6e 74 65 72 70  .    slaveInterp
1350: 20 3d 20 47 65 74 49 6e 74 65 72 70 28 69 6e 74   = GetInterp(int
1360: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 29 3b 0a 2b  erp, objv[2]);.+
1370: 09 20 20 20 20 69 66 20 28 73 6c 61 76 65 49 6e  .    if (slaveIn
1380: 74 65 72 70 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  terp == NULL) {.
1390: 2b 09 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  +..return TCL_ER
13a0: 52 4f 52 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20  ROR;.+.    }.+. 
13b0: 20 20 20 72 65 74 75 72 6e 20 53 6c 61 76 65 52     return SlaveR
13c0: 65 63 75 72 73 69 6f 6e 4c 69 6d 69 74 28 69 6e  ecursionLimit(in
13d0: 74 65 72 70 2c 20 73 6c 61 76 65 49 6e 74 65 72  terp, slaveInter
13e0: 70 2c 20 6f 62 6a 63 20 2d 20 33 2c 20 6f 62 6a  p, objc - 3, obj
13f0: 76 20 2b 20 33 29 3b 0a 2b 09 7d 0a 20 09 63 61  v + 3);.+.}. .ca
1400: 73 65 20 4f 50 54 5f 53 4c 41 56 45 53 3a 20 7b  se OPT_SLAVES: {
1410: 0a 20 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72  . .    Tcl_Inter
1420: 70 20 2a 73 6c 61 76 65 49 6e 74 65 72 70 3b 0a  p *slaveInterp;.
1430: 20 09 20 20 20 20 49 6e 74 65 72 70 49 6e 66 6f   .    InterpInfo
1440: 20 2a 69 69 50 74 72 3b 0a 40 40 20 2d 31 38 33   *iiPtr;.@@ -183
1450: 32 2c 31 32 20 2b 31 38 35 31 2c 31 32 20 40 40  2,12 +1851,12 @@
1460: 0a 20 20 20 20 20 73 74 61 74 69 63 20 43 4f 4e  .     static CON
1470: 53 54 20 63 68 61 72 20 2a 6f 70 74 69 6f 6e 73  ST char *options
1480: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20  [] = {.         
1490: 22 61 6c 69 61 73 22 2c 09 22 61 6c 69 61 73 65  "alias",."aliase
14a0: 73 22 2c 09 22 65 76 61 6c 22 2c 09 09 22 65 78  s",."eval",.."ex
14b0: 70 6f 73 65 22 2c 0a 20 20 20 20 20 20 20 20 20  pose",.         
14c0: 22 68 69 64 65 22 2c 09 09 22 68 69 64 64 65 6e  "hide",.."hidden
14d0: 22 2c 09 22 69 73 73 61 66 65 22 2c 09 22 69 6e  ",."issafe",."in
14e0: 76 6f 6b 65 68 69 64 64 65 6e 22 2c 0a 2d 20 20  vokehidden",.-  
14f0: 20 20 20 20 20 20 22 6d 61 72 6b 74 72 75 73 74        "marktrust
1500: 65 64 22 2c 09 4e 55 4c 4c 0a 2b 20 20 20 20 20  ed",.NULL.+     
1510: 20 20 20 22 6d 61 72 6b 74 72 75 73 74 65 64 22     "marktrusted"
1520: 2c 09 22 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  ,."recursionlimi
1530: 74 22 2c 20 4e 55 4c 4c 0a 20 20 20 20 20 7d 3b  t", NULL.     };
1540: 0a 20 20 20 20 20 65 6e 75 6d 20 6f 70 74 69 6f  .     enum optio
1550: 6e 73 20 7b 0a 20 09 4f 50 54 5f 41 4c 49 41 53  ns {. .OPT_ALIAS
1560: 2c 09 4f 50 54 5f 41 4c 49 41 53 45 53 2c 09 4f  ,.OPT_ALIASES,.O
1570: 50 54 5f 45 56 41 4c 2c 09 4f 50 54 5f 45 58 50  PT_EVAL,.OPT_EXP
1580: 4f 53 45 2c 0a 20 09 4f 50 54 5f 48 49 44 45 2c  OSE,. .OPT_HIDE,
1590: 09 4f 50 54 5f 48 49 44 44 45 4e 2c 09 4f 50 54  .OPT_HIDDEN,.OPT
15a0: 5f 49 53 53 41 46 45 2c 09 4f 50 54 5f 49 4e 56  _ISSAFE,.OPT_INV
15b0: 4f 4b 45 48 49 44 44 45 4e 2c 0a 2d 09 4f 50 54  OKEHIDDEN,.-.OPT
15c0: 5f 4d 41 52 4b 54 52 55 53 54 45 44 0a 2b 09 4f  _MARKTRUSTED.+.O
15d0: 50 54 5f 4d 41 52 4b 54 52 55 53 54 45 44 2c 20  PT_MARKTRUSTED, 
15e0: 4f 50 54 5f 52 45 43 4c 49 4d 49 54 0a 20 20 20  OPT_RECLIMIT.   
15f0: 20 20 7d 3b 0a 20 20 20 20 20 0a 20 20 20 20 20    };.     .     
1600: 73 6c 61 76 65 49 6e 74 65 72 70 20 3d 20 28 54  slaveInterp = (T
1610: 63 6c 5f 49 6e 74 65 72 70 20 2a 29 20 63 6c 69  cl_Interp *) cli
1620: 65 6e 74 44 61 74 61 3b 0a 40 40 20 2d 31 39 35  entData;.@@ -195
1630: 35 2c 36 20 2b 31 39 37 34 2c 31 33 20 40 40 0a  5,6 +1974,13 @@.
1640: 20 09 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20   .    }.        
1650: 20 20 20 20 20 72 65 74 75 72 6e 20 53 6c 61 76       return Slav
1660: 65 4d 61 72 6b 54 72 75 73 74 65 64 28 69 6e 74  eMarkTrusted(int
1670: 65 72 70 2c 20 73 6c 61 76 65 49 6e 74 65 72 70  erp, slaveInterp
1680: 29 3b 0a 20 09 7d 0a 2b 09 63 61 73 65 20 4f 50  );. .}.+.case OP
1690: 54 5f 52 45 43 4c 49 4d 49 54 3a 20 7b 0a 2b 09  T_RECLIMIT: {.+.
16a0: 20 20 20 20 69 66 20 28 6f 62 6a 63 20 21 3d 20      if (objc != 
16b0: 32 20 26 26 20 6f 62 6a 63 20 21 3d 20 33 29 20  2 && objc != 3) 
16c0: 7b 0a 2b 09 09 54 63 6c 5f 57 72 6f 6e 67 4e 75  {.+..Tcl_WrongNu
16d0: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 32 2c  mArgs(interp, 2,
16e0: 20 6f 62 6a 76 2c 20 22 3f 6e 65 77 6c 69 6d 69   objv, "?newlimi
16f0: 74 3f 22 29 3b 0a 2b 09 09 72 65 74 75 72 6e 20  t?");.+..return 
1700: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 20 20 20  TCL_ERROR;.+.   
1710: 20 7d 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20   }.+.    return 
1720: 53 6c 61 76 65 52 65 63 75 72 73 69 6f 6e 4c 69  SlaveRecursionLi
1730: 6d 69 74 28 69 6e 74 65 72 70 2c 20 73 6c 61 76  mit(interp, slav
1740: 65 49 6e 74 65 72 70 2c 20 6f 62 6a 63 20 2d 20  eInterp, objc - 
1750: 32 2c 20 6f 62 6a 76 20 2b 20 32 29 3b 0a 2b 09  2, objv + 2);.+.
1760: 7d 0a 20 20 20 20 20 7d 0a 20 0a 20 20 20 20 20  }.     }. .     
1770: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1780: 3b 0a 40 40 20 2d 32 30 39 32 2c 36 20 2b 32 31  ;.@@ -2092,6 +21
1790: 31 38 2c 36 35 20 40 40 0a 20 09 72 65 74 75 72  18,65 @@. .retur
17a0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
17b0: 20 20 7d 0a 20 20 20 20 20 72 65 74 75 72 6e 20    }.     return 
17c0: 54 43 4c 5f 4f 4b 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f  TCL_OK;.+}.+..+/
17d0: 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.+ *-----------
17e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a  -----------.+ *.
1820: 2b 20 2a 20 53 6c 61 76 65 52 65 63 75 72 73 69  + * SlaveRecursi
1830: 6f 6e 4c 69 6d 69 74 20 2d 2d 0a 2b 20 2a 0a 2b  onLimit --.+ *.+
1840: 20 2a 09 48 65 6c 70 65 72 20 66 75 6e 63 74 69   *.Helper functi
1850: 6f 6e 20 74 6f 20 73 65 74 2f 71 75 65 72 79 20  on to set/query 
1860: 74 68 65 20 52 65 63 75 72 73 69 6f 6e 20 6c 69  the Recursion li
1870: 6d 69 74 20 6f 66 20 61 6e 20 69 6e 74 65 72 70  mit of an interp
1880: 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73  .+ *.+ * Results
1890: 3a 0a 2b 20 2a 09 41 20 73 74 61 6e 64 61 72 64  :.+ *.A standard
18a0: 20 54 63 6c 20 72 65 73 75 6c 74 2e 0a 2b 20 2a   Tcl result..+ *
18b0: 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  .+ * Side effect
18c0: 73 3a 0a 2b 20 2a 20 20 20 20 20 20 57 68 65 6e  s:.+ *      When
18d0: 20 28 6f 62 6a 63 20 3d 3d 20 31 29 2c 20 73 6c   (objc == 1), sl
18e0: 61 76 65 49 6e 74 65 72 70 20 77 69 6c 6c 20 62  aveInterp will b
18f0: 65 20 73 65 74 20 74 6f 20 61 20 6e 65 77 20 72  e set to a new r
1900: 65 63 75 72 73 69 6f 6e 0a 2b 20 2a 09 6c 69 6d  ecursion.+ *.lim
1910: 69 74 20 6f 66 20 6f 62 6a 76 5b 30 5d 2e 0a 2b  it of objv[0]..+
1920: 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *.+ *----------
1930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a  ------------.+ *
1970: 2f 0a 2b 0a 2b 73 74 61 74 69 63 20 69 6e 74 0a  /.+.+static int.
1980: 2b 53 6c 61 76 65 52 65 63 75 72 73 69 6f 6e 4c  +SlaveRecursionL
1990: 69 6d 69 74 28 69 6e 74 65 72 70 2c 20 73 6c 61  imit(interp, sla
19a0: 76 65 49 6e 74 65 72 70 2c 20 6f 62 6a 63 2c 20  veInterp, objc, 
19b0: 6f 62 6a 76 29 0a 2b 20 20 20 20 54 63 6c 5f 49  objv).+    Tcl_I
19c0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09  nterp *interp;..
19d0: 2f 2a 20 49 6e 74 65 72 70 20 66 6f 72 20 65 72  /* Interp for er
19e0: 72 6f 72 20 72 65 74 75 72 6e 2e 20 2a 2f 0a 2b  ror return. */.+
19f0: 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 09 2a      Tcl_Interp.*
1a00: 73 6c 61 76 65 49 6e 74 65 72 70 3b 09 2f 2a 20  slaveInterp;./* 
1a10: 49 6e 74 65 72 70 20 69 6e 20 77 68 69 63 68 20  Interp in which 
1a20: 6c 69 6d 69 74 20 69 73 20 73 65 74 2f 71 75 65  limit is set/que
1a30: 72 69 65 64 2e 20 2a 2f 0a 2b 20 20 20 20 69 6e  ried. */.+    in
1a40: 74 20 6f 62 6a 63 3b 09 09 09 2f 2a 20 53 65 74  t objc;.../* Set
1a50: 20 6f 72 20 51 75 65 72 79 2e 20 2a 2f 0a 2b 20   or Query. */.+ 
1a60: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53     Tcl_Obj *CONS
1a70: 54 20 6f 62 6a 76 5b 5d 3b 09 2f 2a 20 41 72 67  T objv[];./* Arg
1a80: 75 6d 65 6e 74 20 73 74 72 69 6e 67 73 2e 20 2a  ument strings. *
1a90: 2f 0a 2b 7b 0a 2b 20 20 20 20 49 6e 74 65 72 70  /.+{.+    Interp
1aa0: 20 2a 69 50 74 72 3b 0a 2b 20 20 20 20 69 6e 74   *iPtr;.+    int
1ab0: 20 6c 69 6d 69 74 3b 0a 2b 0a 2b 20 20 20 20 69   limit;.+.+    i
1ac0: 66 20 28 6f 62 6a 63 29 20 7b 0a 2b 09 69 66 20  f (objc) {.+.if 
1ad0: 28 54 63 6c 5f 49 73 53 61 66 65 28 69 6e 74 65  (Tcl_IsSafe(inte
1ae0: 72 70 29 29 20 7b 0a 2b 09 20 20 20 20 54 63 6c  rp)) {.+.    Tcl
1af0: 5f 41 70 70 65 6e 64 53 74 72 69 6e 67 73 54 6f  _AppendStringsTo
1b00: 4f 62 6a 28 54 63 6c 5f 47 65 74 4f 62 6a 52 65  Obj(Tcl_GetObjRe
1b10: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 0a 2b 09  sult(interp),.+.
1b20: 09 20 20 20 20 22 70 65 72 6d 69 73 73 69 6f 6e  .    "permission
1b30: 20 64 65 6e 69 65 64 3a 20 22 2c 0a 2b 09 09 20   denied: ",.+.. 
1b40: 20 20 20 22 73 61 66 65 20 69 6e 74 65 72 70 72     "safe interpr
1b50: 65 74 65 72 73 20 63 61 6e 6e 6f 74 20 63 68 61  eters cannot cha
1b60: 6e 67 65 20 72 65 63 75 72 73 69 6f 6e 20 6c 69  nge recursion li
1b70: 6d 69 74 22 2c 0a 2b 09 09 20 20 20 20 28 63 68  mit",.+..    (ch
1b80: 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 2b 09 20  ar *) NULL);.+. 
1b90: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1ba0: 52 4f 52 3b 0a 2b 09 7d 0a 2b 09 69 66 20 28 54  ROR;.+.}.+.if (T
1bb0: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
1bc0: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 30 5d  (interp, objv[0]
1bd0: 2c 20 26 6c 69 6d 69 74 29 20 3d 3d 20 54 43 4c  , &limit) == TCL
1be0: 5f 45 52 52 4f 52 29 20 7b 0a 2b 09 20 20 20 20  _ERROR) {.+.    
1bf0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1c00: 3b 0a 2b 09 7d 0a 2b 09 69 66 20 28 6c 69 6d 69  ;.+.}.+.if (limi
1c10: 74 20 3c 3d 20 30 29 20 7b 0a 2b 09 20 20 20 20  t <= 0) {.+.    
1c20: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
1c30: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
1c40: 53 74 72 69 6e 67 4f 62 6a 28 0a 2b 09 09 20 20  StringObj(.+..  
1c50: 20 20 22 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d    "recursion lim
1c60: 69 74 20 6d 75 73 74 20 62 65 20 3e 20 30 22 2c  it must be > 0",
1c70: 20 2d 31 29 29 3b 0a 2b 09 20 20 20 20 72 65 74   -1));.+.    ret
1c80: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b  urn TCL_ERROR;.+
1c90: 09 7d 0a 2b 09 54 63 6c 5f 53 65 74 52 65 63 75  .}.+.Tcl_SetRecu
1ca0: 72 73 69 6f 6e 4c 69 6d 69 74 28 73 6c 61 76 65  rsionLimit(slave
1cb0: 49 6e 74 65 72 70 2c 20 6c 69 6d 69 74 29 3b 0a  Interp, limit);.
1cc0: 2b 09 69 50 74 72 20 3d 20 28 49 6e 74 65 72 70  +.iPtr = (Interp
1cd0: 20 2a 29 20 73 6c 61 76 65 49 6e 74 65 72 70 3b   *) slaveInterp;
1ce0: 0a 2b 09 69 66 20 28 69 6e 74 65 72 70 20 3d 3d  .+.if (interp ==
1cf0: 20 73 6c 61 76 65 49 6e 74 65 72 70 20 26 26 20   slaveInterp && 
1d00: 69 50 74 72 2d 3e 6e 75 6d 4c 65 76 65 6c 73 20  iPtr->numLevels 
1d10: 3e 20 6c 69 6d 69 74 29 20 7b 0a 2b 09 20 20 20  > limit) {.+.   
1d20: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
1d30: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
1d40: 77 53 74 72 69 6e 67 4f 62 6a 28 0a 2b 09 09 20  wStringObj(.+.. 
1d50: 20 20 20 22 66 61 6c 6c 69 6e 67 20 62 61 63 6b     "falling back
1d60: 20 64 75 65 20 74 6f 20 6e 65 77 20 72 65 63 75   due to new recu
1d70: 72 73 69 6f 6e 20 6c 69 6d 69 74 22 2c 20 2d 31  rsion limit", -1
1d80: 29 29 3b 0a 2b 09 20 20 20 20 72 65 74 75 72 6e  ));.+.    return
1d90: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 7d 0a   TCL_ERROR;.+.}.
1da0: 2b 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  +.Tcl_SetObjResu
1db0: 6c 74 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  lt(interp, objv[
1dc0: 30 5d 29 3b 0a 2b 20 20 20 20 20 20 20 20 72 65  0]);.+        re
1dd0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 20 20  turn TCL_OK;.+  
1de0: 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 6c 69 6d    } else {.+.lim
1df0: 69 74 20 3d 20 54 63 6c 5f 53 65 74 52 65 63 75  it = Tcl_SetRecu
1e00: 72 73 69 6f 6e 4c 69 6d 69 74 28 73 6c 61 76 65  rsionLimit(slave
1e10: 49 6e 74 65 72 70 2c 20 30 29 3b 0a 2b 09 54 63  Interp, 0);.+.Tc
1e20: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
1e30: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
1e40: 74 4f 62 6a 28 6c 69 6d 69 74 29 29 3b 0a 2b 20  tObj(limit));.+ 
1e50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43         return TC
1e60: 4c 5f 4f 4b 3b 0a 2b 20 20 20 20 7d 0a 20 7d 0a  L_OK;.+    }. }.
1e70: 20 0c 0a 20 2f 2a 0a 49 6e 64 65 78 3a 20 67 65   .. /*.Index: ge
1e80: 6e 65 72 69 63 2f 74 63 6c 54 65 73 74 2e 63 0a  neric/tclTest.c.
1e90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1ea0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1eb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1ec0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1ed0: 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63  ===.RCS file: /c
1ee0: 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67  vsroot/tcl/tcl/g
1ef0: 65 6e 65 72 69 63 2f 74 63 6c 54 65 73 74 2e 63  eneric/tclTest.c
1f00: 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65  ,v.retrieving re
1f10: 76 69 73 69 6f 6e 20 31 2e 34 36 0a 64 69 66 66  vision 1.46.diff
1f20: 20 2d 75 20 2d 75 20 2d 72 31 2e 34 36 20 74 63   -u -u -r1.46 tc
1f30: 6c 54 65 73 74 2e 63 0a 2d 2d 2d 20 67 65 6e 65  lTest.c.--- gene
1f40: 72 69 63 2f 74 63 6c 54 65 73 74 2e 63 09 32 38  ric/tclTest.c.28
1f50: 20 46 65 62 20 32 30 30 32 20 30 30 3a 33 38 3a   Feb 2002 00:38:
1f60: 34 39 20 2d 30 30 30 30 09 31 2e 34 36 0a 2b 2b  49 -0000.1.46.++
1f70: 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 54 65 73  + generic/tclTes
1f80: 74 2e 63 09 37 20 4d 61 72 20 32 30 30 32 20 30  t.c.7 Mar 2002 0
1f90: 31 3a 30 32 3a 33 39 20 2d 30 30 30 30 0a 40 40  1:02:39 -0000.@@
1fa0: 20 2d 33 30 31 2c 39 20 2b 33 30 31 2c 36 20 40   -301,9 +301,6 @
1fb0: 40 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 49 6e  @. ...    Tcl_In
1fc0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e  terp *interp, in
1fd0: 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61  t argc, char **a
1fe0: 72 67 76 29 29 3b 0a 20 73 74 61 74 69 63 20 69  rgv));. static i
1ff0: 6e 74 09 09 54 65 73 74 73 65 74 70 6c 61 74 66  nt..Testsetplatf
2000: 6f 72 6d 43 6d 64 20 5f 41 4e 53 49 5f 41 52 47  ormCmd _ANSI_ARG
2010: 53 5f 28 28 43 6c 69 65 6e 74 44 61 74 61 20 64  S_((ClientData d
2020: 75 6d 6d 79 2c 0a 20 09 09 09 20 20 20 20 54 63  ummy,. ...    Tc
2030: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
2040: 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  , int argc, char
2050: 20 2a 2a 61 72 67 76 29 29 3b 0a 2d 73 74 61 74   **argv));.-stat
2060: 69 63 20 69 6e 74 09 09 54 65 73 74 73 65 74 72  ic int..Testsetr
2070: 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 43 6d 64  ecursionlimitCmd
2080: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 0a 2d   _ANSI_ARGS_((.-
2090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 43 6c 69 65              Clie
20b0: 6e 74 44 61 74 61 20 64 75 6d 6d 79 2c 20 54 63  ntData dummy, Tc
20c0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
20d0: 2c 0a 2d 09 09 09 20 20 20 20 69 6e 74 20 6f 62  ,.-...    int ob
20e0: 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  jc, Tcl_Obj *CON
20f0: 53 54 20 6f 62 6a 76 5b 5d 29 29 3b 0a 20 73 74  ST objv[]));. st
2100: 61 74 69 63 20 69 6e 74 09 09 54 65 73 74 73 74  atic int..Testst
2110: 61 74 69 63 70 6b 67 43 6d 64 20 5f 41 4e 53 49  aticpkgCmd _ANSI
2120: 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e 74 44 61  _ARGS_((ClientDa
2130: 74 61 20 64 75 6d 6d 79 2c 0a 20 09 09 09 20 20  ta dummy,. ...  
2140: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
2150: 74 65 72 70 2c 20 69 6e 74 20 61 72 67 63 2c 20  terp, int argc, 
2160: 63 68 61 72 20 2a 2a 61 72 67 76 29 29 3b 0a 20  char **argv));. 
2170: 73 74 61 74 69 63 20 69 6e 74 09 09 50 72 65 74  static int..Pret
2180: 65 6e 64 54 63 6c 70 53 74 61 74 20 5f 41 4e 53  endTclpStat _ANS
2190: 49 5f 41 52 47 53 5f 28 28 43 4f 4e 53 54 20 63  I_ARGS_((CONST c
21a0: 68 61 72 20 2a 70 61 74 68 2c 0a 40 40 20 2d 35  har *path,.@@ -5
21b0: 36 39 2c 39 20 2b 35 36 36 2c 36 20 40 40 0a 20  69,9 +566,6 @@. 
21c0: 09 20 20 20 20 28 54 63 6c 5f 43 6d 64 44 65 6c  .    (Tcl_CmdDel
21d0: 65 74 65 50 72 6f 63 20 2a 29 20 4e 55 4c 4c 29  eteProc *) NULL)
21e0: 3b 0a 20 20 20 20 20 54 63 6c 5f 43 72 65 61 74  ;.     Tcl_Creat
21f0: 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  eCommand(interp,
2200: 20 22 74 65 73 74 73 65 74 70 6c 61 74 66 6f 72   "testsetplatfor
2210: 6d 22 2c 20 54 65 73 74 73 65 74 70 6c 61 74 66  m", Testsetplatf
2220: 6f 72 6d 43 6d 64 2c 0a 20 09 20 20 20 20 28 43  ormCmd,. .    (C
2230: 6c 69 65 6e 74 44 61 74 61 29 20 30 2c 20 28 54  lientData) 0, (T
2240: 63 6c 5f 43 6d 64 44 65 6c 65 74 65 50 72 6f 63  cl_CmdDeleteProc
2250: 20 2a 29 20 4e 55 4c 4c 29 3b 0a 2d 20 20 20 20   *) NULL);.-    
2260: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
2270: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 74 65  mand(interp, "te
2280: 73 74 73 65 74 72 65 63 75 72 73 69 6f 6e 6c 69  stsetrecursionli
2290: 6d 69 74 22 2c 0a 2d 09 20 20 20 20 54 65 73 74  mit",.-.    Test
22a0: 73 65 74 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  setrecursionlimi
22b0: 74 43 6d 64 2c 0a 2d 09 20 20 20 20 28 43 6c 69  tCmd,.-.    (Cli
22c0: 65 6e 74 44 61 74 61 29 20 30 2c 20 28 54 63 6c  entData) 0, (Tcl
22d0: 5f 43 6d 64 44 65 6c 65 74 65 50 72 6f 63 20 2a  _CmdDeleteProc *
22e0: 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 54 63  ) NULL);.     Tc
22f0: 6c 5f 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  l_CreateCommand(
2300: 69 6e 74 65 72 70 2c 20 22 74 65 73 74 73 74 61  interp, "teststa
2310: 74 69 63 70 6b 67 22 2c 20 54 65 73 74 73 74 61  ticpkg", Teststa
2320: 74 69 63 70 6b 67 43 6d 64 2c 0a 20 09 20 20 20  ticpkgCmd,. .   
2330: 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20 30 2c   (ClientData) 0,
2340: 20 28 54 63 6c 5f 43 6d 64 44 65 6c 65 74 65 50   (Tcl_CmdDeleteP
2350: 72 6f 63 20 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20  roc *) NULL);.  
2360: 20 20 20 54 63 6c 5f 43 72 65 61 74 65 43 6f 6d     Tcl_CreateCom
2370: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 74 65  mand(interp, "te
2380: 73 74 74 72 61 6e 73 6c 61 74 65 66 69 6c 65 6e  sttranslatefilen
2390: 61 6d 65 22 2c 0a 40 40 20 2d 33 32 38 33 2c 34  ame",.@@ -3283,4
23a0: 37 20 2b 33 32 37 37 2c 36 20 40 40 0a 20 20 20  7 +3277,6 @@.   
23b0: 20 20 7d 0a 20 20 20 20 20 72 65 74 75 72 6e 20    }.     return 
23c0: 54 43 4c 5f 4f 4b 3b 0a 20 7d 0a 2d 0c 0a 2d 2f  TCL_OK;. }.-..-/
23d0: 2a 0a 2d 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.- *-----------
23e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 0a  -----------.- *.
2420: 2d 20 2a 20 54 65 73 74 73 65 74 72 65 63 75 72  - * Testsetrecur
2430: 73 69 6f 6e 6c 69 6d 69 74 43 6d 64 20 2d 2d 0a  sionlimitCmd --.
2440: 2d 20 2a 0a 2d 20 2a 09 54 68 69 73 20 70 72 6f  - *.- *.This pro
2450: 63 65 64 75 72 65 20 69 6d 70 6c 65 6d 65 6e 74  cedure implement
2460: 73 20 74 68 65 20 22 74 65 73 74 73 65 74 72 65  s the "testsetre
2470: 63 75 72 73 69 6f 6e 6c 69 6d 69 74 22 20 63 6f  cursionlimit" co
2480: 6d 6d 61 6e 64 2e 20 49 74 20 69 73 0a 2d 20 2a  mmand. It is.- *
2490: 09 75 73 65 64 20 74 6f 20 63 68 61 6e 67 65 20  .used to change 
24a0: 74 68 65 20 69 6e 74 65 72 70 20 72 65 63 75 72  the interp recur
24b0: 73 69 6f 6e 20 6c 69 6d 69 74 20 28 74 6f 20 74  sion limit (to t
24c0: 65 73 74 20 74 68 65 20 65 66 66 65 63 74 73 0a  est the effects.
24d0: 2d 20 2a 20 20 20 20 20 20 6f 66 20 54 63 6c 5f  - *      of Tcl_
24e0: 53 65 74 52 65 63 75 72 73 69 6f 6e 4c 69 6d 69  SetRecursionLimi
24f0: 74 29 2e 0a 2d 20 2a 0a 2d 20 2a 20 52 65 73 75  t)..- *.- * Resu
2500: 6c 74 73 3a 0a 2d 20 2a 09 41 20 73 74 61 6e 64  lts:.- *.A stand
2510: 61 72 64 20 54 63 6c 20 72 65 73 75 6c 74 2e 0a  ard Tcl result..
2520: 2d 20 2a 0a 2d 20 2a 20 53 69 64 65 20 65 66 66  - *.- * Side eff
2530: 65 63 74 73 3a 0a 2d 20 2a 09 53 65 74 73 20 74  ects:.- *.Sets t
2540: 68 65 20 69 6e 74 65 72 70 27 73 20 72 65 63 75  he interp's recu
2550: 72 73 69 6f 6e 20 6c 69 6d 69 74 2e 0a 2d 20 2a  rsion limit..- *
2560: 0a 2d 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .- *------------
2570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
25a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 2f 0a  ----------.- */.
25b0: 2d 0a 2d 73 74 61 74 69 63 20 69 6e 74 0a 2d 54  -.-static int.-T
25c0: 65 73 74 73 65 74 72 65 63 75 72 73 69 6f 6e 6c  estsetrecursionl
25d0: 69 6d 69 74 43 6d 64 28 64 75 6d 6d 79 2c 20 69  imitCmd(dummy, i
25e0: 6e 74 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a  nterp, objc, obj
25f0: 76 29 0a 2d 20 20 20 20 43 6c 69 65 6e 74 44 61  v).-    ClientDa
2600: 74 61 20 64 75 6d 6d 79 3b 09 09 2f 2a 20 4e 6f  ta dummy;../* No
2610: 74 20 75 73 65 64 2e 20 2a 2f 0a 2d 20 20 20 20  t used. */.-    
2620: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
2630: 72 70 3b 09 09 2f 2a 20 43 75 72 72 65 6e 74 20  rp;../* Current 
2640: 69 6e 74 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a  interpreter. */.
2650: 2d 20 20 20 20 69 6e 74 20 6f 62 6a 63 3b 09 09  -    int objc;..
2660: 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72  ./* Number of ar
2670: 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a 2d 20 20 20  guments. */.-   
2680: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
2690: 6f 62 6a 76 5b 5d 3b 09 2f 2a 20 54 68 65 20 61  objv[];./* The a
26a0: 72 67 75 6d 65 6e 74 20 6f 62 6a 65 63 74 73 2e  rgument objects.
26b0: 20 2a 2f 0a 2d 7b 0a 2d 20 20 20 20 69 6e 74 20   */.-{.-    int 
26c0: 20 20 20 20 76 61 6c 75 65 3b 0a 2d 0a 2d 20 20      value;.-.-  
26d0: 20 20 69 66 20 28 6f 62 6a 63 20 21 3d 20 32 29    if (objc != 2)
26e0: 20 7b 0a 2d 20 20 20 20 09 54 63 6c 5f 57 72 6f   {.-    .Tcl_Wro
26f0: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
2700: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 69 6e 74 65  , 1, objv, "inte
2710: 67 65 72 22 29 3b 0a 2d 09 72 65 74 75 72 6e 20  ger");.-.return 
2720: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2d 20 20 20 20  TCL_ERROR;.-    
2730: 7d 0a 2d 20 20 20 20 69 66 20 28 54 63 6c 5f 47  }.-    if (Tcl_G
2740: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
2750: 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 76  erp, objv[1], &v
2760: 61 6c 75 65 29 20 21 3d 20 54 43 4c 5f 4f 4b 29  alue) != TCL_OK)
2770: 20 7b 0a 2d 09 72 65 74 75 72 6e 20 54 43 4c 5f   {.-.return TCL_
2780: 45 52 52 4f 52 3b 0a 2d 20 20 20 20 7d 0a 2d 20  ERROR;.-    }.- 
2790: 20 20 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f 53     value = Tcl_S
27a0: 65 74 52 65 63 75 72 73 69 6f 6e 4c 69 6d 69 74  etRecursionLimit
27b0: 28 69 6e 74 65 72 70 2c 20 76 61 6c 75 65 29 3b  (interp, value);
27c0: 0a 2d 20 20 20 20 54 63 6c 5f 53 65 74 49 6e 74  .-    Tcl_SetInt
27d0: 4f 62 6a 28 54 63 6c 5f 47 65 74 4f 62 6a 52 65  Obj(Tcl_GetObjRe
27e0: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 76 61  sult(interp), va
27f0: 6c 75 65 29 3b 0a 2d 20 20 20 20 72 65 74 75 72  lue);.-    retur
2800: 6e 20 54 43 4c 5f 4f 4b 3b 0a 2d 7d 0a 2d 0a 2d  n TCL_OK;.-}.-.-
2810: 0a 20 0c 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d  . .. /*.  *-----
2820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2860: 2d 0a 49 6e 64 65 78 3a 20 74 65 73 74 73 2f 69  -.Index: tests/i
2870: 6e 74 65 72 70 2e 74 65 73 74 0a 3d 3d 3d 3d 3d  nterp.test.=====
2880: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2890: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
28a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
28b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52  ==============.R
28c0: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f  CS file: /cvsroo
28d0: 74 2f 74 63 6c 2f 74 63 6c 2f 74 65 73 74 73 2f  t/tcl/tcl/tests/
28e0: 69 6e 74 65 72 70 2e 74 65 73 74 2c 76 0a 72 65  interp.test,v.re
28f0: 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f  trieving revisio
2900: 6e 20 31 2e 31 33 0a 64 69 66 66 20 2d 75 20 2d  n 1.13.diff -u -
2910: 75 20 2d 72 31 2e 31 33 20 69 6e 74 65 72 70 2e  u -r1.13 interp.
2920: 74 65 73 74 0a 2d 2d 2d 20 74 65 73 74 73 2f 69  test.--- tests/i
2930: 6e 74 65 72 70 2e 74 65 73 74 09 31 36 20 4e 6f  nterp.test.16 No
2940: 76 20 32 30 30 31 20 32 32 3a 32 38 3a 30 38 20  v 2001 22:28:08 
2950: 2d 30 30 30 30 09 31 2e 31 33 0a 2b 2b 2b 20 74  -0000.1.13.+++ t
2960: 65 73 74 73 2f 69 6e 74 65 72 70 2e 74 65 73 74  ests/interp.test
2970: 09 37 20 4d 61 72 20 32 30 30 32 20 30 31 3a 30  .7 Mar 2002 01:0
2980: 32 3a 34 30 20 2d 30 30 30 30 0a 40 40 20 2d 33  2:40 -0000.@@ -3
2990: 37 2c 37 20 2b 33 37 2c 37 20 40 40 0a 20 7d 20  7,7 +37,7 @@. } 
29a0: 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73  {1 {wrong # args
29b0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 69 6e 74  : should be "int
29c0: 65 72 70 20 63 6d 64 20 3f 61 72 67 20 2e 2e 2e  erp cmd ?arg ...
29d0: 3f 22 7d 7d 0a 20 74 65 73 74 20 69 6e 74 65 72  ?"}}. test inter
29e0: 70 2d 31 2e 32 20 7b 6f 70 74 69 6f 6e 73 20 66  p-1.2 {options f
29f0: 6f 72 20 69 6e 74 65 72 70 20 63 6f 6d 6d 61 6e  or interp comman
2a00: 64 7d 20 7b 0a 20 20 20 20 20 6c 69 73 74 20 5b  d} {.     list [
2a10: 63 61 74 63 68 20 7b 69 6e 74 65 72 70 20 66 72  catch {interp fr
2a20: 6f 62 6f 78 7d 20 6d 73 67 5d 20 24 6d 73 67 0a  obox} msg] $msg.
2a30: 2d 7d 20 7b 31 20 7b 62 61 64 20 6f 70 74 69 6f  -} {1 {bad optio
2a40: 6e 20 22 66 72 6f 62 6f 78 22 3a 20 6d 75 73 74  n "frobox": must
2a50: 20 62 65 20 61 6c 69 61 73 2c 20 61 6c 69 61 73   be alias, alias
2a60: 65 73 2c 20 63 72 65 61 74 65 2c 20 64 65 6c 65  es, create, dele
2a70: 74 65 2c 20 65 76 61 6c 2c 20 65 78 69 73 74 73  te, eval, exists
2a80: 2c 20 65 78 70 6f 73 65 2c 20 68 69 64 65 2c 20  , expose, hide, 
2a90: 68 69 64 64 65 6e 2c 20 69 73 73 61 66 65 2c 20  hidden, issafe, 
2aa0: 69 6e 76 6f 6b 65 68 69 64 64 65 6e 2c 20 6d 61  invokehidden, ma
2ab0: 72 6b 74 72 75 73 74 65 64 2c 20 73 6c 61 76 65  rktrusted, slave
2ac0: 73 2c 20 73 68 61 72 65 2c 20 74 61 72 67 65 74  s, share, target
2ad0: 2c 20 6f 72 20 74 72 61 6e 73 66 65 72 7d 7d 0a  , or transfer}}.
2ae0: 2b 7d 20 7b 31 20 7b 62 61 64 20 6f 70 74 69 6f  +} {1 {bad optio
2af0: 6e 20 22 66 72 6f 62 6f 78 22 3a 20 6d 75 73 74  n "frobox": must
2b00: 20 62 65 20 61 6c 69 61 73 2c 20 61 6c 69 61 73   be alias, alias
2b10: 65 73 2c 20 63 72 65 61 74 65 2c 20 64 65 6c 65  es, create, dele
2b20: 74 65 2c 20 65 76 61 6c 2c 20 65 78 69 73 74 73  te, eval, exists
2b30: 2c 20 65 78 70 6f 73 65 2c 20 68 69 64 65 2c 20  , expose, hide, 
2b40: 68 69 64 64 65 6e 2c 20 69 73 73 61 66 65 2c 20  hidden, issafe, 
2b50: 69 6e 76 6f 6b 65 68 69 64 64 65 6e 2c 20 6d 61  invokehidden, ma
2b60: 72 6b 74 72 75 73 74 65 64 2c 20 72 65 63 75 72  rktrusted, recur
2b70: 73 69 6f 6e 6c 69 6d 69 74 2c 20 73 6c 61 76 65  sionlimit, slave
2b80: 73 2c 20 73 68 61 72 65 2c 20 74 61 72 67 65 74  s, share, target
2b90: 2c 20 6f 72 20 74 72 61 6e 73 66 65 72 7d 7d 0a  , or transfer}}.
2ba0: 20 74 65 73 74 20 69 6e 74 65 72 70 2d 31 2e 33   test interp-1.3
2bb0: 20 7b 6f 70 74 69 6f 6e 73 20 66 6f 72 20 69 6e   {options for in
2bc0: 74 65 72 70 20 63 6f 6d 6d 61 6e 64 7d 20 7b 0a  terp command} {.
2bd0: 20 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65       interp dele
2be0: 74 65 0a 20 7d 20 22 22 0a 40 40 20 2d 35 35 2c  te. } "".@@ -55,
2bf0: 31 37 20 2b 35 35 2c 31 38 20 40 40 0a 20 7d 20  17 +55,18 @@. } 
2c00: 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73  {1 {wrong # args
2c10: 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 69 6e 74  : should be "int
2c20: 65 72 70 20 73 6c 61 76 65 73 20 3f 70 61 74 68  erp slaves ?path
2c30: 3f 22 7d 7d 0a 20 74 65 73 74 20 69 6e 74 65 72  ?"}}. test inter
2c40: 70 2d 31 2e 37 20 7b 6f 70 74 69 6f 6e 73 20 66  p-1.7 {options f
2c50: 6f 72 20 69 6e 74 65 72 70 20 63 6f 6d 6d 61 6e  or interp comman
2c60: 64 7d 20 7b 0a 20 20 20 20 20 6c 69 73 74 20 5b  d} {.     list [
2c70: 63 61 74 63 68 20 7b 69 6e 74 65 72 70 20 68 65  catch {interp he
2c80: 6c 6c 6f 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2d  llo} msg] $msg.-
2c90: 7d 20 7b 31 20 7b 62 61 64 20 6f 70 74 69 6f 6e  } {1 {bad option
2ca0: 20 22 68 65 6c 6c 6f 22 3a 20 6d 75 73 74 20 62   "hello": must b
2cb0: 65 20 61 6c 69 61 73 2c 20 61 6c 69 61 73 65 73  e alias, aliases
2cc0: 2c 20 63 72 65 61 74 65 2c 20 64 65 6c 65 74 65  , create, delete
2cd0: 2c 20 65 76 61 6c 2c 20 65 78 69 73 74 73 2c 20  , eval, exists, 
2ce0: 65 78 70 6f 73 65 2c 20 68 69 64 65 2c 20 68 69  expose, hide, hi
2cf0: 64 64 65 6e 2c 20 69 73 73 61 66 65 2c 20 69 6e  dden, issafe, in
2d00: 76 6f 6b 65 68 69 64 64 65 6e 2c 20 6d 61 72 6b  vokehidden, mark
2d10: 74 72 75 73 74 65 64 2c 20 73 6c 61 76 65 73 2c  trusted, slaves,
2d20: 20 73 68 61 72 65 2c 20 74 61 72 67 65 74 2c 20   share, target, 
2d30: 6f 72 20 74 72 61 6e 73 66 65 72 7d 7d 0a 2b 7d  or transfer}}.+}
2d40: 20 7b 31 20 7b 62 61 64 20 6f 70 74 69 6f 6e 20   {1 {bad option 
2d50: 22 68 65 6c 6c 6f 22 3a 20 6d 75 73 74 20 62 65  "hello": must be
2d60: 20 61 6c 69 61 73 2c 20 61 6c 69 61 73 65 73 2c   alias, aliases,
2d70: 20 63 72 65 61 74 65 2c 20 64 65 6c 65 74 65 2c   create, delete,
2d80: 20 65 76 61 6c 2c 20 65 78 69 73 74 73 2c 20 65   eval, exists, e
2d90: 78 70 6f 73 65 2c 20 68 69 64 65 2c 20 68 69 64  xpose, hide, hid
2da0: 64 65 6e 2c 20 69 73 73 61 66 65 2c 20 69 6e 76  den, issafe, inv
2db0: 6f 6b 65 68 69 64 64 65 6e 2c 20 6d 61 72 6b 74  okehidden, markt
2dc0: 72 75 73 74 65 64 2c 20 72 65 63 75 72 73 69 6f  rusted, recursio
2dd0: 6e 6c 69 6d 69 74 2c 20 73 6c 61 76 65 73 2c 20  nlimit, slaves, 
2de0: 73 68 61 72 65 2c 20 74 61 72 67 65 74 2c 20 6f  share, target, o
2df0: 72 20 74 72 61 6e 73 66 65 72 7d 7d 0a 20 74 65  r transfer}}. te
2e00: 73 74 20 69 6e 74 65 72 70 2d 31 2e 38 20 7b 6f  st interp-1.8 {o
2e10: 70 74 69 6f 6e 73 20 66 6f 72 20 69 6e 74 65 72  ptions for inter
2e20: 70 20 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 20 20 20  p command} {.   
2e30: 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 69    list [catch {i
2e40: 6e 74 65 72 70 20 2d 66 72 6f 62 6f 7a 7d 20 6d  nterp -froboz} m
2e50: 73 67 5d 20 24 6d 73 67 0a 2d 7d 20 7b 31 20 7b  sg] $msg.-} {1 {
2e60: 62 61 64 20 6f 70 74 69 6f 6e 20 22 2d 66 72 6f  bad option "-fro
2e70: 62 6f 7a 22 3a 20 6d 75 73 74 20 62 65 20 61 6c  boz": must be al
2e80: 69 61 73 2c 20 61 6c 69 61 73 65 73 2c 20 63 72  ias, aliases, cr
2e90: 65 61 74 65 2c 20 64 65 6c 65 74 65 2c 20 65 76  eate, delete, ev
2ea0: 61 6c 2c 20 65 78 69 73 74 73 2c 20 65 78 70 6f  al, exists, expo
2eb0: 73 65 2c 20 68 69 64 65 2c 20 68 69 64 64 65 6e  se, hide, hidden
2ec0: 2c 20 69 73 73 61 66 65 2c 20 69 6e 76 6f 6b 65  , issafe, invoke
2ed0: 68 69 64 64 65 6e 2c 20 6d 61 72 6b 74 72 75 73  hidden, marktrus
2ee0: 74 65 64 2c 20 73 6c 61 76 65 73 2c 20 73 68 61  ted, slaves, sha
2ef0: 72 65 2c 20 74 61 72 67 65 74 2c 20 6f 72 20 74  re, target, or t
2f00: 72 61 6e 73 66 65 72 7d 7d 0a 2b 7d 20 7b 31 20  ransfer}}.+} {1 
2f10: 7b 62 61 64 20 6f 70 74 69 6f 6e 20 22 2d 66 72  {bad option "-fr
2f20: 6f 62 6f 7a 22 3a 20 6d 75 73 74 20 62 65 20 61  oboz": must be a
2f30: 6c 69 61 73 2c 20 61 6c 69 61 73 65 73 2c 20 63  lias, aliases, c
2f40: 72 65 61 74 65 2c 20 64 65 6c 65 74 65 2c 20 65  reate, delete, e
2f50: 76 61 6c 2c 20 65 78 69 73 74 73 2c 20 65 78 70  val, exists, exp
2f60: 6f 73 65 2c 20 68 69 64 65 2c 20 68 69 64 64 65  ose, hide, hidde
2f70: 6e 2c 20 69 73 73 61 66 65 2c 20 69 6e 76 6f 6b  n, issafe, invok
2f80: 65 68 69 64 64 65 6e 2c 20 6d 61 72 6b 74 72 75  ehidden, marktru
2f90: 73 74 65 64 2c 20 72 65 63 75 72 73 69 6f 6e 6c  sted, recursionl
2fa0: 69 6d 69 74 2c 20 73 6c 61 76 65 73 2c 20 73 68  imit, slaves, sh
2fb0: 61 72 65 2c 20 74 61 72 67 65 74 2c 20 6f 72 20  are, target, or 
2fc0: 74 72 61 6e 73 66 65 72 7d 7d 0a 20 74 65 73 74  transfer}}. test
2fd0: 20 69 6e 74 65 72 70 2d 31 2e 39 20 7b 6f 70 74   interp-1.9 {opt
2fe0: 69 6f 6e 73 20 66 6f 72 20 69 6e 74 65 72 70 20  ions for interp 
2ff0: 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 20 20 20 20 20  command} {.     
3000: 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 69 6e 74  list [catch {int
3010: 65 72 70 20 2d 66 72 6f 62 6f 7a 20 2d 73 61 66  erp -froboz -saf
3020: 65 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2d 7d 20  e} msg] $msg.-} 
3030: 7b 31 20 7b 62 61 64 20 6f 70 74 69 6f 6e 20 22  {1 {bad option "
3040: 2d 66 72 6f 62 6f 7a 22 3a 20 6d 75 73 74 20 62  -froboz": must b
3050: 65 20 61 6c 69 61 73 2c 20 61 6c 69 61 73 65 73  e alias, aliases
3060: 2c 20 63 72 65 61 74 65 2c 20 64 65 6c 65 74 65  , create, delete
3070: 2c 20 65 76 61 6c 2c 20 65 78 69 73 74 73 2c 20  , eval, exists, 
3080: 65 78 70 6f 73 65 2c 20 68 69 64 65 2c 20 68 69  expose, hide, hi
3090: 64 64 65 6e 2c 20 69 73 73 61 66 65 2c 20 69 6e  dden, issafe, in
30a0: 76 6f 6b 65 68 69 64 64 65 6e 2c 20 6d 61 72 6b  vokehidden, mark
30b0: 74 72 75 73 74 65 64 2c 20 73 6c 61 76 65 73 2c  trusted, slaves,
30c0: 20 73 68 61 72 65 2c 20 74 61 72 67 65 74 2c 20   share, target, 
30d0: 6f 72 20 74 72 61 6e 73 66 65 72 7d 7d 20 0a 2b  or transfer}} .+
30e0: 7d 20 7b 31 20 7b 62 61 64 20 6f 70 74 69 6f 6e  } {1 {bad option
30f0: 20 22 2d 66 72 6f 62 6f 7a 22 3a 20 6d 75 73 74   "-froboz": must
3100: 20 62 65 20 61 6c 69 61 73 2c 20 61 6c 69 61 73   be alias, alias
3110: 65 73 2c 20 63 72 65 61 74 65 2c 20 64 65 6c 65  es, create, dele
3120: 74 65 2c 20 65 76 61 6c 2c 20 65 78 69 73 74 73  te, eval, exists
3130: 2c 20 65 78 70 6f 73 65 2c 20 68 69 64 65 2c 20  , expose, hide, 
3140: 68 69 64 64 65 6e 2c 20 69 73 73 61 66 65 2c 20  hidden, issafe, 
3150: 69 6e 76 6f 6b 65 68 69 64 64 65 6e 2c 20 6d 61  invokehidden, ma
3160: 72 6b 74 72 75 73 74 65 64 2c 20 72 65 63 75 72  rktrusted, recur
3170: 73 69 6f 6e 6c 69 6d 69 74 2c 20 73 6c 61 76 65  sionlimit, slave
3180: 73 2c 20 73 68 61 72 65 2c 20 74 61 72 67 65 74  s, share, target
3190: 2c 20 6f 72 20 74 72 61 6e 73 66 65 72 7d 7d 20  , or transfer}} 
31a0: 0a 20 74 65 73 74 20 69 6e 74 65 72 70 2d 31 2e  . test interp-1.
31b0: 31 30 20 7b 6f 70 74 69 6f 6e 73 20 66 6f 72 20  10 {options for 
31c0: 69 6e 74 65 72 70 20 63 6f 6d 6d 61 6e 64 7d 20  interp command} 
31d0: 7b 0a 20 20 20 20 20 6c 69 73 74 20 5b 63 61 74  {.     list [cat
31e0: 63 68 20 7b 69 6e 74 65 72 70 20 74 61 72 67 65  ch {interp targe
31f0: 74 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20 7d 20  t} msg] $msg. } 
3200: 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73  {1 {wrong # args
3210: 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 69 6e 74  : should be "int
3220: 65 72 70 20 74 61 72 67 65 74 20 70 61 74 68 20  erp target path 
3230: 61 6c 69 61 73 22 7d 7d 0a 20 0a 2b 0a 20 23 20  alias"}}. .+. # 
3240: 50 61 72 74 20 31 3a 20 42 61 73 69 63 20 69 6e  Part 1: Basic in
3250: 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74 69  terpreter creati
3260: 6f 6e 20 74 65 73 74 73 3a 0a 20 74 65 73 74 20  on tests:. test 
3270: 69 6e 74 65 72 70 2d 32 2e 31 20 7b 62 61 73 69  interp-2.1 {basi
3280: 63 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72  c interpreter cr
3290: 65 61 74 69 6f 6e 7d 20 7b 0a 20 20 20 20 20 69  eation} {.     i
32a0: 6e 74 65 72 70 20 63 72 65 61 74 65 20 61 0a 40  nterp create a.@
32b0: 40 20 2d 34 34 38 2c 37 20 2b 34 34 39 2c 37 20  @ -448,7 +449,7 
32c0: 40 40 0a 20 20 20 20 20 69 6e 74 65 72 70 20 63  @@.     interp c
32d0: 72 65 61 74 65 20 7b 61 20 78 33 20 66 6f 6f 7d  reate {a x3 foo}
32e0: 0a 20 20 20 20 20 61 20 65 76 61 6c 20 78 33 20  .     a eval x3 
32f0: 65 76 61 6c 20 66 6f 6f 20 69 73 73 61 66 65 0a  eval foo issafe.
3300: 20 7d 20 31 0a 2d 74 65 73 74 20 69 6e 74 65 72   } 1.-test inter
3310: 70 2d 37 2e 36 20 7b 74 65 73 74 69 6e 67 20 69  p-7.6 {testing i
3320: 73 73 61 66 65 20 61 72 67 20 63 68 65 63 6b 69  ssafe arg checki
3330: 6e 67 7d 20 7b 0a 2b 74 65 73 74 20 69 6e 74 65  ng} {.+test inte
3340: 72 70 2d 31 33 2e 34 20 7b 74 65 73 74 69 6e 67  rp-13.4 {testing
3350: 20 69 73 73 61 66 65 20 61 72 67 20 63 68 65 63   issafe arg chec
3360: 6b 69 6e 67 7d 20 7b 0a 20 20 20 20 20 63 61 74  king} {.     cat
3370: 63 68 20 7b 69 6e 74 65 72 70 20 63 72 65 61 74  ch {interp creat
3380: 65 20 61 7d 0a 20 20 20 20 20 6c 69 73 74 20 5b  e a}.     list [
3390: 63 61 74 63 68 20 7b 61 20 69 73 73 61 66 65 20  catch {a issafe 
33a0: 74 6f 6f 20 6d 61 6e 79 20 61 72 67 73 7d 20 6d  too many args} m
33b0: 73 67 5d 20 24 6d 73 67 0a 20 7d 20 7b 31 20 7b  sg] $msg. } {1 {
33c0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
33d0: 6f 75 6c 64 20 62 65 20 22 61 20 69 73 73 61 66  ould be "a issaf
33e0: 65 22 7d 7d 0a 40 40 20 2d 32 32 37 38 2c 33 32  e"}}.@@ -2278,32
33f0: 20 2b 32 32 37 39 2c 33 38 35 20 40 40 0a 20 20   +2279,385 @@.  
3400: 20 20 20 73 65 74 20 72 0a 20 7d 20 7b 7d 0a 20     set r. } {}. 
3410: 0a 2d 23 20 54 65 73 74 73 20 6f 66 20 72 65 63  .-# Tests of rec
3420: 75 72 73 69 6f 6e 6c 69 6d 69 74 0a 2d 23 20 57  ursionlimit.-# W
3430: 65 20 6e 65 65 64 20 74 65 73 74 73 65 74 72 65  e need testsetre
3440: 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 73 6f 20  cursionlimit so 
3450: 77 65 20 6e 65 65 64 20 54 63 6c 74 65 73 74 20  we need Tcltest 
3460: 70 61 63 6b 61 67 65 0a 2d 69 66 20 7b 5b 63 61  package.-if {[ca
3470: 74 63 68 20 7b 70 61 63 6b 61 67 65 20 72 65 71  tch {package req
3480: 75 69 72 65 20 54 63 6c 74 65 73 74 7d 20 6d 73  uire Tcltest} ms
3490: 67 5d 7d 20 7b 0a 2d 20 20 20 20 70 75 74 73 20  g]} {.-    puts 
34a0: 22 54 68 69 73 20 61 70 70 6c 69 63 61 74 69 6f  "This applicatio
34b0: 6e 20 68 61 73 6e 27 74 20 62 65 65 6e 20 63 6f  n hasn't been co
34c0: 6d 70 69 6c 65 64 20 77 69 74 68 20 54 63 6c 74  mpiled with Tclt
34d0: 65 73 74 22 0a 2d 20 20 20 20 70 75 74 73 20 22  est".-    puts "
34e0: 73 6b 69 70 70 69 6e 67 20 72 65 6d 69 6e 69 6e  skipping reminin
34f0: 67 20 69 6e 74 65 72 70 20 74 65 73 74 73 20 74  g interp tests t
3500: 68 61 74 20 72 65 6c 69 65 73 20 6f 6e 20 69 74  hat relies on it
3510: 2e 22 0a 2d 7d 20 65 6c 73 65 20 7b 0a 2d 20 20  .".-} else {.-  
3520: 20 20 23 20 0a 2d 74 65 73 74 20 69 6e 74 65 72    # .-test inter
3530: 70 2d 32 39 2e 31 20 7b 72 65 63 75 72 73 69 6f  p-29.1 {recursio
3540: 6e 20 6c 69 6d 69 74 7d 20 7b 0a 2b 23 20 50 61  n limit} {.+# Pa
3550: 72 74 20 32 39 3a 20 72 65 63 75 72 73 69 6f 6e  rt 29: recursion
3560: 20 6c 69 6d 69 74 0a 2b 23 20 20 32 39 2e 31 2e   limit.+#  29.1.
3570: 2a 20 20 41 72 67 75 6d 65 6e 74 20 63 68 65 63  *  Argument chec
3580: 6b 69 6e 67 0a 2b 23 20 20 32 39 2e 32 2e 2a 20  king.+#  29.2.* 
3590: 20 52 65 61 64 69 6e 67 20 61 6e 64 20 73 65 74   Reading and set
35a0: 74 69 6e 67 20 74 68 65 20 72 65 63 75 72 73 69  ting the recursi
35b0: 6f 6e 20 6c 69 6d 69 74 0a 2b 23 20 20 32 39 2e  on limit.+#  29.
35c0: 33 2e 2a 20 20 44 6f 65 73 20 74 68 65 20 72 65  3.*  Does the re
35d0: 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20 77 6f  cursion limit wo
35e0: 72 6b 3f 0a 2b 23 20 20 32 39 2e 34 2e 2a 20 20  rk?.+#  29.4.*  
35f0: 52 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20  Recursion limit 
3600: 69 6e 68 65 72 69 74 61 6e 63 65 20 62 79 20 73  inheritance by s
3610: 75 62 2d 69 6e 74 65 72 70 72 65 74 65 72 73 0a  ub-interpreters.
3620: 2b 23 20 20 32 39 2e 35 2e 2a 20 20 43 6f 6e 66  +#  29.5.*  Conf
3630: 69 72 6d 69 6e 67 20 74 68 65 20 72 65 63 75 72  irming the recur
3640: 73 69 6f 6e 6c 69 6d 69 74 20 63 6f 6d 6d 61 6e  sionlimit comman
3650: 64 20 64 6f 65 73 20 6e 6f 74 20 61 66 66 65 63  d does not affec
3660: 74 20 74 68 65 20 70 61 72 65 6e 74 0a 2b 23 20  t the parent.+# 
3670: 20 32 39 2e 36 2e 2a 20 20 53 61 66 65 20 69 6e   29.6.*  Safe in
3680: 74 65 72 70 72 65 74 65 72 20 72 65 73 74 72 69  terpreter restri
3690: 63 74 69 6f 6e 0a 2b 0a 2b 74 65 73 74 20 69 6e  ction.+.+test in
36a0: 74 65 72 70 2d 32 39 2e 31 2e 31 20 7b 69 6e 74  terp-29.1.1 {int
36b0: 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d  erp recursionlim
36c0: 69 74 20 61 72 67 75 6d 65 6e 74 20 63 68 65 63  it argument chec
36d0: 6b 69 6e 67 7d 20 7b 0a 2b 20 20 20 20 6c 69 73  king} {.+    lis
36e0: 74 20 5b 63 61 74 63 68 20 7b 69 6e 74 65 72 70  t [catch {interp
36f0: 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 7d   recursionlimit}
3700: 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 7d 20 7b 31   msg] $msg.+} {1
3710: 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   {wrong # args: 
3720: 73 68 6f 75 6c 64 20 62 65 20 22 69 6e 74 65 72  should be "inter
3730: 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74  p recursionlimit
3740: 20 70 61 74 68 20 3f 6e 65 77 6c 69 6d 69 74 3f   path ?newlimit?
3750: 22 7d 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74 65  "}}.+.+test inte
3760: 72 70 2d 32 39 2e 31 2e 32 20 7b 69 6e 74 65 72  rp-29.1.2 {inter
3770: 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74  p recursionlimit
3780: 20 61 72 67 75 6d 65 6e 74 20 63 68 65 63 6b 69   argument checki
3790: 6e 67 7d 20 7b 0a 2b 20 20 20 20 6c 69 73 74 20  ng} {.+    list 
37a0: 5b 63 61 74 63 68 20 7b 69 6e 74 65 72 70 20 72  [catch {interp r
37b0: 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 66 6f  ecursionlimit fo
37c0: 6f 20 62 61 72 7d 20 6d 73 67 5d 20 24 6d 73 67  o bar} msg] $msg
37d0: 0a 2b 7d 20 7b 31 20 7b 63 6f 75 6c 64 20 6e 6f  .+} {1 {could no
37e0: 74 20 66 69 6e 64 20 69 6e 74 65 72 70 72 65 74  t find interpret
37f0: 65 72 20 22 66 6f 6f 22 7d 7d 0a 2b 0a 2b 74 65  er "foo"}}.+.+te
3800: 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 31 2e 33  st interp-29.1.3
3810: 20 7b 69 6e 74 65 72 70 20 72 65 63 75 72 73 69   {interp recursi
3820: 6f 6e 6c 69 6d 69 74 20 61 72 67 75 6d 65 6e 74  onlimit argument
3830: 20 63 68 65 63 6b 69 6e 67 7d 20 7b 0a 2b 20 20   checking} {.+  
3840: 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 69    list [catch {i
3850: 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c  nterp recursionl
3860: 69 6d 69 74 20 66 6f 6f 20 62 61 72 20 62 61 7a  imit foo bar baz
3870: 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 7d 20 7b  } msg] $msg.+} {
3880: 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  1 {wrong # args:
3890: 20 73 68 6f 75 6c 64 20 62 65 20 22 69 6e 74 65   should be "inte
38a0: 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  rp recursionlimi
38b0: 74 20 70 61 74 68 20 3f 6e 65 77 6c 69 6d 69 74  t path ?newlimit
38c0: 3f 22 7d 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74  ?"}}.+.+test int
38d0: 65 72 70 2d 32 39 2e 31 2e 34 20 7b 69 6e 74 65  erp-29.1.4 {inte
38e0: 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  rp recursionlimi
38f0: 74 20 61 72 67 75 6d 65 6e 74 20 63 68 65 63 6b  t argument check
3900: 69 6e 67 7d 20 7b 0a 2b 20 20 20 20 69 6e 74 65  ing} {.+    inte
3910: 72 70 20 63 72 65 61 74 65 20 6d 6f 6f 0a 2b 20  rp create moo.+ 
3920: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63     set result [c
3930: 61 74 63 68 20 7b 69 6e 74 65 72 70 20 72 65 63  atch {interp rec
3940: 75 72 73 69 6f 6e 6c 69 6d 69 74 20 6d 6f 6f 20  ursionlimit moo 
3950: 62 61 72 7d 20 6d 73 67 5d 0a 2b 20 20 20 20 69  bar} msg].+    i
3960: 6e 74 65 72 70 20 64 65 6c 65 74 65 20 6d 6f 6f  nterp delete moo
3970: 0a 2b 20 20 20 20 6c 69 73 74 20 24 72 65 73 75  .+    list $resu
3980: 6c 74 20 24 6d 73 67 0a 2b 7d 20 7b 31 20 7b 65  lt $msg.+} {1 {e
3990: 78 70 65 63 74 65 64 20 69 6e 74 65 67 65 72 20  xpected integer 
39a0: 62 75 74 20 67 6f 74 20 22 62 61 72 22 7d 7d 0a  but got "bar"}}.
39b0: 2b 0a 2b 74 65 73 74 20 69 6e 74 65 72 70 2d 32  +.+test interp-2
39c0: 39 2e 31 2e 35 20 7b 69 6e 74 65 72 70 20 72 65  9.1.5 {interp re
39d0: 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 61 72 67  cursionlimit arg
39e0: 75 6d 65 6e 74 20 63 68 65 63 6b 69 6e 67 7d 20  ument checking} 
39f0: 7b 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 63 72  {.+    interp cr
3a00: 65 61 74 65 20 6d 6f 6f 0a 2b 20 20 20 20 73 65  eate moo.+    se
3a10: 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  t result [catch 
3a20: 7b 69 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f  {interp recursio
3a30: 6e 6c 69 6d 69 74 20 6d 6f 6f 20 30 7d 20 6d 73  nlimit moo 0} ms
3a40: 67 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 64  g].+    interp d
3a50: 65 6c 65 74 65 20 6d 6f 6f 0a 2b 20 20 20 20 6c  elete moo.+    l
3a60: 69 73 74 20 24 72 65 73 75 6c 74 20 24 6d 73 67  ist $result $msg
3a70: 0a 2b 7d 20 7b 31 20 7b 72 65 63 75 72 73 69 6f  .+} {1 {recursio
3a80: 6e 20 6c 69 6d 69 74 20 6d 75 73 74 20 62 65 20  n limit must be 
3a90: 3e 20 30 7d 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e  > 0}}.+.+test in
3aa0: 74 65 72 70 2d 32 39 2e 31 2e 36 20 7b 69 6e 74  terp-29.1.6 {int
3ab0: 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d  erp recursionlim
3ac0: 69 74 20 61 72 67 75 6d 65 6e 74 20 63 68 65 63  it argument chec
3ad0: 6b 69 6e 67 7d 20 7b 0a 2b 20 20 20 20 69 6e 74  king} {.+    int
3ae0: 65 72 70 20 63 72 65 61 74 65 20 6d 6f 6f 0a 2b  erp create moo.+
3af0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
3b00: 63 61 74 63 68 20 7b 69 6e 74 65 72 70 20 72 65  catch {interp re
3b10: 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 6d 6f 6f  cursionlimit moo
3b20: 20 2d 31 7d 20 6d 73 67 5d 0a 2b 20 20 20 20 69   -1} msg].+    i
3b30: 6e 74 65 72 70 20 64 65 6c 65 74 65 20 6d 6f 6f  nterp delete moo
3b40: 0a 2b 20 20 20 20 6c 69 73 74 20 24 72 65 73 75  .+    list $resu
3b50: 6c 74 20 24 6d 73 67 0a 2b 7d 20 7b 31 20 7b 72  lt $msg.+} {1 {r
3b60: 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20 6d  ecursion limit m
3b70: 75 73 74 20 62 65 20 3e 20 30 7d 7d 0a 2b 0a 2b  ust be > 0}}.+.+
3b80: 74 65 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 31  test interp-29.1
3b90: 2e 37 20 7b 69 6e 74 65 72 70 20 72 65 63 75 72  .7 {interp recur
3ba0: 73 69 6f 6e 6c 69 6d 69 74 20 61 72 67 75 6d 65  sionlimit argume
3bb0: 6e 74 20 63 68 65 63 6b 69 6e 67 7d 20 7b 0a 2b  nt checking} {.+
3bc0: 20 20 20 20 69 6e 74 65 72 70 20 63 72 65 61 74      interp creat
3bd0: 65 20 6d 6f 6f 0a 2b 20 20 20 20 73 65 74 20 72  e moo.+    set r
3be0: 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 69 6e  esult [catch {in
3bf0: 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69  terp recursionli
3c00: 6d 69 74 20 6d 6f 6f 20 5b 65 78 70 72 20 7b 77  mit moo [expr {w
3c10: 69 64 65 28 31 29 3c 3c 33 32 7d 5d 7d 20 6d 73  ide(1)<<32}]} ms
3c20: 67 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 64  g].+    interp d
3c30: 65 6c 65 74 65 20 6d 6f 6f 0a 2b 20 20 20 20 6c  elete moo.+    l
3c40: 69 73 74 20 24 72 65 73 75 6c 74 20 5b 73 74 72  ist $result [str
3c50: 69 6e 67 20 72 61 6e 67 65 20 24 6d 73 67 20 30  ing range $msg 0
3c60: 20 33 35 5d 0a 2b 7d 20 7b 31 20 7b 69 6e 74 65   35].+} {1 {inte
3c70: 67 65 72 20 76 61 6c 75 65 20 74 6f 6f 20 6c 61  ger value too la
3c80: 72 67 65 20 74 6f 20 72 65 70 72 65 73 65 6e 74  rge to represent
3c90: 7d 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74 65 72  }}.+.+test inter
3ca0: 70 2d 32 39 2e 31 2e 38 20 7b 73 6c 61 76 65 20  p-29.1.8 {slave 
3cb0: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 61  recursionlimit a
3cc0: 72 67 75 6d 65 6e 74 20 63 68 65 63 6b 69 6e 67  rgument checking
3cd0: 7d 20 7b 0a 2b 20 20 20 20 69 6e 74 65 72 70 20  } {.+    interp 
3ce0: 63 72 65 61 74 65 20 6d 6f 6f 0a 2b 20 20 20 20  create moo.+    
3cf0: 73 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63  set result [catc
3d00: 68 20 7b 6d 6f 6f 20 72 65 63 75 72 73 69 6f 6e  h {moo recursion
3d10: 6c 69 6d 69 74 20 66 6f 6f 20 62 61 72 7d 20 6d  limit foo bar} m
3d20: 73 67 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20  sg].+    interp 
3d30: 64 65 6c 65 74 65 20 6d 6f 6f 0a 2b 20 20 20 20  delete moo.+    
3d40: 6c 69 73 74 20 24 72 65 73 75 6c 74 20 24 6d 73  list $result $ms
3d50: 67 0a 2b 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 23  g.+} {1 {wrong #
3d60: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
3d70: 20 22 6d 6f 6f 20 72 65 63 75 72 73 69 6f 6e 6c   "moo recursionl
3d80: 69 6d 69 74 20 3f 6e 65 77 6c 69 6d 69 74 3f 22  imit ?newlimit?"
3d90: 7d 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74 65 72  }}.+.+test inter
3da0: 70 2d 32 39 2e 31 2e 39 20 7b 73 6c 61 76 65 20  p-29.1.9 {slave 
3db0: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 61  recursionlimit a
3dc0: 72 67 75 6d 65 6e 74 20 63 68 65 63 6b 69 6e 67  rgument checking
3dd0: 7d 20 7b 0a 2b 20 20 20 20 69 6e 74 65 72 70 20  } {.+    interp 
3de0: 63 72 65 61 74 65 20 6d 6f 6f 0a 2b 20 20 20 20  create moo.+    
3df0: 73 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63  set result [catc
3e00: 68 20 7b 6d 6f 6f 20 72 65 63 75 72 73 69 6f 6e  h {moo recursion
3e10: 6c 69 6d 69 74 20 66 6f 6f 7d 20 6d 73 67 5d 0a  limit foo} msg].
3e20: 2b 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65  +    interp dele
3e30: 74 65 20 6d 6f 6f 0a 2b 20 20 20 20 6c 69 73 74  te moo.+    list
3e40: 20 24 72 65 73 75 6c 74 20 24 6d 73 67 0a 2b 7d   $result $msg.+}
3e50: 20 7b 31 20 7b 65 78 70 65 63 74 65 64 20 69 6e   {1 {expected in
3e60: 74 65 67 65 72 20 62 75 74 20 67 6f 74 20 22 66  teger but got "f
3e70: 6f 6f 22 7d 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e  oo"}}.+.+test in
3e80: 74 65 72 70 2d 32 39 2e 31 2e 31 30 20 7b 73 6c  terp-29.1.10 {sl
3e90: 61 76 65 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d  ave recursionlim
3ea0: 69 74 20 61 72 67 75 6d 65 6e 74 20 63 68 65 63  it argument chec
3eb0: 6b 69 6e 67 7d 20 7b 0a 2b 20 20 20 20 69 6e 74  king} {.+    int
3ec0: 65 72 70 20 63 72 65 61 74 65 20 6d 6f 6f 0a 2b  erp create moo.+
3ed0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
3ee0: 63 61 74 63 68 20 7b 6d 6f 6f 20 72 65 63 75 72  catch {moo recur
3ef0: 73 69 6f 6e 6c 69 6d 69 74 20 30 7d 20 6d 73 67  sionlimit 0} msg
3f00: 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 64 65  ].+    interp de
3f10: 6c 65 74 65 20 6d 6f 6f 0a 2b 20 20 20 20 6c 69  lete moo.+    li
3f20: 73 74 20 24 72 65 73 75 6c 74 20 24 6d 73 67 0a  st $result $msg.
3f30: 2b 7d 20 7b 31 20 7b 72 65 63 75 72 73 69 6f 6e  +} {1 {recursion
3f40: 20 6c 69 6d 69 74 20 6d 75 73 74 20 62 65 20 3e   limit must be >
3f50: 20 30 7d 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74   0}}.+.+test int
3f60: 65 72 70 2d 32 39 2e 31 2e 31 31 20 7b 73 6c 61  erp-29.1.11 {sla
3f70: 76 65 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  ve recursionlimi
3f80: 74 20 61 72 67 75 6d 65 6e 74 20 63 68 65 63 6b  t argument check
3f90: 69 6e 67 7d 20 7b 0a 2b 20 20 20 20 69 6e 74 65  ing} {.+    inte
3fa0: 72 70 20 63 72 65 61 74 65 20 6d 6f 6f 0a 2b 20  rp create moo.+ 
3fb0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63     set result [c
3fc0: 61 74 63 68 20 7b 6d 6f 6f 20 72 65 63 75 72 73  atch {moo recurs
3fd0: 69 6f 6e 6c 69 6d 69 74 20 2d 31 7d 20 6d 73 67  ionlimit -1} msg
3fe0: 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 64 65  ].+    interp de
3ff0: 6c 65 74 65 20 6d 6f 6f 0a 2b 20 20 20 20 6c 69  lete moo.+    li
4000: 73 74 20 24 72 65 73 75 6c 74 20 24 6d 73 67 0a  st $result $msg.
4010: 2b 7d 20 7b 31 20 7b 72 65 63 75 72 73 69 6f 6e  +} {1 {recursion
4020: 20 6c 69 6d 69 74 20 6d 75 73 74 20 62 65 20 3e   limit must be >
4030: 20 30 7d 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74   0}}.+.+test int
4040: 65 72 70 2d 32 39 2e 31 2e 31 32 20 7b 73 6c 61  erp-29.1.12 {sla
4050: 76 65 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  ve recursionlimi
4060: 74 20 61 72 67 75 6d 65 6e 74 20 63 68 65 63 6b  t argument check
4070: 69 6e 67 7d 20 7b 0a 2b 20 20 20 20 69 6e 74 65  ing} {.+    inte
4080: 72 70 20 63 72 65 61 74 65 20 6d 6f 6f 0a 2b 20  rp create moo.+ 
4090: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63     set result [c
40a0: 61 74 63 68 20 7b 6d 6f 6f 20 72 65 63 75 72 73  atch {moo recurs
40b0: 69 6f 6e 6c 69 6d 69 74 20 5b 65 78 70 72 20 7b  ionlimit [expr {
40c0: 77 69 64 65 28 31 29 3c 3c 33 32 7d 5d 7d 20 6d  wide(1)<<32}]} m
40d0: 73 67 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20  sg].+    interp 
40e0: 64 65 6c 65 74 65 20 6d 6f 6f 0a 2b 20 20 20 20  delete moo.+    
40f0: 6c 69 73 74 20 24 72 65 73 75 6c 74 20 5b 73 74  list $result [st
4100: 72 69 6e 67 20 72 61 6e 67 65 20 24 6d 73 67 20  ring range $msg 
4110: 30 20 33 35 5d 0a 2b 7d 20 7b 31 20 7b 69 6e 74  0 35].+} {1 {int
4120: 65 67 65 72 20 76 61 6c 75 65 20 74 6f 6f 20 6c  eger value too l
4130: 61 72 67 65 20 74 6f 20 72 65 70 72 65 73 65 6e  arge to represen
4140: 74 7d 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74 65  t}}.+.+test inte
4150: 72 70 2d 32 39 2e 32 2e 31 20 7b 71 75 65 72 79  rp-29.2.1 {query
4160: 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74   recursion limit
4170: 7d 20 7b 0a 2b 20 20 20 20 69 6e 74 65 72 70 20  } {.+    interp 
4180: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 7b  recursionlimit {
4190: 7d 0a 2b 7d 20 31 30 30 30 0a 2b 0a 2b 74 65 73  }.+} 1000.+.+tes
41a0: 74 20 69 6e 74 65 72 70 2d 32 39 2e 32 2e 32 20  t interp-29.2.2 
41b0: 7b 71 75 65 72 79 20 72 65 63 75 72 73 69 6f 6e  {query recursion
41c0: 20 6c 69 6d 69 74 7d 20 7b 0a 2b 20 20 20 20 73   limit} {.+    s
41d0: 65 74 20 69 20 5b 69 6e 74 65 72 70 20 63 72 65  et i [interp cre
41e0: 61 74 65 5d 0a 2b 20 20 20 20 73 65 74 20 6e 20  ate].+    set n 
41f0: 5b 69 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f  [interp recursio
4200: 6e 6c 69 6d 69 74 20 24 69 5d 0a 2b 20 20 20 20  nlimit $i].+    
4210: 69 6e 74 65 72 70 20 64 65 6c 65 74 65 20 24 69  interp delete $i
4220: 0a 2b 20 20 20 20 73 65 74 20 6e 0a 2b 7d 20 31  .+    set n.+} 1
4230: 30 30 30 0a 2b 0a 2b 74 65 73 74 20 69 6e 74 65  000.+.+test inte
4240: 72 70 2d 32 39 2e 32 2e 33 20 7b 71 75 65 72 79  rp-29.2.3 {query
4250: 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74   recursion limit
4260: 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 69 20 5b  } {.+    set i [
4270: 69 6e 74 65 72 70 20 63 72 65 61 74 65 5d 0a 2b  interp create].+
4280: 20 20 20 20 73 65 74 20 6e 20 5b 24 69 20 72 65      set n [$i re
4290: 63 75 72 73 69 6f 6e 6c 69 6d 69 74 5d 0a 2b 20  cursionlimit].+ 
42a0: 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65     interp delete
42b0: 20 24 69 0a 2b 20 20 20 20 73 65 74 20 6e 0a 2b   $i.+    set n.+
42c0: 7d 20 31 30 30 30 0a 2b 0a 2b 74 65 73 74 20 69  } 1000.+.+test i
42d0: 6e 74 65 72 70 2d 32 39 2e 32 2e 34 20 7b 71 75  nterp-29.2.4 {qu
42e0: 65 72 79 20 72 65 63 75 72 73 69 6f 6e 20 6c 69  ery recursion li
42f0: 6d 69 74 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20  mit} {.+    set 
4300: 69 20 5b 69 6e 74 65 72 70 20 63 72 65 61 74 65  i [interp create
4310: 5d 0a 2b 20 20 20 20 73 65 74 20 72 20 5b 24 69  ].+    set r [$i
4320: 20 65 76 61 6c 20 7b 0a 2b 09 73 65 74 20 6e 31   eval {.+.set n1
4330: 20 5b 69 6e 74 65 72 70 20 72 65 63 75 72 73 69   [interp recursi
4340: 6f 6e 6c 69 6d 69 74 20 7b 7d 20 34 32 5d 0a 2b  onlimit {} 42].+
4350: 09 73 65 74 20 6e 32 20 5b 69 6e 74 65 72 70 20  .set n2 [interp 
4360: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 7b  recursionlimit {
4370: 7d 5d 0a 2b 09 6c 69 73 74 20 24 6e 31 20 24 6e  }].+.list $n1 $n
4380: 32 0a 2b 20 20 20 20 7d 5d 0a 2b 20 20 20 20 69  2.+    }].+    i
4390: 6e 74 65 72 70 20 64 65 6c 65 74 65 20 24 69 0a  nterp delete $i.
43a0: 2b 20 20 20 20 73 65 74 20 72 0a 2b 7d 20 7b 34  +    set r.+} {4
43b0: 32 20 34 32 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e  2 42}.+.+test in
43c0: 74 65 72 70 2d 32 39 2e 32 2e 35 20 7b 71 75 65  terp-29.2.5 {que
43d0: 72 79 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d  ry recursion lim
43e0: 69 74 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 69  it} {.+    set i
43f0: 20 5b 69 6e 74 65 72 70 20 63 72 65 61 74 65 5d   [interp create]
4400: 0a 2b 20 20 20 20 73 65 74 20 6e 31 20 5b 69 6e  .+    set n1 [in
4410: 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69  terp recursionli
4420: 6d 69 74 20 24 69 20 34 32 5d 0a 2b 20 20 20 20  mit $i 42].+    
4430: 73 65 74 20 6e 32 20 5b 69 6e 74 65 72 70 20 72  set n2 [interp r
4440: 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 24 69  ecursionlimit $i
4450: 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 64 65  ].+    interp de
4460: 6c 65 74 65 20 24 69 0a 2b 20 20 20 20 6c 69 73  lete $i.+    lis
4470: 74 20 24 6e 31 20 24 6e 32 0a 2b 7d 20 7b 34 32  t $n1 $n2.+} {42
4480: 20 34 32 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74   42}.+.+test int
4490: 65 72 70 2d 32 39 2e 32 2e 36 20 7b 71 75 65 72  erp-29.2.6 {quer
44a0: 79 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69  y recursion limi
44b0: 74 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 69 20  t} {.+    set i 
44c0: 5b 69 6e 74 65 72 70 20 63 72 65 61 74 65 5d 0a  [interp create].
44d0: 2b 20 20 20 20 73 65 74 20 6e 31 20 5b 69 6e 74  +    set n1 [int
44e0: 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d  erp recursionlim
44f0: 69 74 20 24 69 20 34 32 5d 0a 2b 20 20 20 20 73  it $i 42].+    s
4500: 65 74 20 6e 32 20 5b 24 69 20 72 65 63 75 72 73  et n2 [$i recurs
4510: 69 6f 6e 6c 69 6d 69 74 5d 0a 2b 20 20 20 20 69  ionlimit].+    i
4520: 6e 74 65 72 70 20 64 65 6c 65 74 65 20 24 69 0a  nterp delete $i.
4530: 2b 20 20 20 20 6c 69 73 74 20 24 6e 31 20 24 6e  +    list $n1 $n
4540: 32 0a 2b 7d 20 7b 34 32 20 34 32 7d 0a 2b 0a 2b  2.+} {42 42}.+.+
4550: 74 65 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 32  test interp-29.2
4560: 2e 37 20 7b 71 75 65 72 79 20 72 65 63 75 72 73  .7 {query recurs
4570: 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b 0a 2b 20 20  ion limit} {.+  
4580: 20 20 73 65 74 20 69 20 5b 69 6e 74 65 72 70 20    set i [interp 
4590: 63 72 65 61 74 65 5d 0a 2b 20 20 20 20 73 65 74  create].+    set
45a0: 20 6e 31 20 5b 24 69 20 72 65 63 75 72 73 69 6f   n1 [$i recursio
45b0: 6e 6c 69 6d 69 74 20 34 32 5d 0a 2b 20 20 20 20  nlimit 42].+    
45c0: 73 65 74 20 6e 32 20 5b 69 6e 74 65 72 70 20 72  set n2 [interp r
45d0: 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 24 69  ecursionlimit $i
45e0: 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 64 65  ].+    interp de
45f0: 6c 65 74 65 20 24 69 0a 2b 20 20 20 20 6c 69 73  lete $i.+    lis
4600: 74 20 24 6e 31 20 24 6e 32 0a 2b 7d 20 7b 34 32  t $n1 $n2.+} {42
4610: 20 34 32 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74   42}.+.+test int
4620: 65 72 70 2d 32 39 2e 32 2e 38 20 7b 71 75 65 72  erp-29.2.8 {quer
4630: 79 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69  y recursion limi
4640: 74 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 69 20  t} {.+    set i 
4650: 5b 69 6e 74 65 72 70 20 63 72 65 61 74 65 5d 0a  [interp create].
4660: 2b 20 20 20 20 73 65 74 20 6e 31 20 5b 24 69 20  +    set n1 [$i 
4670: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 34  recursionlimit 4
4680: 32 5d 0a 2b 20 20 20 20 73 65 74 20 6e 32 20 5b  2].+    set n2 [
4690: 24 69 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  $i recursionlimi
46a0: 74 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 64  t].+    interp d
46b0: 65 6c 65 74 65 20 24 69 0a 2b 20 20 20 20 6c 69  elete $i.+    li
46c0: 73 74 20 24 6e 31 20 24 6e 32 0a 2b 7d 20 7b 34  st $n1 $n2.+} {4
46d0: 32 20 34 32 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e  2 42}.+.+test in
46e0: 74 65 72 70 2d 32 39 2e 33 2e 31 20 7b 72 65 63  terp-29.3.1 {rec
46f0: 75 72 73 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b 0a  ursion limit} {.
4700: 20 20 20 20 20 73 65 74 20 69 20 5b 69 6e 74 65       set i [inte
4710: 72 70 20 63 72 65 61 74 65 5d 0a 2d 20 20 20 20  rp create].-    
4720: 6c 6f 61 64 20 7b 7d 20 54 63 6c 74 65 73 74 20  load {} Tcltest 
4730: 24 69 0a 20 20 20 20 20 73 65 74 20 72 20 5b 69  $i.     set r [i
4740: 6e 74 65 72 70 20 65 76 61 6c 20 24 69 20 7b 0a  nterp eval $i {.
4750: 2d 09 74 65 73 74 73 65 74 72 65 63 75 72 73 69  -.testsetrecursi
4760: 6f 6e 6c 69 6d 69 74 20 35 30 0a 2b 09 69 6e 74  onlimit 50.+.int
4770: 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d  erp recursionlim
4780: 69 74 20 7b 7d 20 35 30 0a 20 09 70 72 6f 63 20  it {} 50. .proc 
4790: 70 20 7b 7d 20 7b 69 6e 63 72 20 3a 3a 69 3b 20  p {} {incr ::i; 
47a0: 70 7d 0a 20 09 73 65 74 20 69 20 30 0a 2d 09 63  p}. .set i 0.-.c
47b0: 61 74 63 68 20 70 0a 2d 09 73 65 74 20 69 0a 2b  atch p.-.set i.+
47c0: 09 6c 69 73 74 20 5b 63 61 74 63 68 20 70 20 6d  .list [catch p m
47d0: 73 67 5d 20 24 6d 73 67 20 24 69 0a 2b 20 20 20  sg] $msg $i.+   
47e0: 20 7d 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20   }].+    interp 
47f0: 64 65 6c 65 74 65 20 24 69 0a 2b 20 20 20 20 73  delete $i.+    s
4800: 65 74 20 72 0a 2b 7d 20 7b 31 20 7b 74 6f 6f 20  et r.+} {1 {too 
4810: 6d 61 6e 79 20 6e 65 73 74 65 64 20 63 61 6c 6c  many nested call
4820: 73 20 74 6f 20 54 63 6c 5f 45 76 61 6c 20 28 69  s to Tcl_Eval (i
4830: 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 3f 29 7d 20  nfinite loop?)} 
4840: 34 38 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74 65  48}.+.+test inte
4850: 72 70 2d 32 39 2e 33 2e 32 20 7b 72 65 63 75 72  rp-29.3.2 {recur
4860: 73 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b 0a 2b 20  sion limit} {.+ 
4870: 20 20 20 73 65 74 20 69 20 5b 69 6e 74 65 72 70     set i [interp
4880: 20 63 72 65 61 74 65 5d 0a 2b 20 20 20 20 69 6e   create].+    in
4890: 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69  terp recursionli
48a0: 6d 69 74 20 24 69 20 35 30 0a 2b 20 20 20 20 73  mit $i 50.+    s
48b0: 65 74 20 72 20 5b 69 6e 74 65 72 70 20 65 76 61  et r [interp eva
48c0: 6c 20 24 69 20 7b 0a 2b 09 70 72 6f 63 20 70 20  l $i {.+.proc p 
48d0: 7b 7d 20 7b 69 6e 63 72 20 3a 3a 69 3b 20 70 7d  {} {incr ::i; p}
48e0: 0a 2b 09 73 65 74 20 69 20 30 0a 2b 09 6c 69 73  .+.set i 0.+.lis
48f0: 74 20 5b 63 61 74 63 68 20 70 20 6d 73 67 5d 20  t [catch p msg] 
4900: 24 6d 73 67 20 24 69 0a 20 20 20 20 20 7d 5d 0a  $msg $i.     }].
4910: 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74      interp delet
4920: 65 20 24 69 0a 20 20 20 20 73 65 74 20 72 0a 2d  e $i.    set r.-
4930: 7d 20 34 39 0a 2b 7d 20 7b 31 20 7b 74 6f 6f 20  } 49.+} {1 {too 
4940: 6d 61 6e 79 20 6e 65 73 74 65 64 20 63 61 6c 6c  many nested call
4950: 73 20 74 6f 20 54 63 6c 5f 45 76 61 6c 20 28 69  s to Tcl_Eval (i
4960: 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 3f 29 7d 20  nfinite loop?)} 
4970: 34 38 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74 65  48}.+.+test inte
4980: 72 70 2d 32 39 2e 33 2e 33 20 7b 72 65 63 75 72  rp-29.3.3 {recur
4990: 73 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b 0a 2b 20  sion limit} {.+ 
49a0: 20 20 20 73 65 74 20 69 20 5b 69 6e 74 65 72 70     set i [interp
49b0: 20 63 72 65 61 74 65 5d 0a 2b 20 20 20 20 24 69   create].+    $i
49c0: 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20   recursionlimit 
49d0: 35 30 0a 2b 20 20 20 20 73 65 74 20 72 20 5b 69  50.+    set r [i
49e0: 6e 74 65 72 70 20 65 76 61 6c 20 24 69 20 7b 0a  nterp eval $i {.
49f0: 2b 09 70 72 6f 63 20 70 20 7b 7d 20 7b 69 6e 63  +.proc p {} {inc
4a00: 72 20 3a 3a 69 3b 20 70 7d 0a 2b 09 73 65 74 20  r ::i; p}.+.set 
4a10: 69 20 30 0a 2b 09 6c 69 73 74 20 5b 63 61 74 63  i 0.+.list [catc
4a20: 68 20 70 20 6d 73 67 5d 20 24 6d 73 67 20 24 69  h p msg] $msg $i
4a30: 0a 2b 20 20 20 20 7d 5d 0a 2b 20 20 20 69 6e 74  .+    }].+   int
4a40: 65 72 70 20 64 65 6c 65 74 65 20 24 69 0a 2b 20  erp delete $i.+ 
4a50: 20 20 73 65 74 20 72 0a 2b 7d 20 7b 31 20 7b 74    set r.+} {1 {t
4a60: 6f 6f 20 6d 61 6e 79 20 6e 65 73 74 65 64 20 63  oo many nested c
4a70: 61 6c 6c 73 20 74 6f 20 54 63 6c 5f 45 76 61 6c  alls to Tcl_Eval
4a80: 20 28 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 3f   (infinite loop?
4a90: 29 7d 20 34 38 7d 0a 2b 0a 2b 74 65 73 74 20 69  )} 48}.+.+test i
4aa0: 6e 74 65 72 70 2d 32 39 2e 33 2e 34 20 7b 72 65  nterp-29.3.4 {re
4ab0: 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20 65 72  cursion limit er
4ac0: 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 7d 20 7b  ror reporting} {
4ad0: 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 63 72 65  .+    interp cre
4ae0: 61 74 65 20 73 6c 61 76 65 0a 2b 20 20 20 20 73  ate slave.+    s
4af0: 65 74 20 72 31 20 5b 73 6c 61 76 65 20 65 76 61  et r1 [slave eva
4b00: 6c 20 7b 0a 2b 20 20 20 20 20 20 20 20 63 61 74  l {.+        cat
4b10: 63 68 20 7b 20 09 09 23 20 6e 65 73 74 69 6e 67  ch { ..# nesting
4b20: 20 6c 65 76 65 6c 20 31 0a 2b 09 20 20 20 20 65   level 1.+.    e
4b30: 76 61 6c 20 7b 09 09 23 20 32 0a 2b 09 20 20 20  val {..# 2.+.   
4b40: 20 20 20 20 20 65 76 61 6c 20 7b 09 09 23 20 33       eval {..# 3
4b50: 0a 2b 09 09 20 20 20 20 65 76 61 6c 20 7b 09 23  .+..    eval {.#
4b60: 20 34 0a 2b 09 09 20 20 20 20 20 20 20 20 65 76   4.+..        ev
4b70: 61 6c 20 7b 09 23 20 35 0a 2b 09 09 09 20 20 20  al {.# 5.+...   
4b80: 20 20 69 6e 74 65 72 70 20 72 65 63 75 72 73 69    interp recursi
4b90: 6f 6e 6c 69 6d 69 74 20 7b 7d 20 35 0a 2b 09 09  onlimit {} 5.+..
4ba0: 09 20 20 20 20 20 73 65 74 20 78 20 6f 6b 0a 2b  .     set x ok.+
4bb0: 09 09 09 7d 0a 2b 09 09 20 20 20 20 7d 0a 2b 09  ...}.+..    }.+.
4bc0: 09 7d 0a 2b 09 20 20 20 20 7d 0a 2b 09 7d 20 6d  .}.+.    }.+.} m
4bd0: 73 67 0a 2b 20 20 20 20 7d 5d 0a 2b 20 20 20 20  sg.+    }].+    
4be0: 73 65 74 20 72 32 20 5b 73 6c 61 76 65 20 65 76  set r2 [slave ev
4bf0: 61 6c 20 7b 20 73 65 74 20 6d 73 67 20 7d 5d 0a  al { set msg }].
4c00: 2b 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65  +    interp dele
4c10: 74 65 20 73 6c 61 76 65 0a 2b 20 20 20 20 6c 69  te slave.+    li
4c20: 73 74 20 24 72 31 20 24 72 32 0a 2b 7d 20 7b 31  st $r1 $r2.+} {1
4c30: 20 7b 66 61 6c 6c 69 6e 67 20 62 61 63 6b 20 64   {falling back d
4c40: 75 65 20 74 6f 20 6e 65 77 20 72 65 63 75 72 73  ue to new recurs
4c50: 69 6f 6e 20 6c 69 6d 69 74 7d 7d 0a 2b 0a 2b 74  ion limit}}.+.+t
4c60: 65 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 33 2e  est interp-29.3.
4c70: 35 20 7b 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d  5 {recursion lim
4c80: 69 74 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69  it error reporti
4c90: 6e 67 7d 20 7b 0a 2b 20 20 20 20 69 6e 74 65 72  ng} {.+    inter
4ca0: 70 20 63 72 65 61 74 65 20 73 6c 61 76 65 0a 2b  p create slave.+
4cb0: 20 20 20 20 73 65 74 20 72 31 20 5b 73 6c 61 76      set r1 [slav
4cc0: 65 20 65 76 61 6c 20 7b 0a 2b 20 20 20 20 20 20  e eval {.+      
4cd0: 20 20 63 61 74 63 68 20 7b 09 09 09 23 20 6e 65    catch {...# ne
4ce0: 73 74 69 6e 67 20 6c 65 76 65 6c 20 31 0a 2b 09  sting level 1.+.
4cf0: 20 20 20 20 65 76 61 6c 20 7b 09 09 23 20 32 0a      eval {..# 2.
4d00: 2b 09 20 20 20 20 20 20 20 20 65 76 61 6c 20 7b  +.        eval {
4d10: 09 09 23 20 33 0a 2b 09 09 20 20 20 20 65 76 61  ..# 3.+..    eva
4d20: 6c 20 7b 09 23 20 34 0a 2b 09 09 20 20 20 20 20  l {.# 4.+..     
4d30: 20 20 20 65 76 61 6c 20 7b 09 23 20 35 0a 2b 09     eval {.# 5.+.
4d40: 09 09 20 20 20 20 69 6e 74 65 72 70 20 72 65 63  ..    interp rec
4d50: 75 72 73 69 6f 6e 6c 69 6d 69 74 20 7b 7d 20 34  ursionlimit {} 4
4d60: 0a 2b 09 09 09 20 20 20 20 73 65 74 20 78 20 6f  .+...    set x o
4d70: 6b 0a 2b 09 09 09 7d 0a 2b 09 09 20 20 20 20 7d  k.+...}.+..    }
4d80: 0a 2b 09 09 7d 0a 2b 09 20 20 20 20 7d 0a 2b 09  .+..}.+.    }.+.
4d90: 7d 20 6d 73 67 0a 2b 20 20 20 20 7d 5d 0a 2b 20  } msg.+    }].+ 
4da0: 20 20 20 73 65 74 20 72 32 20 5b 73 6c 61 76 65     set r2 [slave
4db0: 20 65 76 61 6c 20 7b 20 73 65 74 20 6d 73 67 20   eval { set msg 
4dc0: 7d 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 64  }].+    interp d
4dd0: 65 6c 65 74 65 20 73 6c 61 76 65 0a 2b 20 20 20  elete slave.+   
4de0: 20 6c 69 73 74 20 24 72 31 20 24 72 32 0a 2b 7d   list $r1 $r2.+}
4df0: 20 7b 31 20 7b 66 61 6c 6c 69 6e 67 20 62 61 63   {1 {falling bac
4e00: 6b 20 64 75 65 20 74 6f 20 6e 65 77 20 72 65 63  k due to new rec
4e10: 75 72 73 69 6f 6e 20 6c 69 6d 69 74 7d 7d 0a 2b  ursion limit}}.+
4e20: 0a 2b 74 65 73 74 20 69 6e 74 65 72 70 2d 32 39  .+test interp-29
4e30: 2e 33 2e 36 20 7b 72 65 63 75 72 73 69 6f 6e 20  .3.6 {recursion 
4e40: 6c 69 6d 69 74 20 65 72 72 6f 72 20 72 65 70 6f  limit error repo
4e50: 72 74 69 6e 67 7d 20 7b 0a 2b 20 20 20 20 69 6e  rting} {.+    in
4e60: 74 65 72 70 20 63 72 65 61 74 65 20 73 6c 61 76  terp create slav
4e70: 65 0a 2b 20 20 20 20 73 65 74 20 72 31 20 5b 73  e.+    set r1 [s
4e80: 6c 61 76 65 20 65 76 61 6c 20 7b 0a 2b 20 20 20  lave eval {.+   
4e90: 20 20 20 20 20 63 61 74 63 68 20 7b 09 09 09 23       catch {...#
4ea0: 20 6e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 31   nesting level 1
4eb0: 0a 2b 09 20 20 20 20 65 76 61 6c 20 7b 09 09 23  .+.    eval {..#
4ec0: 20 32 0a 2b 09 20 20 20 20 20 20 20 20 65 76 61   2.+.        eva
4ed0: 6c 20 7b 09 09 23 20 33 0a 2b 09 09 20 20 20 20  l {..# 3.+..    
4ee0: 65 76 61 6c 20 7b 09 23 20 34 0a 2b 09 09 20 20  eval {.# 4.+..  
4ef0: 20 20 20 20 20 20 65 76 61 6c 20 7b 09 23 20 35        eval {.# 5
4f00: 0a 2b 09 09 09 20 20 20 20 69 6e 74 65 72 70 20  .+...    interp 
4f10: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 7b  recursionlimit {
4f20: 7d 20 36 0a 2b 09 09 09 20 20 20 20 73 65 74 20  } 6.+...    set 
4f30: 78 20 6f 6b 0a 2b 09 09 09 7d 0a 2b 09 09 20 20  x ok.+...}.+..  
4f40: 20 20 7d 0a 2b 09 09 7d 0a 2b 09 20 20 20 20 7d    }.+..}.+.    }
4f50: 0a 2b 09 7d 20 6d 73 67 0a 2b 20 20 20 20 7d 5d  .+.} msg.+    }]
4f60: 0a 2b 20 20 20 20 73 65 74 20 72 32 20 5b 73 6c  .+    set r2 [sl
4f70: 61 76 65 20 65 76 61 6c 20 7b 20 73 65 74 20 6d  ave eval { set m
4f80: 73 67 20 7d 5d 0a 2b 20 20 20 20 69 6e 74 65 72  sg }].+    inter
4f90: 70 20 64 65 6c 65 74 65 20 73 6c 61 76 65 0a 2b  p delete slave.+
4fa0: 20 20 20 20 6c 69 73 74 20 24 72 31 20 24 72 32      list $r1 $r2
4fb0: 0a 2b 7d 20 7b 30 20 6f 6b 7d 0a 2b 0a 2b 74 65  .+} {0 ok}.+.+te
4fc0: 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 33 2e 37  st interp-29.3.7
4fd0: 20 7b 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69   {recursion limi
4fe0: 74 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69 6e  t error reportin
4ff0: 67 7d 20 7b 0a 2b 20 20 20 20 69 6e 74 65 72 70  g} {.+    interp
5000: 20 63 72 65 61 74 65 20 73 6c 61 76 65 0a 2b 20   create slave.+ 
5010: 20 20 20 61 66 74 65 72 20 30 20 7b 69 6e 74 65     after 0 {inte
5020: 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  rp recursionlimi
5030: 74 20 73 6c 61 76 65 20 35 7d 0a 2b 20 20 20 20  t slave 5}.+    
5040: 73 65 74 20 72 31 20 5b 73 6c 61 76 65 20 65 76  set r1 [slave ev
5050: 61 6c 20 7b 0a 2b 20 20 20 20 20 20 20 20 63 61  al {.+        ca
5060: 74 63 68 20 7b 20 09 09 23 20 6e 65 73 74 69 6e  tch { ..# nestin
5070: 67 20 6c 65 76 65 6c 20 31 0a 2b 09 20 20 20 20  g level 1.+.    
5080: 65 76 61 6c 20 7b 09 09 23 20 32 0a 2b 09 20 20  eval {..# 2.+.  
5090: 20 20 20 20 20 20 65 76 61 6c 20 7b 09 09 23 20        eval {..# 
50a0: 33 0a 2b 09 09 20 20 20 20 65 76 61 6c 20 7b 09  3.+..    eval {.
50b0: 23 20 34 0a 2b 09 09 20 20 20 20 20 20 20 20 65  # 4.+..        e
50c0: 76 61 6c 20 7b 09 23 20 35 0a 2b 09 09 09 20 20  val {.# 5.+...  
50d0: 20 20 20 75 70 64 61 74 65 0a 2b 09 09 09 20 20     update.+...  
50e0: 20 20 20 73 65 74 20 78 20 6f 6b 0a 2b 09 09 09     set x ok.+...
50f0: 7d 0a 2b 09 09 20 20 20 20 7d 0a 2b 09 09 7d 0a  }.+..    }.+..}.
5100: 2b 09 20 20 20 20 7d 0a 2b 09 7d 20 6d 73 67 0a  +.    }.+.} msg.
5110: 2b 20 20 20 20 7d 5d 0a 2b 20 20 20 20 73 65 74  +    }].+    set
5120: 20 72 32 20 5b 73 6c 61 76 65 20 65 76 61 6c 20   r2 [slave eval 
5130: 7b 20 73 65 74 20 6d 73 67 20 7d 5d 0a 2b 20 20  { set msg }].+  
5140: 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65 20    interp delete 
5150: 73 6c 61 76 65 0a 2b 20 20 20 20 6c 69 73 74 20  slave.+    list 
5160: 24 72 31 20 24 72 32 0a 2b 7d 20 7b 31 20 7b 74  $r1 $r2.+} {1 {t
5170: 6f 6f 20 6d 61 6e 79 20 6e 65 73 74 65 64 20 63  oo many nested c
5180: 61 6c 6c 73 20 74 6f 20 54 63 6c 5f 45 76 61 6c  alls to Tcl_Eval
5190: 20 28 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 3f   (infinite loop?
51a0: 29 7d 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74 65  )}}.+.+test inte
51b0: 72 70 2d 32 39 2e 33 2e 38 20 7b 72 65 63 75 72  rp-29.3.8 {recur
51c0: 73 69 6f 6e 20 6c 69 6d 69 74 20 65 72 72 6f 72  sion limit error
51d0: 20 72 65 70 6f 72 74 69 6e 67 7d 20 7b 0a 2b 20   reporting} {.+ 
51e0: 20 20 20 69 6e 74 65 72 70 20 63 72 65 61 74 65     interp create
51f0: 20 73 6c 61 76 65 0a 2b 20 20 20 20 61 66 74 65   slave.+    afte
5200: 72 20 30 20 7b 69 6e 74 65 72 70 20 72 65 63 75  r 0 {interp recu
5210: 72 73 69 6f 6e 6c 69 6d 69 74 20 73 6c 61 76 65  rsionlimit slave
5220: 20 34 7d 0a 2b 20 20 20 20 73 65 74 20 72 31 20   4}.+    set r1 
5230: 5b 73 6c 61 76 65 20 65 76 61 6c 20 7b 0a 2b 20  [slave eval {.+ 
5240: 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 20 09         catch { .
5250: 09 23 20 6e 65 73 74 69 6e 67 20 6c 65 76 65 6c  .# nesting level
5260: 20 31 0a 2b 09 20 20 20 20 65 76 61 6c 20 7b 09   1.+.    eval {.
5270: 09 23 20 32 0a 2b 09 20 20 20 20 20 20 20 20 65  .# 2.+.        e
5280: 76 61 6c 20 7b 09 09 23 20 33 0a 2b 09 09 20 20  val {..# 3.+..  
5290: 20 20 65 76 61 6c 20 7b 09 23 20 34 0a 2b 09 09    eval {.# 4.+..
52a0: 20 20 20 20 20 20 20 20 65 76 61 6c 20 7b 09 23          eval {.#
52b0: 20 35 0a 2b 09 09 09 20 20 20 20 20 75 70 64 61   5.+...     upda
52c0: 74 65 0a 2b 09 09 09 20 20 20 20 20 73 65 74 20  te.+...     set 
52d0: 78 20 6f 6b 0a 2b 09 09 09 7d 0a 2b 09 09 20 20  x ok.+...}.+..  
52e0: 20 20 7d 0a 2b 09 09 7d 0a 2b 09 20 20 20 20 7d    }.+..}.+.    }
52f0: 0a 2b 09 7d 20 6d 73 67 0a 2b 20 20 20 20 7d 5d  .+.} msg.+    }]
5300: 0a 2b 20 20 20 20 73 65 74 20 72 32 20 5b 73 6c  .+    set r2 [sl
5310: 61 76 65 20 65 76 61 6c 20 7b 20 73 65 74 20 6d  ave eval { set m
5320: 73 67 20 7d 5d 0a 2b 20 20 20 20 69 6e 74 65 72  sg }].+    inter
5330: 70 20 64 65 6c 65 74 65 20 73 6c 61 76 65 0a 2b  p delete slave.+
5340: 20 20 20 20 6c 69 73 74 20 24 72 31 20 24 72 32      list $r1 $r2
5350: 0a 2b 7d 20 7b 31 20 7b 74 6f 6f 20 6d 61 6e 79  .+} {1 {too many
5360: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
5370: 20 54 63 6c 5f 45 76 61 6c 20 28 69 6e 66 69 6e   Tcl_Eval (infin
5380: 69 74 65 20 6c 6f 6f 70 3f 29 7d 7d 0a 2b 0a 2b  ite loop?)}}.+.+
5390: 74 65 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 33  test interp-29.3
53a0: 2e 39 20 7b 72 65 63 75 72 73 69 6f 6e 20 6c 69  .9 {recursion li
53b0: 6d 69 74 20 65 72 72 6f 72 20 72 65 70 6f 72 74  mit error report
53c0: 69 6e 67 7d 20 7b 0a 2b 20 20 20 20 69 6e 74 65  ing} {.+    inte
53d0: 72 70 20 63 72 65 61 74 65 20 73 6c 61 76 65 0a  rp create slave.
53e0: 2b 20 20 20 20 61 66 74 65 72 20 30 20 7b 69 6e  +    after 0 {in
53f0: 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69  terp recursionli
5400: 6d 69 74 20 73 6c 61 76 65 20 36 7d 0a 2b 20 20  mit slave 6}.+  
5410: 20 20 73 65 74 20 72 31 20 5b 73 6c 61 76 65 20    set r1 [slave 
5420: 65 76 61 6c 20 7b 0a 2b 20 20 20 20 20 20 20 20  eval {.+        
5430: 63 61 74 63 68 20 7b 20 09 09 23 20 6e 65 73 74  catch { ..# nest
5440: 69 6e 67 20 6c 65 76 65 6c 20 31 0a 2b 09 20 20  ing level 1.+.  
5450: 20 20 65 76 61 6c 20 7b 09 09 23 20 32 0a 2b 09    eval {..# 2.+.
5460: 20 20 20 20 20 20 20 20 65 76 61 6c 20 7b 09 09          eval {..
5470: 23 20 33 0a 2b 09 09 20 20 20 20 65 76 61 6c 20  # 3.+..    eval 
5480: 7b 09 23 20 34 0a 2b 09 09 20 20 20 20 20 20 20  {.# 4.+..       
5490: 20 65 76 61 6c 20 7b 09 23 20 35 0a 2b 09 09 09   eval {.# 5.+...
54a0: 20 20 20 20 20 75 70 64 61 74 65 0a 2b 09 09 09       update.+...
54b0: 20 20 20 20 20 73 65 74 20 78 20 6f 6b 0a 2b 09       set x ok.+.
54c0: 09 09 7d 0a 2b 09 09 20 20 20 20 7d 0a 2b 09 09  ..}.+..    }.+..
54d0: 7d 0a 2b 09 20 20 20 20 7d 0a 2b 09 7d 20 6d 73  }.+.    }.+.} ms
54e0: 67 0a 2b 20 20 20 20 7d 5d 0a 2b 20 20 20 20 73  g.+    }].+    s
54f0: 65 74 20 72 32 20 5b 73 6c 61 76 65 20 65 76 61  et r2 [slave eva
5500: 6c 20 7b 20 73 65 74 20 6d 73 67 20 7d 5d 0a 2b  l { set msg }].+
5510: 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74      interp delet
5520: 65 20 73 6c 61 76 65 0a 2b 20 20 20 20 6c 69 73  e slave.+    lis
5530: 74 20 24 72 31 20 24 72 32 0a 2b 7d 20 7b 30 20  t $r1 $r2.+} {0 
5540: 6f 6b 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74 65  ok}.+.+test inte
5550: 72 70 2d 32 39 2e 33 2e 31 30 20 7b 72 65 63 75  rp-29.3.10 {recu
5560: 72 73 69 6f 6e 20 6c 69 6d 69 74 20 65 72 72 6f  rsion limit erro
5570: 72 20 72 65 70 6f 72 74 69 6e 67 7d 20 7b 0a 2b  r reporting} {.+
5580: 20 20 20 20 69 6e 74 65 72 70 20 63 72 65 61 74      interp creat
5590: 65 20 73 6c 61 76 65 0a 2b 20 20 20 20 61 66 74  e slave.+    aft
55a0: 65 72 20 30 20 7b 73 6c 61 76 65 20 72 65 63 75  er 0 {slave recu
55b0: 72 73 69 6f 6e 6c 69 6d 69 74 20 34 7d 0a 2b 20  rsionlimit 4}.+ 
55c0: 20 20 20 73 65 74 20 72 31 20 5b 73 6c 61 76 65     set r1 [slave
55d0: 20 65 76 61 6c 20 7b 0a 2b 20 20 20 20 20 20 20   eval {.+       
55e0: 20 63 61 74 63 68 20 7b 20 09 09 23 20 6e 65 73   catch { ..# nes
55f0: 74 69 6e 67 20 6c 65 76 65 6c 20 31 0a 2b 09 20  ting level 1.+. 
5600: 20 20 20 65 76 61 6c 20 7b 09 09 23 20 32 0a 2b     eval {..# 2.+
5610: 09 20 20 20 20 20 20 20 20 65 76 61 6c 20 7b 09  .        eval {.
5620: 09 23 20 33 0a 2b 09 09 20 20 20 20 65 76 61 6c  .# 3.+..    eval
5630: 20 7b 09 23 20 34 0a 2b 09 09 20 20 20 20 20 20   {.# 4.+..      
5640: 20 20 65 76 61 6c 20 7b 09 23 20 35 0a 2b 09 09    eval {.# 5.+..
5650: 09 20 20 20 20 20 75 70 64 61 74 65 0a 2b 09 09  .     update.+..
5660: 09 20 20 20 20 20 73 65 74 20 78 20 6f 6b 0a 2b  .     set x ok.+
5670: 09 09 09 7d 0a 2b 09 09 20 20 20 20 7d 0a 2b 09  ...}.+..    }.+.
5680: 09 7d 0a 2b 09 20 20 20 20 7d 0a 2b 09 7d 20 6d  .}.+.    }.+.} m
5690: 73 67 0a 2b 20 20 20 20 7d 5d 0a 2b 20 20 20 20  sg.+    }].+    
56a0: 73 65 74 20 72 32 20 5b 73 6c 61 76 65 20 65 76  set r2 [slave ev
56b0: 61 6c 20 7b 20 73 65 74 20 6d 73 67 20 7d 5d 0a  al { set msg }].
56c0: 2b 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65  +    interp dele
56d0: 74 65 20 73 6c 61 76 65 0a 2b 20 20 20 20 6c 69  te slave.+    li
56e0: 73 74 20 24 72 31 20 24 72 32 0a 2b 7d 20 7b 31  st $r1 $r2.+} {1
56f0: 20 7b 74 6f 6f 20 6d 61 6e 79 20 6e 65 73 74 65   {too many neste
5700: 64 20 63 61 6c 6c 73 20 74 6f 20 54 63 6c 5f 45  d calls to Tcl_E
5710: 76 61 6c 20 28 69 6e 66 69 6e 69 74 65 20 6c 6f  val (infinite lo
5720: 6f 70 3f 29 7d 7d 0a 2b 0a 2b 74 65 73 74 20 69  op?)}}.+.+test i
5730: 6e 74 65 72 70 2d 32 39 2e 33 2e 31 31 20 7b 72  nterp-29.3.11 {r
5740: 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20 65  ecursion limit e
5750: 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 7d 20  rror reporting} 
5760: 7b 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 63 72  {.+    interp cr
5770: 65 61 74 65 20 73 6c 61 76 65 0a 2b 20 20 20 20  eate slave.+    
5780: 61 66 74 65 72 20 30 20 7b 73 6c 61 76 65 20 72  after 0 {slave r
5790: 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 35 7d  ecursionlimit 5}
57a0: 0a 2b 20 20 20 20 73 65 74 20 72 31 20 5b 73 6c  .+    set r1 [sl
57b0: 61 76 65 20 65 76 61 6c 20 7b 0a 2b 20 20 20 20  ave eval {.+    
57c0: 20 20 20 20 63 61 74 63 68 20 7b 20 09 09 23 20      catch { ..# 
57d0: 6e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 31 0a  nesting level 1.
57e0: 2b 09 20 20 20 20 65 76 61 6c 20 7b 09 09 23 20  +.    eval {..# 
57f0: 32 0a 2b 09 20 20 20 20 20 20 20 20 65 76 61 6c  2.+.        eval
5800: 20 7b 09 09 23 20 33 0a 2b 09 09 20 20 20 20 65   {..# 3.+..    e
5810: 76 61 6c 20 7b 09 23 20 34 0a 2b 09 09 20 20 20  val {.# 4.+..   
5820: 20 20 20 20 20 65 76 61 6c 20 7b 09 23 20 35 0a       eval {.# 5.
5830: 2b 09 09 09 20 20 20 20 20 75 70 64 61 74 65 0a  +...     update.
5840: 2b 09 09 09 20 20 20 20 20 73 65 74 20 78 20 6f  +...     set x o
5850: 6b 0a 2b 09 09 09 7d 0a 2b 09 09 20 20 20 20 7d  k.+...}.+..    }
5860: 0a 2b 09 09 7d 0a 2b 09 20 20 20 20 7d 0a 2b 09  .+..}.+.    }.+.
5870: 7d 20 6d 73 67 0a 2b 20 20 20 20 7d 5d 0a 2b 20  } msg.+    }].+ 
5880: 20 20 20 73 65 74 20 72 32 20 5b 73 6c 61 76 65     set r2 [slave
5890: 20 65 76 61 6c 20 7b 20 73 65 74 20 6d 73 67 20   eval { set msg 
58a0: 7d 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 64  }].+    interp d
58b0: 65 6c 65 74 65 20 73 6c 61 76 65 0a 2b 20 20 20  elete slave.+   
58c0: 20 6c 69 73 74 20 24 72 31 20 24 72 32 0a 2b 7d   list $r1 $r2.+}
58d0: 20 7b 31 20 7b 74 6f 6f 20 6d 61 6e 79 20 6e 65   {1 {too many ne
58e0: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 54 63  sted calls to Tc
58f0: 6c 5f 45 76 61 6c 20 28 69 6e 66 69 6e 69 74 65  l_Eval (infinite
5900: 20 6c 6f 6f 70 3f 29 7d 7d 0a 2b 0a 2b 74 65 73   loop?)}}.+.+tes
5910: 74 20 69 6e 74 65 72 70 2d 32 39 2e 33 2e 31 32  t interp-29.3.12
5920: 20 7b 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69   {recursion limi
5930: 74 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69 6e  t error reportin
5940: 67 7d 20 7b 0a 2b 20 20 20 20 69 6e 74 65 72 70  g} {.+    interp
5950: 20 63 72 65 61 74 65 20 73 6c 61 76 65 0a 2b 20   create slave.+ 
5960: 20 20 20 61 66 74 65 72 20 30 20 7b 73 6c 61 76     after 0 {slav
5970: 65 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74  e recursionlimit
5980: 20 36 7d 0a 2b 20 20 20 20 73 65 74 20 72 31 20   6}.+    set r1 
5990: 5b 73 6c 61 76 65 20 65 76 61 6c 20 7b 0a 2b 20  [slave eval {.+ 
59a0: 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 20 09         catch { .
59b0: 09 23 20 6e 65 73 74 69 6e 67 20 6c 65 76 65 6c  .# nesting level
59c0: 20 31 0a 2b 09 20 20 20 20 65 76 61 6c 20 7b 09   1.+.    eval {.
59d0: 09 23 20 32 0a 2b 09 20 20 20 20 20 20 20 20 65  .# 2.+.        e
59e0: 76 61 6c 20 7b 09 09 23 20 33 0a 2b 09 09 20 20  val {..# 3.+..  
59f0: 20 20 65 76 61 6c 20 7b 09 23 20 34 0a 2b 09 09    eval {.# 4.+..
5a00: 20 20 20 20 20 20 20 20 65 76 61 6c 20 7b 09 23          eval {.#
5a10: 20 35 0a 2b 09 09 09 20 20 20 20 20 75 70 64 61   5.+...     upda
5a20: 74 65 0a 2b 09 09 09 20 20 20 20 20 73 65 74 20  te.+...     set 
5a30: 78 20 6f 6b 0a 2b 09 09 09 7d 0a 2b 09 09 20 20  x ok.+...}.+..  
5a40: 20 20 7d 0a 2b 09 09 7d 0a 2b 09 20 20 20 20 7d    }.+..}.+.    }
5a50: 0a 2b 09 7d 20 6d 73 67 0a 2b 20 20 20 20 7d 5d  .+.} msg.+    }]
5a60: 0a 2b 20 20 20 20 73 65 74 20 72 32 20 5b 73 6c  .+    set r2 [sl
5a70: 61 76 65 20 65 76 61 6c 20 7b 20 73 65 74 20 6d  ave eval { set m
5a80: 73 67 20 7d 5d 0a 2b 20 20 20 20 69 6e 74 65 72  sg }].+    inter
5a90: 70 20 64 65 6c 65 74 65 20 73 6c 61 76 65 0a 2b  p delete slave.+
5aa0: 20 20 20 20 6c 69 73 74 20 24 72 31 20 24 72 32      list $r1 $r2
5ab0: 0a 2b 7d 20 7b 30 20 6f 6b 7d 0a 20 0a 2d 74 65  .+} {0 ok}. .-te
5ac0: 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 32 20 7b  st interp-29.2 {
5ad0: 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20  recursion limit 
5ae0: 69 6e 68 65 72 69 74 61 6e 63 65 7d 20 7b 0a 2b  inheritance} {.+
5af0: 74 65 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 34  test interp-29.4
5b00: 2e 31 20 7b 72 65 63 75 72 73 69 6f 6e 20 6c 69  .1 {recursion li
5b10: 6d 69 74 20 69 6e 68 65 72 69 74 61 6e 63 65 7d  mit inheritance}
5b20: 20 7b 0a 20 20 20 20 20 73 65 74 20 69 20 5b 69   {.     set i [i
5b30: 6e 74 65 72 70 20 63 72 65 61 74 65 5d 0a 2d 20  nterp create].- 
5b40: 20 20 20 6c 6f 61 64 20 7b 7d 20 54 63 6c 74 65     load {} Tclte
5b50: 73 74 20 24 69 0a 20 20 20 20 20 73 65 74 20 69  st $i.     set i
5b60: 69 20 5b 69 6e 74 65 72 70 20 65 76 61 6c 20 24  i [interp eval $
5b70: 69 20 7b 0a 2d 09 74 65 73 74 73 65 74 72 65 63  i {.-.testsetrec
5b80: 75 72 73 69 6f 6e 6c 69 6d 69 74 20 35 30 0a 2b  ursionlimit 50.+
5b90: 09 69 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f  .interp recursio
5ba0: 6e 6c 69 6d 69 74 20 7b 7d 20 35 30 0a 20 09 69  nlimit {} 50. .i
5bb0: 6e 74 65 72 70 20 63 72 65 61 74 65 0a 20 20 20  nterp create.   
5bc0: 20 20 7d 5d 0a 20 20 20 20 20 73 65 74 20 72 20    }].     set r 
5bd0: 5b 69 6e 74 65 72 70 20 65 76 61 6c 20 5b 6c 69  [interp eval [li
5be0: 73 74 20 24 69 20 24 69 69 5d 20 7b 0a 40 40 20  st $i $ii] {.@@ 
5bf0: 2d 32 33 31 36 2c 36 20 2b 32 36 37 30 2c 31 35  -2316,6 +2670,15
5c00: 32 20 40 40 0a 20 20 20 20 73 65 74 20 72 0a 20  2 @@.    set r. 
5c10: 7d 20 34 39 0a 20 0a 2b 74 65 73 74 20 69 6e 74  } 49. .+test int
5c20: 65 72 70 2d 32 39 2e 34 2e 32 20 7b 72 65 63 75  erp-29.4.2 {recu
5c30: 72 73 69 6f 6e 20 6c 69 6d 69 74 20 69 6e 68 65  rsion limit inhe
5c40: 72 69 74 61 6e 63 65 7d 20 7b 0a 2b 20 20 20 20  ritance} {.+    
5c50: 73 65 74 20 69 20 5b 69 6e 74 65 72 70 20 63 72  set i [interp cr
5c60: 65 61 74 65 5d 0a 2b 20 20 20 20 24 69 20 72 65  eate].+    $i re
5c70: 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 35 30 0a  cursionlimit 50.
5c80: 2b 20 20 20 20 73 65 74 20 69 69 20 5b 69 6e 74  +    set ii [int
5c90: 65 72 70 20 65 76 61 6c 20 24 69 20 7b 69 6e 74  erp eval $i {int
5ca0: 65 72 70 20 63 72 65 61 74 65 7d 5d 0a 2b 20 20  erp create}].+  
5cb0: 20 20 73 65 74 20 72 20 5b 69 6e 74 65 72 70 20    set r [interp 
5cc0: 65 76 61 6c 20 5b 6c 69 73 74 20 24 69 20 24 69  eval [list $i $i
5cd0: 69 5d 20 7b 0a 2b 09 70 72 6f 63 20 70 20 7b 7d  i] {.+.proc p {}
5ce0: 20 7b 69 6e 63 72 20 3a 3a 69 3b 20 70 7d 0a 2b   {incr ::i; p}.+
5cf0: 09 73 65 74 20 69 20 30 0a 2b 09 63 61 74 63 68  .set i 0.+.catch
5d00: 20 70 0a 2b 09 73 65 74 20 69 0a 2b 20 20 20 20   p.+.set i.+    
5d10: 7d 5d 0a 2b 20 20 20 69 6e 74 65 72 70 20 64 65  }].+   interp de
5d20: 6c 65 74 65 20 24 69 0a 2b 20 20 20 73 65 74 20  lete $i.+   set 
5d30: 72 0a 2b 7d 20 34 39 0a 2b 0a 2b 74 65 73 74 20  r.+} 49.+.+test 
5d40: 69 6e 74 65 72 70 2d 32 39 2e 35 2e 31 20 7b 64  interp-29.5.1 {d
5d50: 6f 65 73 20 73 6c 61 76 65 20 72 65 63 75 72 73  oes slave recurs
5d60: 69 6f 6e 20 6c 69 6d 69 74 20 61 66 66 65 63 74  ion limit affect
5d70: 20 6d 61 73 74 65 72 3f 7d 20 7b 0a 2b 20 20 20   master?} {.+   
5d80: 20 73 65 74 20 62 65 66 6f 72 65 20 5b 69 6e 74   set before [int
5d90: 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d  erp recursionlim
5da0: 69 74 20 7b 7d 5d 0a 2b 20 20 20 20 73 65 74 20  it {}].+    set 
5db0: 69 20 5b 69 6e 74 65 72 70 20 63 72 65 61 74 65  i [interp create
5dc0: 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 72 65  ].+    interp re
5dd0: 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 24 69 20  cursionlimit $i 
5de0: 32 30 30 30 30 0a 2b 20 20 20 20 73 65 74 20 61  20000.+    set a
5df0: 66 74 65 72 20 5b 69 6e 74 65 72 70 20 72 65 63  fter [interp rec
5e00: 75 72 73 69 6f 6e 6c 69 6d 69 74 20 7b 7d 5d 0a  ursionlimit {}].
5e10: 2b 20 20 20 20 73 65 74 20 73 6c 61 76 65 6c 69  +    set slaveli
5e20: 6d 69 74 20 5b 69 6e 74 65 72 70 20 72 65 63 75  mit [interp recu
5e30: 72 73 69 6f 6e 6c 69 6d 69 74 20 24 69 5d 0a 2b  rsionlimit $i].+
5e40: 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74      interp delet
5e50: 65 20 24 69 0a 2b 20 20 20 20 6c 69 73 74 20 5b  e $i.+    list [
5e60: 65 78 70 72 20 7b 24 62 65 66 6f 72 65 20 3d 3d  expr {$before ==
5e70: 20 24 61 66 74 65 72 7d 5d 20 24 73 6c 61 76 65   $after}] $slave
5e80: 6c 69 6d 69 74 0a 2b 7d 20 7b 31 20 32 30 30 30  limit.+} {1 2000
5e90: 30 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e 74 65 72  0}.+.+test inter
5ea0: 70 2d 32 39 2e 35 2e 32 20 7b 64 6f 65 73 20 73  p-29.5.2 {does s
5eb0: 6c 61 76 65 20 72 65 63 75 72 73 69 6f 6e 20 6c  lave recursion l
5ec0: 69 6d 69 74 20 61 66 66 65 63 74 20 6d 61 73 74  imit affect mast
5ed0: 65 72 3f 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20  er?} {.+    set 
5ee0: 62 65 66 6f 72 65 20 5b 69 6e 74 65 72 70 20 72  before [interp r
5ef0: 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 20 7b 7d  ecursionlimit {}
5f00: 5d 0a 2b 20 20 20 20 73 65 74 20 69 20 5b 69 6e  ].+    set i [in
5f10: 74 65 72 70 20 63 72 65 61 74 65 5d 0a 2b 20 20  terp create].+  
5f20: 20 20 69 6e 74 65 72 70 20 72 65 63 75 72 73 69    interp recursi
5f30: 6f 6e 6c 69 6d 69 74 20 24 69 20 32 30 30 30 30  onlimit $i 20000
5f40: 0a 2b 20 20 20 20 73 65 74 20 61 66 74 65 72 20  .+    set after 
5f50: 5b 69 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f  [interp recursio
5f60: 6e 6c 69 6d 69 74 20 7b 7d 5d 0a 2b 20 20 20 20  nlimit {}].+    
5f70: 73 65 74 20 73 6c 61 76 65 6c 69 6d 69 74 20 5b  set slavelimit [
5f80: 24 69 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  $i recursionlimi
5f90: 74 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 64  t].+    interp d
5fa0: 65 6c 65 74 65 20 24 69 0a 2b 20 20 20 20 6c 69  elete $i.+    li
5fb0: 73 74 20 5b 65 78 70 72 20 7b 24 62 65 66 6f 72  st [expr {$befor
5fc0: 65 20 3d 3d 20 24 61 66 74 65 72 7d 5d 20 24 73  e == $after}] $s
5fd0: 6c 61 76 65 6c 69 6d 69 74 0a 2b 7d 20 7b 31 20  lavelimit.+} {1 
5fe0: 32 30 30 30 30 7d 0a 2b 0a 2b 74 65 73 74 20 69  20000}.+.+test i
5ff0: 6e 74 65 72 70 2d 32 39 2e 35 2e 33 20 7b 64 6f  nterp-29.5.3 {do
6000: 65 73 20 73 6c 61 76 65 20 72 65 63 75 72 73 69  es slave recursi
6010: 6f 6e 20 6c 69 6d 69 74 20 61 66 66 65 63 74 20  on limit affect 
6020: 6d 61 73 74 65 72 3f 7d 20 7b 0a 2b 20 20 20 20  master?} {.+    
6030: 73 65 74 20 62 65 66 6f 72 65 20 5b 69 6e 74 65  set before [inte
6040: 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  rp recursionlimi
6050: 74 20 7b 7d 5d 0a 2b 20 20 20 20 73 65 74 20 69  t {}].+    set i
6060: 20 5b 69 6e 74 65 72 70 20 63 72 65 61 74 65 5d   [interp create]
6070: 0a 2b 20 20 20 20 24 69 20 72 65 63 75 72 73 69  .+    $i recursi
6080: 6f 6e 6c 69 6d 69 74 20 32 30 30 30 30 0a 2b 20  onlimit 20000.+ 
6090: 20 20 20 73 65 74 20 61 66 74 65 72 20 5b 69 6e     set after [in
60a0: 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69  terp recursionli
60b0: 6d 69 74 20 7b 7d 5d 0a 2b 20 20 20 20 73 65 74  mit {}].+    set
60c0: 20 73 6c 61 76 65 6c 69 6d 69 74 20 5b 69 6e 74   slavelimit [int
60d0: 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d  erp recursionlim
60e0: 69 74 20 24 69 5d 0a 2b 20 20 20 20 69 6e 74 65  it $i].+    inte
60f0: 72 70 20 64 65 6c 65 74 65 20 24 69 0a 2b 20 20  rp delete $i.+  
6100: 20 20 6c 69 73 74 20 5b 65 78 70 72 20 7b 24 62    list [expr {$b
6110: 65 66 6f 72 65 20 3d 3d 20 24 61 66 74 65 72 7d  efore == $after}
6120: 5d 20 24 73 6c 61 76 65 6c 69 6d 69 74 0a 2b 7d  ] $slavelimit.+}
6130: 20 7b 31 20 32 30 30 30 30 7d 0a 2b 0a 2b 74 65   {1 20000}.+.+te
6140: 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 35 2e 34  st interp-29.5.4
6150: 20 7b 64 6f 65 73 20 73 6c 61 76 65 20 72 65 63   {does slave rec
6160: 75 72 73 69 6f 6e 20 6c 69 6d 69 74 20 61 66 66  ursion limit aff
6170: 65 63 74 20 6d 61 73 74 65 72 3f 7d 20 7b 0a 2b  ect master?} {.+
6180: 20 20 20 20 73 65 74 20 62 65 66 6f 72 65 20 5b      set before [
6190: 69 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e  interp recursion
61a0: 6c 69 6d 69 74 20 7b 7d 5d 0a 2b 20 20 20 20 73  limit {}].+    s
61b0: 65 74 20 69 20 5b 69 6e 74 65 72 70 20 63 72 65  et i [interp cre
61c0: 61 74 65 5d 0a 2b 20 20 20 20 24 69 20 72 65 63  ate].+    $i rec
61d0: 75 72 73 69 6f 6e 6c 69 6d 69 74 20 32 30 30 30  ursionlimit 2000
61e0: 30 0a 2b 20 20 20 20 73 65 74 20 61 66 74 65 72  0.+    set after
61f0: 20 5b 69 6e 74 65 72 70 20 72 65 63 75 72 73 69   [interp recursi
6200: 6f 6e 6c 69 6d 69 74 20 7b 7d 5d 0a 2b 20 20 20  onlimit {}].+   
6210: 20 73 65 74 20 73 6c 61 76 65 6c 69 6d 69 74 20   set slavelimit 
6220: 5b 24 69 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d  [$i recursionlim
6230: 69 74 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20  it].+    interp 
6240: 64 65 6c 65 74 65 20 24 69 0a 2b 20 20 20 20 6c  delete $i.+    l
6250: 69 73 74 20 5b 65 78 70 72 20 7b 24 62 65 66 6f  ist [expr {$befo
6260: 72 65 20 3d 3d 20 24 61 66 74 65 72 7d 5d 20 24  re == $after}] $
6270: 73 6c 61 76 65 6c 69 6d 69 74 0a 2b 7d 20 7b 31  slavelimit.+} {1
6280: 20 32 30 30 30 30 7d 0a 2b 0a 2b 74 65 73 74 20   20000}.+.+test 
6290: 69 6e 74 65 72 70 2d 32 39 2e 36 2e 31 20 7b 73  interp-29.6.1 {s
62a0: 61 66 65 20 69 6e 74 65 72 70 72 65 74 65 72 20  afe interpreter 
62b0: 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 7d  recursion limit}
62c0: 20 7b 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 63   {.+    interp c
62d0: 72 65 61 74 65 20 73 6c 61 76 65 20 2d 73 61 66  reate slave -saf
62e0: 65 0a 2b 20 20 20 20 73 65 74 20 6e 20 5b 69 6e  e.+    set n [in
62f0: 74 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69  terp recursionli
6300: 6d 69 74 20 73 6c 61 76 65 5d 0a 2b 20 20 20 20  mit slave].+    
6310: 69 6e 74 65 72 70 20 64 65 6c 65 74 65 20 73 6c  interp delete sl
6320: 61 76 65 0a 2b 20 20 20 20 73 65 74 20 6e 0a 2b  ave.+    set n.+
6330: 7d 20 31 30 30 30 0a 2b 0a 2b 74 65 73 74 20 69  } 1000.+.+test i
6340: 6e 74 65 72 70 2d 32 39 2e 36 2e 32 20 7b 73 61  nterp-29.6.2 {sa
6350: 66 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 72  fe interpreter r
6360: 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 7d 20  ecursion limit} 
6370: 7b 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 63 72  {.+    interp cr
6380: 65 61 74 65 20 73 6c 61 76 65 20 2d 73 61 66 65  eate slave -safe
6390: 0a 2b 20 20 20 20 73 65 74 20 6e 20 5b 73 6c 61  .+    set n [sla
63a0: 76 65 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  ve recursionlimi
63b0: 74 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 64  t].+    interp d
63c0: 65 6c 65 74 65 20 73 6c 61 76 65 0a 2b 20 20 20  elete slave.+   
63d0: 20 73 65 74 20 6e 0a 2b 7d 20 31 30 30 30 0a 2b   set n.+} 1000.+
63e0: 0a 2b 74 65 73 74 20 69 6e 74 65 72 70 2d 32 39  .+test interp-29
63f0: 2e 36 2e 33 20 7b 73 61 66 65 20 69 6e 74 65 72  .6.3 {safe inter
6400: 70 72 65 74 65 72 20 72 65 63 75 72 73 69 6f 6e  preter recursion
6410: 20 6c 69 6d 69 74 7d 20 7b 0a 2b 20 20 20 20 69   limit} {.+    i
6420: 6e 74 65 72 70 20 63 72 65 61 74 65 20 73 6c 61  nterp create sla
6430: 76 65 20 2d 73 61 66 65 0a 2b 20 20 20 20 73 65  ve -safe.+    se
6440: 74 20 6e 31 20 5b 69 6e 74 65 72 70 20 72 65 63  t n1 [interp rec
6450: 75 72 73 69 6f 6e 6c 69 6d 69 74 20 73 6c 61 76  ursionlimit slav
6460: 65 20 34 32 5d 0a 2b 20 20 20 20 73 65 74 20 6e  e 42].+    set n
6470: 32 20 5b 69 6e 74 65 72 70 20 72 65 63 75 72 73  2 [interp recurs
6480: 69 6f 6e 6c 69 6d 69 74 20 73 6c 61 76 65 5d 0a  ionlimit slave].
6490: 2b 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65  +    interp dele
64a0: 74 65 20 73 6c 61 76 65 0a 2b 20 20 20 20 6c 69  te slave.+    li
64b0: 73 74 20 24 6e 31 20 24 6e 32 0a 2b 7d 20 7b 34  st $n1 $n2.+} {4
64c0: 32 20 34 32 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e  2 42}.+.+test in
64d0: 74 65 72 70 2d 32 39 2e 36 2e 34 20 7b 73 61 66  terp-29.6.4 {saf
64e0: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 72 65  e interpreter re
64f0: 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b  cursion limit} {
6500: 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 63 72 65  .+    interp cre
6510: 61 74 65 20 73 6c 61 76 65 20 2d 73 61 66 65 0a  ate slave -safe.
6520: 2b 20 20 20 20 73 65 74 20 6e 31 20 5b 73 6c 61  +    set n1 [sla
6530: 76 65 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  ve recursionlimi
6540: 74 20 34 32 5d 0a 2b 20 20 20 20 73 65 74 20 6e  t 42].+    set n
6550: 32 20 5b 69 6e 74 65 72 70 20 72 65 63 75 72 73  2 [interp recurs
6560: 69 6f 6e 6c 69 6d 69 74 20 73 6c 61 76 65 5d 0a  ionlimit slave].
6570: 2b 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65  +    interp dele
6580: 74 65 20 73 6c 61 76 65 0a 2b 20 20 20 20 6c 69  te slave.+    li
6590: 73 74 20 24 6e 31 20 24 6e 32 0a 2b 7d 20 7b 34  st $n1 $n2.+} {4
65a0: 32 20 34 32 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e  2 42}.+.+test in
65b0: 74 65 72 70 2d 32 39 2e 36 2e 35 20 7b 73 61 66  terp-29.6.5 {saf
65c0: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 72 65  e interpreter re
65d0: 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b  cursion limit} {
65e0: 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 63 72 65  .+    interp cre
65f0: 61 74 65 20 73 6c 61 76 65 20 2d 73 61 66 65 0a  ate slave -safe.
6600: 2b 20 20 20 20 73 65 74 20 6e 31 20 5b 69 6e 74  +    set n1 [int
6610: 65 72 70 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d  erp recursionlim
6620: 69 74 20 73 6c 61 76 65 20 34 32 5d 0a 2b 20 20  it slave 42].+  
6630: 20 20 73 65 74 20 6e 32 20 5b 73 6c 61 76 65 20    set n2 [slave 
6640: 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74 5d 0a  recursionlimit].
6650: 2b 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65  +    interp dele
6660: 74 65 20 73 6c 61 76 65 0a 2b 20 20 20 20 6c 69  te slave.+    li
6670: 73 74 20 24 6e 31 20 24 6e 32 0a 2b 7d 20 7b 34  st $n1 $n2.+} {4
6680: 32 20 34 32 7d 0a 2b 0a 2b 74 65 73 74 20 69 6e  2 42}.+.+test in
6690: 74 65 72 70 2d 32 39 2e 36 2e 36 20 7b 73 61 66  terp-29.6.6 {saf
66a0: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 72 65  e interpreter re
66b0: 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 7d 20 7b  cursion limit} {
66c0: 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 63 72 65  .+    interp cre
66d0: 61 74 65 20 73 6c 61 76 65 20 2d 73 61 66 65 0a  ate slave -safe.
66e0: 2b 20 20 20 20 73 65 74 20 6e 31 20 5b 73 6c 61  +    set n1 [sla
66f0: 76 65 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69  ve recursionlimi
6700: 74 20 34 32 5d 0a 2b 20 20 20 20 73 65 74 20 6e  t 42].+    set n
6710: 32 20 5b 73 6c 61 76 65 20 72 65 63 75 72 73 69  2 [slave recursi
6720: 6f 6e 6c 69 6d 69 74 5d 0a 2b 20 20 20 20 69 6e  onlimit].+    in
6730: 74 65 72 70 20 64 65 6c 65 74 65 20 73 6c 61 76  terp delete slav
6740: 65 0a 2b 20 20 20 20 6c 69 73 74 20 24 6e 31 20  e.+    list $n1 
6750: 24 6e 32 0a 2b 7d 20 7b 34 32 20 34 32 7d 0a 2b  $n2.+} {42 42}.+
6760: 0a 2b 74 65 73 74 20 69 6e 74 65 72 70 2d 32 39  .+test interp-29
6770: 2e 36 2e 37 20 7b 73 61 66 65 20 69 6e 74 65 72  .6.7 {safe inter
6780: 70 72 65 74 65 72 20 72 65 63 75 72 73 69 6f 6e  preter recursion
6790: 20 6c 69 6d 69 74 7d 20 7b 0a 2b 20 20 20 20 69   limit} {.+    i
67a0: 6e 74 65 72 70 20 63 72 65 61 74 65 20 73 6c 61  nterp create sla
67b0: 76 65 20 2d 73 61 66 65 0a 2b 20 20 20 20 73 65  ve -safe.+    se
67c0: 74 20 6e 31 20 5b 73 6c 61 76 65 20 72 65 63 75  t n1 [slave recu
67d0: 72 73 69 6f 6e 6c 69 6d 69 74 20 34 32 5d 0a 2b  rsionlimit 42].+
67e0: 20 20 20 20 73 65 74 20 6e 32 20 5b 73 6c 61 76      set n2 [slav
67f0: 65 20 72 65 63 75 72 73 69 6f 6e 6c 69 6d 69 74  e recursionlimit
6800: 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 64 65  ].+    interp de
6810: 6c 65 74 65 20 73 6c 61 76 65 0a 2b 20 20 20 20  lete slave.+    
6820: 6c 69 73 74 20 24 6e 31 20 24 6e 32 0a 2b 7d 20  list $n1 $n2.+} 
6830: 7b 34 32 20 34 32 7d 0a 2b 0a 2b 74 65 73 74 20  {42 42}.+.+test 
6840: 69 6e 74 65 72 70 2d 32 39 2e 36 2e 38 20 7b 73  interp-29.6.8 {s
6850: 61 66 65 20 69 6e 74 65 72 70 72 65 74 65 72 20  afe interpreter 
6860: 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d 69 74 7d  recursion limit}
6870: 20 7b 0a 2b 20 20 20 20 69 6e 74 65 72 70 20 63   {.+    interp c
6880: 72 65 61 74 65 20 73 6c 61 76 65 20 2d 73 61 66  reate slave -saf
6890: 65 0a 2b 20 20 20 20 73 65 74 20 6e 20 5b 63 61  e.+    set n [ca
68a0: 74 63 68 20 7b 73 6c 61 76 65 20 65 76 61 6c 20  tch {slave eval 
68b0: 7b 69 6e 74 65 72 70 20 72 65 63 75 72 73 69 6f  {interp recursio
68c0: 6e 6c 69 6d 69 74 20 7b 7d 20 34 32 7d 7d 20 6d  nlimit {} 42}} m
68d0: 73 67 5d 0a 2b 20 20 20 20 69 6e 74 65 72 70 20  sg].+    interp 
68e0: 64 65 6c 65 74 65 20 73 6c 61 76 65 0a 2b 20 20  delete slave.+  
68f0: 20 20 6c 69 73 74 20 24 6e 20 24 6d 73 67 0a 2b    list $n $msg.+
6900: 7d 20 7b 31 20 7b 70 65 72 6d 69 73 73 69 6f 6e  } {1 {permission
6910: 20 64 65 6e 69 65 64 3a 20 73 61 66 65 20 69 6e   denied: safe in
6920: 74 65 72 70 72 65 74 65 72 73 20 63 61 6e 6e 6f  terpreters canno
6930: 74 20 63 68 61 6e 67 65 20 72 65 63 75 72 73 69  t change recursi
6940: 6f 6e 20 6c 69 6d 69 74 7d 7d 0a 2b 0a 2b 74 65  on limit}}.+.+te
6950: 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 36 2e 39  st interp-29.6.9
6960: 20 7b 73 61 66 65 20 69 6e 74 65 72 70 72 65 74   {safe interpret
6970: 65 72 20 72 65 63 75 72 73 69 6f 6e 20 6c 69 6d  er recursion lim
6980: 69 74 7d 20 7b 0a 2b 20 20 20 20 69 6e 74 65 72  it} {.+    inter
6990: 70 20 63 72 65 61 74 65 20 73 6c 61 76 65 20 2d  p create slave -
69a0: 73 61 66 65 0a 2b 20 20 20 20 73 65 74 20 72 65  safe.+    set re
69b0: 73 75 6c 74 20 5b 0a 2b 09 73 6c 61 76 65 20 65  sult [.+.slave e
69c0: 76 61 6c 20 7b 0a 2b 09 20 20 20 20 69 6e 74 65  val {.+.    inte
69d0: 72 70 20 63 72 65 61 74 65 20 73 6c 61 76 65 32  rp create slave2
69e0: 20 2d 73 61 66 65 0a 2b 09 20 20 20 20 73 65 74   -safe.+.    set
69f0: 20 6e 20 5b 63 61 74 63 68 20 7b 0a 2b 09 20 20   n [catch {.+.  
6a00: 20 20 20 20 20 20 69 6e 74 65 72 70 20 72 65 63        interp rec
6a10: 75 72 73 69 6f 6e 6c 69 6d 69 74 20 73 6c 61 76  ursionlimit slav
6a20: 65 32 20 34 32 0a 2b 20 20 20 20 20 20 20 20 20  e2 42.+         
6a30: 20 20 20 7d 20 6d 73 67 5d 0a 2b 20 20 20 20 20     } msg].+     
6a40: 20 20 20 20 20 20 20 6c 69 73 74 20 24 6e 20 24         list $n $
6a50: 6d 73 67 0a 2b 20 20 20 20 20 20 20 20 7d 0a 2b  msg.+        }.+
6a60: 20 20 20 20 5d 0a 2b 20 20 20 20 69 6e 74 65 72      ].+    inter
6a70: 70 20 64 65 6c 65 74 65 20 73 6c 61 76 65 0a 2b  p delete slave.+
6a80: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 2b      set result.+
6a90: 7d 20 7b 31 20 7b 70 65 72 6d 69 73 73 69 6f 6e  } {1 {permission
6aa0: 20 64 65 6e 69 65 64 3a 20 73 61 66 65 20 69 6e   denied: safe in
6ab0: 74 65 72 70 72 65 74 65 72 73 20 63 61 6e 6e 6f  terpreters canno
6ac0: 74 20 63 68 61 6e 67 65 20 72 65 63 75 72 73 69  t change recursi
6ad0: 6f 6e 20 6c 69 6d 69 74 7d 7d 0a 2b 0a 2b 74 65  on limit}}.+.+te
6ae0: 73 74 20 69 6e 74 65 72 70 2d 32 39 2e 36 2e 31  st interp-29.6.1
6af0: 30 20 7b 73 61 66 65 20 69 6e 74 65 72 70 72 65  0 {safe interpre
6b00: 74 65 72 20 72 65 63 75 72 73 69 6f 6e 20 6c 69  ter recursion li
6b10: 6d 69 74 7d 20 7b 0a 2b 20 20 20 20 69 6e 74 65  mit} {.+    inte
6b20: 72 70 20 63 72 65 61 74 65 20 73 6c 61 76 65 20  rp create slave 
6b30: 2d 73 61 66 65 0a 2b 20 20 20 20 73 65 74 20 72  -safe.+    set r
6b40: 65 73 75 6c 74 20 5b 0a 2b 20 20 20 20 20 20 20  esult [.+       
6b50: 20 73 6c 61 76 65 20 65 76 61 6c 20 7b 0a 2b 09   slave eval {.+.
6b60: 20 20 20 20 69 6e 74 65 72 70 20 63 72 65 61 74      interp creat
6b70: 65 20 73 6c 61 76 65 32 20 2d 73 61 66 65 0a 2b  e slave2 -safe.+
6b80: 09 20 20 20 20 73 65 74 20 6e 20 5b 63 61 74 63  .    set n [catc
6b90: 68 20 7b 0a 2b 09 20 20 20 20 20 20 20 20 73 6c  h {.+.        sl
6ba0: 61 76 65 32 20 72 65 63 75 72 73 69 6f 6e 6c 69  ave2 recursionli
6bb0: 6d 69 74 20 34 32 0a 2b 20 20 20 20 20 20 20 20  mit 42.+        
6bc0: 20 20 20 20 7d 20 6d 73 67 5d 0a 2b 20 20 20 20      } msg].+    
6bd0: 20 20 20 20 20 20 20 20 6c 69 73 74 20 24 6e 20          list $n 
6be0: 24 6d 73 67 0a 2b 20 20 20 20 20 20 20 20 7d 0a  $msg.+        }.
6bf0: 2b 20 20 20 20 5d 0a 2b 20 20 20 20 69 6e 74 65  +    ].+    inte
6c00: 72 70 20 64 65 6c 65 74 65 20 73 6c 61 76 65 0a  rp delete slave.
6c10: 2b 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a  +    set result.
6c20: 2b 7d 20 7b 31 20 7b 70 65 72 6d 69 73 73 69 6f  +} {1 {permissio
6c30: 6e 20 64 65 6e 69 65 64 3a 20 73 61 66 65 20 69  n denied: safe i
6c40: 6e 74 65 72 70 72 65 74 65 72 73 20 63 61 6e 6e  nterpreters cann
6c50: 6f 74 20 63 68 61 6e 67 65 20 72 65 63 75 72 73  ot change recurs
6c60: 69 6f 6e 20 6c 69 6d 69 74 7d 7d 0a 2b 0a 2b 0a  ion limit}}.+.+.
6c70: 20 23 20 20 20 20 23 20 44 65 65 70 20 72 65 63   #    # Deep rec
6c80: 75 72 73 69 6f 6e 20 28 69 6e 74 6f 20 69 6e 74  ursion (into int
6c90: 65 72 70 73 20 77 68 65 6e 20 74 68 65 20 72 65  erps when the re
6ca0: 67 75 6c 61 72 20 6f 6e 65 20 66 61 69 6c 73 29  gular one fails)
6cb0: 3a 0a 20 23 20 20 20 20 23 20 73 74 69 6c 6c 20  :. #    # still 
6cc0: 63 72 61 73 68 65 73 2e 2e 2e 0a 20 23 20 20 20  crashes.... #   
6cd0: 20 70 72 6f 63 20 70 20 7b 7d 20 7b 0a 40 40 20   proc p {} {.@@ 
6ce0: 2d 32 33 33 39 2c 37 20 2b 32 38 33 39 2c 36 20  -2339,7 +2839,6 
6cf0: 40 40 0a 20 23 7d 20 7b 7d 0a 20 0a 20 23 20 45  @@. #} {}. . # E
6d00: 6e 64 20 6f 66 20 73 74 61 63 6b 2d 72 65 63 75  nd of stack-recu
6d10: 72 73 69 6f 6e 20 74 65 73 74 73 0a 2d 7d 0a 20  rsion tests.-}. 
6d20: 0a 20 23 20 54 68 69 73 20 74 65 73 74 20 64 75  . # This test du
6d30: 6d 70 73 20 63 6f 72 65 20 69 6e 20 54 63 6c 20  mps core in Tcl 
6d40: 38 2e 30 2e 33 21 0a 20 74 65 73 74 20 69 6e 74  8.0.3!. test int
6d50: 65 72 70 2d 33 30 2e 31 20 7b 64 65 6c 65 74 69  erp-30.1 {deleti
6d60: 6f 6e 20 6f 66 20 61 6c 69 61 73 65 73 20 69 6e  on of aliases in
6d70: 73 69 64 65 20 6e 61 6d 65 73 70 61 63 65 73 7d  side namespaces}
6d80: 20 7b 0a                                          {.