Attachment "tip195.patch" to
ticket [1040206fff]
added by
pspjuth
2008-09-20 05:54:19.
0000: 64 69 66 66 20 2d 4e 75 72 20 2d 78 20 2e 67 69 diff -Nur -x .gi
0010: 74 20 74 63 6c 6d 61 73 74 65 72 2f 64 6f 63 2f t tclmaster/doc/
0020: 70 72 65 66 69 78 2e 6e 20 74 63 6c 2f 64 6f 63 prefix.n tcl/doc
0030: 2f 70 72 65 66 69 78 2e 6e 0a 2d 2d 2d 20 74 63 /prefix.n.--- tc
0040: 6c 6d 61 73 74 65 72 2f 64 6f 63 2f 70 72 65 66 lmaster/doc/pref
0050: 69 78 2e 6e 09 31 39 37 30 2d 30 31 2d 30 31 20 ix.n.1970-01-01
0060: 30 31 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30 01:00:00.0000000
0070: 30 30 20 2b 30 31 30 30 0a 2b 2b 2b 20 74 63 6c 00 +0100.+++ tcl
0080: 2f 64 6f 63 2f 70 72 65 66 69 78 2e 6e 09 32 30 /doc/prefix.n.20
0090: 30 38 2d 30 39 2d 31 39 20 32 30 3a 35 35 3a 31 08-09-19 20:55:1
00a0: 33 2e 30 30 30 30 30 30 30 30 30 20 2b 30 32 30 3.000000000 +020
00b0: 30 0a 40 40 20 2d 30 2c 30 20 2b 31 2c 39 33 20 0.@@ -0,0 +1,93
00c0: 40 40 0a 2b 27 5c 22 0a 2b 27 5c 22 20 43 6f 70 @@.+'\".+'\" Cop
00d0: 79 72 69 67 68 74 20 28 63 29 20 32 30 30 38 20 yright (c) 2008
00e0: 50 65 74 65 72 20 53 70 6a 75 74 68 20 3c 70 73 Peter Spjuth <ps
00f0: 70 6a 75 74 68 40 75 73 65 72 73 2e 73 6f 75 72 [email protected]
0100: 63 65 66 6f 72 67 65 2e 6e 65 74 3e 0a 2b 27 5c ceforge.net>.+'\
0110: 22 0a 2b 27 5c 22 20 53 65 65 20 74 68 65 20 66 ".+'\" See the f
0120: 69 6c 65 20 22 6c 69 63 65 6e 73 65 2e 74 65 72 ile "license.ter
0130: 6d 73 22 20 66 6f 72 20 69 6e 66 6f 72 6d 61 74 ms" for informat
0140: 69 6f 6e 20 6f 6e 20 75 73 61 67 65 20 61 6e 64 ion on usage and
0150: 20 72 65 64 69 73 74 72 69 62 75 74 69 6f 6e 0a redistribution.
0160: 2b 27 5c 22 20 6f 66 20 74 68 69 73 20 66 69 6c +'\" of this fil
0170: 65 2c 20 61 6e 64 20 66 6f 72 20 61 20 44 49 53 e, and for a DIS
0180: 43 4c 41 49 4d 45 52 20 4f 46 20 41 4c 4c 20 57 CLAIMER OF ALL W
0190: 41 52 52 41 4e 54 49 45 53 2e 0a 2b 27 5c 22 20 ARRANTIES..+'\"
01a0: 0a 2b 27 5c 22 20 52 43 53 3a 20 40 28 23 29 20 .+'\" RCS: @(#)
01b0: 24 49 64 3a 20 74 6d 2e 6e 2c 76 20 31 2e 31 36 $Id: tm.n,v 1.16
01c0: 20 32 30 30 38 2f 30 36 2f 32 35 20 31 38 3a 31 2008/06/25 18:1
01d0: 38 3a 33 37 20 64 67 70 20 45 78 70 20 24 0a 2b 8:37 dgp Exp $.+
01e0: 27 5c 22 20 0a 2b 2e 73 6f 20 6d 61 6e 2e 6d 61 '\" .+.so man.ma
01f0: 63 72 6f 73 0a 2b 2e 54 48 20 70 72 65 66 69 78 cros.+.TH prefix
0200: 20 6e 20 38 2e 36 20 54 63 6c 20 22 54 63 6c 20 n 8.6 Tcl "Tcl
0210: 42 75 69 6c 74 2d 49 6e 20 43 6f 6d 6d 61 6e 64 Built-In Command
0220: 73 22 0a 2b 2e 42 53 0a 2b 27 5c 22 20 4e 6f 74 s".+.BS.+'\" Not
0230: 65 3a 20 20 64 6f 20 6e 6f 74 20 6d 6f 64 69 66 e: do not modif
0240: 79 20 74 68 65 20 2e 53 48 20 4e 41 4d 45 20 6c y the .SH NAME l
0250: 69 6e 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 ine immediately
0260: 62 65 6c 6f 77 21 0a 2b 2e 53 48 20 4e 41 4d 45 below!.+.SH NAME
0270: 0a 2b 70 72 65 66 69 78 20 5c 2d 20 46 61 63 69 .+prefix \- Faci
0280: 6c 69 74 69 65 73 20 66 6f 72 20 70 72 65 66 69 lities for prefi
0290: 78 20 6d 61 74 63 68 69 6e 67 0a 2b 2e 53 48 20 x matching.+.SH
02a0: 53 59 4e 4f 50 53 49 53 0a 2b 2e 6e 66 0a 2b 5c SYNOPSIS.+.nf.+\
02b0: 66 42 3a 3a 74 63 6c 3a 3a 70 72 65 66 69 78 20 fB::tcl::prefix
02c0: 61 6c 6c 5c 66 52 20 5c 66 49 74 61 62 6c 65 5c all\fR \fItable\
02d0: 66 52 20 5c 66 49 73 74 72 69 6e 67 5c 66 52 0a fR \fIstring\fR.
02e0: 2b 5c 66 42 3a 3a 74 63 6c 3a 3a 70 72 65 66 69 +\fB::tcl::prefi
02f0: 78 20 6c 6f 6e 67 65 73 74 5c 66 52 20 5c 66 49 x longest\fR \fI
0300: 74 61 62 6c 65 5c 66 52 20 5c 66 49 73 74 72 69 table\fR \fIstri
0310: 6e 67 5c 66 52 0a 2b 5c 66 42 3a 3a 74 63 6c 3a ng\fR.+\fB::tcl:
0320: 3a 70 72 65 66 69 78 20 6d 61 74 63 68 5c 66 52 :prefix match\fR
0330: 20 5c 66 49 3f 6f 70 74 69 6f 6e 20 2e 2e 2e 3f \fI?option ...?
0340: 5c 66 52 20 5c 66 49 74 61 62 6c 65 5c 66 52 20 \fR \fItable\fR
0350: 5c 66 49 73 74 72 69 6e 67 5c 66 52 0a 2b 2e 66 \fIstring\fR.+.f
0360: 69 0a 2b 2e 42 45 0a 2b 2e 53 48 20 44 45 53 43 i.+.BE.+.SH DESC
0370: 52 49 50 54 49 4f 4e 0a 2b 54 68 69 73 20 64 6f RIPTION.+This do
0380: 63 75 6d 65 6e 74 20 64 65 73 63 72 69 62 65 73 cument describes
0390: 20 63 6f 6d 6d 61 6e 64 73 20 6c 6f 6f 6b 69 6e commands lookin
03a0: 67 20 75 70 20 61 20 70 72 65 66 69 78 20 69 6e g up a prefix in
03b0: 20 61 20 6c 69 73 74 20 6f 66 20 73 74 72 69 6e a list of strin
03c0: 67 73 2e 0a 2b 54 68 65 20 66 6f 6c 6c 6f 77 69 gs..+The followi
03d0: 6e 67 20 63 6f 6d 6d 61 6e 64 73 20 61 72 65 20 ng commands are
03e0: 73 75 70 70 6f 72 74 65 64 3a 0a 2b 2e 54 50 0a supported:.+.TP.
03f0: 2b 5c 66 42 3a 3a 74 63 6c 3a 3a 70 72 65 66 69 +\fB::tcl::prefi
0400: 78 20 61 6c 6c 5c 66 52 20 5c 66 49 74 61 62 6c x all\fR \fItabl
0410: 65 5c 66 52 20 5c 66 49 73 74 72 69 6e 67 5c 66 e\fR \fIstring\f
0420: 52 0a 2b 52 65 74 75 72 6e 73 20 61 20 6c 69 73 R.+Returns a lis
0430: 74 20 6f 66 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 t of all element
0440: 73 20 69 6e 20 5c 66 49 74 61 62 6c 65 5c 66 52 s in \fItable\fR
0450: 20 74 68 61 74 20 62 65 67 69 6e 73 20 77 69 74 that begins wit
0460: 68 0a 2b 74 68 65 20 70 72 65 66 69 78 20 5c 66 h.+the prefix \f
0470: 49 73 74 72 69 6e 67 5c 66 52 2e 0a 2b 2e 54 50 Istring\fR..+.TP
0480: 0a 2b 5c 66 42 3a 3a 74 63 6c 3a 3a 70 72 65 66 .+\fB::tcl::pref
0490: 69 78 20 6c 6f 6e 67 65 73 74 5c 66 52 20 5c 66 ix longest\fR \f
04a0: 49 74 61 62 6c 65 5c 66 52 20 5c 66 49 73 74 72 Itable\fR \fIstr
04b0: 69 6e 67 5c 66 52 0a 2b 52 65 74 75 72 6e 73 20 ing\fR.+Returns
04c0: 74 68 65 20 6c 6f 6e 67 65 73 74 20 63 6f 6d 6d the longest comm
04d0: 6f 6e 20 70 72 65 66 69 78 20 61 6d 6f 6e 67 20 on prefix among
04e0: 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 all elements in
04f0: 5c 66 49 74 61 62 6c 65 5c 66 52 20 74 68 61 74 \fItable\fR that
0500: 0a 2b 62 65 67 69 6e 73 20 77 69 74 68 20 74 68 .+begins with th
0510: 65 20 70 72 65 66 69 78 20 5c 66 49 73 74 72 69 e prefix \fIstri
0520: 6e 67 5c 66 52 2e 0a 2b 2e 54 50 0a 2b 5c 66 42 ng\fR..+.TP.+\fB
0530: 3a 3a 74 63 6c 3a 3a 70 72 65 66 69 78 20 6d 61 ::tcl::prefix ma
0540: 74 63 68 5c 66 52 20 3f 5c 66 49 6f 70 74 69 6f tch\fR ?\fIoptio
0550: 6e 73 5c 66 52 3f 20 5c 66 49 74 61 62 6c 65 5c ns\fR? \fItable\
0560: 66 52 20 5c 66 49 73 74 72 69 6e 67 5c 66 52 0a fR \fIstring\fR.
0570: 2b 49 66 20 5c 66 49 73 74 72 69 6e 67 5c 66 52 +If \fIstring\fR
0580: 20 65 71 75 61 6c 73 20 6f 6e 65 20 65 6c 65 6d equals one elem
0590: 65 6e 74 20 69 6e 20 5c 66 49 74 61 62 6c 65 5c ent in \fItable\
05a0: 66 52 20 6f 72 20 69 73 20 61 20 70 72 65 66 69 fR or is a prefi
05b0: 78 20 74 6f 20 65 78 61 63 74 6c 79 0a 2b 6f 6e x to exactly.+on
05c0: 65 20 65 6c 65 6d 65 6e 74 2c 20 74 68 65 20 6d e element, the m
05d0: 61 74 63 68 65 64 20 65 6c 65 6d 65 6e 74 20 69 atched element i
05e0: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 49 66 20 s returned. If
05f0: 6e 6f 74 2c 20 74 68 65 20 72 65 73 75 6c 74 20 not, the result
0600: 64 65 70 65 6e 64 73 0a 2b 6f 6e 20 74 68 65 20 depends.+on the
0610: 2d 65 72 72 6f 72 20 6f 70 74 69 6f 6e 2e 0a 2b -error option..+
0620: 2e 54 50 20 32 30 0a 2b 5c 66 42 5c 2d 65 78 61 .TP 20.+\fB\-exa
0630: 63 74 5c 66 52 0a 2b 2e 0a 2b 41 63 63 65 70 74 ct\fR.+..+Accept
0640: 20 6f 6e 6c 79 20 65 78 61 63 74 20 6d 61 74 63 only exact matc
0650: 68 65 73 2e 0a 2b 2e 54 50 20 32 30 0a 2b 5c 66 hes..+.TP 20.+\f
0660: 42 5c 2d 6d 65 73 73 61 67 65 5c 30 5c 66 49 73 B\-message\0\fIs
0670: 74 72 69 6e 67 5c 66 52 0a 2b 2e 0a 2b 55 73 65 tring\fR.+..+Use
0680: 20 5c 66 49 73 74 72 69 6e 67 5c 66 52 20 69 6e \fIstring\fR in
0690: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 the error messa
06a0: 67 65 20 61 74 20 61 20 6d 69 73 6d 61 74 63 68 ge at a mismatch
06b0: 2e 20 44 65 66 61 75 6c 74 20 69 73 20 22 6f 70 . Default is "op
06c0: 74 69 6f 6e 22 2e 0a 2b 2e 54 50 20 32 30 0a 2b tion"..+.TP 20.+
06d0: 5c 66 42 5c 2d 65 72 72 6f 72 5c 30 5c 66 49 6f \fB\-error\0\fIo
06e0: 70 74 69 6f 6e 73 5c 66 52 0a 2b 2e 0a 2b 54 68 ptions\fR.+..+Th
06f0: 65 20 5c 66 49 6f 70 74 69 6f 6e 73 5c 66 52 20 e \fIoptions\fR
0700: 61 72 65 20 75 73 65 64 20 77 68 65 6e 20 6e 6f are used when no
0710: 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2e match is found.
0720: 0a 2b 49 66 20 5c 66 49 6f 70 74 69 6f 6e 73 5c .+If \fIoptions\
0730: 66 52 20 69 73 20 65 6d 70 74 79 2c 20 6e 6f 20 fR is empty, no
0740: 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 error is generat
0750: 65 64 20 61 6e 64 20 61 6e 20 65 6d 70 74 79 20 ed and an empty
0760: 73 74 72 69 6e 67 20 69 73 20 72 65 74 75 72 6e string is return
0770: 65 64 2e 0a 2b 4f 74 68 65 72 77 69 73 65 20 74 ed..+Otherwise t
0780: 68 65 20 5c 66 49 6f 70 74 69 6f 6e 73 5c 66 52 he \fIoptions\fR
0790: 20 61 72 65 20 75 73 65 64 20 61 73 20 5c 66 42 are used as \fB
07a0: 72 65 74 75 72 6e 5c 66 52 20 6f 70 74 69 6f 6e return\fR option
07b0: 73 20 77 68 65 6e 20 67 65 6e 65 72 61 74 69 6e s when generatin
07c0: 67 0a 2b 74 68 65 20 65 72 72 6f 72 20 6d 65 73 g.+the error mes
07d0: 73 61 67 65 2e 20 20 54 68 65 20 64 65 66 61 75 sage. The defau
07e0: 6c 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 lt corresponds t
07f0: 6f 20 73 65 74 74 69 6e 67 20 22 2d 6c 65 76 65 o setting "-leve
0800: 6c 20 30 22 2e 0a 2b 45 78 61 6d 70 6c 65 3a 20 l 0"..+Example:
0810: 49 66 20 5c 66 42 2d 65 72 72 6f 72 5c 66 52 20 If \fB-error\fR
0820: 22 2d 65 72 72 6f 72 63 6f 64 65 20 4d 79 45 72 "-errorcode MyEr
0830: 72 6f 72 20 2d 6c 65 76 65 6c 20 31 22 20 69 73 ror -level 1" is
0840: 20 75 73 65 64 2c 20 61 6e 20 65 72 72 6f 72 20 used, an error
0850: 77 6f 75 6c 64 0a 2b 62 65 20 67 65 6e 65 72 61 would.+be genera
0860: 74 65 64 20 61 73 20 5b 72 65 74 75 72 6e 20 2d ted as [return -
0870: 65 72 72 6f 72 63 6f 64 65 20 4d 79 45 72 72 6f errorcode MyErro
0880: 72 20 2d 6c 65 76 65 6c 20 31 20 2d 63 6f 64 65 r -level 1 -code
0890: 20 65 72 72 6f 72 20 22 45 72 72 4d 73 67 22 5d error "ErrMsg"]
08a0: 2e 0a 2b 2e 53 48 20 22 45 58 41 4d 50 4c 45 53 ..+.SH "EXAMPLES
08b0: 22 0a 2b 2e 50 50 0a 2b 42 61 73 69 63 20 75 73 ".+.PP.+Basic us
08c0: 65 3a 0a 2b 2e 43 53 0a 2b 6e 61 6d 65 73 70 61 e:.+.CS.+namespa
08d0: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 74 63 6c 3a ce import ::tcl:
08e0: 3a 70 72 65 66 69 78 0a 2b 5c 66 42 70 72 65 66 :prefix.+\fBpref
08f0: 69 78 20 6d 61 74 63 68 5c 66 52 20 7b 61 70 61 ix match\fR {apa
0900: 20 62 65 70 61 20 63 65 70 61 7d 20 61 70 61 0a bepa cepa} apa.
0910: 2b 20 20 20 20 20 5c 66 49 5c 28 2d 3e 20 61 70 + \fI\(-> ap
0920: 61 5c 66 52 0a 2b 5c 66 42 70 72 65 66 69 78 20 a\fR.+\fBprefix
0930: 6d 61 74 63 68 5c 66 52 20 7b 61 70 61 20 62 65 match\fR {apa be
0940: 70 61 20 63 65 70 61 7d 20 61 0a 2b 20 20 20 20 pa cepa} a.+
0950: 20 5c 66 49 5c 28 2d 3e 20 61 70 61 5c 66 52 0a \fI\(-> apa\fR.
0960: 2b 5c 66 42 70 72 65 66 69 78 20 6d 61 74 63 68 +\fBprefix match
0970: 5c 66 52 20 2d 65 78 61 63 74 20 7b 61 70 61 20 \fR -exact {apa
0980: 62 65 70 61 20 63 65 70 61 7d 20 61 0a 2b 20 20 bepa cepa} a.+
0990: 20 20 20 5c 66 49 5c 28 2d 3e 20 62 61 64 20 6f \fI\(-> bad o
09a0: 70 74 69 6f 6e 20 22 61 22 3a 20 6d 75 73 74 20 ption "a": must
09b0: 62 65 20 61 70 61 2c 20 62 65 70 61 2c 20 6f 72 be apa, bepa, or
09c0: 20 63 65 70 61 5c 66 52 0a 2b 5c 66 42 70 72 65 cepa\fR.+\fBpre
09d0: 66 69 78 20 6d 61 74 63 68 5c 66 52 20 2d 6d 65 fix match\fR -me
09e0: 73 73 61 67 65 20 22 73 77 69 74 63 68 22 20 7b ssage "switch" {
09f0: 61 70 61 20 61 64 61 20 62 65 70 61 20 63 65 70 apa ada bepa cep
0a00: 61 7d 20 61 0a 2b 20 20 20 20 20 5c 66 49 5c 28 a} a.+ \fI\(
0a10: 2d 3e 20 61 6d 62 69 67 75 6f 75 73 20 73 77 69 -> ambiguous swi
0a20: 74 63 68 20 22 61 22 3a 20 6d 75 73 74 20 62 65 tch "a": must be
0a30: 20 61 70 61 2c 20 61 64 61 2c 20 62 65 70 61 2c apa, ada, bepa,
0a40: 20 6f 72 20 63 65 70 61 5c 66 52 0a 2b 5c 66 42 or cepa\fR.+\fB
0a50: 70 72 65 66 69 78 20 6c 6f 6e 67 65 73 74 5c 66 prefix longest\f
0a60: 52 20 7b 66 62 6c 6f 63 6b 65 64 20 66 63 6f 6e R {fblocked fcon
0a70: 66 69 67 75 72 65 20 66 63 6f 70 79 20 66 69 6c figure fcopy fil
0a80: 65 20 66 69 6c 65 65 76 65 6e 74 20 66 6c 75 73 e fileevent flus
0a90: 68 7d 20 66 63 0a 2b 20 20 20 20 20 5c 66 49 5c h} fc.+ \fI\
0aa0: 28 2d 3e 20 66 63 6f 5c 66 52 0a 2b 5c 66 42 70 (-> fco\fR.+\fBp
0ab0: 72 65 66 69 78 20 61 6c 6c 5c 66 52 20 7b 66 62 refix all\fR {fb
0ac0: 6c 6f 63 6b 65 64 20 66 63 6f 6e 66 69 67 75 72 locked fconfigur
0ad0: 65 20 66 63 6f 70 79 20 66 69 6c 65 20 66 69 6c e fcopy file fil
0ae0: 65 65 76 65 6e 74 20 66 6c 75 73 68 7d 20 66 63 eevent flush} fc
0af0: 0a 2b 20 20 20 20 20 5c 66 49 5c 28 2d 3e 20 66 .+ \fI\(-> f
0b00: 63 6f 6e 66 69 67 75 72 65 20 66 63 6f 70 79 5c configure fcopy\
0b10: 66 52 0a 2b 2e 43 45 0a 2b 2e 50 50 0a 2b 53 69 fR.+.CE.+.PP.+Si
0b20: 6d 70 6c 69 66 79 69 6e 67 20 6f 70 74 69 6f 6e mplifying option
0b30: 20 6d 61 74 63 68 69 6e 67 3a 0a 2b 2e 43 53 0a matching:.+.CS.
0b40: 2b 61 72 72 61 79 20 73 65 74 20 6f 70 74 73 20 +array set opts
0b50: 7b 2d 61 70 61 20 31 20 2d 62 65 70 61 20 22 22 {-apa 1 -bepa ""
0b60: 20 2d 63 65 70 61 20 30 7d 0a 2b 66 6f 72 65 61 -cepa 0}.+forea
0b70: 63 68 20 7b 61 72 67 20 76 61 6c 7d 20 24 61 72 ch {arg val} $ar
0b80: 67 73 20 7b 0a 2b 20 20 20 20 73 65 74 20 6f 70 gs {.+ set op
0b90: 74 73 28 5b 70 72 65 66 69 78 20 6d 61 74 63 68 ts([prefix match
0ba0: 20 7b 2d 61 70 61 20 2d 62 65 70 61 20 2d 63 65 {-apa -bepa -ce
0bb0: 70 61 7d 20 24 61 72 67 5d 29 20 24 76 61 6c 0a pa} $arg]) $val.
0bc0: 2b 7d 0a 2b 2e 43 45 0a 2b 2e 50 50 0a 2b 53 77 +}.+.CE.+.PP.+Sw
0bd0: 69 74 63 68 20 73 75 70 70 6f 72 74 69 6e 67 20 itch supporting
0be0: 70 72 65 66 69 78 65 73 3a 0a 2b 2e 43 53 0a 2b prefixes:.+.CS.+
0bf0: 73 77 69 74 63 68 20 5b 70 72 65 66 69 78 20 6d switch [prefix m
0c00: 61 74 63 68 20 7b 61 70 61 20 62 65 70 61 20 63 atch {apa bepa c
0c10: 65 70 61 7d 20 24 61 72 67 5d 20 7b 0a 2b 20 20 epa} $arg] {.+
0c20: 20 20 61 70 61 20 20 7b 20 7d 0a 2b 20 20 20 20 apa { }.+
0c30: 62 65 70 61 20 7b 20 7d 0a 2b 20 20 20 20 63 65 bepa { }.+ ce
0c40: 70 61 20 7b 20 7d 0a 2b 7d 0a 2b 2e 43 45 0a 2b pa { }.+}.+.CE.+
0c50: 2e 53 48 20 22 53 45 45 20 41 4c 53 4f 22 0a 2b .SH "SEE ALSO".+
0c60: 6c 73 65 61 72 63 68 28 6e 29 0a 2b 2e 53 48 20 lsearch(n).+.SH
0c70: 22 4b 45 59 57 4f 52 44 53 22 0a 2b 70 72 65 66 "KEYWORDS".+pref
0c80: 69 78 0a 64 69 66 66 20 2d 4e 75 72 20 2d 78 20 ix.diff -Nur -x
0c90: 2e 67 69 74 20 74 63 6c 6d 61 73 74 65 72 2f 67 .git tclmaster/g
0ca0: 65 6e 65 72 69 63 2f 74 63 6c 42 61 73 69 63 2e eneric/tclBasic.
0cb0: 63 20 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 c tcl/generic/tc
0cc0: 6c 42 61 73 69 63 2e 63 0a 2d 2d 2d 20 74 63 6c lBasic.c.--- tcl
0cd0: 6d 61 73 74 65 72 2f 67 65 6e 65 72 69 63 2f 74 master/generic/t
0ce0: 63 6c 42 61 73 69 63 2e 63 09 32 30 30 38 2d 30 clBasic.c.2008-0
0cf0: 39 2d 31 37 20 32 30 3a 35 37 3a 34 39 2e 30 30 9-17 20:57:49.00
0d00: 30 30 30 30 30 30 30 20 2b 30 32 30 30 0a 2b 2b 0000000 +0200.++
0d10: 2b 20 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 + tcl/generic/tc
0d20: 6c 42 61 73 69 63 2e 63 09 32 30 30 38 2d 30 39 lBasic.c.2008-09
0d30: 2d 31 39 20 32 30 3a 35 35 3a 31 33 2e 30 30 30 -19 20:55:13.000
0d40: 30 30 30 30 30 30 20 2b 30 32 30 30 0a 40 40 20 000000 +0200.@@
0d50: 2d 37 35 30 2c 36 20 2b 37 35 30 2c 37 20 40 40 -750,6 +750,7 @@
0d60: 0a 20 20 20 20 20 54 63 6c 49 6e 69 74 44 69 63 . TclInitDic
0d70: 74 43 6d 64 28 69 6e 74 65 72 70 29 3b 0a 20 20 tCmd(interp);.
0d80: 20 20 20 54 63 6c 49 6e 69 74 49 6e 66 6f 43 6d TclInitInfoCm
0d90: 64 28 69 6e 74 65 72 70 29 3b 0a 20 20 20 20 20 d(interp);.
0da0: 54 63 6c 49 6e 69 74 53 74 72 69 6e 67 43 6d 64 TclInitStringCmd
0db0: 28 69 6e 74 65 72 70 29 3b 0a 2b 20 20 20 20 54 (interp);.+ T
0dc0: 63 6c 49 6e 69 74 50 72 65 66 69 78 43 6d 64 28 clInitPrefixCmd(
0dd0: 69 6e 74 65 72 70 29 3b 0a 20 0a 20 20 20 20 20 interp);. .
0de0: 2f 2a 0a 20 20 20 20 20 20 2a 20 52 65 67 69 73 /*. * Regis
0df0: 74 65 72 20 22 63 6c 6f 63 6b 22 20 73 75 62 63 ter "clock" subc
0e00: 6f 6d 6d 61 6e 64 73 2e 20 54 68 65 73 65 20 2a ommands. These *
0e10: 64 6f 2a 20 67 6f 20 74 68 72 6f 75 67 68 0a 64 do* go through.d
0e20: 69 66 66 20 2d 4e 75 72 20 2d 78 20 2e 67 69 74 iff -Nur -x .git
0e30: 20 74 63 6c 6d 61 73 74 65 72 2f 67 65 6e 65 72 tclmaster/gener
0e40: 69 63 2f 74 63 6c 49 6e 64 65 78 4f 62 6a 2e 63 ic/tclIndexObj.c
0e50: 20 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c tcl/generic/tcl
0e60: 49 6e 64 65 78 4f 62 6a 2e 63 0a 2d 2d 2d 20 74 IndexObj.c.--- t
0e70: 63 6c 6d 61 73 74 65 72 2f 67 65 6e 65 72 69 63 clmaster/generic
0e80: 2f 74 63 6c 49 6e 64 65 78 4f 62 6a 2e 63 09 32 /tclIndexObj.c.2
0e90: 30 30 38 2d 30 31 2d 30 36 20 31 37 3a 30 37 3a 008-01-06 17:07:
0ea0: 30 38 2e 30 30 30 30 30 30 30 30 30 20 2b 30 31 08.000000000 +01
0eb0: 30 30 0a 2b 2b 2b 20 74 63 6c 2f 67 65 6e 65 72 00.+++ tcl/gener
0ec0: 69 63 2f 74 63 6c 49 6e 64 65 78 4f 62 6a 2e 63 ic/tclIndexObj.c
0ed0: 09 32 30 30 38 2d 30 39 2d 32 30 20 30 30 3a 33 .2008-09-20 00:3
0ee0: 35 3a 33 32 2e 30 30 30 30 30 30 30 30 30 20 2b 5:32.000000000 +
0ef0: 30 32 30 30 0a 40 40 20 2d 32 33 2c 36 20 2b 32 0200.@@ -23,6 +2
0f00: 33 2c 31 35 20 40 40 0a 20 73 74 61 74 69 63 20 3,15 @@. static
0f10: 76 6f 69 64 09 09 55 70 64 61 74 65 53 74 72 69 void..UpdateStri
0f20: 6e 67 4f 66 49 6e 64 65 78 28 54 63 6c 5f 4f 62 ngOfIndex(Tcl_Ob
0f30: 6a 20 2a 6f 62 6a 50 74 72 29 3b 0a 20 73 74 61 j *objPtr);. sta
0f40: 74 69 63 20 76 6f 69 64 09 09 44 75 70 49 6e 64 tic void..DupInd
0f50: 65 78 28 54 63 6c 5f 4f 62 6a 20 2a 73 72 63 50 ex(Tcl_Obj *srcP
0f60: 74 72 2c 20 54 63 6c 5f 4f 62 6a 20 2a 64 75 70 tr, Tcl_Obj *dup
0f70: 50 74 72 29 3b 0a 20 73 74 61 74 69 63 20 76 6f Ptr);. static vo
0f80: 69 64 09 09 46 72 65 65 49 6e 64 65 78 28 54 63 id..FreeIndex(Tc
0f90: 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 29 3b 0a l_Obj *objPtr);.
0fa0: 2b 73 74 61 74 69 63 20 69 6e 74 09 09 50 72 65 +static int..Pre
0fb0: 66 69 78 41 6c 6c 4f 62 6a 43 6d 64 28 43 6c 69 fixAllObjCmd(Cli
0fc0: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 entData clientDa
0fd0: 74 61 2c 0a 2b 09 09 09 20 20 20 20 54 63 6c 5f ta,.+... Tcl_
0fe0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 Interp *interp,
0ff0: 69 6e 74 20 6f 62 6a 63 2c 0a 2b 09 09 09 20 20 int objc,.+...
1000: 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 Tcl_Obj *const
1010: 20 6f 62 6a 76 5b 5d 29 3b 0a 2b 73 74 61 74 69 objv[]);.+stati
1020: 63 20 69 6e 74 09 09 50 72 65 66 69 78 4c 6f 6e c int..PrefixLon
1030: 67 65 73 74 4f 62 6a 43 6d 64 28 43 6c 69 65 6e gestObjCmd(Clien
1040: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 tData clientData
1050: 2c 0a 2b 09 09 09 20 20 20 20 54 63 6c 5f 49 6e ,.+... Tcl_In
1060: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e terp *interp, in
1070: 74 20 6f 62 6a 63 2c 0a 2b 09 09 09 20 20 20 20 t objc,.+...
1080: 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f Tcl_Obj *const o
1090: 62 6a 76 5b 5d 29 3b 0a 2b 73 74 61 74 69 63 20 bjv[]);.+static
10a0: 69 6e 74 09 09 50 72 65 66 69 78 4d 61 74 63 68 int..PrefixMatch
10b0: 4f 62 6a 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 ObjCmd(ClientDat
10c0: 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 09 a clientData,.+.
10d0: 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 .. Tcl_Interp
10e0: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 *interp, int ob
10f0: 6a 63 2c 0a 2b 09 09 09 20 20 20 20 54 63 6c 5f jc,.+... Tcl_
1100: 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b Obj *const objv[
1110: 5d 29 3b 0a 20 0a 20 2f 2a 0a 20 20 2a 20 54 68 ]);. . /*. * Th
1120: 65 20 73 74 72 75 63 74 75 72 65 20 62 65 6c 6f e structure belo
1130: 77 20 64 65 66 69 6e 65 73 20 74 68 65 20 69 6e w defines the in
1140: 64 65 78 20 54 63 6c 20 6f 62 6a 65 63 74 20 74 dex Tcl object t
1150: 79 70 65 20 62 79 20 6d 65 61 6e 73 20 6f 66 20 ype by means of
1160: 66 75 6e 63 74 69 6f 6e 73 0a 40 40 20 2d 34 36 functions.@@ -46
1170: 2c 39 20 2b 35 35 2c 39 20 40 40 0a 20 20 2a 2f ,9 +55,9 @@. */
1180: 0a 20 0a 20 74 79 70 65 64 65 66 20 73 74 72 75 . . typedef stru
1190: 63 74 20 7b 0a 2d 20 20 20 20 76 6f 69 64 20 2a ct {.- void *
11a0: 74 61 62 6c 65 50 74 72 3b 09 09 09 2f 2a 20 50 tablePtr;.../* P
11b0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 74 61 ointer to the ta
11c0: 62 6c 65 20 6f 66 20 73 74 72 69 6e 67 73 20 2a ble of strings *
11d0: 2f 0a 2d 20 20 20 20 69 6e 74 20 6f 66 66 73 65 /.- int offse
11e0: 74 3b 09 09 09 09 2f 2a 20 4f 66 66 73 65 74 20 t;..../* Offset
11f0: 62 65 74 77 65 65 6e 20 74 61 62 6c 65 20 65 6e between table en
1200: 74 72 69 65 73 20 2a 2f 0a 2d 20 20 20 20 69 6e tries */.- in
1210: 74 20 69 6e 64 65 78 3b 09 09 09 09 2f 2a 20 53 t index;..../* S
1220: 65 6c 65 63 74 65 64 20 69 6e 64 65 78 20 69 6e elected index in
1230: 74 6f 20 74 61 62 6c 65 2e 20 2a 2f 0a 2b 20 20 to table. */.+
1240: 20 20 76 6f 69 64 20 2a 74 61 62 6c 65 50 74 72 void *tablePtr
1250: 3b 09 09 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f ;../* Pointer to
1260: 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 73 74 the table of st
1270: 72 69 6e 67 73 20 2a 2f 0a 2b 20 20 20 20 69 6e rings */.+ in
1280: 74 20 6f 66 66 73 65 74 3b 09 09 09 2f 2a 20 4f t offset;.../* O
1290: 66 66 73 65 74 20 62 65 74 77 65 65 6e 20 74 61 ffset between ta
12a0: 62 6c 65 20 65 6e 74 72 69 65 73 20 2a 2f 0a 2b ble entries */.+
12b0: 20 20 20 20 69 6e 74 20 69 6e 64 65 78 3b 09 09 int index;..
12c0: 09 2f 2a 20 53 65 6c 65 63 74 65 64 20 69 6e 64 ./* Selected ind
12d0: 65 78 20 69 6e 74 6f 20 74 61 62 6c 65 2e 20 2a ex into table. *
12e0: 2f 0a 20 7d 20 49 6e 64 65 78 52 65 70 3b 0a 20 /. } IndexRep;.
12f0: 0a 20 2f 2a 0a 40 40 20 2d 37 32 2c 37 20 2b 38 . /*.@@ -72,7 +8
1300: 31 2c 37 20 40 40 0a 20 20 2a 0a 20 20 2a 20 52 1,7 @@. *. * R
1310: 65 73 75 6c 74 73 3a 0a 20 20 2a 09 49 66 20 74 esults:. *.If t
1320: 68 65 20 76 61 6c 75 65 20 6f 66 20 6f 62 6a 50 he value of objP
1330: 74 72 20 69 73 20 69 64 65 6e 74 69 63 61 6c 20 tr is identical
1340: 74 6f 20 6f 72 20 61 20 75 6e 69 71 75 65 20 61 to or a unique a
1350: 62 62 72 65 76 69 61 74 69 6f 6e 20 66 6f 72 0a bbreviation for.
1360: 2d 20 2a 09 6f 6e 65 20 6f 66 20 74 68 65 20 65 - *.one of the e
1370: 6e 74 72 69 65 73 20 69 6e 20 6f 62 6a 50 74 72 ntries in objPtr
1380: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 74 75 72 , then the retur
1390: 6e 20 76 61 6c 75 65 20 69 73 20 54 43 4c 5f 4f n value is TCL_O
13a0: 4b 20 61 6e 64 20 74 68 65 0a 2b 20 2a 09 6f 6e K and the.+ *.on
13b0: 65 20 6f 66 20 74 68 65 20 65 6e 74 72 69 65 73 e of the entries
13c0: 20 69 6e 20 74 61 62 6c 65 50 74 72 2c 20 74 68 in tablePtr, th
13d0: 65 6e 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 en the return va
13e0: 6c 75 65 20 69 73 20 54 43 4c 5f 4f 4b 20 61 6e lue is TCL_OK an
13f0: 64 20 74 68 65 0a 20 20 2a 09 69 6e 64 65 78 20 d the. *.index
1400: 6f 66 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 of the matching
1410: 65 6e 74 72 79 20 69 73 20 73 74 6f 72 65 64 20 entry is stored
1420: 61 74 20 2a 69 6e 64 65 78 50 74 72 2e 20 49 66 at *indexPtr. If
1430: 20 74 68 65 72 65 20 69 73 6e 27 74 20 61 0a 20 there isn't a.
1440: 20 2a 09 70 72 6f 70 65 72 20 6d 61 74 63 68 2c *.proper match,
1450: 20 74 68 65 6e 20 54 43 4c 5f 45 52 52 4f 52 20 then TCL_ERROR
1460: 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20 is returned and
1470: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 an error message
1480: 20 69 73 20 6c 65 66 74 0a 20 20 2a 09 69 6e 20 is left. *.in
1490: 69 6e 74 65 72 70 27 73 20 72 65 73 75 6c 74 20 interp's result
14a0: 28 75 6e 6c 65 73 73 20 69 6e 74 65 72 70 20 69 (unless interp i
14b0: 73 20 4e 55 4c 4c 29 2e 20 54 68 65 20 6d 73 67 s NULL). The msg
14c0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 75 73 65 argument is use
14d0: 64 0a 40 40 20 2d 31 32 37 2c 36 20 2b 31 33 36 d.@@ -127,6 +136
14e0: 2c 39 32 20 40 40 0a 20 2f 2a 0a 20 20 2a 2d 2d ,92 @@. /*. *--
14f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1530: 2d 2d 2d 2d 0a 20 20 2a 0a 2b 20 2a 20 54 63 6c ----. *.+ * Tcl
1540: 47 65 74 49 6e 64 65 78 46 72 6f 6d 4f 62 6a 4c GetIndexFromObjL
1550: 69 73 74 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a 09 54 ist --.+ *.+ *.T
1560: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6c 6f his procedure lo
1570: 6f 6b 73 20 75 70 20 61 6e 20 6f 62 6a 65 63 74 oks up an object
1580: 27 73 20 76 61 6c 75 65 20 69 6e 20 61 20 74 61 's value in a ta
1590: 62 6c 65 20 6f 66 20 73 74 72 69 6e 67 73 0a 2b ble of strings.+
15a0: 20 2a 09 61 6e 64 20 72 65 74 75 72 6e 73 20 74 *.and returns t
15b0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 he index of the
15c0: 6d 61 74 63 68 69 6e 67 20 73 74 72 69 6e 67 2c matching string,
15d0: 20 69 66 20 61 6e 79 2e 0a 2b 20 2a 0a 2b 20 2a if any..+ *.+ *
15e0: 20 52 65 73 75 6c 74 73 3a 0a 2b 20 2a 09 49 66 Results:.+ *.If
15f0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6f 62 the value of ob
1600: 6a 50 74 72 20 69 73 20 69 64 65 6e 74 69 63 61 jPtr is identica
1610: 6c 20 74 6f 20 6f 72 20 61 20 75 6e 69 71 75 65 l to or a unique
1620: 20 61 62 62 72 65 76 69 61 74 69 6f 6e 0a 2b 20 abbreviation.+
1630: 2a 09 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 *.for one of the
1640: 20 65 6e 74 72 69 65 73 20 69 6e 20 74 61 62 6c entries in tabl
1650: 65 4f 62 6a 50 74 72 2c 20 74 68 65 6e 20 74 68 eObjPtr, then th
1660: 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 e return value i
1670: 73 0a 2b 20 2a 09 54 43 4c 5f 4f 4b 20 61 6e 64 s.+ *.TCL_OK and
1680: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 the index of th
1690: 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 e matching entry
16a0: 20 69 73 20 73 74 6f 72 65 64 20 61 74 0a 2b 20 is stored at.+
16b0: 2a 09 2a 69 6e 64 65 78 50 74 72 2e 20 20 49 66 *.*indexPtr. If
16c0: 20 74 68 65 72 65 20 69 73 6e 27 74 20 61 20 70 there isn't a p
16d0: 72 6f 70 65 72 20 6d 61 74 63 68 2c 20 74 68 65 roper match, the
16e0: 6e 20 54 43 4c 5f 45 52 52 4f 52 20 69 73 0a 2b n TCL_ERROR is.+
16f0: 20 2a 09 72 65 74 75 72 6e 65 64 20 61 6e 64 20 *.returned and
1700: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 an error message
1710: 20 69 73 20 6c 65 66 74 20 69 6e 20 69 6e 74 65 is left in inte
1720: 72 70 27 73 20 72 65 73 75 6c 74 20 28 75 6e 6c rp's result (unl
1730: 65 73 73 0a 2b 20 2a 09 69 6e 74 65 72 70 20 69 ess.+ *.interp i
1740: 73 20 4e 55 4c 4c 29 2e 20 20 54 68 65 20 6d 73 s NULL). The ms
1750: 67 20 61 72 67 75 6d 65 6e 74 20 69 73 20 75 73 g argument is us
1760: 65 64 20 69 6e 20 74 68 65 20 65 72 72 6f 72 0a ed in the error.
1770: 2b 20 2a 09 6d 65 73 73 61 67 65 3b 20 66 6f 72 + *.message; for
1780: 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 6d 73 67 example, if msg
1790: 20 68 61 73 20 74 68 65 20 76 61 6c 75 65 20 22 has the value "
17a0: 6f 70 74 69 6f 6e 22 20 74 68 65 6e 20 74 68 65 option" then the
17b0: 0a 2b 20 2a 09 65 72 72 6f 72 20 6d 65 73 73 61 .+ *.error messa
17c0: 67 65 20 77 69 6c 6c 20 73 61 79 20 73 6f 6d 65 ge will say some
17d0: 74 68 69 6e 67 20 66 6c 61 67 20 27 62 61 64 20 thing flag 'bad
17e0: 6f 70 74 69 6f 6e 20 22 66 6f 6f 22 3a 20 6d 75 option "foo": mu
17f0: 73 74 20 62 65 0a 2b 20 2a 09 2e 2e 2e 27 0a 2b st be.+ *....'.+
1800: 20 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 *.+ * Side effe
1810: 63 74 73 3a 0a 2b 20 2a 09 54 68 65 20 72 65 73 cts:.+ *.The res
1820: 75 6c 74 20 6f 66 20 74 68 65 20 6c 6f 6f 6b 75 ult of the looku
1830: 70 20 69 73 20 63 61 63 68 65 64 20 61 73 20 74 p is cached as t
1840: 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 20 he internal rep
1850: 6f 66 0a 2b 20 2a 09 6f 62 6a 50 74 72 2c 20 73 of.+ *.objPtr, s
1860: 6f 20 74 68 61 74 20 72 65 70 65 61 74 65 64 20 o that repeated
1870: 6c 6f 6f 6b 75 70 73 20 63 61 6e 20 62 65 20 64 lookups can be d
1880: 6f 6e 65 20 71 75 69 63 6b 6c 79 2e 0a 2b 20 2a one quickly..+ *
1890: 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .+ *------------
18a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
18b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
18c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
18d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a ----------.+ */.
18e0: 2b 0a 2b 69 6e 74 0a 2b 54 63 6c 47 65 74 49 6e +.+int.+TclGetIn
18f0: 64 65 78 46 72 6f 6d 4f 62 6a 4c 69 73 74 28 0a dexFromObjList(.
1900: 2b 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 + Tcl_Interp
1910: 2a 69 6e 74 65 72 70 2c 20 09 2f 2a 20 55 73 65 *interp, ./* Use
1920: 64 20 66 6f 72 20 65 72 72 6f 72 20 72 65 70 6f d for error repo
1930: 72 74 69 6e 67 20 69 66 20 6e 6f 74 20 4e 55 4c rting if not NUL
1940: 4c 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 4f L. */.+ Tcl_O
1950: 62 6a 20 2a 6f 62 6a 50 74 72 2c 09 09 2f 2a 20 bj *objPtr,../*
1960: 4f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 69 6e Object containin
1970: 67 20 74 68 65 20 73 74 72 69 6e 67 20 74 6f 20 g the string to
1980: 6c 6f 6f 6b 75 70 2e 20 2a 2f 0a 2b 20 20 20 20 lookup. */.+
1990: 54 63 6c 5f 4f 62 6a 20 2a 74 61 62 6c 65 4f 62 Tcl_Obj *tableOb
19a0: 6a 50 74 72 2c 09 2f 2a 20 4c 69 73 74 20 6f 66 jPtr,./* List of
19b0: 20 73 74 72 69 6e 67 73 20 74 6f 20 63 6f 6d 70 strings to comp
19c0: 61 72 65 20 61 67 61 69 6e 73 74 20 74 68 65 0a are against the.
19d0: 2b 09 09 09 09 20 2a 20 76 61 6c 75 65 20 6f 66 +.... * value of
19e0: 20 6f 62 6a 50 74 72 2e 20 2a 2f 0a 2b 20 20 20 objPtr. */.+
19f0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6d 73 67 const char *msg
1a00: 2c 09 09 2f 2a 20 49 64 65 6e 74 69 66 79 69 6e ,../* Identifyin
1a10: 67 20 77 6f 72 64 20 74 6f 20 75 73 65 20 69 6e g word to use in
1a20: 20 65 72 72 6f 72 0a 2b 09 09 09 09 20 2a 20 6d error.+.... * m
1a30: 65 73 73 61 67 65 73 2e 20 2a 2f 0a 2b 20 20 20 essages. */.+
1a40: 20 69 6e 74 20 66 6c 61 67 73 2c 09 09 09 2f 2a int flags,.../*
1a50: 20 30 20 6f 72 20 54 43 4c 5f 45 58 41 43 54 20 0 or TCL_EXACT
1a60: 2a 2f 0a 2b 20 20 20 20 69 6e 74 20 2a 69 6e 64 */.+ int *ind
1a70: 65 78 50 74 72 29 09 09 2f 2a 20 50 6c 61 63 65 exPtr)../* Place
1a80: 20 74 6f 20 73 74 6f 72 65 20 72 65 73 75 6c 74 to store result
1a90: 69 6e 67 20 69 6e 74 65 67 65 72 20 69 6e 64 65 ing integer inde
1aa0: 78 2e 20 2a 2f 0a 2b 7b 0a 2b 0a 2b 20 20 20 20 x. */.+{.+.+
1ab0: 69 6e 74 20 6f 62 6a 63 2c 20 72 65 73 75 6c 74 int objc, result
1ac0: 2c 20 74 3b 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 , t;.+ Tcl_Ob
1ad0: 6a 20 2a 2a 6f 62 6a 76 3b 0a 2b 20 20 20 20 63 j **objv;.+ c
1ae0: 68 61 72 20 2a 2a 74 61 62 6c 65 50 74 72 3b 0a har **tablePtr;.
1af0: 2b 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 +.+ /*.+
1b00: 2a 20 55 73 65 20 54 63 6c 5f 47 65 74 49 6e 64 * Use Tcl_GetInd
1b10: 65 78 46 72 6f 6d 4f 62 6a 53 74 72 75 63 74 20 exFromObjStruct
1b20: 74 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 74 to do the work t
1b30: 6f 20 61 76 6f 69 64 20 64 75 70 6c 69 63 61 74 o avoid duplicat
1b40: 69 6e 67 0a 2b 20 20 20 20 20 2a 20 6d 6f 73 74 ing.+ * most
1b50: 20 6f 66 20 74 68 65 20 63 6f 64 65 20 74 68 65 of the code the
1b60: 72 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 62 re. This is a b
1b70: 69 74 20 69 6e 65 66 66 69 65 63 69 65 6e 74 20 it ineffiecient
1b80: 62 75 74 20 73 69 6d 70 6c 65 72 2e 0a 2b 20 20 but simpler..+
1b90: 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 72 65 73 */.+.+ res
1ba0: 75 6c 74 20 3d 20 54 63 6c 5f 4c 69 73 74 4f 62 ult = Tcl_ListOb
1bb0: 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74 jGetElements(int
1bc0: 65 72 70 2c 20 74 61 62 6c 65 4f 62 6a 50 74 72 erp, tableObjPtr
1bd0: 2c 20 26 6f 62 6a 63 2c 20 26 6f 62 6a 76 29 3b , &objc, &objv);
1be0: 0a 2b 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 .+ if (result
1bf0: 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 != TCL_OK) {.+.
1c00: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0a 2b return result;.+
1c10: 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 2f 2a 0a }.+.+ /*.
1c20: 2b 20 20 20 20 20 2a 20 42 75 69 6c 64 20 61 20 + * Build a
1c30: 73 74 72 69 6e 67 20 74 61 62 6c 65 20 66 72 6f string table fro
1c40: 6d 20 74 68 65 20 6c 69 73 74 2e 0a 2b 20 20 20 m the list..+
1c50: 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 74 61 62 6c */.+.+ tabl
1c60: 65 50 74 72 20 3d 20 28 63 68 61 72 20 2a 2a 29 ePtr = (char **)
1c70: 20 63 6b 61 6c 6c 6f 63 28 28 6f 62 6a 63 20 2b ckalloc((objc +
1c80: 20 31 29 20 2a 20 73 69 7a 65 6f 66 28 63 68 61 1) * sizeof(cha
1c90: 72 20 2a 29 29 3b 0a 2b 20 20 20 20 66 6f 72 20 r *));.+ for
1ca0: 28 74 20 3d 20 30 3b 20 74 20 3c 20 6f 62 6a 63 (t = 0; t < objc
1cb0: 3b 20 74 2b 2b 29 20 7b 0a 2b 09 69 66 20 28 6f ; t++) {.+.if (o
1cc0: 62 6a 76 5b 74 5d 20 3d 3d 20 6f 62 6a 50 74 72 bjv[t] == objPtr
1cd0: 29 20 7b 0a 2b 09 20 20 20 20 2f 2a 0a 2b 09 20 ) {.+. /*.+.
1ce0: 20 20 20 20 2a 20 41 6e 20 65 78 61 63 74 20 6d * An exact m
1cf0: 61 74 63 68 20 69 73 20 61 6c 77 61 79 73 20 63 atch is always c
1d00: 68 6f 73 65 6e 2c 20 73 6f 20 77 65 20 63 61 6e hosen, so we can
1d10: 20 73 74 6f 70 20 68 65 72 65 2e 0a 2b 09 20 20 stop here..+.
1d20: 20 20 20 2a 2f 0a 2b 0a 2b 09 20 20 20 20 63 6b */.+.+. ck
1d30: 66 72 65 65 28 28 63 68 61 72 20 2a 29 20 74 61 free((char *) ta
1d40: 62 6c 65 50 74 72 29 3b 0a 2b 09 20 20 20 20 2a blePtr);.+. *
1d50: 69 6e 64 65 78 50 74 72 20 3d 20 74 3b 0a 2b 09 indexPtr = t;.+.
1d60: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f return TCL_O
1d70: 4b 3b 0a 2b 09 7d 0a 2b 0a 2b 09 74 61 62 6c 65 K;.+.}.+.+.table
1d80: 50 74 72 5b 74 5d 20 3d 20 54 63 6c 5f 47 65 74 Ptr[t] = Tcl_Get
1d90: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 74 5d 29 3b String(objv[t]);
1da0: 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 74 61 62 .+ }.+ tab
1db0: 6c 65 50 74 72 5b 6f 62 6a 63 5d 20 3d 20 4e 55 lePtr[objc] = NU
1dc0: 4c 4c 3b 0a 2b 0a 2b 20 20 20 20 72 65 73 75 6c LL;.+.+ resul
1dd0: 74 20 3d 20 54 63 6c 5f 47 65 74 49 6e 64 65 78 t = Tcl_GetIndex
1de0: 46 72 6f 6d 4f 62 6a 53 74 72 75 63 74 28 69 6e FromObjStruct(in
1df0: 74 65 72 70 2c 20 6f 62 6a 50 74 72 2c 20 74 61 terp, objPtr, ta
1e00: 62 6c 65 50 74 72 2c 0a 2b 09 20 20 20 20 73 69 blePtr,.+. si
1e10: 7a 65 6f 66 28 63 68 61 72 20 2a 29 2c 20 6d 73 zeof(char *), ms
1e20: 67 2c 20 66 6c 61 67 73 2c 20 69 6e 64 65 78 50 g, flags, indexP
1e30: 74 72 29 3b 0a 2b 0a 2b 20 20 20 20 2f 2a 0a 2b tr);.+.+ /*.+
1e40: 20 20 20 20 20 2a 20 54 68 65 20 69 6e 74 65 72 * The inter
1e50: 6e 61 6c 20 72 65 70 20 6d 75 73 74 20 62 65 20 nal rep must be
1e60: 63 6c 65 61 72 65 64 20 73 69 6e 63 65 20 74 61 cleared since ta
1e70: 62 6c 65 50 74 72 20 77 69 6c 6c 20 67 6f 20 61 blePtr will go a
1e80: 77 61 79 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b 0a way..+ */.+.
1e90: 2b 20 20 20 20 54 63 6c 46 72 65 65 49 6e 74 52 + TclFreeIntR
1ea0: 65 70 28 6f 62 6a 50 74 72 29 3b 0a 2b 20 20 20 ep(objPtr);.+
1eb0: 20 6f 62 6a 50 74 72 2d 3e 74 79 70 65 50 74 72 objPtr->typePtr
1ec0: 20 3d 20 4e 55 4c 4c 3b 0a 2b 20 20 20 20 63 6b = NULL;.+ ck
1ed0: 66 72 65 65 28 28 63 68 61 72 20 2a 29 20 74 61 free((char *) ta
1ee0: 62 6c 65 50 74 72 29 3b 0a 2b 0a 2b 20 20 20 20 blePtr);.+.+
1ef0: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0a 2b return result;.+
1f00: 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d }.+..+/*.+ *----
1f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1f50: 2d 2d 0a 2b 20 2a 0a 20 20 2a 20 54 63 6c 5f 47 --.+ *. * Tcl_G
1f60: 65 74 49 6e 64 65 78 46 72 6f 6d 4f 62 6a 53 74 etIndexFromObjSt
1f70: 72 75 63 74 20 2d 2d 0a 20 20 2a 0a 20 20 2a 09 ruct --. *. *.
1f80: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 6c 6f This function lo
1f90: 6f 6b 73 20 75 70 20 61 6e 20 6f 62 6a 65 63 74 oks up an object
1fa0: 27 73 20 76 61 6c 75 65 20 67 69 76 65 6e 20 61 's value given a
1fb0: 20 73 74 61 72 74 69 6e 67 20 73 74 72 69 6e 67 starting string
1fc0: 20 61 6e 64 0a 40 40 20 2d 31 33 35 2c 37 20 2b and.@@ -135,7 +
1fd0: 32 33 30 2c 37 20 40 40 0a 20 20 2a 0a 20 20 2a 230,7 @@. *. *
1fe0: 20 52 65 73 75 6c 74 73 3a 0a 20 20 2a 09 49 66 Results:. *.If
1ff0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6f 62 the value of ob
2000: 6a 50 74 72 20 69 73 20 69 64 65 6e 74 69 63 61 jPtr is identica
2010: 6c 20 74 6f 20 6f 72 20 61 20 75 6e 69 71 75 65 l to or a unique
2020: 20 61 62 62 72 65 76 69 61 74 69 6f 6e 20 66 6f abbreviation fo
2030: 72 0a 2d 20 2a 09 6f 6e 65 20 6f 66 20 74 68 65 r.- *.one of the
2040: 20 65 6e 74 72 69 65 73 20 69 6e 20 6f 62 6a 50 entries in objP
2050: 74 72 2c 20 74 68 65 6e 20 74 68 65 20 72 65 74 tr, then the ret
2060: 75 72 6e 20 76 61 6c 75 65 20 69 73 20 54 43 4c urn value is TCL
2070: 5f 4f 4b 20 61 6e 64 20 74 68 65 0a 2b 20 2a 09 _OK and the.+ *.
2080: 6f 6e 65 20 6f 66 20 74 68 65 20 65 6e 74 72 69 one of the entri
2090: 65 73 20 69 6e 20 74 61 62 6c 65 50 74 72 2c 20 es in tablePtr,
20a0: 74 68 65 6e 20 74 68 65 20 72 65 74 75 72 6e 20 then the return
20b0: 76 61 6c 75 65 20 69 73 20 54 43 4c 5f 4f 4b 20 value is TCL_OK
20c0: 61 6e 64 20 74 68 65 0a 20 20 2a 09 69 6e 64 65 and the. *.inde
20d0: 78 20 6f 66 20 74 68 65 20 6d 61 74 63 68 69 6e x of the matchin
20e0: 67 20 65 6e 74 72 79 20 69 73 20 73 74 6f 72 65 g entry is store
20f0: 64 20 61 74 20 2a 69 6e 64 65 78 50 74 72 2e 20 d at *indexPtr.
2100: 49 66 20 74 68 65 72 65 20 69 73 6e 27 74 20 61 If there isn't a
2110: 0a 20 20 2a 09 70 72 6f 70 65 72 20 6d 61 74 63 . *.proper matc
2120: 68 2c 20 74 68 65 6e 20 54 43 4c 5f 45 52 52 4f h, then TCL_ERRO
2130: 52 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e R is returned an
2140: 64 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 d an error messa
2150: 67 65 20 69 73 20 6c 65 66 74 0a 20 20 2a 09 69 ge is left. *.i
2160: 6e 20 69 6e 74 65 72 70 27 73 20 72 65 73 75 6c n interp's resul
2170: 74 20 28 75 6e 6c 65 73 73 20 69 6e 74 65 72 70 t (unless interp
2180: 20 69 73 20 4e 55 4c 4c 29 2e 20 54 68 65 20 6d is NULL). The m
2190: 73 67 20 61 72 67 75 6d 65 6e 74 20 69 73 20 75 sg argument is u
21a0: 73 65 64 0a 40 40 20 2d 32 34 36 2c 38 20 2b 33 sed.@@ -246,8 +3
21b0: 34 31 2c 38 20 40 40 0a 20 20 09 6f 62 6a 50 74 41,8 @@. .objPt
21c0: 72 2d 3e 74 79 70 65 50 74 72 20 3d 20 26 69 6e r->typePtr = &in
21d0: 64 65 78 54 79 70 65 3b 0a 20 20 20 20 20 7d 0a dexType;. }.
21e0: 20 20 20 20 20 69 6e 64 65 78 52 65 70 2d 3e 74 indexRep->t
21f0: 61 62 6c 65 50 74 72 20 3d 20 28 76 6f 69 64 20 ablePtr = (void
2200: 2a 29 20 74 61 62 6c 65 50 74 72 3b 0a 2d 20 20 *) tablePtr;.-
2210: 20 20 69 6e 64 65 78 52 65 70 2d 3e 6f 66 66 73 indexRep->offs
2220: 65 74 20 3d 20 6f 66 66 73 65 74 3b 0a 2d 20 20 et = offset;.-
2230: 20 20 69 6e 64 65 78 52 65 70 2d 3e 69 6e 64 65 indexRep->inde
2240: 78 20 3d 20 69 6e 64 65 78 3b 0a 2b 20 20 20 20 x = index;.+
2250: 69 6e 64 65 78 52 65 70 2d 3e 6f 66 66 73 65 74 indexRep->offset
2260: 20 20 20 3d 20 6f 66 66 73 65 74 3b 0a 2b 20 20 = offset;.+
2270: 20 20 69 6e 64 65 78 52 65 70 2d 3e 69 6e 64 65 indexRep->inde
2280: 78 20 20 20 20 3d 20 69 6e 64 65 78 3b 0a 20 0a x = index;. .
2290: 20 20 20 20 20 2a 69 6e 64 65 78 50 74 72 20 3d *indexPtr =
22a0: 20 69 6e 64 65 78 3b 0a 20 20 20 20 20 72 65 74 index;. ret
22b0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 40 40 20 2d urn TCL_OK;.@@ -
22c0: 33 33 36 2c 37 20 2b 34 33 31 2c 37 20 40 40 0a 336,7 +431,7 @@.
22d0: 20 20 20 20 20 72 65 67 69 73 74 65 72 20 63 68 register ch
22e0: 61 72 20 2a 62 75 66 3b 0a 20 20 20 20 20 72 65 ar *buf;. re
22f0: 67 69 73 74 65 72 20 75 6e 73 69 67 6e 65 64 20 gister unsigned
2300: 6c 65 6e 3b 0a 20 20 20 20 20 72 65 67 69 73 74 len;. regist
2310: 65 72 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 69 er const char *i
2320: 6e 64 65 78 53 74 72 20 3d 20 45 58 50 41 4e 44 ndexStr = EXPAND
2330: 5f 4f 46 28 69 6e 64 65 78 52 65 70 29 3b 0a 2d _OF(indexRep);.-
2340: 0a 2b 09 20 20 20 20 0a 20 20 20 20 20 6c 65 6e .+. . len
2350: 20 3d 20 73 74 72 6c 65 6e 28 69 6e 64 65 78 53 = strlen(indexS
2360: 74 72 29 3b 0a 20 20 20 20 20 62 75 66 20 3d 20 tr);. buf =
2370: 28 63 68 61 72 20 2a 29 20 63 6b 61 6c 6c 6f 63 (char *) ckalloc
2380: 28 6c 65 6e 20 2b 20 31 29 3b 0a 20 20 20 20 20 (len + 1);.
2390: 6d 65 6d 63 70 79 28 62 75 66 2c 20 69 6e 64 65 memcpy(buf, inde
23a0: 78 53 74 72 2c 20 6c 65 6e 2b 31 29 3b 0a 40 40 xStr, len+1);.@@
23b0: 20 2d 34 30 32 2c 36 20 2b 34 39 37 2c 33 30 38 -402,6 +497,308
23c0: 20 40 40 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d @@. /*. *-----
23d0: 2d 2d 2d 2d 2d 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 0a 20 20 2a 0a 2b 20 2a 20 54 63 6c 49 6e 69 -. *.+ * TclIni
2420: 74 50 72 65 66 69 78 43 6d 64 20 2d 2d 0a 2b 20 tPrefixCmd --.+
2430: 2a 0a 2b 20 2a 09 54 68 69 73 20 70 72 6f 63 65 *.+ *.This proce
2440: 64 75 72 65 20 63 72 65 61 74 65 73 20 74 68 65 dure creates the
2450: 20 22 70 72 65 66 69 78 22 20 54 63 6c 20 63 6f "prefix" Tcl co
2460: 6d 6d 61 6e 64 2e 20 53 65 65 20 74 68 65 20 75 mmand. See the u
2470: 73 65 72 0a 2b 20 2a 09 64 6f 63 75 6d 65 6e 74 ser.+ *.document
2480: 61 74 69 6f 6e 20 66 6f 72 20 64 65 74 61 69 6c ation for detail
2490: 73 20 6f 6e 20 77 68 61 74 20 69 74 20 64 6f 65 s on what it doe
24a0: 73 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c s..+ *.+ * Resul
24b0: 74 73 3a 0a 2b 20 2a 09 41 20 73 74 61 6e 64 61 ts:.+ *.A standa
24c0: 72 64 20 54 63 6c 20 72 65 73 75 6c 74 2e 0a 2b rd Tcl result..+
24d0: 20 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 *.+ * Side effe
24e0: 63 74 73 3a 0a 2b 20 2a 09 53 65 65 20 74 68 65 cts:.+ *.See the
24f0: 20 75 73 65 72 20 64 6f 63 75 6d 65 6e 74 61 74 user documentat
2500: 69 6f 6e 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d ion..+ *.+ *----
2510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2550: 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 54 63 6c 5f 43 --.+ */.+.+Tcl_C
2560: 6f 6d 6d 61 6e 64 0a 2b 54 63 6c 49 6e 69 74 50 ommand.+TclInitP
2570: 72 65 66 69 78 43 6d 64 28 0a 2b 20 20 20 20 54 refixCmd(.+ T
2580: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
2590: 70 29 09 09 2f 2a 20 43 75 72 72 65 6e 74 20 69 p)../* Current i
25a0: 6e 74 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a 2b nterpreter. */.+
25b0: 7b 0a 2b 20 20 20 20 73 74 61 74 69 63 20 63 6f {.+ static co
25c0: 6e 73 74 20 45 6e 73 65 6d 62 6c 65 49 6d 70 6c nst EnsembleImpl
25d0: 4d 61 70 20 70 72 65 66 69 78 49 6d 70 6c 4d 61 Map prefixImplMa
25e0: 70 5b 5d 20 3d 20 7b 0a 2b 09 7b 22 61 6c 6c 22 p[] = {.+.{"all"
25f0: 2c 09 09 50 72 65 66 69 78 41 6c 6c 4f 62 6a 43 ,..PrefixAllObjC
2600: 6d 64 2c 09 4e 55 4c 4c 7d 2c 0a 2b 09 7b 22 6c md,.NULL},.+.{"l
2610: 6f 6e 67 65 73 74 22 2c 09 50 72 65 66 69 78 4c ongest",.PrefixL
2620: 6f 6e 67 65 73 74 4f 62 6a 43 6d 64 2c 09 4e 55 ongestObjCmd,.NU
2630: 4c 4c 7d 2c 0a 2b 09 7b 22 6d 61 74 63 68 22 2c LL},.+.{"match",
2640: 09 50 72 65 66 69 78 4d 61 74 63 68 4f 62 6a 43 .PrefixMatchObjC
2650: 6d 64 2c 09 4e 55 4c 4c 7d 2c 0a 2b 09 7b 4e 55 md,.NULL},.+.{NU
2660: 4c 4c 7d 0a 2b 20 20 20 20 7d 3b 0a 2b 0a 2b 20 LL}.+ };.+.+
2670: 20 20 20 72 65 74 75 72 6e 20 54 63 6c 4d 61 6b return TclMak
2680: 65 45 6e 73 65 6d 62 6c 65 28 69 6e 74 65 72 70 eEnsemble(interp
2690: 2c 20 22 74 63 6c 3a 3a 70 72 65 66 69 78 22 2c , "tcl::prefix",
26a0: 20 70 72 65 66 69 78 49 6d 70 6c 4d 61 70 29 3b prefixImplMap);
26b0: 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 2d 2d 2d 2d 2d 2d .+}.+..+/*------
26c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
26d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
26e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
26f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2700: 0a 2b 20 2a 0a 2b 20 2a 20 50 72 65 66 69 78 4d .+ *.+ * PrefixM
2710: 61 74 63 68 4f 62 6a 43 6d 64 20 2d 0a 2b 20 2a atchObjCmd -.+ *
2720: 0a 2b 20 2a 09 54 68 69 73 20 66 75 6e 63 74 69 .+ *.This functi
2730: 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 on implements th
2740: 65 20 27 70 72 65 66 69 78 20 6d 61 74 63 68 27 e 'prefix match'
2750: 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 2e 20 52 65 Tcl command. Re
2760: 66 65 72 0a 2b 20 2a 09 74 6f 20 74 68 65 20 75 fer.+ *.to the u
2770: 73 65 72 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f ser documentatio
2780: 6e 20 66 6f 72 20 64 65 74 61 69 6c 73 20 6f 6e n for details on
2790: 20 77 68 61 74 20 69 74 20 64 6f 65 73 2e 0a 2b what it does..+
27a0: 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a *.+ * Results:.
27b0: 2b 20 2a 09 52 65 74 75 72 6e 73 20 61 20 73 74 + *.Returns a st
27c0: 61 6e 64 61 72 64 20 54 63 6c 20 72 65 73 75 6c andard Tcl resul
27d0: 74 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69 64 65 20 t..+ *.+ * Side
27e0: 65 66 66 65 63 74 73 3a 0a 2b 20 2a 09 4e 6f 6e effects:.+ *.Non
27f0: 65 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d e..+ *.+ *------
2800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 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: 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63 20 .+ */.+.+static
2850: 69 6e 74 0a 2b 50 72 65 66 69 78 4d 61 74 63 68 int.+PrefixMatch
2860: 4f 62 6a 43 6d 64 28 0a 2b 20 20 20 20 43 6c 69 ObjCmd(.+ Cli
2870: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 entData clientDa
2880: 74 61 2c 09 09 2f 2a 20 4e 6f 74 20 75 73 65 64 ta,../* Not used
2890: 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 49 6e . */.+ Tcl_In
28a0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 09 09 09 terp *interp,...
28b0: 2f 2a 20 43 75 72 72 65 6e 74 20 69 6e 74 65 72 /* Current inter
28c0: 70 72 65 74 65 72 2e 20 2a 2f 0a 2b 20 20 20 20 preter. */.+
28d0: 69 6e 74 20 6f 62 6a 63 2c 09 09 09 09 2f 2a 20 int objc,..../*
28e0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 Number of argume
28f0: 6e 74 73 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c nts. */.+ Tcl
2900: 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 _Obj *const objv
2910: 5b 5d 29 20 20 20 20 20 20 20 09 2f 2a 20 41 72 []) ./* Ar
2920: 67 75 6d 65 6e 74 20 6f 62 6a 65 63 74 73 2e 20 gument objects.
2930: 2a 2f 0a 2b 7b 0a 2b 20 20 20 20 69 6e 74 20 66 */.+{.+ int f
2940: 6c 61 67 73 20 3d 20 30 2c 20 72 65 73 75 6c 74 lags = 0, result
2950: 2c 20 69 6e 64 65 78 3b 0a 2b 20 20 20 20 69 6e , index;.+ in
2960: 74 20 64 75 6d 6d 79 4c 65 6e 67 74 68 2c 20 69 t dummyLength, i
2970: 2c 20 65 72 72 6f 72 4c 65 6e 67 74 68 3b 0a 2b , errorLength;.+
2980: 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 65 72 72 Tcl_Obj *err
2990: 6f 72 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 2b 20 orPtr = NULL;.+
29a0: 20 20 20 63 68 61 72 20 2a 6d 65 73 73 61 67 65 char *message
29b0: 20 3d 20 22 6f 70 74 69 6f 6e 22 3b 0a 2b 20 20 = "option";.+
29c0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 74 61 62 6c 65 Tcl_Obj *table
29d0: 50 74 72 2c 20 2a 6f 62 6a 50 74 72 2c 20 2a 72 Ptr, *objPtr, *r
29e0: 65 73 75 6c 74 50 74 72 3b 0a 2b 20 20 20 20 73 esultPtr;.+ s
29f0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 tatic const char
2a00: 20 2a 6d 61 74 63 68 4f 70 74 69 6f 6e 73 5b 5d *matchOptions[]
2a10: 20 3d 20 7b 0a 2b 09 22 2d 65 72 72 6f 72 22 2c = {.+."-error",
2a20: 20 22 2d 65 78 61 63 74 22 2c 20 22 2d 6d 65 73 "-exact", "-mes
2a30: 73 61 67 65 22 2c 20 28 63 68 61 72 20 2a 29 20 sage", (char *)
2a40: 4e 55 4c 4c 0a 2b 20 20 20 20 7d 3b 0a 2b 20 20 NULL.+ };.+
2a50: 20 20 65 6e 75 6d 20 6d 61 74 63 68 4f 70 74 69 enum matchOpti
2a60: 6f 6e 73 20 7b 0a 2b 09 50 52 46 4d 41 54 43 48 ons {.+.PRFMATCH
2a70: 5f 45 52 52 4f 52 2c 20 50 52 46 4d 41 54 43 48 _ERROR, PRFMATCH
2a80: 5f 45 58 41 43 54 2c 20 50 52 46 4d 41 54 43 48 _EXACT, PRFMATCH
2a90: 5f 4d 45 53 53 41 47 45 0a 2b 20 20 20 20 7d 3b _MESSAGE.+ };
2aa0: 20 20 0a 2b 0a 2b 20 20 20 20 69 66 20 28 6f 62 .+.+ if (ob
2ab0: 6a 63 20 3c 20 33 29 20 7b 0a 2b 09 54 63 6c 5f jc < 3) {.+.Tcl_
2ac0: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 WrongNumArgs(int
2ad0: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f erp, 1, objv, "?
2ae0: 6f 70 74 69 6f 6e 73 3f 20 74 61 62 6c 65 20 73 options? table s
2af0: 74 72 69 6e 67 22 29 3b 0a 2b 09 72 65 74 75 72 tring");.+.retur
2b00: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 n TCL_ERROR;.+
2b10: 20 20 7d 0a 2b 0a 2b 20 20 20 20 66 6f 72 20 28 }.+.+ for (
2b20: 69 20 3d 20 31 3b 20 69 20 3c 20 28 6f 62 6a 63 i = 1; i < (objc
2b30: 20 2d 20 32 29 3b 20 69 2b 2b 29 20 7b 0a 2b 09 - 2); i++) {.+.
2b40: 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 64 65 78 if (Tcl_GetIndex
2b50: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 FromObj(interp,
2b60: 6f 62 6a 76 5b 69 5d 2c 20 6d 61 74 63 68 4f 70 objv[i], matchOp
2b70: 74 69 6f 6e 73 2c 20 22 6f 70 74 69 6f 6e 22 2c tions, "option",
2b80: 20 30 2c 0a 2b 09 09 20 20 20 20 26 69 6e 64 65 0,.+.. &inde
2b90: 78 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a x) != TCL_OK) {.
2ba0: 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c +. return TCL
2bb0: 5f 45 52 52 4f 52 3b 0a 2b 09 7d 0a 2b 09 73 77 _ERROR;.+.}.+.sw
2bc0: 69 74 63 68 20 28 28 65 6e 75 6d 20 6d 61 74 63 itch ((enum matc
2bd0: 68 4f 70 74 69 6f 6e 73 29 20 69 6e 64 65 78 29 hOptions) index)
2be0: 20 7b 0a 2b 09 20 20 20 20 63 61 73 65 20 50 52 {.+. case PR
2bf0: 46 4d 41 54 43 48 5f 45 58 41 43 54 3a 0a 2b 09 FMATCH_EXACT:.+.
2c00: 09 66 6c 61 67 73 20 7c 3d 20 54 43 4c 5f 45 58 .flags |= TCL_EX
2c10: 41 43 54 3b 0a 2b 09 09 62 72 65 61 6b 3b 0a 2b ACT;.+..break;.+
2c20: 09 20 20 20 20 63 61 73 65 20 50 52 46 4d 41 54 . case PRFMAT
2c30: 43 48 5f 4d 45 53 53 41 47 45 3a 0a 2b 09 09 69 CH_MESSAGE:.+..i
2c40: 66 20 28 69 20 3e 20 28 6f 62 6a 63 20 2d 20 34 f (i > (objc - 4
2c50: 29 29 20 7b 0a 2b 09 09 20 20 20 20 54 63 6c 5f )) {.+.. Tcl_
2c60: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 AppendResult(int
2c70: 65 72 70 2c 20 22 6d 69 73 73 69 6e 67 20 6d 65 erp, "missing me
2c80: 73 73 61 67 65 22 2c 20 4e 55 4c 4c 29 3b 0a 2b ssage", NULL);.+
2c90: 09 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c .. return TCL
2ca0: 5f 45 52 52 4f 52 3b 0a 2b 09 09 7d 0a 2b 09 09 _ERROR;.+..}.+..
2cb0: 69 2b 2b 3b 0a 2b 09 09 6d 65 73 73 61 67 65 20 i++;.+..message
2cc0: 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 = Tcl_GetString(
2cd0: 6f 62 6a 76 5b 69 5d 29 3b 0a 2b 09 09 62 72 65 objv[i]);.+..bre
2ce0: 61 6b 3b 0a 2b 09 20 20 20 20 63 61 73 65 20 50 ak;.+. case P
2cf0: 52 46 4d 41 54 43 48 5f 45 52 52 4f 52 3a 0a 2b RFMATCH_ERROR:.+
2d00: 09 09 69 66 20 28 69 20 3e 20 28 6f 62 6a 63 20 ..if (i > (objc
2d10: 2d 20 34 29 29 20 7b 0a 2b 09 09 20 20 20 20 54 - 4)) {.+.. T
2d20: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 cl_AppendResult(
2d30: 69 6e 74 65 72 70 2c 20 22 6d 69 73 73 69 6e 67 interp, "missing
2d40: 20 65 72 72 6f 72 20 6f 70 74 69 6f 6e 73 22 2c error options",
2d50: 20 4e 55 4c 4c 29 3b 0a 2b 09 09 20 20 20 20 72 NULL);.+.. r
2d60: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
2d70: 0a 2b 09 09 7d 0a 2b 09 09 69 2b 2b 3b 0a 2b 09 .+..}.+..i++;.+.
2d80: 09 72 65 73 75 6c 74 20 3d 20 54 63 6c 5f 4c 69 .result = Tcl_Li
2d90: 73 74 4f 62 6a 4c 65 6e 67 74 68 28 69 6e 74 65 stObjLength(inte
2da0: 72 70 2c 20 6f 62 6a 76 5b 69 5d 2c 20 26 65 72 rp, objv[i], &er
2db0: 72 6f 72 4c 65 6e 67 74 68 29 3b 0a 2b 09 09 69 rorLength);.+..i
2dc0: 66 20 28 72 65 73 75 6c 74 20 21 3d 20 54 43 4c f (result != TCL
2dd0: 5f 4f 4b 29 20 7b 0a 2b 09 09 20 20 20 20 72 65 _OK) {.+.. re
2de0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a turn TCL_ERROR;.
2df0: 2b 09 09 7d 0a 2b 09 09 69 66 20 28 28 65 72 72 +..}.+..if ((err
2e00: 6f 72 4c 65 6e 67 74 68 20 25 20 32 29 20 21 3d orLength % 2) !=
2e10: 20 30 29 20 7b 0a 2b 09 09 20 20 20 20 54 63 6c 0) {.+.. Tcl
2e20: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e _AppendResult(in
2e30: 74 65 72 70 2c 20 22 65 72 72 6f 72 20 6f 70 74 terp, "error opt
2e40: 69 6f 6e 73 20 6d 75 73 74 20 68 61 76 65 20 61 ions must have a
2e50: 6e 20 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66 n even number of
2e60: 20 65 6c 65 6d 65 6e 74 73 22 2c 20 4e 55 4c 4c elements", NULL
2e70: 29 3b 0a 2b 09 09 20 20 20 20 72 65 74 75 72 6e );.+.. return
2e80: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 09 7d TCL_ERROR;.+..}
2e90: 09 09 20 20 20 20 0a 2b 09 09 65 72 72 6f 72 50 .. .+..errorP
2ea0: 74 72 20 3d 20 6f 62 6a 76 5b 69 5d 3b 0a 2b 09 tr = objv[i];.+.
2eb0: 09 62 72 65 61 6b 3b 0a 2b 09 7d 0a 2b 20 20 20 .break;.+.}.+
2ec0: 20 7d 0a 2b 0a 2b 20 20 20 20 74 61 62 6c 65 50 }.+.+ tableP
2ed0: 74 72 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 32 tr = objv[objc-2
2ee0: 5d 3b 0a 2b 20 20 20 20 6f 62 6a 50 74 72 20 20 ];.+ objPtr
2ef0: 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 31 5d 3b = objv[objc-1];
2f00: 0a 2b 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20 .+.+ /*.+
2f10: 20 2a 20 43 68 65 63 6b 20 74 68 61 74 20 74 61 * Check that ta
2f20: 62 6c 65 20 69 73 20 61 20 76 61 6c 69 64 20 6c ble is a valid l
2f30: 69 73 74 20 66 69 72 73 74 2c 20 73 69 6e 63 65 ist first, since
2f40: 20 77 65 20 77 61 6e 74 20 74 6f 20 68 61 6e 64 we want to hand
2f50: 6c 65 0a 2b 20 20 20 20 20 2a 20 74 68 61 74 20 le.+ * that
2f60: 65 72 72 6f 72 20 63 61 73 65 20 72 65 67 61 72 error case regar
2f70: 64 6c 65 73 73 20 6f 66 20 6c 65 76 65 6c 2e 0a dless of level..
2f80: 2b 20 20 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 + */.+.+
2f90: 72 65 73 75 6c 74 20 3d 20 54 63 6c 5f 4c 69 73 result = Tcl_Lis
2fa0: 74 4f 62 6a 4c 65 6e 67 74 68 28 69 6e 74 65 72 tObjLength(inter
2fb0: 70 2c 20 74 61 62 6c 65 50 74 72 2c 20 26 64 75 p, tablePtr, &du
2fc0: 6d 6d 79 4c 65 6e 67 74 68 29 3b 0a 2b 20 20 20 mmyLength);.+
2fd0: 20 69 66 20 28 72 65 73 75 6c 74 20 21 3d 20 54 if (result != T
2fe0: 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 72 65 74 75 72 CL_OK) {.+.retur
2ff0: 6e 20 72 65 73 75 6c 74 3b 0a 2b 20 20 20 20 7d n result;.+ }
3000: 0a 2b 0a 2b 20 20 20 20 72 65 73 75 6c 74 20 3d .+.+ result =
3010: 20 54 63 6c 47 65 74 49 6e 64 65 78 46 72 6f 6d TclGetIndexFrom
3020: 4f 62 6a 4c 69 73 74 28 69 6e 74 65 72 70 2c 20 ObjList(interp,
3030: 6f 62 6a 50 74 72 2c 20 74 61 62 6c 65 50 74 72 objPtr, tablePtr
3040: 2c 20 6d 65 73 73 61 67 65 2c 20 66 6c 61 67 73 , message, flags
3050: 2c 0a 2b 09 20 20 20 20 26 69 6e 64 65 78 29 3b ,.+. &index);
3060: 0a 2b 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 .+ if (result
3070: 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 != TCL_OK) {.+.
3080: 69 66 20 28 65 72 72 6f 72 50 74 72 20 21 3d 20 if (errorPtr !=
3090: 4e 55 4c 4c 20 26 26 20 65 72 72 6f 72 4c 65 6e NULL && errorLen
30a0: 67 74 68 20 3d 3d 20 30 29 20 7b 0a 2b 09 20 20 gth == 0) {.+.
30b0: 20 20 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c Tcl_ResetResul
30c0: 74 28 69 6e 74 65 72 70 29 3b 0a 2b 09 20 20 20 t(interp);.+.
30d0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a return TCL_OK;.
30e0: 2b 09 7d 20 65 6c 73 65 20 69 66 20 28 65 72 72 +.} else if (err
30f0: 6f 72 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b orPtr == NULL) {
3100: 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 .+. return TC
3110: 4c 5f 45 52 52 4f 52 3b 0a 2b 09 7d 20 65 6c 73 L_ERROR;.+.} els
3120: 65 20 7b 0a 2b 09 20 20 20 20 69 66 20 28 54 63 e {.+. if (Tc
3130: 6c 5f 49 73 53 68 61 72 65 64 28 65 72 72 6f 72 l_IsShared(error
3140: 50 74 72 29 29 20 7b 0a 2b 09 09 65 72 72 6f 72 Ptr)) {.+..error
3150: 50 74 72 20 3d 20 54 63 6c 5f 44 75 70 6c 69 63 Ptr = Tcl_Duplic
3160: 61 74 65 4f 62 6a 28 65 72 72 6f 72 50 74 72 29 ateObj(errorPtr)
3170: 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 ;.+. }.+.
3180: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e Tcl_ListObjAppen
3190: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c dElement(interp,
31a0: 20 65 72 72 6f 72 50 74 72 2c 0a 2b 09 09 20 20 errorPtr,.+..
31b0: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f Tcl_NewStringO
31c0: 62 6a 28 22 2d 63 6f 64 65 22 2c 20 35 29 29 3b bj("-code", 5));
31d0: 0a 2b 09 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f .+. Tcl_ListO
31e0: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 bjAppendElement(
31f0: 69 6e 74 65 72 70 2c 20 65 72 72 6f 72 50 74 72 interp, errorPtr
3200: 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 , Tcl_NewIntObj(
3210: 72 65 73 75 6c 74 29 29 3b 0a 2b 0a 2b 09 20 20 result));.+.+.
3220: 20 20 72 65 74 75 72 6e 20 54 63 6c 5f 53 65 74 return Tcl_Set
3230: 52 65 74 75 72 6e 4f 70 74 69 6f 6e 73 28 69 6e ReturnOptions(in
3240: 74 65 72 70 2c 20 65 72 72 6f 72 50 74 72 29 3b terp, errorPtr);
3250: 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 .+.}.+ }.+.+
3260: 20 20 20 72 65 73 75 6c 74 20 3d 20 54 63 6c 5f result = Tcl_
3270: 4c 69 73 74 4f 62 6a 49 6e 64 65 78 28 69 6e 74 ListObjIndex(int
3280: 65 72 70 2c 20 74 61 62 6c 65 50 74 72 2c 20 69 erp, tablePtr, i
3290: 6e 64 65 78 2c 20 26 72 65 73 75 6c 74 50 74 72 ndex, &resultPtr
32a0: 29 3b 0a 2b 20 20 20 20 69 66 20 28 72 65 73 75 );.+ if (resu
32b0: 6c 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a lt != TCL_OK) {.
32c0: 2b 09 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b +.return result;
32d0: 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 54 63 6c .+ }.+ Tcl
32e0: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e _SetObjResult(in
32f0: 74 65 72 70 2c 20 72 65 73 75 6c 74 50 74 72 29 terp, resultPtr)
3300: 3b 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 54 43 ;.+ return TC
3310: 4c 5f 4f 4b 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 2d L_OK;.+}.+..+/*-
3320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3360: 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20 50 72 -----.+ *.+ * Pr
3370: 65 66 69 78 41 6c 6c 4f 62 6a 43 6d 64 20 2d 0a efixAllObjCmd -.
3380: 2b 20 2a 0a 2b 20 2a 09 54 68 69 73 20 66 75 6e + *.+ *.This fun
3390: 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 ction implements
33a0: 20 74 68 65 20 27 70 72 65 66 69 78 20 61 6c 6c the 'prefix all
33b0: 27 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 2e 20 52 ' Tcl command. R
33c0: 65 66 65 72 0a 2b 20 2a 09 74 6f 20 74 68 65 20 efer.+ *.to the
33d0: 75 73 65 72 20 64 6f 63 75 6d 65 6e 74 61 74 69 user documentati
33e0: 6f 6e 20 66 6f 72 20 64 65 74 61 69 6c 73 20 6f on for details o
33f0: 6e 20 77 68 61 74 20 69 74 20 64 6f 65 73 2e 0a n what it does..
3400: 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a + *.+ * Results:
3410: 0a 2b 20 2a 09 52 65 74 75 72 6e 73 20 61 20 73 .+ *.Returns a s
3420: 74 61 6e 64 61 72 64 20 54 63 6c 20 72 65 73 75 tandard Tcl resu
3430: 6c 74 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69 64 65 lt..+ *.+ * Side
3440: 20 65 66 66 65 63 74 73 3a 0a 2b 20 2a 09 4e 6f effects:.+ *.No
3450: 6e 65 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d ne..+ *.+ *-----
3460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
34a0: 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63 -.+ */.+.+static
34b0: 20 69 6e 74 0a 2b 50 72 65 66 69 78 41 6c 6c 4f int.+PrefixAllO
34c0: 62 6a 43 6d 64 28 0a 2b 20 20 20 20 43 6c 69 65 bjCmd(.+ Clie
34d0: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 ntData clientDat
34e0: 61 2c 09 09 2f 2a 20 4e 6f 74 20 75 73 65 64 2e a,../* Not used.
34f0: 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 49 6e 74 */.+ Tcl_Int
3500: 65 72 70 20 2a 69 6e 74 65 72 70 2c 09 09 09 2f erp *interp,.../
3510: 2a 20 43 75 72 72 65 6e 74 20 69 6e 74 65 72 70 * Current interp
3520: 72 65 74 65 72 2e 20 2a 2f 0a 2b 20 20 20 20 69 reter. */.+ i
3530: 6e 74 20 6f 62 6a 63 2c 09 09 09 09 2f 2a 20 4e nt objc,..../* N
3540: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e umber of argumen
3550: 74 73 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f ts. */.+ Tcl_
3560: 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b Obj *const objv[
3570: 5d 29 20 20 20 20 20 20 20 09 2f 2a 20 41 72 67 ]) ./* Arg
3580: 75 6d 65 6e 74 20 6f 62 6a 65 63 74 73 2e 20 2a ument objects. *
3590: 2f 0a 2b 7b 0a 2b 20 20 20 20 69 6e 74 20 74 61 /.+{.+ int ta
35a0: 62 6c 65 4f 62 6a 63 2c 20 72 65 73 75 6c 74 2c bleObjc, result,
35b0: 20 74 2c 20 6c 65 6e 67 74 68 2c 20 65 6c 65 6d t, length, elem
35c0: 4c 65 6e 67 74 68 3b 0a 2b 20 20 20 20 63 68 61 Length;.+ cha
35d0: 72 20 2a 73 74 72 69 6e 67 2c 20 2a 65 6c 65 6d r *string, *elem
35e0: 53 74 72 69 6e 67 3b 0a 2b 20 20 20 20 54 63 6c String;.+ Tcl
35f0: 5f 4f 62 6a 20 2a 2a 74 61 62 6c 65 4f 62 6a 76 _Obj **tableObjv
3600: 3b 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a ;.+ Tcl_Obj *
3610: 72 65 73 75 6c 74 50 74 72 3b 0a 2b 0a 2b 20 20 resultPtr;.+.+
3620: 20 20 69 66 20 28 6f 62 6a 63 20 21 3d 20 33 29 if (objc != 3)
3630: 20 7b 0a 2b 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 {.+.Tcl_WrongNu
3640: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c mArgs(interp, 1,
3650: 20 6f 62 6a 76 2c 20 22 74 61 62 6c 65 20 73 74 objv, "table st
3660: 72 69 6e 67 22 29 3b 0a 2b 09 72 65 74 75 72 6e ring");.+.return
3670: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 TCL_ERROR;.+
3680: 20 7d 0a 2b 0a 2b 20 20 20 20 72 65 73 75 6c 74 }.+.+ result
3690: 20 3d 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 = Tcl_ListObjGe
36a0: 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74 65 72 70 tElements(interp
36b0: 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 74 61 62 6c , objv[1], &tabl
36c0: 65 4f 62 6a 63 2c 20 26 74 61 62 6c 65 4f 62 6a eObjc, &tableObj
36d0: 76 29 3b 0a 2b 20 20 20 20 69 66 20 28 72 65 73 v);.+ if (res
36e0: 75 6c 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b ult != TCL_OK) {
36f0: 0a 2b 09 72 65 74 75 72 6e 20 72 65 73 75 6c 74 .+.return result
3700: 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 72 65 ;.+ }.+ re
3710: 73 75 6c 74 50 74 72 20 3d 20 54 63 6c 5f 4e 65 sultPtr = Tcl_Ne
3720: 77 4c 69 73 74 4f 62 6a 28 30 2c 20 4e 55 4c 4c wListObj(0, NULL
3730: 29 3b 0a 2b 20 20 20 20 73 74 72 69 6e 67 20 3d );.+ string =
3740: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 Tcl_GetStringFr
3750: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 26 omObj(objv[2], &
3760: 6c 65 6e 67 74 68 29 3b 0a 2b 0a 2b 20 20 20 20 length);.+.+
3770: 66 6f 72 20 28 74 20 3d 20 30 3b 20 74 20 3c 20 for (t = 0; t <
3780: 74 61 62 6c 65 4f 62 6a 63 3b 20 74 2b 2b 29 20 tableObjc; t++)
3790: 7b 0a 2b 09 65 6c 65 6d 53 74 72 69 6e 67 20 3d {.+.elemString =
37a0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 Tcl_GetStringFr
37b0: 6f 6d 4f 62 6a 28 74 61 62 6c 65 4f 62 6a 76 5b omObj(tableObjv[
37c0: 74 5d 2c 20 26 65 6c 65 6d 4c 65 6e 67 74 68 29 t], &elemLength)
37d0: 3b 0a 2b 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 41 20 ;.+.+./*.+. * A
37e0: 70 72 65 66 69 78 20 63 61 6e 6e 6f 74 20 6d 61 prefix cannot ma
37f0: 74 63 68 20 69 66 20 69 74 20 69 73 20 6c 6f 6e tch if it is lon
3800: 67 65 73 74 2e 0a 2b 09 20 2a 2f 0a 2b 0a 2b 09 gest..+. */.+.+.
3810: 69 66 20 28 6c 65 6e 67 74 68 20 3c 3d 20 65 6c if (length <= el
3820: 65 6d 4c 65 6e 67 74 68 29 20 7b 0a 2b 09 20 20 emLength) {.+.
3830: 20 20 69 66 20 28 54 63 6c 70 55 74 66 4e 63 6d if (TclpUtfNcm
3840: 70 32 28 65 6c 65 6d 53 74 72 69 6e 67 2c 20 73 p2(elemString, s
3850: 74 72 69 6e 67 2c 20 6c 65 6e 67 74 68 29 20 3d tring, length) =
3860: 3d 20 30 29 20 7b 0a 2b 09 09 54 63 6c 5f 4c 69 = 0) {.+..Tcl_Li
3870: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 stObjAppendEleme
3880: 6e 74 28 69 6e 74 65 72 70 2c 20 72 65 73 75 6c nt(interp, resul
3890: 74 50 74 72 2c 20 74 61 62 6c 65 4f 62 6a 76 5b tPtr, tableObjv[
38a0: 74 5d 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 7d t]);.+. }.+.}
38b0: 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 54 .+ }.+.+ T
38c0: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 cl_SetObjResult(
38d0: 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 50 74 interp, resultPt
38e0: 72 29 3b 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 r);.+ return
38f0: 54 43 4c 5f 4f 4b 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f TCL_OK;.+}.+..+/
3900: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *---------------
3910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3940: 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20 -------.+ *.+ *
3950: 50 72 65 66 69 78 4c 6f 6e 67 65 73 74 4f 62 6a PrefixLongestObj
3960: 43 6d 64 20 2d 0a 2b 20 2a 0a 2b 20 2a 09 54 68 Cmd -.+ *.+ *.Th
3970: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c is function impl
3980: 65 6d 65 6e 74 73 20 74 68 65 20 27 70 72 65 66 ements the 'pref
3990: 69 78 20 6c 6f 6e 67 65 73 74 27 20 54 63 6c 20 ix longest' Tcl
39a0: 63 6f 6d 6d 61 6e 64 2e 20 52 65 66 65 72 0a 2b command. Refer.+
39b0: 20 2a 09 74 6f 20 74 68 65 20 75 73 65 72 20 64 *.to the user d
39c0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 ocumentation for
39d0: 20 64 65 74 61 69 6c 73 20 6f 6e 20 77 68 61 74 details on what
39e0: 20 69 74 20 64 6f 65 73 2e 0a 2b 20 2a 0a 2b 20 it does..+ *.+
39f0: 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20 2a 09 52 * Results:.+ *.R
3a00: 65 74 75 72 6e 73 20 61 20 73 74 61 6e 64 61 72 eturns a standar
3a10: 64 20 54 63 6c 20 72 65 73 75 6c 74 2e 0a 2b 20 d Tcl result..+
3a20: 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63 *.+ * Side effec
3a30: 74 73 3a 0a 2b 20 2a 09 4e 6f 6e 65 2e 0a 2b 20 ts:.+ *.None..+
3a40: 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *.+ *-----------
3a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f -----------.+ */
3a90: 0a 2b 0a 2b 73 74 61 74 69 63 20 69 6e 74 0a 2b .+.+static int.+
3aa0: 50 72 65 66 69 78 4c 6f 6e 67 65 73 74 4f 62 6a PrefixLongestObj
3ab0: 43 6d 64 28 0a 2b 20 20 20 20 43 6c 69 65 6e 74 Cmd(.+ Client
3ac0: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c Data clientData,
3ad0: 09 09 2f 2a 20 4e 6f 74 20 75 73 65 64 2e 20 2a ../* Not used. *
3ae0: 2f 0a 2b 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 /.+ Tcl_Inter
3af0: 70 20 2a 69 6e 74 65 72 70 2c 09 09 09 2f 2a 20 p *interp,.../*
3b00: 43 75 72 72 65 6e 74 20 69 6e 74 65 72 70 72 65 Current interpre
3b10: 74 65 72 2e 20 2a 2f 0a 2b 20 20 20 20 69 6e 74 ter. */.+ int
3b20: 20 6f 62 6a 63 2c 09 09 09 09 2f 2a 20 4e 75 6d objc,..../* Num
3b30: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 ber of arguments
3b40: 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 . */.+ Tcl_Ob
3b50: 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d 29 j *const objv[])
3b60: 20 20 20 20 20 20 20 09 2f 2a 20 41 72 67 75 6d ./* Argum
3b70: 65 6e 74 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a ent objects. */.
3b80: 2b 7b 0a 2b 20 20 20 20 69 6e 74 20 74 61 62 6c +{.+ int tabl
3b90: 65 4f 62 6a 63 2c 20 72 65 73 75 6c 74 2c 20 69 eObjc, result, i
3ba0: 2c 20 74 2c 20 6c 65 6e 67 74 68 2c 20 65 6c 65 , t, length, ele
3bb0: 6d 4c 65 6e 67 74 68 2c 20 72 65 73 75 6c 74 4c mLength, resultL
3bc0: 65 6e 67 74 68 3b 0a 2b 20 20 20 20 63 68 61 72 ength;.+ char
3bd0: 20 2a 73 74 72 69 6e 67 2c 20 2a 65 6c 65 6d 53 *string, *elemS
3be0: 74 72 69 6e 67 2c 20 2a 72 65 73 75 6c 74 53 74 tring, *resultSt
3bf0: 72 69 6e 67 3b 0a 2b 20 20 20 20 54 63 6c 5f 4f ring;.+ Tcl_O
3c00: 62 6a 20 2a 2a 74 61 62 6c 65 4f 62 6a 76 3b 0a bj **tableObjv;.
3c10: 2b 0a 2b 20 20 20 20 69 66 20 28 6f 62 6a 63 20 +.+ if (objc
3c20: 21 3d 20 33 29 20 7b 0a 2b 09 54 63 6c 5f 57 72 != 3) {.+.Tcl_Wr
3c30: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 ongNumArgs(inter
3c40: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 74 61 62 p, 1, objv, "tab
3c50: 6c 65 20 73 74 72 69 6e 67 22 29 3b 0a 2b 09 72 le string");.+.r
3c60: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
3c70: 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 72 .+ }.+.+ r
3c80: 65 73 75 6c 74 20 3d 20 54 63 6c 5f 4c 69 73 74 esult = Tcl_List
3c90: 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 ObjGetElements(i
3ca0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 nterp, objv[1],
3cb0: 26 74 61 62 6c 65 4f 62 6a 63 2c 20 26 74 61 62 &tableObjc, &tab
3cc0: 6c 65 4f 62 6a 76 29 3b 0a 2b 20 20 20 20 69 66 leObjv);.+ if
3cd0: 20 28 72 65 73 75 6c 74 20 21 3d 20 54 43 4c 5f (result != TCL_
3ce0: 4f 4b 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 72 OK) {.+.return r
3cf0: 65 73 75 6c 74 3b 0a 2b 20 20 20 20 7d 0a 2b 20 esult;.+ }.+
3d00: 20 20 20 73 74 72 69 6e 67 20 3d 20 54 63 6c 5f string = Tcl_
3d10: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a GetStringFromObj
3d20: 28 6f 62 6a 76 5b 32 5d 2c 20 26 6c 65 6e 67 74 (objv[2], &lengt
3d30: 68 29 3b 0a 2b 0a 2b 20 20 20 20 72 65 73 75 6c h);.+.+ resul
3d40: 74 53 74 72 69 6e 67 20 3d 20 4e 55 4c 4c 3b 0a tString = NULL;.
3d50: 2b 20 20 20 20 72 65 73 75 6c 74 4c 65 6e 67 74 + resultLengt
3d60: 68 20 3d 20 30 3b 0a 2b 0a 2b 20 20 20 20 66 6f h = 0;.+.+ fo
3d70: 72 20 28 74 20 3d 20 30 3b 20 74 20 3c 20 74 61 r (t = 0; t < ta
3d80: 62 6c 65 4f 62 6a 63 3b 20 74 2b 2b 29 20 7b 0a bleObjc; t++) {.
3d90: 2b 09 65 6c 65 6d 53 74 72 69 6e 67 20 3d 20 54 +.elemString = T
3da0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d cl_GetStringFrom
3db0: 4f 62 6a 28 74 61 62 6c 65 4f 62 6a 76 5b 74 5d Obj(tableObjv[t]
3dc0: 2c 20 26 65 6c 65 6d 4c 65 6e 67 74 68 29 3b 0a , &elemLength);.
3dd0: 2b 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 46 69 72 73 +.+./*.+. * Firs
3de0: 74 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 70 t check if the p
3df0: 72 65 66 69 78 20 73 74 72 69 6e 67 20 6d 61 74 refix string mat
3e00: 63 68 65 73 20 74 68 65 20 65 6c 65 6d 65 6e 74 ches the element
3e10: 2e 0a 2b 09 20 2a 20 41 20 70 72 65 66 69 78 20 ..+. * A prefix
3e20: 63 61 6e 6e 6f 74 20 6d 61 74 63 68 20 69 66 20 cannot match if
3e30: 69 74 20 69 73 20 6c 6f 6e 67 65 73 74 2e 0a 2b it is longest..+
3e40: 09 20 2a 2f 0a 2b 0a 2b 09 69 66 20 28 28 6c 65 . */.+.+.if ((le
3e50: 6e 67 74 68 20 3e 20 65 6c 65 6d 4c 65 6e 67 74 ngth > elemLengt
3e60: 68 29 20 7c 7c 0a 2b 09 09 54 63 6c 70 55 74 66 h) ||.+..TclpUtf
3e70: 4e 63 6d 70 32 28 65 6c 65 6d 53 74 72 69 6e 67 Ncmp2(elemString
3e80: 2c 20 73 74 72 69 6e 67 2c 20 6c 65 6e 67 74 68 , string, length
3e90: 29 20 21 3d 20 30 29 20 7b 0a 2b 09 20 20 20 20 ) != 0) {.+.
3ea0: 63 6f 6e 74 69 6e 75 65 3b 0a 2b 09 7d 0a 2b 0a continue;.+.}.+.
3eb0: 2b 09 69 66 20 28 72 65 73 75 6c 74 53 74 72 69 +.if (resultStri
3ec0: 6e 67 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 ng == NULL) {.+.
3ed0: 20 20 20 20 2f 2a 0a 2b 09 20 20 20 20 20 2a 20 /*.+. *
3ee0: 49 66 20 74 68 69 73 20 69 73 20 74 68 65 20 66 If this is the f
3ef0: 69 72 73 74 20 6d 61 74 63 68 2c 20 74 68 65 20 irst match, the
3f00: 6c 6f 6e 67 65 73 74 20 63 6f 6d 6d 6f 6e 20 73 longest common s
3f10: 75 62 73 74 72 69 6e 67 20 74 68 69 73 0a 2b 09 ubstring this.+.
3f20: 20 20 20 20 20 2a 20 66 61 72 20 69 73 20 74 68 * far is th
3f30: 65 20 63 6f 6d 70 6c 65 74 65 20 73 74 72 69 6e e complete strin
3f40: 67 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 69 g. The result i
3f50: 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 73 s part of this s
3f60: 74 72 69 6e 67 0a 2b 09 20 20 20 20 20 2a 20 73 tring.+. * s
3f70: 6f 20 77 65 20 6f 6e 6c 79 20 6e 65 65 64 20 74 o we only need t
3f80: 6f 20 61 64 6a 75 73 74 20 74 68 65 20 6c 65 6e o adjust the len
3f90: 67 74 68 20 6c 61 74 65 72 2e 0a 2b 09 20 20 20 gth later..+.
3fa0: 20 20 2a 2f 0a 2b 0a 2b 09 20 20 20 20 72 65 73 */.+.+. res
3fb0: 75 6c 74 53 74 72 69 6e 67 20 3d 20 65 6c 65 6d ultString = elem
3fc0: 53 74 72 69 6e 67 3b 0a 2b 09 20 20 20 20 72 65 String;.+. re
3fd0: 73 75 6c 74 4c 65 6e 67 74 68 20 3d 20 65 6c 65 sultLength = ele
3fe0: 6d 4c 65 6e 67 74 68 3b 0a 2b 09 7d 20 65 6c 73 mLength;.+.} els
3ff0: 65 20 7b 0a 2b 09 20 20 20 20 2f 2a 0a 2b 09 20 e {.+. /*.+.
4000: 20 20 20 20 2a 20 4c 6f 6e 67 65 73 74 20 63 6f * Longest co
4010: 6d 6d 6f 6e 20 73 75 62 73 74 72 69 6e 67 20 63 mmon substring c
4020: 61 6e 6e 6f 74 20 62 65 20 6c 6f 6e 67 65 72 20 annot be longer
4030: 74 68 61 6e 20 73 68 6f 72 74 65 73 74 0a 2b 09 than shortest.+.
4040: 20 20 20 20 20 2a 20 73 74 72 69 6e 67 2e 0a 2b * string..+
4050: 09 20 20 20 20 20 2a 2f 0a 2b 0a 2b 09 20 20 20 . */.+.+.
4060: 20 69 66 20 28 65 6c 65 6d 4c 65 6e 67 74 68 20 if (elemLength
4070: 3c 20 72 65 73 75 6c 74 4c 65 6e 67 74 68 29 20 < resultLength)
4080: 7b 0a 2b 09 09 72 65 73 75 6c 74 4c 65 6e 67 74 {.+..resultLengt
4090: 68 20 3d 20 65 6c 65 6d 4c 65 6e 67 74 68 3b 0a h = elemLength;.
40a0: 2b 09 20 20 20 20 7d 0a 2b 0a 2b 09 20 20 20 20 +. }.+.+.
40b0: 2f 2a 0a 2b 09 20 20 20 20 20 2a 20 43 6f 6d 70 /*.+. * Comp
40c0: 61 72 65 20 73 74 72 69 6e 67 73 2e 0a 2b 09 20 are strings..+.
40d0: 20 20 20 20 2a 2f 0a 2b 0a 2b 09 20 20 20 20 66 */.+.+. f
40e0: 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 72 or (i = 0; i < r
40f0: 65 73 75 6c 74 4c 65 6e 67 74 68 3b 20 69 2b 2b esultLength; i++
4100: 29 20 7b 0a 2b 09 09 69 66 20 28 72 65 73 75 6c ) {.+..if (resul
4110: 74 53 74 72 69 6e 67 5b 69 5d 20 21 3d 20 65 6c tString[i] != el
4120: 65 6d 53 74 72 69 6e 67 5b 69 5d 29 20 7b 0a 2b emString[i]) {.+
4130: 09 09 20 20 20 20 2f 2a 0a 2b 09 09 20 20 20 20 .. /*.+..
4140: 20 2a 20 41 64 6a 75 73 74 20 69 6e 20 63 61 73 * Adjust in cas
4150: 65 20 77 65 20 73 74 6f 70 70 65 64 20 69 6e 20 e we stopped in
4160: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 the middle of a
4170: 55 54 46 20 63 68 61 72 2e 0a 2b 09 09 20 20 20 UTF char..+..
4180: 20 20 2a 2f 0a 2b 0a 2b 09 09 20 20 20 20 72 65 */.+.+.. re
4190: 73 75 6c 74 4c 65 6e 67 74 68 20 3d 20 54 63 6c sultLength = Tcl
41a0: 5f 55 74 66 50 72 65 76 28 26 72 65 73 75 6c 74 _UtfPrev(&result
41b0: 53 74 72 69 6e 67 5b 69 2b 31 5d 2c 0a 2b 09 09 String[i+1],.+..
41c0: 09 20 20 20 20 72 65 73 75 6c 74 53 74 72 69 6e . resultStrin
41d0: 67 29 20 2d 20 72 65 73 75 6c 74 53 74 72 69 6e g) - resultStrin
41e0: 67 3b 0a 2b 09 09 20 20 20 20 62 72 65 61 6b 3b g;.+.. break;
41f0: 0a 2b 09 09 7d 0a 2b 09 20 20 20 20 7d 0a 2b 09 .+..}.+. }.+.
4200: 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 69 66 }.+ }.+ if
4210: 20 28 72 65 73 75 6c 74 4c 65 6e 67 74 68 20 3e (resultLength >
4220: 20 30 29 20 7b 0a 2b 09 54 63 6c 5f 53 65 74 4f 0) {.+.Tcl_SetO
4230: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c bjResult(interp,
4240: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 Tcl_NewStringOb
4250: 6a 28 72 65 73 75 6c 74 53 74 72 69 6e 67 2c 20 j(resultString,
4260: 72 65 73 75 6c 74 4c 65 6e 67 74 68 29 29 3b 0a resultLength));.
4270: 2b 20 20 20 20 7d 0a 2b 20 20 20 20 72 65 74 75 + }.+ retu
4280: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 7d 0a 2b 0c rn TCL_OK;.+}.+.
4290: 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d .+/*.+ *--------
42a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
42b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
42c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
42d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b --------------.+
42e0: 20 2a 0a 20 20 2a 20 54 63 6c 5f 57 72 6f 6e 67 *. * Tcl_Wrong
42f0: 4e 75 6d 41 72 67 73 20 2d 2d 0a 20 20 2a 0a 20 NumArgs --. *.
4300: 20 2a 09 54 68 69 73 20 66 75 6e 63 74 69 6f 6e *.This function
4310: 20 67 65 6e 65 72 61 74 65 73 20 61 20 22 77 72 generates a "wr
4320: 6f 6e 67 20 23 20 61 72 67 73 22 20 65 72 72 6f ong # args" erro
4330: 72 20 6d 65 73 73 61 67 65 20 69 6e 20 61 6e 0a r message in an.
4340: 64 69 66 66 20 2d 4e 75 72 20 2d 78 20 2e 67 69 diff -Nur -x .gi
4350: 74 20 74 63 6c 6d 61 73 74 65 72 2f 67 65 6e 65 t tclmaster/gene
4360: 72 69 63 2f 74 63 6c 49 6e 74 2e 68 20 74 63 6c ric/tclInt.h tcl
4370: 2f 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e /generic/tclInt.
4380: 68 0a 2d 2d 2d 20 74 63 6c 6d 61 73 74 65 72 2f h.--- tclmaster/
4390: 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e 68 generic/tclInt.h
43a0: 09 32 30 30 38 2d 30 39 2d 31 39 20 32 30 3a 35 .2008-09-19 20:5
43b0: 34 3a 35 39 2e 30 30 30 30 30 30 30 30 30 20 2b 4:59.000000000 +
43c0: 30 32 30 30 0a 2b 2b 2b 20 74 63 6c 2f 67 65 6e 0200.+++ tcl/gen
43d0: 65 72 69 63 2f 74 63 6c 49 6e 74 2e 68 09 32 30 eric/tclInt.h.20
43e0: 30 38 2d 30 39 2d 32 30 20 30 30 3a 33 39 3a 33 08-09-20 00:39:3
43f0: 33 2e 30 30 30 30 30 30 30 30 30 20 2b 30 32 30 3.000000000 +020
4400: 30 0a 40 40 20 2d 33 30 33 32 2c 36 20 2b 33 30 0.@@ -3032,6 +30
4410: 33 32 2c 37 20 40 40 0a 20 4d 4f 44 55 4c 45 5f 32,7 @@. MODULE_
4420: 53 43 4f 50 45 20 69 6e 74 09 54 63 6c 5f 50 69 SCOPE int.Tcl_Pi
4430: 64 4f 62 6a 43 6d 64 28 43 6c 69 65 6e 74 44 61 dObjCmd(ClientDa
4440: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 ta clientData,.
4450: 09 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 ... Tcl_Inter
4460: 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f p *interp, int o
4470: 62 6a 63 2c 0a 20 09 09 09 20 20 20 20 54 63 6c bjc,. ... Tcl
4480: 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 _Obj *const objv
4490: 5b 5d 29 3b 0a 2b 4d 4f 44 55 4c 45 5f 53 43 4f []);.+MODULE_SCO
44a0: 50 45 20 54 63 6c 5f 43 6f 6d 6d 61 6e 64 20 54 PE Tcl_Command T
44b0: 63 6c 49 6e 69 74 50 72 65 66 69 78 43 6d 64 28 clInitPrefixCmd(
44c0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 Tcl_Interp *inte
44d0: 72 70 29 3b 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f rp);. MODULE_SCO
44e0: 50 45 20 69 6e 74 09 54 63 6c 5f 50 75 74 73 4f PE int.Tcl_PutsO
44f0: 62 6a 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 bjCmd(ClientData
4500: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 09 09 clientData,. ..
4510: 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 . Tcl_Interp
4520: 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a *interp, int obj
4530: 63 2c 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 4f c,. ... Tcl_O
4540: 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d bj *const objv[]
4550: 29 3b 0a 64 69 66 66 20 2d 4e 75 72 20 2d 78 20 );.diff -Nur -x
4560: 2e 67 69 74 20 74 63 6c 6d 61 73 74 65 72 2f 74 .git tclmaster/t
4570: 65 73 74 73 2f 73 74 72 69 6e 67 2e 74 65 73 74 ests/string.test
4580: 20 74 63 6c 2f 74 65 73 74 73 2f 73 74 72 69 6e tcl/tests/strin
4590: 67 2e 74 65 73 74 0a 2d 2d 2d 20 74 63 6c 6d 61 g.test.--- tclma
45a0: 73 74 65 72 2f 74 65 73 74 73 2f 73 74 72 69 6e ster/tests/strin
45b0: 67 2e 74 65 73 74 09 32 30 30 38 2d 30 38 2d 30 g.test.2008-08-0
45c0: 36 20 32 30 3a 34 30 3a 34 36 2e 30 30 30 30 30 6 20:40:46.00000
45d0: 30 30 30 30 20 2b 30 32 30 30 0a 2b 2b 2b 20 74 0000 +0200.+++ t
45e0: 63 6c 2f 74 65 73 74 73 2f 73 74 72 69 6e 67 2e cl/tests/string.
45f0: 74 65 73 74 09 32 30 30 38 2d 30 39 2d 31 39 20 test.2008-09-19
4600: 32 30 3a 35 35 3a 31 33 2e 30 30 30 30 30 30 30 20:55:13.0000000
4610: 30 30 20 2b 30 32 30 30 0a 40 40 20 2d 32 34 2c 00 +0200.@@ -24,
4620: 36 20 2b 32 34 2c 39 20 40 40 0a 20 74 65 73 74 6 +24,9 @@. test
4630: 43 6f 6e 73 74 72 61 69 6e 74 20 74 65 73 74 6f Constraint testo
4640: 62 6a 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 bj [expr {[info
4650: 63 6f 6d 6d 61 6e 64 73 20 74 65 73 74 6f 62 6a commands testobj
4660: 5d 20 21 3d 20 7b 7d 7d 5d 0a 20 74 65 73 74 43 ] != {}}]. testC
4670: 6f 6e 73 74 72 61 69 6e 74 20 74 65 73 74 69 6e onstraint testin
4680: 64 65 78 6f 62 6a 20 5b 65 78 70 72 20 7b 5b 69 dexobj [expr {[i
4690: 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 74 65 73 nfo commands tes
46a0: 74 69 6e 64 65 78 6f 62 6a 5d 20 21 3d 20 7b 7d tindexobj] != {}
46b0: 7d 5d 0a 20 0a 2b 23 20 55 73 65 64 20 66 6f 72 }]. .+# Used for
46c0: 20 63 6f 6e 73 74 72 61 69 6e 69 6e 67 20 6d 65 constraining me
46d0: 6d 6f 72 79 20 6c 65 61 6b 20 74 65 73 74 73 0a mory leak tests.
46e0: 2b 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 20 +testConstraint
46f0: 6d 65 6d 6f 72 79 20 5b 6c 6c 65 6e 67 74 68 20 memory [llength
4700: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 6d [info commands m
4710: 65 6d 6f 72 79 5d 5d 0a 2b 0a 20 74 65 73 74 20 emory]].+. test
4720: 73 74 72 69 6e 67 2d 31 2e 31 20 7b 65 72 72 6f string-1.1 {erro
4730: 72 20 63 6f 6e 64 69 74 69 6f 6e 73 7d 20 7b 0a r conditions} {.
4740: 20 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 list [catch
4750: 20 7b 73 74 72 69 6e 67 20 67 6f 72 70 20 61 20 {string gorp a
4760: 62 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20 7d 20 b} msg] $msg. }
4770: 7b 31 20 7b 75 6e 6b 6e 6f 77 6e 20 6f 72 20 61 {1 {unknown or a
4780: 6d 62 69 67 75 6f 75 73 20 73 75 62 63 6f 6d 6d mbiguous subcomm
4790: 61 6e 64 20 22 67 6f 72 70 22 3a 20 6d 75 73 74 and "gorp": must
47a0: 20 62 65 20 62 79 74 65 6c 65 6e 67 74 68 2c 20 be bytelength,
47b0: 63 6f 6d 70 61 72 65 2c 20 65 71 75 61 6c 2c 20 compare, equal,
47c0: 66 69 72 73 74 2c 20 69 6e 64 65 78 2c 20 69 73 first, index, is
47d0: 2c 20 6c 61 73 74 2c 20 6c 65 6e 67 74 68 2c 20 , last, length,
47e0: 6d 61 70 2c 20 6d 61 74 63 68 2c 20 72 61 6e 67 map, match, rang
47f0: 65 2c 20 72 65 70 65 61 74 2c 20 72 65 70 6c 61 e, repeat, repla
4800: 63 65 2c 20 72 65 76 65 72 73 65 2c 20 74 6f 6c ce, reverse, tol
4810: 6f 77 65 72 2c 20 74 6f 74 69 74 6c 65 2c 20 74 ower, totitle, t
4820: 6f 75 70 70 65 72 2c 20 74 72 69 6d 2c 20 74 72 oupper, trim, tr
4830: 69 6d 6c 65 66 74 2c 20 74 72 69 6d 72 69 67 68 imleft, trimrigh
4840: 74 2c 20 77 6f 72 64 65 6e 64 2c 20 6f 72 20 77 t, wordend, or w
4850: 6f 72 64 73 74 61 72 74 7d 7d 0a 40 40 20 2d 31 ordstart}}.@@ -1
4860: 36 35 38 2c 37 20 2b 31 36 36 31 2c 32 30 34 20 658,7 +1661,204
4870: 40 40 0a 20 20 20 20 20 6c 69 73 74 20 5b 73 74 @@. list [st
4880: 72 69 6e 67 20 69 73 20 6c 69 73 74 20 2d 66 61 ring is list -fa
4890: 69 6c 69 6e 64 65 78 20 78 20 22 5c 75 61 62 63 ilindex x "\uabc
48a0: 64 20 7b 62 20 63 7d 64 20 65 22 5d 20 24 78 0a d {b c}d e"] $x.
48b0: 20 7d 20 7b 30 20 32 7d 0a 20 0a 2b 74 65 73 74 } {0 2}. .+test
48c0: 20 73 74 72 69 6e 67 2d 32 36 2e 31 20 7b 74 63 string-26.1 {tc
48d0: 6c 3a 3a 70 72 65 66 69 78 2c 20 74 6f 6f 20 66 l::prefix, too f
48e0: 65 77 20 61 72 67 73 7d 20 2d 62 6f 64 79 20 7b ew args} -body {
48f0: 0a 2b 20 20 20 20 74 63 6c 3a 3a 70 72 65 66 69 .+ tcl::prefi
4900: 78 20 6d 61 74 63 68 20 61 0a 2b 7d 20 2d 72 65 x match a.+} -re
4910: 74 75 72 6e 43 6f 64 65 73 20 31 20 2d 72 65 73 turnCodes 1 -res
4920: 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 ult {wrong # arg
4930: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 74 63 s: should be "tc
4940: 6c 3a 3a 70 72 65 66 69 78 20 6d 61 74 63 68 20 l::prefix match
4950: 3f 6f 70 74 69 6f 6e 73 3f 20 74 61 62 6c 65 20 ?options? table
4960: 73 74 72 69 6e 67 22 7d 0a 2b 74 65 73 74 20 73 string"}.+test s
4970: 74 72 69 6e 67 2d 32 36 2e 32 20 7b 74 63 6c 3a tring-26.2 {tcl:
4980: 3a 70 72 65 66 69 78 2c 20 62 61 64 20 61 72 67 :prefix, bad arg
4990: 73 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 s} -body {.+
49a0: 74 63 6c 3a 3a 70 72 65 66 69 78 20 6d 61 74 63 tcl::prefix matc
49b0: 68 20 61 20 62 20 63 0a 2b 7d 20 2d 72 65 74 75 h a b c.+} -retu
49c0: 72 6e 43 6f 64 65 73 20 31 20 2d 72 65 73 75 6c rnCodes 1 -resul
49d0: 74 20 7b 62 61 64 20 6f 70 74 69 6f 6e 20 22 61 t {bad option "a
49e0: 22 3a 20 6d 75 73 74 20 62 65 20 2d 65 72 72 6f ": must be -erro
49f0: 72 2c 20 2d 65 78 61 63 74 2c 20 6f 72 20 2d 6d r, -exact, or -m
4a00: 65 73 73 61 67 65 7d 0a 2b 74 65 73 74 20 73 74 essage}.+test st
4a10: 72 69 6e 67 2d 32 36 2e 33 20 7b 74 63 6c 3a 3a ring-26.3 {tcl::
4a20: 70 72 65 66 69 78 2c 20 62 61 64 20 61 72 67 73 prefix, bad args
4a30: 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 74 } -body {.+ t
4a40: 63 6c 3a 3a 70 72 65 66 69 78 20 6d 61 74 63 68 cl::prefix match
4a50: 20 2d 65 72 72 6f 72 20 22 7b 7d 78 22 20 2d 65 -error "{}x" -e
4a60: 78 61 63 74 20 73 74 72 31 20 73 74 72 32 0a 2b xact str1 str2.+
4a70: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31 } -returnCodes 1
4a80: 20 2d 72 65 73 75 6c 74 20 7b 6c 69 73 74 20 65 -result {list e
4a90: 6c 65 6d 65 6e 74 20 69 6e 20 62 72 61 63 65 73 lement in braces
4aa0: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22 78 22 followed by "x"
4ab0: 20 69 6e 73 74 65 61 64 20 6f 66 20 73 70 61 63 instead of spac
4ac0: 65 7d 0a 2b 74 65 73 74 20 73 74 72 69 6e 67 2d e}.+test string-
4ad0: 32 36 2e 33 20 7b 74 63 6c 3a 3a 70 72 65 66 69 26.3 {tcl::prefi
4ae0: 78 2c 20 62 61 64 20 61 72 67 73 7d 20 2d 62 6f x, bad args} -bo
4af0: 64 79 20 7b 0a 2b 20 20 20 20 74 63 6c 3a 3a 70 dy {.+ tcl::p
4b00: 72 65 66 69 78 20 6d 61 74 63 68 20 2d 65 72 72 refix match -err
4b10: 6f 72 20 22 78 22 20 2d 65 78 61 63 74 20 73 74 or "x" -exact st
4b20: 72 31 20 73 74 72 32 0a 2b 7d 20 2d 72 65 74 75 r1 str2.+} -retu
4b30: 72 6e 43 6f 64 65 73 20 31 20 2d 72 65 73 75 6c rnCodes 1 -resul
4b40: 74 20 7b 65 72 72 6f 72 20 6f 70 74 69 6f 6e 73 t {error options
4b50: 20 6d 75 73 74 20 68 61 76 65 20 61 6e 20 65 76 must have an ev
4b60: 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 en number of ele
4b70: 6d 65 6e 74 73 7d 0a 2b 74 65 73 74 20 73 74 72 ments}.+test str
4b80: 69 6e 67 2d 32 36 2e 33 20 7b 74 63 6c 3a 3a 70 ing-26.3 {tcl::p
4b90: 72 65 66 69 78 2c 20 62 61 64 20 61 72 67 73 7d refix, bad args}
4ba0: 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 74 63 -body {.+ tc
4bb0: 6c 3a 3a 70 72 65 66 69 78 20 6d 61 74 63 68 20 l::prefix match
4bc0: 2d 65 72 72 6f 72 20 73 74 72 31 20 73 74 72 32 -error str1 str2
4bd0: 0a 2b 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 .+} -returnCodes
4be0: 20 31 20 2d 72 65 73 75 6c 74 20 7b 6d 69 73 73 1 -result {miss
4bf0: 69 6e 67 20 65 72 72 6f 72 20 6f 70 74 69 6f 6e ing error option
4c00: 73 7d 0a 2b 74 65 73 74 20 73 74 72 69 6e 67 2d s}.+test string-
4c10: 32 36 2e 34 20 7b 74 63 6c 3a 3a 70 72 65 66 69 26.4 {tcl::prefi
4c20: 78 2c 20 62 61 64 20 61 72 67 73 7d 20 2d 62 6f x, bad args} -bo
4c30: 64 79 20 7b 0a 2b 20 20 20 20 74 63 6c 3a 3a 70 dy {.+ tcl::p
4c40: 72 65 66 69 78 20 6d 61 74 63 68 20 2d 6d 65 73 refix match -mes
4c50: 73 61 67 65 20 73 74 72 31 20 73 74 72 32 0a 2b sage str1 str2.+
4c60: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31 } -returnCodes 1
4c70: 20 2d 72 65 73 75 6c 74 20 7b 6d 69 73 73 69 6e -result {missin
4c80: 67 20 6d 65 73 73 61 67 65 7d 0a 2b 74 65 73 74 g message}.+test
4c90: 20 73 74 72 69 6e 67 2d 32 36 2e 35 20 7b 74 63 string-26.5 {tc
4ca0: 6c 3a 3a 70 72 65 66 69 78 7d 20 7b 0a 2b 20 20 l::prefix} {.+
4cb0: 20 20 74 63 6c 3a 3a 70 72 65 66 69 78 20 6d 61 tcl::prefix ma
4cc0: 74 63 68 20 7b 61 70 61 20 62 65 70 61 20 63 65 tch {apa bepa ce
4cd0: 70 61 20 64 65 70 61 7d 20 63 65 70 61 0a 2b 7d pa depa} cepa.+}
4ce0: 20 63 65 70 61 0a 2b 74 65 73 74 20 73 74 72 69 cepa.+test stri
4cf0: 6e 67 2d 32 36 2e 36 20 7b 74 63 6c 3a 3a 70 72 ng-26.6 {tcl::pr
4d00: 65 66 69 78 7d 20 7b 0a 2b 20 20 20 20 74 63 6c efix} {.+ tcl
4d10: 3a 3a 70 72 65 66 69 78 20 6d 61 74 63 68 20 7b ::prefix match {
4d20: 61 70 61 20 62 65 70 61 20 63 65 70 61 20 64 65 apa bepa cepa de
4d30: 70 61 7d 20 62 65 0a 2b 7d 20 62 65 70 61 0a 2b pa} be.+} bepa.+
4d40: 74 65 73 74 20 73 74 72 69 6e 67 2d 32 36 2e 37 test string-26.7
4d50: 20 7b 74 63 6c 3a 3a 70 72 65 66 69 78 7d 20 2d {tcl::prefix} -
4d60: 62 6f 64 79 20 7b 0a 2b 20 20 20 20 74 63 6c 3a body {.+ tcl:
4d70: 3a 70 72 65 66 69 78 20 6d 61 74 63 68 20 2d 65 :prefix match -e
4d80: 78 61 63 74 20 7b 61 70 61 20 62 65 70 61 20 63 xact {apa bepa c
4d90: 65 70 61 20 64 65 70 61 7d 20 62 65 0a 2b 7d 20 epa depa} be.+}
4da0: 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31 20 2d -returnCodes 1 -
4db0: 72 65 73 75 6c 74 20 7b 62 61 64 20 6f 70 74 69 result {bad opti
4dc0: 6f 6e 20 22 62 65 22 3a 20 6d 75 73 74 20 62 65 on "be": must be
4dd0: 20 61 70 61 2c 20 62 65 70 61 2c 20 63 65 70 61 apa, bepa, cepa
4de0: 2c 20 6f 72 20 64 65 70 61 7d 0a 2b 74 65 73 74 , or depa}.+test
4df0: 20 73 74 72 69 6e 67 2d 32 36 2e 38 20 7b 74 63 string-26.8 {tc
4e00: 6c 3a 3a 70 72 65 66 69 78 7d 20 2d 62 6f 64 79 l::prefix} -body
4e10: 20 7b 0a 2b 20 20 20 20 74 63 6c 3a 3a 70 72 65 {.+ tcl::pre
4e20: 66 69 78 20 6d 61 74 63 68 20 2d 6d 65 73 73 61 fix match -messa
4e30: 67 65 20 73 77 69 74 63 68 20 7b 61 70 61 20 62 ge switch {apa b
4e40: 65 70 61 20 62 65 61 72 20 64 65 70 61 7d 20 62 epa bear depa} b
4e50: 65 0a 2b 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 e.+} -returnCode
4e60: 73 20 31 20 2d 72 65 73 75 6c 74 20 7b 61 6d 62 s 1 -result {amb
4e70: 69 67 75 6f 75 73 20 73 77 69 74 63 68 20 22 62 iguous switch "b
4e80: 65 22 3a 20 6d 75 73 74 20 62 65 20 61 70 61 2c e": must be apa,
4e90: 20 62 65 70 61 2c 20 62 65 61 72 2c 20 6f 72 20 bepa, bear, or
4ea0: 64 65 70 61 7d 0a 2b 74 65 73 74 20 73 74 72 69 depa}.+test stri
4eb0: 6e 67 2d 32 36 2e 39 20 7b 74 63 6c 3a 3a 70 72 ng-26.9 {tcl::pr
4ec0: 65 66 69 78 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 efix} -body {.+
4ed0: 20 20 20 74 63 6c 3a 3a 70 72 65 66 69 78 20 6d tcl::prefix m
4ee0: 61 74 63 68 20 2d 65 72 72 6f 72 20 7b 7d 20 7b atch -error {} {
4ef0: 61 70 61 20 62 65 70 61 20 62 65 61 72 20 64 65 apa bepa bear de
4f00: 70 61 7d 20 62 65 0a 2b 7d 20 2d 72 65 74 75 72 pa} be.+} -retur
4f10: 6e 43 6f 64 65 73 20 30 20 2d 72 65 73 75 6c 74 nCodes 0 -result
4f20: 20 7b 7d 0a 2b 74 65 73 74 20 73 74 72 69 6e 67 {}.+test string
4f30: 2d 32 36 2e 31 30 20 7b 74 63 6c 3a 3a 70 72 65 -26.10 {tcl::pre
4f40: 66 69 78 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 fix} -body {.+
4f50: 20 20 74 63 6c 3a 3a 70 72 65 66 69 78 20 6d 61 tcl::prefix ma
4f60: 74 63 68 20 2d 65 72 72 6f 72 20 7b 2d 6c 65 76 tch -error {-lev
4f70: 65 6c 20 31 7d 20 7b 61 70 61 20 62 65 70 61 20 el 1} {apa bepa
4f80: 62 65 61 72 20 64 65 70 61 7d 20 62 65 0a 2b 7d bear depa} be.+}
4f90: 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 32 20 -returnCodes 2
4fa0: 2d 72 65 73 75 6c 74 20 7b 61 6d 62 69 67 75 6f -result {ambiguo
4fb0: 75 73 20 6f 70 74 69 6f 6e 20 22 62 65 22 3a 20 us option "be":
4fc0: 6d 75 73 74 20 62 65 20 61 70 61 2c 20 62 65 70 must be apa, bep
4fd0: 61 2c 20 62 65 61 72 2c 20 6f 72 20 64 65 70 61 a, bear, or depa
4fe0: 7d 0a 2b 74 65 73 74 20 73 74 72 69 6e 67 2d 32 }.+test string-2
4ff0: 36 2e 31 30 20 7b 74 63 6c 3a 3a 70 72 65 66 69 6.10 {tcl::prefi
5000: 78 7d 20 2d 73 65 74 75 70 20 7b 0a 2b 20 20 20 x} -setup {.+
5010: 20 70 72 6f 63 20 5f 74 65 73 74 70 72 65 66 69 proc _testprefi
5020: 78 20 7b 61 72 67 73 7d 20 7b 0a 2b 20 20 20 20 x {args} {.+
5030: 20 20 20 20 61 72 72 61 79 20 73 65 74 20 6f 70 array set op
5040: 74 73 20 7b 2d 61 20 78 20 2d 62 20 79 20 2d 63 ts {-a x -b y -c
5050: 20 79 7d 0a 2b 20 20 20 20 20 20 20 20 66 6f 72 y}.+ for
5060: 65 61 63 68 20 7b 6f 70 74 20 76 61 6c 7d 20 24 each {opt val} $
5070: 61 72 67 73 20 7b 0a 2b 20 20 20 20 20 20 20 20 args {.+
5080: 20 20 20 20 73 65 74 20 6f 70 74 20 5b 74 63 6c set opt [tcl
5090: 3a 3a 70 72 65 66 69 78 20 6d 61 74 63 68 20 2d ::prefix match -
50a0: 65 72 72 6f 72 20 7b 2d 6c 65 76 65 6c 20 31 7d error {-level 1}
50b0: 20 7b 2d 61 20 2d 62 20 2d 63 7d 20 24 6f 70 74 {-a -b -c} $opt
50c0: 5d 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 73 ].+ s
50d0: 65 74 20 6f 70 74 73 28 24 6f 70 74 29 20 24 76 et opts($opt) $v
50e0: 61 6c 0a 2b 20 20 20 20 20 20 20 20 7d 0a 2b 20 al.+ }.+
50f0: 20 20 20 20 20 20 20 61 72 72 61 79 20 67 65 74 array get
5100: 20 6f 70 74 73 0a 2b 20 20 20 20 7d 0a 2b 7d 20 opts.+ }.+}
5110: 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 73 65 74 -body {.+ set
5120: 20 61 20 5b 63 61 74 63 68 20 7b 5f 74 65 73 74 a [catch {_test
5130: 70 72 65 66 69 78 20 2d 78 20 75 7d 20 72 65 73 prefix -x u} res
5140: 75 6c 74 20 6f 70 74 69 6f 6e 73 5d 0a 2b 20 20 ult options].+
5150: 20 20 64 69 63 74 20 67 65 74 20 24 6f 70 74 69 dict get $opti
5160: 6f 6e 73 20 2d 65 72 72 6f 72 69 6e 66 6f 0a 2b ons -errorinfo.+
5170: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 2b 20 20 } -cleanup {.+
5180: 20 20 72 65 6e 61 6d 65 20 5f 74 65 73 74 70 72 rename _testpr
5190: 65 66 69 78 20 7b 7d 0a 2b 7d 20 2d 72 65 73 75 efix {}.+} -resu
51a0: 6c 74 20 7b 62 61 64 20 6f 70 74 69 6f 6e 20 22 lt {bad option "
51b0: 2d 78 22 3a 20 6d 75 73 74 20 62 65 20 2d 61 2c -x": must be -a,
51c0: 20 2d 62 2c 20 6f 72 20 2d 63 0a 2b 20 20 20 20 -b, or -c.+
51d0: 77 68 69 6c 65 20 65 78 65 63 75 74 69 6e 67 0a while executing.
51e0: 2b 22 5f 74 65 73 74 70 72 65 66 69 78 20 2d 78 +"_testprefix -x
51f0: 20 75 22 7d 0a 2b 0a 2b 23 20 48 65 6c 70 65 72 u"}.+.+# Helper
5200: 20 66 6f 72 20 6d 65 6d 6f 72 79 20 73 74 72 65 for memory stre
5210: 73 73 20 74 65 73 74 73 0a 2b 23 20 52 65 70 65 ss tests.+# Repe
5220: 61 74 20 65 61 63 68 20 62 6f 64 79 20 69 6e 20 at each body in
5230: 61 20 6c 6f 63 61 6c 20 73 70 61 63 65 20 63 68 a local space ch
5240: 65 63 6b 69 6e 67 20 74 68 61 74 20 6d 65 6d 6f ecking that memo
5250: 72 79 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63 72 ry does not incr
5260: 65 61 73 65 0a 2b 70 72 6f 63 20 4d 65 6d 53 74 ease.+proc MemSt
5270: 72 65 73 73 20 7b 61 72 67 73 7d 20 7b 0a 2b 20 ress {args} {.+
5280: 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 2b 20 set res {}.+
5290: 20 20 20 66 6f 72 65 61 63 68 20 62 6f 64 79 20 foreach body
52a0: 24 61 72 67 73 20 7b 0a 2b 20 20 20 20 20 20 20 $args {.+
52b0: 20 73 65 74 20 65 6e 64 20 30 0a 2b 20 20 20 20 set end 0.+
52c0: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 for {set i 0
52d0: 7d 20 7b 24 69 20 3c 20 35 7d 20 7b 69 6e 63 72 } {$i < 5} {incr
52e0: 20 69 7d 20 7b 20 0a 2b 20 20 20 20 20 20 20 20 i} { .+
52f0: 20 20 20 20 70 72 6f 63 20 4d 65 6d 53 74 72 65 proc MemStre
5300: 73 73 5f 42 6f 64 79 20 7b 7d 20 24 62 6f 64 79 ss_Body {} $body
5310: 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 75 70 .+ up
5320: 6c 65 76 65 6c 20 31 20 4d 65 6d 53 74 72 65 73 level 1 MemStres
5330: 73 5f 42 6f 64 79 0a 2b 20 20 20 20 20 20 20 20 s_Body.+
5340: 20 20 20 20 72 65 6e 61 6d 65 20 4d 65 6d 53 74 rename MemSt
5350: 72 65 73 73 5f 42 6f 64 79 20 7b 7d 0a 2b 20 20 ress_Body {}.+
5360: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 6d set tm
5370: 70 20 24 65 6e 64 0a 2b 20 20 20 20 20 20 20 20 p $end.+
5380: 20 20 20 20 73 65 74 20 65 6e 64 20 5b 6c 69 6e set end [lin
5390: 64 65 78 20 5b 6c 69 6e 64 65 78 20 5b 73 70 6c dex [lindex [spl
53a0: 69 74 20 5b 6d 65 6d 6f 72 79 20 69 6e 66 6f 5d it [memory info]
53b0: 20 22 5c 6e 22 5d 20 33 5d 20 33 5d 0a 2b 20 20 "\n"] 3] 3].+
53c0: 20 20 20 20 20 20 7d 0a 2b 20 20 20 20 20 20 20 }.+
53d0: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 65 78 lappend res [ex
53e0: 70 72 20 7b 24 65 6e 64 20 2d 20 24 74 6d 70 7d pr {$end - $tmp}
53f0: 5d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 72 65 ].+ }.+ re
5400: 74 75 72 6e 20 24 72 65 73 0a 2b 7d 0a 2b 0a 2b turn $res.+}.+.+
5410: 74 65 73 74 20 73 74 72 69 6e 67 2d 32 36 2e 31 test string-26.1
5420: 31 20 7b 74 63 6c 3a 3a 70 72 65 66 69 78 3a 20 1 {tcl::prefix:
5430: 74 65 73 74 69 6e 67 20 66 6f 72 20 6c 65 61 6b testing for leak
5440: 73 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 s} -body {.+
5450: 23 20 54 68 69 73 20 74 65 73 74 20 69 73 20 6d # This test is m
5460: 61 64 65 20 74 6f 20 73 74 72 65 73 73 20 6f 62 ade to stress ob
5470: 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 6d ject reference m
5480: 61 6e 61 67 65 6d 65 6e 74 0a 2b 20 20 20 20 4d anagement.+ M
5490: 65 6d 53 74 72 65 73 73 20 7b 0a 2b 20 20 20 20 emStress {.+
54a0: 20 20 20 20 73 65 74 20 74 61 62 6c 65 20 7b 68 set table {h
54b0: 65 6a 6a 20 6d 69 66 66 20 67 75 72 6b 7d 0a 2b ejj miff gurk}.+
54c0: 20 20 20 20 20 20 20 20 73 65 74 20 69 74 65 6d set item
54d0: 20 5b 6c 69 6e 64 65 78 20 24 74 61 62 6c 65 20 [lindex $table
54e0: 31 5d 0a 2b 20 20 20 20 20 20 20 20 23 20 49 66 1].+ # If
54f0: 20 6e 6f 74 20 63 61 72 65 66 75 6c 2c 20 74 68 not careful, th
5500: 69 73 20 63 61 6e 20 63 61 75 73 65 20 61 20 63 is can cause a c
5510: 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 ircular referenc
5520: 65 0a 2b 20 20 20 20 20 20 20 20 23 20 74 68 61 e.+ # tha
5530: 74 20 77 69 6c 6c 20 63 61 75 73 65 20 61 20 6c t will cause a l
5540: 65 61 6b 2e 0a 2b 20 20 20 20 20 20 20 20 74 63 eak..+ tc
5550: 6c 3a 3a 70 72 65 66 69 78 20 6d 61 74 63 68 20 l::prefix match
5560: 24 74 61 62 6c 65 20 24 69 74 65 6d 0a 2b 20 20 $table $item.+
5570: 20 20 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 23 } {.+ #
5580: 20 41 20 73 69 6d 69 6c 61 72 20 63 61 73 65 20 A similar case
5590: 77 69 74 68 20 6e 65 73 74 65 64 20 6c 69 73 74 with nested list
55a0: 73 0a 2b 20 20 20 20 20 20 20 20 73 65 74 20 74 s.+ set t
55b0: 61 62 6c 65 32 20 7b 68 65 6a 6a 20 7b 6d 69 66 able2 {hejj {mif
55c0: 66 20 6d 61 66 66 7d 20 67 75 72 6b 7d 0a 2b 20 f maff} gurk}.+
55d0: 20 20 20 20 20 20 20 73 65 74 20 69 74 65 6d 20 set item
55e0: 5b 6c 69 6e 64 65 78 20 5b 6c 69 6e 64 65 78 20 [lindex [lindex
55f0: 24 74 61 62 6c 65 32 20 31 5d 20 30 5d 0a 2b 20 $table2 1] 0].+
5600: 20 20 20 20 20 20 20 74 63 6c 3a 3a 70 72 65 66 tcl::pref
5610: 69 78 20 6d 61 74 63 68 20 24 74 61 62 6c 65 32 ix match $table2
5620: 20 24 69 74 65 6d 0a 2b 20 20 20 20 7d 20 7b 0a $item.+ } {.
5630: 2b 20 20 20 20 20 20 20 20 23 20 41 20 73 69 6d + # A sim
5640: 69 6c 61 72 20 63 61 73 65 20 77 69 74 68 20 64 ilar case with d
5650: 69 63 74 0a 2b 20 20 20 20 20 20 20 20 73 65 74 ict.+ set
5660: 20 74 61 62 6c 65 33 20 7b 68 65 6a 6a 20 7b 6d table3 {hejj {m
5670: 69 66 66 20 6d 61 66 66 7d 20 67 75 72 6b 32 7d iff maff} gurk2}
5680: 0a 2b 20 20 20 20 20 20 20 20 73 65 74 20 69 74 .+ set it
5690: 65 6d 20 5b 6c 69 6e 64 65 78 20 5b 64 69 63 74 em [lindex [dict
56a0: 20 6b 65 79 73 20 5b 6c 69 6e 64 65 78 20 24 74 keys [lindex $t
56b0: 61 62 6c 65 33 20 31 5d 5d 20 30 5d 0a 2b 20 20 able3 1]] 0].+
56c0: 20 20 20 20 20 20 74 63 6c 3a 3a 70 72 65 66 69 tcl::prefi
56d0: 78 20 6d 61 74 63 68 20 24 74 61 62 6c 65 33 20 x match $table3
56e0: 24 69 74 65 6d 0a 2b 20 20 20 20 7d 0a 2b 7d 20 $item.+ }.+}
56f0: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 65 6d -constraints mem
5700: 6f 72 79 20 2d 72 65 73 75 6c 74 20 7b 30 20 30 ory -result {0 0
5710: 20 30 7d 0a 2b 0a 2b 74 65 73 74 20 73 74 72 69 0}.+.+test stri
5720: 6e 67 2d 32 36 2e 31 32 20 7b 74 63 6c 3a 3a 70 ng-26.12 {tcl::p
5730: 72 65 66 69 78 3a 20 74 65 73 74 69 6e 67 20 66 refix: testing f
5740: 6f 72 20 6c 65 61 6b 73 7d 20 2d 62 6f 64 79 20 or leaks} -body
5750: 7b 0a 2b 20 20 20 20 23 20 54 68 69 73 20 69 73 {.+ # This is
5760: 20 61 20 6d 65 6d 6f 72 79 20 6c 65 61 6b 20 74 a memory leak t
5770: 65 73 74 20 69 6e 20 61 20 66 6f 72 6d 20 74 68 est in a form th
5780: 61 74 20 6d 69 67 68 74 20 61 63 74 75 61 6c 6c at might actuall
5790: 79 20 68 61 70 70 65 6e 0a 2b 20 20 20 20 23 20 y happen.+ #
57a0: 69 6e 20 72 65 61 6c 20 63 6f 64 65 2e 20 20 54 in real code. T
57b0: 68 65 20 73 68 61 72 65 64 20 6c 69 74 65 72 61 he shared litera
57c0: 6c 20 22 6d 69 66 66 22 20 63 61 75 73 65 73 20 l "miff" causes
57d0: 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 2b 20 20 a connection.+
57e0: 20 20 23 20 62 65 74 77 65 65 6e 20 74 68 65 20 # between the
57f0: 69 74 65 6d 20 61 6e 64 20 74 68 65 20 74 61 62 item and the tab
5800: 6c 65 2e 0a 2b 20 20 20 20 4d 65 6d 53 74 72 65 le..+ MemStre
5810: 73 73 20 7b 0a 2b 20 20 20 20 20 20 20 20 70 72 ss {.+ pr
5820: 6f 63 20 73 74 72 65 73 73 31 20 7b 69 74 65 6d oc stress1 {item
5830: 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 } {.+
5840: 20 73 65 74 20 74 61 62 6c 65 20 5b 6c 69 73 74 set table [list
5850: 20 68 65 6a 6a 20 6d 69 66 66 20 67 75 72 6b 5d hejj miff gurk]
5860: 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 74 63 .+ tc
5870: 6c 3a 3a 70 72 65 66 69 78 20 6d 61 74 63 68 20 l::prefix match
5880: 24 74 61 62 6c 65 20 24 69 74 65 6d 0a 2b 20 20 $table $item.+
5890: 20 20 20 20 20 20 7d 0a 2b 20 20 20 20 20 20 20 }.+
58a0: 20 70 72 6f 63 20 73 74 72 65 73 73 32 20 7b 7d proc stress2 {}
58b0: 20 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 {.+
58c0: 73 74 72 65 73 73 31 20 6d 69 66 66 0a 2b 20 20 stress1 miff.+
58d0: 20 20 20 20 20 20 7d 0a 2b 20 20 20 20 20 20 20 }.+
58e0: 20 73 74 72 65 73 73 32 0a 2b 20 20 20 20 20 20 stress2.+
58f0: 20 20 72 65 6e 61 6d 65 20 73 74 72 65 73 73 31 rename stress1
5900: 20 7b 7d 0a 2b 20 20 20 20 20 20 20 20 72 65 6e {}.+ ren
5910: 61 6d 65 20 73 74 72 65 73 73 32 20 7b 7d 0a 2b ame stress2 {}.+
5920: 20 20 20 20 7d 0a 2b 7d 20 2d 63 6f 6e 73 74 72 }.+} -constr
5930: 61 69 6e 74 73 20 6d 65 6d 6f 72 79 20 2d 72 65 aints memory -re
5940: 73 75 6c 74 20 30 0a 2b 0a 2b 74 65 73 74 20 73 sult 0.+.+test s
5950: 74 72 69 6e 67 2d 32 36 2e 31 33 20 7b 74 63 6c tring-26.13 {tcl
5960: 3a 3a 70 72 65 66 69 78 3a 20 74 65 73 74 69 6e ::prefix: testin
5970: 67 20 66 6f 72 20 6c 65 61 6b 73 7d 20 2d 62 6f g for leaks} -bo
5980: 64 79 20 7b 0a 2b 20 20 20 20 23 20 54 68 69 73 dy {.+ # This
5990: 20 74 65 73 74 20 69 73 20 6d 61 64 65 20 74 6f test is made to
59a0: 20 73 74 72 65 73 73 20 6f 62 6a 65 63 74 20 72 stress object r
59b0: 65 66 65 72 65 6e 63 65 20 6d 61 6e 61 67 65 6d eference managem
59c0: 65 6e 74 0a 2b 20 20 20 20 4d 65 6d 53 74 72 65 ent.+ MemStre
59d0: 73 73 20 7b 0a 2b 20 20 20 20 20 20 20 20 73 65 ss {.+ se
59e0: 74 20 74 61 62 6c 65 20 5b 6c 69 73 74 20 68 65 t table [list he
59f0: 6a 6a 20 6d 69 66 66 5d 0a 2b 20 20 20 20 20 20 jj miff].+
5a00: 20 20 73 65 74 20 69 74 65 6d 20 24 74 61 62 6c set item $tabl
5a10: 65 0a 2b 20 20 20 20 20 20 20 20 73 65 74 20 65 e.+ set e
5a20: 72 72 6f 72 20 24 74 61 62 6c 65 0a 2b 20 20 20 rror $table.+
5a30: 20 20 20 20 20 23 20 55 73 65 20 74 68 65 20 73 # Use the s
5a40: 61 6d 65 20 6f 62 6a 65 63 74 73 20 69 6e 20 61 ame objects in a
5a50: 6c 6c 20 70 6c 61 63 65 73 0a 2b 20 20 20 20 20 ll places.+
5a60: 20 20 20 63 61 74 63 68 20 7b 0a 2b 20 20 20 20 catch {.+
5a70: 20 20 20 20 20 20 20 20 74 63 6c 3a 3a 70 72 65 tcl::pre
5a80: 66 69 78 20 6d 61 74 63 68 20 2d 65 72 72 6f 72 fix match -error
5a90: 20 24 65 72 72 6f 72 20 24 74 61 62 6c 65 20 24 $error $table $
5aa0: 69 74 65 6d 0a 2b 20 20 20 20 20 20 20 20 7d 0a item.+ }.
5ab0: 2b 20 20 20 20 7d 0a 2b 7d 20 2d 63 6f 6e 73 74 + }.+} -const
5ac0: 72 61 69 6e 74 73 20 6d 65 6d 6f 72 79 20 2d 72 raints memory -r
5ad0: 65 73 75 6c 74 20 7b 30 7d 0a 2b 0a 2b 74 65 73 esult {0}.+.+tes
5ae0: 74 20 73 74 72 69 6e 67 2d 32 37 2e 31 20 7b 74 t string-27.1 {t
5af0: 63 6c 3a 3a 70 72 65 66 69 78 20 61 6c 6c 2c 20 cl::prefix all,
5b00: 74 6f 6f 20 66 65 77 20 61 72 67 73 7d 20 2d 62 too few args} -b
5b10: 6f 64 79 20 7b 0a 2b 20 20 20 20 74 63 6c 3a 3a ody {.+ tcl::
5b20: 70 72 65 66 69 78 20 61 6c 6c 20 61 0a 2b 7d 20 prefix all a.+}
5b30: 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31 20 2d -returnCodes 1 -
5b40: 72 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20 result {wrong #
5b50: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 args: should be
5b60: 22 74 63 6c 3a 3a 70 72 65 66 69 78 20 61 6c 6c "tcl::prefix all
5b70: 20 74 61 62 6c 65 20 73 74 72 69 6e 67 22 7d 0a table string"}.
5b80: 2b 74 65 73 74 20 73 74 72 69 6e 67 2d 32 37 2e +test string-27.
5b90: 32 20 7b 74 63 6c 3a 3a 70 72 65 66 69 78 20 61 2 {tcl::prefix a
5ba0: 6c 6c 2c 20 62 61 64 20 61 72 67 73 7d 20 2d 62 ll, bad args} -b
5bb0: 6f 64 79 20 7b 0a 2b 20 20 20 20 74 63 6c 3a 3a ody {.+ tcl::
5bc0: 70 72 65 66 69 78 20 61 6c 6c 20 61 20 62 20 63 prefix all a b c
5bd0: 0a 2b 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 .+} -returnCodes
5be0: 20 31 20 2d 72 65 73 75 6c 74 20 7b 77 72 6f 6e 1 -result {wron
5bf0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 g # args: should
5c00: 20 62 65 20 22 74 63 6c 3a 3a 70 72 65 66 69 78 be "tcl::prefix
5c10: 20 61 6c 6c 20 74 61 62 6c 65 20 73 74 72 69 6e all table strin
5c20: 67 22 7d 0a 2b 74 65 73 74 20 73 74 72 69 6e 67 g"}.+test string
5c30: 2d 32 37 2e 33 20 7b 74 63 6c 3a 3a 70 72 65 66 -27.3 {tcl::pref
5c40: 69 78 20 61 6c 6c 2c 20 62 61 64 20 61 72 67 73 ix all, bad args
5c50: 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 74 } -body {.+ t
5c60: 63 6c 3a 3a 70 72 65 66 69 78 20 61 6c 6c 20 22 cl::prefix all "
5c70: 7b 7d 78 22 20 73 74 72 32 0a 2b 7d 20 2d 72 65 {}x" str2.+} -re
5c80: 74 75 72 6e 43 6f 64 65 73 20 31 20 2d 72 65 73 turnCodes 1 -res
5c90: 75 6c 74 20 7b 6c 69 73 74 20 65 6c 65 6d 65 6e ult {list elemen
5ca0: 74 20 69 6e 20 62 72 61 63 65 73 20 66 6f 6c 6c t in braces foll
5cb0: 6f 77 65 64 20 62 79 20 22 78 22 20 69 6e 73 74 owed by "x" inst
5cc0: 65 61 64 20 6f 66 20 73 70 61 63 65 7d 0a 2b 74 ead of space}.+t
5cd0: 65 73 74 20 73 74 72 69 6e 67 2d 32 37 2e 34 20 est string-27.4
5ce0: 7b 74 63 6c 3a 3a 70 72 65 66 69 78 20 61 6c 6c {tcl::prefix all
5cf0: 7d 20 7b 0a 2b 20 20 20 20 74 63 6c 3a 3a 70 72 } {.+ tcl::pr
5d00: 65 66 69 78 20 61 6c 6c 20 7b 61 70 61 20 62 65 efix all {apa be
5d10: 70 61 20 63 65 70 61 20 64 65 70 61 7d 20 63 0a pa cepa depa} c.
5d20: 2b 7d 20 63 65 70 61 0a 2b 74 65 73 74 20 73 74 +} cepa.+test st
5d30: 72 69 6e 67 2d 32 37 2e 35 20 7b 74 63 6c 3a 3a ring-27.5 {tcl::
5d40: 70 72 65 66 69 78 20 61 6c 6c 7d 20 7b 0a 2b 20 prefix all} {.+
5d50: 20 20 20 74 63 6c 3a 3a 70 72 65 66 69 78 20 61 tcl::prefix a
5d60: 6c 6c 20 7b 61 70 61 20 62 65 70 61 20 63 65 70 ll {apa bepa cep
5d70: 61 20 64 65 70 61 7d 20 63 65 70 61 0a 2b 7d 20 a depa} cepa.+}
5d80: 63 65 70 61 0a 2b 74 65 73 74 20 73 74 72 69 6e cepa.+test strin
5d90: 67 2d 32 37 2e 36 20 7b 74 63 6c 3a 3a 70 72 65 g-27.6 {tcl::pre
5da0: 66 69 78 20 61 6c 6c 7d 20 7b 0a 2b 20 20 20 20 fix all} {.+
5db0: 74 63 6c 3a 3a 70 72 65 66 69 78 20 61 6c 6c 20 tcl::prefix all
5dc0: 7b 61 70 61 20 62 65 70 61 20 63 65 70 61 20 64 {apa bepa cepa d
5dd0: 65 70 61 7d 20 63 65 70 61 78 0a 2b 7d 20 7b 7d epa} cepax.+} {}
5de0: 0a 2b 74 65 73 74 20 73 74 72 69 6e 67 2d 32 37 .+test string-27
5df0: 2e 37 20 7b 74 63 6c 3a 3a 70 72 65 66 69 78 20 .7 {tcl::prefix
5e00: 61 6c 6c 7d 20 7b 0a 2b 20 20 20 20 74 63 6c 3a all} {.+ tcl:
5e10: 3a 70 72 65 66 69 78 20 61 6c 6c 20 7b 61 70 61 :prefix all {apa
5e20: 20 61 73 6b 61 20 61 70 70 61 7d 20 61 0a 2b 7d aska appa} a.+}
5e30: 20 7b 61 70 61 20 61 73 6b 61 20 61 70 70 61 7d {apa aska appa}
5e40: 0a 2b 74 65 73 74 20 73 74 72 69 6e 67 2d 32 37 .+test string-27
5e50: 2e 38 20 7b 74 63 6c 3a 3a 70 72 65 66 69 78 20 .8 {tcl::prefix
5e60: 61 6c 6c 7d 20 7b 0a 2b 20 20 20 20 74 63 6c 3a all} {.+ tcl:
5e70: 3a 70 72 65 66 69 78 20 61 6c 6c 20 7b 61 70 61 :prefix all {apa
5e80: 20 61 73 6b 61 20 61 70 70 61 7d 20 61 70 0a 2b aska appa} ap.+
5e90: 7d 20 7b 61 70 61 20 61 70 70 61 7d 0a 2b 74 65 } {apa appa}.+te
5ea0: 73 74 20 73 74 72 69 6e 67 2d 32 37 2e 39 20 7b st string-27.9 {
5eb0: 74 63 6c 3a 3a 70 72 65 66 69 78 20 61 6c 6c 7d tcl::prefix all}
5ec0: 20 7b 0a 2b 20 20 20 20 74 63 6c 3a 3a 70 72 65 {.+ tcl::pre
5ed0: 66 69 78 20 61 6c 6c 20 7b 61 70 61 20 61 73 6b fix all {apa ask
5ee0: 61 20 61 70 70 61 7d 20 70 0a 2b 7d 20 7b 7d 0a a appa} p.+} {}.
5ef0: 2b 74 65 73 74 20 73 74 72 69 6e 67 2d 32 37 2e +test string-27.
5f00: 31 30 20 7b 74 63 6c 3a 3a 70 72 65 66 69 78 20 10 {tcl::prefix
5f10: 61 6c 6c 7d 20 7b 0a 2b 20 20 20 20 74 63 6c 3a all} {.+ tcl:
5f20: 3a 70 72 65 66 69 78 20 61 6c 6c 20 7b 61 70 61 :prefix all {apa
5f30: 20 61 73 6b 61 20 61 70 70 61 7d 20 7b 7d 0a 2b aska appa} {}.+
5f40: 7d 20 7b 61 70 61 20 61 73 6b 61 20 61 70 70 61 } {apa aska appa
5f50: 7d 0a 2b 0a 2b 74 65 73 74 20 73 74 72 69 6e 67 }.+.+test string
5f60: 2d 32 38 2e 31 20 7b 74 63 6c 3a 3a 70 72 65 66 -28.1 {tcl::pref
5f70: 69 78 20 6c 6f 6e 67 65 73 74 2c 20 74 6f 6f 20 ix longest, too
5f80: 66 65 77 20 61 72 67 73 7d 20 2d 62 6f 64 79 20 few args} -body
5f90: 7b 0a 2b 20 20 20 20 74 63 6c 3a 3a 70 72 65 66 {.+ tcl::pref
5fa0: 69 78 20 6c 6f 6e 67 65 73 74 20 61 0a 2b 7d 20 ix longest a.+}
5fb0: 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31 20 2d -returnCodes 1 -
5fc0: 72 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20 result {wrong #
5fd0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 args: should be
5fe0: 22 74 63 6c 3a 3a 70 72 65 66 69 78 20 6c 6f 6e "tcl::prefix lon
5ff0: 67 65 73 74 20 74 61 62 6c 65 20 73 74 72 69 6e gest table strin
6000: 67 22 7d 0a 2b 74 65 73 74 20 73 74 72 69 6e 67 g"}.+test string
6010: 2d 32 38 2e 32 20 7b 74 63 6c 3a 3a 70 72 65 66 -28.2 {tcl::pref
6020: 69 78 20 6c 6f 6e 67 65 73 74 2c 20 62 61 64 20 ix longest, bad
6030: 61 72 67 73 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 args} -body {.+
6040: 20 20 20 74 63 6c 3a 3a 70 72 65 66 69 78 20 6c tcl::prefix l
6050: 6f 6e 67 65 73 74 20 61 20 62 20 63 0a 2b 7d 20 ongest a b c.+}
6060: 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31 20 2d -returnCodes 1 -
6070: 72 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20 result {wrong #
6080: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 args: should be
6090: 22 74 63 6c 3a 3a 70 72 65 66 69 78 20 6c 6f 6e "tcl::prefix lon
60a0: 67 65 73 74 20 74 61 62 6c 65 20 73 74 72 69 6e gest table strin
60b0: 67 22 7d 0a 2b 74 65 73 74 20 73 74 72 69 6e 67 g"}.+test string
60c0: 2d 32 38 2e 33 20 7b 74 63 6c 3a 3a 70 72 65 66 -28.3 {tcl::pref
60d0: 69 78 20 6c 6f 6e 67 65 73 74 2c 20 62 61 64 20 ix longest, bad
60e0: 61 72 67 73 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 args} -body {.+
60f0: 20 20 20 74 63 6c 3a 3a 70 72 65 66 69 78 20 6c tcl::prefix l
6100: 6f 6e 67 65 73 74 20 22 7b 7d 78 22 20 73 74 72 ongest "{}x" str
6110: 32 0a 2b 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 2.+} -returnCode
6120: 73 20 31 20 2d 72 65 73 75 6c 74 20 7b 6c 69 73 s 1 -result {lis
6130: 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 62 72 61 t element in bra
6140: 63 65 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 ces followed by
6150: 22 78 22 20 69 6e 73 74 65 61 64 20 6f 66 20 73 "x" instead of s
6160: 70 61 63 65 7d 0a 2b 74 65 73 74 20 73 74 72 69 pace}.+test stri
6170: 6e 67 2d 32 38 2e 34 20 7b 74 63 6c 3a 3a 70 72 ng-28.4 {tcl::pr
6180: 65 66 69 78 20 6c 6f 6e 67 65 73 74 7d 20 7b 0a efix longest} {.
6190: 2b 20 20 20 20 74 63 6c 3a 3a 70 72 65 66 69 78 + tcl::prefix
61a0: 20 6c 6f 6e 67 65 73 74 20 7b 61 70 61 20 62 65 longest {apa be
61b0: 70 61 20 63 65 70 61 20 64 65 70 61 7d 20 63 0a pa cepa depa} c.
61c0: 2b 7d 20 63 65 70 61 0a 2b 74 65 73 74 20 73 74 +} cepa.+test st
61d0: 72 69 6e 67 2d 32 38 2e 35 20 7b 74 63 6c 3a 3a ring-28.5 {tcl::
61e0: 70 72 65 66 69 78 20 6c 6f 6e 67 65 73 74 7d 20 prefix longest}
61f0: 7b 0a 2b 20 20 20 20 74 63 6c 3a 3a 70 72 65 66 {.+ tcl::pref
6200: 69 78 20 6c 6f 6e 67 65 73 74 20 7b 61 70 61 20 ix longest {apa
6210: 62 65 70 61 20 63 65 70 61 20 64 65 70 61 7d 20 bepa cepa depa}
6220: 63 65 70 61 0a 2b 7d 20 63 65 70 61 0a 2b 74 65 cepa.+} cepa.+te
6230: 73 74 20 73 74 72 69 6e 67 2d 32 38 2e 36 20 7b st string-28.6 {
6240: 74 63 6c 3a 3a 70 72 65 66 69 78 20 6c 6f 6e 67 tcl::prefix long
6250: 65 73 74 7d 20 7b 0a 2b 20 20 20 20 74 63 6c 3a est} {.+ tcl:
6260: 3a 70 72 65 66 69 78 20 6c 6f 6e 67 65 73 74 20 :prefix longest
6270: 7b 61 70 61 20 62 65 70 61 20 63 65 70 61 20 64 {apa bepa cepa d
6280: 65 70 61 7d 20 63 65 70 61 78 0a 2b 7d 20 7b 7d epa} cepax.+} {}
6290: 0a 2b 74 65 73 74 20 73 74 72 69 6e 67 2d 32 38 .+test string-28
62a0: 2e 37 20 7b 74 63 6c 3a 3a 70 72 65 66 69 78 20 .7 {tcl::prefix
62b0: 6c 6f 6e 67 65 73 74 7d 20 7b 0a 2b 20 20 20 20 longest} {.+
62c0: 74 63 6c 3a 3a 70 72 65 66 69 78 20 6c 6f 6e 67 tcl::prefix long
62d0: 65 73 74 20 7b 61 70 61 20 61 73 6b 61 20 61 70 est {apa aska ap
62e0: 70 61 7d 20 61 0a 2b 7d 20 61 0a 2b 74 65 73 74 pa} a.+} a.+test
62f0: 20 73 74 72 69 6e 67 2d 32 38 2e 38 20 7b 74 63 string-28.8 {tc
6300: 6c 3a 3a 70 72 65 66 69 78 20 6c 6f 6e 67 65 73 l::prefix longes
6310: 74 7d 20 7b 0a 2b 20 20 20 20 74 63 6c 3a 3a 70 t} {.+ tcl::p
6320: 72 65 66 69 78 20 6c 6f 6e 67 65 73 74 20 7b 61 refix longest {a
6330: 70 61 20 61 73 6b 61 20 61 70 70 61 7d 20 61 70 pa aska appa} ap
6340: 0a 2b 7d 20 61 70 0a 2b 74 65 73 74 20 73 74 72 .+} ap.+test str
6350: 69 6e 67 2d 32 38 2e 39 20 7b 74 63 6c 3a 3a 70 ing-28.9 {tcl::p
6360: 72 65 66 69 78 20 6c 6f 6e 67 65 73 74 7d 20 7b refix longest} {
6370: 0a 2b 20 20 20 20 74 63 6c 3a 3a 70 72 65 66 69 .+ tcl::prefi
6380: 78 20 6c 6f 6e 67 65 73 74 20 7b 61 70 61 20 62 x longest {apa b
6390: 73 6b 61 20 61 70 70 61 7d 20 61 0a 2b 7d 20 61 ska appa} a.+} a
63a0: 70 0a 2b 74 65 73 74 20 73 74 72 69 6e 67 2d 32 p.+test string-2
63b0: 38 2e 31 30 20 7b 74 63 6c 3a 3a 70 72 65 66 69 8.10 {tcl::prefi
63c0: 78 20 6c 6f 6e 67 65 73 74 7d 20 7b 0a 2b 20 20 x longest} {.+
63d0: 20 20 74 63 6c 3a 3a 70 72 65 66 69 78 20 6c 6f tcl::prefix lo
63e0: 6e 67 65 73 74 20 7b 61 70 61 20 62 73 6b 61 20 ngest {apa bska
63f0: 61 70 70 61 7d 20 7b 7d 0a 2b 7d 20 7b 7d 0a 2b appa} {}.+} {}.+
6400: 74 65 73 74 20 73 74 72 69 6e 67 2d 32 38 2e 31 test string-28.1
6410: 31 20 7b 74 63 6c 3a 3a 70 72 65 66 69 78 20 6c 1 {tcl::prefix l
6420: 6f 6e 67 65 73 74 7d 20 7b 0a 2b 20 20 20 20 74 ongest} {.+ t
6430: 63 6c 3a 3a 70 72 65 66 69 78 20 6c 6f 6e 67 65 cl::prefix longe
6440: 73 74 20 7b 7b 7d 20 62 73 6b 61 20 61 70 70 61 st {{} bska appa
6450: 7d 20 7b 7d 0a 2b 7d 20 7b 7d 0a 2b 74 65 73 74 } {}.+} {}.+test
6460: 20 73 74 72 69 6e 67 2d 32 38 2e 31 32 20 7b 74 string-28.12 {t
6470: 63 6c 3a 3a 70 72 65 66 69 78 20 6c 6f 6e 67 65 cl::prefix longe
6480: 73 74 7d 20 7b 0a 2b 20 20 20 20 74 63 6c 3a 3a st} {.+ tcl::
6490: 70 72 65 66 69 78 20 6c 6f 6e 67 65 73 74 20 7b prefix longest {
64a0: 61 70 61 20 7b 7d 20 61 70 70 61 7d 20 7b 7d 0a apa {} appa} {}.
64b0: 2b 7d 20 7b 7d 0a 2b 74 65 73 74 20 73 74 72 69 +} {}.+test stri
64c0: 6e 67 2d 32 38 2e 31 33 20 7b 74 63 6c 3a 3a 70 ng-28.13 {tcl::p
64d0: 72 65 66 69 78 20 6c 6f 6e 67 65 73 74 7d 20 7b refix longest} {
64e0: 0a 2b 20 20 20 20 23 20 54 65 73 74 20 55 54 46 .+ # Test UTF
64f0: 38 20 68 61 6e 64 6c 69 6e 67 0a 2b 20 20 20 20 8 handling.+
6500: 74 63 6c 3a 3a 70 72 65 66 69 78 20 6c 6f 6e 67 tcl::prefix long
6510: 65 73 74 20 7b 61 78 5c 78 39 30 20 62 65 70 20 est {ax\x90 bep
6520: 61 78 5c 78 39 31 7d 20 61 0a 2b 7d 20 61 78 0a ax\x91} a.+} ax.
6530: 2b 0a 20 23 20 63 6c 65 61 6e 75 70 0a 2b 72 65 +. # cleanup.+re
6540: 6e 61 6d 65 20 4d 65 6d 53 74 72 65 73 73 20 7b name MemStress {
6550: 7d 0a 20 3a 3a 74 63 6c 74 65 73 74 3a 3a 63 6c }. ::tcltest::cl
6560: 65 61 6e 75 70 54 65 73 74 73 0a 20 72 65 74 75 eanupTests. retu
6570: 72 6e 0a 20 0a rn. .