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