Attachment "tip181-3.patch" to
ticket [958222ffff]
added by
tallniel
2004-07-03 07:19:16.
0000: 49 6e 64 65 78 3a 20 64 6f 63 2f 6e 61 6d 65 73 Index: doc/names
0010: 70 61 63 65 2e 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d pace.n.=========
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 ==========.RCS f
0060: 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 ile: /cvsroot/tc
0070: 6c 2f 74 63 6c 2f 64 6f 63 2f 6e 61 6d 65 73 70 l/tcl/doc/namesp
0080: 61 63 65 2e 6e 2c 76 0a 72 65 74 72 69 65 76 69 ace.n,v.retrievi
0090: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 34 ng revision 1.14
00a0: 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 31 34 20 .diff -u -r1.14
00b0: 6e 61 6d 65 73 70 61 63 65 2e 6e 0a 2d 2d 2d 20 namespace.n.---
00c0: 64 6f 63 2f 6e 61 6d 65 73 70 61 63 65 2e 6e 09 doc/namespace.n.
00d0: 32 31 20 4d 61 79 20 32 30 30 34 20 32 32 3a 35 21 May 2004 22:5
00e0: 37 3a 33 39 20 2d 30 30 30 30 09 31 2e 31 34 0a 7:39 -0000.1.14.
00f0: 2b 2b 2b 20 64 6f 63 2f 6e 61 6d 65 73 70 61 63 +++ doc/namespac
0100: 65 2e 6e 09 33 20 4a 75 6c 20 32 30 30 34 20 30 e.n.3 Jul 2004 0
0110: 30 3a 31 33 3a 31 32 20 2d 30 30 30 30 0a 40 40 0:13:12 -0000.@@
0120: 20 2d 32 33 37 2c 36 20 2b 32 33 37 2c 31 37 20 -237,6 +237,17
0130: 40 40 0a 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 @@. It does not
0140: 63 68 65 63 6b 20 77 68 65 74 68 65 72 20 74 68 check whether th
0150: 65 20 6e 61 6d 65 73 70 61 63 65 20 6e 61 6d 65 e namespace name
0160: 73 20 61 72 65 2c 20 69 6e 20 66 61 63 74 2c 0a s are, in fact,.
0170: 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 63 75 the names of cu
0180: 72 72 65 6e 74 6c 79 20 64 65 66 69 6e 65 64 20 rrently defined
0190: 6e 61 6d 65 73 70 61 63 65 73 2e 0a 20 2e 54 50 namespaces.. .TP
01a0: 0a 2b 5c 66 42 6e 61 6d 65 73 70 61 63 65 20 75 .+\fBnamespace u
01b0: 6e 6b 6e 6f 77 6e 5c 66 52 20 3f 5c 66 49 73 63 nknown\fR ?\fIsc
01c0: 72 69 70 74 5c 66 52 3f 0a 2b 53 65 74 73 20 6f ript\fR?.+Sets o
01d0: 72 20 72 65 74 75 72 6e 73 20 74 68 65 20 75 6e r returns the un
01e0: 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64 20 68 61 known command ha
01f0: 6e 64 6c 65 72 20 66 6f 72 20 74 68 65 20 63 75 ndler for the cu
0200: 72 72 65 6e 74 20 6e 61 6d 65 73 70 61 63 65 2e rrent namespace.
0210: 0a 2b 54 68 65 20 68 61 6e 64 6c 65 72 20 69 73 .+The handler is
0220: 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61 20 invoked when a
0230: 63 6f 6d 6d 61 6e 64 20 63 61 6c 6c 65 64 20 66 command called f
0240: 72 6f 6d 20 77 69 74 68 69 6e 20 74 68 65 20 6e rom within the n
0250: 61 6d 65 73 70 61 63 65 0a 2b 63 61 6e 6e 6f 74 amespace.+cannot
0260: 20 62 65 20 66 6f 75 6e 64 20 28 69 6e 20 65 69 be found (in ei
0270: 74 68 65 72 20 74 68 65 20 63 75 72 72 65 6e 74 ther the current
0280: 20 6e 61 6d 65 73 70 61 63 65 20 6f 72 20 74 68 namespace or th
0290: 65 20 67 6c 6f 62 61 6c 20 6e 61 6d 65 73 70 61 e global namespa
02a0: 63 65 29 2e 20 0a 2b 54 68 65 20 5c 66 49 73 63 ce). .+The \fIsc
02b0: 72 69 70 74 5c 66 52 20 61 72 67 75 6d 65 6e 74 ript\fR argument
02c0: 2c 20 69 66 20 67 69 76 65 6e 2c 20 73 68 6f 75 , if given, shou
02d0: 6c 64 20 62 65 20 61 20 77 65 6c 6c 0a 2b 66 6f ld be a well.+fo
02e0: 72 6d 65 64 20 6c 69 73 74 20 72 65 70 72 65 73 rmed list repres
02f0: 65 6e 74 69 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 enting a command
0300: 20 6e 61 6d 65 20 61 6e 64 20 6f 70 74 69 6f 6e name and option
0310: 61 6c 20 61 72 67 75 6d 65 6e 74 73 2e 20 57 68 al arguments. Wh
0320: 65 6e 0a 2b 74 68 65 20 68 61 6e 64 6c 65 72 20 en.+the handler
0330: 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 65 20 is invoked, the
0340: 66 75 6c 6c 20 69 6e 76 6f 63 61 74 69 6f 6e 20 full invocation
0350: 6c 69 6e 65 20 77 69 6c 6c 20 62 65 20 61 70 70 line will be app
0360: 65 6e 64 65 64 20 74 6f 20 74 68 65 0a 2b 73 63 ended to the.+sc
0370: 72 69 70 74 20 61 6e 64 20 74 68 65 20 72 65 73 ript and the res
0380: 75 6c 74 20 65 76 61 6c 75 61 74 65 64 20 69 6e ult evaluated in
0390: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 the context of
03a0: 74 68 65 20 6e 61 6d 65 73 70 61 63 65 2e 20 54 the namespace. T
03b0: 68 65 20 0a 2b 64 65 66 61 75 6c 74 20 68 61 6e he .+default han
03c0: 64 6c 65 72 20 66 6f 72 20 61 6c 6c 20 6e 61 6d dler for all nam
03d0: 65 73 70 61 63 65 73 20 69 73 20 5c 66 42 3a 3a espaces is \fB::
03e0: 75 6e 6b 6e 6f 77 6e 5c 66 52 2e 20 49 66 20 6e unknown\fR. If n
03f0: 6f 20 61 72 67 75 6d 65 6e 74 0a 2b 69 73 20 67 o argument.+is g
0400: 69 76 65 6e 2c 20 69 74 20 72 65 74 75 72 6e 73 iven, it returns
0410: 20 74 68 65 20 68 61 6e 64 6c 65 72 20 66 6f 72 the handler for
0420: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 61 6d the current nam
0430: 65 73 70 61 63 65 2e 0a 2b 2e 54 50 0a 20 5c 66 espace..+.TP. \f
0440: 42 6e 61 6d 65 73 70 61 63 65 20 77 68 69 63 68 Bnamespace which
0450: 5c 66 52 20 3f 5c 2d 5c 66 42 63 6f 6d 6d 61 6e \fR ?\-\fBcomman
0460: 64 5c 66 52 3f 20 3f 5c 2d 5c 66 42 76 61 72 69 d\fR? ?\-\fBvari
0470: 61 62 6c 65 5c 66 52 3f 20 5c 66 49 6e 61 6d 65 able\fR? \fIname
0480: 5c 66 52 0a 20 4c 6f 6f 6b 73 20 75 70 20 5c 66 \fR. Looks up \f
0490: 49 6e 61 6d 65 5c 66 52 20 61 73 20 65 69 74 68 Iname\fR as eith
04a0: 65 72 20 61 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 er a command or
04b0: 76 61 72 69 61 62 6c 65 0a 20 61 6e 64 20 72 65 variable. and re
04c0: 74 75 72 6e 73 20 69 74 73 20 66 75 6c 6c 79 2d turns its fully-
04d0: 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 2e 0a qualified name..
04e0: 49 6e 64 65 78 3a 20 64 6f 63 2f 75 6e 6b 6e 6f Index: doc/unkno
04f0: 77 6e 2e 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d wn.n.===========
0500: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0510: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0520: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0530: 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c ========.RCS fil
0540: 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f e: /cvsroot/tcl/
0550: 74 63 6c 2f 64 6f 63 2f 75 6e 6b 6e 6f 77 6e 2e tcl/doc/unknown.
0560: 6e 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 n,v.retrieving r
0570: 65 76 69 73 69 6f 6e 20 31 2e 35 0a 64 69 66 66 evision 1.5.diff
0580: 20 2d 75 20 2d 72 31 2e 35 20 75 6e 6b 6e 6f 77 -u -r1.5 unknow
0590: 6e 2e 6e 0a 2d 2d 2d 20 64 6f 63 2f 75 6e 6b 6e n.n.--- doc/unkn
05a0: 6f 77 6e 2e 6e 09 33 30 20 4d 61 79 20 32 30 30 own.n.30 May 200
05b0: 34 20 31 34 3a 31 33 3a 35 32 20 2d 30 30 30 30 4 14:13:52 -0000
05c0: 09 31 2e 35 0a 2b 2b 2b 20 64 6f 63 2f 75 6e 6b .1.5.+++ doc/unk
05d0: 6e 6f 77 6e 2e 6e 09 33 20 4a 75 6c 20 32 30 30 nown.n.3 Jul 200
05e0: 34 20 30 30 3a 31 33 3a 31 33 20 2d 30 30 30 30 4 00:13:13 -0000
05f0: 0a 40 40 20 2d 32 33 2c 31 35 20 2b 32 33 2c 31 .@@ -23,15 +23,1
0600: 38 20 40 40 0a 20 74 72 69 65 73 20 74 6f 20 69 8 @@. tries to i
0610: 6e 76 6f 6b 65 20 61 20 63 6f 6d 6d 61 6e 64 20 nvoke a command
0620: 74 68 61 74 20 64 6f 65 73 6e 27 74 20 65 78 69 that doesn't exi
0630: 73 74 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 st. The default
0640: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a implementation.
0650: 20 6f 66 20 5c 66 42 75 6e 6b 6e 6f 77 6e 5c 66 of \fBunknown\f
0660: 52 20 69 73 20 61 20 6c 69 62 72 61 72 79 20 70 R is a library p
0670: 72 6f 63 65 64 75 72 65 20 64 65 66 69 6e 65 64 rocedure defined
0680: 20 77 68 65 6e 20 54 63 6c 20 69 6e 69 74 69 61 when Tcl initia
0690: 6c 69 7a 65 73 20 61 6e 0a 20 69 6e 74 65 72 70 lizes an. interp
06a0: 72 65 74 65 72 2e 20 20 59 6f 75 20 63 61 6e 20 reter. You can
06b0: 6f 76 65 72 72 69 64 65 20 74 68 65 20 64 65 66 override the def
06c0: 61 75 6c 74 20 5c 66 42 75 6e 6b 6e 6f 77 6e 5c ault \fBunknown\
06d0: 66 52 20 74 6f 20 63 68 61 6e 67 65 20 69 74 73 fR to change its
06e0: 0a 2d 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e .-functionality.
06f0: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72 Note that ther
0700: 65 20 69 73 20 6e 6f 20 64 65 66 61 75 6c 74 20 e is no default
0710: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f implementation o
0720: 66 0a 2d 5c 66 42 75 6e 6b 6e 6f 77 6e 5c 66 52 f.-\fBunknown\fR
0730: 20 69 6e 20 61 20 73 61 66 65 20 69 6e 74 65 72 in a safe inter
0740: 70 72 65 74 65 72 2e 0a 2b 66 75 6e 63 74 69 6f preter..+functio
0750: 6e 61 6c 69 74 79 2c 20 6f 72 20 79 6f 75 20 63 nality, or you c
0760: 61 6e 20 72 65 67 69 73 74 65 72 20 61 20 6e 65 an register a ne
0770: 77 20 68 61 6e 64 6c 65 72 20 66 6f 72 20 69 6e w handler for in
0780: 64 69 76 69 64 75 61 6c 20 6e 61 6d 65 73 70 61 dividual namespa
0790: 63 65 73 0a 2b 75 73 69 6e 67 20 74 68 65 20 5c ces.+using the \
07a0: 66 42 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b 6e fBnamespace unkn
07b0: 6f 77 6e 5c 66 52 20 63 6f 6d 6d 61 6e 64 2e 20 own\fR command.
07c0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72 65 Note that there
07d0: 20 69 73 20 6e 6f 20 64 65 66 61 75 6c 74 20 0a is no default .
07e0: 2b 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 +implementation
07f0: 6f 66 20 5c 66 42 75 6e 6b 6e 6f 77 6e 5c 66 52 of \fBunknown\fR
0800: 20 69 6e 20 61 20 73 61 66 65 20 69 6e 74 65 72 in a safe inter
0810: 70 72 65 74 65 72 2e 0a 20 2e 50 50 0a 20 49 66 preter.. .PP. If
0820: 20 74 68 65 20 54 63 6c 20 69 6e 74 65 72 70 72 the Tcl interpr
0830: 65 74 65 72 20 65 6e 63 6f 75 6e 74 65 72 73 20 eter encounters
0840: 61 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20 66 a command name f
0850: 6f 72 20 77 68 69 63 68 20 74 68 65 72 65 0a 2d or which there.-
0860: 69 73 20 6e 6f 74 20 61 20 64 65 66 69 6e 65 64 is not a defined
0870: 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 54 command, then T
0880: 63 6c 20 63 68 65 63 6b 73 20 66 6f 72 20 74 68 cl checks for th
0890: 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 0a 2d e existence of.-
08a0: 61 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 64 20 a command named
08b0: 5c 66 42 75 6e 6b 6e 6f 77 6e 5c 66 52 2e 0a 2d \fBunknown\fR..-
08c0: 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 If there is no s
08d0: 75 63 68 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 uch command, the
08e0: 6e 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 n the interprete
08f0: 72 20 72 65 74 75 72 6e 73 20 61 6e 0a 2d 65 72 r returns an.-er
0900: 72 6f 72 2e 0a 2d 49 66 20 74 68 65 20 5c 66 42 ror..-If the \fB
0910: 75 6e 6b 6e 6f 77 6e 5c 66 52 20 63 6f 6d 6d 61 unknown\fR comma
0920: 6e 64 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20 nd exists, then
0930: 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 77 69 it is invoked wi
0940: 74 68 0a 2b 69 73 20 6e 6f 74 20 61 20 64 65 66 th.+is not a def
0950: 69 6e 65 64 20 63 6f 6d 6d 61 6e 64 20 28 69 6e ined command (in
0960: 20 65 69 74 68 65 72 20 74 68 65 20 63 75 72 72 either the curr
0970: 65 6e 74 20 6e 61 6d 65 73 70 61 63 65 2c 20 6f ent namespace, o
0980: 72 20 74 68 65 20 0a 2b 67 6c 6f 62 61 6c 20 6e r the .+global n
0990: 61 6d 65 73 70 61 63 65 29 2c 20 74 68 65 6e 20 amespace), then
09a0: 54 63 6c 20 63 68 65 63 6b 73 20 66 6f 72 20 74 Tcl checks for t
09b0: 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 0a he existence of.
09c0: 2b 61 6e 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64 +an unknown hand
09d0: 6c 65 72 20 66 6f 72 20 74 68 65 20 63 75 72 72 ler for the curr
09e0: 65 6e 74 20 6e 61 6d 65 73 70 61 63 65 2e 20 42 ent namespace. B
09f0: 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 0a y default, this.
0a00: 2b 68 61 6e 64 6c 65 72 20 69 73 20 61 20 63 6f +handler is a co
0a10: 6d 6d 61 6e 64 20 6e 61 6d 65 64 20 5c 66 42 3a mmand named \fB:
0a20: 3a 75 6e 6b 6e 6f 77 6e 5c 66 52 2e 20 20 49 66 :unknown\fR. If
0a30: 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 there is no suc
0a40: 68 20 0a 2b 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 h .+command, the
0a50: 6e 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 n the interprete
0a60: 72 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 r returns an err
0a70: 6f 72 2e 0a 2b 49 66 20 74 68 65 20 5c 66 42 75 or..+If the \fBu
0a80: 6e 6b 6e 6f 77 6e 5c 66 52 20 63 6f 6d 6d 61 6e nknown\fR comman
0a90: 64 20 65 78 69 73 74 73 20 28 6f 72 20 61 20 6e d exists (or a n
0aa0: 65 77 20 68 61 6e 64 6c 65 72 20 68 61 73 20 62 ew handler has b
0ab0: 65 65 6e 0a 2b 72 65 67 69 73 74 65 72 65 64 20 een.+registered
0ac0: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 for the current
0ad0: 6e 61 6d 65 73 70 61 63 65 29 2c 20 74 68 65 6e namespace), then
0ae0: 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 77 it is invoked w
0af0: 69 74 68 0a 20 61 72 67 75 6d 65 6e 74 73 20 63 ith. arguments c
0b00: 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 74 68 65 onsisting of the
0b10: 20 66 75 6c 6c 79 2d 73 75 62 73 74 69 74 75 74 fully-substitut
0b20: 65 64 20 6e 61 6d 65 20 61 6e 64 20 61 72 67 75 ed name and argu
0b30: 6d 65 6e 74 73 0a 20 66 6f 72 20 74 68 65 20 6f ments. for the o
0b40: 72 69 67 69 6e 61 6c 20 6e 6f 6e 2d 65 78 69 73 riginal non-exis
0b50: 74 65 6e 74 20 63 6f 6d 6d 61 6e 64 2e 0a 20 54 tent command.. T
0b60: 68 65 20 5c 66 42 75 6e 6b 6e 6f 77 6e 5c 66 52 he \fBunknown\fR
0b70: 20 63 6f 6d 6d 61 6e 64 20 74 79 70 69 63 61 6c command typical
0b80: 6c 79 20 64 6f 65 73 20 74 68 69 6e 67 73 20 6c ly does things l
0b90: 69 6b 65 20 73 65 61 72 63 68 69 6e 67 0a 40 40 ike searching.@@
0ba0: 20 2d 38 37 2c 37 20 2b 39 30 2c 37 20 40 40 0a -87,7 +90,7 @@.
0bb0: 20 2e 43 45 0a 20 0a 20 2e 53 48 20 22 53 45 45 .CE. . .SH "SEE
0bc0: 20 41 4c 53 4f 22 0a 2d 69 6e 66 6f 28 6e 29 2c ALSO".-info(n),
0bd0: 20 70 72 6f 63 28 6e 29 2c 20 69 6e 74 65 72 70 proc(n), interp
0be0: 28 6e 29 2c 20 6c 69 62 72 61 72 79 28 6e 29 0a (n), library(n).
0bf0: 2b 69 6e 66 6f 28 6e 29 2c 20 70 72 6f 63 28 6e +info(n), proc(n
0c00: 29 2c 20 69 6e 74 65 72 70 28 6e 29 2c 20 6c 69 ), interp(n), li
0c10: 62 72 61 72 79 28 6e 29 2c 20 6e 61 6d 65 73 70 brary(n), namesp
0c20: 61 63 65 28 6e 29 0a 20 0a 20 2e 53 48 20 4b 45 ace(n). . .SH KE
0c30: 59 57 4f 52 44 53 0a 20 65 72 72 6f 72 2c 20 6e YWORDS. error, n
0c40: 6f 6e 2d 65 78 69 73 74 65 6e 74 20 63 6f 6d 6d on-existent comm
0c50: 61 6e 64 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 and.Index: gener
0c60: 69 63 2f 74 63 6c 42 61 73 69 63 2e 63 0a 3d 3d ic/tclBasic.c.==
0c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0c90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0ca0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0cb0: 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 =.RCS file: /cvs
0cc0: 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e root/tcl/tcl/gen
0cd0: 65 72 69 63 2f 74 63 6c 42 61 73 69 63 2e 63 2c eric/tclBasic.c,
0ce0: 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 v.retrieving rev
0cf0: 69 73 69 6f 6e 20 31 2e 31 30 36 0a 64 69 66 66 ision 1.106.diff
0d00: 20 2d 75 20 2d 72 31 2e 31 30 36 20 74 63 6c 42 -u -r1.106 tclB
0d10: 61 73 69 63 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72 asic.c.--- gener
0d20: 69 63 2f 74 63 6c 42 61 73 69 63 2e 63 09 31 34 ic/tclBasic.c.14
0d30: 20 4a 75 6e 20 32 30 30 34 20 32 32 3a 31 34 3a Jun 2004 22:14:
0d40: 31 31 20 2d 30 30 30 30 09 31 2e 31 30 36 0a 2b 11 -0000.1.106.+
0d50: 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 42 61 ++ generic/tclBa
0d60: 73 69 63 2e 63 09 33 20 4a 75 6c 20 32 30 30 34 sic.c.3 Jul 2004
0d70: 20 30 30 3a 31 33 3a 32 34 20 2d 30 30 30 30 0a 00:13:24 -0000.
0d80: 40 40 20 2d 33 30 34 31 2c 36 20 2b 33 30 34 31 @@ -3041,6 +3041
0d90: 2c 31 30 20 40 40 0a 20 20 20 20 20 69 6e 74 20 ,10 @@. int
0da0: 69 3b 0a 20 20 20 20 20 43 61 6c 6c 46 72 61 6d i;. CallFram
0db0: 65 20 2a 73 61 76 65 64 56 61 72 46 72 61 6d 65 e *savedVarFrame
0dc0: 50 74 72 3b 09 2f 2a 20 53 61 76 65 73 20 6f 6c Ptr;./* Saves ol
0dd0: 64 20 63 6f 70 79 20 6f 66 20 69 50 74 72 2d 3e d copy of iPtr->
0de0: 76 61 72 46 72 61 6d 65 50 74 72 0a 20 09 09 09 varFramePtr. ...
0df0: 09 09 20 2a 20 69 6e 20 63 61 73 65 20 54 43 4c .. * in case TCL
0e00: 5f 45 56 41 4c 5f 47 4c 4f 42 41 4c 20 77 61 73 _EVAL_GLOBAL was
0e10: 20 73 65 74 2e 20 2a 2f 0a 2b 20 20 20 20 4e 61 set. */.+ Na
0e20: 6d 65 73 70 61 63 65 20 2a 63 75 72 72 4e 73 50 mespace *currNsP
0e30: 74 72 20 3d 20 4e 55 4c 4c 3b 09 2f 2a 20 55 73 tr = NULL;./* Us
0e40: 65 64 20 74 6f 20 63 68 65 63 6b 20 66 6f 72 2c ed to check for,
0e50: 20 61 6e 64 20 69 6e 76 6f 6b 65 20 61 6e 79 0a and invoke any.
0e60: 2b 09 09 09 09 09 20 2a 20 72 65 67 69 73 74 65 +..... * registe
0e70: 72 65 64 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d red unknown comm
0e80: 6d 61 6e 64 0a 2b 09 09 09 09 09 20 2a 20 68 61 mand.+..... * ha
0e90: 6e 64 6c 65 72 20 66 6f 72 20 74 68 65 20 63 75 ndler for the cu
0ea0: 72 72 65 6e 74 20 6e 61 6d 65 73 70 61 63 65 0a rrent namespace.
0eb0: 2b 09 09 09 09 09 20 2a 20 28 73 65 65 20 54 49 +..... * (see TI
0ec0: 50 20 31 38 31 29 2e 20 2a 2f 0a 20 20 20 20 20 P 181). */.
0ed0: 69 6e 74 20 63 6f 64 65 20 3d 20 54 43 4c 5f 4f int code = TCL_O
0ee0: 4b 3b 0a 20 20 20 20 20 69 6e 74 20 74 72 61 63 K;. int trac
0ef0: 65 43 6f 64 65 20 3d 20 54 43 4c 5f 4f 4b 3b 0a eCode = TCL_OK;.
0f00: 20 20 20 20 20 69 6e 74 20 63 68 65 63 6b 54 72 int checkTr
0f10: 61 63 65 73 20 3d 20 31 3b 0a 40 40 20 2d 33 30 aces = 1;.@@ -30
0f20: 35 39 2c 34 32 20 2b 33 30 36 33 2c 38 36 20 40 59,42 +3063,86 @
0f30: 40 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 @. */.
0f40: 77 68 69 6c 65 20 28 31 29 20 7b 0a 20 20 20 20 while (1) {.
0f50: 20 0a 2d 20 20 20 20 20 20 20 20 2f 2a 0a 2d 20 .- /*.-
0f60: 20 20 20 20 20 20 20 20 2a 20 46 69 6e 64 20 74 * Find t
0f70: 68 65 20 70 72 6f 63 65 64 75 72 65 20 74 6f 20 he procedure to
0f80: 65 78 65 63 75 74 65 20 74 68 69 73 20 63 6f 6d execute this com
0f90: 6d 61 6e 64 2e 20 49 66 20 74 68 65 72 65 20 69 mand. If there i
0fa0: 73 6e 27 74 20 6f 6e 65 2c 0a 2d 20 20 20 20 20 sn't one,.-
0fb0: 20 20 20 20 2a 20 74 68 65 6e 20 73 65 65 20 69 * then see i
0fc0: 66 20 74 68 65 72 65 20 69 73 20 61 20 63 6f 6d f there is a com
0fd0: 6d 61 6e 64 20 22 75 6e 6b 6e 6f 77 6e 22 2e 20 mand "unknown".
0fe0: 20 49 66 20 73 6f 2c 20 63 72 65 61 74 65 20 61 If so, create a
0ff0: 20 6e 65 77 0a 2d 20 20 20 20 20 20 20 20 20 2a new.- *
1000: 20 77 6f 72 64 20 61 72 72 61 79 20 77 69 74 68 word array with
1010: 20 22 75 6e 6b 6e 6f 77 6e 22 20 61 73 20 74 68 "unknown" as th
1020: 65 20 66 69 72 73 74 20 77 6f 72 64 20 61 6e 64 e first word and
1030: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2d 20 the original.-
1040: 20 20 20 20 20 20 20 20 2a 20 63 6f 6d 6d 61 6e * comman
1050: 64 20 77 6f 72 64 73 20 61 73 20 61 72 67 75 6d d words as argum
1060: 65 6e 74 73 2e 20 20 54 68 65 6e 20 63 61 6c 6c ents. Then call
1070: 20 6f 75 72 73 65 6c 76 65 73 20 72 65 63 75 72 ourselves recur
1080: 73 69 76 65 6c 79 0a 2d 20 20 20 20 20 20 20 20 sively.-
1090: 20 2a 20 74 6f 20 65 78 65 63 75 74 65 20 69 74 * to execute it
10a0: 2e 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 46 69 6e 64 ..+./*.+. * Find
10b0: 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 74 the procedure t
10c0: 6f 20 65 78 65 63 75 74 65 20 74 68 69 73 20 63 o execute this c
10d0: 6f 6d 6d 61 6e 64 2e 20 49 66 20 74 68 65 72 65 ommand. If there
10e0: 20 69 73 6e 27 74 20 6f 6e 65 2c 0a 2b 09 20 2a isn't one,.+. *
10f0: 20 74 68 65 6e 20 73 65 65 20 69 66 20 74 68 65 then see if the
1100: 72 65 20 69 73 20 61 20 63 6f 6d 6d 61 6e 64 20 re is a command
1110: 22 75 6e 6b 6e 6f 77 6e 22 2e 20 20 49 66 20 73 "unknown". If s
1120: 6f 2c 20 63 72 65 61 74 65 20 61 20 6e 65 77 0a o, create a new.
1130: 2b 09 20 2a 20 77 6f 72 64 20 61 72 72 61 79 20 +. * word array
1140: 77 69 74 68 20 22 75 6e 6b 6e 6f 77 6e 22 20 61 with "unknown" a
1150: 73 20 74 68 65 20 66 69 72 73 74 20 77 6f 72 64 s the first word
1160: 20 61 6e 64 20 74 68 65 20 6f 72 69 67 69 6e 61 and the origina
1170: 6c 0a 2b 09 20 2a 20 63 6f 6d 6d 61 6e 64 20 77 l.+. * command w
1180: 6f 72 64 73 20 61 73 20 61 72 67 75 6d 65 6e 74 ords as argument
1190: 73 2e 20 20 54 68 65 6e 20 63 61 6c 6c 20 6f 75 s. Then call ou
11a0: 72 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 rselves recursiv
11b0: 65 6c 79 0a 2b 09 20 2a 20 74 6f 20 65 78 65 63 ely.+. * to exec
11c0: 75 74 65 20 69 74 2e 0a 20 09 20 2a 0a 20 09 20 ute it.. . *. .
11d0: 2a 20 49 66 20 63 61 6c 6c 65 72 20 72 65 71 75 * If caller requ
11e0: 65 73 74 73 2c 20 6f 72 20 69 66 20 77 65 27 72 ests, or if we'r
11f0: 65 20 72 65 73 6f 6c 76 69 6e 67 20 74 68 65 20 e resolving the
1200: 74 61 72 67 65 74 20 65 6e 64 20 6f 66 0a 20 09 target end of. .
1210: 20 2a 20 61 6e 20 69 6e 74 65 72 70 65 74 65 72 * an interpeter
1220: 20 61 6c 69 61 73 20 28 54 43 4c 5f 45 56 41 4c alias (TCL_EVAL
1230: 5f 49 4e 56 4f 4b 45 29 2c 20 62 65 20 73 75 72 _INVOKE), be sur
1240: 65 20 74 6f 20 64 6f 20 63 6f 6d 6d 61 6e 64 0a e to do command.
1250: 20 09 20 2a 20 6e 61 6d 65 20 72 65 73 6f 6c 75 . * name resolu
1260: 74 69 6f 6e 20 69 6e 20 74 68 65 20 67 6c 6f 62 tion in the glob
1270: 61 6c 20 6e 61 6d 65 73 70 61 63 65 2e 0a 2d 20 al namespace..-
1280: 20 20 20 20 20 20 20 20 2a 2f 0a 2b 09 20 2a 2f */.+. */
1290: 0a 20 0a 20 09 73 61 76 65 64 56 61 72 46 72 61 . . .savedVarFra
12a0: 6d 65 50 74 72 20 3d 20 69 50 74 72 2d 3e 76 61 mePtr = iPtr->va
12b0: 72 46 72 61 6d 65 50 74 72 3b 0a 20 09 69 66 20 rFramePtr;. .if
12c0: 28 66 6c 61 67 73 20 26 20 28 54 43 4c 5f 45 56 (flags & (TCL_EV
12d0: 41 4c 5f 49 4e 56 4f 4b 45 20 7c 20 54 43 4c 5f AL_INVOKE | TCL_
12e0: 45 56 41 4c 5f 47 4c 4f 42 41 4c 29 29 20 7b 0a EVAL_GLOBAL)) {.
12f0: 20 09 20 20 20 20 69 50 74 72 2d 3e 76 61 72 46 . iPtr->varF
1300: 72 61 6d 65 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a ramePtr = NULL;.
1310: 20 09 7d 0a 2d 20 20 20 20 20 20 20 20 63 6d 64 .}.- cmd
1320: 50 74 72 20 3d 20 28 43 6f 6d 6d 61 6e 64 20 2a Ptr = (Command *
1330: 29 20 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 ) Tcl_GetCommand
1340: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 FromObj(interp,
1350: 6f 62 6a 76 5b 30 5d 29 3b 0a 2b 09 63 6d 64 50 objv[0]);.+.cmdP
1360: 74 72 20 3d 20 28 43 6f 6d 6d 61 6e 64 20 2a 29 tr = (Command *)
1370: 20 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 46 Tcl_GetCommandF
1380: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f romObj(interp, o
1390: 62 6a 76 5b 30 5d 29 3b 0a 2b 09 2f 2a 0a 2b 09 bjv[0]);.+./*.+.
13a0: 20 2a 20 47 72 61 62 20 63 75 72 72 65 6e 74 20 * Grab current
13b0: 6e 61 6d 65 73 70 61 63 65 20 62 65 66 6f 72 65 namespace before
13c0: 20 72 65 73 74 6f 72 69 6e 67 20 76 61 72 20 66 restoring var f
13d0: 72 61 6d 65 2c 20 66 6f 72 20 75 6e 6b 6e 6f 77 rame, for unknow
13e0: 6e 0a 2b 09 20 2a 20 68 61 6e 64 6c 65 72 20 63 n.+. * handler c
13f0: 68 65 63 6b 20 62 65 6c 6f 77 2e 20 49 6d 70 6f heck below. Impo
1400: 72 74 61 6e 74 20 74 6f 20 67 72 61 62 20 69 74 rtant to grab it
1410: 20 68 65 72 65 20 73 6f 20 74 68 61 74 20 77 65 here so that we
1420: 0a 2b 09 20 2a 20 72 65 73 70 65 63 74 20 74 68 .+. * respect th
1430: 65 20 54 43 4c 5f 45 56 41 4c 5f 49 4e 56 4f 4b e TCL_EVAL_INVOK
1440: 45 2f 54 43 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41 E/TCL_EVAL_GLOBA
1450: 4c 20 66 6c 61 67 73 20 77 68 69 63 68 20 6d 61 L flags which ma
1460: 79 0a 2b 09 20 2a 20 68 61 76 65 20 62 65 65 6e y.+. * have been
1470: 20 70 61 73 73 65 64 2e 0a 2b 09 20 2a 2f 0a 2b passed..+. */.+
1480: 09 69 66 20 28 69 50 74 72 2d 3e 76 61 72 46 72 .if (iPtr->varFr
1490: 61 6d 65 50 74 72 20 21 3d 20 4e 55 4c 4c 20 26 amePtr != NULL &
14a0: 26 20 69 50 74 72 2d 3e 76 61 72 46 72 61 6d 65 & iPtr->varFrame
14b0: 50 74 72 2d 3e 6e 73 50 74 72 20 21 3d 20 4e 55 Ptr->nsPtr != NU
14c0: 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 63 75 72 72 LL) {.+. curr
14d0: 4e 73 50 74 72 20 3d 20 69 50 74 72 2d 3e 76 61 NsPtr = iPtr->va
14e0: 72 46 72 61 6d 65 50 74 72 2d 3e 6e 73 50 74 72 rFramePtr->nsPtr
14f0: 3b 0a 2b 09 7d 20 65 6c 73 65 20 7b 0a 2b 09 20 ;.+.} else {.+.
1500: 20 20 20 2f 2a 20 4e 6f 74 65 3a 20 41 73 73 75 /* Note: Assu
1510: 6d 65 73 20 67 6c 6f 62 61 6c 4e 73 50 74 72 20 mes globalNsPtr
1520: 63 61 6e 20 6e 65 76 65 72 20 62 65 20 4e 55 4c can never be NUL
1530: 4c 2e 20 2a 2f 0a 2b 09 20 20 20 20 63 75 72 72 L. */.+. curr
1540: 4e 73 50 74 72 20 3d 20 69 50 74 72 2d 3e 67 6c NsPtr = iPtr->gl
1550: 6f 62 61 6c 4e 73 50 74 72 3b 0a 2b 09 7d 0a 2b obalNsPtr;.+.}.+
1560: 09 2f 2a 20 52 65 73 74 6f 72 65 20 76 61 72 20 ./* Restore var
1570: 66 72 61 6d 65 2e 20 2a 2f 0a 20 09 69 50 74 72 frame. */. .iPtr
1580: 2d 3e 76 61 72 46 72 61 6d 65 50 74 72 20 3d 20 ->varFramePtr =
1590: 73 61 76 65 64 56 61 72 46 72 61 6d 65 50 74 72 savedVarFramePtr
15a0: 3b 0a 20 0a 2d 20 20 20 20 20 20 20 20 69 66 20 ;. .- if
15b0: 28 63 6d 64 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 (cmdPtr == NULL)
15c0: 20 7b 0a 2b 09 69 66 20 28 63 6d 64 50 74 72 20 {.+.if (cmdPtr
15d0: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 == NULL) {.+.
15e0: 20 69 6e 74 20 6e 65 77 4f 62 6a 63 2c 20 68 61 int newObjc, ha
15f0: 6e 64 6c 65 72 4f 62 6a 63 3b 0a 2b 09 20 20 20 ndlerObjc;.+.
1600: 20 54 63 6c 5f 4f 62 6a 20 2a 2a 68 61 6e 64 6c Tcl_Obj **handl
1610: 65 72 4f 62 6a 76 3b 0a 2b 09 20 20 20 20 2f 2a erObjv;.+. /*
1620: 0a 2b 09 20 20 20 20 20 2a 20 43 68 65 63 6b 20 .+. * Check
1630: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 75 if there is an u
1640: 6e 6b 6e 6f 77 6e 20 68 61 6e 64 6c 65 72 20 72 nknown handler r
1650: 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 74 68 egistered for th
1660: 69 73 0a 2b 09 20 20 20 20 20 2a 20 6e 61 6d 65 is.+. * name
1670: 73 70 61 63 65 2e 20 4f 74 68 65 72 77 69 73 65 space. Otherwise
1680: 2c 20 75 73 65 20 74 68 65 20 67 6c 6f 62 61 6c , use the global
1690: 20 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b 6e 6f namespace unkno
16a0: 77 6e 20 68 61 6e 64 6c 65 72 2e 0a 2b 09 20 20 wn handler..+.
16b0: 20 20 20 2a 2f 0a 2b 09 20 20 20 20 69 66 20 28 */.+. if (
16c0: 63 75 72 72 4e 73 50 74 72 2d 3e 75 6e 6b 6e 6f currNsPtr->unkno
16d0: 77 6e 48 61 6e 64 6c 65 72 50 74 72 20 3d 3d 20 wnHandlerPtr ==
16e0: 4e 55 4c 4c 29 20 7b 0a 2b 09 09 63 75 72 72 4e NULL) {.+..currN
16f0: 73 50 74 72 20 3d 20 69 50 74 72 2d 3e 67 6c 6f sPtr = iPtr->glo
1700: 62 61 6c 4e 73 50 74 72 3b 0a 2b 09 20 20 20 20 balNsPtr;.+.
1710: 7d 0a 2b 09 20 20 20 20 69 66 20 28 63 75 72 72 }.+. if (curr
1720: 4e 73 50 74 72 20 3d 3d 20 69 50 74 72 2d 3e 67 NsPtr == iPtr->g
1730: 6c 6f 62 61 6c 4e 73 50 74 72 20 26 26 0a 2b 09 lobalNsPtr &&.+.
1740: 09 63 75 72 72 4e 73 50 74 72 2d 3e 75 6e 6b 6e .currNsPtr->unkn
1750: 6f 77 6e 48 61 6e 64 6c 65 72 50 74 72 20 3d 3d ownHandlerPtr ==
1760: 20 4e 55 4c 4c 29 20 7b 0a 2b 09 09 2f 2a 20 47 NULL) {.+../* G
1770: 6c 6f 62 61 6c 20 6e 61 6d 65 73 70 61 63 65 20 lobal namespace
1780: 68 61 73 20 6c 6f 73 74 20 75 6e 6b 6e 6f 77 6e has lost unknown
1790: 20 68 61 6e 64 6c 65 72 2c 20 72 65 73 65 74 20 handler, reset
17a0: 74 6f 0a 2b 09 09 20 2a 20 64 65 66 61 75 6c 74 to.+.. * default
17b0: 2e 20 2a 2f 0a 2b 09 09 63 75 72 72 4e 73 50 74 . */.+..currNsPt
17c0: 72 2d 3e 75 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 r->unknownHandle
17d0: 72 50 74 72 20 3d 20 0a 2b 09 09 20 20 20 20 54 rPtr = .+.. T
17e0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 cl_NewStringObj(
17f0: 22 3a 3a 75 6e 6b 6e 6f 77 6e 22 2c 20 2d 31 29 "::unknown", -1)
1800: 3b 0a 2b 09 09 54 63 6c 5f 49 6e 63 72 52 65 66 ;.+..Tcl_IncrRef
1810: 43 6f 75 6e 74 28 63 75 72 72 4e 73 50 74 72 2d Count(currNsPtr-
1820: 3e 75 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 >unknownHandlerP
1830: 74 72 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b 0a 2b tr);.+. }.+.+
1840: 09 20 20 20 20 69 66 20 28 54 63 6c 5f 4c 69 73 . if (Tcl_Lis
1850: 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 tObjGetElements(
1860: 69 6e 74 65 72 70 2c 0a 2b 09 09 63 75 72 72 4e interp,.+..currN
1870: 73 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e 48 61 6e sPtr->unknownHan
1880: 64 6c 65 72 50 74 72 2c 20 26 68 61 6e 64 6c 65 dlerPtr, &handle
1890: 72 4f 62 6a 63 2c 20 26 68 61 6e 64 6c 65 72 4f rObjc, &handlerO
18a0: 62 6a 76 29 0a 2b 09 09 21 3d 20 54 43 4c 5f 4f bjv).+..!= TCL_O
18b0: 4b 29 20 7b 0a 2b 09 09 72 65 74 75 72 6e 20 54 K) {.+..return T
18c0: 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 20 20 20 20 CL_ERROR;.+.
18d0: 7d 0a 2b 09 20 20 20 20 6e 65 77 4f 62 6a 63 20 }.+. newObjc
18e0: 3d 20 6f 62 6a 63 20 2b 20 68 61 6e 64 6c 65 72 = objc + handler
18f0: 4f 62 6a 63 3b 0a 20 09 20 20 20 20 6e 65 77 4f Objc;. . newO
1900: 62 6a 76 20 3d 20 28 54 63 6c 5f 4f 62 6a 20 2a bjv = (Tcl_Obj *
1910: 2a 29 20 63 6b 61 6c 6c 6f 63 28 28 75 6e 73 69 *) ckalloc((unsi
1920: 67 6e 65 64 29 0a 2d 09 09 28 28 6f 62 6a 63 20 gned).-..((objc
1930: 2b 20 31 29 20 2a 20 73 69 7a 65 6f 66 20 28 54 + 1) * sizeof (T
1940: 63 6c 5f 4f 62 6a 20 2a 29 29 29 3b 0a 2d 09 20 cl_Obj *)));.-.
1950: 20 20 20 66 6f 72 20 28 69 20 3d 20 6f 62 6a 63 for (i = objc
1960: 2d 31 3b 20 69 20 3e 3d 20 30 3b 20 69 2d 2d 29 -1; i >= 0; i--)
1970: 20 7b 0a 2d 09 20 20 20 20 20 20 20 20 6e 65 77 {.-. new
1980: 4f 62 6a 76 5b 69 2b 31 5d 20 3d 20 6f 62 6a 76 Objv[i+1] = objv
1990: 5b 69 5d 3b 0a 2b 09 09 28 6e 65 77 4f 62 6a 63 [i];.+..(newObjc
19a0: 20 2a 20 73 69 7a 65 6f 66 20 28 54 63 6c 5f 4f * sizeof (Tcl_O
19b0: 62 6a 20 2a 29 29 29 3b 0a 2b 09 20 20 20 20 2f bj *)));.+. /
19c0: 2a 20 43 6f 70 79 20 63 6f 6d 6d 61 6e 64 20 70 * Copy command p
19d0: 72 65 66 69 78 20 66 72 6f 6d 20 75 6e 6b 6e 6f refix from unkno
19e0: 77 6e 20 68 61 6e 64 6c 65 72 2e 20 2a 2f 0a 2b wn handler. */.+
19f0: 09 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b . for (i = 0;
1a00: 20 69 20 3c 20 68 61 6e 64 6c 65 72 4f 62 6a 63 i < handlerObjc
1a10: 3b 20 2b 2b 69 29 20 7b 0a 2b 09 09 6e 65 77 4f ; ++i) {.+..newO
1a20: 62 6a 76 5b 69 5d 20 3d 20 68 61 6e 64 6c 65 72 bjv[i] = handler
1a30: 4f 62 6a 76 5b 69 5d 3b 0a 2b 09 20 20 20 20 7d Objv[i];.+. }
1a40: 0a 2b 09 20 20 20 20 2f 2a 20 41 64 64 20 69 6e .+. /* Add in
1a50: 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20 61 6e command name an
1a60: 64 20 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a d arguments. */.
1a70: 2b 09 20 20 20 20 66 6f 72 20 28 69 20 3d 20 6f +. for (i = o
1a80: 62 6a 63 2d 31 3b 20 69 20 3e 3d 20 30 3b 20 2d bjc-1; i >= 0; -
1a90: 2d 69 29 20 7b 0a 2b 09 09 6e 65 77 4f 62 6a 76 -i) {.+..newObjv
1aa0: 5b 69 2b 68 61 6e 64 6c 65 72 4f 62 6a 63 5d 20 [i+handlerObjc]
1ab0: 3d 20 6f 62 6a 76 5b 69 5d 3b 0a 20 09 20 20 20 = objv[i];. .
1ac0: 20 7d 0a 2d 09 20 20 20 20 6e 65 77 4f 62 6a 76 }.-. newObjv
1ad0: 5b 30 5d 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 [0] = Tcl_NewStr
1ae0: 69 6e 67 4f 62 6a 28 22 3a 3a 75 6e 6b 6e 6f 77 ingObj("::unknow
1af0: 6e 22 2c 20 2d 31 29 3b 0a 20 09 20 20 20 20 54 n", -1);. . T
1b00: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 cl_IncrRefCount(
1b10: 6e 65 77 4f 62 6a 76 5b 30 5d 29 3b 0a 20 09 20 newObjv[0]);. .
1b20: 20 20 20 63 6d 64 50 74 72 20 3d 20 28 43 6f 6d cmdPtr = (Com
1b30: 6d 61 6e 64 20 2a 29 20 54 63 6c 5f 47 65 74 43 mand *) Tcl_GetC
1b40: 6f 6d 6d 61 6e 64 46 72 6f 6d 4f 62 6a 28 69 6e ommandFromObj(in
1b50: 74 65 72 70 2c 20 6e 65 77 4f 62 6a 76 5b 30 5d terp, newObjv[0]
1b60: 29 3b 0a 20 09 20 20 20 20 69 66 20 28 63 6d 64 );. . if (cmd
1b70: 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2d Ptr == NULL) {.-
1b80: 09 20 20 20 20 20 20 20 20 54 63 6c 5f 41 70 70 . Tcl_App
1b90: 65 6e 64 53 74 72 69 6e 67 73 54 6f 4f 62 6a 28 endStringsToObj(
1ba0: 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 Tcl_GetObjResult
1bb0: 28 69 6e 74 65 72 70 29 2c 0a 2b 09 09 2f 2a 20 (interp),.+../*
1bc0: 55 6e 6b 6e 6f 77 6e 20 68 61 6e 64 6c 65 72 20 Unknown handler
1bd0: 64 6f 65 73 6e 27 74 20 65 78 69 73 74 2e 20 2a doesn't exist. *
1be0: 2f 0a 2b 09 09 54 63 6c 5f 41 70 70 65 6e 64 53 /.+..Tcl_AppendS
1bf0: 74 72 69 6e 67 73 54 6f 4f 62 6a 28 54 63 6c 5f tringsToObj(Tcl_
1c00: 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 GetObjResult(int
1c10: 65 72 70 29 2c 0a 20 09 09 20 20 20 20 22 69 6e erp),. .. "in
1c20: 76 61 6c 69 64 20 63 6f 6d 6d 61 6e 64 20 6e 61 valid command na
1c30: 6d 65 20 5c 22 22 2c 20 54 63 6c 5f 47 65 74 53 me \"", Tcl_GetS
1c40: 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 tring(objv[0]),
1c50: 22 5c 22 22 2c 0a 20 09 09 20 20 20 20 28 63 68 "\"",. .. (ch
1c60: 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 2d 09 20 ar *) NULL);.-.
1c70: 20 20 20 20 20 20 20 63 6f 64 65 20 3d 20 54 43 code = TC
1c80: 4c 5f 45 52 52 4f 52 3b 0a 2b 09 09 63 6f 64 65 L_ERROR;.+..code
1c90: 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 09 = TCL_ERROR;. .
1ca0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 09 } else {.+..
1cb0: 2f 2a 20 45 76 61 6c 75 61 74 65 2e 20 2a 2f 0a /* Evaluate. */.
1cc0: 20 09 20 20 20 20 20 20 20 20 69 50 74 72 2d 3e . iPtr->
1cd0: 6e 75 6d 4c 65 76 65 6c 73 2b 2b 3b 0a 2d 09 20 numLevels++;.-.
1ce0: 20 20 20 20 20 20 20 63 6f 64 65 20 3d 20 54 63 code = Tc
1cf0: 6c 45 76 61 6c 4f 62 6a 76 49 6e 74 65 72 6e 61 lEvalObjvInterna
1d00: 6c 28 69 6e 74 65 72 70 2c 20 6f 62 6a 63 2b 31 l(interp, objc+1
1d10: 2c 20 6e 65 77 4f 62 6a 76 2c 20 63 6f 6d 6d 61 , newObjv, comma
1d20: 6e 64 2c 20 6c 65 6e 67 74 68 2c 20 30 29 3b 0a nd, length, 0);.
1d30: 2b 09 20 20 20 20 20 20 20 20 63 6f 64 65 20 3d +. code =
1d40: 20 54 63 6c 45 76 61 6c 4f 62 6a 76 49 6e 74 65 TclEvalObjvInte
1d50: 72 6e 61 6c 28 69 6e 74 65 72 70 2c 20 6e 65 77 rnal(interp, new
1d60: 4f 62 6a 63 2c 20 6e 65 77 4f 62 6a 76 2c 20 63 Objc, newObjv, c
1d70: 6f 6d 6d 61 6e 64 2c 20 0a 2b 09 09 09 09 6c 65 ommand, .+....le
1d80: 6e 67 74 68 2c 20 30 29 3b 0a 20 09 20 20 20 20 ngth, 0);. .
1d90: 20 20 20 20 69 50 74 72 2d 3e 6e 75 6d 4c 65 76 iPtr->numLev
1da0: 65 6c 73 2d 2d 3b 0a 20 09 20 20 20 20 7d 0a 20 els--;. . }.
1db0: 09 20 20 20 20 54 63 6c 5f 44 65 63 72 52 65 66 . Tcl_DecrRef
1dc0: 43 6f 75 6e 74 28 6e 65 77 4f 62 6a 76 5b 30 5d Count(newObjv[0]
1dd0: 29 3b 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 );.Index: generi
1de0: 63 2f 74 63 6c 49 6e 74 2e 68 0a 3d 3d 3d 3d 3d c/tclInt.h.=====
1df0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1e00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1e10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1e20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 ==============.R
1e30: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f CS file: /cvsroo
1e40: 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 t/tcl/tcl/generi
1e50: 63 2f 74 63 6c 49 6e 74 2e 68 2c 76 0a 72 65 74 c/tclInt.h,v.ret
1e60: 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e rieving revision
1e70: 20 31 2e 31 36 37 0a 64 69 66 66 20 2d 75 20 2d 1.167.diff -u -
1e80: 72 31 2e 31 36 37 20 74 63 6c 49 6e 74 2e 68 0a r1.167 tclInt.h.
1e90: 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 --- generic/tclI
1ea0: 6e 74 2e 68 09 32 33 20 4a 75 6e 20 32 30 30 34 nt.h.23 Jun 2004
1eb0: 20 30 30 3a 32 34 3a 34 32 20 2d 30 30 30 30 09 00:24:42 -0000.
1ec0: 31 2e 31 36 37 0a 2b 2b 2b 20 67 65 6e 65 72 69 1.167.+++ generi
1ed0: 63 2f 74 63 6c 49 6e 74 2e 68 09 33 20 4a 75 6c c/tclInt.h.3 Jul
1ee0: 20 32 30 30 34 20 30 30 3a 31 33 3a 33 31 20 2d 2004 00:13:31 -
1ef0: 30 30 30 30 0a 40 40 20 2d 32 32 32 2c 36 20 2b 0000.@@ -222,6 +
1f00: 32 32 32 2c 39 20 40 40 0a 20 20 20 20 20 54 63 222,9 @@. Tc
1f10: 6c 5f 45 6e 73 65 6d 62 6c 65 20 2a 65 6e 73 65 l_Ensemble *ense
1f20: 6d 62 6c 65 73 3b 09 2f 2a 20 4c 69 73 74 20 6f mbles;./* List o
1f30: 66 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 f structures tha
1f40: 74 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 64 65 t contain the de
1f50: 74 61 69 6c 73 0a 20 09 09 09 09 20 2a 20 6f 66 tails. .... * of
1f60: 20 74 68 65 20 65 6e 73 65 6d 62 6c 65 73 20 74 the ensembles t
1f70: 68 61 74 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e hat are implemen
1f80: 74 65 64 20 6f 6e 0a 20 09 09 09 09 20 2a 20 74 ted on. .... * t
1f90: 6f 70 20 6f 66 20 74 68 69 73 20 6e 61 6d 65 73 op of this names
1fa0: 70 61 63 65 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 pace. */.+ Tc
1fb0: 6c 5f 4f 62 6a 20 2a 75 6e 6b 6e 6f 77 6e 48 61 l_Obj *unknownHa
1fc0: 6e 64 6c 65 72 50 74 72 3b 09 2f 2a 20 41 20 73 ndlerPtr;./* A s
1fd0: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 74 cript fragment t
1fe0: 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 o be used when c
1ff0: 6f 6d 6d 61 6e 64 0a 2b 09 09 09 09 20 2a 20 72 ommand.+.... * r
2000: 65 73 6f 6c 75 74 69 6f 6e 20 69 6e 20 74 68 69 esolution in thi
2010: 73 20 6e 61 6d 65 73 70 61 63 65 20 66 61 69 6c s namespace fail
2020: 73 2e 20 53 65 65 20 54 49 50 0a 2b 09 09 09 09 s. See TIP.+....
2030: 20 2a 20 31 38 31 20 66 6f 72 20 64 65 74 61 69 * 181 for detai
2040: 6c 73 2e 20 2a 2f 0a 20 7d 20 4e 61 6d 65 73 70 ls. */. } Namesp
2050: 61 63 65 3b 0a 20 0a 20 2f 2a 0a 49 6e 64 65 78 ace;. . /*.Index
2060: 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d : generic/tclNam
2070: 65 73 70 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d esp.c.==========
2080: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2090: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
20a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
20b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 =========.RCS fi
20c0: 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c le: /cvsroot/tcl
20d0: 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c /tcl/generic/tcl
20e0: 4e 61 6d 65 73 70 2e 63 2c 76 0a 72 65 74 72 69 Namesp.c,v.retri
20f0: 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 eving revision 1
2100: 2e 34 30 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e .40.diff -u -r1.
2110: 34 30 20 74 63 6c 4e 61 6d 65 73 70 2e 63 0a 2d 40 tclNamesp.c.-
2120: 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61 -- generic/tclNa
2130: 6d 65 73 70 2e 63 09 32 35 20 4d 61 79 20 32 30 mesp.c.25 May 20
2140: 30 34 20 31 39 3a 34 35 3a 31 34 20 2d 30 30 30 04 19:45:14 -000
2150: 30 09 31 2e 34 30 0a 2b 2b 2b 20 67 65 6e 65 72 0.1.40.+++ gener
2160: 69 63 2f 74 63 6c 4e 61 6d 65 73 70 2e 63 09 33 ic/tclNamesp.c.3
2170: 20 4a 75 6c 20 32 30 30 34 20 30 30 3a 31 33 3a Jul 2004 00:13:
2180: 34 34 20 2d 30 30 30 30 0a 40 40 20 2d 31 32 2c 44 -0000.@@ -12,
2190: 36 20 2b 31 32 2c 37 20 40 40 0a 20 20 2a 20 43 6 +12,7 @@. * C
21a0: 6f 70 79 72 69 67 68 74 20 28 63 29 20 31 39 39 opyright (c) 199
21b0: 37 20 53 75 6e 20 4d 69 63 72 6f 73 79 73 74 65 7 Sun Microsyste
21c0: 6d 73 2c 20 49 6e 63 2e 0a 20 20 2a 20 43 6f 70 ms, Inc.. * Cop
21d0: 79 72 69 67 68 74 20 28 63 29 20 31 39 39 38 2d yright (c) 1998-
21e0: 31 39 39 39 20 62 79 20 53 63 72 69 70 74 69 63 1999 by Scriptic
21f0: 73 20 43 6f 72 70 6f 72 61 74 69 6f 6e 2e 0a 20 s Corporation..
2200: 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 * Copyright (c)
2210: 20 32 30 30 32 2d 32 30 30 33 20 44 6f 6e 61 6c 2002-2003 Donal
2220: 20 4b 2e 20 46 65 6c 6c 6f 77 73 2e 0a 2b 20 2a K. Fellows..+ *
2230: 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 Copyright (c) 2
2240: 30 30 34 20 4e 65 69 6c 20 4d 61 64 64 65 6e 2e 004 Neil Madden.
2250: 0a 20 20 2a 0a 20 20 2a 20 4f 72 69 67 69 6e 61 . *. * Origina
2260: 6c 6c 79 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 lly implemented
2270: 62 79 0a 20 20 2a 20 20 20 4d 69 63 68 61 65 6c by. * Michael
2280: 20 4a 2e 20 4d 63 4c 65 6e 6e 61 6e 0a 40 40 20 J. McLennan.@@
2290: 2d 32 33 32 2c 36 20 2b 32 33 33 2c 39 20 40 40 -232,6 +233,9 @@
22a0: 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 4e 61 . static int..Na
22b0: 6d 65 73 70 61 63 65 54 61 69 6c 43 6d 64 20 5f mespaceTailCmd _
22c0: 41 4e 53 49 5f 41 52 47 53 5f 28 28 0a 20 09 09 ANSI_ARGS_((. ..
22d0: 09 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 . ClientData
22e0: 64 75 6d 6d 79 2c 20 54 63 6c 5f 49 6e 74 65 72 dummy, Tcl_Inter
22f0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 09 09 09 20 p *interp,. ...
2300: 20 20 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c int objc, Tcl
2310: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 _Obj *CONST objv
2320: 5b 5d 29 29 3b 0a 2b 73 74 61 74 69 63 20 69 6e []));.+static in
2330: 74 09 09 4e 61 6d 65 73 70 61 63 65 55 6e 6b 6e t..NamespaceUnkn
2340: 6f 77 6e 43 6d 64 20 5f 41 4e 53 49 5f 41 52 47 ownCmd _ANSI_ARG
2350: 53 5f 28 28 0a 2b 09 09 09 20 20 20 20 43 6c 69 S_((.+... Cli
2360: 65 6e 74 44 61 74 61 20 64 75 6d 6d 79 2c 20 54 entData dummy, T
2370: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
2380: 70 2c 0a 2b 09 09 09 20 20 20 20 69 6e 74 20 6f p,.+... int o
2390: 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f bjc, Tcl_Obj *CO
23a0: 4e 53 54 20 6f 62 6a 76 5b 5d 29 29 3b 0a 20 73 NST objv[]));. s
23b0: 74 61 74 69 63 20 69 6e 74 09 09 4e 61 6d 65 73 tatic int..Names
23c0: 70 61 63 65 57 68 69 63 68 43 6d 64 20 5f 41 4e paceWhichCmd _AN
23d0: 53 49 5f 41 52 47 53 5f 28 28 0a 20 09 09 09 20 SI_ARGS_((. ...
23e0: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 64 75 ClientData du
23f0: 6d 6d 79 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 mmy, Tcl_Interp
2400: 2a 69 6e 74 65 72 70 2c 0a 20 09 09 09 20 20 20 *interp,. ...
2410: 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f int objc, Tcl_O
2420: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d bj *CONST objv[]
2430: 29 29 3b 0a 40 40 20 2d 36 36 37 2c 36 20 2b 36 ));.@@ -667,6 +6
2440: 37 31 2c 37 20 40 40 0a 20 20 20 20 20 6e 73 50 71,7 @@. nsP
2450: 74 72 2d 3e 63 6f 6d 70 69 6c 65 64 56 61 72 52 tr->compiledVarR
2460: 65 73 50 72 6f 63 20 3d 20 4e 55 4c 4c 3b 0a 20 esProc = NULL;.
2470: 20 20 20 20 6e 73 50 74 72 2d 3e 65 78 70 6f 72 nsPtr->expor
2480: 74 4c 6f 6f 6b 75 70 45 70 6f 63 68 20 3d 20 30 tLookupEpoch = 0
2490: 3b 0a 20 20 20 20 20 6e 73 50 74 72 2d 3e 65 6e ;. nsPtr->en
24a0: 73 65 6d 62 6c 65 73 09 20 20 20 20 20 3d 20 4e sembles. = N
24b0: 55 4c 4c 3b 0a 2b 20 20 20 20 6e 73 50 74 72 2d ULL;.+ nsPtr-
24c0: 3e 75 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 >unknownHandlerP
24d0: 74 72 20 3d 20 4e 55 4c 4c 3b 0a 20 0a 20 20 20 tr = NULL;. .
24e0: 20 20 69 66 20 28 70 61 72 65 6e 74 50 74 72 20 if (parentPtr
24f0: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 20 != NULL) {.
2500: 20 20 20 20 65 6e 74 72 79 50 74 72 20 3d 20 54 entryPtr = T
2510: 63 6c 5f 43 72 65 61 74 65 48 61 73 68 45 6e 74 cl_CreateHashEnt
2520: 72 79 28 26 70 61 72 65 6e 74 50 74 72 2d 3e 63 ry(&parentPtr->c
2530: 68 69 6c 64 54 61 62 6c 65 2c 20 73 69 6d 70 6c hildTable, simpl
2540: 65 4e 61 6d 65 2c 0a 40 40 20 2d 37 35 36 2c 36 eName,.@@ -756,6
2550: 20 2b 37 36 31 2c 31 34 20 40 40 0a 20 20 20 20 +761,14 @@.
2560: 20 7d 0a 20 0a 20 20 20 20 20 2f 2a 0a 2b 20 20 }. . /*.+
2570: 20 20 20 2a 20 49 66 20 74 68 65 20 6e 61 6d 65 * If the name
2580: 73 70 61 63 65 20 68 61 73 20 61 20 72 65 67 69 space has a regi
2590: 73 74 65 72 65 64 20 75 6e 6b 6e 6f 77 6e 20 68 stered unknown h
25a0: 61 6e 64 6c 65 72 20 28 54 49 50 20 31 38 31 29 andler (TIP 181)
25b0: 2c 20 74 68 65 6e 20 66 72 65 65 0a 2b 20 20 20 , then free.+
25c0: 20 20 2a 20 69 74 20 68 65 72 65 2e 0a 2b 20 20 * it here..+
25d0: 20 20 20 2a 2f 0a 2b 20 20 20 20 69 66 20 28 6e */.+ if (n
25e0: 73 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e 48 61 6e sPtr->unknownHan
25f0: 64 6c 65 72 50 74 72 20 21 3d 20 4e 55 4c 4c 29 dlerPtr != NULL)
2600: 20 7b 0a 2b 09 54 63 6c 5f 44 65 63 72 52 65 66 {.+.Tcl_DecrRef
2610: 43 6f 75 6e 74 28 6e 73 50 74 72 2d 3e 75 6e 6b Count(nsPtr->unk
2620: 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 74 72 29 3b nownHandlerPtr);
2630: 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 2f .+ }.+.+ /
2640: 2a 0a 20 20 20 20 20 20 2a 20 49 66 20 74 68 65 *. * If the
2650: 20 6e 61 6d 65 73 70 61 63 65 20 69 73 20 6f 6e namespace is on
2660: 20 74 68 65 20 63 61 6c 6c 20 66 72 61 6d 65 20 the call frame
2670: 73 74 61 63 6b 2c 20 69 74 20 69 73 20 6d 61 72 stack, it is mar
2680: 6b 65 64 20 61 73 20 22 64 79 69 6e 67 22 0a 20 ked as "dying".
2690: 20 20 20 20 20 2a 20 28 4e 53 5f 44 59 49 4e 47 * (NS_DYING
26a0: 20 69 73 20 4f 52 27 64 20 69 6e 74 6f 20 69 74 is OR'd into it
26b0: 73 20 66 6c 61 67 73 29 3a 20 74 68 65 20 6e 61 s flags): the na
26c0: 6d 65 73 70 61 63 65 20 63 61 6e 27 74 20 62 65 mespace can't be
26d0: 20 6c 6f 6f 6b 65 64 20 75 70 0a 20 20 20 20 20 looked up.
26e0: 20 2a 20 62 79 20 6e 61 6d 65 20 62 75 74 20 69 * by name but i
26f0: 74 73 20 63 6f 6d 6d 61 6e 64 73 20 61 6e 64 20 ts commands and
2700: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 73 74 variables are st
2710: 69 6c 6c 20 75 73 61 62 6c 65 20 62 79 20 74 68 ill usable by th
2720: 6f 73 65 0a 40 40 20 2d 32 36 35 30 2c 31 33 20 ose.@@ -2650,13
2730: 2b 32 36 36 33 2c 31 33 20 40 40 0a 20 09 22 63 +2663,13 @@. ."c
2740: 68 69 6c 64 72 65 6e 22 2c 20 22 63 6f 64 65 22 hildren", "code"
2750: 2c 20 22 63 75 72 72 65 6e 74 22 2c 20 22 64 65 , "current", "de
2760: 6c 65 74 65 22 2c 20 22 65 6e 73 65 6d 62 6c 65 lete", "ensemble
2770: 22 2c 0a 20 09 22 65 76 61 6c 22 2c 20 22 65 78 ",. ."eval", "ex
2780: 69 73 74 73 22 2c 20 22 65 78 70 6f 72 74 22 2c ists", "export",
2790: 20 22 66 6f 72 67 65 74 22 2c 20 22 69 6d 70 6f "forget", "impo
27a0: 72 74 22 2c 0a 20 09 22 69 6e 73 63 6f 70 65 22 rt",. ."inscope"
27b0: 2c 20 22 6f 72 69 67 69 6e 22 2c 20 22 70 61 72 , "origin", "par
27c0: 65 6e 74 22 2c 20 22 71 75 61 6c 69 66 69 65 72 ent", "qualifier
27d0: 73 22 2c 0a 2d 09 22 74 61 69 6c 22 2c 20 22 77 s",.-."tail", "w
27e0: 68 69 63 68 22 2c 20 28 63 68 61 72 20 2a 29 20 hich", (char *)
27f0: 4e 55 4c 4c 0a 2b 09 22 74 61 69 6c 22 2c 20 22 NULL.+."tail", "
2800: 75 6e 6b 6e 6f 77 6e 22 2c 20 22 77 68 69 63 68 unknown", "which
2810: 22 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c ", (char *) NULL
2820: 0a 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 65 6e . };. en
2830: 75 6d 20 4e 53 53 75 62 43 6d 64 49 64 78 20 7b um NSSubCmdIdx {
2840: 0a 20 09 4e 53 43 68 69 6c 64 72 65 6e 49 64 78 . .NSChildrenIdx
2850: 2c 20 4e 53 43 6f 64 65 49 64 78 2c 20 4e 53 43 , NSCodeIdx, NSC
2860: 75 72 72 65 6e 74 49 64 78 2c 20 4e 53 44 65 6c urrentIdx, NSDel
2870: 65 74 65 49 64 78 2c 20 4e 53 45 6e 73 65 6d 62 eteIdx, NSEnsemb
2880: 6c 65 49 64 78 2c 0a 20 09 4e 53 45 76 61 6c 49 leIdx,. .NSEvalI
2890: 64 78 2c 20 4e 53 45 78 69 73 74 73 49 64 78 2c dx, NSExistsIdx,
28a0: 20 4e 53 45 78 70 6f 72 74 49 64 78 2c 20 4e 53 NSExportIdx, NS
28b0: 46 6f 72 67 65 74 49 64 78 2c 20 4e 53 49 6d 70 ForgetIdx, NSImp
28c0: 6f 72 74 49 64 78 2c 0a 20 09 4e 53 49 6e 73 63 ortIdx,. .NSInsc
28d0: 6f 70 65 49 64 78 2c 20 4e 53 4f 72 69 67 69 6e opeIdx, NSOrigin
28e0: 49 64 78 2c 20 4e 53 50 61 72 65 6e 74 49 64 78 Idx, NSParentIdx
28f0: 2c 20 4e 53 51 75 61 6c 69 66 69 65 72 73 49 64 , NSQualifiersId
2900: 78 2c 0a 2d 09 4e 53 54 61 69 6c 49 64 78 2c 20 x,.-.NSTailIdx,
2910: 4e 53 57 68 69 63 68 49 64 78 0a 2b 09 4e 53 54 NSWhichIdx.+.NST
2920: 61 69 6c 49 64 78 2c 20 4e 53 55 6e 6b 6e 6f 77 ailIdx, NSUnknow
2930: 6e 49 64 78 2c 20 4e 53 57 68 69 63 68 49 64 78 nIdx, NSWhichIdx
2940: 0a 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 69 6e . };. in
2950: 74 20 69 6e 64 65 78 2c 20 72 65 73 75 6c 74 3b t index, result;
2960: 0a 20 0a 40 40 20 2d 32 37 32 31 2c 36 20 2b 32 . .@@ -2721,6 +2
2970: 37 33 34 2c 39 20 40 40 0a 20 20 20 20 20 20 20 734,9 @@.
2980: 20 20 63 61 73 65 20 4e 53 54 61 69 6c 49 64 78 case NSTailIdx
2990: 3a 0a 20 09 20 20 20 20 72 65 73 75 6c 74 20 3d :. . result =
29a0: 20 4e 61 6d 65 73 70 61 63 65 54 61 69 6c 43 6d NamespaceTailCm
29b0: 64 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e d(clientData, in
29c0: 74 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 terp, objc, objv
29d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 );.
29e0: 62 72 65 61 6b 3b 0a 2b 09 63 61 73 65 20 4e 53 break;.+.case NS
29f0: 55 6e 6b 6e 6f 77 6e 49 64 78 3a 0a 2b 09 20 20 UnknownIdx:.+.
2a00: 20 20 72 65 73 75 6c 74 20 3d 20 4e 61 6d 65 73 result = Names
2a10: 70 61 63 65 55 6e 6b 6e 6f 77 6e 43 6d 64 28 63 paceUnknownCmd(c
2a20: 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e 74 65 72 lientData, inter
2a30: 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 29 3b 0a p, objc, objv);.
2a40: 2b 09 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 +. break;.
2a50: 20 20 20 20 20 20 63 61 73 65 20 4e 53 57 68 69 case NSWhi
2a60: 63 68 49 64 78 3a 0a 20 09 20 20 20 20 72 65 73 chIdx:. . res
2a70: 75 6c 74 20 3d 20 4e 61 6d 65 73 70 61 63 65 57 ult = NamespaceW
2a80: 68 69 63 68 43 6d 64 28 63 6c 69 65 6e 74 44 61 hichCmd(clientDa
2a90: 74 61 2c 20 69 6e 74 65 72 70 2c 20 6f 62 6a 63 ta, interp, objc
2aa0: 2c 20 6f 62 6a 76 29 3b 0a 20 20 20 20 20 20 20 , objv);.
2ab0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 40 40 20 break;.@@
2ac0: 2d 33 37 38 31 2c 36 20 2b 33 37 39 37 2c 31 31 -3781,6 +3797,11
2ad0: 34 20 40 40 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 4 @@. /*. *----
2ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2b20: 2d 2d 0a 20 20 2a 0a 2b 20 2a 20 4e 61 6d 65 73 --. *.+ * Names
2b30: 70 61 63 65 55 6e 6b 6e 6f 77 6e 43 6d 64 20 2d paceUnknownCmd -
2b40: 2d 0a 2b 20 2a 0a 2b 20 2a 09 49 6e 76 6f 6b 65 -.+ *.+ *.Invoke
2b50: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 d to implement t
2b60: 68 65 20 22 6e 61 6d 65 73 70 61 63 65 20 75 6e he "namespace un
2b70: 6b 6e 6f 77 6e 22 20 63 6f 6d 6d 61 6e 64 20 28 known" command (
2b80: 54 49 50 20 31 38 31 29 20 74 68 61 74 0a 2b 20 TIP 181) that.+
2b90: 2a 09 73 65 74 73 20 6f 72 20 71 75 65 72 69 65 *.sets or querie
2ba0: 73 20 61 20 70 65 72 2d 6e 61 6d 65 73 70 61 63 s a per-namespac
2bb0: 65 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e e unknown comman
2bc0: 64 20 68 61 6e 64 6c 65 72 2e 20 54 68 69 73 20 d handler. This
2bd0: 68 61 6e 64 6c 65 72 0a 2b 20 2a 09 69 73 20 63 handler.+ *.is c
2be0: 61 6c 6c 65 64 20 77 68 65 6e 20 63 6f 6d 6d 61 alled when comma
2bf0: 6e 64 20 6c 6f 6f 6b 75 70 20 66 61 69 6c 73 20 nd lookup fails
2c00: 28 63 75 72 72 65 6e 74 20 61 6e 64 20 67 6c 6f (current and glo
2c10: 62 61 6c 20 6e 73 29 2e 20 54 68 65 0a 2b 20 2a bal ns). The.+ *
2c20: 09 64 65 66 61 75 6c 74 20 68 61 6e 64 6c 65 72 .default handler
2c30: 20 66 6f 72 20 74 68 65 20 67 6c 6f 62 61 6c 20 for the global
2c40: 6e 61 6d 65 73 70 61 63 65 20 69 73 20 3a 3a 75 namespace is ::u
2c50: 6e 6b 6e 6f 77 6e 2e 20 54 68 65 20 64 65 66 61 nknown. The defa
2c60: 75 6c 74 0a 2b 20 2a 09 68 61 6e 64 6c 65 72 20 ult.+ *.handler
2c70: 66 6f 72 20 6f 74 68 65 72 20 6e 61 6d 65 73 70 for other namesp
2c80: 61 63 65 73 20 69 73 20 74 6f 20 63 61 6c 6c 20 aces is to call
2c90: 74 68 65 20 67 6c 6f 62 61 6c 20 6e 61 6d 65 73 the global names
2ca0: 70 61 63 65 20 75 6e 6b 6e 6f 77 6e 0a 2b 20 2a pace unknown.+ *
2cb0: 09 68 61 6e 64 6c 65 72 2e 20 50 61 73 73 69 6e .handler. Passin
2cc0: 67 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 20 g an empty list
2cd0: 72 65 73 75 6c 74 73 20 69 6e 20 72 65 73 65 74 results in reset
2ce0: 74 69 6e 67 20 74 68 65 20 68 61 6e 64 6c 65 72 ting the handler
2cf0: 20 74 6f 0a 2b 20 2a 09 69 74 73 20 64 65 66 61 to.+ *.its defa
2d00: 75 6c 74 2e 0a 2b 20 2a 0a 2b 20 2a 09 20 20 20 ult..+ *.+ *.
2d10: 20 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b 6e 6f namespace unkno
2d20: 77 6e 20 3f 68 61 6e 64 6c 65 72 3f 0a 2b 20 2a wn ?handler?.+ *
2d30: 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20 .+ * Results:.+
2d40: 2a 09 52 65 74 75 72 6e 73 20 54 43 4c 5f 4f 4b *.Returns TCL_OK
2d50: 20 69 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 if successful,
2d60: 61 6e 64 20 54 43 4c 5f 45 52 52 4f 52 20 69 66 and TCL_ERROR if
2d70: 20 61 6e 79 74 68 69 6e 67 20 67 6f 65 73 20 77 anything goes w
2d80: 72 6f 6e 67 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69 rong..+ *.+ * Si
2d90: 64 65 20 65 66 66 65 63 74 73 3a 0a 2b 20 2a 09 de effects:.+ *.
2da0: 49 66 20 6e 6f 20 68 61 6e 64 6c 65 72 20 69 73 If no handler is
2db0: 20 73 70 65 63 69 66 69 65 64 2c 20 72 65 74 75 specified, retu
2dc0: 72 6e 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 rns a result in
2dd0: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 27 the interpreter'
2de0: 73 0a 2b 20 2a 09 72 65 73 75 6c 74 20 6f 62 6a s.+ *.result obj
2df0: 65 63 74 2c 20 6f 74 68 65 72 77 69 73 65 20 69 ect, otherwise i
2e00: 74 20 73 65 74 73 20 74 68 65 20 75 6e 6b 6e 6f t sets the unkno
2e10: 77 6e 20 68 61 6e 64 6c 65 72 20 70 6f 69 6e 74 wn handler point
2e20: 65 72 20 69 6e 20 74 68 65 0a 2b 20 2a 09 63 75 er in the.+ *.cu
2e30: 72 72 65 6e 74 20 6e 61 6d 65 73 70 61 63 65 20 rrent namespace
2e40: 74 6f 20 74 68 65 20 73 63 72 69 70 74 20 66 72 to the script fr
2e50: 61 67 6d 65 6e 74 20 70 72 6f 76 69 64 65 64 2e agment provided.
2e60: 20 49 66 20 61 6e 79 74 68 69 6e 67 20 67 6f 65 If anything goe
2e70: 73 0a 2b 20 2a 09 77 72 6f 6e 67 2c 20 74 68 65 s.+ *.wrong, the
2e80: 20 72 65 73 75 6c 74 20 69 73 20 61 6e 20 65 72 result is an er
2e90: 72 6f 72 20 6d 65 73 73 61 67 65 2e 0a 2b 20 2a ror message..+ *
2ea0: 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .+ *------------
2eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a ----------.+ */.
2ef0: 2b 73 74 61 74 69 63 20 69 6e 74 0a 2b 4e 61 6d +static int.+Nam
2f00: 65 73 70 61 63 65 55 6e 6b 6e 6f 77 6e 43 6d 64 espaceUnknownCmd
2f10: 28 64 75 6d 6d 79 2c 20 69 6e 74 65 72 70 2c 20 (dummy, interp,
2f20: 6f 62 6a 63 2c 20 6f 62 6a 76 29 0a 2b 20 20 20 objc, objv).+
2f30: 20 43 6c 69 65 6e 74 44 61 74 61 20 64 75 6d 6d ClientData dumm
2f40: 79 3b 09 09 2f 2a 20 4e 6f 74 20 75 73 65 64 2e y;../* Not used.
2f50: 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 49 6e 74 */.+ Tcl_Int
2f60: 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09 2f 2a erp *interp;../*
2f70: 20 43 75 72 72 65 6e 74 20 69 6e 74 65 72 70 72 Current interpr
2f80: 65 74 65 72 2e 20 2a 2f 0a 2b 20 20 20 20 69 6e eter. */.+ in
2f90: 74 20 6f 62 6a 63 3b 09 09 09 2f 2a 20 4e 75 6d t objc;.../* Num
2fa0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 ber of arguments
2fb0: 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 . */.+ Tcl_Ob
2fc0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 3b j *CONST objv[];
2fd0: 09 2f 2a 20 41 72 67 75 6d 65 6e 74 20 6f 62 6a ./* Argument obj
2fe0: 65 63 74 73 2e 20 2a 2f 0a 2b 7b 0a 2b 20 20 20 ects. */.+{.+
2ff0: 20 4e 61 6d 65 73 70 61 63 65 20 2a 63 75 72 72 Namespace *curr
3000: 4e 73 50 74 72 3b 0a 2b 20 20 20 20 54 63 6c 5f NsPtr;.+ Tcl_
3010: 4f 62 6a 20 2a 68 61 6e 64 6c 65 72 50 74 72 3b Obj *handlerPtr;
3020: 0a 2b 20 20 20 20 69 6e 74 20 6c 73 74 6c 65 6e .+ int lstlen
3030: 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 6f 62 6a ;.+.+ if (obj
3040: 63 20 3e 20 33 29 20 7b 0a 2b 09 54 63 6c 5f 57 c > 3) {.+.Tcl_W
3050: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 rongNumArgs(inte
3060: 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 3f 73 rp, 2, objv, "?s
3070: 63 72 69 70 74 3f 22 29 3b 0a 2b 20 20 20 20 20 cript?");.+
3080: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 return TCL_ER
3090: 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 ROR;.+ }.+.+
30a0: 20 20 20 63 75 72 72 4e 73 50 74 72 20 3d 20 28 currNsPtr = (
30b0: 4e 61 6d 65 73 70 61 63 65 20 2a 29 20 54 63 6c Namespace *) Tcl
30c0: 5f 47 65 74 43 75 72 72 65 6e 74 4e 61 6d 65 73 _GetCurrentNames
30d0: 70 61 63 65 28 69 6e 74 65 72 70 29 3b 0a 2b 0a pace(interp);.+.
30e0: 2b 20 20 20 20 69 66 20 28 6f 62 6a 63 20 3d 3d + if (objc ==
30f0: 20 32 29 20 7b 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 2) {.+./*.+. *
3100: 49 6e 74 72 6f 73 70 65 63 74 69 6f 6e 20 2d 20 Introspection -
3110: 72 65 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 return the curre
3120: 6e 74 20 6e 61 6d 65 73 70 61 63 65 20 68 61 6e nt namespace han
3130: 64 6c 65 72 2e 0a 2b 09 20 2a 2f 0a 2b 09 69 66 dler..+. */.+.if
3140: 20 28 63 75 72 72 4e 73 50 74 72 2d 3e 75 6e 6b (currNsPtr->unk
3150: 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 74 72 20 21 nownHandlerPtr !
3160: 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 = NULL) {.+.
3170: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 Tcl_SetObjResult
3180: 28 69 6e 74 65 72 70 2c 20 63 75 72 72 4e 73 50 (interp, currNsP
3190: 74 72 2d 3e 75 6e 6b 6e 6f 77 6e 48 61 6e 64 6c tr->unknownHandl
31a0: 65 72 50 74 72 29 3b 0a 2b 09 7d 20 65 6c 73 65 erPtr);.+.} else
31b0: 20 7b 0a 2b 09 20 20 20 20 69 66 20 28 63 75 72 {.+. if (cur
31c0: 72 4e 73 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e 48 rNsPtr->unknownH
31d0: 61 6e 64 6c 65 72 50 74 72 20 3d 3d 20 4e 55 4c andlerPtr == NUL
31e0: 4c 29 20 7b 0a 2b 09 09 2f 2a 0a 2b 09 09 20 2a L) {.+../*.+.. *
31f0: 20 44 65 66 61 75 6c 74 20 66 6f 72 20 6e 6f 6e Default for non
3200: 2d 67 6c 6f 62 61 6c 20 6e 61 6d 65 73 70 61 63 -global namespac
3210: 65 20 69 73 20 22 22 2c 20 62 75 74 20 66 6f 72 e is "", but for
3220: 20 67 6c 6f 62 61 6c 0a 2b 09 09 20 2a 20 6e 61 global.+.. * na
3230: 6d 65 73 70 61 63 65 20 69 73 20 22 3a 3a 75 6e mespace is "::un
3240: 6b 6e 6f 77 6e 22 2e 20 55 73 69 6e 67 20 74 68 known". Using th
3250: 65 73 65 20 64 65 66 61 75 6c 74 73 20 61 6c 6c ese defaults all
3260: 6f 77 73 0a 2b 09 09 20 2a 20 70 65 6f 70 6c 65 ows.+.. * people
3270: 20 74 6f 20 64 6f 3a 0a 2b 09 09 20 2a 20 73 65 to do:.+.. * se
3280: 74 20 6f 6c 64 6e 73 20 5b 6e 61 6d 65 73 70 61 t oldns [namespa
3290: 63 65 20 75 6e 6b 6e 6f 77 6e 5d 0a 2b 09 09 20 ce unknown].+..
32a0: 2a 20 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b 6e * namespace unkn
32b0: 6f 77 6e 20 24 6e 65 77 6e 73 0a 2b 09 09 20 2a own $newns.+.. *
32c0: 20 2e 2e 2e 0a 2b 09 09 20 2a 20 6e 61 6d 65 73 ....+.. * names
32d0: 70 61 63 65 20 75 6e 6b 6e 6f 77 6e 20 24 6f 6c pace unknown $ol
32e0: 64 6e 73 0a 2b 09 09 20 2a 0a 2b 09 09 20 2a 20 dns.+.. *.+.. *
32f0: 61 6e 64 20 69 74 20 77 69 6c 6c 20 64 6f 20 74 and it will do t
3300: 68 65 20 52 69 67 68 74 20 54 68 69 6e 67 2e 0a he Right Thing..
3310: 2b 09 09 20 2a 2f 0a 2b 09 09 69 66 20 28 63 75 +.. */.+..if (cu
3320: 72 72 4e 73 50 74 72 20 3d 3d 20 28 28 49 6e 74 rrNsPtr == ((Int
3330: 65 72 70 20 2a 29 69 6e 74 65 72 70 29 2d 3e 67 erp *)interp)->g
3340: 6c 6f 62 61 6c 4e 73 50 74 72 29 20 7b 0a 2b 09 lobalNsPtr) {.+.
3350: 09 20 20 20 20 68 61 6e 64 6c 65 72 50 74 72 20 . handlerPtr
3360: 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f = Tcl_NewStringO
3370: 62 6a 28 22 3a 3a 75 6e 6b 6e 6f 77 6e 22 2c 20 bj("::unknown",
3380: 2d 31 29 3b 0a 2b 09 09 20 20 20 20 2f 2a 20 43 -1);.+.. /* C
3390: 61 63 68 65 20 74 68 69 73 2e 20 2a 2f 0a 2b 09 ache this. */.+.
33a0: 09 20 20 20 20 63 75 72 72 4e 73 50 74 72 2d 3e . currNsPtr->
33b0: 75 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 74 unknownHandlerPt
33c0: 72 20 3d 20 68 61 6e 64 6c 65 72 50 74 72 3b 0a r = handlerPtr;.
33d0: 2b 09 09 20 20 20 20 54 63 6c 5f 49 6e 63 72 52 +.. Tcl_IncrR
33e0: 65 66 43 6f 75 6e 74 28 68 61 6e 64 6c 65 72 50 efCount(handlerP
33f0: 74 72 29 3b 0a 2b 09 09 7d 20 65 6c 73 65 20 7b tr);.+..} else {
3400: 0a 2b 09 09 20 20 20 20 68 61 6e 64 6c 65 72 50 .+.. handlerP
3410: 74 72 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 tr = Tcl_NewObj(
3420: 29 3b 0a 2b 09 09 7d 0a 2b 09 20 20 20 20 7d 20 );.+..}.+. }
3430: 65 6c 73 65 20 7b 0a 2b 09 09 68 61 6e 64 6c 65 else {.+..handle
3440: 72 50 74 72 20 3d 20 63 75 72 72 4e 73 50 74 72 rPtr = currNsPtr
3450: 2d 3e 75 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 ->unknownHandler
3460: 50 74 72 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 Ptr;.+. }.+.
3470: 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 Tcl_SetObjRes
3480: 75 6c 74 28 69 6e 74 65 72 70 2c 20 68 61 6e 64 ult(interp, hand
3490: 6c 65 72 50 74 72 29 3b 0a 2b 09 7d 0a 2b 20 20 lerPtr);.+.}.+
34a0: 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 2f 2a 0a } else {.+./*.
34b0: 2b 09 20 2a 20 53 65 74 20 74 68 65 20 6e 61 6d +. * Set the nam
34c0: 65 73 70 61 63 65 20 68 61 6e 64 6c 65 72 2e 0a espace handler..
34d0: 2b 09 20 2a 2f 0a 2b 09 69 66 20 28 63 75 72 72 +. */.+.if (curr
34e0: 4e 73 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e 48 61 NsPtr->unknownHa
34f0: 6e 64 6c 65 72 50 74 72 20 21 3d 20 4e 55 4c 4c ndlerPtr != NULL
3500: 29 20 7b 0a 2b 09 20 20 20 20 2f 2a 20 52 65 6d ) {.+. /* Rem
3510: 6f 76 65 20 6f 6c 64 20 68 61 6e 64 6c 65 72 20 ove old handler
3520: 66 69 72 73 74 2e 20 2a 2f 0a 2b 09 20 20 20 20 first. */.+.
3530: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 Tcl_DecrRefCount
3540: 28 63 75 72 72 4e 73 50 74 72 2d 3e 75 6e 6b 6e (currNsPtr->unkn
3550: 6f 77 6e 48 61 6e 64 6c 65 72 50 74 72 29 3b 0a ownHandlerPtr);.
3560: 2b 09 7d 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 49 66 +.}.+./*.+. * If
3570: 20 74 68 65 20 65 6d 70 74 79 20 73 74 72 69 6e the empty strin
3580: 67 20 69 73 20 70 61 73 73 65 64 2c 20 74 68 65 g is passed, the
3590: 6e 20 73 69 6d 70 6c 79 20 72 65 76 65 72 74 20 n simply revert
35a0: 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2b to the default.+
35b0: 09 20 2a 20 68 61 6e 64 6c 65 72 2e 0a 2b 09 20 . * handler..+.
35c0: 2a 2f 0a 2b 09 69 66 20 28 54 63 6c 5f 4c 69 73 */.+.if (Tcl_Lis
35d0: 74 4f 62 6a 4c 65 6e 67 74 68 28 69 6e 74 65 72 tObjLength(inter
35e0: 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 6c 73 74 p, objv[2], &lst
35f0: 6c 65 6e 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 len) != TCL_OK)
3600: 7b 0a 2b 09 20 20 20 20 2f 2a 20 4e 6f 74 20 61 {.+. /* Not a
3610: 20 6c 69 73 74 20 2a 2f 0a 2b 09 20 20 20 20 72 list */.+. r
3620: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
3630: 0a 2b 09 7d 20 65 6c 73 65 20 69 66 20 28 6c 73 .+.} else if (ls
3640: 74 6c 65 6e 20 3d 3d 20 30 29 20 7b 0a 2b 09 20 tlen == 0) {.+.
3650: 20 20 20 2f 2a 20 45 6d 70 74 79 20 6c 69 73 74 /* Empty list
3660: 20 2d 20 72 65 73 65 74 20 74 6f 20 64 65 66 61 - reset to defa
3670: 75 6c 74 2e 20 2a 2f 0a 2b 09 20 20 20 20 63 75 ult. */.+. cu
3680: 72 72 4e 73 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e rrNsPtr->unknown
3690: 48 61 6e 64 6c 65 72 50 74 72 20 3d 20 4e 55 4c HandlerPtr = NUL
36a0: 4c 3b 0a 2b 09 7d 20 65 6c 73 65 20 7b 0a 2b 09 L;.+.} else {.+.
36b0: 20 20 20 20 2f 2a 20 0a 2b 09 20 20 20 20 20 2a /* .+. *
36c0: 20 49 6e 63 72 65 6d 65 6e 74 20 72 65 66 20 63 Increment ref c
36d0: 6f 75 6e 74 20 61 6e 64 20 73 74 6f 72 65 2e 20 ount and store.
36e0: 54 68 65 20 72 65 66 65 72 65 6e 63 65 20 63 6f The reference co
36f0: 75 6e 74 20 69 73 20 0a 2b 09 20 20 20 20 20 2a unt is .+. *
3700: 20 64 65 63 72 65 6d 65 6e 74 65 64 20 65 69 74 decremented eit
3710: 68 65 72 20 69 6e 20 74 68 65 20 63 6f 64 65 20 her in the code
3720: 61 62 6f 76 65 2c 20 6f 72 20 77 68 65 6e 20 74 above, or when t
3730: 68 65 20 6e 61 6d 65 73 70 61 63 65 20 0a 2b 09 he namespace .+.
3740: 20 20 20 20 20 2a 20 69 73 20 64 65 6c 65 74 65 * is delete
3750: 64 2e 0a 2b 09 20 20 20 20 20 2a 2f 0a 2b 09 20 d..+. */.+.
3760: 20 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f Tcl_IncrRefCo
3770: 75 6e 74 28 6f 62 6a 76 5b 32 5d 29 3b 0a 2b 09 unt(objv[2]);.+.
3780: 20 20 20 20 63 75 72 72 4e 73 50 74 72 2d 3e 75 currNsPtr->u
3790: 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 74 72 nknownHandlerPtr
37a0: 20 3d 20 6f 62 6a 76 5b 32 5d 3b 0a 2b 09 20 20 = objv[2];.+.
37b0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 Tcl_SetObjResu
37c0: 6c 74 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b lt(interp, objv[
37d0: 32 5d 29 3b 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a 2]);.+.}.+ }.
37e0: 2b 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f + return TCL_
37f0: 4f 4b 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b 20 OK;.+}.+..+/*.+
3800: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *---------------
3810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3840: 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 20 20 2a 20 -------.+ *. *
3850: 4e 61 6d 65 73 70 61 63 65 54 61 69 6c 43 6d 64 NamespaceTailCmd
3860: 20 2d 2d 0a 20 20 2a 0a 20 20 2a 09 49 6e 76 6f --. *. *.Invo
3870: 6b 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 ked to implement
3880: 20 74 68 65 20 22 6e 61 6d 65 73 70 61 63 65 20 the "namespace
3890: 74 61 69 6c 22 20 63 6f 6d 6d 61 6e 64 20 74 68 tail" command th
38a0: 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 0a 49 at returns the.I
38b0: 6e 64 65 78 3a 20 74 65 73 74 73 2f 6e 61 6d 65 ndex: tests/name
38c0: 73 70 61 63 65 2e 74 65 73 74 0a 3d 3d 3d 3d 3d space.test.=====
38d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
38e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
38f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3900: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 ==============.R
3910: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f CS file: /cvsroo
3920: 74 2f 74 63 6c 2f 74 63 6c 2f 74 65 73 74 73 2f t/tcl/tcl/tests/
3930: 6e 61 6d 65 73 70 61 63 65 2e 74 65 73 74 2c 76 namespace.test,v
3940: 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 .retrieving revi
3950: 73 69 6f 6e 20 31 2e 32 38 0a 64 69 66 66 20 2d sion 1.28.diff -
3960: 75 20 2d 72 31 2e 32 38 20 6e 61 6d 65 73 70 61 u -r1.28 namespa
3970: 63 65 2e 74 65 73 74 0a 2d 2d 2d 20 74 65 73 74 ce.test.--- test
3980: 73 2f 6e 61 6d 65 73 70 61 63 65 2e 74 65 73 74 s/namespace.test
3990: 09 32 35 20 4d 61 79 20 32 30 30 34 20 31 39 3a .25 May 2004 19:
39a0: 34 35 3a 31 37 20 2d 30 30 30 30 09 31 2e 32 38 45:17 -0000.1.28
39b0: 0a 2b 2b 2b 20 74 65 73 74 73 2f 6e 61 6d 65 73 .+++ tests/names
39c0: 70 61 63 65 2e 74 65 73 74 09 33 20 4a 75 6c 20 pace.test.3 Jul
39d0: 32 30 30 34 20 30 30 3a 31 33 3a 34 39 20 2d 30 2004 00:13:49 -0
39e0: 30 30 30 0a 40 40 20 2d 36 35 35 2c 37 20 2b 36 000.@@ -655,7 +6
39f0: 35 35 2c 37 20 40 40 0a 20 7d 20 7b 31 20 7b 77 55,7 @@. } {1 {w
3a00: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f rong # args: sho
3a10: 75 6c 64 20 62 65 20 22 6e 61 6d 65 73 70 61 63 uld be "namespac
3a20: 65 20 73 75 62 63 6f 6d 6d 61 6e 64 20 3f 61 72 e subcommand ?ar
3a30: 67 20 2e 2e 2e 3f 22 7d 7d 0a 20 74 65 73 74 20 g ...?"}}. test
3a40: 6e 61 6d 65 73 70 61 63 65 2d 32 30 2e 32 20 7b namespace-20.2 {
3a50: 54 63 6c 5f 4e 61 6d 65 73 70 61 63 65 4f 62 6a Tcl_NamespaceObj
3a60: 43 6d 64 2c 20 62 61 64 20 73 75 62 63 6f 6d 6d Cmd, bad subcomm
3a70: 61 6e 64 7d 20 7b 0a 20 20 20 20 20 6c 69 73 74 and} {. list
3a80: 20 5b 63 61 74 63 68 20 7b 6e 61 6d 65 73 70 61 [catch {namespa
3a90: 63 65 20 77 6f 6d 62 61 74 20 7b 7d 7d 20 6d 73 ce wombat {}} ms
3aa0: 67 5d 20 24 6d 73 67 0a 2d 7d 20 7b 31 20 7b 62 g] $msg.-} {1 {b
3ab0: 61 64 20 6f 70 74 69 6f 6e 20 22 77 6f 6d 62 61 ad option "womba
3ac0: 74 22 3a 20 6d 75 73 74 20 62 65 20 63 68 69 6c t": must be chil
3ad0: 64 72 65 6e 2c 20 63 6f 64 65 2c 20 63 75 72 72 dren, code, curr
3ae0: 65 6e 74 2c 20 64 65 6c 65 74 65 2c 20 65 6e 73 ent, delete, ens
3af0: 65 6d 62 6c 65 2c 20 65 76 61 6c 2c 20 65 78 69 emble, eval, exi
3b00: 73 74 73 2c 20 65 78 70 6f 72 74 2c 20 66 6f 72 sts, export, for
3b10: 67 65 74 2c 20 69 6d 70 6f 72 74 2c 20 69 6e 73 get, import, ins
3b20: 63 6f 70 65 2c 20 6f 72 69 67 69 6e 2c 20 70 61 cope, origin, pa
3b30: 72 65 6e 74 2c 20 71 75 61 6c 69 66 69 65 72 73 rent, qualifiers
3b40: 2c 20 74 61 69 6c 2c 20 6f 72 20 77 68 69 63 68 , tail, or which
3b50: 7d 7d 0a 2b 7d 20 7b 31 20 7b 62 61 64 20 6f 70 }}.+} {1 {bad op
3b60: 74 69 6f 6e 20 22 77 6f 6d 62 61 74 22 3a 20 6d tion "wombat": m
3b70: 75 73 74 20 62 65 20 63 68 69 6c 64 72 65 6e 2c ust be children,
3b80: 20 63 6f 64 65 2c 20 63 75 72 72 65 6e 74 2c 20 code, current,
3b90: 64 65 6c 65 74 65 2c 20 65 6e 73 65 6d 62 6c 65 delete, ensemble
3ba0: 2c 20 65 76 61 6c 2c 20 65 78 69 73 74 73 2c 20 , eval, exists,
3bb0: 65 78 70 6f 72 74 2c 20 66 6f 72 67 65 74 2c 20 export, forget,
3bc0: 69 6d 70 6f 72 74 2c 20 69 6e 73 63 6f 70 65 2c import, inscope,
3bd0: 20 6f 72 69 67 69 6e 2c 20 70 61 72 65 6e 74 2c origin, parent,
3be0: 20 71 75 61 6c 69 66 69 65 72 73 2c 20 74 61 69 qualifiers, tai
3bf0: 6c 2c 20 75 6e 6b 6e 6f 77 6e 2c 20 6f 72 20 77 l, unknown, or w
3c00: 68 69 63 68 7d 7d 0a 20 74 65 73 74 20 6e 61 6d hich}}. test nam
3c10: 65 73 70 61 63 65 2d 32 30 2e 33 20 7b 54 63 6c espace-20.3 {Tcl
3c20: 5f 4e 61 6d 65 73 70 61 63 65 4f 62 6a 43 6d 64 _NamespaceObjCmd
3c30: 2c 20 61 62 62 72 65 76 69 61 74 69 6f 6e 73 20 , abbreviations
3c40: 61 72 65 20 6f 6b 61 79 7d 20 7b 0a 20 20 20 20 are okay} {.
3c50: 20 6e 61 6d 65 73 70 61 63 65 20 63 68 20 3a 3a namespace ch ::
3c60: 20 74 65 73 74 5f 6e 73 5f 2a 0a 20 7d 20 7b 7d test_ns_*. } {}
3c70: 0a 40 40 20 2d 37 36 32 2c 37 20 2b 37 36 32 2c .@@ -762,7 +762,
3c80: 37 20 40 40 0a 20 7d 20 7b 31 20 7b 77 72 6f 6e 7 @@. } {1 {wron
3c90: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 g # args: should
3ca0: 20 62 65 20 22 6e 61 6d 65 73 70 61 63 65 20 65 be "namespace e
3cb0: 76 61 6c 20 6e 61 6d 65 20 61 72 67 20 3f 61 72 val name arg ?ar
3cc0: 67 2e 2e 2e 3f 22 7d 7d 0a 20 74 65 73 74 20 6e g...?"}}. test n
3cd0: 61 6d 65 73 70 61 63 65 2d 32 35 2e 32 20 7b 4e amespace-25.2 {N
3ce0: 61 6d 65 73 70 61 63 65 45 76 61 6c 43 6d 64 2c amespaceEvalCmd,
3cf0: 20 62 61 64 20 61 72 67 73 7d 20 7b 0a 20 20 20 bad args} {.
3d00: 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 6e list [catch {n
3d10: 61 6d 65 73 70 61 63 65 20 74 65 73 74 5f 6e 73 amespace test_ns
3d20: 5f 31 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2d 7d _1} msg] $msg.-}
3d30: 20 7b 31 20 7b 62 61 64 20 6f 70 74 69 6f 6e 20 {1 {bad option
3d40: 22 74 65 73 74 5f 6e 73 5f 31 22 3a 20 6d 75 73 "test_ns_1": mus
3d50: 74 20 62 65 20 63 68 69 6c 64 72 65 6e 2c 20 63 t be children, c
3d60: 6f 64 65 2c 20 63 75 72 72 65 6e 74 2c 20 64 65 ode, current, de
3d70: 6c 65 74 65 2c 20 65 6e 73 65 6d 62 6c 65 2c 20 lete, ensemble,
3d80: 65 76 61 6c 2c 20 65 78 69 73 74 73 2c 20 65 78 eval, exists, ex
3d90: 70 6f 72 74 2c 20 66 6f 72 67 65 74 2c 20 69 6d port, forget, im
3da0: 70 6f 72 74 2c 20 69 6e 73 63 6f 70 65 2c 20 6f port, inscope, o
3db0: 72 69 67 69 6e 2c 20 70 61 72 65 6e 74 2c 20 71 rigin, parent, q
3dc0: 75 61 6c 69 66 69 65 72 73 2c 20 74 61 69 6c 2c ualifiers, tail,
3dd0: 20 6f 72 20 77 68 69 63 68 7d 7d 0a 2b 7d 20 7b or which}}.+} {
3de0: 31 20 7b 62 61 64 20 6f 70 74 69 6f 6e 20 22 74 1 {bad option "t
3df0: 65 73 74 5f 6e 73 5f 31 22 3a 20 6d 75 73 74 20 est_ns_1": must
3e00: 62 65 20 63 68 69 6c 64 72 65 6e 2c 20 63 6f 64 be children, cod
3e10: 65 2c 20 63 75 72 72 65 6e 74 2c 20 64 65 6c 65 e, current, dele
3e20: 74 65 2c 20 65 6e 73 65 6d 62 6c 65 2c 20 65 76 te, ensemble, ev
3e30: 61 6c 2c 20 65 78 69 73 74 73 2c 20 65 78 70 6f al, exists, expo
3e40: 72 74 2c 20 66 6f 72 67 65 74 2c 20 69 6d 70 6f rt, forget, impo
3e50: 72 74 2c 20 69 6e 73 63 6f 70 65 2c 20 6f 72 69 rt, inscope, ori
3e60: 67 69 6e 2c 20 70 61 72 65 6e 74 2c 20 71 75 61 gin, parent, qua
3e70: 6c 69 66 69 65 72 73 2c 20 74 61 69 6c 2c 20 75 lifiers, tail, u
3e80: 6e 6b 6e 6f 77 6e 2c 20 6f 72 20 77 68 69 63 68 nknown, or which
3e90: 7d 7d 0a 20 63 61 74 63 68 20 7b 75 6e 73 65 74 }}. catch {unset
3ea0: 20 76 7d 0a 20 74 65 73 74 20 6e 61 6d 65 73 70 v}. test namesp
3eb0: 61 63 65 2d 32 35 2e 33 20 7b 4e 61 6d 65 73 70 ace-25.3 {Namesp
3ec0: 61 63 65 45 76 61 6c 43 6d 64 2c 20 6e 65 77 20 aceEvalCmd, new
3ed0: 6e 61 6d 65 73 70 61 63 65 7d 20 7b 0a 20 20 20 namespace} {.
3ee0: 20 20 73 65 74 20 76 20 31 32 33 0a 40 40 20 2d set v 123.@@ -
3ef0: 31 36 34 39 2c 36 20 2b 31 36 34 39 2c 38 37 20 1649,6 +1649,87
3f00: 40 40 0a 20 20 20 20 20 77 68 69 6c 65 20 70 61 @@. while pa
3f10: 72 73 69 6e 67 20 72 65 73 75 6c 74 20 6f 66 20 rsing result of
3f20: 65 6e 73 65 6d 62 6c 65 20 75 6e 6b 6e 6f 77 6e ensemble unknown
3f30: 20 73 75 62 63 6f 6d 6d 61 6e 64 20 68 61 6e 64 subcommand hand
3f40: 6c 65 72 0a 20 20 20 20 20 69 6e 76 6f 6b 65 64 ler. invoked
3f50: 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 20 22 66 from within. "f
3f60: 6f 6f 20 62 61 72 22 7d 7d 0a 2b 23 20 54 49 50 oo bar"}}.+# TIP
3f70: 20 31 38 31 20 2d 20 6e 61 6d 65 73 70 61 63 65 181 - namespace
3f80: 20 75 6e 6b 6e 6f 77 6e 20 74 65 73 74 73 0a 2b unknown tests.+
3f90: 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 test namespace-4
3fa0: 38 2e 31 20 7b 75 6e 6b 6e 6f 77 6e 3a 20 64 65 8.1 {unknown: de
3fb0: 66 61 75 6c 74 20 68 61 6e 64 6c 65 72 20 3a 3a fault handler ::
3fc0: 75 6e 6b 6e 6f 77 6e 7d 20 7b 0a 2b 20 20 20 20 unknown} {.+
3fd0: 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 set result [list
3fe0: 20 5b 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c [namespace eval
3ff0: 20 66 6f 6f 62 61 72 20 7b 20 6e 61 6d 65 73 70 foobar { namesp
4000: 61 63 65 20 75 6e 6b 6e 6f 77 6e 20 7d 5d 5d 0a ace unknown }]].
4010: 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 + lappend res
4020: 75 6c 74 20 5b 6e 61 6d 65 73 70 61 63 65 20 65 ult [namespace e
4030: 76 61 6c 20 3a 3a 20 7b 20 6e 61 6d 65 73 70 61 val :: { namespa
4040: 63 65 20 75 6e 6b 6e 6f 77 6e 20 7d 5d 0a 2b 20 ce unknown }].+
4050: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c namespace del
4060: 65 74 65 20 66 6f 6f 62 61 72 0a 2b 20 20 20 20 ete foobar.+
4070: 73 65 74 20 72 65 73 75 6c 74 0a 2b 7d 20 7b 7b set result.+} {{
4080: 7d 20 3a 3a 75 6e 6b 6e 6f 77 6e 7d 0a 2b 74 65 } ::unknown}.+te
4090: 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 38 2e st namespace-48.
40a0: 32 20 7b 75 6e 6b 6e 6f 77 6e 3a 20 64 65 66 61 2 {unknown: defa
40b0: 75 6c 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 67 ult resolution g
40c0: 6c 6f 62 61 6c 7d 20 7b 0a 2b 20 20 20 20 70 72 lobal} {.+ pr
40d0: 6f 63 20 3a 3a 66 6f 6f 20 7b 7d 20 7b 20 72 65 oc ::foo {} { re
40e0: 74 75 72 6e 20 22 47 4c 4f 42 41 4c 22 20 7d 0a turn "GLOBAL" }.
40f0: 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 + namespace e
4100: 76 61 6c 20 3a 3a 62 61 72 20 7b 20 70 72 6f 63 val ::bar { proc
4110: 20 66 6f 6f 20 7b 7d 20 7b 20 72 65 74 75 72 6e foo {} { return
4120: 20 22 4e 41 4d 45 53 50 41 43 45 22 20 7d 20 7d "NAMESPACE" } }
4130: 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 .+ namespace
4140: 65 76 61 6c 20 3a 3a 62 61 72 3a 3a 6a 69 6d 20 eval ::bar::jim
4150: 7b 20 70 72 6f 63 20 74 65 73 74 20 7b 7d 20 7b { proc test {} {
4160: 20 66 6f 6f 20 7d 20 7d 0a 2b 20 20 20 20 73 65 foo } }.+ se
4170: 74 20 72 65 73 75 6c 74 20 5b 3a 3a 62 61 72 3a t result [::bar:
4180: 3a 6a 69 6d 3a 3a 74 65 73 74 5d 0a 2b 20 20 20 :jim::test].+
4190: 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 namespace delet
41a0: 65 20 3a 3a 62 61 72 0a 2b 20 20 20 20 72 65 6e e ::bar.+ ren
41b0: 61 6d 65 20 3a 3a 66 6f 6f 20 7b 7d 0a 2b 20 20 ame ::foo {}.+
41c0: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 2b 7d 20 set result.+}
41d0: 7b 47 4c 4f 42 41 4c 7d 0a 2b 74 65 73 74 20 6e {GLOBAL}.+test n
41e0: 61 6d 65 73 70 61 63 65 2d 34 38 2e 33 20 7b 75 amespace-48.3 {u
41f0: 6e 6b 6e 6f 77 6e 3a 20 64 65 66 61 75 6c 74 20 nknown: default
4200: 72 65 73 6f 6c 75 74 69 6f 6e 20 6c 6f 63 61 6c resolution local
4210: 7d 20 7b 0a 2b 20 20 20 20 70 72 6f 63 20 3a 3a } {.+ proc ::
4220: 66 6f 6f 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 foo {} { return
4230: 22 47 4c 4f 42 41 4c 22 20 7d 0a 2b 20 20 20 20 "GLOBAL" }.+
4240: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a namespace eval :
4250: 3a 62 61 72 20 7b 0a 2b 09 70 72 6f 63 20 66 6f :bar {.+.proc fo
4260: 6f 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 22 4e o {} { return "N
4270: 41 4d 45 53 50 41 43 45 22 20 7d 0a 2b 09 70 72 AMESPACE" }.+.pr
4280: 6f 63 20 74 65 73 74 20 7b 7d 20 7b 20 66 6f 6f oc test {} { foo
4290: 20 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 73 }.+ }.+ s
42a0: 65 74 20 72 65 73 75 6c 74 20 5b 3a 3a 62 61 72 et result [::bar
42b0: 3a 3a 74 65 73 74 5d 0a 2b 20 20 20 20 6e 61 6d ::test].+ nam
42c0: 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 3a 3a espace delete ::
42d0: 62 61 72 0a 2b 20 20 20 20 72 65 6e 61 6d 65 20 bar.+ rename
42e0: 3a 3a 66 6f 6f 20 7b 7d 0a 2b 20 20 20 20 73 65 ::foo {}.+ se
42f0: 74 20 72 65 73 75 6c 74 0a 2b 7d 20 7b 4e 41 4d t result.+} {NAM
4300: 45 53 50 41 43 45 7d 0a 2b 74 65 73 74 20 6e 61 ESPACE}.+test na
4310: 6d 65 73 70 61 63 65 2d 34 38 2e 34 20 7b 75 6e mespace-48.4 {un
4320: 6b 6e 6f 77 6e 3a 20 73 65 74 20 68 61 6e 64 6c known: set handl
4330: 65 72 7d 20 7b 0a 2b 20 20 20 20 6e 61 6d 65 73 er} {.+ names
4340: 70 61 63 65 20 65 76 61 6c 20 66 6f 6f 20 7b 0a pace eval foo {.
4350: 2b 09 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b 6e +.namespace unkn
4360: 6f 77 6e 20 5b 6c 69 73 74 20 64 69 73 70 61 74 own [list dispat
4370: 63 68 5d 0a 2b 09 70 72 6f 63 20 64 69 73 70 61 ch].+.proc dispa
4380: 74 63 68 20 7b 61 72 67 73 7d 20 7b 20 72 65 74 tch {args} { ret
4390: 75 72 6e 20 24 61 72 67 73 20 7d 0a 2b 09 70 72 urn $args }.+.pr
43a0: 6f 63 20 74 65 73 74 20 7b 7d 20 7b 0a 2b 09 20 oc test {} {.+.
43b0: 20 20 20 55 6e 6b 6e 6f 77 6e 43 6d 64 20 61 20 UnknownCmd a
43c0: 62 20 63 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a 2b b c.+.}.+ }.+
43d0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
43e0: 66 6f 6f 3a 3a 74 65 73 74 5d 0a 2b 20 20 20 20 foo::test].+
43f0: 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 namespace delete
4400: 20 66 6f 6f 0a 2b 20 20 20 20 73 65 74 20 72 65 foo.+ set re
4410: 73 75 6c 74 0a 2b 7d 20 7b 55 6e 6b 6e 6f 77 6e sult.+} {Unknown
4420: 43 6d 64 20 61 20 62 20 63 7d 0a 2b 74 65 73 74 Cmd a b c}.+test
4430: 20 6e 61 6d 65 73 70 61 63 65 2d 34 38 2e 35 20 namespace-48.5
4440: 7b 75 6e 6b 6e 6f 77 6e 3a 20 73 65 61 72 63 68 {unknown: search
4450: 20 70 61 74 68 20 62 65 66 6f 72 65 20 75 6e 6b path before unk
4460: 6e 6f 77 6e 20 69 73 20 75 6e 61 6c 74 65 72 65 nown is unaltere
4470: 64 7d 20 7b 0a 2b 20 20 20 20 70 72 6f 63 20 3a d} {.+ proc :
4480: 3a 74 65 73 74 32 20 7b 61 72 67 73 7d 20 7b 20 :test2 {args} {
4490: 72 65 74 75 72 6e 20 22 54 45 53 54 32 3a 20 24 return "TEST2: $
44a0: 61 72 67 73 22 20 7d 0a 2b 20 20 20 20 6e 61 6d args" }.+ nam
44b0: 65 73 70 61 63 65 20 65 76 61 6c 20 66 6f 6f 20 espace eval foo
44c0: 7b 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 75 6e {.+.namespace un
44d0: 6b 6e 6f 77 6e 20 5b 6c 69 73 74 20 64 69 73 70 known [list disp
44e0: 61 74 63 68 5d 0a 2b 09 70 72 6f 63 20 64 69 73 atch].+.proc dis
44f0: 70 61 74 63 68 20 7b 61 72 67 73 7d 20 7b 20 72 patch {args} { r
4500: 65 74 75 72 6e 20 22 55 4e 4b 4e 4f 57 4e 3a 20 eturn "UNKNOWN:
4510: 24 61 72 67 73 22 20 7d 0a 2b 09 70 72 6f 63 20 $args" }.+.proc
4520: 74 65 73 74 31 20 7b 61 72 67 73 7d 20 7b 20 72 test1 {args} { r
4530: 65 74 75 72 6e 20 22 54 45 53 54 31 3a 20 24 61 eturn "TEST1: $a
4540: 72 67 73 22 20 7d 0a 2b 09 70 72 6f 63 20 74 65 rgs" }.+.proc te
4550: 73 74 20 7b 7d 20 7b 0a 2b 09 20 20 20 20 73 65 st {} {.+. se
4560: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 5b t result [list [
4570: 74 65 73 74 31 20 61 20 62 20 63 5d 5d 0a 2b 09 test1 a b c]].+.
4580: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu
4590: 6c 74 20 5b 74 65 73 74 32 20 61 20 62 20 63 5d lt [test2 a b c]
45a0: 0a 2b 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 .+. lappend r
45b0: 65 73 75 6c 74 20 5b 74 65 73 74 33 20 61 20 62 esult [test3 a b
45c0: 20 63 5d 0a 2b 09 20 20 20 20 72 65 74 75 72 6e c].+. return
45d0: 20 24 72 65 73 75 6c 74 0a 2b 09 7d 0a 2b 20 20 $result.+.}.+
45e0: 20 20 7d 0a 2b 20 20 20 20 73 65 74 20 72 65 73 }.+ set res
45f0: 75 6c 74 20 5b 66 6f 6f 3a 3a 74 65 73 74 5d 0a ult [foo::test].
4600: 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64 + namespace d
4610: 65 6c 65 74 65 20 66 6f 6f 0a 2b 20 20 20 20 72 elete foo.+ r
4620: 65 6e 61 6d 65 20 3a 3a 74 65 73 74 32 20 7b 7d ename ::test2 {}
4630: 0a 2b 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 .+ set result
4640: 0a 2b 7d 20 7b 7b 54 45 53 54 31 3a 20 61 20 62 .+} {{TEST1: a b
4650: 20 63 7d 20 7b 54 45 53 54 32 3a 20 61 20 62 20 c} {TEST2: a b
4660: 63 7d 20 7b 55 4e 4b 4e 4f 57 4e 3a 20 74 65 73 c} {UNKNOWN: tes
4670: 74 33 20 61 20 62 20 63 7d 7d 0a 2b 74 65 73 74 t3 a b c}}.+test
4680: 20 6e 61 6d 65 73 70 61 63 65 2d 34 38 2e 36 20 namespace-48.6
4690: 7b 75 6e 6b 6e 6f 77 6e 3a 20 64 65 6c 65 74 69 {unknown: deleti
46a0: 6e 67 20 68 61 6e 64 6c 65 72 20 72 65 73 74 6f ng handler resto
46b0: 72 65 73 20 64 65 66 61 75 6c 74 7d 20 7b 0a 2b res default} {.+
46c0: 20 20 20 20 72 65 6e 61 6d 65 20 3a 3a 75 6e 6b rename ::unk
46d0: 6e 6f 77 6e 20 3a 3a 5f 75 6e 6b 6e 6f 77 6e 5f nown ::_unknown_
46e0: 6f 72 69 67 0a 2b 20 20 20 20 70 72 6f 63 20 3a orig.+ proc :
46f0: 3a 75 6e 6b 6e 6f 77 6e 20 7b 61 72 67 73 7d 20 :unknown {args}
4700: 7b 20 72 65 74 75 72 6e 20 22 44 45 46 41 55 4c { return "DEFAUL
4710: 54 3a 20 24 61 72 67 73 22 20 7d 0a 2b 20 20 20 T: $args" }.+
4720: 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 namespace eval
4730: 66 6f 6f 20 7b 0a 2b 09 6e 61 6d 65 73 70 61 63 foo {.+.namespac
4740: 65 20 75 6e 6b 6e 6f 77 6e 20 64 75 6d 6d 79 0a e unknown dummy.
4750: 2b 09 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b 6e +.namespace unkn
4760: 6f 77 6e 20 7b 7d 0a 2b 20 20 20 20 7d 0a 2b 20 own {}.+ }.+
4770: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6e set result [n
4780: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 66 6f amespace eval fo
4790: 6f 20 7b 20 64 75 6d 6d 79 20 61 20 62 20 63 20 o { dummy a b c
47a0: 7d 5d 0a 2b 20 20 20 20 72 65 6e 61 6d 65 20 3a }].+ rename :
47b0: 3a 75 6e 6b 6e 6f 77 6e 20 7b 7d 0a 2b 20 20 20 :unknown {}.+
47c0: 20 72 65 6e 61 6d 65 20 3a 3a 5f 75 6e 6b 6e 6f rename ::_unkno
47d0: 77 6e 5f 6f 72 69 67 20 3a 3a 75 6e 6b 6e 6f 77 wn_orig ::unknow
47e0: 6e 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 n.+ namespace
47f0: 20 64 65 6c 65 74 65 20 66 6f 6f 0a 2b 20 20 20 delete foo.+
4800: 20 73 65 74 20 72 65 73 75 6c 74 0a 2b 7d 20 7b set result.+} {
4810: 44 45 46 41 55 4c 54 3a 20 64 75 6d 6d 79 20 61 DEFAULT: dummy a
4820: 20 62 20 63 7d 0a 2b 74 65 73 74 20 6e 61 6d 65 b c}.+test name
4830: 73 70 61 63 65 2d 34 38 2e 37 20 7b 75 6e 6b 6e space-48.7 {unkn
4840: 6f 77 6e 3a 20 73 65 74 74 69 6e 67 20 67 6c 6f own: setting glo
4850: 62 61 6c 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64 bal unknown hand
4860: 6c 65 72 7d 20 7b 0a 2b 20 20 20 20 70 72 6f 63 ler} {.+ proc
4870: 20 3a 3a 6d 79 75 6e 6b 6e 6f 77 6e 20 7b 61 72 ::myunknown {ar
4880: 67 73 7d 20 7b 20 72 65 74 75 72 6e 20 22 4d 59 gs} { return "MY
4890: 55 4e 4b 4e 4f 57 4e 3a 20 24 61 72 67 73 22 20 UNKNOWN: $args"
48a0: 7d 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 }.+ namespace
48b0: 20 65 76 61 6c 20 3a 3a 20 7b 20 6e 61 6d 65 73 eval :: { names
48c0: 70 61 63 65 20 75 6e 6b 6e 6f 77 6e 20 3a 3a 6d pace unknown ::m
48d0: 79 75 6e 6b 6e 6f 77 6e 20 7d 0a 2b 20 20 20 20 yunknown }.+
48e0: 73 65 74 20 72 65 73 75 6c 74 20 5b 6e 61 6d 65 set result [name
48f0: 73 70 61 63 65 20 65 76 61 6c 20 66 6f 6f 20 7b space eval foo {
4900: 20 64 75 6d 6d 79 20 61 20 62 20 63 20 7d 5d 0a dummy a b c }].
4910: 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 + namespace e
4920: 76 61 6c 20 3a 3a 20 7b 20 6e 61 6d 65 73 70 61 val :: { namespa
4930: 63 65 20 75 6e 6b 6e 6f 77 6e 20 7b 7d 20 7d 0a ce unknown {} }.
4940: 2b 20 20 20 20 72 65 6e 61 6d 65 20 3a 3a 6d 79 + rename ::my
4950: 75 6e 6b 6e 6f 77 6e 20 7b 7d 0a 2b 20 20 20 20 unknown {}.+
4960: 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 namespace delete
4970: 20 66 6f 6f 0a 2b 20 20 20 20 73 65 74 20 72 65 foo.+ set re
4980: 73 75 6c 74 0a 2b 7d 20 7b 4d 59 55 4e 4b 4e 4f sult.+} {MYUNKNO
4990: 57 4e 3a 20 64 75 6d 6d 79 20 61 20 62 20 63 7d WN: dummy a b c}
49a0: 0a 2b 20 20 20 20 0a 2b 0a 20 0a 20 23 20 63 6c .+ .+. . # cl
49b0: 65 61 6e 75 70 0a 20 63 61 74 63 68 20 7b 72 65 eanup. catch {re
49c0: 6e 61 6d 65 20 63 6d 64 31 20 7b 7d 7d 0a name cmd1 {}}.