Tcl Source Code

Hex Artifact Content
Login

Artifact 78565704a8a3472e513bbc10a7c7a85da3769f20:

Attachment "tip181.patch" to ticket [958222ffff] added by tallniel 2004-05-22 03:09:12.
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 33  ng revision 1.13
00a0: 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 31 33 20  .diff -u -r1.13 
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: 39 20 4d 61 72 20 32 30 30 34 20 31 32 3a 35 39  9 Mar 2004 12:59
00e0: 3a 30 34 20 2d 30 30 30 30 09 31 2e 31 33 0a 2b  :04 -0000.1.13.+
00f0: 2b 2b 20 64 6f 63 2f 6e 61 6d 65 73 70 61 63 65  ++ doc/namespace
0100: 2e 6e 09 32 31 20 4d 61 79 20 32 30 30 34 20 31  .n.21 May 2004 1
0110: 39 3a 31 39 3a 31 33 20 2d 30 30 30 30 0a 40 40  9:19:13 -0000.@@
0120: 20 2d 32 33 37 2c 36 20 2b 32 33 37 2c 31 36 20   -237,6 +237,16 
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 2e 20 54 68 65 20 5c   be found. The \
0270: 66 49 73 63 72 69 70 74 5c 66 52 20 61 72 67 75  fIscript\fR argu
0280: 6d 65 6e 74 2c 20 69 66 20 67 69 76 65 6e 2c 20  ment, if given, 
0290: 73 68 6f 75 6c 64 20 62 65 20 61 20 77 65 6c 6c  should be a well
02a0: 0a 2b 66 6f 72 6d 65 64 20 6c 69 73 74 20 72 65  .+formed list re
02b0: 70 72 65 73 65 6e 74 69 6e 67 20 61 20 63 6f 6d  presenting a com
02c0: 6d 61 6e 64 20 6e 61 6d 65 20 61 6e 64 20 6f 70  mand name and op
02d0: 74 69 6f 6e 61 6c 20 61 72 67 75 6d 65 6e 74 73  tional arguments
02e0: 2e 20 57 68 65 6e 0a 2b 74 68 65 20 68 61 6e 64  . When.+the hand
02f0: 6c 65 72 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20  ler is invoked, 
0300: 74 68 65 20 66 75 6c 6c 20 69 6e 76 6f 63 61 74  the full invocat
0310: 69 6f 6e 20 6c 69 6e 65 20 77 69 6c 6c 20 62 65  ion line will be
0320: 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65   appended to the
0330: 0a 2b 73 63 72 69 70 74 20 61 6e 64 20 74 68 65  .+script and the
0340: 20 72 65 73 75 6c 74 20 65 76 61 6c 75 61 74 65   result evaluate
0350: 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  d in the context
0360: 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 70 61 63   of the namespac
0370: 65 2e 20 54 68 65 20 0a 2b 64 65 66 61 75 6c 74  e. The .+default
0380: 20 68 61 6e 64 6c 65 72 20 66 6f 72 20 61 6c 6c   handler for all
0390: 20 6e 61 6d 65 73 70 61 63 65 73 20 69 73 20 5c   namespaces is \
03a0: 66 42 3a 3a 75 6e 6b 6e 6f 77 6e 5c 66 52 2e 20  fB::unknown\fR. 
03b0: 49 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74 0a 2b  If no argument.+
03c0: 69 73 20 67 69 76 65 6e 2c 20 69 74 20 72 65 74  is given, it ret
03d0: 75 72 6e 73 20 74 68 65 20 68 61 6e 64 6c 65 72  urns the handler
03e0: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
03f0: 20 6e 61 6d 65 73 70 61 63 65 2e 0a 2b 2e 54 50   namespace..+.TP
0400: 0a 20 5c 66 42 6e 61 6d 65 73 70 61 63 65 20 77  . \fBnamespace w
0410: 68 69 63 68 5c 66 52 20 3f 5c 2d 5c 66 42 63 6f  hich\fR ?\-\fBco
0420: 6d 6d 61 6e 64 5c 66 52 3f 20 3f 5c 2d 5c 66 42  mmand\fR? ?\-\fB
0430: 76 61 72 69 61 62 6c 65 5c 66 52 3f 20 5c 66 49  variable\fR? \fI
0440: 6e 61 6d 65 5c 66 52 0a 20 4c 6f 6f 6b 73 20 75  name\fR. Looks u
0450: 70 20 5c 66 49 6e 61 6d 65 5c 66 52 20 61 73 20  p \fIname\fR as 
0460: 65 69 74 68 65 72 20 61 20 63 6f 6d 6d 61 6e 64  either a command
0470: 20 6f 72 20 76 61 72 69 61 62 6c 65 0a 20 61 6e   or variable. an
0480: 64 20 72 65 74 75 72 6e 73 20 69 74 73 20 66 75  d returns its fu
0490: 6c 6c 79 2d 71 75 61 6c 69 66 69 65 64 20 6e 61  lly-qualified na
04a0: 6d 65 2e 0a 49 6e 64 65 78 3a 20 64 6f 63 2f 75  me..Index: doc/u
04b0: 6e 6b 6e 6f 77 6e 2e 6e 0a 3d 3d 3d 3d 3d 3d 3d  nknown.n.=======
04c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
04d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
04e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
04f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53  ============.RCS
0500: 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f   file: /cvsroot/
0510: 74 63 6c 2f 74 63 6c 2f 64 6f 63 2f 75 6e 6b 6e  tcl/tcl/doc/unkn
0520: 6f 77 6e 2e 6e 2c 76 0a 72 65 74 72 69 65 76 69  own.n,v.retrievi
0530: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 34 0a  ng revision 1.4.
0540: 64 69 66 66 20 2d 75 20 2d 72 31 2e 34 20 75 6e  diff -u -r1.4 un
0550: 6b 6e 6f 77 6e 2e 6e 0a 2d 2d 2d 20 64 6f 63 2f  known.n.--- doc/
0560: 75 6e 6b 6e 6f 77 6e 2e 6e 09 32 37 20 4a 75 6e  unknown.n.27 Jun
0570: 20 32 30 30 31 20 32 31 3a 30 30 3a 34 35 20 2d   2001 21:00:45 -
0580: 30 30 30 30 09 31 2e 34 0a 2b 2b 2b 20 64 6f 63  0000.1.4.+++ doc
0590: 2f 75 6e 6b 6e 6f 77 6e 2e 6e 09 32 31 20 4d 61  /unknown.n.21 Ma
05a0: 79 20 32 30 30 34 20 31 39 3a 31 39 3a 31 33 20  y 2004 19:19:13 
05b0: 2d 30 30 30 30 0a 40 40 20 2d 32 33 2c 31 35 20  -0000.@@ -23,15 
05c0: 2b 32 33 2c 31 37 20 40 40 0a 20 74 72 69 65 73  +23,17 @@. tries
05d0: 20 74 6f 20 69 6e 76 6f 6b 65 20 61 20 63 6f 6d   to invoke a com
05e0: 6d 61 6e 64 20 74 68 61 74 20 64 6f 65 73 6e 27  mand that doesn'
05f0: 74 20 65 78 69 73 74 2e 20 20 54 68 65 20 64 65  t exist.  The de
0600: 66 61 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61  fault implementa
0610: 74 69 6f 6e 0a 20 6f 66 20 5c 66 42 75 6e 6b 6e  tion. of \fBunkn
0620: 6f 77 6e 5c 66 52 20 69 73 20 61 20 6c 69 62 72  own\fR is a libr
0630: 61 72 79 20 70 72 6f 63 65 64 75 72 65 20 64 65  ary procedure de
0640: 66 69 6e 65 64 20 77 68 65 6e 20 54 63 6c 20 69  fined when Tcl i
0650: 6e 69 74 69 61 6c 69 7a 65 73 20 61 6e 0a 20 69  nitializes an. i
0660: 6e 74 65 72 70 72 65 74 65 72 2e 20 20 59 6f 75  nterpreter.  You
0670: 20 63 61 6e 20 6f 76 65 72 72 69 64 65 20 74 68   can override th
0680: 65 20 64 65 66 61 75 6c 74 20 5c 66 42 75 6e 6b  e default \fBunk
0690: 6e 6f 77 6e 5c 66 52 20 74 6f 20 63 68 61 6e 67  nown\fR to chang
06a0: 65 20 69 74 73 0a 2d 66 75 6e 63 74 69 6f 6e 61  e its.-functiona
06b0: 6c 69 74 79 2e 20 20 4e 6f 74 65 20 74 68 61 74  lity.  Note that
06c0: 20 74 68 65 72 65 20 69 73 20 6e 6f 20 64 65 66   there is no def
06d0: 61 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ault implementat
06e0: 69 6f 6e 20 6f 66 0a 2d 5c 66 42 75 6e 6b 6e 6f  ion of.-\fBunkno
06f0: 77 6e 5c 66 52 20 69 6e 20 61 20 73 61 66 65 20  wn\fR in a safe 
0700: 69 6e 74 65 72 70 72 65 74 65 72 2e 0a 2b 66 75  interpreter..+fu
0710: 6e 63 74 69 6f 6e 61 6c 69 74 79 2c 20 6f 72 20  nctionality, or 
0720: 79 6f 75 20 63 61 6e 20 72 65 67 69 73 74 65 72  you can register
0730: 20 61 20 6e 65 77 20 68 61 6e 64 6c 65 72 20 66   a new handler f
0740: 6f 72 20 69 6e 64 69 76 69 64 75 61 6c 20 6e 61  or individual na
0750: 6d 65 73 70 61 63 65 73 0a 2b 75 73 69 6e 67 20  mespaces.+using 
0760: 74 68 65 20 5c 66 42 6e 61 6d 65 73 70 61 63 65  the \fBnamespace
0770: 20 75 6e 6b 6e 6f 77 6e 5c 66 52 20 63 6f 6d 6d   unknown\fR comm
0780: 61 6e 64 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  and.  Note that 
0790: 74 68 65 72 65 20 69 73 20 6e 6f 20 64 65 66 61  there is no defa
07a0: 75 6c 74 20 0a 2b 69 6d 70 6c 65 6d 65 6e 74 61  ult .+implementa
07b0: 74 69 6f 6e 20 6f 66 20 5c 66 42 75 6e 6b 6e 6f  tion of \fBunkno
07c0: 77 6e 5c 66 52 20 69 6e 20 61 20 73 61 66 65 20  wn\fR in a safe 
07d0: 69 6e 74 65 72 70 72 65 74 65 72 2e 0a 20 2e 50  interpreter.. .P
07e0: 50 0a 20 49 66 20 74 68 65 20 54 63 6c 20 69 6e  P. If the Tcl in
07f0: 74 65 72 70 72 65 74 65 72 20 65 6e 63 6f 75 6e  terpreter encoun
0800: 74 65 72 73 20 61 20 63 6f 6d 6d 61 6e 64 20 6e  ters a command n
0810: 61 6d 65 20 66 6f 72 20 77 68 69 63 68 20 74 68  ame for which th
0820: 65 72 65 0a 20 69 73 20 6e 6f 74 20 61 20 64 65  ere. is not a de
0830: 66 69 6e 65 64 20 63 6f 6d 6d 61 6e 64 2c 20 74  fined command, t
0840: 68 65 6e 20 54 63 6c 20 63 68 65 63 6b 73 20 66  hen Tcl checks f
0850: 6f 72 20 74 68 65 20 65 78 69 73 74 65 6e 63 65  or the existence
0860: 20 6f 66 0a 2d 61 20 63 6f 6d 6d 61 6e 64 20 6e   of.-a command n
0870: 61 6d 65 64 20 5c 66 42 75 6e 6b 6e 6f 77 6e 5c  amed \fBunknown\
0880: 66 52 2e 0a 2d 49 66 20 74 68 65 72 65 20 69 73  fR..-If there is
0890: 20 6e 6f 20 73 75 63 68 20 63 6f 6d 6d 61 6e 64   no such command
08a0: 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 74 65 72  , then the inter
08b0: 70 72 65 74 65 72 20 72 65 74 75 72 6e 73 20 61  preter returns a
08c0: 6e 0a 2d 65 72 72 6f 72 2e 0a 2d 49 66 20 74 68  n.-error..-If th
08d0: 65 20 5c 66 42 75 6e 6b 6e 6f 77 6e 5c 66 52 20  e \fBunknown\fR 
08e0: 63 6f 6d 6d 61 6e 64 20 65 78 69 73 74 73 2c 20  command exists, 
08f0: 74 68 65 6e 20 69 74 20 69 73 20 69 6e 76 6f 6b  then it is invok
0900: 65 64 20 77 69 74 68 0a 2b 61 6e 20 75 6e 6b 6e  ed with.+an unkn
0910: 6f 77 6e 20 68 61 6e 64 6c 65 72 20 66 6f 72 20  own handler for 
0920: 74 68 65 20 63 75 72 72 65 6e 74 20 6e 61 6d 65  the current name
0930: 73 70 61 63 65 2e 20 42 79 20 64 65 66 61 75 6c  space. By defaul
0940: 74 2c 20 74 68 69 73 0a 2b 68 61 6e 64 6c 65 72  t, this.+handler
0950: 20 69 73 20 61 20 63 6f 6d 6d 61 6e 64 20 6e 61   is a command na
0960: 6d 65 64 20 5c 66 42 3a 3a 75 6e 6b 6e 6f 77 6e  med \fB::unknown
0970: 5c 66 52 2e 20 20 49 66 20 74 68 65 72 65 20 69  \fR.  If there i
0980: 73 20 6e 6f 20 73 75 63 68 20 0a 2b 63 6f 6d 6d  s no such .+comm
0990: 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 69 6e  and, then the in
09a0: 74 65 72 70 72 65 74 65 72 20 72 65 74 75 72 6e  terpreter return
09b0: 73 20 61 6e 20 65 72 72 6f 72 2e 0a 2b 49 66 20  s an error..+If 
09c0: 74 68 65 20 5c 66 42 75 6e 6b 6e 6f 77 6e 5c 66  the \fBunknown\f
09d0: 52 20 63 6f 6d 6d 61 6e 64 20 65 78 69 73 74 73  R command exists
09e0: 20 28 6f 72 20 61 20 6e 65 77 20 68 61 6e 64 6c   (or a new handl
09f0: 65 72 20 68 61 73 20 62 65 65 6e 0a 2b 72 65 67  er has been.+reg
0a00: 69 73 74 65 72 65 64 20 66 6f 72 20 74 68 65 20  istered for the 
0a10: 63 75 72 72 65 6e 74 20 6e 61 6d 65 73 70 61 63  current namespac
0a20: 65 29 2c 20 74 68 65 6e 20 69 74 20 69 73 20 69  e), then it is i
0a30: 6e 76 6f 6b 65 64 20 77 69 74 68 0a 20 61 72 67  nvoked with. arg
0a40: 75 6d 65 6e 74 73 20 63 6f 6e 73 69 73 74 69 6e  uments consistin
0a50: 67 20 6f 66 20 74 68 65 20 66 75 6c 6c 79 2d 73  g of the fully-s
0a60: 75 62 73 74 69 74 75 74 65 64 20 6e 61 6d 65 20  ubstituted name 
0a70: 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 0a 20 66  and arguments. f
0a80: 6f 72 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  or the original 
0a90: 6e 6f 6e 2d 65 78 69 73 74 65 6e 74 20 63 6f 6d  non-existent com
0aa0: 6d 61 6e 64 2e 0a 20 54 68 65 20 5c 66 42 75 6e  mand.. The \fBun
0ab0: 6b 6e 6f 77 6e 5c 66 52 20 63 6f 6d 6d 61 6e 64  known\fR command
0ac0: 20 74 79 70 69 63 61 6c 6c 79 20 64 6f 65 73 20   typically does 
0ad0: 74 68 69 6e 67 73 20 6c 69 6b 65 20 73 65 61 72  things like sear
0ae0: 63 68 69 6e 67 0a 40 40 20 2d 37 33 2c 37 20 2b  ching.@@ -73,7 +
0af0: 37 35 2c 37 20 40 40 0a 20 65 78 65 63 75 74 65  75,7 @@. execute
0b00: 64 2e 0a 20 0a 20 2e 53 48 20 22 53 45 45 20 41  d.. . .SH "SEE A
0b10: 4c 53 4f 22 0a 2d 69 6e 66 6f 28 6e 29 2c 20 70  LSO".-info(n), p
0b20: 72 6f 63 28 6e 29 2c 20 69 6e 74 65 72 70 28 6e  roc(n), interp(n
0b30: 29 2c 20 6c 69 62 72 61 72 79 28 6e 29 0a 2b 69  ), library(n).+i
0b40: 6e 66 6f 28 6e 29 2c 20 70 72 6f 63 28 6e 29 2c  nfo(n), proc(n),
0b50: 20 69 6e 74 65 72 70 28 6e 29 2c 20 6c 69 62 72   interp(n), libr
0b60: 61 72 79 28 6e 29 2c 20 6e 61 6d 65 73 70 61 63  ary(n), namespac
0b70: 65 28 6e 29 0a 20 0a 20 2e 53 48 20 4b 45 59 57  e(n). . .SH KEYW
0b80: 4f 52 44 53 0a 20 65 72 72 6f 72 2c 20 6e 6f 6e  ORDS. error, non
0b90: 2d 65 78 69 73 74 65 6e 74 20 63 6f 6d 6d 61 6e  -existent comman
0ba0: 64 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63  d.Index: generic
0bb0: 2f 74 63 6c 42 61 73 69 63 2e 63 0a 3d 3d 3d 3d  /tclBasic.c.====
0bc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0bd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0be0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0bf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a  ===============.
0c00: 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f  RCS file: /cvsro
0c10: 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72  ot/tcl/tcl/gener
0c20: 69 63 2f 74 63 6c 42 61 73 69 63 2e 63 2c 76 0a  ic/tclBasic.c,v.
0c30: 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73  retrieving revis
0c40: 69 6f 6e 20 31 2e 31 30 32 0a 64 69 66 66 20 2d  ion 1.102.diff -
0c50: 75 20 2d 72 31 2e 31 30 32 20 74 63 6c 42 61 73  u -r1.102 tclBas
0c60: 69 63 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72 69 63  ic.c.--- generic
0c70: 2f 74 63 6c 42 61 73 69 63 2e 63 09 32 30 20 4d  /tclBasic.c.20 M
0c80: 61 79 20 32 30 30 34 20 31 33 3a 30 34 3a 31 31  ay 2004 13:04:11
0c90: 20 2d 30 30 30 30 09 31 2e 31 30 32 0a 2b 2b 2b   -0000.1.102.+++
0ca0: 20 67 65 6e 65 72 69 63 2f 74 63 6c 42 61 73 69   generic/tclBasi
0cb0: 63 2e 63 09 32 31 20 4d 61 79 20 32 30 30 34 20  c.c.21 May 2004 
0cc0: 31 39 3a 31 39 3a 32 34 20 2d 30 30 30 30 0a 40  19:19:24 -0000.@
0cd0: 40 20 2d 39 2c 31 33 20 2b 39 2c 31 33 20 40 40  @ -9,13 +9,13 @@
0ce0: 0a 20 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28  .  * Copyright (
0cf0: 63 29 20 31 39 39 34 2d 31 39 39 37 20 53 75 6e  c) 1994-1997 Sun
0d00: 20 4d 69 63 72 6f 73 79 73 74 65 6d 73 2c 20 49   Microsystems, I
0d10: 6e 63 2e 0a 20 20 2a 20 43 6f 70 79 72 69 67 68  nc..  * Copyrigh
0d20: 74 20 28 63 29 20 31 39 39 38 2d 31 39 39 39 20  t (c) 1998-1999 
0d30: 62 79 20 53 63 72 69 70 74 69 63 73 20 43 6f 72  by Scriptics Cor
0d40: 70 6f 72 61 74 69 6f 6e 2e 0a 20 20 2a 20 43 6f  poration..  * Co
0d50: 70 79 72 69 67 68 74 20 28 63 29 20 32 30 30 31  pyright (c) 2001
0d60: 2c 20 32 30 30 32 20 62 79 20 4b 65 76 69 6e 20  , 2002 by Kevin 
0d70: 42 2e 20 4b 65 6e 6e 79 2e 20 20 41 6c 6c 20 72  B. Kenny.  All r
0d80: 69 67 68 74 73 20 72 65 73 65 72 76 65 64 2e 0a  ights reserved..
0d90: 2b 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63  + * Copyright (c
0da0: 29 20 32 30 30 34 20 4e 65 69 6c 20 4d 61 64 64  ) 2004 Neil Madd
0db0: 65 6e 2e 0a 20 20 2a 0a 20 20 2a 20 53 65 65 20  en..  *.  * See 
0dc0: 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65 6e 73  the file "licens
0dd0: 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69 6e 66  e.terms" for inf
0de0: 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73 61 67  ormation on usag
0df0: 65 20 61 6e 64 20 72 65 64 69 73 74 72 69 62 75  e and redistribu
0e00: 74 69 6f 6e 0a 20 20 2a 20 6f 66 20 74 68 69 73  tion.  * of this
0e10: 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20 61   file, and for a
0e20: 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20 41   DISCLAIMER OF A
0e30: 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0a 20  LL WARRANTIES.. 
0e40: 20 2a 0a 20 20 2a 20 52 43 53 3a 20 40 28 23 29   *.  * RCS: @(#)
0e50: 20 24 49 64 3a 20 74 63 6c 42 61 73 69 63 2e 63   $Id: tclBasic.c
0e60: 2c 76 20 31 2e 31 30 32 20 32 30 30 34 2f 30 35  ,v 1.102 2004/05
0e70: 2f 32 30 20 31 33 3a 30 34 3a 31 31 20 64 6b 66  /20 13:04:11 dkf
0e80: 20 45 78 70 20 24 0a 20 20 2a 2f 0a 2d 0a 20 23   Exp $.  */.-. #
0e90: 69 6e 63 6c 75 64 65 20 22 74 63 6c 49 6e 74 2e  include "tclInt.
0ea0: 68 22 0a 20 23 69 6e 63 6c 75 64 65 20 22 74 63  h". #include "tc
0eb0: 6c 43 6f 6d 70 69 6c 65 2e 68 22 0a 20 0a 40 40  lCompile.h". .@@
0ec0: 20 2d 33 30 34 32 2c 36 20 2b 33 30 34 32 2c 31   -3042,6 +3042,1
0ed0: 30 20 40 40 0a 20 20 20 20 20 69 6e 74 20 69 3b  0 @@.     int i;
0ee0: 0a 20 20 20 20 20 43 61 6c 6c 46 72 61 6d 65 20  .     CallFrame 
0ef0: 2a 73 61 76 65 64 56 61 72 46 72 61 6d 65 50 74  *savedVarFramePt
0f00: 72 3b 09 2f 2a 20 53 61 76 65 73 20 6f 6c 64 20  r;./* Saves old 
0f10: 63 6f 70 79 20 6f 66 20 69 50 74 72 2d 3e 76 61  copy of iPtr->va
0f20: 72 46 72 61 6d 65 50 74 72 0a 20 09 09 09 09 09  rFramePtr. .....
0f30: 20 2a 20 69 6e 20 63 61 73 65 20 54 43 4c 5f 45   * in case TCL_E
0f40: 56 41 4c 5f 47 4c 4f 42 41 4c 20 77 61 73 20 73  VAL_GLOBAL was s
0f50: 65 74 2e 20 2a 2f 0a 2b 20 20 20 20 4e 61 6d 65  et. */.+    Name
0f60: 73 70 61 63 65 20 2a 63 75 72 72 4e 73 50 74 72  space *currNsPtr
0f70: 20 3d 20 4e 55 4c 4c 3b 09 2f 2a 20 55 73 65 64   = NULL;./* Used
0f80: 20 74 6f 20 63 68 65 63 6b 20 66 6f 72 2c 20 61   to check for, a
0f90: 6e 64 20 69 6e 76 6f 6b 65 20 61 6e 79 0a 2b 09  nd invoke any.+.
0fa0: 09 09 09 09 20 2a 20 72 65 67 69 73 74 65 72 65  .... * registere
0fb0: 64 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 6d 61  d unknown commma
0fc0: 6e 64 0a 2b 09 09 09 09 09 20 2a 20 68 61 6e 64  nd.+..... * hand
0fd0: 6c 65 72 20 66 6f 72 20 74 68 65 20 63 75 72 72  ler for the curr
0fe0: 65 6e 74 20 6e 61 6d 65 73 70 61 63 65 0a 2b 09  ent namespace.+.
0ff0: 09 09 09 09 20 2a 20 28 73 65 65 20 54 49 50 20  .... * (see TIP 
1000: 31 38 31 29 2e 20 2a 2f 0a 20 20 20 20 20 69 6e  181). */.     in
1010: 74 20 63 6f 64 65 20 3d 20 54 43 4c 5f 4f 4b 3b  t code = TCL_OK;
1020: 0a 20 20 20 20 20 69 6e 74 20 74 72 61 63 65 43  .     int traceC
1030: 6f 64 65 20 3d 20 54 43 4c 5f 4f 4b 3b 0a 20 20  ode = TCL_OK;.  
1040: 20 20 20 69 6e 74 20 63 68 65 63 6b 54 72 61 63     int checkTrac
1050: 65 73 20 3d 20 31 3b 0a 40 40 20 2d 33 30 37 37  es = 1;.@@ -3077
1060: 2c 31 35 20 2b 33 30 38 31 2c 36 31 20 40 40 0a  ,15 +3081,61 @@.
1070: 20 09 20 20 20 20 69 50 74 72 2d 3e 76 61 72 46   .    iPtr->varF
1080: 72 61 6d 65 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a  ramePtr = NULL;.
1090: 20 09 7d 0a 20 20 20 20 20 20 20 20 20 63 6d 64   .}.         cmd
10a0: 50 74 72 20 3d 20 28 43 6f 6d 6d 61 6e 64 20 2a  Ptr = (Command *
10b0: 29 20 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64  ) Tcl_GetCommand
10c0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
10d0: 6f 62 6a 76 5b 30 5d 29 3b 0a 2b 09 2f 2a 0a 2b  objv[0]);.+./*.+
10e0: 09 20 2a 20 47 72 61 62 20 63 75 72 72 65 6e 74  . * Grab current
10f0: 20 6e 61 6d 65 73 70 61 63 65 20 62 65 66 6f 72   namespace befor
1100: 65 20 72 65 73 74 6f 72 69 6e 67 20 76 61 72 20  e restoring var 
1110: 66 72 61 6d 65 2c 20 66 6f 72 20 75 6e 6b 6e 6f  frame, for unkno
1120: 77 6e 0a 2b 09 20 2a 20 68 61 6e 64 6c 65 72 20  wn.+. * handler 
1130: 63 68 65 63 6b 20 62 65 6c 6f 77 2e 20 49 6d 70  check below. Imp
1140: 6f 72 74 61 6e 74 20 74 6f 20 67 72 61 62 20 69  ortant to grab i
1150: 74 20 68 65 72 65 20 73 6f 20 74 68 61 74 20 77  t here so that w
1160: 65 0a 2b 09 20 2a 20 72 65 73 70 65 63 74 20 74  e.+. * respect t
1170: 68 65 20 54 43 4c 5f 45 56 41 4c 5f 49 4e 56 4f  he TCL_EVAL_INVO
1180: 4b 45 2f 54 43 4c 5f 45 56 41 4c 5f 47 4c 4f 42  KE/TCL_EVAL_GLOB
1190: 41 4c 20 66 6c 61 67 73 20 77 68 69 63 68 20 6d  AL flags which m
11a0: 61 79 0a 2b 09 20 2a 20 68 61 76 65 20 62 65 65  ay.+. * have bee
11b0: 6e 20 70 61 73 73 65 64 2e 0a 2b 09 20 2a 2f 0a  n passed..+. */.
11c0: 2b 09 69 66 20 28 69 50 74 72 2d 3e 76 61 72 46  +.if (iPtr->varF
11d0: 72 61 6d 65 50 74 72 20 21 3d 20 4e 55 4c 4c 29  ramePtr != NULL)
11e0: 20 7b 0a 2b 09 20 20 20 20 63 75 72 72 4e 73 50   {.+.    currNsP
11f0: 74 72 20 3d 20 69 50 74 72 2d 3e 76 61 72 46 72  tr = iPtr->varFr
1200: 61 6d 65 50 74 72 2d 3e 6e 73 50 74 72 3b 0a 2b  amePtr->nsPtr;.+
1210: 09 20 20 20 20 69 66 20 28 63 75 72 72 4e 73 50  .    if (currNsP
1220: 74 72 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 63 75  tr == NULL || cu
1230: 72 72 4e 73 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e  rrNsPtr->unknown
1240: 48 61 6e 64 6c 65 72 50 74 72 20 3d 3d 20 4e 55  HandlerPtr == NU
1250: 4c 4c 29 20 7b 0a 2b 09 09 2f 2a 20 44 65 66 61  LL) {.+../* Defa
1260: 75 6c 74 20 68 61 6e 64 6c 65 72 20 69 73 20 74  ult handler is t
1270: 6f 20 66 6f 72 77 61 72 64 20 6f 6e 20 74 6f 20  o forward on to 
1280: 67 6c 6f 62 61 6c 20 6e 61 6d 65 73 70 61 63 65  global namespace
1290: 2e 20 2a 2f 0a 2b 09 09 63 75 72 72 4e 73 50 74  . */.+..currNsPt
12a0: 72 20 3d 20 69 50 74 72 2d 3e 67 6c 6f 62 61 6c  r = iPtr->global
12b0: 4e 73 50 74 72 3b 0a 2b 09 20 20 20 20 7d 0a 2b  NsPtr;.+.    }.+
12c0: 09 7d 20 65 6c 73 65 20 7b 0a 2b 09 20 20 20 20  .} else {.+.    
12d0: 63 75 72 72 4e 73 50 74 72 20 3d 20 69 50 74 72  currNsPtr = iPtr
12e0: 2d 3e 67 6c 6f 62 61 6c 4e 73 50 74 72 3b 0a 2b  ->globalNsPtr;.+
12f0: 09 7d 0a 2b 09 2f 2a 20 52 65 73 74 6f 72 65 20  .}.+./* Restore 
1300: 76 61 72 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 09  var frame. */. .
1310: 69 50 74 72 2d 3e 76 61 72 46 72 61 6d 65 50 74  iPtr->varFramePt
1320: 72 20 3d 20 73 61 76 65 64 56 61 72 46 72 61 6d  r = savedVarFram
1330: 65 50 74 72 3b 0a 20 0a 20 20 20 20 20 20 20 20  ePtr;. .        
1340: 20 69 66 20 28 63 6d 64 50 74 72 20 3d 3d 20 4e   if (cmdPtr == N
1350: 55 4c 4c 29 20 7b 0a 2d 09 20 20 20 20 6e 65 77  ULL) {.-.    new
1360: 4f 62 6a 76 20 3d 20 28 54 63 6c 5f 4f 62 6a 20  Objv = (Tcl_Obj 
1370: 2a 2a 29 20 63 6b 61 6c 6c 6f 63 28 28 75 6e 73  **) ckalloc((uns
1380: 69 67 6e 65 64 29 0a 2d 09 09 28 28 6f 62 6a 63  igned).-..((objc
1390: 20 2b 20 31 29 20 2a 20 73 69 7a 65 6f 66 20 28   + 1) * sizeof (
13a0: 54 63 6c 5f 4f 62 6a 20 2a 29 29 29 3b 0a 2d 09  Tcl_Obj *)));.-.
13b0: 20 20 20 20 66 6f 72 20 28 69 20 3d 20 6f 62 6a      for (i = obj
13c0: 63 2d 31 3b 20 69 20 3e 3d 20 30 3b 20 69 2d 2d  c-1; i >= 0; i--
13d0: 29 20 7b 0a 2d 09 20 20 20 20 20 20 20 20 6e 65  ) {.-.        ne
13e0: 77 4f 62 6a 76 5b 69 2b 31 5d 20 3d 20 6f 62 6a  wObjv[i+1] = obj
13f0: 76 5b 69 5d 3b 0a 2b 09 20 20 20 20 69 6e 74 20  v[i];.+.    int 
1400: 6e 65 77 4f 62 6a 63 3b 0a 2b 09 20 20 20 20 2f  newObjc;.+.    /
1410: 2a 0a 2b 09 20 20 20 20 20 2a 20 43 68 65 63 6b  *.+.     * Check
1420: 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
1430: 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64 6c 65 72 20  unknown handler 
1440: 72 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 74  registered for t
1450: 68 69 73 0a 2b 09 20 20 20 20 20 2a 20 6e 61 6d  his.+.     * nam
1460: 65 73 70 61 63 65 2e 0a 2b 09 20 20 20 20 20 2a  espace..+.     *
1470: 2f 0a 2b 09 20 20 20 20 69 66 20 28 63 75 72 72  /.+.    if (curr
1480: 4e 73 50 74 72 20 21 3d 20 4e 55 4c 4c 20 26 26  NsPtr != NULL &&
1490: 20 63 75 72 72 4e 73 50 74 72 2d 3e 75 6e 6b 6e   currNsPtr->unkn
14a0: 6f 77 6e 48 61 6e 64 6c 65 72 50 74 72 20 21 3d  ownHandlerPtr !=
14b0: 20 4e 55 4c 4c 29 20 7b 0a 2b 09 09 69 6e 74 20   NULL) {.+..int 
14c0: 68 61 6e 64 6c 65 72 4f 62 6a 63 3b 0a 2b 09 09  handlerObjc;.+..
14d0: 54 63 6c 5f 4f 62 6a 20 2a 2a 68 61 6e 64 6c 65  Tcl_Obj **handle
14e0: 72 4f 62 6a 76 3b 0a 2b 0a 2b 09 09 69 66 20 28  rObjv;.+.+..if (
14f0: 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c  Tcl_ListObjGetEl
1500: 65 6d 65 6e 74 73 28 69 6e 74 65 72 70 2c 0a 2b  ements(interp,.+
1510: 09 09 20 20 20 20 63 75 72 72 4e 73 50 74 72 2d  ..    currNsPtr-
1520: 3e 75 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50  >unknownHandlerP
1530: 74 72 2c 20 26 68 61 6e 64 6c 65 72 4f 62 6a 63  tr, &handlerObjc
1540: 2c 20 26 68 61 6e 64 6c 65 72 4f 62 6a 76 29 0a  , &handlerObjv).
1550: 2b 09 09 20 20 20 20 21 3d 20 54 43 4c 5f 4f 4b  +..    != TCL_OK
1560: 29 20 7b 0a 2b 09 09 20 20 20 20 72 65 74 75 72  ) {.+..    retur
1570: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 09  n TCL_ERROR;.+..
1580: 7d 0a 2b 09 09 6e 65 77 4f 62 6a 63 20 3d 20 6f  }.+..newObjc = o
1590: 62 6a 63 20 2b 20 68 61 6e 64 6c 65 72 4f 62 6a  bjc + handlerObj
15a0: 63 3b 0a 2b 09 09 6e 65 77 4f 62 6a 76 20 3d 20  c;.+..newObjv = 
15b0: 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20 63 6b 61  (Tcl_Obj **) cka
15c0: 6c 6c 6f 63 28 28 75 6e 73 69 67 6e 65 64 29 0a  lloc((unsigned).
15d0: 2b 09 09 20 20 20 20 28 6e 65 77 4f 62 6a 63 20  +..    (newObjc 
15e0: 2a 20 73 69 7a 65 6f 66 20 28 54 63 6c 5f 4f 62  * sizeof (Tcl_Ob
15f0: 6a 20 2a 29 29 29 3b 0a 2b 09 09 66 6f 72 20 28  j *)));.+..for (
1600: 69 20 3d 20 30 3b 20 69 20 3c 20 68 61 6e 64 6c  i = 0; i < handl
1610: 65 72 4f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b  erObjc; i++) {.+
1620: 09 09 20 20 20 20 6e 65 77 4f 62 6a 76 5b 69 5d  ..    newObjv[i]
1630: 20 3d 20 68 61 6e 64 6c 65 72 4f 62 6a 76 5b 69   = handlerObjv[i
1640: 5d 3b 0a 2b 09 09 7d 0a 2b 09 09 66 6f 72 20 28  ];.+..}.+..for (
1650: 69 20 3d 20 6f 62 6a 63 2d 31 3b 20 69 20 3e 3d  i = objc-1; i >=
1660: 20 30 3b 20 69 2d 2d 29 20 7b 0a 2b 09 09 20 20   0; i--) {.+..  
1670: 20 20 6e 65 77 4f 62 6a 76 5b 69 2b 68 61 6e 64    newObjv[i+hand
1680: 6c 65 72 4f 62 6a 63 5d 20 3d 20 6f 62 6a 76 5b  lerObjc] = objv[
1690: 69 5d 3b 0a 2b 09 09 7d 0a 2b 09 20 20 20 20 7d  i];.+..}.+.    }
16a0: 20 65 6c 73 65 20 7b 0a 2b 09 09 2f 2a 0a 2b 09   else {.+../*.+.
16b0: 09 20 2a 20 44 65 66 61 75 6c 74 20 67 6c 6f 62  . * Default glob
16c0: 61 6c 20 6e 61 6d 65 73 70 61 63 65 20 68 61 6e  al namespace han
16d0: 64 6c 65 72 20 2d 20 73 69 6d 70 6c 79 20 63 61  dler - simply ca
16e0: 6c 6c 73 20 3a 3a 75 6e 6b 6e 6f 77 6e 0a 2b 09  lls ::unknown.+.
16f0: 09 20 2a 20 61 73 20 69 74 20 64 69 64 20 70 72  . * as it did pr
1700: 65 2d 54 49 50 2d 31 38 31 2e 0a 2b 09 09 20 2a  e-TIP-181..+.. *
1710: 2f 0a 2b 09 09 6e 65 77 4f 62 6a 63 20 3d 20 6f  /.+..newObjc = o
1720: 62 6a 63 20 2b 20 31 3b 0a 2b 09 09 6e 65 77 4f  bjc + 1;.+..newO
1730: 62 6a 76 20 3d 20 28 54 63 6c 5f 4f 62 6a 20 2a  bjv = (Tcl_Obj *
1740: 2a 29 20 63 6b 61 6c 6c 6f 63 28 28 75 6e 73 69  *) ckalloc((unsi
1750: 67 6e 65 64 29 0a 2b 09 09 20 20 20 20 28 6e 65  gned).+..    (ne
1760: 77 4f 62 6a 63 20 2a 20 73 69 7a 65 6f 66 20 28  wObjc * sizeof (
1770: 54 63 6c 5f 4f 62 6a 20 2a 29 29 29 3b 0a 2b 09  Tcl_Obj *)));.+.
1780: 09 66 6f 72 20 28 69 20 3d 20 6f 62 6a 63 2d 31  .for (i = objc-1
1790: 3b 20 69 20 3e 3d 20 30 3b 20 69 2d 2d 29 20 7b  ; i >= 0; i--) {
17a0: 0a 2b 09 09 20 20 20 20 6e 65 77 4f 62 6a 76 5b  .+..    newObjv[
17b0: 69 2b 31 5d 20 3d 20 6f 62 6a 76 5b 69 5d 3b 0a  i+1] = objv[i];.
17c0: 2b 09 09 7d 0a 2b 09 09 6e 65 77 4f 62 6a 76 5b  +..}.+..newObjv[
17d0: 30 5d 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69  0] = Tcl_NewStri
17e0: 6e 67 4f 62 6a 28 22 3a 3a 75 6e 6b 6e 6f 77 6e  ngObj("::unknown
17f0: 22 2c 20 2d 31 29 3b 0a 20 09 20 20 20 20 7d 0a  ", -1);. .    }.
1800: 2d 09 20 20 20 20 6e 65 77 4f 62 6a 76 5b 30 5d  -.    newObjv[0]
1810: 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67   = Tcl_NewString
1820: 4f 62 6a 28 22 3a 3a 75 6e 6b 6e 6f 77 6e 22 2c  Obj("::unknown",
1830: 20 2d 31 29 3b 0a 20 09 20 20 20 20 54 63 6c 5f   -1);. .    Tcl_
1840: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 6e 65 77  IncrRefCount(new
1850: 4f 62 6a 76 5b 30 5d 29 3b 0a 20 09 20 20 20 20  Objv[0]);. .    
1860: 63 6d 64 50 74 72 20 3d 20 28 43 6f 6d 6d 61 6e  cmdPtr = (Comman
1870: 64 20 2a 29 20 54 63 6c 5f 47 65 74 43 6f 6d 6d  d *) Tcl_GetComm
1880: 61 6e 64 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  andFromObj(inter
1890: 70 2c 20 6e 65 77 4f 62 6a 76 5b 30 5d 29 3b 0a  p, newObjv[0]);.
18a0: 20 09 20 20 20 20 69 66 20 28 63 6d 64 50 74 72   .    if (cmdPtr
18b0: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 40 40 20 2d   == NULL) {.@@ -
18c0: 33 30 39 35 2c 37 20 2b 33 31 34 35 2c 37 20 40  3095,7 +3145,7 @
18d0: 40 0a 20 09 20 20 20 20 20 20 20 20 63 6f 64 65  @. .        code
18e0: 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 09   = TCL_ERROR;. .
18f0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 09 20      } else {. . 
1900: 20 20 20 20 20 20 20 69 50 74 72 2d 3e 6e 75 6d         iPtr->num
1910: 4c 65 76 65 6c 73 2b 2b 3b 0a 2d 09 20 20 20 20  Levels++;.-.    
1920: 20 20 20 20 63 6f 64 65 20 3d 20 54 63 6c 45 76      code = TclEv
1930: 61 6c 4f 62 6a 76 49 6e 74 65 72 6e 61 6c 28 69  alObjvInternal(i
1940: 6e 74 65 72 70 2c 20 6f 62 6a 63 2b 31 2c 20 6e  nterp, objc+1, n
1950: 65 77 4f 62 6a 76 2c 20 63 6f 6d 6d 61 6e 64 2c  ewObjv, command,
1960: 20 6c 65 6e 67 74 68 2c 20 30 29 3b 0a 2b 09 20   length, 0);.+. 
1970: 20 20 20 20 20 20 20 63 6f 64 65 20 3d 20 54 63         code = Tc
1980: 6c 45 76 61 6c 4f 62 6a 76 49 6e 74 65 72 6e 61  lEvalObjvInterna
1990: 6c 28 69 6e 74 65 72 70 2c 20 6e 65 77 4f 62 6a  l(interp, newObj
19a0: 63 2c 20 6e 65 77 4f 62 6a 76 2c 20 63 6f 6d 6d  c, newObjv, comm
19b0: 61 6e 64 2c 20 6c 65 6e 67 74 68 2c 20 30 29 3b  and, length, 0);
19c0: 0a 20 09 20 20 20 20 20 20 20 20 69 50 74 72 2d  . .        iPtr-
19d0: 3e 6e 75 6d 4c 65 76 65 6c 73 2d 2d 3b 0a 20 09  >numLevels--;. .
19e0: 20 20 20 20 7d 0a 20 09 20 20 20 20 54 63 6c 5f      }. .    Tcl_
19f0: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 6e 65 77  DecrRefCount(new
1a00: 4f 62 6a 76 5b 30 5d 29 3b 0a 49 6e 64 65 78 3a  Objv[0]);.Index:
1a10: 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e   generic/tclInt.
1a20: 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  h.==============
1a30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1a40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1a50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1a60: 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20  =====.RCS file: 
1a70: 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c  /cvsroot/tcl/tcl
1a80: 2f 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e  /generic/tclInt.
1a90: 68 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72  h,v.retrieving r
1aa0: 65 76 69 73 69 6f 6e 20 31 2e 31 36 31 0a 64 69  evision 1.161.di
1ab0: 66 66 20 2d 75 20 2d 72 31 2e 31 36 31 20 74 63  ff -u -r1.161 tc
1ac0: 6c 49 6e 74 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72  lInt.h.--- gener
1ad0: 69 63 2f 74 63 6c 49 6e 74 2e 68 09 32 30 20 4d  ic/tclInt.h.20 M
1ae0: 61 79 20 32 30 30 34 20 31 33 3a 30 34 3a 31 31  ay 2004 13:04:11
1af0: 20 2d 30 30 30 30 09 31 2e 31 36 31 0a 2b 2b 2b   -0000.1.161.+++
1b00: 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e   generic/tclInt.
1b10: 68 09 32 31 20 4d 61 79 20 32 30 30 34 20 31 39  h.21 May 2004 19
1b20: 3a 31 39 3a 33 31 20 2d 30 30 30 30 0a 40 40 20  :19:31 -0000.@@ 
1b30: 2d 32 32 32 2c 36 20 2b 32 32 32 2c 39 20 40 40  -222,6 +222,9 @@
1b40: 0a 20 20 20 20 20 54 63 6c 5f 45 6e 73 65 6d 62  .     Tcl_Ensemb
1b50: 6c 65 20 2a 65 6e 73 65 6d 62 6c 65 73 3b 09 2f  le *ensembles;./
1b60: 2a 20 4c 69 73 74 20 6f 66 20 73 74 72 75 63 74  * List of struct
1b70: 75 72 65 73 20 74 68 61 74 20 63 6f 6e 74 61 69  ures that contai
1b80: 6e 20 74 68 65 20 64 65 74 61 69 6c 73 0a 20 09  n the details. .
1b90: 09 09 09 20 2a 20 6f 66 20 74 68 65 20 65 6e 73  ... * of the ens
1ba0: 65 6d 62 6c 65 73 20 74 68 61 74 20 61 72 65 20  embles that are 
1bb0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 6f 6e 0a 20  implemented on. 
1bc0: 09 09 09 09 20 2a 20 74 6f 70 20 6f 66 20 74 68  .... * top of th
1bd0: 69 73 20 6e 61 6d 65 73 70 61 63 65 2e 20 2a 2f  is namespace. */
1be0: 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 75  .+    Tcl_Obj *u
1bf0: 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 74 72  nknownHandlerPtr
1c00: 3b 09 2f 2a 20 41 20 73 63 72 69 70 74 20 66 72  ;./* A script fr
1c10: 61 67 6d 65 6e 74 20 74 6f 20 62 65 20 75 73 65  agment to be use
1c20: 64 20 77 68 65 6e 20 63 6f 6d 6d 61 6e 64 0a 2b  d when command.+
1c30: 09 09 09 09 20 2a 20 72 65 73 6f 6c 75 74 69 6f  .... * resolutio
1c40: 6e 20 69 6e 20 74 68 69 73 20 6e 61 6d 65 73 70  n in this namesp
1c50: 61 63 65 20 66 61 69 6c 73 2e 20 53 65 65 20 54  ace fails. See T
1c60: 49 50 0a 2b 09 09 09 09 20 2a 20 31 38 31 20 66  IP.+.... * 181 f
1c70: 6f 72 20 64 65 74 61 69 6c 73 2e 20 2a 2f 0a 20  or details. */. 
1c80: 7d 20 4e 61 6d 65 73 70 61 63 65 3b 0a 20 0a 20  } Namespace;. . 
1c90: 2f 2a 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69  /*.Index: generi
1ca0: 63 2f 74 63 6c 4e 61 6d 65 73 70 2e 63 0a 3d 3d  c/tclNamesp.c.==
1cb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1cc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1cd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1ce0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1cf0: 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73  =.RCS file: /cvs
1d00: 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e  root/tcl/tcl/gen
1d10: 65 72 69 63 2f 74 63 6c 4e 61 6d 65 73 70 2e 63  eric/tclNamesp.c
1d20: 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65  ,v.retrieving re
1d30: 76 69 73 69 6f 6e 20 31 2e 33 37 0a 64 69 66 66  vision 1.37.diff
1d40: 20 2d 75 20 2d 72 31 2e 33 37 20 74 63 6c 4e 61   -u -r1.37 tclNa
1d50: 6d 65 73 70 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72  mesp.c.--- gener
1d60: 69 63 2f 74 63 6c 4e 61 6d 65 73 70 2e 63 09 32  ic/tclNamesp.c.2
1d70: 34 20 4d 61 72 20 32 30 30 34 20 32 31 3a 35 34  4 Mar 2004 21:54
1d80: 3a 33 32 20 2d 30 30 30 30 09 31 2e 33 37 0a 2b  :32 -0000.1.37.+
1d90: 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61  ++ generic/tclNa
1da0: 6d 65 73 70 2e 63 09 32 31 20 4d 61 79 20 32 30  mesp.c.21 May 20
1db0: 30 34 20 31 39 3a 31 39 3a 34 34 20 2d 30 30 30  04 19:19:44 -000
1dc0: 30 0a 40 40 20 2d 31 32 2c 36 20 2b 31 32 2c 37  0.@@ -12,6 +12,7
1dd0: 20 40 40 0a 20 20 2a 20 43 6f 70 79 72 69 67 68   @@.  * Copyrigh
1de0: 74 20 28 63 29 20 31 39 39 37 20 53 75 6e 20 4d  t (c) 1997 Sun M
1df0: 69 63 72 6f 73 79 73 74 65 6d 73 2c 20 49 6e 63  icrosystems, Inc
1e00: 2e 0a 20 20 2a 20 43 6f 70 79 72 69 67 68 74 20  ..  * Copyright 
1e10: 28 63 29 20 31 39 39 38 2d 31 39 39 39 20 62 79  (c) 1998-1999 by
1e20: 20 53 63 72 69 70 74 69 63 73 20 43 6f 72 70 6f   Scriptics Corpo
1e30: 72 61 74 69 6f 6e 2e 0a 20 20 2a 20 43 6f 70 79  ration..  * Copy
1e40: 72 69 67 68 74 20 28 63 29 20 32 30 30 32 2d 32  right (c) 2002-2
1e50: 30 30 33 20 44 6f 6e 61 6c 20 4b 2e 20 46 65 6c  003 Donal K. Fel
1e60: 6c 6f 77 73 2e 0a 2b 20 2a 20 43 6f 70 79 72 69  lows..+ * Copyri
1e70: 67 68 74 20 28 63 29 20 32 30 30 34 20 4e 65 69  ght (c) 2004 Nei
1e80: 6c 20 4d 61 64 64 65 6e 2e 0a 20 20 2a 0a 20 20  l Madden..  *.  
1e90: 2a 20 4f 72 69 67 69 6e 61 6c 6c 79 20 69 6d 70  * Originally imp
1ea0: 6c 65 6d 65 6e 74 65 64 20 62 79 0a 20 20 2a 20  lemented by.  * 
1eb0: 20 20 4d 69 63 68 61 65 6c 20 4a 2e 20 4d 63 4c    Michael J. McL
1ec0: 65 6e 6e 61 6e 0a 40 40 20 2d 32 33 32 2c 36 20  ennan.@@ -232,6 
1ed0: 2b 32 33 33 2c 39 20 40 40 0a 20 73 74 61 74 69  +233,9 @@. stati
1ee0: 63 20 69 6e 74 09 09 4e 61 6d 65 73 70 61 63 65  c int..Namespace
1ef0: 54 61 69 6c 43 6d 64 20 5f 41 4e 53 49 5f 41 52  TailCmd _ANSI_AR
1f00: 47 53 5f 28 28 0a 20 09 09 09 20 20 20 20 43 6c  GS_((. ...    Cl
1f10: 69 65 6e 74 44 61 74 61 20 64 75 6d 6d 79 2c 20  ientData dummy, 
1f20: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1f30: 72 70 2c 0a 20 09 09 09 20 20 20 20 69 6e 74 20  rp,. ...    int 
1f40: 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43  objc, Tcl_Obj *C
1f50: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 29 3b 0a 2b  ONST objv[]));.+
1f60: 73 74 61 74 69 63 20 69 6e 74 09 09 4e 61 6d 65  static int..Name
1f70: 73 70 61 63 65 55 6e 6b 6e 6f 77 6e 43 6d 64 20  spaceUnknownCmd 
1f80: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 0a 2b 09  _ANSI_ARGS_((.+.
1f90: 09 09 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61  ..    ClientData
1fa0: 20 64 75 6d 6d 79 2c 20 54 63 6c 5f 49 6e 74 65   dummy, Tcl_Inte
1fb0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 2b 09 09 09  rp *interp,.+...
1fc0: 20 20 20 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63      int objc, Tc
1fd0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
1fe0: 76 5b 5d 29 29 3b 0a 20 73 74 61 74 69 63 20 69  v[]));. static i
1ff0: 6e 74 09 09 4e 61 6d 65 73 70 61 63 65 57 68 69  nt..NamespaceWhi
2000: 63 68 43 6d 64 20 5f 41 4e 53 49 5f 41 52 47 53  chCmd _ANSI_ARGS
2010: 5f 28 28 0a 20 09 09 09 20 20 20 20 43 6c 69 65  _((. ...    Clie
2020: 6e 74 44 61 74 61 20 64 75 6d 6d 79 2c 20 54 63  ntData dummy, Tc
2030: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
2040: 2c 0a 20 09 09 09 20 20 20 20 69 6e 74 20 6f 62  ,. ...    int ob
2050: 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  jc, Tcl_Obj *CON
2060: 53 54 20 6f 62 6a 76 5b 5d 29 29 3b 0a 40 40 20  ST objv[]));.@@ 
2070: 2d 36 36 37 2c 36 20 2b 36 37 31 2c 37 20 40 40  -667,6 +671,7 @@
2080: 0a 20 20 20 20 20 6e 73 50 74 72 2d 3e 63 6f 6d  .     nsPtr->com
2090: 70 69 6c 65 64 56 61 72 52 65 73 50 72 6f 63 20  piledVarResProc 
20a0: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 6e 73 50  = NULL;.     nsP
20b0: 74 72 2d 3e 65 78 70 6f 72 74 4c 6f 6f 6b 75 70  tr->exportLookup
20c0: 45 70 6f 63 68 20 3d 20 30 3b 0a 20 20 20 20 20  Epoch = 0;.     
20d0: 6e 73 50 74 72 2d 3e 65 6e 73 65 6d 62 6c 65 73  nsPtr->ensembles
20e0: 09 20 20 20 20 20 3d 20 4e 55 4c 4c 3b 0a 2b 20  .     = NULL;.+ 
20f0: 20 20 20 6e 73 50 74 72 2d 3e 75 6e 6b 6e 6f 77     nsPtr->unknow
2100: 6e 48 61 6e 64 6c 65 72 50 74 72 20 3d 20 4e 55  nHandlerPtr = NU
2110: 4c 4c 3b 0a 20 0a 20 20 20 20 20 69 66 20 28 70  LL;. .     if (p
2120: 61 72 65 6e 74 50 74 72 20 21 3d 20 4e 55 4c 4c  arentPtr != NULL
2130: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 65 6e 74  ) {.         ent
2140: 72 79 50 74 72 20 3d 20 54 63 6c 5f 43 72 65 61  ryPtr = Tcl_Crea
2150: 74 65 48 61 73 68 45 6e 74 72 79 28 26 70 61 72  teHashEntry(&par
2160: 65 6e 74 50 74 72 2d 3e 63 68 69 6c 64 54 61 62  entPtr->childTab
2170: 6c 65 2c 20 73 69 6d 70 6c 65 4e 61 6d 65 2c 0a  le, simpleName,.
2180: 40 40 20 2d 37 35 36 2c 36 20 2b 37 36 31 2c 31  @@ -756,6 +761,1
2190: 34 20 40 40 0a 20 20 20 20 20 7d 0a 20 0a 20 20  4 @@.     }. .  
21a0: 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20 49 66     /*.+     * If
21b0: 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 20 68   the namespace h
21c0: 61 73 20 61 20 72 65 67 69 73 74 65 72 65 64 20  as a registered 
21d0: 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64 6c 65 72 20  unknown handler 
21e0: 28 54 49 50 20 31 38 31 29 2c 20 74 68 65 6e 20  (TIP 181), then 
21f0: 66 72 65 65 0a 2b 20 20 20 20 20 2a 20 69 74 20  free.+     * it 
2200: 68 65 72 65 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b  here..+     */.+
2210: 20 20 20 20 69 66 20 28 6e 73 50 74 72 2d 3e 75      if (nsPtr->u
2220: 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 74 72  nknownHandlerPtr
2230: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 54 63   != NULL) {.+.Tc
2240: 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 6e  l_DecrRefCount(n
2250: 73 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e 48 61 6e  sPtr->unknownHan
2260: 64 6c 65 72 50 74 72 29 3b 0a 2b 20 20 20 20 7d  dlerPtr);.+    }
2270: 0a 2b 0a 2b 20 20 20 20 2f 2a 0a 20 20 20 20 20  .+.+    /*.     
2280: 20 2a 20 49 66 20 74 68 65 20 6e 61 6d 65 73 70   * If the namesp
2290: 61 63 65 20 69 73 20 6f 6e 20 74 68 65 20 63 61  ace is on the ca
22a0: 6c 6c 20 66 72 61 6d 65 20 73 74 61 63 6b 2c 20  ll frame stack, 
22b0: 69 74 20 69 73 20 6d 61 72 6b 65 64 20 61 73 20  it is marked as 
22c0: 22 64 79 69 6e 67 22 0a 20 20 20 20 20 20 2a 20  "dying".      * 
22d0: 28 4e 53 5f 44 59 49 4e 47 20 69 73 20 4f 52 27  (NS_DYING is OR'
22e0: 64 20 69 6e 74 6f 20 69 74 73 20 66 6c 61 67 73  d into its flags
22f0: 29 3a 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65  ): the namespace
2300: 20 63 61 6e 27 74 20 62 65 20 6c 6f 6f 6b 65 64   can't be looked
2310: 20 75 70 0a 20 20 20 20 20 20 2a 20 62 79 20 6e   up.      * by n
2320: 61 6d 65 20 62 75 74 20 69 74 73 20 63 6f 6d 6d  ame but its comm
2330: 61 6e 64 73 20 61 6e 64 20 76 61 72 69 61 62 6c  ands and variabl
2340: 65 73 20 61 72 65 20 73 74 69 6c 6c 20 75 73 61  es are still usa
2350: 62 6c 65 20 62 79 20 74 68 6f 73 65 0a 40 40 20  ble by those.@@ 
2360: 2d 32 36 35 30 2c 31 33 20 2b 32 36 36 33 2c 31  -2650,13 +2663,1
2370: 33 20 40 40 0a 20 09 22 63 68 69 6c 64 72 65 6e  3 @@. ."children
2380: 22 2c 20 22 63 6f 64 65 22 2c 20 22 63 75 72 72  ", "code", "curr
2390: 65 6e 74 22 2c 20 22 64 65 6c 65 74 65 22 2c 20  ent", "delete", 
23a0: 22 65 6e 73 65 6d 62 6c 65 22 2c 0a 20 09 22 65  "ensemble",. ."e
23b0: 76 61 6c 22 2c 20 22 65 78 69 73 74 73 22 2c 20  val", "exists", 
23c0: 22 65 78 70 6f 72 74 22 2c 20 22 66 6f 72 67 65  "export", "forge
23d0: 74 22 2c 20 22 69 6d 70 6f 72 74 22 2c 0a 20 09  t", "import",. .
23e0: 22 69 6e 73 63 6f 70 65 22 2c 20 22 6f 72 69 67  "inscope", "orig
23f0: 69 6e 22 2c 20 22 70 61 72 65 6e 74 22 2c 20 22  in", "parent", "
2400: 71 75 61 6c 69 66 69 65 72 73 22 2c 0a 2d 09 22  qualifiers",.-."
2410: 74 61 69 6c 22 2c 20 22 77 68 69 63 68 22 2c 20  tail", "which", 
2420: 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 0a 2b 09  (char *) NULL.+.
2430: 22 74 61 69 6c 22 2c 20 22 75 6e 6b 6e 6f 77 6e  "tail", "unknown
2440: 22 2c 20 22 77 68 69 63 68 22 2c 20 28 63 68 61  ", "which", (cha
2450: 72 20 2a 29 20 4e 55 4c 4c 0a 20 20 20 20 20 7d  r *) NULL.     }
2460: 3b 0a 20 20 20 20 20 65 6e 75 6d 20 4e 53 53 75  ;.     enum NSSu
2470: 62 43 6d 64 49 64 78 20 7b 0a 20 09 4e 53 43 68  bCmdIdx {. .NSCh
2480: 69 6c 64 72 65 6e 49 64 78 2c 20 4e 53 43 6f 64  ildrenIdx, NSCod
2490: 65 49 64 78 2c 20 4e 53 43 75 72 72 65 6e 74 49  eIdx, NSCurrentI
24a0: 64 78 2c 20 4e 53 44 65 6c 65 74 65 49 64 78 2c  dx, NSDeleteIdx,
24b0: 20 4e 53 45 6e 73 65 6d 62 6c 65 49 64 78 2c 0a   NSEnsembleIdx,.
24c0: 20 09 4e 53 45 76 61 6c 49 64 78 2c 20 4e 53 45   .NSEvalIdx, NSE
24d0: 78 69 73 74 73 49 64 78 2c 20 4e 53 45 78 70 6f  xistsIdx, NSExpo
24e0: 72 74 49 64 78 2c 20 4e 53 46 6f 72 67 65 74 49  rtIdx, NSForgetI
24f0: 64 78 2c 20 4e 53 49 6d 70 6f 72 74 49 64 78 2c  dx, NSImportIdx,
2500: 0a 20 09 4e 53 49 6e 73 63 6f 70 65 49 64 78 2c  . .NSInscopeIdx,
2510: 20 4e 53 4f 72 69 67 69 6e 49 64 78 2c 20 4e 53   NSOriginIdx, NS
2520: 50 61 72 65 6e 74 49 64 78 2c 20 4e 53 51 75 61  ParentIdx, NSQua
2530: 6c 69 66 69 65 72 73 49 64 78 2c 0a 2d 09 4e 53  lifiersIdx,.-.NS
2540: 54 61 69 6c 49 64 78 2c 20 4e 53 57 68 69 63 68  TailIdx, NSWhich
2550: 49 64 78 0a 2b 09 4e 53 54 61 69 6c 49 64 78 2c  Idx.+.NSTailIdx,
2560: 20 4e 53 55 6e 6b 6e 6f 77 6e 49 64 78 2c 20 4e   NSUnknownIdx, N
2570: 53 57 68 69 63 68 49 64 78 0a 20 20 20 20 20 7d  SWhichIdx.     }
2580: 3b 0a 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78  ;.     int index
2590: 2c 20 72 65 73 75 6c 74 3b 0a 20 0a 40 40 20 2d  , result;. .@@ -
25a0: 32 37 32 31 2c 36 20 2b 32 37 33 34 2c 39 20 40  2721,6 +2734,9 @
25b0: 40 0a 20 20 20 20 20 20 20 20 20 63 61 73 65 20  @.         case 
25c0: 4e 53 54 61 69 6c 49 64 78 3a 0a 20 09 20 20 20  NSTailIdx:. .   
25d0: 20 72 65 73 75 6c 74 20 3d 20 4e 61 6d 65 73 70   result = Namesp
25e0: 61 63 65 54 61 69 6c 43 6d 64 28 63 6c 69 65 6e  aceTailCmd(clien
25f0: 74 44 61 74 61 2c 20 69 6e 74 65 72 70 2c 20 6f  tData, interp, o
2600: 62 6a 63 2c 20 6f 62 6a 76 29 3b 0a 20 20 20 20  bjc, objv);.    
2610: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2620: 2b 09 63 61 73 65 20 4e 53 55 6e 6b 6e 6f 77 6e  +.case NSUnknown
2630: 49 64 78 3a 0a 2b 09 20 20 20 20 72 65 73 75 6c  Idx:.+.    resul
2640: 74 20 3d 20 4e 61 6d 65 73 70 61 63 65 55 6e 6b  t = NamespaceUnk
2650: 6e 6f 77 6e 43 6d 64 28 63 6c 69 65 6e 74 44 61  nownCmd(clientDa
2660: 74 61 2c 20 69 6e 74 65 72 70 2c 20 6f 62 6a 63  ta, interp, objc
2670: 2c 20 6f 62 6a 76 29 3b 0a 2b 09 20 20 20 20 62  , objv);.+.    b
2680: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 63  reak;.         c
2690: 61 73 65 20 4e 53 57 68 69 63 68 49 64 78 3a 0a  ase NSWhichIdx:.
26a0: 20 09 20 20 20 20 72 65 73 75 6c 74 20 3d 20 4e   .    result = N
26b0: 61 6d 65 73 70 61 63 65 57 68 69 63 68 43 6d 64  amespaceWhichCmd
26c0: 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e 74  (clientData, int
26d0: 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 29  erp, objc, objv)
26e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 62  ;.             b
26f0: 72 65 61 6b 3b 0a 40 40 20 2d 33 37 38 31 2c 36  reak;.@@ -3781,6
2700: 20 2b 33 37 39 37 2c 39 33 20 40 40 0a 20 2f 2a   +3797,93 @@. /*
2710: 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  *------------
2720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a 2b  ----------.  *.+
2760: 20 2a 20 4e 61 6d 65 73 70 61 63 65 55 6e 6b 6e   * NamespaceUnkn
2770: 6f 77 6e 43 6d 64 20 2d 2d 0a 2b 20 2a 0a 2b 20  ownCmd --.+ *.+ 
2780: 2a 09 49 6e 76 6f 6b 65 64 20 74 6f 20 69 6d 70  *.Invoked to imp
2790: 6c 65 6d 65 6e 74 20 74 68 65 20 22 6e 61 6d 65  lement the "name
27a0: 73 70 61 63 65 20 75 6e 6b 6e 6f 77 6e 22 20 63  space unknown" c
27b0: 6f 6d 6d 61 6e 64 20 28 54 49 50 20 31 38 31 29  ommand (TIP 181)
27c0: 20 74 68 61 74 0a 2b 20 2a 09 73 65 74 73 20 6f   that.+ *.sets o
27d0: 72 20 71 75 65 72 69 65 73 20 61 20 70 65 72 2d  r queries a per-
27e0: 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b 6e 6f 77  namespace unknow
27f0: 6e 20 63 6f 6d 6d 61 6e 64 20 68 61 6e 64 6c 65  n command handle
2800: 72 2e 20 54 68 69 73 20 68 61 6e 64 6c 65 72 0a  r. This handler.
2810: 2b 20 2a 09 69 73 20 63 61 6c 6c 65 64 20 77 68  + *.is called wh
2820: 65 6e 20 63 6f 6d 6d 61 6e 64 20 6c 6f 6f 6b 75  en command looku
2830: 70 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  p in the current
2840: 20 6e 61 6d 65 73 70 61 63 65 20 66 61 69 6c 73   namespace fails
2850: 2e 20 54 68 65 0a 2b 20 2a 09 64 65 66 61 75 6c  . The.+ *.defaul
2860: 74 20 68 61 6e 64 6c 65 72 20 66 6f 72 20 6e 61  t handler for na
2870: 6d 65 73 70 61 63 65 73 20 28 68 61 72 64 2d 63  mespaces (hard-c
2880: 6f 64 65 64 20 69 6e 74 6f 20 54 63 6c 45 76 61  oded into TclEva
2890: 6c 4f 62 6a 76 49 6e 74 65 72 6e 61 6c 29 0a 2b  lObjvInternal).+
28a0: 20 2a 09 73 69 6d 70 6c 79 20 73 65 61 72 63 68   *.simply search
28b0: 65 73 20 74 68 65 20 67 6c 6f 62 61 6c 20 6e 61  es the global na
28c0: 6d 65 73 70 61 63 65 2e 20 54 68 65 20 64 65 66  mespace. The def
28d0: 61 75 6c 74 20 68 61 6e 64 6c 65 72 20 66 6f 72  ault handler for
28e0: 20 74 68 65 0a 2b 20 2a 09 67 6c 6f 62 61 6c 20   the.+ *.global 
28f0: 6e 61 6d 65 73 70 61 63 65 20 63 61 6c 6c 73 20  namespace calls 
2900: 61 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 64 20  a command named 
2910: 22 3a 3a 75 6e 6b 6e 6f 77 6e 22 2e 20 54 68 69  "::unknown". Thi
2920: 73 20 62 65 68 61 76 69 6f 75 72 20 69 73 0a 2b  s behaviour is.+
2930: 20 2a 09 66 75 6c 6c 79 20 62 61 63 6b 77 61 72   *.fully backwar
2940: 64 73 2d 63 6f 6d 70 61 74 69 62 6c 65 20 77 69  ds-compatible wi
2950: 74 68 20 54 63 6c 20 70 72 65 2d 54 49 50 2d 31  th Tcl pre-TIP-1
2960: 38 31 2e 20 48 61 6e 64 6c 65 73 20 74 68 65 20  81. Handles the 
2970: 66 6f 6c 6c 6f 77 69 6e 67 0a 2b 20 2a 09 73 79  following.+ *.sy
2980: 6e 74 61 78 3a 0a 2b 20 2a 0a 2b 20 2a 09 20 20  ntax:.+ *.+ *.  
2990: 20 20 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b 6e    namespace unkn
29a0: 6f 77 6e 20 3f 68 61 6e 64 6c 65 72 3f 0a 2b 20  own ?handler?.+ 
29b0: 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b  *.+ * Results:.+
29c0: 20 2a 09 52 65 74 75 72 6e 73 20 54 43 4c 5f 4f   *.Returns TCL_O
29d0: 4b 20 69 66 20 73 75 63 63 65 73 73 66 75 6c 2c  K if successful,
29e0: 20 61 6e 64 20 54 43 4c 5f 45 52 52 4f 52 20 69   and TCL_ERROR i
29f0: 66 20 61 6e 79 74 68 69 6e 67 20 67 6f 65 73 20  f anything goes 
2a00: 77 72 6f 6e 67 2e 0a 2b 20 2a 0a 2b 20 2a 20 53  wrong..+ *.+ * S
2a10: 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2b 20 2a  ide effects:.+ *
2a20: 09 49 66 20 6e 6f 20 68 61 6e 64 6c 65 72 20 69  .If no handler i
2a30: 73 20 73 70 65 63 69 66 69 65 64 2c 20 72 65 74  s specified, ret
2a40: 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20 69 6e  urns a result in
2a50: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
2a60: 27 73 0a 2b 20 2a 09 72 65 73 75 6c 74 20 6f 62  's.+ *.result ob
2a70: 6a 65 63 74 2c 20 6f 74 68 65 72 77 69 73 65 20  ject, otherwise 
2a80: 69 74 20 73 65 74 73 20 74 68 65 20 75 6e 6b 6e  it sets the unkn
2a90: 6f 77 6e 20 68 61 6e 64 6c 65 72 20 70 6f 69 6e  own handler poin
2aa0: 74 65 72 20 69 6e 20 74 68 65 0a 2b 20 2a 09 63  ter in the.+ *.c
2ab0: 75 72 72 65 6e 74 20 6e 61 6d 65 73 70 61 63 65  urrent namespace
2ac0: 20 74 6f 20 74 68 65 20 73 63 72 69 70 74 20 66   to the script f
2ad0: 72 61 67 6d 65 6e 74 20 70 72 6f 76 69 64 65 64  ragment provided
2ae0: 2e 20 49 66 20 61 6e 79 74 68 69 6e 67 20 67 6f  . If anything go
2af0: 65 73 0a 2b 20 2a 09 77 72 6f 6e 67 2c 20 74 68  es.+ *.wrong, th
2b00: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6e 20 65  e result is an e
2b10: 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0a 2b 20  rror message..+ 
2b20: 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.+ *-----------
2b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f  -----------.+ */
2b70: 0a 2b 73 74 61 74 69 63 20 69 6e 74 0a 2b 4e 61  .+static int.+Na
2b80: 6d 65 73 70 61 63 65 55 6e 6b 6e 6f 77 6e 43 6d  mespaceUnknownCm
2b90: 64 28 64 75 6d 6d 79 2c 20 69 6e 74 65 72 70 2c  d(dummy, interp,
2ba0: 20 6f 62 6a 63 2c 20 6f 62 6a 76 29 0a 2b 20 20   objc, objv).+  
2bb0: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 64 75 6d    ClientData dum
2bc0: 6d 79 3b 09 09 2f 2a 20 4e 6f 74 20 75 73 65 64  my;../* Not used
2bd0: 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 49 6e  . */.+    Tcl_In
2be0: 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09 2f  terp *interp;../
2bf0: 2a 20 43 75 72 72 65 6e 74 20 69 6e 74 65 72 70  * Current interp
2c00: 72 65 74 65 72 2e 20 2a 2f 0a 2b 20 20 20 20 69  reter. */.+    i
2c10: 6e 74 20 6f 62 6a 63 3b 09 09 09 2f 2a 20 4e 75  nt objc;.../* Nu
2c20: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
2c30: 73 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 4f  s. */.+    Tcl_O
2c40: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
2c50: 3b 09 2f 2a 20 41 72 67 75 6d 65 6e 74 20 6f 62  ;./* Argument ob
2c60: 6a 65 63 74 73 2e 20 2a 2f 0a 2b 7b 0a 2b 20 20  jects. */.+{.+  
2c70: 20 20 4e 61 6d 65 73 70 61 63 65 20 2a 63 75 72    Namespace *cur
2c80: 72 4e 73 50 74 72 3b 0a 2b 20 20 20 20 54 63 6c  rNsPtr;.+    Tcl
2c90: 5f 4f 62 6a 20 2a 68 61 6e 64 6c 65 72 50 74 72  _Obj *handlerPtr
2ca0: 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 6f 62 6a  ;.+.+    if (obj
2cb0: 63 20 3e 20 33 29 20 7b 0a 2b 09 54 63 6c 5f 57  c > 3) {.+.Tcl_W
2cc0: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
2cd0: 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 3f 73  rp, 2, objv, "?s
2ce0: 63 72 69 70 74 3f 22 29 3b 0a 2b 20 20 20 20 20  cript?");.+     
2cf0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
2d00: 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20  ROR;.+    }.+.+ 
2d10: 20 20 20 63 75 72 72 4e 73 50 74 72 20 3d 20 28     currNsPtr = (
2d20: 4e 61 6d 65 73 70 61 63 65 20 2a 29 20 54 63 6c  Namespace *) Tcl
2d30: 5f 47 65 74 43 75 72 72 65 6e 74 4e 61 6d 65 73  _GetCurrentNames
2d40: 70 61 63 65 28 69 6e 74 65 72 70 29 3b 0a 2b 0a  pace(interp);.+.
2d50: 2b 20 20 20 20 69 66 20 28 6f 62 6a 63 20 3d 3d  +    if (objc ==
2d60: 20 32 29 20 7b 0a 2b 09 2f 2a 0a 2b 09 20 2a 20   2) {.+./*.+. * 
2d70: 49 6e 74 72 6f 73 70 65 63 74 69 6f 6e 20 2d 20  Introspection - 
2d80: 72 65 74 75 72 6e 20 74 68 65 20 63 75 72 72 65  return the curre
2d90: 6e 74 20 6e 61 6d 65 73 70 61 63 65 20 68 61 6e  nt namespace han
2da0: 64 6c 65 72 2e 0a 2b 09 20 2a 2f 0a 2b 09 20 69  dler..+. */.+. i
2db0: 66 20 28 63 75 72 72 4e 73 50 74 72 2d 3e 75 6e  f (currNsPtr->un
2dc0: 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 74 72 20  knownHandlerPtr 
2dd0: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20  != NULL) {.+.   
2de0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
2df0: 6c 74 28 69 6e 74 65 72 70 2c 20 63 75 72 72 4e  lt(interp, currN
2e00: 73 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e 48 61 6e  sPtr->unknownHan
2e10: 64 6c 65 72 50 74 72 29 3b 0a 2b 09 20 7d 20 65  dlerPtr);.+. } e
2e20: 6c 73 65 20 7b 0a 2b 09 20 20 20 20 20 2f 2a 0a  lse {.+.     /*.
2e30: 2b 09 20 20 20 20 20 20 2a 20 44 65 66 61 75 6c  +.      * Defaul
2e40: 74 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64 6c 65  t unknown handle
2e50: 72 20 66 6f 72 20 61 6e 79 20 6e 73 20 69 73 20  r for any ns is 
2e60: 3a 3a 75 6e 6b 6e 6f 77 6e 2e 20 57 65 20 64 6f  ::unknown. We do
2e70: 6e 27 74 0a 2b 09 20 20 20 20 20 20 2a 20 63 61  n't.+.      * ca
2e80: 63 68 65 20 74 68 69 73 2c 20 61 73 20 69 74 20  che this, as it 
2e90: 69 73 20 71 75 69 63 6b 65 72 20 74 6f 20 74 65  is quicker to te
2ea0: 73 74 20 66 6f 72 20 4e 55 4c 4c 20 69 6e 20 74  st for NULL in t
2eb0: 68 65 20 68 61 72 64 63 6f 64 65 64 0a 2b 09 20  he hardcoded.+. 
2ec0: 20 20 20 20 20 2a 20 64 65 66 61 75 6c 74 20 68       * default h
2ed0: 61 6e 64 6c 65 72 73 20 69 6e 20 54 63 6c 45 76  andlers in TclEv
2ee0: 61 6c 4f 62 6a 76 49 6e 74 65 72 6e 61 6c 2e 0a  alObjvInternal..
2ef0: 2b 09 20 20 20 20 20 20 2a 2f 0a 2b 09 20 20 20  +.      */.+.   
2f00: 20 20 20 68 61 6e 64 6c 65 72 50 74 72 20 3d 20     handlerPtr = 
2f10: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
2f20: 28 22 3a 3a 75 6e 6b 6e 6f 77 6e 22 2c 20 2d 31  ("::unknown", -1
2f30: 29 3b 0a 2b 09 20 20 20 20 20 20 54 63 6c 5f 53  );.+.      Tcl_S
2f40: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
2f50: 72 70 2c 20 68 61 6e 64 6c 65 72 50 74 72 29 3b  rp, handlerPtr);
2f60: 0a 2b 09 20 7d 0a 2b 20 20 20 20 7d 20 65 6c 73  .+. }.+    } els
2f70: 65 20 7b 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 53 65  e {.+./*.+. * Se
2f80: 74 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 20  t the namespace 
2f90: 68 61 6e 64 6c 65 72 2e 0a 2b 09 20 2a 2f 0a 2b  handler..+. */.+
2fa0: 09 20 69 66 20 28 63 75 72 72 4e 73 50 74 72 2d  . if (currNsPtr-
2fb0: 3e 75 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50  >unknownHandlerP
2fc0: 74 72 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09  tr != NULL) {.+.
2fd0: 20 20 20 20 20 2f 2a 20 52 65 6d 6f 76 65 20 6f       /* Remove o
2fe0: 6c 64 20 68 61 6e 64 6c 65 72 20 66 69 72 73 74  ld handler first
2ff0: 2e 20 2a 2f 0a 2b 09 20 20 20 20 20 54 63 6c 5f  . */.+.     Tcl_
3000: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 63 75 72  DecrRefCount(cur
3010: 72 4e 73 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e 48  rNsPtr->unknownH
3020: 61 6e 64 6c 65 72 50 74 72 29 3b 0a 2b 09 20 7d  andlerPtr);.+. }
3030: 0a 2b 09 20 2f 2a 0a 2b 09 20 20 2a 20 49 66 20  .+. /*.+.  * If 
3040: 74 68 65 20 65 6d 70 74 79 20 73 74 72 69 6e 67  the empty string
3050: 20 69 73 20 70 61 73 73 65 64 2c 20 74 68 65 6e   is passed, then
3060: 20 73 69 6d 70 6c 79 20 72 65 76 65 72 74 20 74   simply revert t
3070: 6f 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2b 09  o the default.+.
3080: 20 20 2a 20 68 61 6e 64 6c 65 72 2e 0a 2b 09 20    * handler..+. 
3090: 20 2a 2f 0a 2b 09 20 69 66 20 28 54 63 6c 5f 47   */.+. if (Tcl_G
30a0: 65 74 43 68 61 72 4c 65 6e 67 74 68 28 6f 62 6a  etCharLength(obj
30b0: 76 5b 32 5d 29 20 3d 3d 20 30 29 20 7b 0a 2b 09  v[2]) == 0) {.+.
30c0: 20 20 20 20 20 63 75 72 72 4e 73 50 74 72 2d 3e       currNsPtr->
30d0: 75 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 74  unknownHandlerPt
30e0: 72 20 3d 20 4e 55 4c 4c 3b 0a 2b 09 20 7d 20 65  r = NULL;.+. } e
30f0: 6c 73 65 20 7b 0a 2b 09 20 20 20 20 20 2f 2a 20  lse {.+.     /* 
3100: 0a 2b 09 20 20 20 20 20 20 2a 20 49 6e 63 72 65  .+.      * Incre
3110: 6d 65 6e 74 20 72 65 66 20 63 6f 75 6e 74 20 61  ment ref count a
3120: 6e 64 20 73 74 6f 72 65 2e 20 54 68 65 20 72 65  nd store. The re
3130: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 20 69 73  ference count is
3140: 20 0a 2b 09 20 20 20 20 20 20 2a 20 64 65 63 72   .+.      * decr
3150: 65 6d 65 6e 74 65 64 20 65 69 74 68 65 72 20 69  emented either i
3160: 6e 20 74 68 65 20 63 6f 64 65 20 61 62 6f 76 65  n the code above
3170: 2c 20 6f 72 20 77 68 65 6e 20 74 68 65 20 6e 61  , or when the na
3180: 6d 65 73 70 61 63 65 20 0a 2b 09 20 20 20 20 20  mespace .+.     
3190: 20 2a 20 69 73 20 64 65 6c 65 74 65 64 2e 0a 2b   * is deleted..+
31a0: 09 20 20 20 20 20 20 2a 2f 0a 2b 09 20 20 20 20  .      */.+.    
31b0: 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e   Tcl_IncrRefCoun
31c0: 74 28 6f 62 6a 76 5b 32 5d 29 3b 0a 2b 09 20 20  t(objv[2]);.+.  
31d0: 20 20 20 63 75 72 72 4e 73 50 74 72 2d 3e 75 6e     currNsPtr->un
31e0: 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 74 72 20  knownHandlerPtr 
31f0: 3d 20 6f 62 6a 76 5b 32 5d 3b 0a 2b 09 20 20 20  = objv[2];.+.   
3200: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
3210: 6c 74 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  lt(interp, objv[
3220: 32 5d 29 3b 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a  2]);.+.}.+    }.
3230: 2b 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  +    return TCL_
3240: 4f 4b 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b 20  OK;.+}.+..+/*.+ 
3250: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
3260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3290: 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 20 20 2a 20  -------.+ *.  * 
32a0: 4e 61 6d 65 73 70 61 63 65 54 61 69 6c 43 6d 64  NamespaceTailCmd
32b0: 20 2d 2d 0a 20 20 2a 0a 20 20 2a 09 49 6e 76 6f   --.  *.  *.Invo
32c0: 6b 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  ked to implement
32d0: 20 74 68 65 20 22 6e 61 6d 65 73 70 61 63 65 20   the "namespace 
32e0: 74 61 69 6c 22 20 63 6f 6d 6d 61 6e 64 20 74 68  tail" command th
32f0: 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 0a 49  at returns the.I
3300: 6e 64 65 78 3a 20 74 65 73 74 73 2f 6e 61 6d 65  ndex: tests/name
3310: 73 70 61 63 65 2e 74 65 73 74 0a 3d 3d 3d 3d 3d  space.test.=====
3320: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3330: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3340: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3350: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52  ==============.R
3360: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f  CS file: /cvsroo
3370: 74 2f 74 63 6c 2f 74 63 6c 2f 74 65 73 74 73 2f  t/tcl/tcl/tests/
3380: 6e 61 6d 65 73 70 61 63 65 2e 74 65 73 74 2c 76  namespace.test,v
3390: 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69  .retrieving revi
33a0: 73 69 6f 6e 20 31 2e 32 34 0a 64 69 66 66 20 2d  sion 1.24.diff -
33b0: 75 20 2d 72 31 2e 32 34 20 6e 61 6d 65 73 70 61  u -r1.24 namespa
33c0: 63 65 2e 74 65 73 74 0a 2d 2d 2d 20 74 65 73 74  ce.test.--- test
33d0: 73 2f 6e 61 6d 65 73 70 61 63 65 2e 74 65 73 74  s/namespace.test
33e0: 09 32 34 20 4d 61 72 20 32 30 30 34 20 32 31 3a  .24 Mar 2004 21:
33f0: 35 34 3a 33 32 20 2d 30 30 30 30 09 31 2e 32 34  54:32 -0000.1.24
3400: 0a 2b 2b 2b 20 74 65 73 74 73 2f 6e 61 6d 65 73  .+++ tests/names
3410: 70 61 63 65 2e 74 65 73 74 09 32 31 20 4d 61 79  pace.test.21 May
3420: 20 32 30 30 34 20 31 39 3a 31 39 3a 35 36 20 2d   2004 19:19:56 -
3430: 30 30 30 30 0a 40 40 20 2d 36 34 31 2c 37 20 2b  0000.@@ -641,7 +
3440: 36 34 31 2c 37 20 40 40 0a 20 7d 20 7b 31 20 7b  641,7 @@. } {1 {
3450: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
3460: 6f 75 6c 64 20 62 65 20 22 6e 61 6d 65 73 70 61  ould be "namespa
3470: 63 65 20 73 75 62 63 6f 6d 6d 61 6e 64 20 3f 61  ce subcommand ?a
3480: 72 67 20 2e 2e 2e 3f 22 7d 7d 0a 20 74 65 73 74  rg ...?"}}. test
3490: 20 6e 61 6d 65 73 70 61 63 65 2d 32 30 2e 32 20   namespace-20.2 
34a0: 7b 54 63 6c 5f 4e 61 6d 65 73 70 61 63 65 4f 62  {Tcl_NamespaceOb
34b0: 6a 43 6d 64 2c 20 62 61 64 20 73 75 62 63 6f 6d  jCmd, bad subcom
34c0: 6d 61 6e 64 7d 20 7b 0a 20 20 20 20 20 6c 69 73  mand} {.     lis
34d0: 74 20 5b 63 61 74 63 68 20 7b 6e 61 6d 65 73 70  t [catch {namesp
34e0: 61 63 65 20 77 6f 6d 62 61 74 20 7b 7d 7d 20 6d  ace wombat {}} m
34f0: 73 67 5d 20 24 6d 73 67 0a 2d 7d 20 7b 31 20 7b  sg] $msg.-} {1 {
3500: 62 61 64 20 6f 70 74 69 6f 6e 20 22 77 6f 6d 62  bad option "womb
3510: 61 74 22 3a 20 6d 75 73 74 20 62 65 20 63 68 69  at": must be chi
3520: 6c 64 72 65 6e 2c 20 63 6f 64 65 2c 20 63 75 72  ldren, code, cur
3530: 72 65 6e 74 2c 20 64 65 6c 65 74 65 2c 20 65 6e  rent, delete, en
3540: 73 65 6d 62 6c 65 2c 20 65 76 61 6c 2c 20 65 78  semble, eval, ex
3550: 69 73 74 73 2c 20 65 78 70 6f 72 74 2c 20 66 6f  ists, export, fo
3560: 72 67 65 74 2c 20 69 6d 70 6f 72 74 2c 20 69 6e  rget, import, in
3570: 73 63 6f 70 65 2c 20 6f 72 69 67 69 6e 2c 20 70  scope, origin, p
3580: 61 72 65 6e 74 2c 20 71 75 61 6c 69 66 69 65 72  arent, qualifier
3590: 73 2c 20 74 61 69 6c 2c 20 6f 72 20 77 68 69 63  s, tail, or whic
35a0: 68 7d 7d 0a 2b 7d 20 7b 31 20 7b 62 61 64 20 6f  h}}.+} {1 {bad o
35b0: 70 74 69 6f 6e 20 22 77 6f 6d 62 61 74 22 3a 20  ption "wombat": 
35c0: 6d 75 73 74 20 62 65 20 63 68 69 6c 64 72 65 6e  must be children
35d0: 2c 20 63 6f 64 65 2c 20 63 75 72 72 65 6e 74 2c  , code, current,
35e0: 20 64 65 6c 65 74 65 2c 20 65 6e 73 65 6d 62 6c   delete, ensembl
35f0: 65 2c 20 65 76 61 6c 2c 20 65 78 69 73 74 73 2c  e, eval, exists,
3600: 20 65 78 70 6f 72 74 2c 20 66 6f 72 67 65 74 2c   export, forget,
3610: 20 69 6d 70 6f 72 74 2c 20 69 6e 73 63 6f 70 65   import, inscope
3620: 2c 20 6f 72 69 67 69 6e 2c 20 70 61 72 65 6e 74  , origin, parent
3630: 2c 20 71 75 61 6c 69 66 69 65 72 73 2c 20 74 61  , qualifiers, ta
3640: 69 6c 2c 20 75 6e 6b 6e 6f 77 6e 2c 20 6f 72 20  il, unknown, or 
3650: 77 68 69 63 68 7d 7d 0a 20 74 65 73 74 20 6e 61  which}}. test na
3660: 6d 65 73 70 61 63 65 2d 32 30 2e 33 20 7b 54 63  mespace-20.3 {Tc
3670: 6c 5f 4e 61 6d 65 73 70 61 63 65 4f 62 6a 43 6d  l_NamespaceObjCm
3680: 64 2c 20 61 62 62 72 65 76 69 61 74 69 6f 6e 73  d, abbreviations
3690: 20 61 72 65 20 6f 6b 61 79 7d 20 7b 0a 20 20 20   are okay} {.   
36a0: 20 20 6e 61 6d 65 73 70 61 63 65 20 63 68 20 3a    namespace ch :
36b0: 3a 20 74 65 73 74 5f 6e 73 5f 2a 0a 20 7d 20 7b  : test_ns_*. } {
36c0: 7d 0a 40 40 20 2d 37 34 38 2c 37 20 2b 37 34 38  }.@@ -748,7 +748
36d0: 2c 37 20 40 40 0a 20 7d 20 7b 31 20 7b 77 72 6f  ,7 @@. } {1 {wro
36e0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
36f0: 64 20 62 65 20 22 6e 61 6d 65 73 70 61 63 65 20  d be "namespace 
3700: 65 76 61 6c 20 6e 61 6d 65 20 61 72 67 20 3f 61  eval name arg ?a
3710: 72 67 2e 2e 2e 3f 22 7d 7d 0a 20 74 65 73 74 20  rg...?"}}. test 
3720: 6e 61 6d 65 73 70 61 63 65 2d 32 35 2e 32 20 7b  namespace-25.2 {
3730: 4e 61 6d 65 73 70 61 63 65 45 76 61 6c 43 6d 64  NamespaceEvalCmd
3740: 2c 20 62 61 64 20 61 72 67 73 7d 20 7b 0a 20 20  , bad args} {.  
3750: 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b     list [catch {
3760: 6e 61 6d 65 73 70 61 63 65 20 74 65 73 74 5f 6e  namespace test_n
3770: 73 5f 31 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2d  s_1} msg] $msg.-
3780: 7d 20 7b 31 20 7b 62 61 64 20 6f 70 74 69 6f 6e  } {1 {bad option
3790: 20 22 74 65 73 74 5f 6e 73 5f 31 22 3a 20 6d 75   "test_ns_1": mu
37a0: 73 74 20 62 65 20 63 68 69 6c 64 72 65 6e 2c 20  st be children, 
37b0: 63 6f 64 65 2c 20 63 75 72 72 65 6e 74 2c 20 64  code, current, d
37c0: 65 6c 65 74 65 2c 20 65 6e 73 65 6d 62 6c 65 2c  elete, ensemble,
37d0: 20 65 76 61 6c 2c 20 65 78 69 73 74 73 2c 20 65   eval, exists, e
37e0: 78 70 6f 72 74 2c 20 66 6f 72 67 65 74 2c 20 69  xport, forget, i
37f0: 6d 70 6f 72 74 2c 20 69 6e 73 63 6f 70 65 2c 20  mport, inscope, 
3800: 6f 72 69 67 69 6e 2c 20 70 61 72 65 6e 74 2c 20  origin, parent, 
3810: 71 75 61 6c 69 66 69 65 72 73 2c 20 74 61 69 6c  qualifiers, tail
3820: 2c 20 6f 72 20 77 68 69 63 68 7d 7d 0a 2b 7d 20  , or which}}.+} 
3830: 7b 31 20 7b 62 61 64 20 6f 70 74 69 6f 6e 20 22  {1 {bad option "
3840: 74 65 73 74 5f 6e 73 5f 31 22 3a 20 6d 75 73 74  test_ns_1": must
3850: 20 62 65 20 63 68 69 6c 64 72 65 6e 2c 20 63 6f   be children, co
3860: 64 65 2c 20 63 75 72 72 65 6e 74 2c 20 64 65 6c  de, current, del
3870: 65 74 65 2c 20 65 6e 73 65 6d 62 6c 65 2c 20 65  ete, ensemble, e
3880: 76 61 6c 2c 20 65 78 69 73 74 73 2c 20 65 78 70  val, exists, exp
3890: 6f 72 74 2c 20 66 6f 72 67 65 74 2c 20 69 6d 70  ort, forget, imp
38a0: 6f 72 74 2c 20 69 6e 73 63 6f 70 65 2c 20 6f 72  ort, inscope, or
38b0: 69 67 69 6e 2c 20 70 61 72 65 6e 74 2c 20 71 75  igin, parent, qu
38c0: 61 6c 69 66 69 65 72 73 2c 20 74 61 69 6c 2c 20  alifiers, tail, 
38d0: 75 6e 6b 6e 6f 77 6e 2c 20 6f 72 20 77 68 69 63  unknown, or whic
38e0: 68 7d 7d 0a 20 63 61 74 63 68 20 7b 75 6e 73 65  h}}. catch {unse
38f0: 74 20 76 7d 0a 20 74 65 73 74 20 6e 61 6d 65 73  t v}. test names
3900: 70 61 63 65 2d 32 35 2e 33 20 7b 4e 61 6d 65 73  pace-25.3 {Names
3910: 70 61 63 65 45 76 61 6c 43 6d 64 2c 20 6e 65 77  paceEvalCmd, new
3920: 20 6e 61 6d 65 73 70 61 63 65 7d 20 7b 0a 20 20   namespace} {.  
3930: 20 20 20 73 65 74 20 76 20 31 32 33 0a 40 40 20     set v 123.@@ 
3940: 2d 31 36 33 34 2c 36 20 2b 31 36 33 34 2c 37 37  -1634,6 +1634,77
3950: 20 40 40 0a 20 20 20 20 20 77 68 69 6c 65 20 70   @@.     while p
3960: 61 72 73 69 6e 67 20 72 65 73 75 6c 74 20 6f 66  arsing result of
3970: 20 65 6e 73 65 6d 62 6c 65 20 75 6e 6b 6e 6f 77   ensemble unknow
3980: 6e 20 73 75 62 63 6f 6d 6d 61 6e 64 20 68 61 6e  n subcommand han
3990: 64 6c 65 72 0a 20 20 20 20 20 69 6e 76 6f 6b 65  dler.     invoke
39a0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 20 22  d from within. "
39b0: 66 6f 6f 20 62 61 72 22 7d 7d 0a 2b 23 20 54 49  foo bar"}}.+# TI
39c0: 50 20 31 38 31 20 2d 20 6e 61 6d 65 73 70 61 63  P 181 - namespac
39d0: 65 20 75 6e 6b 6e 6f 77 6e 20 74 65 73 74 73 0a  e unknown tests.
39e0: 2b 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d  +test namespace-
39f0: 34 38 2e 31 20 7b 75 6e 6b 6e 6f 77 6e 3a 20 64  48.1 {unknown: d
3a00: 65 66 61 75 6c 74 20 68 61 6e 64 6c 65 72 20 3a  efault handler :
3a10: 3a 75 6e 6b 6e 6f 77 6e 7d 20 7b 0a 2b 20 20 20  :unknown} {.+   
3a20: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6e 61 6d   set result [nam
3a30: 65 73 70 61 63 65 20 65 76 61 6c 20 66 6f 6f 62  espace eval foob
3a40: 61 72 20 7b 20 6e 61 6d 65 73 70 61 63 65 20 75  ar { namespace u
3a50: 6e 6b 6e 6f 77 6e 20 7d 5d 0a 2b 20 20 20 20 6c  nknown }].+    l
3a60: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6e  append result [n
3a70: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a  amespace eval ::
3a80: 20 7b 20 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b   { namespace unk
3a90: 6e 6f 77 6e 20 7d 5d 0a 2b 20 20 20 20 6e 61 6d  nown }].+    nam
3aa0: 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 66 6f  espace delete fo
3ab0: 6f 62 61 72 0a 2b 20 20 20 20 73 65 74 20 72 65  obar.+    set re
3ac0: 73 75 6c 74 0a 2b 7d 20 7b 3a 3a 75 6e 6b 6e 6f  sult.+} {::unkno
3ad0: 77 6e 20 3a 3a 75 6e 6b 6e 6f 77 6e 7d 0a 2b 74  wn ::unknown}.+t
3ae0: 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 38  est namespace-48
3af0: 2e 32 20 7b 75 6e 6b 6e 6f 77 6e 3a 20 64 65 66  .2 {unknown: def
3b00: 61 75 6c 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  ault resolution 
3b10: 67 6c 6f 62 61 6c 7d 20 7b 0a 2b 20 20 20 20 70  global} {.+    p
3b20: 72 6f 63 20 3a 3a 66 6f 6f 20 7b 7d 20 7b 20 72  roc ::foo {} { r
3b30: 65 74 75 72 6e 20 22 47 4c 4f 42 41 4c 22 20 7d  eturn "GLOBAL" }
3b40: 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  .+    namespace 
3b50: 65 76 61 6c 20 3a 3a 62 61 72 20 7b 20 70 72 6f  eval ::bar { pro
3b60: 63 20 66 6f 6f 20 7b 7d 20 7b 20 72 65 74 75 72  c foo {} { retur
3b70: 6e 20 22 4e 41 4d 45 53 50 41 43 45 22 20 7d 20  n "NAMESPACE" } 
3b80: 7d 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65  }.+    namespace
3b90: 20 65 76 61 6c 20 3a 3a 62 61 72 3a 3a 6a 69 6d   eval ::bar::jim
3ba0: 20 7b 20 70 72 6f 63 20 74 65 73 74 20 7b 7d 20   { proc test {} 
3bb0: 7b 20 66 6f 6f 20 7d 20 7d 0a 2b 20 20 20 20 73  { foo } }.+    s
3bc0: 65 74 20 72 65 73 75 6c 74 20 5b 3a 3a 62 61 72  et result [::bar
3bd0: 3a 3a 6a 69 6d 3a 3a 74 65 73 74 5d 0a 2b 20 20  ::jim::test].+  
3be0: 20 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65    namespace dele
3bf0: 74 65 20 3a 3a 62 61 72 0a 2b 20 20 20 20 72 65  te ::bar.+    re
3c00: 6e 61 6d 65 20 3a 3a 66 6f 6f 20 7b 7d 0a 2b 20  name ::foo {}.+ 
3c10: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 2b 7d     set result.+}
3c20: 20 7b 47 4c 4f 42 41 4c 7d 0a 2b 74 65 73 74 20   {GLOBAL}.+test 
3c30: 6e 61 6d 65 73 70 61 63 65 2d 34 38 2e 33 20 7b  namespace-48.3 {
3c40: 75 6e 6b 6e 6f 77 6e 3a 20 64 65 66 61 75 6c 74  unknown: default
3c50: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 6c 6f 63 61   resolution loca
3c60: 6c 7d 20 7b 0a 2b 20 20 20 20 70 72 6f 63 20 3a  l} {.+    proc :
3c70: 3a 66 6f 6f 20 7b 7d 20 7b 20 72 65 74 75 72 6e  :foo {} { return
3c80: 20 22 47 4c 4f 42 41 4c 22 20 7d 0a 2b 20 20 20   "GLOBAL" }.+   
3c90: 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20   namespace eval 
3ca0: 3a 3a 62 61 72 20 7b 0a 2b 09 70 72 6f 63 20 66  ::bar {.+.proc f
3cb0: 6f 6f 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 22  oo {} { return "
3cc0: 4e 41 4d 45 53 50 41 43 45 22 20 7d 0a 2b 09 70  NAMESPACE" }.+.p
3cd0: 72 6f 63 20 74 65 73 74 20 7b 7d 20 7b 20 66 6f  roc test {} { fo
3ce0: 6f 20 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20  o }.+    }.+    
3cf0: 73 65 74 20 72 65 73 75 6c 74 20 5b 3a 3a 62 61  set result [::ba
3d00: 72 3a 3a 74 65 73 74 5d 0a 2b 20 20 20 20 6e 61  r::test].+    na
3d10: 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 3a  mespace delete :
3d20: 3a 62 61 72 0a 2b 20 20 20 20 72 65 6e 61 6d 65  :bar.+    rename
3d30: 20 3a 3a 66 6f 6f 20 7b 7d 0a 2b 20 20 20 20 73   ::foo {}.+    s
3d40: 65 74 20 72 65 73 75 6c 74 0a 2b 7d 20 7b 4e 41  et result.+} {NA
3d50: 4d 45 53 50 41 43 45 7d 0a 2b 74 65 73 74 20 6e  MESPACE}.+test n
3d60: 61 6d 65 73 70 61 63 65 2d 34 38 2e 34 20 7b 75  amespace-48.4 {u
3d70: 6e 6b 6e 6f 77 6e 3a 20 73 65 74 20 68 61 6e 64  nknown: set hand
3d80: 6c 65 72 7d 20 7b 0a 2b 20 20 20 20 6e 61 6d 65  ler} {.+    name
3d90: 73 70 61 63 65 20 65 76 61 6c 20 66 6f 6f 20 7b  space eval foo {
3da0: 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b  .+.namespace unk
3db0: 6e 6f 77 6e 20 5b 6c 69 73 74 20 64 69 73 70 61  nown [list dispa
3dc0: 74 63 68 5d 0a 2b 09 70 72 6f 63 20 64 69 73 70  tch].+.proc disp
3dd0: 61 74 63 68 20 7b 61 72 67 73 7d 20 7b 20 72 65  atch {args} { re
3de0: 74 75 72 6e 20 24 61 72 67 73 20 7d 0a 2b 09 70  turn $args }.+.p
3df0: 72 6f 63 20 74 65 73 74 20 7b 7d 20 7b 0a 2b 09  roc test {} {.+.
3e00: 20 20 20 20 55 6e 6b 6e 6f 77 6e 43 6d 64 20 61      UnknownCmd a
3e10: 20 62 20 63 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a   b c.+.}.+    }.
3e20: 2b 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20  +    set result 
3e30: 5b 66 6f 6f 3a 3a 74 65 73 74 5d 0a 2b 20 20 20  [foo::test].+   
3e40: 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74   namespace delet
3e50: 65 20 66 6f 6f 0a 2b 20 20 20 20 73 65 74 20 72  e foo.+    set r
3e60: 65 73 75 6c 74 0a 2b 7d 20 7b 55 6e 6b 6e 6f 77  esult.+} {Unknow
3e70: 6e 43 6d 64 20 61 20 62 20 63 7d 0a 2b 74 65 73  nCmd a b c}.+tes
3e80: 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 38 2e 35  t namespace-48.5
3e90: 20 7b 75 6e 6b 6e 6f 77 6e 3a 20 73 65 61 72 63   {unknown: searc
3ea0: 68 20 70 61 74 68 20 62 65 66 6f 72 65 20 75 6e  h path before un
3eb0: 6b 6e 6f 77 6e 20 69 73 20 75 6e 61 6c 74 65 72  known is unalter
3ec0: 65 64 7d 20 7b 0a 2b 20 20 20 20 70 72 6f 63 20  ed} {.+    proc 
3ed0: 3a 3a 74 65 73 74 32 20 7b 61 72 67 73 7d 20 7b  ::test2 {args} {
3ee0: 20 72 65 74 75 72 6e 20 22 54 45 53 54 32 3a 20   return "TEST2: 
3ef0: 24 61 72 67 73 22 20 7d 0a 2b 20 20 20 20 6e 61  $args" }.+    na
3f00: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 66 6f 6f  mespace eval foo
3f10: 20 7b 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 75   {.+.namespace u
3f20: 6e 6b 6e 6f 77 6e 20 5b 6c 69 73 74 20 64 69 73  nknown [list dis
3f30: 70 61 74 63 68 5d 0a 2b 09 70 72 6f 63 20 64 69  patch].+.proc di
3f40: 73 70 61 74 63 68 20 7b 61 72 67 73 7d 20 7b 20  spatch {args} { 
3f50: 72 65 74 75 72 6e 20 22 55 4e 4b 4e 4f 57 4e 3a  return "UNKNOWN:
3f60: 20 24 61 72 67 73 22 20 7d 0a 2b 09 70 72 6f 63   $args" }.+.proc
3f70: 20 74 65 73 74 31 20 7b 61 72 67 73 7d 20 7b 20   test1 {args} { 
3f80: 72 65 74 75 72 6e 20 22 54 45 53 54 31 3a 20 24  return "TEST1: $
3f90: 61 72 67 73 22 20 7d 0a 2b 09 70 72 6f 63 20 74  args" }.+.proc t
3fa0: 65 73 74 20 7b 7d 20 7b 0a 2b 09 20 20 20 20 73  est {} {.+.    s
3fb0: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20  et result [list 
3fc0: 5b 74 65 73 74 31 20 61 20 62 20 63 5d 5d 0a 2b  [test1 a b c]].+
3fd0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
3fe0: 75 6c 74 20 5b 74 65 73 74 32 20 61 20 62 20 63  ult [test2 a b c
3ff0: 5d 0a 2b 09 20 20 20 20 6c 61 70 70 65 6e 64 20  ].+.    lappend 
4000: 72 65 73 75 6c 74 20 5b 74 65 73 74 33 20 61 20  result [test3 a 
4010: 62 20 63 5d 0a 2b 09 20 20 20 20 72 65 74 75 72  b c].+.    retur
4020: 6e 20 24 72 65 73 75 6c 74 0a 2b 09 7d 0a 2b 20  n $result.+.}.+ 
4030: 20 20 20 7d 0a 2b 20 20 20 20 73 65 74 20 72 65     }.+    set re
4040: 73 75 6c 74 20 5b 66 6f 6f 3a 3a 74 65 73 74 5d  sult [foo::test]
4050: 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  .+    namespace 
4060: 64 65 6c 65 74 65 20 66 6f 6f 0a 2b 20 20 20 20  delete foo.+    
4070: 72 65 6e 61 6d 65 20 3a 3a 74 65 73 74 32 20 7b  rename ::test2 {
4080: 7d 0a 2b 20 20 20 20 73 65 74 20 72 65 73 75 6c  }.+    set resul
4090: 74 0a 2b 7d 20 7b 7b 54 45 53 54 31 3a 20 61 20  t.+} {{TEST1: a 
40a0: 62 20 63 7d 20 7b 54 45 53 54 32 3a 20 61 20 62  b c} {TEST2: a b
40b0: 20 63 7d 20 7b 55 4e 4b 4e 4f 57 4e 3a 20 74 65   c} {UNKNOWN: te
40c0: 73 74 33 20 61 20 62 20 63 7d 7d 0a 2b 74 65 73  st3 a b c}}.+tes
40d0: 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 38 2e 36  t namespace-48.6
40e0: 20 7b 75 6e 6b 6e 6f 77 6e 3a 20 64 65 6c 65 74   {unknown: delet
40f0: 69 6e 67 20 68 61 6e 64 6c 65 72 20 72 65 73 74  ing handler rest
4100: 6f 72 65 73 20 64 65 66 61 75 6c 74 7d 20 7b 0a  ores default} {.
4110: 2b 20 20 20 20 72 65 6e 61 6d 65 20 3a 3a 75 6e  +    rename ::un
4120: 6b 6e 6f 77 6e 20 3a 3a 5f 75 6e 6b 6e 6f 77 6e  known ::_unknown
4130: 5f 6f 72 69 67 0a 2b 20 20 20 20 70 72 6f 63 20  _orig.+    proc 
4140: 3a 3a 75 6e 6b 6e 6f 77 6e 20 7b 61 72 67 73 7d  ::unknown {args}
4150: 20 7b 20 72 65 74 75 72 6e 20 22 44 45 46 41 55   { return "DEFAU
4160: 4c 54 3a 20 24 61 72 67 73 22 20 7d 0a 2b 20 20  LT: $args" }.+  
4170: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c    namespace eval
4180: 20 66 6f 6f 20 7b 0a 2b 09 6e 61 6d 65 73 70 61   foo {.+.namespa
4190: 63 65 20 75 6e 6b 6e 6f 77 6e 20 64 75 6d 6d 79  ce unknown dummy
41a0: 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b  .+.namespace unk
41b0: 6e 6f 77 6e 20 7b 7d 0a 2b 20 20 20 20 7d 0a 2b  nown {}.+    }.+
41c0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
41d0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 66  namespace eval f
41e0: 6f 6f 20 7b 20 64 75 6d 6d 79 20 61 20 62 20 63  oo { dummy a b c
41f0: 20 7d 5d 0a 2b 20 20 20 20 72 65 6e 61 6d 65 20   }].+    rename 
4200: 3a 3a 75 6e 6b 6e 6f 77 6e 20 7b 7d 0a 2b 20 20  ::unknown {}.+  
4210: 20 20 72 65 6e 61 6d 65 20 3a 3a 5f 75 6e 6b 6e    rename ::_unkn
4220: 6f 77 6e 5f 6f 72 69 67 20 3a 3a 75 6e 6b 6e 6f  own_orig ::unkno
4230: 77 6e 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63  wn.+    namespac
4240: 65 20 64 65 6c 65 74 65 20 66 6f 6f 0a 2b 20 20  e delete foo.+  
4250: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 2b 7d 20    set result.+} 
4260: 7b 44 45 46 41 55 4c 54 3a 20 64 75 6d 6d 79 20  {DEFAULT: dummy 
4270: 61 20 62 20 63 7d 0a 2b 0a 20 0a 20 23 20 63 6c  a b c}.+. . # cl
4280: 65 61 6e 75 70 0a 20 63 61 74 63 68 20 7b 72 65  eanup. catch {re
4290: 6e 61 6d 65 20 63 6d 64 31 20 7b 7d 7d 0a        name cmd1 {}}.