Tcl Source Code

Hex Artifact Content
Login

Artifact 8c169837c7df3656ae8692df21759db9f826536f:

Attachment "tip283-1.patch" to ticket [1577282fff] added by msofer 2006-11-02 03:40:28.
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 32 31  ng revision 1.21
00a0: 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 32 31 20  .diff -u -r1.21 
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 36 20 41 75 67 20 32 30 30 36 20 31 33 3a 30  26 Aug 2006 13:0
00e0: 30 3a 33 38 20 2d 30 30 30 30 09 31 2e 32 31 0a  0:38 -0000.1.21.
00f0: 2b 2b 2b 20 64 6f 63 2f 6e 61 6d 65 73 70 61 63  +++ doc/namespac
0100: 65 2e 6e 09 31 20 4e 6f 76 20 32 30 30 36 20 32  e.n.1 Nov 2006 2
0110: 30 3a 32 36 3a 33 32 20 2d 30 30 30 30 0a 40 40  0:26:32 -0000.@@
0120: 20 2d 36 37 39 2c 37 20 2b 36 37 39 2c 38 20 40   -679,7 +679,8 @
0130: 40 0a 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  @. the result of
0140: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2e 20 20 4e   the command.  N
0150: 6f 74 65 20 74 68 61 74 20 69 74 20 69 73 20 6c  ote that it is l
0160: 65 67 61 6c 20 74 6f 20 6d 61 6b 65 20 74 68 65  egal to make the
0170: 20 74 61 72 67 65 74 0a 20 6f 66 20 61 6e 20 65   target. of an e
0180: 6e 73 65 6d 62 6c 65 20 72 65 77 72 69 74 65 20  nsemble rewrite 
0190: 62 65 20 61 6e 6f 74 68 65 72 20 28 6f 72 20 65  be another (or e
01a0: 76 65 6e 20 74 68 65 20 73 61 6d 65 29 20 65 6e  ven the same) en
01b0: 73 65 6d 62 6c 65 0a 20 63 6f 6d 6d 61 6e 64 2e  semble. command.
01c0: 20 20 54 68 65 20 65 6e 73 65 6d 62 6c 65 20 63    The ensemble c
01d0: 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 6e 6f 74 20  ommand will not 
01e0: 62 65 20 76 69 73 69 62 6c 65 20 74 68 72 6f 75  be visible throu
01f0: 67 68 20 74 68 65 20 75 73 65 20 6f 66 0a 2d 74  gh the use of.-t
0200: 68 65 20 5c 66 42 75 70 6c 65 76 65 6c 5c 66 52  he \fBuplevel\fR
0210: 20 6f 72 20 5c 66 42 69 6e 66 6f 20 6c 65 76 65   or \fBinfo leve
0220: 6c 5c 66 52 20 63 6f 6d 6d 61 6e 64 73 2e 0a 2b  l\fR commands..+
0230: 74 68 65 20 5c 66 42 75 70 6c 65 76 65 6c 5c 66  the \fBuplevel\f
0240: 52 20 6f 72 20 5c 66 42 69 6e 66 6f 20 6c 65 76  R or \fBinfo lev
0250: 65 6c 5c 66 52 20 63 6f 6d 6d 61 6e 64 73 2c 20  el\fR commands, 
0260: 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74 69  with the excepti
0270: 6f 6e 20 6f 66 0a 2b 5c 66 42 69 6e 66 6f 20 6c  on of.+\fBinfo l
0280: 65 76 65 6c 20 30 5c 66 52 2e 0a 20 2e 53 53 20  evel 0\fR.. .SS 
0290: 22 45 4e 53 45 4d 42 4c 45 20 4f 50 54 49 4f 4e  "ENSEMBLE OPTION
02a0: 53 22 0a 20 2e 50 50 0a 20 54 68 65 20 66 6f 6c  S". .PP. The fol
02b0: 6c 6f 77 69 6e 67 20 6f 70 74 69 6f 6e 73 2c 20  lowing options, 
02c0: 73 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 65  supported by the
02d0: 20 5c 66 42 6e 61 6d 65 73 70 61 63 65 20 65 6e   \fBnamespace en
02e0: 73 65 6d 62 6c 65 0a 40 40 20 2d 36 38 37 2c 31  semble.@@ -687,1
02f0: 33 20 2b 36 38 38 2c 31 36 20 40 40 0a 20 61 6e  3 +688,16 @@. an
0300: 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6d 6d 61 6e   ensemble comman
0310: 64 20 62 65 68 61 76 65 73 3a 0a 20 2e 54 50 0a  d behaves:. .TP.
0320: 20 5c 66 42 5c 2d 6d 61 70 5c 66 52 0a 2d 57 68   \fB\-map\fR.-Wh
0330: 65 6e 20 6e 6f 6e 2d 65 6d 70 74 79 2c 20 74 68  en non-empty, th
0340: 69 73 20 6f 70 74 69 6f 6e 20 73 75 70 70 6c 69  is option suppli
0350: 65 73 20 61 20 64 69 63 74 69 6f 6e 61 72 79 20  es a dictionary 
0360: 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 0a  that provides a.
0370: 2d 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 73 75  -mapping from su
0380: 62 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 73 20 74  bcommand names t
0390: 6f 20 61 20 6c 69 73 74 20 6f 66 20 70 72 65 66  o a list of pref
03a0: 69 78 20 77 6f 72 64 73 20 74 6f 20 73 75 62 73  ix words to subs
03b0: 74 69 74 75 74 65 0a 2d 69 6e 20 70 6c 61 63 65  titute.-in place
03c0: 20 6f 66 20 74 68 65 20 65 6e 73 65 6d 62 6c 65   of the ensemble
03d0: 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 73 75 62   command and sub
03e0: 63 6f 6d 6d 61 6e 64 20 77 6f 72 64 73 20 28 69  command words (i
03f0: 6e 20 61 20 6d 61 6e 6e 65 72 0a 2d 73 69 6d 69  n a manner.-simi
0400: 6c 61 72 20 74 6f 20 61 6e 20 61 6c 69 61 73 20  lar to an alias 
0410: 63 72 65 61 74 65 64 20 77 69 74 68 20 5c 66 42  created with \fB
0420: 69 6e 74 65 72 70 20 61 6c 69 61 73 5c 66 52 3b  interp alias\fR;
0430: 20 74 68 65 20 77 6f 72 64 73 20 61 72 65 20 6e   the words are n
0440: 6f 74 0a 2d 72 65 70 61 72 73 65 64 20 61 66 74  ot.-reparsed aft
0450: 65 72 20 73 75 62 73 74 69 74 75 74 69 6f 6e 29  er substitution)
0460: 2e 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70 74  .  When this opt
0470: 69 6f 6e 20 69 73 20 65 6d 70 74 79 2c 20 74 68  ion is empty, th
0480: 65 20 6d 61 70 70 69 6e 67 0a 2d 77 69 6c 6c 20  e mapping.-will 
0490: 62 65 20 66 72 6f 6d 20 74 68 65 20 6c 6f 63 61  be from the loca
04a0: 6c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 75  l name of the su
04b0: 62 63 6f 6d 6d 61 6e 64 20 74 6f 20 69 74 73 20  bcommand to its 
04c0: 66 75 6c 6c 79 2d 71 75 61 6c 69 66 69 65 64 0a  fully-qualified.
04d0: 2d 6e 61 6d 65 2e 20 20 4e 6f 74 65 20 74 68 61  -name.  Note tha
04e0: 74 20 77 68 65 6e 20 74 68 69 73 20 6f 70 74 69  t when this opti
04f0: 6f 6e 20 69 73 20 6e 6f 6e 2d 65 6d 70 74 79 20  on is non-empty 
0500: 61 6e 64 20 74 68 65 0a 2b 57 68 65 6e 20 6e 6f  and the.+When no
0510: 6e 2d 65 6d 70 74 79 2c 20 74 68 69 73 20 6f 70  n-empty, this op
0520: 74 69 6f 6e 20 73 75 70 70 6c 69 65 73 20 61 20  tion supplies a 
0530: 64 69 63 74 69 6f 6e 61 72 79 20 74 68 61 74 20  dictionary that 
0540: 70 72 6f 76 69 64 65 73 20 61 20 6d 61 70 70 69  provides a mappi
0550: 6e 67 0a 2b 66 72 6f 6d 20 73 75 62 63 6f 6d 6d  ng.+from subcomm
0560: 61 6e 64 20 6e 61 6d 65 73 20 74 6f 20 61 20 6c  and names to a l
0570: 69 73 74 20 6f 66 20 70 72 65 66 69 78 20 77 6f  ist of prefix wo
0580: 72 64 73 20 74 6f 20 73 75 62 73 74 69 74 75 74  rds to substitut
0590: 65 20 69 6e 20 70 6c 61 63 65 20 6f 66 0a 2b 74  e in place of.+t
05a0: 68 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6d 6d  he ensemble comm
05b0: 61 6e 64 20 61 6e 64 20 73 75 62 63 6f 6d 6d 61  and and subcomma
05c0: 6e 64 20 77 6f 72 64 73 20 28 69 6e 20 61 20 6d  nd words (in a m
05d0: 61 6e 6e 65 72 20 73 69 6d 69 6c 61 72 20 74 6f  anner similar to
05e0: 20 61 6e 20 61 6c 69 61 73 0a 2b 63 72 65 61 74   an alias.+creat
05f0: 65 64 20 77 69 74 68 20 69 6e 74 65 72 70 20 61  ed with interp a
0600: 6c 69 61 73 3b 20 74 68 65 20 77 6f 72 64 73 20  lias; the words 
0610: 61 72 65 20 6e 6f 74 20 72 65 70 61 72 73 65 64  are not reparsed
0620: 20 61 66 74 65 72 0a 2b 73 75 62 73 74 69 74 75   after.+substitu
0630: 74 69 6f 6e 29 2e 20 54 68 65 20 72 65 73 75 6c  tion). The resul
0640: 74 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 69 73 20  ting command is 
0650: 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 68 65  invoked with the
0660: 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d 65   original argume
0670: 6e 74 73 0a 2b 69 6e 20 74 68 65 20 6e 61 6d 65  nts.+in the name
0680: 73 70 61 63 65 20 6f 66 20 74 68 65 20 65 6e 73  space of the ens
0690: 65 6d 62 6c 65 2e 20 0a 2b 57 68 65 6e 20 74 68  emble. .+When th
06a0: 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 65 6d 70  is option is emp
06b0: 74 79 2c 20 74 68 65 20 6d 61 70 70 69 6e 67 0a  ty, the mapping.
06c0: 2b 77 69 6c 6c 20 62 65 20 66 72 6f 6d 20 74 68  +will be from th
06d0: 65 20 6c 6f 63 61 6c 20 6e 61 6d 65 20 6f 66 20  e local name of 
06e0: 74 68 65 20 73 75 62 63 6f 6d 6d 61 6e 64 20 74  the subcommand t
06f0: 6f 20 69 74 73 20 61 6c 69 61 73 2c 20 72 65 73  o its alias, res
0700: 6f 6c 76 65 64 20 66 72 6f 6d 0a 2b 74 68 65 20  olved from.+the 
0710: 65 6e 73 65 6d 62 6c 65 27 73 20 6e 61 6d 65 73  ensemble's names
0720: 70 61 63 65 2e 0a 2b 4e 6f 74 65 20 74 68 61 74  pace..+Note that
0730: 20 77 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f   when this optio
0740: 6e 20 69 73 20 6e 6f 6e 2d 65 6d 70 74 79 20 61  n is non-empty a
0750: 6e 64 20 74 68 65 0a 20 5c 66 42 5c 2d 73 75 62  nd the. \fB\-sub
0760: 63 6f 6d 6d 61 6e 64 73 5c 66 52 20 6f 70 74 69  commands\fR opti
0770: 6f 6e 20 69 73 20 65 6d 70 74 79 2c 20 74 68 65  on is empty, the
0780: 20 65 6e 73 65 6d 62 6c 65 20 73 75 62 63 6f 6d   ensemble subcom
0790: 6d 61 6e 64 20 6e 61 6d 65 73 0a 20 77 69 6c 6c  mand names. will
07a0: 20 62 65 20 65 78 61 63 74 6c 79 20 74 68 6f 73   be exactly thos
07b0: 65 20 77 6f 72 64 73 20 74 68 61 74 20 68 61 76  e words that hav
07c0: 65 20 6d 61 70 70 69 6e 67 73 20 69 6e 20 74 68  e mappings in th
07d0: 65 20 64 69 63 74 69 6f 6e 61 72 79 2e 0a 20 2e  e dictionary.. .
07e0: 54 50 0a 40 40 20 2d 37 37 31 2c 39 20 2b 37 37  TP.@@ -771,9 +77
07f0: 35 2c 39 20 40 40 0a 20 2e 50 50 0a 20 57 68 65  5,9 @@. .PP. Whe
0800: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
0810: 61 20 6e 6f 6e 2d 65 6d 70 74 79 20 6c 69 73 74  a non-empty list
0820: 2c 20 74 68 65 20 77 6f 72 64 73 20 6f 66 20 74  , the words of t
0830: 68 61 74 20 6c 69 73 74 20 61 72 65 20 75 73 65  hat list are use
0840: 64 0a 20 74 6f 20 72 65 70 6c 61 63 65 20 74 68  d. to replace th
0850: 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6d 6d 61  e ensemble comma
0860: 6e 64 20 61 6e 64 20 73 75 62 63 6f 6d 6d 61 6e  nd and subcomman
0870: 64 2c 20 6a 75 73 74 20 61 73 20 69 66 20 74 68  d, just as if th
0880: 65 79 20 68 61 64 0a 2d 62 65 65 6e 20 6c 6f 6f  ey had.-been loo
0890: 6b 65 64 20 75 70 20 69 6e 20 74 68 65 20 5c 66  ked up in the \f
08a0: 42 5c 2d 6d 61 70 5c 66 52 2e 20 49 74 20 69 73  B\-map\fR. It is
08b0: 20 75 70 20 74 6f 20 74 68 65 20 75 6e 6b 6e 6f   up to the unkno
08c0: 77 6e 20 68 61 6e 64 6c 65 72 20 74 6f 0a 2d 73  wn handler to.-s
08d0: 75 70 70 6c 79 20 61 6c 6c 20 6e 61 6d 65 73 70  upply all namesp
08e0: 61 63 65 20 71 75 61 6c 69 66 69 65 72 73 20 69  ace qualifiers i
08f0: 66 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 69  f the implementi
0900: 6e 67 20 73 75 62 63 6f 6d 6d 61 6e 64 20 69 73  ng subcommand is
0910: 20 6e 6f 74 0a 2d 69 6e 20 74 68 65 20 6e 61 6d   not.-in the nam
0920: 65 73 70 61 63 65 20 6f 66 20 74 68 65 20 63 61  espace of the ca
0930: 6c 6c 65 72 20 6f 66 20 74 68 65 20 65 6e 73 65  ller of the ense
0940: 6d 62 6c 65 20 63 6f 6d 6d 61 6e 64 2e 20 41 6c  mble command. Al
0950: 73 6f 20 6e 6f 74 65 20 74 68 61 74 0a 2b 62 65  so note that.+be
0960: 65 6e 20 6c 6f 6f 6b 65 64 20 75 70 20 69 6e 20  en looked up in 
0970: 74 68 65 20 5c 66 42 5c 2d 6d 61 70 5c 66 52 2e  the \fB\-map\fR.
0980: 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e   The implementin
0990: 67 20 73 75 62 63 6f 6d 6d 61 6e 64 20 69 73 20  g subcommand is 
09a0: 6c 6f 6f 6b 65 64 20 75 70 0a 2b 69 6e 20 74 68  looked up.+in th
09b0: 65 20 65 6e 73 65 6d 62 6c 65 27 73 20 6e 61 6d  e ensemble's nam
09c0: 65 73 70 61 63 65 20 75 73 69 6e 67 20 6e 6f 72  espace using nor
09d0: 6d 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 6f 63 61  mal command loca
09e0: 74 69 6f 6e 20 72 75 6c 65 73 2e 0a 2b 41 6c 73  tion rules..+Als
09f0: 6f 20 6e 6f 74 65 20 74 68 61 74 0a 20 77 68 65  o note that. whe
0a00: 6e 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6d 6d 61  n ensemble comma
0a10: 6e 64 73 20 61 72 65 20 63 68 61 69 6e 65 64 20  nds are chained 
0a20: 28 65 2e 67 2e 20 69 66 20 79 6f 75 20 6d 61 6b  (e.g. if you mak
0a30: 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 20 63 6f  e one of the. co
0a40: 6d 6d 61 6e 64 73 20 74 68 61 74 20 69 6d 70 6c  mmands that impl
0a50: 65 6d 65 6e 74 20 61 6e 20 65 6e 73 65 6d 62 6c  ement an ensembl
0a60: 65 20 73 75 62 63 6f 6d 6d 61 6e 64 20 69 6e 74  e subcommand int
0a70: 6f 20 61 6e 20 65 6e 73 65 6d 62 6c 65 2c 20 69  o an ensemble, i
0a80: 6e 20 61 0a 20 6d 61 6e 6e 65 72 20 73 69 6d 69  n a. manner simi
0a90: 6c 61 72 20 74 6f 20 74 68 65 20 74 65 78 74 20  lar to the text 
0aa0: 77 69 64 67 65 74 27 73 20 74 61 67 20 61 6e 64  widget's tag and
0ab0: 20 6d 61 72 6b 20 73 75 62 63 6f 6d 6d 61 6e 64   mark subcommand
0ac0: 73 29 20 74 68 65 6e 20 74 68 65 0a 49 6e 64 65  s) then the.Inde
0ad0: 78 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 42 61  x: generic/tclBa
0ae0: 73 69 63 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  sic.c.==========
0af0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0b00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0b10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0b20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69  =========.RCS fi
0b30: 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c  le: /cvsroot/tcl
0b40: 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c  /tcl/generic/tcl
0b50: 42 61 73 69 63 2e 63 2c 76 0a 72 65 74 72 69 65  Basic.c,v.retrie
0b60: 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e  ving revision 1.
0b70: 32 30 39 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e  209.diff -u -r1.
0b80: 32 30 39 20 74 63 6c 42 61 73 69 63 2e 63 0a 2d  209 tclBasic.c.-
0b90: 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 42 61  -- generic/tclBa
0ba0: 73 69 63 2e 63 09 33 31 20 4f 63 74 20 32 30 30  sic.c.31 Oct 200
0bb0: 36 20 32 30 3a 31 39 3a 34 34 20 2d 30 30 30 30  6 20:19:44 -0000
0bc0: 09 31 2e 32 30 39 0a 2b 2b 2b 20 67 65 6e 65 72  .1.209.+++ gener
0bd0: 69 63 2f 74 63 6c 42 61 73 69 63 2e 63 09 31 20  ic/tclBasic.c.1 
0be0: 4e 6f 76 20 32 30 30 36 20 32 30 3a 32 36 3a 33  Nov 2006 20:26:3
0bf0: 34 20 2d 30 30 30 30 0a 40 40 20 2d 33 32 39 32  4 -0000.@@ -3292
0c00: 2c 31 33 20 2b 33 32 39 32 2c 31 32 20 40 40 0a  ,13 +3292,12 @@.
0c10: 20 09 76 61 72 46 72 61 6d 65 50 74 72 20 3d 20   .varFramePtr = 
0c20: 69 50 74 72 2d 3e 72 6f 6f 74 46 72 61 6d 65 50  iPtr->rootFrameP
0c30: 74 72 3b 0a 20 09 73 61 76 65 64 56 61 72 46 72  tr;. .savedVarFr
0c40: 61 6d 65 50 74 72 20 3d 20 69 50 74 72 2d 3e 76  amePtr = iPtr->v
0c50: 61 72 46 72 61 6d 65 50 74 72 3b 0a 20 09 69 50  arFramePtr;. .iP
0c60: 74 72 2d 3e 76 61 72 46 72 61 6d 65 50 74 72 20  tr->varFramePtr 
0c70: 3d 20 76 61 72 46 72 61 6d 65 50 74 72 3b 20 0a  = varFramePtr; .
0c80: 2b 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  +    } else if (
0c90: 69 50 74 72 2d 3e 6c 6f 6f 6b 75 70 4e 73 50 74  iPtr->lookupNsPt
0ca0: 72 29 20 7b 0a 2b 09 73 61 76 65 64 4e 73 50 74  r) {.+.savedNsPt
0cb0: 72 20 3d 20 76 61 72 46 72 61 6d 65 50 74 72 2d  r = varFramePtr-
0cc0: 3e 6e 73 50 74 72 3b 0a 2b 09 76 61 72 46 72 61  >nsPtr;.+.varFra
0cd0: 6d 65 50 74 72 2d 3e 6e 73 50 74 72 20 3d 20 69  mePtr->nsPtr = i
0ce0: 50 74 72 2d 3e 6c 6f 6f 6b 75 70 4e 73 50 74 72  Ptr->lookupNsPtr
0cf0: 3b 0a 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66  ;.     } else if
0d00: 20 28 66 6c 61 67 73 20 26 20 54 43 4c 5f 45 56   (flags & TCL_EV
0d10: 41 4c 5f 49 4e 56 4f 4b 45 29 20 7b 0a 20 09 73  AL_INVOKE) {. .s
0d20: 61 76 65 64 4e 73 50 74 72 20 3d 20 76 61 72 46  avedNsPtr = varF
0d30: 72 61 6d 65 50 74 72 2d 3e 6e 73 50 74 72 3b 0a  ramePtr->nsPtr;.
0d40: 2d 09 69 66 20 28 69 50 74 72 2d 3e 6c 6f 6f 6b  -.if (iPtr->look
0d50: 75 70 4e 73 50 74 72 29 20 7b 0a 2d 09 20 20 20  upNsPtr) {.-.   
0d60: 20 76 61 72 46 72 61 6d 65 50 74 72 2d 3e 6e 73   varFramePtr->ns
0d70: 50 74 72 20 3d 20 69 50 74 72 2d 3e 6c 6f 6f 6b  Ptr = iPtr->look
0d80: 75 70 4e 73 50 74 72 3b 0a 2d 09 7d 20 65 6c 73  upNsPtr;.-.} els
0d90: 65 20 7b 0a 2d 09 20 20 20 20 76 61 72 46 72 61  e {.-.    varFra
0da0: 6d 65 50 74 72 2d 3e 6e 73 50 74 72 20 3d 20 69  mePtr->nsPtr = i
0db0: 50 74 72 2d 3e 67 6c 6f 62 61 6c 4e 73 50 74 72  Ptr->globalNsPtr
0dc0: 3b 0a 2d 09 7d 0a 2b 09 76 61 72 46 72 61 6d 65  ;.-.}.+.varFrame
0dd0: 50 74 72 2d 3e 6e 73 50 74 72 20 3d 20 69 50 74  Ptr->nsPtr = iPt
0de0: 72 2d 3e 67 6c 6f 62 61 6c 4e 73 50 74 72 3b 0a  r->globalNsPtr;.
0df0: 20 20 20 20 20 7d 0a 20 0a 20 20 20 20 20 2f 2a       }. .     /*
0e00: 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f  .Index: generic/
0e10: 74 63 6c 49 6e 74 2e 68 0a 3d 3d 3d 3d 3d 3d 3d  tclInt.h.=======
0e20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0e30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0e40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0e50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53  ============.RCS
0e60: 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f   file: /cvsroot/
0e70: 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f  tcl/tcl/generic/
0e80: 74 63 6c 49 6e 74 2e 68 2c 76 0a 72 65 74 72 69  tclInt.h,v.retri
0e90: 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31  eving revision 1
0ea0: 2e 32 39 30 0a 64 69 66 66 20 2d 75 20 2d 72 31  .290.diff -u -r1
0eb0: 2e 32 39 30 20 74 63 6c 49 6e 74 2e 68 0a 2d 2d  .290 tclInt.h.--
0ec0: 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74  - generic/tclInt
0ed0: 2e 68 09 33 31 20 4f 63 74 20 32 30 30 36 20 32  .h.31 Oct 2006 2
0ee0: 30 3a 31 39 3a 34 35 20 2d 30 30 30 30 09 31 2e  0:19:45 -0000.1.
0ef0: 32 39 30 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f  290.+++ generic/
0f00: 74 63 6c 49 6e 74 2e 68 09 31 20 4e 6f 76 20 32  tclInt.h.1 Nov 2
0f10: 30 30 36 20 32 30 3a 32 36 3a 33 37 20 2d 30 30  006 20:26:37 -00
0f20: 30 30 0a 40 40 20 2d 31 33 37 30 2c 38 20 2b 31  00.@@ -1370,8 +1
0f30: 33 37 30 2c 38 20 40 40 0a 20 09 09 09 09 20 2a  370,8 @@. .... *
0f40: 20 6f 72 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 61   or NULL if no a
0f50: 63 74 69 76 65 20 74 72 61 63 65 73 2e 20 2a 2f  ctive traces. */
0f60: 0a 20 20 20 20 20 69 6e 74 20 72 65 74 75 72 6e  .     int return
0f70: 43 6f 64 65 3b 09 09 2f 2a 20 5b 72 65 74 75 72  Code;../* [retur
0f80: 6e 20 2d 63 6f 64 65 5d 20 70 61 72 61 6d 65 74  n -code] paramet
0f90: 65 72 20 2a 2f 0a 20 20 20 20 20 43 61 6c 6c 46  er */.     CallF
0fa0: 72 61 6d 65 20 2a 72 6f 6f 74 46 72 61 6d 65 50  rame *rootFrameP
0fb0: 74 72 3b 20 20 20 20 2f 2a 20 47 6c 6f 62 61 6c  tr;    /* Global
0fc0: 20 66 72 61 6d 65 20 70 6f 69 6e 74 65 72 20 66   frame pointer f
0fd0: 6f 72 20 74 68 69 73 20 69 6e 74 65 72 70 72 65  or this interpre
0fe0: 74 65 72 20 2a 2f 0a 2d 20 20 20 20 4e 61 6d 65  ter */.-    Name
0ff0: 73 70 61 63 65 20 2a 6c 6f 6f 6b 75 70 4e 73 50  space *lookupNsP
1000: 74 72 3b 09 2f 2a 20 4e 61 6d 65 73 70 61 63 65  tr;./* Namespace
1010: 20 74 6f 20 75 73 65 20 4f 4e 4c 59 20 6f 6e 20   to use ONLY on 
1020: 74 68 65 20 6e 65 78 74 0a 2d 09 09 09 09 20 2a  the next.-.... *
1030: 20 54 43 4c 5f 45 56 41 4c 5f 49 4e 56 4f 4b 45   TCL_EVAL_INVOKE
1040: 20 63 61 6c 6c 20 74 6f 20 54 63 6c 5f 45 76 61   call to Tcl_Eva
1050: 6c 4f 62 6a 76 20 2a 2f 0a 2b 20 20 20 20 4e 61  lObjv */.+    Na
1060: 6d 65 73 70 61 63 65 20 2a 6c 6f 6f 6b 75 70 4e  mespace *lookupN
1070: 73 50 74 72 3b 09 2f 2a 20 4e 61 6d 65 73 70 61  sPtr;./* Namespa
1080: 63 65 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f  ce to use for co
1090: 6d 6d 61 6e 64 20 6c 6f 6f 6b 75 70 20 4f 4e 4c  mmand lookup ONL
10a0: 59 20 6f 6e 0a 2b 09 09 09 09 20 2a 20 74 68 65  Y on.+.... * the
10b0: 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 54 63   next call to Tc
10c0: 6c 5f 45 76 61 6c 4f 62 6a 76 20 2a 2f 20 0a 20  l_EvalObjv */ . 
10d0: 0a 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 2a  .     /*.      *
10e0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
10f0: 64 20 62 79 20 54 63 6c 5f 41 70 70 65 6e 64 52  d by Tcl_AppendR
1100: 65 73 75 6c 74 20 74 6f 20 6b 65 65 70 20 74 72  esult to keep tr
1110: 61 63 6b 20 6f 66 20 70 61 72 74 69 61 6c 20 72  ack of partial r
1120: 65 73 75 6c 74 73 2e 0a 49 6e 64 65 78 3a 20 67  esults..Index: g
1130: 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d 65 73 70  eneric/tclNamesp
1140: 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .c.=============
1150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1180: 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a  ======.RCS file:
1190: 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63   /cvsroot/tcl/tc
11a0: 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d  l/generic/tclNam
11b0: 65 73 70 2e 63 2c 76 0a 72 65 74 72 69 65 76 69  esp.c,v.retrievi
11c0: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 31  ng revision 1.11
11d0: 34 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 31 31  4.diff -u -r1.11
11e0: 34 20 74 63 6c 4e 61 6d 65 73 70 2e 63 0a 2d 2d  4 tclNamesp.c.--
11f0: 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d  - generic/tclNam
1200: 65 73 70 2e 63 09 33 31 20 4f 63 74 20 32 30 30  esp.c.31 Oct 200
1210: 36 20 32 30 3a 31 39 3a 34 35 20 2d 30 30 30 30  6 20:19:45 -0000
1220: 09 31 2e 31 31 34 0a 2b 2b 2b 20 67 65 6e 65 72  .1.114.+++ gener
1230: 69 63 2f 74 63 6c 4e 61 6d 65 73 70 2e 63 09 31  ic/tclNamesp.c.1
1240: 20 4e 6f 76 20 32 30 30 36 20 32 30 3a 32 36 3a   Nov 2006 20:26:
1250: 34 31 20 2d 30 30 30 30 0a 40 40 20 2d 35 30 31  41 -0000.@@ -501
1260: 36 2c 37 20 2b 35 30 31 36 2c 37 20 40 40 0a 20  6,7 +5016,7 @@. 
1270: 09 63 68 61 72 20 2a 6e 61 6d 65 3b 0a 20 09 54  .char *name;. .T
1280: 63 6c 5f 44 69 63 74 53 65 61 72 63 68 20 73 65  cl_DictSearch se
1290: 61 72 63 68 3b 0a 20 09 54 63 6c 5f 4f 62 6a 20  arch;. .Tcl_Obj 
12a0: 2a 6c 69 73 74 4f 62 6a 3b 0a 2d 09 69 6e 74 20  *listObj;.-.int 
12b0: 64 6f 6e 65 2c 20 6c 65 6e 2c 20 61 6c 6c 6f 63  done, len, alloc
12c0: 61 74 65 64 4d 61 70 46 6c 61 67 20 3d 20 30 3b  atedMapFlag = 0;
12d0: 0a 2b 09 69 6e 74 20 64 6f 6e 65 2c 20 6c 65 6e  .+.int done, len
12e0: 3b 0a 20 09 2f 2a 0a 20 09 20 2a 20 44 65 66 61  ;. ./*. . * Defa
12f0: 75 6c 74 73 0a 20 09 20 2a 2f 0a 40 40 20 2d 35  ults. . */.@@ -5
1300: 30 34 36 2c 39 20 2b 35 30 34 36 2c 36 20 40 40  046,9 +5046,6 @@
1310: 0a 20 09 66 6f 72 20 28 3b 20 6f 62 6a 63 3e 31  . .for (; objc>1
1320: 20 3b 20 6f 62 6a 63 2d 3d 32 2c 6f 62 6a 76 2b   ; objc-=2,objv+
1330: 3d 32 20 29 20 7b 0a 20 09 20 20 20 20 69 66 20  =2 ) {. .    if 
1340: 28 54 63 6c 5f 47 65 74 49 6e 64 65 78 46 72 6f  (Tcl_GetIndexFro
1350: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
1360: 76 5b 30 5d 2c 20 63 72 65 61 74 65 4f 70 74 69  v[0], createOpti
1370: 6f 6e 73 2c 20 22 6f 70 74 69 6f 6e 22 2c 0a 20  ons, "option",. 
1380: 09 09 20 20 20 20 30 2c 20 26 69 6e 64 65 78 29  ..    0, &index)
1390: 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2d 09   != TCL_OK) {.-.
13a0: 09 69 66 20 28 61 6c 6c 6f 63 61 74 65 64 4d 61  .if (allocatedMa
13b0: 70 46 6c 61 67 29 20 7b 0a 2d 09 09 20 20 20 20  pFlag) {.-..    
13c0: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
13d0: 28 6d 61 70 4f 62 6a 29 3b 0a 2d 09 09 7d 0a 20  (mapObj);.-..}. 
13e0: 09 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ..return TCL_ERR
13f0: 4f 52 3b 0a 20 09 20 20 20 20 7d 0a 20 09 20 20  OR;. .    }. .  
1400: 20 20 73 77 69 74 63 68 20 28 28 65 6e 75 6d 20    switch ((enum 
1410: 45 6e 73 43 72 65 61 74 65 4f 70 74 73 29 20 69  EnsCreateOpts) i
1420: 6e 64 65 78 29 20 7b 0a 40 40 20 2d 35 30 35 37  ndex) {.@@ -5057
1430: 2c 32 35 20 2b 35 30 35 34 2c 31 39 20 40 40 0a  ,25 +5054,19 @@.
1440: 20 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 20 09 20   ..continue;. . 
1450: 20 20 20 63 61 73 65 20 43 52 54 5f 53 55 42 43     case CRT_SUBC
1460: 4d 44 53 3a 0a 20 09 09 69 66 20 28 54 63 6c 5f  MDS:. ..if (Tcl_
1470: 4c 69 73 74 4f 62 6a 4c 65 6e 67 74 68 28 69 6e  ListObjLength(in
1480: 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26  terp, objv[1], &
1490: 6c 65 6e 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20  len) != TCL_OK) 
14a0: 7b 0a 2d 09 09 20 20 20 20 69 66 20 28 61 6c 6c  {.-..    if (all
14b0: 6f 63 61 74 65 64 4d 61 70 46 6c 61 67 29 20 7b  ocatedMapFlag) {
14c0: 0a 2d 09 09 09 54 63 6c 5f 44 65 63 72 52 65 66  .-...Tcl_DecrRef
14d0: 43 6f 75 6e 74 28 6d 61 70 4f 62 6a 29 3b 0a 2d  Count(mapObj);.-
14e0: 09 09 20 20 20 20 7d 0a 20 09 09 20 20 20 20 72  ..    }. ..    r
14f0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1500: 0a 20 09 09 7d 0a 20 09 09 73 75 62 63 6d 64 4f  . ..}. ..subcmdO
1510: 62 6a 20 3d 20 28 6c 65 6e 20 3e 20 30 20 3f 20  bj = (len > 0 ? 
1520: 6f 62 6a 76 5b 31 5d 20 3a 20 4e 55 4c 4c 29 3b  objv[1] : NULL);
1530: 0a 20 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 20 09  . ..continue;. .
1540: 20 20 20 20 63 61 73 65 20 43 52 54 5f 4d 41 50      case CRT_MAP
1550: 3a 20 7b 0a 2d 09 09 54 63 6c 5f 4f 62 6a 20 2a  : {.-..Tcl_Obj *
1560: 70 61 74 63 68 65 64 44 69 63 74 20 3d 20 4e 55  patchedDict = NU
1570: 4c 4c 2c 20 2a 73 75 62 63 6d 64 4f 62 6a 3b 0a  LL, *subcmdObj;.
1580: 2d 0a 2d 09 09 2f 2a 0a 2b 09 09 54 63 6c 5f 4f  -.-../*.+..Tcl_O
1590: 62 6a 20 2a 73 75 62 63 6d 64 4f 62 6a 3b 0a 2b  bj *subcmdObj;.+
15a0: 09 09 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20  ...+            
15b0: 20 20 20 20 2f 2a 0a 20 09 09 20 2a 20 56 65 72      /*. .. * Ver
15c0: 69 66 79 20 74 68 61 74 20 74 68 65 20 6d 61 70  ify that the map
15d0: 20 69 73 20 73 65 6e 73 69 62 6c 65 2e 0a 20 09   is sensible.. .
15e0: 09 20 2a 2f 0a 20 0a 20 09 09 69 66 20 28 54 63  . */. . ..if (Tc
15f0: 6c 5f 44 69 63 74 4f 62 6a 46 69 72 73 74 28 69  l_DictObjFirst(i
1600: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20  nterp, objv[1], 
1610: 26 73 65 61 72 63 68 2c 0a 20 09 09 09 26 73 75  &search,. ...&su
1620: 62 63 6d 64 4f 62 6a 2c 20 26 6c 69 73 74 4f 62  bcmdObj, &listOb
1630: 6a 2c 20 26 64 6f 6e 65 29 20 21 3d 20 54 43 4c  j, &done) != TCL
1640: 5f 4f 4b 29 20 7b 0a 2d 09 09 20 20 20 20 69 66  _OK) {.-..    if
1650: 20 28 61 6c 6c 6f 63 61 74 65 64 4d 61 70 46 6c   (allocatedMapFl
1660: 61 67 29 20 7b 0a 2d 09 09 09 54 63 6c 5f 44 65  ag) {.-...Tcl_De
1670: 63 72 52 65 66 43 6f 75 6e 74 28 6d 61 70 4f 62  crRefCount(mapOb
1680: 6a 29 3b 0a 2d 09 09 20 20 20 20 7d 0a 20 09 09  j);.-..    }. ..
1690: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
16a0: 52 52 4f 52 3b 0a 20 09 09 7d 0a 20 09 09 69 66  RROR;. ..}. ..if
16b0: 20 28 64 6f 6e 65 29 20 7b 0a 40 40 20 2d 35 30   (done) {.@@ -50
16c0: 38 34 2c 31 37 20 2b 35 30 37 35 2c 31 30 20 40  84,17 +5075,10 @
16d0: 40 0a 20 09 09 7d 0a 20 09 09 64 6f 20 7b 0a 20  @. ..}. ..do {. 
16e0: 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 2a  ..    Tcl_Obj **
16f0: 6c 69 73 74 76 3b 0a 2d 09 09 20 20 20 20 63 68  listv;.-..    ch
1700: 61 72 20 2a 63 6d 64 3b 0a 20 0a 20 09 09 20 20  ar *cmd;. . ..  
1710: 20 20 69 66 20 28 54 63 6c 5f 4c 69 73 74 4f 62    if (Tcl_ListOb
1720: 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74  jGetElements(int
1730: 65 72 70 2c 20 6c 69 73 74 4f 62 6a 2c 20 26 6c  erp, listObj, &l
1740: 65 6e 2c 0a 20 09 09 09 20 20 20 20 26 6c 69 73  en,. ...    &lis
1750: 74 76 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  tv) != TCL_OK) {
1760: 0a 20 09 09 09 54 63 6c 5f 44 69 63 74 4f 62 6a  . ...Tcl_DictObj
1770: 44 6f 6e 65 28 26 73 65 61 72 63 68 29 3b 0a 2d  Done(&search);.-
1780: 09 09 09 69 66 20 28 70 61 74 63 68 65 64 44 69  ...if (patchedDi
1790: 63 74 29 20 7b 0a 2d 09 09 09 20 20 20 20 54 63  ct) {.-...    Tc
17a0: 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70  l_DecrRefCount(p
17b0: 61 74 63 68 65 64 44 69 63 74 29 3b 0a 2d 09 09  atchedDict);.-..
17c0: 09 7d 0a 2d 09 09 09 69 66 20 28 61 6c 6c 6f 63  .}.-...if (alloc
17d0: 61 74 65 64 4d 61 70 46 6c 61 67 29 20 7b 0a 2d  atedMapFlag) {.-
17e0: 09 09 09 20 20 20 20 54 63 6c 5f 44 65 63 72 52  ...    Tcl_DecrR
17f0: 65 66 43 6f 75 6e 74 28 6d 61 70 4f 62 6a 29 3b  efCount(mapObj);
1800: 0a 2d 09 09 09 7d 0a 20 09 09 09 72 65 74 75 72  .-...}. ...retur
1810: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 09 09  n TCL_ERROR;. ..
1820: 20 20 20 20 7d 0a 20 09 09 20 20 20 20 69 66 20      }. ..    if 
1830: 28 6c 65 6e 20 3c 20 31 29 20 7b 0a 40 40 20 2d  (len < 1) {.@@ -
1840: 35 31 30 32 2c 35 35 20 2b 35 30 38 36 2c 32 32  5102,55 +5086,22
1850: 20 40 40 0a 20 09 09 09 09 22 65 6e 73 65 6d 62   @@. ...."ensemb
1860: 6c 65 20 73 75 62 63 6f 6d 6d 61 6e 64 20 69 6d  le subcommand im
1870: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 22 0a  plementations ".
1880: 20 09 09 09 09 22 6d 75 73 74 20 62 65 20 6e 6f   ...."must be no
1890: 6e 2d 65 6d 70 74 79 20 6c 69 73 74 73 22 2c 20  n-empty lists", 
18a0: 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 09 09  TCL_STATIC);. ..
18b0: 09 54 63 6c 5f 44 69 63 74 4f 62 6a 44 6f 6e 65  .Tcl_DictObjDone
18c0: 28 26 73 65 61 72 63 68 29 3b 0a 2d 09 09 09 69  (&search);.-...i
18d0: 66 20 28 70 61 74 63 68 65 64 44 69 63 74 29 20  f (patchedDict) 
18e0: 7b 0a 2d 09 09 09 20 20 20 20 54 63 6c 5f 44 65  {.-...    Tcl_De
18f0: 63 72 52 65 66 43 6f 75 6e 74 28 70 61 74 63 68  crRefCount(patch
1900: 65 64 44 69 63 74 29 3b 0a 2d 09 09 09 7d 0a 2d  edDict);.-...}.-
1910: 09 09 09 69 66 20 28 61 6c 6c 6f 63 61 74 65 64  ...if (allocated
1920: 4d 61 70 46 6c 61 67 29 20 7b 0a 2d 09 09 09 20  MapFlag) {.-... 
1930: 20 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f     Tcl_DecrRefCo
1940: 75 6e 74 28 6d 61 70 4f 62 6a 29 3b 0a 2d 09 09  unt(mapObj);.-..
1950: 09 7d 0a 20 09 09 09 72 65 74 75 72 6e 20 54 43  .}. ...return TC
1960: 4c 5f 45 52 52 4f 52 3b 0a 20 09 09 20 20 20 20  L_ERROR;. ..    
1970: 7d 0a 2d 09 09 20 20 20 20 63 6d 64 20 3d 20 54  }.-..    cmd = T
1980: 63 6c 47 65 74 53 74 72 69 6e 67 28 6c 69 73 74  clGetString(list
1990: 76 5b 30 5d 29 3b 0a 2d 09 09 20 20 20 20 69 66  v[0]);.-..    if
19a0: 20 28 21 28 63 6d 64 5b 30 5d 20 3d 3d 20 27 3a   (!(cmd[0] == ':
19b0: 27 20 26 26 20 63 6d 64 5b 31 5d 20 3d 3d 20 27  ' && cmd[1] == '
19c0: 3a 27 29 29 20 7b 0a 2d 09 09 09 54 63 6c 5f 4f  :')) {.-...Tcl_O
19d0: 62 6a 20 2a 6e 65 77 4c 69 73 74 20 3d 20 54 63  bj *newList = Tc
19e0: 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a 28 6c 65 6e  l_NewListObj(len
19f0: 2c 20 6c 69 73 74 76 29 3b 0a 2d 09 09 09 54 63  , listv);.-...Tc
1a00: 6c 5f 4f 62 6a 20 2a 6e 65 77 43 6d 64 20 3d 20  l_Obj *newCmd = 
1a10: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
1a20: 28 6e 73 50 74 72 2d 3e 66 75 6c 6c 4e 61 6d 65  (nsPtr->fullName
1a30: 2c 2d 31 29 3b 0a 2d 0a 2d 09 09 09 69 66 20 28  ,-1);.-.-...if (
1a40: 6e 73 50 74 72 2d 3e 70 61 72 65 6e 74 50 74 72  nsPtr->parentPtr
1a50: 29 20 7b 0a 2d 09 09 09 20 20 20 20 54 63 6c 5f  ) {.-...    Tcl_
1a60: 41 70 70 65 6e 64 53 74 72 69 6e 67 73 54 6f 4f  AppendStringsToO
1a70: 62 6a 28 6e 65 77 43 6d 64 2c 20 22 3a 3a 22 2c  bj(newCmd, "::",
1a80: 20 4e 55 4c 4c 29 3b 0a 2d 09 09 09 7d 0a 2d 09   NULL);.-...}.-.
1a90: 09 09 54 63 6c 5f 41 70 70 65 6e 64 4f 62 6a 54  ..Tcl_AppendObjT
1aa0: 6f 4f 62 6a 28 6e 65 77 43 6d 64 2c 20 6c 69 73  oObj(newCmd, lis
1ab0: 74 76 5b 30 5d 29 3b 0a 2d 09 09 09 54 63 6c 5f  tv[0]);.-...Tcl_
1ac0: 4c 69 73 74 4f 62 6a 52 65 70 6c 61 63 65 28 4e  ListObjReplace(N
1ad0: 55 4c 4c 2c 20 6e 65 77 4c 69 73 74 2c 20 30 2c  ULL, newList, 0,
1ae0: 20 31 2c 20 31 2c 20 26 6e 65 77 43 6d 64 29 3b   1, 1, &newCmd);
1af0: 0a 2d 09 09 09 69 66 20 28 70 61 74 63 68 65 64  .-...if (patched
1b00: 44 69 63 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  Dict == NULL) {.
1b10: 2d 09 09 09 20 20 20 20 70 61 74 63 68 65 64 44  -...    patchedD
1b20: 69 63 74 20 3d 20 54 63 6c 5f 44 75 70 6c 69 63  ict = Tcl_Duplic
1b30: 61 74 65 4f 62 6a 28 6f 62 6a 76 5b 31 5d 29 3b  ateObj(objv[1]);
1b40: 0a 2d 09 09 09 7d 0a 2d 09 09 09 54 63 6c 5f 44  .-...}.-...Tcl_D
1b50: 69 63 74 4f 62 6a 50 75 74 28 4e 55 4c 4c 2c 20  ictObjPut(NULL, 
1b60: 70 61 74 63 68 65 64 44 69 63 74 2c 20 73 75 62  patchedDict, sub
1b70: 63 6d 64 4f 62 6a 2c 20 6e 65 77 4c 69 73 74 29  cmdObj, newList)
1b80: 3b 0a 2d 09 09 20 20 20 20 7d 0a 20 09 09 20 20  ;.-..    }. ..  
1b90: 20 20 54 63 6c 5f 44 69 63 74 4f 62 6a 4e 65 78    Tcl_DictObjNex
1ba0: 74 28 26 73 65 61 72 63 68 2c 20 26 73 75 62 63  t(&search, &subc
1bb0: 6d 64 4f 62 6a 2c 20 26 6c 69 73 74 4f 62 6a 2c  mdObj, &listObj,
1bc0: 20 26 64 6f 6e 65 29 3b 0a 20 09 09 7d 20 77 68   &done);. ..} wh
1bd0: 69 6c 65 20 28 21 64 6f 6e 65 29 3b 0a 20 0a 2d  ile (!done);. .-
1be0: 09 09 69 66 20 28 61 6c 6c 6f 63 61 74 65 64 4d  ..if (allocatedM
1bf0: 61 70 46 6c 61 67 29 20 7b 0a 2d 09 09 20 20 20  apFlag) {.-..   
1c00: 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e   Tcl_DecrRefCoun
1c10: 74 28 6d 61 70 4f 62 6a 29 3b 0a 2d 09 09 7d 0a  t(mapObj);.-..}.
1c20: 2d 09 09 6d 61 70 4f 62 6a 20 3d 20 28 70 61 74  -..mapObj = (pat
1c30: 63 68 65 64 44 69 63 74 20 3f 20 70 61 74 63 68  chedDict ? patch
1c40: 65 64 44 69 63 74 20 3a 20 6f 62 6a 76 5b 31 5d  edDict : objv[1]
1c50: 29 3b 0a 2d 09 09 69 66 20 28 70 61 74 63 68 65  );.-..if (patche
1c60: 64 44 69 63 74 29 20 7b 0a 2d 09 09 20 20 20 20  dDict) {.-..    
1c70: 61 6c 6c 6f 63 61 74 65 64 4d 61 70 46 6c 61 67  allocatedMapFlag
1c80: 20 3d 20 31 3b 0a 2d 09 09 7d 0a 2b 09 09 6d 61   = 1;.-..}.+..ma
1c90: 70 4f 62 6a 20 3d 20 6f 62 6a 76 5b 31 5d 3b 0a  pObj = objv[1];.
1ca0: 20 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 20 09 20   ..continue;. . 
1cb0: 20 20 20 7d 0a 20 09 20 20 20 20 63 61 73 65 20     }. .    case 
1cc0: 43 52 54 5f 50 52 45 46 49 58 3a 0a 20 09 09 69  CRT_PREFIX:. ..i
1cd0: 66 20 28 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61  f (Tcl_GetBoolea
1ce0: 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  nFromObj(interp,
1cf0: 20 6f 62 6a 76 5b 31 5d 2c 0a 20 09 09 09 26 70   objv[1],. ...&p
1d00: 65 72 6d 69 74 50 72 65 66 69 78 29 20 21 3d 20  ermitPrefix) != 
1d10: 54 43 4c 5f 4f 4b 29 20 7b 0a 2d 09 09 20 20 20  TCL_OK) {.-..   
1d20: 20 69 66 20 28 61 6c 6c 6f 63 61 74 65 64 4d 61   if (allocatedMa
1d30: 70 46 6c 61 67 29 20 7b 0a 2d 09 09 09 54 63 6c  pFlag) {.-...Tcl
1d40: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 6d 61  _DecrRefCount(ma
1d50: 70 4f 62 6a 29 3b 0a 2d 09 09 20 20 20 20 7d 0a  pObj);.-..    }.
1d60: 20 09 09 20 20 20 20 72 65 74 75 72 6e 20 54 43   ..    return TC
1d70: 4c 5f 45 52 52 4f 52 3b 0a 20 09 09 7d 0a 20 09  L_ERROR;. ..}. .
1d80: 09 63 6f 6e 74 69 6e 75 65 3b 0a 20 09 20 20 20  .continue;. .   
1d90: 20 63 61 73 65 20 43 52 54 5f 55 4e 4b 4e 4f 57   case CRT_UNKNOW
1da0: 4e 3a 0a 20 09 09 69 66 20 28 54 63 6c 5f 4c 69  N:. ..if (Tcl_Li
1db0: 73 74 4f 62 6a 4c 65 6e 67 74 68 28 69 6e 74 65  stObjLength(inte
1dc0: 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 6c 65  rp, objv[1], &le
1dd0: 6e 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  n) != TCL_OK) {.
1de0: 2d 09 09 20 20 20 20 69 66 20 28 61 6c 6c 6f 63  -..    if (alloc
1df0: 61 74 65 64 4d 61 70 46 6c 61 67 29 20 7b 0a 2d  atedMapFlag) {.-
1e00: 09 09 09 54 63 6c 5f 44 65 63 72 52 65 66 43 6f  ...Tcl_DecrRefCo
1e10: 75 6e 74 28 6d 61 70 4f 62 6a 29 3b 0a 2d 09 09  unt(mapObj);.-..
1e20: 20 20 20 20 7d 0a 20 09 09 20 20 20 20 72 65 74      }. ..    ret
1e30: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1e40: 09 09 7d 0a 20 09 09 75 6e 6b 6e 6f 77 6e 4f 62  ..}. ..unknownOb
1e50: 6a 20 3d 20 28 6c 65 6e 20 3e 20 30 20 3f 20 6f  j = (len > 0 ? o
1e60: 62 6a 76 5b 31 5d 20 3a 20 4e 55 4c 4c 29 3b 0a  bjv[1] : NULL);.
1e70: 40 40 20 2d 35 33 33 38 2c 37 20 2b 35 32 38 39  @@ -5338,7 +5289
1e80: 2c 37 20 40 40 0a 20 09 09 20 20 20 20 73 75 62  ,7 @@. ..    sub
1e90: 63 6d 64 4f 62 6a 20 3d 20 28 6c 65 6e 20 3e 20  cmdObj = (len > 
1ea0: 30 20 3f 20 6f 62 6a 76 5b 31 5d 20 3a 20 4e 55  0 ? objv[1] : NU
1eb0: 4c 4c 29 3b 0a 20 09 09 20 20 20 20 63 6f 6e 74  LL);. ..    cont
1ec0: 69 6e 75 65 3b 0a 20 09 09 63 61 73 65 20 43 4f  inue;. ..case CO
1ed0: 4e 46 5f 4d 41 50 3a 20 7b 0a 2d 09 09 20 20 20  NF_MAP: {.-..   
1ee0: 20 54 63 6c 5f 4f 62 6a 20 2a 70 61 74 63 68 65   Tcl_Obj *patche
1ef0: 64 44 69 63 74 20 3d 20 4e 55 4c 4c 2c 20 2a 73  dDict = NULL, *s
1f00: 75 62 63 6d 64 4f 62 6a 3b 0a 2b 09 09 20 20 20  ubcmdObj;.+..   
1f10: 20 54 63 6c 5f 4f 62 6a 20 2a 73 75 62 63 6d 64   Tcl_Obj *subcmd
1f20: 4f 62 6a 3b 0a 20 0a 20 09 09 20 20 20 20 2f 2a  Obj;. . ..    /*
1f30: 0a 20 09 09 20 20 20 20 20 2a 20 56 65 72 69 66  . ..     * Verif
1f40: 79 20 74 68 61 74 20 74 68 65 20 6d 61 70 20 69  y that the map i
1f50: 73 20 73 65 6e 73 69 62 6c 65 2e 0a 40 40 20 2d  s sensible..@@ -
1f60: 35 33 34 36 2c 39 20 2b 35 32 39 37 2c 36 20 40  5346,9 +5297,6 @
1f70: 40 0a 20 0a 20 09 09 20 20 20 20 69 66 20 28 54  @. . ..    if (T
1f80: 63 6c 5f 44 69 63 74 4f 62 6a 46 69 72 73 74 28  cl_DictObjFirst(
1f90: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c  interp, objv[1],
1fa0: 20 26 73 65 61 72 63 68 2c 0a 20 09 09 09 20 20   &search,. ...  
1fb0: 20 20 26 73 75 62 63 6d 64 4f 62 6a 2c 20 26 6c    &subcmdObj, &l
1fc0: 69 73 74 4f 62 6a 2c 20 26 64 6f 6e 65 29 20 21  istObj, &done) !
1fd0: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2d 09 09 09  = TCL_OK) {.-...
1fe0: 69 66 20 28 61 6c 6c 6f 63 61 74 65 64 4d 61 70  if (allocatedMap
1ff0: 46 6c 61 67 29 20 7b 0a 2d 09 09 09 20 20 20 20  Flag) {.-...    
2000: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
2010: 28 6d 61 70 4f 62 6a 29 3b 0a 2d 09 09 09 7d 0a  (mapObj);.-...}.
2020: 20 09 09 09 72 65 74 75 72 6e 20 54 43 4c 5f 45   ...return TCL_E
2030: 52 52 4f 52 3b 0a 20 09 09 20 20 20 20 7d 0a 20  RROR;. ..    }. 
2040: 09 09 20 20 20 20 69 66 20 28 64 6f 6e 65 29 20  ..    if (done) 
2050: 7b 0a 40 40 20 2d 35 33 35 37 2c 31 37 20 2b 35  {.@@ -5357,17 +5
2060: 33 30 35 2c 31 30 20 40 40 0a 20 09 09 20 20 20  305,10 @@. ..   
2070: 20 7d 0a 20 09 09 20 20 20 20 64 6f 20 7b 0a 20   }. ..    do {. 
2080: 09 09 09 54 63 6c 5f 4f 62 6a 20 2a 2a 6c 69 73  ...Tcl_Obj **lis
2090: 74 76 3b 0a 2d 09 09 09 63 68 61 72 20 2a 63 6d  tv;.-...char *cm
20a0: 64 3b 0a 20 0a 20 09 09 09 69 66 20 28 54 63 6c  d;. . ...if (Tcl
20b0: 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65  _ListObjGetEleme
20c0: 6e 74 73 28 69 6e 74 65 72 70 2c 20 6c 69 73 74  nts(interp, list
20d0: 4f 62 6a 2c 20 26 6c 65 6e 2c 0a 20 09 09 09 09  Obj, &len,. ....
20e0: 26 6c 69 73 74 76 29 20 21 3d 20 54 43 4c 5f 4f  &listv) != TCL_O
20f0: 4b 29 20 7b 0a 20 09 09 09 20 20 20 20 54 63 6c  K) {. ...    Tcl
2100: 5f 44 69 63 74 4f 62 6a 44 6f 6e 65 28 26 73 65  _DictObjDone(&se
2110: 61 72 63 68 29 3b 0a 2d 09 09 09 20 20 20 20 69  arch);.-...    i
2120: 66 20 28 70 61 74 63 68 65 64 44 69 63 74 29 20  f (patchedDict) 
2130: 7b 0a 2d 09 09 09 09 54 63 6c 5f 44 65 63 72 52  {.-....Tcl_DecrR
2140: 65 66 43 6f 75 6e 74 28 70 61 74 63 68 65 64 44  efCount(patchedD
2150: 69 63 74 29 3b 0a 2d 09 09 09 20 20 20 20 7d 0a  ict);.-...    }.
2160: 2d 09 09 09 20 20 20 20 69 66 20 28 61 6c 6c 6f  -...    if (allo
2170: 63 61 74 65 64 4d 61 70 46 6c 61 67 29 20 7b 0a  catedMapFlag) {.
2180: 2d 09 09 09 09 54 63 6c 5f 44 65 63 72 52 65 66  -....Tcl_DecrRef
2190: 43 6f 75 6e 74 28 6d 61 70 4f 62 6a 29 3b 0a 2d  Count(mapObj);.-
21a0: 09 09 09 20 20 20 20 7d 0a 20 09 09 09 20 20 20  ...    }. ...   
21b0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
21c0: 52 3b 0a 20 09 09 09 7d 0a 20 09 09 09 69 66 20  R;. ...}. ...if 
21d0: 28 6c 65 6e 20 3c 20 31 29 20 7b 0a 40 40 20 2d  (len < 1) {.@@ -
21e0: 35 33 37 35 2c 33 39 20 2b 35 33 31 36 2c 31 31  5375,39 +5316,11
21f0: 20 40 40 0a 20 09 09 09 09 20 20 20 20 22 65 6e   @@. ....    "en
2200: 73 65 6d 62 6c 65 20 73 75 62 63 6f 6d 6d 61 6e  semble subcomman
2210: 64 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  d implementation
2220: 73 20 22 0a 20 09 09 09 09 20 20 20 20 22 6d 75  s ". ....    "mu
2230: 73 74 20 62 65 20 6e 6f 6e 2d 65 6d 70 74 79 20  st be non-empty 
2240: 6c 69 73 74 73 22 2c 20 54 43 4c 5f 53 54 41 54  lists", TCL_STAT
2250: 49 43 29 3b 0a 20 09 09 09 20 20 20 20 54 63 6c  IC);. ...    Tcl
2260: 5f 44 69 63 74 4f 62 6a 44 6f 6e 65 28 26 73 65  _DictObjDone(&se
2270: 61 72 63 68 29 3b 0a 2d 09 09 09 20 20 20 20 69  arch);.-...    i
2280: 66 20 28 70 61 74 63 68 65 64 44 69 63 74 29 20  f (patchedDict) 
2290: 7b 0a 2d 09 09 09 09 54 63 6c 5f 44 65 63 72 52  {.-....Tcl_DecrR
22a0: 65 66 43 6f 75 6e 74 28 70 61 74 63 68 65 64 44  efCount(patchedD
22b0: 69 63 74 29 3b 0a 2d 09 09 09 20 20 20 20 7d 0a  ict);.-...    }.
22c0: 2d 09 09 09 20 20 20 20 69 66 20 28 61 6c 6c 6f  -...    if (allo
22d0: 63 61 74 65 64 4d 61 70 46 6c 61 67 29 20 7b 0a  catedMapFlag) {.
22e0: 2d 09 09 09 09 54 63 6c 5f 44 65 63 72 52 65 66  -....Tcl_DecrRef
22f0: 43 6f 75 6e 74 28 6d 61 70 4f 62 6a 29 3b 0a 2d  Count(mapObj);.-
2300: 09 09 09 20 20 20 20 7d 0a 20 09 09 09 20 20 20  ...    }. ...   
2310: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
2320: 52 3b 0a 20 09 09 09 7d 0a 2d 09 09 09 63 6d 64  R;. ...}.-...cmd
2330: 20 3d 20 54 63 6c 47 65 74 53 74 72 69 6e 67 28   = TclGetString(
2340: 6c 69 73 74 76 5b 30 5d 29 3b 0a 2d 09 09 09 69  listv[0]);.-...i
2350: 66 20 28 21 28 63 6d 64 5b 30 5d 20 3d 3d 20 27  f (!(cmd[0] == '
2360: 3a 27 20 26 26 20 63 6d 64 5b 31 5d 20 3d 3d 20  :' && cmd[1] == 
2370: 27 3a 27 29 29 20 7b 0a 2d 09 09 09 20 20 20 20  ':')) {.-...    
2380: 54 63 6c 5f 4f 62 6a 20 2a 6e 65 77 4c 69 73 74  Tcl_Obj *newList
2390: 20 3d 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f 62   = Tcl_NewListOb
23a0: 6a 28 6c 65 6e 2c 20 6c 69 73 74 76 29 3b 0a 2d  j(len, listv);.-
23b0: 09 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a  ...    Tcl_Obj *
23c0: 6e 65 77 43 6d 64 20 3d 0a 2d 09 09 09 09 20 20  newCmd =.-....  
23d0: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
23e0: 62 6a 28 6e 73 50 74 72 2d 3e 66 75 6c 6c 4e 61  bj(nsPtr->fullNa
23f0: 6d 65 2c 20 2d 31 29 3b 0a 2d 09 09 09 20 20 20  me, -1);.-...   
2400: 20 69 66 20 28 6e 73 50 74 72 2d 3e 70 61 72 65   if (nsPtr->pare
2410: 6e 74 50 74 72 29 20 7b 0a 2d 09 09 09 09 54 63  ntPtr) {.-....Tc
2420: 6c 5f 41 70 70 65 6e 64 53 74 72 69 6e 67 73 54  l_AppendStringsT
2430: 6f 4f 62 6a 28 6e 65 77 43 6d 64 2c 20 22 3a 3a  oObj(newCmd, "::
2440: 22 2c 20 4e 55 4c 4c 29 3b 0a 2d 09 09 09 20 20  ", NULL);.-...  
2450: 20 20 7d 0a 2d 09 09 09 20 20 20 20 54 63 6c 5f    }.-...    Tcl_
2460: 41 70 70 65 6e 64 4f 62 6a 54 6f 4f 62 6a 28 6e  AppendObjToObj(n
2470: 65 77 43 6d 64 2c 20 6c 69 73 74 76 5b 30 5d 29  ewCmd, listv[0])
2480: 3b 0a 2d 09 09 09 20 20 20 20 54 63 6c 5f 4c 69  ;.-...    Tcl_Li
2490: 73 74 4f 62 6a 52 65 70 6c 61 63 65 28 4e 55 4c  stObjReplace(NUL
24a0: 4c 2c 20 6e 65 77 4c 69 73 74 2c 20 30 2c 31 2c  L, newList, 0,1,
24b0: 20 31 2c 26 6e 65 77 43 6d 64 29 3b 0a 2d 09 09   1,&newCmd);.-..
24c0: 09 20 20 20 20 69 66 20 28 70 61 74 63 68 65 64  .    if (patched
24d0: 44 69 63 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  Dict == NULL) {.
24e0: 2d 09 09 09 09 70 61 74 63 68 65 64 44 69 63 74  -....patchedDict
24f0: 20 3d 20 54 63 6c 5f 44 75 70 6c 69 63 61 74 65   = Tcl_Duplicate
2500: 4f 62 6a 28 6f 62 6a 76 5b 31 5d 29 3b 0a 2d 09  Obj(objv[1]);.-.
2510: 09 09 20 20 20 20 7d 0a 2d 09 09 09 20 20 20 20  ..    }.-...    
2520: 54 63 6c 5f 44 69 63 74 4f 62 6a 50 75 74 28 4e  Tcl_DictObjPut(N
2530: 55 4c 4c 2c 20 70 61 74 63 68 65 64 44 69 63 74  ULL, patchedDict
2540: 2c 20 73 75 62 63 6d 64 4f 62 6a 2c 0a 2d 09 09  , subcmdObj,.-..
2550: 09 09 20 20 20 20 6e 65 77 4c 69 73 74 29 3b 0a  ..    newList);.
2560: 2d 09 09 09 7d 0a 20 09 09 09 54 63 6c 5f 44 69  -...}. ...Tcl_Di
2570: 63 74 4f 62 6a 4e 65 78 74 28 26 73 65 61 72 63  ctObjNext(&searc
2580: 68 2c 20 26 73 75 62 63 6d 64 4f 62 6a 2c 20 26  h, &subcmdObj, &
2590: 6c 69 73 74 4f 62 6a 2c 20 26 64 6f 6e 65 29 3b  listObj, &done);
25a0: 0a 20 09 09 20 20 20 20 7d 20 77 68 69 6c 65 20  . ..    } while 
25b0: 28 21 64 6f 6e 65 29 3b 0a 2d 09 09 20 20 20 20  (!done);.-..    
25c0: 69 66 20 28 61 6c 6c 6f 63 61 74 65 64 4d 61 70  if (allocatedMap
25d0: 46 6c 61 67 29 20 7b 0a 2d 09 09 09 54 63 6c 5f  Flag) {.-...Tcl_
25e0: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 6d 61 70  DecrRefCount(map
25f0: 4f 62 6a 29 3b 0a 2d 09 09 20 20 20 20 7d 0a 2d  Obj);.-..    }.-
2600: 09 09 20 20 20 20 6d 61 70 4f 62 6a 20 3d 20 28  ..    mapObj = (
2610: 70 61 74 63 68 65 64 44 69 63 74 20 3f 20 70 61  patchedDict ? pa
2620: 74 63 68 65 64 44 69 63 74 20 3a 20 6f 62 6a 76  tchedDict : objv
2630: 5b 31 5d 29 3b 0a 2d 09 09 20 20 20 20 69 66 20  [1]);.-..    if 
2640: 28 70 61 74 63 68 65 64 44 69 63 74 29 20 7b 0a  (patchedDict) {.
2650: 2d 09 09 09 61 6c 6c 6f 63 61 74 65 64 4d 61 70  -...allocatedMap
2660: 46 6c 61 67 20 3d 20 31 3b 0a 2d 09 09 20 20 20  Flag = 1;.-..   
2670: 20 7d 0a 2b 09 09 20 20 20 20 6d 61 70 4f 62 6a   }.+..    mapObj
2680: 20 3d 20 6f 62 6a 76 5b 31 5d 3b 0a 20 09 09 20   = objv[1];. .. 
2690: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 09 09     continue;. ..
26a0: 7d 0a 20 09 09 63 61 73 65 20 43 4f 4e 46 5f 4e  }. ..case CONF_N
26b0: 41 4d 45 53 50 41 43 45 3a 0a 40 40 20 2d 36 32  AMESPACE:.@@ -62
26c0: 37 37 2c 36 20 2b 36 31 39 30 2c 37 20 40 40 0a  77,6 +6190,7 @@.
26d0: 20 09 09 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62   ..sizeof(Tcl_Ob
26e0: 6a 20 2a 29 20 2a 20 28 6f 62 6a 63 20 2d 20 32  j *) * (objc - 2
26f0: 20 2b 20 70 72 65 66 69 78 4f 62 6a 63 29 29 3b   + prefixObjc));
2700: 0a 20 09 6d 65 6d 63 70 79 28 74 65 6d 70 4f 62  . .memcpy(tempOb
2710: 6a 76 2c 20 70 72 65 66 69 78 4f 62 6a 76 2c 20  jv, prefixObjv, 
2720: 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a 20 2a  sizeof(Tcl_Obj *
2730: 29 20 2a 20 70 72 65 66 69 78 4f 62 6a 63 29 3b  ) * prefixObjc);
2740: 0a 20 09 6d 65 6d 63 70 79 28 74 65 6d 70 4f 62  . .memcpy(tempOb
2750: 6a 76 2b 70 72 65 66 69 78 4f 62 6a 63 2c 20 6f  jv+prefixObjc, o
2760: 62 6a 76 2b 32 2c 20 73 69 7a 65 6f 66 28 54 63  bjv+2, sizeof(Tc
2770: 6c 5f 4f 62 6a 20 2a 29 20 2a 20 28 6f 62 6a 63  l_Obj *) * (objc
2780: 2d 32 29 29 3b 0a 2b 09 69 50 74 72 2d 3e 6c 6f  -2));.+.iPtr->lo
2790: 6f 6b 75 70 4e 73 50 74 72 20 3d 20 65 6e 73 65  okupNsPtr = ense
27a0: 6d 62 6c 65 50 74 72 2d 3e 6e 73 50 74 72 3b 0a  mblePtr->nsPtr;.
27b0: 20 09 72 65 73 75 6c 74 20 3d 20 54 63 6c 5f 45   .result = Tcl_E
27c0: 76 61 6c 4f 62 6a 76 28 69 6e 74 65 72 70 2c 20  valObjv(interp, 
27d0: 6f 62 6a 63 2d 32 2b 70 72 65 66 69 78 4f 62 6a  objc-2+prefixObj
27e0: 63 2c 20 74 65 6d 70 4f 62 6a 76 2c 0a 20 09 09  c, tempObjv,. ..
27f0: 54 43 4c 5f 45 56 41 4c 5f 49 4e 56 4f 4b 45 29  TCL_EVAL_INVOKE)
2800: 3b 0a 20 09 54 63 6c 5f 44 65 63 72 52 65 66 43  ;. .Tcl_DecrRefC
2810: 6f 75 6e 74 28 70 72 65 66 69 78 4f 62 6a 29 3b  ount(prefixObj);
2820: 0a 40 40 20 2d 36 32 39 38 2c 36 20 2b 36 32 31  .@@ -6298,6 +621
2830: 32 2c 37 20 40 40 0a 20 20 20 20 20 20 2a 2f 0a  2,7 @@.      */.
2840: 20 0a 20 20 20 20 20 69 66 20 28 65 6e 73 65 6d   .     if (ensem
2850: 62 6c 65 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e 48  blePtr->unknownH
2860: 61 6e 64 6c 65 72 20 21 3d 20 4e 55 4c 4c 20 26  andler != NULL &
2870: 26 20 72 65 70 61 72 73 65 43 6f 75 6e 74 2b 2b  & reparseCount++
2880: 20 3c 20 31 29 20 7b 0a 2b 09 49 6e 74 65 72 70   < 1) {.+.Interp
2890: 20 2a 69 50 74 72 20 3d 20 28 49 6e 74 65 72 70   *iPtr = (Interp
28a0: 20 2a 29 20 69 6e 74 65 72 70 3b 0a 20 09 69 6e   *) interp;. .in
28b0: 74 20 70 61 72 61 6d 63 2c 20 69 3b 0a 20 09 54  t paramc, i;. .T
28c0: 63 6c 5f 4f 62 6a 20 2a 2a 70 61 72 61 6d 76 2c  cl_Obj **paramv,
28d0: 20 2a 75 6e 6b 6e 6f 77 6e 43 6d 64 2c 20 2a 65   *unknownCmd, *e
28e0: 6e 73 4f 62 6a 3b 0a 20 0a 40 40 20 2d 36 33 31  nsObj;. .@@ -631
28f0: 31 2c 36 20 2b 36 32 32 36 2c 37 20 40 40 0a 20  1,6 +6226,7 @@. 
2900: 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45  .Tcl_ListObjGetE
2910: 6c 65 6d 65 6e 74 73 28 4e 55 4c 4c 2c 20 75 6e  lements(NULL, un
2920: 6b 6e 6f 77 6e 43 6d 64 2c 20 26 70 61 72 61 6d  knownCmd, &param
2930: 63 2c 20 26 70 61 72 61 6d 76 29 3b 0a 20 09 54  c, &paramv);. .T
2940: 63 6c 5f 50 72 65 73 65 72 76 65 28 65 6e 73 65  cl_Preserve(ense
2950: 6d 62 6c 65 50 74 72 29 3b 0a 20 09 54 63 6c 5f  mblePtr);. .Tcl_
2960: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 75 6e 6b  IncrRefCount(unk
2970: 6e 6f 77 6e 43 6d 64 29 3b 0a 2b 09 69 50 74 72  nownCmd);.+.iPtr
2980: 2d 3e 6c 6f 6f 6b 75 70 4e 73 50 74 72 20 3d 20  ->lookupNsPtr = 
2990: 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e 73 50  ensemblePtr->nsP
29a0: 74 72 3b 0a 20 09 72 65 73 75 6c 74 20 3d 20 54  tr;. .result = T
29b0: 63 6c 5f 45 76 61 6c 4f 62 6a 76 28 69 6e 74 65  cl_EvalObjv(inte
29c0: 72 70 2c 20 70 61 72 61 6d 63 2c 20 70 61 72 61  rp, paramc, para
29d0: 6d 76 2c 20 30 29 3b 0a 20 09 69 66 20 28 72 65  mv, 0);. .if (re
29e0: 73 75 6c 74 20 3d 3d 20 54 43 4c 5f 4f 4b 29 20  sult == TCL_OK) 
29f0: 7b 0a 20 09 20 20 20 20 70 72 65 66 69 78 4f 62  {. .    prefixOb
2a00: 6a 20 3d 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65  j = Tcl_GetObjRe
2a10: 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 40 40  sult(interp);.@@
2a20: 20 2d 36 36 36 37 2c 31 32 20 2b 36 35 38 33 2c   -6667,12 +6583,
2a30: 37 20 40 40 0a 20 09 20 20 20 20 20 2a 20 74 68  7 @@. .     * th
2a40: 65 20 70 72 6f 67 72 61 6d 6d 65 72 27 73 20 72  e programmer's r
2a50: 65 73 70 6f 6e 73 69 62 69 6c 69 74 79 20 28 6f  esponsibility (o
2a60: 72 20 5b 3a 3a 75 6e 6b 6e 6f 77 6e 5d 20 6f 66  r [::unknown] of
2a70: 20 63 6f 75 72 73 65 29 2e 0a 20 09 20 20 20 20   course).. .    
2a80: 20 2a 2f 0a 20 0a 2d 09 20 20 20 20 63 6d 64 4f   */. .-.    cmdO
2a90: 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69  bj = Tcl_NewStri
2aa0: 6e 67 4f 62 6a 28 65 6e 73 65 6d 62 6c 65 50 74  ngObj(ensemblePt
2ab0: 72 2d 3e 6e 73 50 74 72 2d 3e 66 75 6c 6c 4e 61  r->nsPtr->fullNa
2ac0: 6d 65 2c 20 2d 31 29 3b 0a 2d 09 20 20 20 20 69  me, -1);.-.    i
2ad0: 66 20 28 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e  f (ensemblePtr->
2ae0: 6e 73 50 74 72 2d 3e 70 61 72 65 6e 74 50 74 72  nsPtr->parentPtr
2af0: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 09 09 54   != NULL) {.-..T
2b00: 63 6c 5f 41 70 70 65 6e 64 53 74 72 69 6e 67 73  cl_AppendStrings
2b10: 54 6f 4f 62 6a 28 63 6d 64 4f 62 6a 2c 20 22 3a  ToObj(cmdObj, ":
2b20: 3a 22 2c 20 6e 61 6d 65 2c 20 4e 55 4c 4c 29 3b  :", name, NULL);
2b30: 0a 2d 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  .-.    } else {.
2b40: 2d 09 09 54 63 6c 5f 41 70 70 65 6e 64 53 74 72  -..Tcl_AppendStr
2b50: 69 6e 67 73 54 6f 4f 62 6a 28 63 6d 64 4f 62 6a  ingsToObj(cmdObj
2b60: 2c 20 6e 61 6d 65 2c 20 4e 55 4c 4c 29 3b 0a 2d  , name, NULL);.-
2b70: 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 63 6d 64  .    }.+.    cmd
2b80: 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72  Obj = Tcl_NewStr
2b90: 69 6e 67 4f 62 6a 28 6e 61 6d 65 2c 20 2d 31 29  ingObj(name, -1)
2ba0: 3b 0a 20 09 20 20 20 20 63 6d 64 50 72 65 66 69  ;. .    cmdPrefi
2bb0: 78 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 4c 69  xObj = Tcl_NewLi
2bc0: 73 74 4f 62 6a 28 31 2c 20 26 63 6d 64 4f 62 6a  stObj(1, &cmdObj
2bd0: 29 3b 0a 20 09 20 20 20 20 54 63 6c 5f 53 65 74  );. .    Tcl_Set
2be0: 48 61 73 68 56 61 6c 75 65 28 68 50 74 72 2c 20  HashValue(hPtr, 
2bf0: 28 43 6c 69 65 6e 74 44 61 74 61 29 20 63 6d 64  (ClientData) cmd
2c00: 50 72 65 66 69 78 4f 62 6a 29 3b 0a 20 09 20 20  PrefixObj);. .  
2c10: 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75    Tcl_IncrRefCou
2c20: 6e 74 28 63 6d 64 50 72 65 66 69 78 4f 62 6a 29  nt(cmdPrefixObj)
2c30: 3b 0a 40 40 20 2d 36 37 33 33 2c 31 31 20 2b 36  ;.@@ -6733,11 +6
2c40: 36 34 34 2c 37 20 40 40 0a 20 09 09 20 20 20 20  644,7 @@. ..    
2c50: 69 66 20 28 69 73 4e 65 77 29 20 7b 0a 20 09 09  if (isNew) {. ..
2c60: 09 54 63 6c 5f 4f 62 6a 20 2a 63 6d 64 4f 62 6a  .Tcl_Obj *cmdObj
2c70: 2c 20 2a 63 6d 64 50 72 65 66 69 78 4f 62 6a 3b  , *cmdPrefixObj;
2c80: 0a 20 0a 2d 09 09 09 54 63 6c 4e 65 77 4f 62 6a  . .-...TclNewObj
2c90: 28 63 6d 64 4f 62 6a 29 3b 0a 2d 09 09 09 54 63  (cmdObj);.-...Tc
2ca0: 6c 5f 41 70 70 65 6e 64 53 74 72 69 6e 67 73 54  l_AppendStringsT
2cb0: 6f 4f 62 6a 28 63 6d 64 4f 62 6a 2c 0a 2d 09 09  oObj(cmdObj,.-..
2cc0: 09 09 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e  ..ensemblePtr->n
2cd0: 73 50 74 72 2d 3e 66 75 6c 6c 4e 61 6d 65 2c 0a  sPtr->fullName,.
2ce0: 2d 09 09 09 09 28 65 6e 73 65 6d 62 6c 65 50 74  -....(ensemblePt
2cf0: 72 2d 3e 6e 73 50 74 72 2d 3e 70 61 72 65 6e 74  r->nsPtr->parent
2d00: 50 74 72 20 3f 20 22 3a 3a 22 20 3a 20 22 22 29  Ptr ? "::" : "")
2d10: 2c 0a 2d 09 09 09 09 6e 73 43 6d 64 4e 61 6d 65  ,.-....nsCmdName
2d20: 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 09 09 63 6d 64  , NULL);.+...cmd
2d30: 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72  Obj = Tcl_NewStr
2d40: 69 6e 67 4f 62 6a 28 6e 73 43 6d 64 4e 61 6d 65  ingObj(nsCmdName
2d50: 2c 20 2d 31 29 3b 0a 20 09 09 09 63 6d 64 50 72  , -1);. ...cmdPr
2d60: 65 66 69 78 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65  efixObj = Tcl_Ne
2d70: 77 4c 69 73 74 4f 62 6a 28 31 2c 20 26 63 6d 64  wListObj(1, &cmd
2d80: 4f 62 6a 29 3b 0a 20 09 09 09 54 63 6c 5f 53 65  Obj);. ...Tcl_Se
2d90: 74 48 61 73 68 56 61 6c 75 65 28 68 50 74 72 2c  tHashValue(hPtr,
2da0: 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20 63 6d   (ClientData) cm
2db0: 64 50 72 65 66 69 78 4f 62 6a 29 3b 0a 20 09 09  dPrefixObj);. ..
2dc0: 09 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e  .Tcl_IncrRefCoun
2dd0: 74 28 63 6d 64 50 72 65 66 69 78 4f 62 6a 29 3b  t(cmdPrefixObj);
2de0: 0a 49 6e 64 65 78 3a 20 74 65 73 74 73 2f 6e 61  .Index: tests/na
2df0: 6d 65 73 70 61 63 65 2e 74 65 73 74 0a 3d 3d 3d  mespace.test.===
2e00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2e10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2e20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2e30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2e40: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72  .RCS file: /cvsr
2e50: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 74 65 73 74  oot/tcl/tcl/test
2e60: 73 2f 6e 61 6d 65 73 70 61 63 65 2e 74 65 73 74  s/namespace.test
2e70: 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65  ,v.retrieving re
2e80: 76 69 73 69 6f 6e 20 31 2e 36 31 0a 64 69 66 66  vision 1.61.diff
2e90: 20 2d 75 20 2d 72 31 2e 36 31 20 6e 61 6d 65 73   -u -r1.61 names
2ea0: 70 61 63 65 2e 74 65 73 74 0a 2d 2d 2d 20 74 65  pace.test.--- te
2eb0: 73 74 73 2f 6e 61 6d 65 73 70 61 63 65 2e 74 65  sts/namespace.te
2ec0: 73 74 09 33 31 20 4f 63 74 20 32 30 30 36 20 31  st.31 Oct 2006 1
2ed0: 33 3a 34 36 3a 33 33 20 2d 30 30 30 30 09 31 2e  3:46:33 -0000.1.
2ee0: 36 31 0a 2b 2b 2b 20 74 65 73 74 73 2f 6e 61 6d  61.+++ tests/nam
2ef0: 65 73 70 61 63 65 2e 74 65 73 74 09 31 20 4e 6f  espace.test.1 No
2f00: 76 20 32 30 30 36 20 32 30 3a 32 36 3a 34 32 20  v 2006 20:26:42 
2f10: 2d 30 30 30 30 0a 40 40 20 2d 31 35 32 39 2c 37  -0000.@@ -1529,7
2f20: 20 2b 31 35 32 39 2c 37 20 40 40 0a 20 20 20 20   +1529,7 @@.    
2f30: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73   set result [lis
2f40: 74 20 5b 6e 73 20 78 30 20 7a 5d 20 5b 6e 73 20  t [ns x0 z] [ns 
2f50: 78 31 5d 20 5b 6e 73 20 78 32 5d 20 5b 6e 73 20  x1] [ns x2] [ns 
2f60: 78 33 5d 5d 0a 20 20 20 20 20 6e 61 6d 65 73 70  x3]].     namesp
2f70: 61 63 65 20 64 65 6c 65 74 65 20 6e 73 0a 20 20  ace delete ns.  
2f80: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 2d 7d     set result.-}
2f90: 20 7b 7b 31 20 3a 3a 6e 73 3a 3a 78 30 3a 3a 7a   {{1 ::ns::x0::z
2fa0: 7d 20 31 20 32 20 33 7d 0a 2b 7d 20 7b 7b 31 20  } 1 2 3}.+} {{1 
2fb0: 7a 7d 20 31 20 32 20 33 7d 0a 20 0a 20 74 65 73  z} 1 2 3}. . tes
2fc0: 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 33 2e 31  t namespace-43.1
2fd0: 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 64 69 63   {ensembles: dic
2fe0: 74 2d 64 72 69 76 65 6e 7d 20 7b 0a 20 20 20 20  t-driven} {.    
2ff0: 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20   namespace eval 
3000: 6e 73 20 7b 0a 40 40 20 2d 31 35 35 35 2c 36 20  ns {.@@ -1555,6 
3010: 2b 31 35 35 35 2c 31 39 20 40 40 0a 20 20 20 20  +1555,19 @@.    
3020: 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74   namespace delet
3030: 65 20 6e 73 0a 20 20 20 20 20 73 65 74 20 72 65  e ns.     set re
3040: 73 75 6c 74 0a 20 7d 20 7b 7b 31 20 7b 7d 7d 20  sult. } {{1 {}} 
3050: 7b 32 20 30 7d 20 7b 31 20 2e 7d 20 7b 31 20 7b  {2 0} {1 .} {1 {
3060: 2e 20 66 6f 6f 7d 7d 20 7b 32 20 31 7d 20 7b 32  . foo}} {2 1} {2
3070: 20 32 7d 7d 0a 2b 74 65 73 74 20 6e 61 6d 65 73   2}}.+test names
3080: 70 61 63 65 2d 34 33 2e 32 2e 61 20 7b 65 6e 73  pace-43.2.a {ens
3090: 65 6d 62 6c 65 73 3a 20 64 69 63 74 2d 64 72 69  embles: dict-dri
30a0: 76 65 6e 7d 20 7b 0a 2b 20 20 20 20 6e 61 6d 65  ven} {.+    name
30b0: 73 70 61 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a  space eval ns {.
30c0: 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f  +.namespace expo
30d0: 72 74 20 78 2a 0a 2b 09 70 72 6f 63 20 78 31 20  rt x*.+.proc x1 
30e0: 7b 61 72 67 73 7d 20 7b 6c 69 73 74 20 31 20 24  {args} {list 1 $
30f0: 61 72 67 73 7d 0a 2b 09 70 72 6f 63 20 78 32 20  args}.+.proc x2 
3100: 7b 61 72 67 73 7d 20 7b 6c 69 73 74 20 32 20 5b  {args} {list 2 [
3110: 6c 6c 65 6e 67 74 68 20 24 61 72 67 73 5d 7d 0a  llength $args]}.
3120: 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65  +.namespace ense
3130: 6d 62 6c 65 20 63 72 65 61 74 65 20 2d 6d 61 70  mble create -map
3140: 20 7b 0a 2b 09 20 20 20 20 61 20 78 31 20 62 20   {.+.    a x1 b 
3150: 78 32 20 63 20 7b 78 31 20 2e 7d 20 64 20 7b 78  x2 c {x1 .} d {x
3160: 32 20 2e 7d 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a  2 .}.+.}.+    }.
3170: 2b 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20  +    set result 
3180: 5b 6c 69 73 74 20 5b 6e 73 20 61 5d 20 5b 6e 73  [list [ns a] [ns
3190: 20 62 5d 20 5b 6e 73 20 63 5d 20 5b 6e 73 20 63   b] [ns c] [ns c
31a0: 20 66 6f 6f 5d 20 5b 6e 73 20 64 5d 20 5b 6e 73   foo] [ns d] [ns
31b0: 20 64 20 66 6f 6f 5d 5d 0a 2b 20 20 20 20 6e 61   d foo]].+    na
31c0: 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e  mespace delete n
31d0: 73 0a 2b 20 20 20 20 73 65 74 20 72 65 73 75 6c  s.+    set resul
31e0: 74 0a 2b 7d 20 7b 7b 31 20 7b 7d 7d 20 7b 32 20  t.+} {{1 {}} {2 
31f0: 30 7d 20 7b 31 20 2e 7d 20 7b 31 20 7b 2e 20 66  0} {1 .} {1 {. f
3200: 6f 6f 7d 7d 20 7b 32 20 31 7d 20 7b 32 20 32 7d  oo}} {2 1} {2 2}
3210: 7d 0a 20 73 65 74 20 53 45 54 55 50 20 7b 0a 20  }. set SETUP {. 
3220: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76      namespace ev
3230: 61 6c 20 6e 73 20 7b 0a 20 09 6e 61 6d 65 73 70  al ns {. .namesp
3240: 61 63 65 20 65 78 70 6f 72 74 20 61 20 62 0a 40  ace export a b.@
3250: 40 20 2d 31 35 38 38 2c 36 20 2b 31 36 30 31 2c  @ -1588,6 +1601,
3260: 37 20 40 40 0a 20 09 70 72 6f 63 20 63 20 61 72  7 @@. .proc c ar
3270: 67 73 20 7b 66 6f 72 6d 61 74 20 33 2c 5b 6c 6c  gs {format 3,[ll
3280: 65 6e 67 74 68 20 24 61 72 67 73 5d 7d 0a 20 09  ength $args]}. .
3290: 70 72 6f 63 20 64 20 61 72 67 73 20 7b 66 6f 72  proc d args {for
32a0: 6d 61 74 20 34 2c 5b 6c 6c 65 6e 67 74 68 20 24  mat 4,[llength $
32b0: 61 72 67 73 5d 7d 0a 20 09 6e 61 6d 65 73 70 61  args]}. .namespa
32c0: 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 72 65 61  ce ensemble crea
32d0: 74 65 20 2d 73 75 62 63 6f 6d 6d 61 6e 64 73 20  te -subcommands 
32e0: 7b 62 20 63 7d 20 2d 6d 61 70 20 7b 63 20 3a 3a  {b c} -map {c ::
32f0: 6e 73 3a 3a 64 7d 0a 2b 09 6e 61 6d 65 73 70 61  ns::d}.+.namespa
3300: 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 72 65 61  ce ensemble crea
3310: 74 65 20 2d 63 6f 6d 6d 61 6e 64 20 3a 3a 6e 73  te -command ::ns
3320: 61 20 2d 73 75 62 63 6f 6d 6d 61 6e 64 73 20 7b  a -subcommands {
3330: 62 20 63 7d 20 2d 6d 61 70 20 7b 63 20 64 7d 0a  b c} -map {c d}.
3340: 20 20 20 20 20 7d 0a 20 7d 0a 20 74 65 73 74 20       }. }. test 
3350: 6e 61 6d 65 73 70 61 63 65 2d 34 33 2e 38 20 7b  namespace-43.8 {
3360: 65 6e 73 65 6d 62 6c 65 73 3a 20 6c 69 73 74 2d  ensembles: list-
3370: 61 6e 64 2d 6d 61 70 2d 64 72 69 76 65 6e 7d 20  and-map-driven} 
3380: 2d 73 65 74 75 70 20 24 53 45 54 55 50 20 2d 62  -setup $SETUP -b
3390: 6f 64 79 20 7b 0a 40 40 20 2d 31 35 39 39 2c 39  ody {.@@ -1599,9
33a0: 20 2b 31 36 31 33 2c 31 35 20 40 40 0a 20 74 65   +1613,15 @@. te
33b0: 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 33 2e  st namespace-43.
33c0: 31 30 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 6c  10 {ensembles: l
33d0: 69 73 74 2d 61 6e 64 2d 6d 61 70 2d 64 72 69 76  ist-and-map-driv
33e0: 65 6e 7d 20 2d 73 65 74 75 70 20 24 53 45 54 55  en} -setup $SETU
33f0: 50 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 20 6e  P -body {.     n
3400: 73 20 62 20 66 6f 6f 20 62 61 72 20 62 6f 6f 20  s b foo bar boo 
3410: 73 70 6f 6e 67 20 77 69 62 62 6c 65 0a 20 7d 20  spong wibble. } 
3420: 2d 63 6c 65 61 6e 75 70 20 7b 6e 61 6d 65 73 70  -cleanup {namesp
3430: 61 63 65 20 64 65 6c 65 74 65 20 6e 73 7d 20 2d  ace delete ns} -
3440: 72 65 73 75 6c 74 20 32 2c 35 0a 2b 74 65 73 74  result 2,5.+test
3450: 20 6e 61 6d 65 73 70 61 63 65 2d 34 33 2e 31 30   namespace-43.10
3460: 61 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 6c 69  a {ensembles: li
3470: 73 74 2d 61 6e 64 2d 6d 61 70 2d 64 72 69 76 65  st-and-map-drive
3480: 6e 7d 20 2d 73 65 74 75 70 20 24 53 45 54 55 50  n} -setup $SETUP
3490: 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 6e 73   -body {.+    ns
34a0: 61 20 62 20 66 6f 6f 20 62 61 72 20 62 6f 6f 20  a b foo bar boo 
34b0: 73 70 6f 6e 67 20 77 69 62 62 6c 65 0a 2b 7d 20  spong wibble.+} 
34c0: 2d 63 6c 65 61 6e 75 70 20 7b 6e 61 6d 65 73 70  -cleanup {namesp
34d0: 61 63 65 20 64 65 6c 65 74 65 20 6e 73 7d 20 2d  ace delete ns} -
34e0: 72 65 73 75 6c 74 20 32 2c 35 0a 20 74 65 73 74  result 2,5. test
34f0: 20 6e 61 6d 65 73 70 61 63 65 2d 34 33 2e 31 31   namespace-43.11
3500: 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 6c 69 73   {ensembles: lis
3510: 74 2d 61 6e 64 2d 6d 61 70 2d 64 72 69 76 65 6e  t-and-map-driven
3520: 7d 20 2d 73 65 74 75 70 20 24 53 45 54 55 50 20  } -setup $SETUP 
3530: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 20 6e 73 20  -body {.     ns 
3540: 63 20 66 6f 6f 20 62 61 72 20 62 6f 6f 20 73 70  c foo bar boo sp
3550: 6f 6e 67 20 77 69 62 62 6c 65 0a 20 7d 20 2d 63  ong wibble. } -c
3560: 6c 65 61 6e 75 70 20 7b 6e 61 6d 65 73 70 61 63  leanup {namespac
3570: 65 20 64 65 6c 65 74 65 20 6e 73 7d 20 2d 72 65  e delete ns} -re
3580: 73 75 6c 74 20 34 2c 35 0a 2b 74 65 73 74 20 6e  sult 4,5.+test n
3590: 61 6d 65 73 70 61 63 65 2d 34 33 2e 31 31 2e 61  amespace-43.11.a
35a0: 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 6c 69 73   {ensembles: lis
35b0: 74 2d 61 6e 64 2d 6d 61 70 2d 64 72 69 76 65 6e  t-and-map-driven
35c0: 7d 20 2d 73 65 74 75 70 20 24 53 45 54 55 50 20  } -setup $SETUP 
35d0: 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 6e 73 61  -body {.+    nsa
35e0: 20 63 20 66 6f 6f 20 62 61 72 20 62 6f 6f 20 73   c foo bar boo s
35f0: 70 6f 6e 67 20 77 69 62 62 6c 65 0a 2b 7d 20 2d  pong wibble.+} -
3600: 63 6c 65 61 6e 75 70 20 7b 6e 61 6d 65 73 70 61  cleanup {namespa
3610: 63 65 20 64 65 6c 65 74 65 20 6e 73 7d 20 2d 72  ce delete ns} -r
3620: 65 73 75 6c 74 20 34 2c 35 0a 20 74 65 73 74 20  esult 4,5. test 
3630: 6e 61 6d 65 73 70 61 63 65 2d 34 33 2e 31 32 20  namespace-43.12 
3640: 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 6c 69 73 74  {ensembles: list
3650: 2d 61 6e 64 2d 6d 61 70 2d 64 72 69 76 65 6e 7d  -and-map-driven}
3660: 20 2d 73 65 74 75 70 20 24 53 45 54 55 50 20 2d   -setup $SETUP -
3670: 62 6f 64 79 20 7b 0a 20 20 20 20 20 6e 73 20 64  body {.     ns d
3680: 20 66 6f 6f 20 62 61 72 20 62 6f 6f 20 73 70 6f   foo bar boo spo
3690: 6e 67 20 77 69 62 62 6c 65 0a 20 7d 20 2d 63 6c  ng wibble. } -cl
36a0: 65 61 6e 75 70 20 7b 6e 61 6d 65 73 70 61 63 65  eanup {namespace
36b0: 20 64 65 6c 65 74 65 20 6e 73 7d 20 2d 72 65 74   delete ns} -ret
36c0: 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d  urnCodes error -
36d0: 72 65 73 75 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20  result {unknown 
36e0: 6f 72 20 61 6d 62 69 67 75 6f 75 73 20 73 75 62  or ambiguous sub
36f0: 63 6f 6d 6d 61 6e 64 20 22 64 22 3a 20 6d 75 73  command "d": mus
3700: 74 20 62 65 20 62 2c 20 6f 72 20 63 7d 0a 40 40  t be b, or c}.@@
3710: 20 2d 31 36 35 31 2c 37 20 2b 31 36 37 31 2c 37   -1651,7 +1671,7
3720: 20 40 40 0a 20 20 20 20 20 66 6f 6f 62 61 72 20   @@.     foobar 
3730: 66 6f 6f 62 61 72 63 6f 6e 0a 20 7d 20 2d 63 6c  foobarcon. } -cl
3740: 65 61 6e 75 70 20 7b 0a 20 20 20 20 20 72 65 6e  eanup {.     ren
3750: 61 6d 65 20 66 6f 6f 62 61 72 20 7b 7d 0a 2d 7d  ame foobar {}.-}
3760: 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72   -returnCodes er
3770: 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 69 6e 76  ror -result {inv
3780: 61 6c 69 64 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d  alid command nam
3790: 65 20 22 3a 3a 66 6f 6f 62 61 72 63 6f 6e 66 69  e "::foobarconfi
37a0: 67 75 72 65 22 7d 0a 2b 7d 20 2d 72 65 74 75 72  gure"}.+} -retur
37b0: 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65  nCodes error -re
37c0: 73 75 6c 74 20 7b 69 6e 76 61 6c 69 64 20 63 6f  sult {invalid co
37d0: 6d 6d 61 6e 64 20 6e 61 6d 65 20 22 66 6f 6f 62  mmand name "foob
37e0: 61 72 63 6f 6e 66 69 67 75 72 65 22 7d 0a 20 0a  arconfigure"}. .
37f0: 20 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d   test namespace-
3800: 34 35 2e 31 20 7b 65 6e 73 65 6d 62 6c 65 3a 20  45.1 {ensemble: 
3810: 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 7d 20 7b  introspection} {
3820: 0a 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  .     namespace 
3830: 65 76 61 6c 20 6e 73 20 7b 0a 40 40 20 2d 31 36  eval ns {.@@ -16
3840: 37 32 2c 37 20 2b 31 36 39 32 2c 37 20 40 40 0a  72,7 +1692,7 @@.
3850: 20 20 20 20 20 7d 0a 20 20 20 20 20 6e 61 6d 65       }.     name
3860: 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e 73 0a  space delete ns.
3870: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a       set result.
3880: 2d 7d 20 7b 41 20 3a 3a 6e 73 3a 3a 78 7d 0a 2b  -} {A ::ns::x}.+
3890: 7d 20 7b 41 20 78 7d 0a 20 0a 20 74 65 73 74 20  } {A x}. . test 
38a0: 6e 61 6d 65 73 70 61 63 65 2d 34 36 2e 31 20 7b  namespace-46.1 {
38b0: 65 6e 73 65 6d 62 6c 65 3a 20 6d 6f 64 69 66 69  ensemble: modifi
38c0: 63 61 74 69 6f 6e 7d 20 7b 0a 20 20 20 20 20 6e  cation} {.     n
38d0: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e 73  amespace eval ns
38e0: 20 7b 0a 40 40 20 2d 31 36 39 34 2c 36 20 2b 31   {.@@ -1694,6 +1
38f0: 37 31 34 2c 32 36 20 40 40 0a 20 20 20 20 20 6e  714,26 @@.     n
3900: 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20  amespace delete 
3910: 6e 73 0a 20 20 20 20 20 73 65 74 20 72 65 73 75  ns.     set resu
3920: 6c 74 0a 20 7d 20 7b 7b 41 20 3a 3a 6e 73 3a 3a  lt. } {{A ::ns::
3930: 78 7d 20 31 32 33 20 7b 42 20 3a 3a 6e 73 3a 3a  x} 123 {B ::ns::
3940: 78 7d 20 31 32 33 20 7b 7d 20 31 32 33 7d 0a 2b  x} 123 {} 123}.+
3950: 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 34  test namespace-4
3960: 36 2e 31 2e 61 20 7b 65 6e 73 65 6d 62 6c 65 3a  6.1.a {ensemble:
3970: 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 7d 20 7b   modification} {
3980: 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  .+    namespace 
3990: 65 76 61 6c 20 6e 73 20 7b 0a 2b 09 6e 61 6d 65  eval ns {.+.name
39a0: 73 70 61 63 65 20 65 78 70 6f 72 74 20 78 0a 2b  space export x.+
39b0: 09 70 72 6f 63 20 78 20 7b 7d 20 7b 66 6f 72 6d  .proc x {} {form
39c0: 61 74 20 31 32 33 7d 0a 2b 0a 2b 09 23 20 45 6e  at 123}.+.+.# En
39d0: 73 65 6d 62 6c 65 20 6d 61 70 73 20 41 2d 3e 78  semble maps A->x
39e0: 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 6e 73  .+.namespace ens
39f0: 65 6d 62 6c 65 20 63 72 65 61 74 65 20 2d 63 6f  emble create -co
3a00: 6d 6d 61 6e 64 20 6e 73 20 2d 6d 61 70 20 7b 41  mmand ns -map {A
3a10: 20 78 7d 0a 2b 09 73 65 74 20 3a 3a 72 65 73 75   x}.+.set ::resu
3a20: 6c 74 20 5b 6c 69 73 74 20 5b 6e 61 6d 65 73 70  lt [list [namesp
3a30: 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6e  ace ensemble con
3a40: 66 69 67 75 72 65 20 6e 73 20 2d 6d 61 70 5d 20  figure ns -map] 
3a50: 5b 6e 73 20 41 5d 5d 0a 2b 0a 2b 09 23 20 45 6e  [ns A]].+.+.# En
3a60: 73 65 6d 62 6c 65 20 6d 61 70 73 20 42 2d 3e 78  semble maps B->x
3a70: 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 6e 73  .+.namespace ens
3a80: 65 6d 62 6c 65 20 63 6f 6e 66 69 67 75 72 65 20  emble configure 
3a90: 6e 73 20 2d 6d 61 70 20 7b 42 20 78 7d 0a 2b 09  ns -map {B x}.+.
3aa0: 6c 61 70 70 65 6e 64 20 3a 3a 72 65 73 75 6c 74  lappend ::result
3ab0: 20 5b 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65   [namespace ense
3ac0: 6d 62 6c 65 20 63 6f 6e 66 69 67 75 72 65 20 6e  mble configure n
3ad0: 73 20 2d 6d 61 70 5d 20 5b 6e 73 20 42 5d 0a 2b  s -map] [ns B].+
3ae0: 0a 2b 09 23 20 45 6e 73 65 6d 62 6c 65 20 6d 61  .+.# Ensemble ma
3af0: 70 73 20 78 2d 3e 78 0a 2b 09 6e 61 6d 65 73 70  ps x->x.+.namesp
3b00: 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6e  ace ensemble con
3b10: 66 69 67 75 72 65 20 6e 73 20 2d 6d 61 70 20 7b  figure ns -map {
3b20: 7d 0a 2b 09 6c 61 70 70 65 6e 64 20 3a 3a 72 65  }.+.lappend ::re
3b30: 73 75 6c 74 20 5b 6e 61 6d 65 73 70 61 63 65 20  sult [namespace 
3b40: 65 6e 73 65 6d 62 6c 65 20 63 6f 6e 66 69 67 75  ensemble configu
3b50: 72 65 20 6e 73 20 2d 6d 61 70 5d 20 5b 6e 73 20  re ns -map] [ns 
3b60: 78 5d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 6e  x].+    }.+    n
3b70: 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20  amespace delete 
3b80: 6e 73 0a 2b 20 20 20 20 73 65 74 20 72 65 73 75  ns.+    set resu
3b90: 6c 74 0a 2b 7d 20 7b 7b 41 20 78 7d 20 31 32 33  lt.+} {{A x} 123
3ba0: 20 7b 42 20 78 7d 20 31 32 33 20 7b 7d 20 31 32   {B x} 123 {} 12
3bb0: 33 7d 0a 20 74 65 73 74 20 6e 61 6d 65 73 70 61  3}. test namespa
3bc0: 63 65 2d 34 36 2e 32 20 7b 65 6e 73 65 6d 62 6c  ce-46.2 {ensembl
3bd0: 65 3a 20 65 6e 73 65 6d 62 6c 65 73 20 72 65 61  e: ensembles rea
3be0: 6c 6c 79 20 75 73 65 20 63 75 72 72 65 6e 74 20  lly use current 
3bf0: 65 78 70 6f 72 74 20 6c 69 73 74 7d 20 7b 0a 20  export list} {. 
3c00: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76      namespace ev
3c10: 61 6c 20 6e 73 20 7b 0a 20 09 6e 61 6d 65 73 70  al ns {. .namesp
3c20: 61 63 65 20 65 78 70 6f 72 74 20 78 31 0a 40 40  ace export x1.@@
3c30: 20 2d 31 38 31 35 2c 37 20 2b 31 38 35 35 2c 33   -1815,7 +1855,3
3c40: 36 20 40 40 0a 20 20 20 20 20 6c 61 70 70 65 6e  6 @@.     lappen
3c50: 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  d result [catch 
3c60: 7b 6e 73 20 63 20 64 20 65 7d 20 6d 73 67 5d 20  {ns c d e} msg] 
3c70: 24 6d 73 67 0a 20 20 20 20 20 6c 61 70 70 65 6e  $msg.     lappen
3c80: 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  d result [catch 
3c90: 7b 6e 73 20 4d 61 67 69 63 20 66 6f 6f 20 62 61  {ns Magic foo ba
3ca0: 72 20 73 70 6f 6e 67 20 77 69 62 62 6c 65 7d 20  r spong wibble} 
3cb0: 6d 73 67 5d 20 24 6d 73 67 0a 20 20 20 20 20 6c  msg] $msg.     l
3cc0: 69 73 74 20 24 72 65 73 75 6c 74 20 5b 6c 73 6f  ist $result [lso
3cd0: 72 74 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64  rt [info command
3ce0: 73 20 3a 3a 6e 73 3a 3a 2a 5d 5d 20 24 6c 6f 67  s ::ns::*]] $log
3cf0: 20 5b 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65   [namespace dele
3d00: 74 65 20 6e 73 5d 0a 2d 7d 20 7b 7b 30 20 32 20  te ns].-} {{0 2 
3d10: 30 20 32 20 30 20 32 20 30 20 32 20 31 20 7b 75  0 2 0 2 0 2 1 {u
3d20: 6e 6b 6e 6f 77 6e 20 6f 72 20 70 72 6f 74 65 63  nknown or protec
3d30: 74 65 64 20 73 75 62 63 6f 6d 6d 61 6e 64 20 22  ted subcommand "
3d40: 4d 61 67 69 63 22 7d 7d 20 7b 3a 3a 6e 73 3a 3a  Magic"}} {::ns::
3d50: 4d 61 67 69 63 20 3a 3a 6e 73 3a 3a 61 20 3a 3a  Magic ::ns::a ::
3d60: 6e 73 3a 3a 62 20 3a 3a 6e 73 3a 3a 63 7d 20 7b  ns::b ::ns::c} {
3d70: 7b 6d 61 6b 69 6e 67 20 61 7d 20 7b 72 75 6e 6e  {making a} {runn
3d80: 69 6e 67 20 3a 3a 6e 73 3a 3a 61 20 62 20 63 7d  ing ::ns::a b c}
3d90: 20 7b 72 75 6e 6e 69 6e 67 20 3a 3a 6e 73 3a 3a   {running ::ns::
3da0: 61 20 62 20 63 7d 20 7b 6d 61 6b 69 6e 67 20 62  a b c} {making b
3db0: 7d 20 7b 72 75 6e 6e 69 6e 67 20 3a 3a 6e 73 3a  } {running ::ns:
3dc0: 3a 62 20 63 20 64 7d 20 7b 6d 61 6b 69 6e 67 20  :b c d} {making 
3dd0: 63 7d 20 7b 72 75 6e 6e 69 6e 67 20 3a 3a 6e 73  c} {running ::ns
3de0: 3a 3a 63 20 64 20 65 7d 20 7b 75 6e 6b 6e 6f 77  ::c d e} {unknow
3df0: 6e 20 4d 61 67 69 63 20 2d 20 61 72 67 73 20 3d  n Magic - args =
3e00: 20 66 6f 6f 20 62 61 72 20 73 70 6f 6e 67 20 77   foo bar spong w
3e10: 69 62 62 6c 65 7d 7d 20 7b 7d 7d 0a 2b 7d 20 7b  ibble}} {}}.+} {
3e20: 7b 30 20 32 20 30 20 32 20 30 20 32 20 30 20 32  {0 2 0 2 0 2 0 2
3e30: 20 31 20 7b 75 6e 6b 6e 6f 77 6e 20 6f 72 20 70   1 {unknown or p
3e40: 72 6f 74 65 63 74 65 64 20 73 75 62 63 6f 6d 6d  rotected subcomm
3e50: 61 6e 64 20 22 4d 61 67 69 63 22 7d 7d 20 7b 3a  and "Magic"}} {:
3e60: 3a 6e 73 3a 3a 4d 61 67 69 63 20 3a 3a 6e 73 3a  :ns::Magic ::ns:
3e70: 3a 61 20 3a 3a 6e 73 3a 3a 62 20 3a 3a 6e 73 3a  :a ::ns::b ::ns:
3e80: 3a 63 7d 20 7b 7b 6d 61 6b 69 6e 67 20 61 7d 20  :c} {{making a} 
3e90: 7b 72 75 6e 6e 69 6e 67 20 61 20 62 20 63 7d 20  {running a b c} 
3ea0: 7b 72 75 6e 6e 69 6e 67 20 61 20 62 20 63 7d 20  {running a b c} 
3eb0: 7b 6d 61 6b 69 6e 67 20 62 7d 20 7b 72 75 6e 6e  {making b} {runn
3ec0: 69 6e 67 20 62 20 63 20 64 7d 20 7b 6d 61 6b 69  ing b c d} {maki
3ed0: 6e 67 20 63 7d 20 7b 72 75 6e 6e 69 6e 67 20 63  ng c} {running c
3ee0: 20 64 20 65 7d 20 7b 75 6e 6b 6e 6f 77 6e 20 4d   d e} {unknown M
3ef0: 61 67 69 63 20 2d 20 61 72 67 73 20 3d 20 66 6f  agic - args = fo
3f00: 6f 20 62 61 72 20 73 70 6f 6e 67 20 77 69 62 62  o bar spong wibb
3f10: 6c 65 7d 7d 20 7b 7d 7d 0a 2b 74 65 73 74 20 6e  le}} {}}.+test n
3f20: 61 6d 65 73 70 61 63 65 2d 34 37 2e 31 2e 61 20  amespace-47.1.a 
3f30: 7b 65 6e 73 65 6d 62 6c 65 3a 20 75 6e 6b 6e 6f  {ensemble: unkno
3f40: 77 6e 20 68 61 6e 64 6c 65 72 7d 20 7b 0a 2b 20  wn handler} {.+ 
3f50: 20 20 20 73 65 74 20 6c 6f 67 20 7b 7d 0a 2b 20     set log {}.+ 
3f60: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61     namespace eva
3f70: 6c 20 6e 73 20 7b 0a 2b 20 09 6e 61 6d 65 73 70  l ns {.+ .namesp
3f80: 61 63 65 20 65 78 70 6f 72 74 20 7b 5b 61 2d 7a  ace export {[a-z
3f90: 5d 2a 7d 0a 2b 20 09 70 72 6f 63 20 4d 61 67 69  ]*}.+ .proc Magi
3fa0: 63 20 7b 65 6e 73 65 6d 62 6c 65 20 73 75 62 63  c {ensemble subc
3fb0: 6d 64 20 61 72 67 73 7d 20 7b 0a 2b 20 09 20 20  md args} {.+ .  
3fc0: 20 20 67 6c 6f 62 61 6c 20 6c 6f 67 0a 2b 20 09    global log.+ .
3fd0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string 
3fe0: 6d 61 74 63 68 20 7b 5b 61 2d 7a 5d 2a 7d 20 24  match {[a-z]*} $
3ff0: 73 75 62 63 6d 64 5d 7d 20 7b 0a 2b 20 09 09 6c  subcmd]} {.+ ..l
4000: 61 70 70 65 6e 64 20 6c 6f 67 20 22 6d 61 6b 69  append log "maki
4010: 6e 67 20 24 73 75 62 63 6d 64 22 0a 2b 20 09 09  ng $subcmd".+ ..
4020: 70 72 6f 63 20 24 73 75 62 63 6d 64 20 61 72 67  proc $subcmd arg
4030: 73 20 7b 0a 2b 20 09 09 20 20 20 20 67 6c 6f 62  s {.+ ..    glob
4040: 61 6c 20 6c 6f 67 0a 2b 20 09 09 20 20 20 20 6c  al log.+ ..    l
4050: 61 70 70 65 6e 64 20 6c 6f 67 20 22 72 75 6e 6e  append log "runn
4060: 69 6e 67 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 20  ing [info level 
4070: 30 5d 22 0a 2b 20 09 09 20 20 20 20 6c 6c 65 6e  0]".+ ..    llen
4080: 67 74 68 20 24 61 72 67 73 0a 2b 20 09 09 7d 0a  gth $args.+ ..}.
4090: 2b 20 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  + .    } else {.
40a0: 2b 20 09 09 6c 61 70 70 65 6e 64 20 6c 6f 67 20  + ..lappend log 
40b0: 22 75 6e 6b 6e 6f 77 6e 20 24 73 75 62 63 6d 64  "unknown $subcmd
40c0: 20 2d 20 61 72 67 73 20 3d 20 24 61 72 67 73 22   - args = $args"
40d0: 0a 2b 20 09 09 72 65 74 75 72 6e 20 2d 63 6f 64  .+ ..return -cod
40e0: 65 20 65 72 72 6f 72 20 5c 0a 2b 09 09 20 20 20  e error \.+..   
40f0: 20 22 75 6e 6b 6e 6f 77 6e 20 6f 72 20 70 72 6f   "unknown or pro
4100: 74 65 63 74 65 64 20 73 75 62 63 6f 6d 6d 61 6e  tected subcomman
4110: 64 20 5c 22 24 73 75 62 63 6d 64 5c 22 22 0a 2b  d \"$subcmd\"".+
4120: 20 09 20 20 20 20 7d 0a 2b 20 09 7d 0a 2b 20 09   .    }.+ .}.+ .
4130: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
4140: 6c 65 20 63 72 65 61 74 65 20 2d 75 6e 6b 6e 6f  le create -unkno
4150: 77 6e 20 4d 61 67 69 63 0a 2b 20 20 20 20 7d 0a  wn Magic.+    }.
4160: 2b 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20  +    set result 
4170: 7b 7d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20  {}.+    lappend 
4180: 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e  result [catch {n
4190: 73 20 61 20 62 20 63 7d 20 6d 73 67 5d 20 24 6d  s a b c} msg] $m
41a0: 73 67 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20  sg.+    lappend 
41b0: 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e  result [catch {n
41c0: 73 20 61 20 62 20 63 7d 20 6d 73 67 5d 20 24 6d  s a b c} msg] $m
41d0: 73 67 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20  sg.+    lappend 
41e0: 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e  result [catch {n
41f0: 73 20 62 20 63 20 64 7d 20 6d 73 67 5d 20 24 6d  s b c d} msg] $m
4200: 73 67 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20  sg.+    lappend 
4210: 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e  result [catch {n
4220: 73 20 63 20 64 20 65 7d 20 6d 73 67 5d 20 24 6d  s c d e} msg] $m
4230: 73 67 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20  sg.+    lappend 
4240: 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e  result [catch {n
4250: 73 20 4d 61 67 69 63 20 66 6f 6f 20 62 61 72 20  s Magic foo bar 
4260: 73 70 6f 6e 67 20 77 69 62 62 6c 65 7d 20 6d 73  spong wibble} ms
4270: 67 5d 20 24 6d 73 67 0a 2b 20 20 20 20 6c 69 73  g] $msg.+    lis
4280: 74 20 24 72 65 73 75 6c 74 20 5b 6c 73 6f 72 74  t $result [lsort
4290: 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20   [info commands 
42a0: 3a 3a 6e 73 3a 3a 2a 5d 5d 20 24 6c 6f 67 20 5b  ::ns::*]] $log [
42b0: 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65  namespace delete
42c0: 20 6e 73 5d 0a 2b 7d 20 7b 7b 30 20 32 20 30 20   ns].+} {{0 2 0 
42d0: 32 20 30 20 32 20 30 20 32 20 31 20 7b 75 6e 6b  2 0 2 0 2 1 {unk
42e0: 6e 6f 77 6e 20 6f 72 20 70 72 6f 74 65 63 74 65  nown or protecte
42f0: 64 20 73 75 62 63 6f 6d 6d 61 6e 64 20 22 4d 61  d subcommand "Ma
4300: 67 69 63 22 7d 7d 20 7b 3a 3a 6e 73 3a 3a 4d 61  gic"}} {::ns::Ma
4310: 67 69 63 20 3a 3a 6e 73 3a 3a 61 20 3a 3a 6e 73  gic ::ns::a ::ns
4320: 3a 3a 62 20 3a 3a 6e 73 3a 3a 63 7d 20 7b 7b 6d  ::b ::ns::c} {{m
4330: 61 6b 69 6e 67 20 61 7d 20 7b 72 75 6e 6e 69 6e  aking a} {runnin
4340: 67 20 61 20 62 20 63 7d 20 7b 72 75 6e 6e 69 6e  g a b c} {runnin
4350: 67 20 61 20 62 20 63 7d 20 7b 6d 61 6b 69 6e 67  g a b c} {making
4360: 20 62 7d 20 7b 72 75 6e 6e 69 6e 67 20 62 20 63   b} {running b c
4370: 20 64 7d 20 7b 6d 61 6b 69 6e 67 20 63 7d 20 7b   d} {making c} {
4380: 72 75 6e 6e 69 6e 67 20 63 20 64 20 65 7d 20 7b  running c d e} {
4390: 75 6e 6b 6e 6f 77 6e 20 4d 61 67 69 63 20 2d 20  unknown Magic - 
43a0: 61 72 67 73 20 3d 20 66 6f 6f 20 62 61 72 20 73  args = foo bar s
43b0: 70 6f 6e 67 20 77 69 62 62 6c 65 7d 7d 20 7b 7d  pong wibble}} {}
43c0: 7d 0a 20 74 65 73 74 20 6e 61 6d 65 73 70 61 63  }. test namespac
43d0: 65 2d 34 37 2e 32 20 7b 65 6e 73 65 6d 62 6c 65  e-47.2 {ensemble
43e0: 3a 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64 6c 65  : unknown handle
43f0: 72 7d 20 7b 0a 20 20 20 20 20 6e 61 6d 65 73 70  r} {.     namesp
4400: 61 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a 20 09  ace eval ns {. .
4410: 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74  namespace export
4420: 20 7b 5b 61 2d 7a 5d 2a 7d 0a 40 40 20 2d 31 38   {[a-z]*}.@@ -18
4430: 33 34 2c 36 20 2b 31 39 30 33 2c 32 34 20 40 40  34,6 +1903,24 @@
4440: 0a 20 20 20 20 20 28 65 6e 73 65 6d 62 6c 65 20  .     (ensemble 
4450: 75 6e 6b 6e 6f 77 6e 20 73 75 62 63 6f 6d 6d 61  unknown subcomma
4460: 6e 64 20 68 61 6e 64 6c 65 72 29 0a 20 20 20 20  nd handler).    
4470: 20 69 6e 76 6f 6b 65 64 20 66 72 6f 6d 20 77 69   invoked from wi
4480: 74 68 69 6e 0a 20 22 6e 73 20 73 70 6f 6e 67 22  thin. "ns spong"
4490: 7d 20 7b 7d 7d 0a 2b 74 65 73 74 20 6e 61 6d 65  } {}}.+test name
44a0: 73 70 61 63 65 2d 34 37 2e 32 2e 61 20 7b 65 6e  space-47.2.a {en
44b0: 73 65 6d 62 6c 65 3a 20 75 6e 6b 6e 6f 77 6e 20  semble: unknown 
44c0: 68 61 6e 64 6c 65 72 7d 20 7b 0a 2b 20 20 20 20  handler} {.+    
44d0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e  namespace eval n
44e0: 73 20 7b 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20  s {.+.namespace 
44f0: 65 78 70 6f 72 74 20 7b 5b 61 2d 7a 5d 2a 7d 0a  export {[a-z]*}.
4500: 2b 09 70 72 6f 63 20 4d 61 67 69 63 20 7b 65 6e  +.proc Magic {en
4510: 73 65 6d 62 6c 65 20 73 75 62 63 6d 64 20 61 72  semble subcmd ar
4520: 67 73 7d 20 7b 0a 2b 09 20 20 20 20 65 72 72 6f  gs} {.+.    erro
4530: 72 20 66 6f 6f 62 61 72 0a 2b 09 7d 0a 2b 09 6e  r foobar.+.}.+.n
4540: 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c  amespace ensembl
4550: 65 20 63 72 65 61 74 65 20 2d 75 6e 6b 6e 6f 77  e create -unknow
4560: 6e 20 4d 61 67 69 63 0a 2b 20 20 20 20 7d 0a 2b  n Magic.+    }.+
4570: 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20      list [catch 
4580: 7b 6e 73 20 73 70 6f 6e 67 7d 20 6d 73 67 5d 20  {ns spong} msg] 
4590: 24 6d 73 67 20 24 3a 3a 65 72 72 6f 72 49 6e 66  $msg $::errorInf
45a0: 6f 20 5b 6e 61 6d 65 73 70 61 63 65 20 64 65 6c  o [namespace del
45b0: 65 74 65 20 6e 73 5d 0a 2b 7d 20 7b 31 20 66 6f  ete ns].+} {1 fo
45c0: 6f 62 61 72 20 7b 66 6f 6f 62 61 72 0a 2b 20 20  obar {foobar.+  
45d0: 20 20 77 68 69 6c 65 20 65 78 65 63 75 74 69 6e    while executin
45e0: 67 0a 2b 22 65 72 72 6f 72 20 66 6f 6f 62 61 72  g.+"error foobar
45f0: 22 0a 2b 20 20 20 20 28 70 72 6f 63 65 64 75 72  ".+    (procedur
4600: 65 20 22 4d 61 67 69 63 22 20 6c 69 6e 65 20 32  e "Magic" line 2
4610: 29 0a 2b 20 20 20 20 69 6e 76 6f 6b 65 64 20 66  ).+    invoked f
4620: 72 6f 6d 20 77 69 74 68 69 6e 0a 2b 22 4d 61 67  rom within.+"Mag
4630: 69 63 20 3a 3a 6e 73 20 73 70 6f 6e 67 22 0a 2b  ic ::ns spong".+
4640: 20 20 20 20 28 65 6e 73 65 6d 62 6c 65 20 75 6e      (ensemble un
4650: 6b 6e 6f 77 6e 20 73 75 62 63 6f 6d 6d 61 6e 64  known subcommand
4660: 20 68 61 6e 64 6c 65 72 29 0a 2b 20 20 20 20 69   handler).+    i
4670: 6e 76 6f 6b 65 64 20 66 72 6f 6d 20 77 69 74 68  nvoked from with
4680: 69 6e 0a 2b 22 6e 73 20 73 70 6f 6e 67 22 7d 20  in.+"ns spong"} 
4690: 7b 7d 7d 0a 20 74 65 73 74 20 6e 61 6d 65 73 70  {}}. test namesp
46a0: 61 63 65 2d 34 37 2e 33 20 7b 65 6e 73 65 6d 62  ace-47.3 {ensemb
46b0: 6c 65 3a 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64  le: unknown hand
46c0: 6c 65 72 7d 20 7b 0a 20 20 20 20 20 6e 61 6d 65  ler} {.     name
46d0: 73 70 61 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a  space eval ns {.
46e0: 20 09 76 61 72 69 61 62 6c 65 20 63 6f 75 6e 74   .variable count
46f0: 20 30 0a 40 40 20 2d 31 38 34 39 2c 36 20 2b 31   0.@@ -1849,6 +1
4700: 39 33 36 2c 32 31 20 40 40 0a 20 20 20 20 20 7d  936,21 @@.     }
4710: 0a 20 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63  .     list [catc
4720: 68 20 7b 6e 73 20 73 70 6f 6e 67 7d 20 6d 73 67  h {ns spong} msg
4730: 5d 20 24 6d 73 67 20 24 6e 73 3a 3a 63 6f 75 6e  ] $msg $ns::coun
4740: 74 20 5b 6e 61 6d 65 73 70 61 63 65 20 64 65 6c  t [namespace del
4750: 65 74 65 20 6e 73 5d 0a 20 7d 20 7b 31 20 7b 75  ete ns]. } {1 {u
4760: 6e 6b 6e 6f 77 6e 20 6f 72 20 61 6d 62 69 67 75  nknown or ambigu
4770: 6f 75 73 20 73 75 62 63 6f 6d 6d 61 6e 64 20 22  ous subcommand "
4780: 73 70 6f 6e 67 22 3a 20 6d 75 73 74 20 62 65 20  spong": must be 
4790: 61 2c 20 62 2c 20 6f 72 20 63 7d 20 31 20 7b 7d  a, b, or c} 1 {}
47a0: 7d 0a 2b 74 65 73 74 20 6e 61 6d 65 73 70 61 63  }.+test namespac
47b0: 65 2d 34 37 2e 33 20 7b 65 6e 73 65 6d 62 6c 65  e-47.3 {ensemble
47c0: 3a 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64 6c 65  : unknown handle
47d0: 72 7d 20 7b 0a 2b 20 20 20 20 6e 61 6d 65 73 70  r} {.+    namesp
47e0: 61 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a 2b 09  ace eval ns {.+.
47f0: 76 61 72 69 61 62 6c 65 20 63 6f 75 6e 74 20 30  variable count 0
4800: 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 78 70  .+.namespace exp
4810: 6f 72 74 20 7b 5b 61 2d 7a 5d 2a 7d 0a 2b 09 70  ort {[a-z]*}.+.p
4820: 72 6f 63 20 61 20 7b 7d 20 7b 7d 0a 2b 09 70 72  roc a {} {}.+.pr
4830: 6f 63 20 63 20 7b 7d 20 7b 7d 0a 2b 09 70 72 6f  oc c {} {}.+.pro
4840: 63 20 4d 61 67 69 63 20 7b 65 6e 73 65 6d 62 6c  c Magic {ensembl
4850: 65 20 73 75 62 63 6d 64 20 61 72 67 73 7d 20 7b  e subcmd args} {
4860: 0a 2b 09 20 20 20 20 76 61 72 69 61 62 6c 65 20  .+.    variable 
4870: 63 6f 75 6e 74 0a 2b 09 20 20 20 20 69 6e 63 72  count.+.    incr
4880: 20 63 6f 75 6e 74 0a 2b 09 20 20 20 20 70 72 6f   count.+.    pro
4890: 63 20 62 20 7b 7d 20 7b 7d 0a 2b 09 7d 0a 2b 09  c b {} {}.+.}.+.
48a0: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
48b0: 6c 65 20 63 72 65 61 74 65 20 2d 75 6e 6b 6e 6f  le create -unkno
48c0: 77 6e 20 4d 61 67 69 63 0a 2b 20 20 20 20 7d 0a  wn Magic.+    }.
48d0: 2b 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68  +    list [catch
48e0: 20 7b 6e 73 20 73 70 6f 6e 67 7d 20 6d 73 67 5d   {ns spong} msg]
48f0: 20 24 6d 73 67 20 24 6e 73 3a 3a 63 6f 75 6e 74   $msg $ns::count
4900: 20 5b 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65   [namespace dele
4910: 74 65 20 6e 73 5d 0a 2b 7d 20 7b 31 20 7b 75 6e  te ns].+} {1 {un
4920: 6b 6e 6f 77 6e 20 6f 72 20 61 6d 62 69 67 75 6f  known or ambiguo
4930: 75 73 20 73 75 62 63 6f 6d 6d 61 6e 64 20 22 73  us subcommand "s
4940: 70 6f 6e 67 22 3a 20 6d 75 73 74 20 62 65 20 61  pong": must be a
4950: 2c 20 62 2c 20 6f 72 20 63 7d 20 31 20 7b 7d 7d  , b, or c} 1 {}}
4960: 0a 20 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65  . test namespace
4970: 2d 34 37 2e 34 20 7b 65 6e 73 65 6d 62 6c 65 3a  -47.4 {ensemble:
4980: 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64 6c 65 72   unknown handler
4990: 7d 20 7b 0a 20 20 20 20 20 6e 61 6d 65 73 70 61  } {.     namespa
49a0: 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a 20 09 6e  ce eval ns {. .n
49b0: 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 20  amespace export 
49c0: 7b 5b 61 2d 7a 5d 2a 7d 0a 40 40 20 2d 31 38 36  {[a-z]*}.@@ -186
49d0: 32 2c 36 20 2b 31 39 36 34 2c 31 39 20 40 40 0a  2,6 +1964,19 @@.
49e0: 20 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 65       result of e
49f0: 6e 73 65 6d 62 6c 65 20 75 6e 6b 6e 6f 77 6e 20  nsemble unknown 
4a00: 73 75 62 63 6f 6d 6d 61 6e 64 20 68 61 6e 64 6c  subcommand handl
4a10: 65 72 3a 20 3a 3a 6e 73 3a 3a 4d 61 67 69 63 20  er: ::ns::Magic 
4a20: 3a 3a 6e 73 20 73 70 6f 6e 67 0a 20 20 20 20 20  ::ns spong.     
4a30: 69 6e 76 6f 6b 65 64 20 66 72 6f 6d 20 77 69 74  invoked from wit
4a40: 68 69 6e 0a 20 22 6e 73 20 73 70 6f 6e 67 22 7d  hin. "ns spong"}
4a50: 20 7b 7d 7d 0a 2b 74 65 73 74 20 6e 61 6d 65 73   {}}.+test names
4a60: 70 61 63 65 2d 34 37 2e 34 2e 61 20 7b 65 6e 73  pace-47.4.a {ens
4a70: 65 6d 62 6c 65 3a 20 75 6e 6b 6e 6f 77 6e 20 68  emble: unknown h
4a80: 61 6e 64 6c 65 72 7d 20 7b 0a 2b 20 20 20 20 6e  andler} {.+    n
4a90: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e 73  amespace eval ns
4aa0: 20 7b 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65   {.+.namespace e
4ab0: 78 70 6f 72 74 20 7b 5b 61 2d 7a 5d 2a 7d 0a 2b  xport {[a-z]*}.+
4ac0: 09 70 72 6f 63 20 4d 61 67 69 63 20 7b 65 6e 73  .proc Magic {ens
4ad0: 65 6d 62 6c 65 20 73 75 62 63 6d 64 20 61 72 67  emble subcmd arg
4ae0: 73 7d 20 7b 0a 2b 09 20 20 20 20 72 65 74 75 72  s} {.+.    retur
4af0: 6e 20 2d 63 6f 64 65 20 62 72 65 61 6b 0a 2b 09  n -code break.+.
4b00: 7d 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 6e  }.+.namespace en
4b10: 73 65 6d 62 6c 65 20 63 72 65 61 74 65 20 2d 75  semble create -u
4b20: 6e 6b 6e 6f 77 6e 20 4d 61 67 69 63 0a 2b 20 20  nknown Magic.+  
4b30: 20 20 7d 0a 2b 20 20 20 20 6c 69 73 74 20 5b 63    }.+    list [c
4b40: 61 74 63 68 20 7b 6e 73 20 73 70 6f 6e 67 7d 20  atch {ns spong} 
4b50: 6d 73 67 5d 20 24 6d 73 67 20 24 3a 3a 65 72 72  msg] $msg $::err
4b60: 6f 72 49 6e 66 6f 20 5b 6e 61 6d 65 73 70 61 63  orInfo [namespac
4b70: 65 20 64 65 6c 65 74 65 20 6e 73 5d 0a 2b 7d 20  e delete ns].+} 
4b80: 7b 31 20 7b 75 6e 6b 6e 6f 77 6e 20 73 75 62 63  {1 {unknown subc
4b90: 6f 6d 6d 61 6e 64 20 68 61 6e 64 6c 65 72 20 72  ommand handler r
4ba0: 65 74 75 72 6e 65 64 20 62 61 64 20 63 6f 64 65  eturned bad code
4bb0: 3a 20 62 72 65 61 6b 7d 20 7b 75 6e 6b 6e 6f 77  : break} {unknow
4bc0: 6e 20 73 75 62 63 6f 6d 6d 61 6e 64 20 68 61 6e  n subcommand han
4bd0: 64 6c 65 72 20 72 65 74 75 72 6e 65 64 20 62 61  dler returned ba
4be0: 64 20 63 6f 64 65 3a 20 62 72 65 61 6b 0a 2b 20  d code: break.+ 
4bf0: 20 20 20 72 65 73 75 6c 74 20 6f 66 20 65 6e 73     result of ens
4c00: 65 6d 62 6c 65 20 75 6e 6b 6e 6f 77 6e 20 73 75  emble unknown su
4c10: 62 63 6f 6d 6d 61 6e 64 20 68 61 6e 64 6c 65 72  bcommand handler
4c20: 3a 20 4d 61 67 69 63 20 3a 3a 6e 73 20 73 70 6f  : Magic ::ns spo
4c30: 6e 67 0a 2b 20 20 20 20 69 6e 76 6f 6b 65 64 20  ng.+    invoked 
4c40: 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2b 22 6e 73  from within.+"ns
4c50: 20 73 70 6f 6e 67 22 7d 20 7b 7d 7d 0a 20 74 65   spong"} {}}. te
4c60: 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 37 2e  st namespace-47.
4c70: 35 20 7b 65 6e 73 65 6d 62 6c 65 3a 20 75 6e 6b  5 {ensemble: unk
4c80: 6e 6f 77 6e 20 68 61 6e 64 6c 65 72 7d 20 7b 0a  nown handler} {.
4c90: 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65       namespace e
4ca0: 6e 73 65 6d 62 6c 65 20 63 72 65 61 74 65 20 2d  nsemble create -
4cb0: 63 6f 6d 6d 61 6e 64 20 66 6f 6f 20 2d 75 6e 6b  command foo -unk
4cc0: 6e 6f 77 6e 20 62 61 72 0a 20 20 20 20 20 70 72  nown bar.     pr
4cd0: 6f 63 20 62 61 72 20 7b 61 72 67 73 7d 20 7b 0a  oc bar {args} {.
4ce0: 40 40 20 2d 31 38 39 38 2c 36 20 2b 32 30 31 33  @@ -1898,6 +2013
4cf0: 2c 34 34 20 40 40 0a 20 20 20 20 20 72 65 6e 61  ,44 @@.     rena
4d00: 6d 65 20 66 6f 6f 20 7b 7d 0a 20 20 20 20 20 73  me foo {}.     s
4d10: 65 74 20 72 65 73 75 6c 74 0a 20 7d 20 7b 3a 3a  et result. } {::
4d20: 66 6f 6f 7c 6f 6e 65 20 74 77 6f 20 74 68 72 65  foo|one two thre
4d30: 65 7d 0a 2b 74 65 73 74 20 6e 61 6d 65 73 70 61  e}.+test namespa
4d40: 63 65 2d 34 37 2e 37 2e 61 20 7b 65 6e 73 65 6d  ce-47.7.a {ensem
4d50: 62 6c 65 3a 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e  ble: unknown han
4d60: 64 6c 65 72 20 69 6e 76 6f 6b 65 73 20 69 6e 20  dler invokes in 
4d70: 65 6e 73 65 6d 62 6c 65 27 73 20 6e 73 7d 20 5c  ensemble's ns} \
4d80: 0a 2b 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 6e  .+-body {.+    n
4d90: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e 73  amespace eval ns
4da0: 30 20 7b 0a 2b 09 70 72 6f 63 20 4d 61 67 69 63  0 {.+.proc Magic
4db0: 49 6d 70 6c 20 61 72 67 73 20 7b 0a 2b 09 20 20  Impl args {.+.  
4dc0: 20 20 72 65 74 75 72 6e 20 7b 4d 61 67 69 63 20    return {Magic 
4dd0: 63 61 6c 6c 65 64 7d 0a 2b 09 7d 0a 2b 20 20 20  called}.+.}.+   
4de0: 20 7d 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63   }.+    namespac
4df0: 65 20 65 76 61 6c 20 6e 73 31 20 7b 0a 2b 09 6e  e eval ns1 {.+.n
4e00: 61 6d 65 73 70 61 63 65 20 70 61 74 68 20 3a 3a  amespace path ::
4e10: 6e 73 30 0a 2b 09 70 72 6f 63 20 4d 61 67 69 63  ns0.+.proc Magic
4e20: 20 7b 65 6e 73 65 6d 62 6c 65 20 73 75 62 63 6d   {ensemble subcm
4e30: 64 20 61 72 67 73 7d 20 7b 0a 2b 09 20 20 20 20  d args} {.+.    
4e40: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 4d 61 67  return [list Mag
4e50: 69 63 49 6d 70 6c 5d 0a 2b 09 7d 0a 2b 09 6e 61  icImpl].+.}.+.na
4e60: 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65  mespace ensemble
4e70: 20 63 72 65 61 74 65 20 2d 75 6e 6b 6e 6f 77 6e   create -unknown
4e80: 20 4d 61 67 69 63 0a 2b 20 20 20 20 7d 0a 2b 20   Magic.+    }.+ 
4e90: 20 20 20 6e 73 31 20 66 6f 6f 0a 2b 7d 20 2d 63     ns1 foo.+} -c
4ea0: 6c 65 61 6e 75 70 20 7b 0a 2b 20 20 20 20 6e 61  leanup {.+    na
4eb0: 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e  mespace delete n
4ec0: 73 30 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63  s0.+    namespac
4ed0: 65 20 64 65 6c 65 74 65 20 6e 73 31 0a 2b 7d 20  e delete ns1.+} 
4ee0: 2d 72 65 73 75 6c 74 20 7b 4d 61 67 69 63 20 63  -result {Magic c
4ef0: 61 6c 6c 65 64 7d 0a 2b 74 65 73 74 20 6e 61 6d  alled}.+test nam
4f00: 65 73 70 61 63 65 2d 34 37 2e 38 2e 61 20 7b 65  espace-47.8.a {e
4f10: 6e 73 65 6d 62 6c 65 3a 20 75 6e 6b 6e 6f 77 6e  nsemble: unknown
4f20: 20 68 61 6e 64 6c 65 72 20 69 6e 76 6f 6b 65 73   handler invokes
4f30: 20 69 6e 20 65 6e 73 65 6d 62 6c 65 27 73 20 6e   in ensemble's n
4f40: 73 7d 20 5c 0a 2b 2d 62 6f 64 79 20 7b 0a 2b 20  s} \.+-body {.+ 
4f50: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61     namespace eva
4f60: 6c 20 6e 73 30 20 7b 0a 2b 09 70 72 6f 63 20 4d  l ns0 {.+.proc M
4f70: 61 67 69 63 49 6d 70 6c 20 61 72 67 73 20 7b 0a  agicImpl args {.
4f80: 2b 09 20 20 20 20 72 65 74 75 72 6e 20 7b 4d 61  +.    return {Ma
4f90: 67 69 63 20 63 61 6c 6c 65 64 7d 0a 2b 09 7d 0a  gic called}.+.}.
4fa0: 2b 20 20 20 20 7d 0a 2b 20 20 20 20 6e 61 6d 65  +    }.+    name
4fb0: 73 70 61 63 65 20 65 76 61 6c 20 6e 73 31 20 7b  space eval ns1 {
4fc0: 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b  .+.namespace unk
4fd0: 6e 6f 77 6e 20 5b 6c 69 73 74 20 6e 61 6d 65 73  nown [list names
4fe0: 70 61 63 65 20 65 76 61 6c 20 3a 3a 6e 73 30 5d  pace eval ::ns0]
4ff0: 0a 2b 09 70 72 6f 63 20 4d 61 67 69 63 20 7b 65  .+.proc Magic {e
5000: 6e 73 65 6d 62 6c 65 20 73 75 62 63 6d 64 20 61  nsemble subcmd a
5010: 72 67 73 7d 20 7b 0a 2b 09 20 20 20 20 72 65 74  rgs} {.+.    ret
5020: 75 72 6e 20 5b 6c 69 73 74 20 4d 61 67 69 63 49  urn [list MagicI
5030: 6d 70 6c 5d 0a 2b 09 7d 0a 2b 09 6e 61 6d 65 73  mpl].+.}.+.names
5040: 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 72  pace ensemble cr
5050: 65 61 74 65 20 2d 75 6e 6b 6e 6f 77 6e 20 4d 61  eate -unknown Ma
5060: 67 69 63 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20  gic.+    }.+    
5070: 6e 73 31 20 66 6f 6f 0a 2b 7d 20 2d 63 6c 65 61  ns1 foo.+} -clea
5080: 6e 75 70 20 7b 0a 2b 20 20 20 20 6e 61 6d 65 73  nup {.+    names
5090: 70 61 63 65 20 64 65 6c 65 74 65 20 6e 73 30 0a  pace delete ns0.
50a0: 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64  +    namespace d
50b0: 65 6c 65 74 65 20 6e 73 31 0a 2b 7d 20 2d 72 65  elete ns1.+} -re
50c0: 73 75 6c 74 20 7b 4d 61 67 69 63 20 63 61 6c 6c  sult {Magic call
50d0: 65 64 7d 0a 20 74 65 73 74 20 6e 61 6d 65 73 70  ed}. test namesp
50e0: 61 63 65 2d 34 37 2e 38 20 7b 65 6e 73 65 6d 62  ace-47.8 {ensemb
50f0: 6c 65 3a 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64  le: unknown hand
5100: 6c 65 72 2c 20 63 6f 6d 6d 61 6e 64 73 20 77 69  ler, commands wi
5110: 74 68 20 73 70 61 63 65 73 7d 20 7b 0a 20 20 20  th spaces} {.   
5120: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65    namespace ense
5130: 6d 62 6c 65 20 63 72 65 61 74 65 20 2d 63 6f 6d  mble create -com
5140: 6d 61 6e 64 20 66 6f 6f 20 2d 75 6e 6b 6e 6f 77  mand foo -unknow
5150: 6e 20 7b 62 61 72 20 62 6f 6f 7d 0a 20 20 20 20  n {bar boo}.    
5160: 20 70 72 6f 63 20 62 61 72 20 7b 61 72 67 73 7d   proc bar {args}
5170: 20 7b 0a 40 40 20 2d 31 39 34 34 2c 36 20 2b 32   {.@@ -1944,6 +2
5180: 30 39 37 2c 34 32 20 40 40 0a 20 20 20 20 20 6e  097,42 @@.     n
5190: 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20  amespace delete 
51a0: 66 6f 6f 0a 20 20 20 20 20 73 65 74 20 72 65 73  foo.     set res
51b0: 75 6c 74 0a 20 7d 20 7b 7b 2d 6d 61 70 20 7b 7d  ult. } {{-map {}
51c0: 20 2d 6e 61 6d 65 73 70 61 63 65 20 3a 3a 66 6f   -namespace ::fo
51d0: 6f 20 2d 70 72 65 66 69 78 65 73 20 31 20 2d 73  o -prefixes 1 -s
51e0: 75 62 63 6f 6d 6d 61 6e 64 73 20 78 20 2d 75 6e  ubcommands x -un
51f0: 6b 6e 6f 77 6e 20 3a 3a 66 6f 6f 3a 3a 75 7d 20  known ::foo::u} 
5200: 58 58 58 20 31 32 33 20 3a 3a 66 6f 6f 3a 3a 62  XXX 123 ::foo::b
5210: 61 72 20 7b 79 20 34 35 36 7d 20 59 59 59 20 34  ar {y 456} YYY 4
5220: 35 36 20 3a 3a 66 6f 6f 3a 3a 62 61 72 20 7b 7a  56 ::foo::bar {z
5230: 20 37 38 39 7d 20 5a 5a 5a 20 37 38 39 7d 0a 2b   789} ZZZ 789}.+
5240: 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 34  test namespace-4
5250: 38 2e 31 2e 61 20 7b 65 6e 73 65 6d 62 6c 65 73  8.1.a {ensembles
5260: 20 61 6e 64 20 6e 61 6d 65 73 70 61 63 65 20 69   and namespace i
5270: 6d 70 6f 72 74 3a 20 75 6e 6b 6e 6f 77 6e 20 68  mport: unknown h
5280: 61 6e 64 6c 65 72 7d 20 7b 0a 2b 20 20 20 20 6e  andler} {.+    n
5290: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 66 6f  amespace eval fo
52a0: 6f 20 7b 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20  o {.+.namespace 
52b0: 65 78 70 6f 72 74 20 62 61 72 0a 2b 09 6e 61 6d  export bar.+.nam
52c0: 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20  espace ensemble 
52d0: 63 72 65 61 74 65 20 2d 63 6f 6d 6d 61 6e 64 20  create -command 
52e0: 62 61 72 20 2d 75 6e 6b 6e 6f 77 6e 20 75 20 2d  bar -unknown u -
52f0: 73 75 62 63 6f 6d 6d 20 78 0a 2b 09 70 72 6f 63  subcomm x.+.proc
5300: 20 75 20 7b 65 6e 73 20 61 72 67 73 7d 20 7b 0a   u {ens args} {.
5310: 2b 09 20 20 20 20 67 6c 6f 62 61 6c 20 72 65 73  +.    global res
5320: 75 6c 74 0a 2b 09 20 20 20 20 6c 61 70 70 65 6e  ult.+.    lappen
5330: 64 20 72 65 73 75 6c 74 20 24 65 6e 73 20 24 61  d result $ens $a
5340: 72 67 73 0a 2b 09 20 20 20 20 6e 61 6d 65 73 70  rgs.+.    namesp
5350: 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6e  ace ensemble con
5360: 66 69 67 20 24 65 6e 73 20 2d 73 75 62 63 6f 6d  fig $ens -subcom
5370: 6d 61 6e 64 20 7b 78 20 79 7d 0a 2b 09 7d 0a 2b  mand {x y}.+.}.+
5380: 09 70 72 6f 63 20 75 32 20 7b 65 6e 73 20 61 72  .proc u2 {ens ar
5390: 67 73 7d 20 7b 0a 2b 09 20 20 20 20 67 6c 6f 62  gs} {.+.    glob
53a0: 61 6c 20 72 65 73 75 6c 74 0a 2b 09 20 20 20 20  al result.+.    
53b0: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24  lappend result $
53c0: 65 6e 73 20 24 61 72 67 73 0a 2b 09 20 20 20 20  ens $args.+.    
53d0: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
53e0: 6c 65 20 63 6f 6e 66 69 67 20 3a 3a 62 61 72 20  le config ::bar 
53f0: 2d 73 75 62 63 6f 6d 6d 61 6e 64 20 7b 78 20 79  -subcommand {x y
5400: 20 7a 7d 0a 2b 09 7d 0a 2b 09 70 72 6f 63 20 78   z}.+.}.+.proc x
5410: 20 61 72 67 73 20 7b 0a 2b 09 20 20 20 20 67 6c   args {.+.    gl
5420: 6f 62 61 6c 20 72 65 73 75 6c 74 0a 2b 09 20 20  obal result.+.  
5430: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
5440: 20 58 58 58 20 24 61 72 67 73 0a 2b 09 7d 0a 2b   XXX $args.+.}.+
5450: 09 70 72 6f 63 20 79 20 61 72 67 73 20 7b 0a 2b  .proc y args {.+
5460: 09 20 20 20 20 67 6c 6f 62 61 6c 20 72 65 73 75  .    global resu
5470: 6c 74 0a 2b 09 20 20 20 20 6c 61 70 70 65 6e 64  lt.+.    lappend
5480: 20 72 65 73 75 6c 74 20 59 59 59 20 24 61 72 67   result YYY $arg
5490: 73 0a 2b 09 7d 0a 2b 09 70 72 6f 63 20 7a 20 61  s.+.}.+.proc z a
54a0: 72 67 73 20 7b 0a 2b 09 20 20 20 20 67 6c 6f 62  rgs {.+.    glob
54b0: 61 6c 20 72 65 73 75 6c 74 0a 2b 09 20 20 20 20  al result.+.    
54c0: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5a  lappend result Z
54d0: 5a 5a 20 24 61 72 67 73 0a 2b 09 7d 0a 2b 20 20  ZZ $args.+.}.+  
54e0: 20 20 7d 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61    }.+    namespa
54f0: 63 65 20 69 6d 70 6f 72 74 20 2d 66 6f 72 63 65  ce import -force
5500: 20 66 6f 6f 3a 3a 62 61 72 0a 2b 20 20 20 20 73   foo::bar.+    s
5510: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20  et result [list 
5520: 5b 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d  [namespace ensem
5530: 62 6c 65 20 63 6f 6e 66 69 67 20 62 61 72 5d 5d  ble config bar]]
5540: 0a 2b 20 20 20 20 62 61 72 20 78 20 31 32 33 0a  .+    bar x 123.
5550: 2b 20 20 20 20 62 61 72 20 79 20 34 35 36 0a 2b  +    bar y 456.+
5560: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 6e      namespace en
5570: 73 65 6d 62 6c 65 20 63 6f 6e 66 69 67 20 62 61  semble config ba
5580: 72 20 2d 75 6e 6b 6e 6f 77 6e 20 3a 3a 66 6f 6f  r -unknown ::foo
5590: 3a 3a 75 32 0a 2b 20 20 20 20 62 61 72 20 7a 20  ::u2.+    bar z 
55a0: 37 38 39 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61  789.+    namespa
55b0: 63 65 20 64 65 6c 65 74 65 20 66 6f 6f 0a 2b 20  ce delete foo.+ 
55c0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 2b 7d     set result.+}
55d0: 20 7b 7b 2d 6d 61 70 20 7b 7d 20 2d 6e 61 6d 65   {{-map {} -name
55e0: 73 70 61 63 65 20 3a 3a 66 6f 6f 20 2d 70 72 65  space ::foo -pre
55f0: 66 69 78 65 73 20 31 20 2d 73 75 62 63 6f 6d 6d  fixes 1 -subcomm
5600: 61 6e 64 73 20 78 20 2d 75 6e 6b 6e 6f 77 6e 20  ands x -unknown 
5610: 75 7d 20 58 58 58 20 31 32 33 20 3a 3a 66 6f 6f  u} XXX 123 ::foo
5620: 3a 3a 62 61 72 20 7b 79 20 34 35 36 7d 20 59 59  ::bar {y 456} YY
5630: 59 20 34 35 36 20 3a 3a 66 6f 6f 3a 3a 62 61 72  Y 456 ::foo::bar
5640: 20 7b 7a 20 37 38 39 7d 20 5a 5a 5a 20 37 38 39   {z 789} ZZZ 789
5650: 7d 0a 20 74 65 73 74 20 6e 61 6d 65 73 70 61 63  }. test namespac
5660: 65 2d 34 38 2e 32 20 7b 65 6e 73 65 6d 62 6c 65  e-48.2 {ensemble
5670: 73 20 61 6e 64 20 6e 61 6d 65 73 70 61 63 65 20  s and namespace 
5680: 69 6d 70 6f 72 74 3a 20 65 78 69 73 74 73 7d 20  import: exists} 
5690: 7b 0a 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65  {.     namespace
56a0: 20 65 76 61 6c 20 66 6f 6f 20 7b 0a 20 09 6e 61   eval foo {. .na
56b0: 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65  mespace ensemble
56c0: 20 63 72 65 61 74 65 20 2d 63 6f 6d 6d 61 6e 64   create -command
56d0: 20 3a 3a 66 6f 6f 3a 3a 62 61 72 0a 40 40 20 2d   ::foo::bar.@@ -
56e0: 32 35 38 36 2c 37 20 2b 32 37 37 35 2c 32 34 20  2586,7 +2775,24 
56f0: 40 40 0a 20 20 20 20 20 72 65 6e 61 6d 65 20 75  @@.     rename u
5700: 6e 6b 6e 6f 77 6e 2e 73 61 76 65 20 3a 3a 75 6e  nknown.save ::un
5710: 6b 6e 6f 77 6e 0a 20 20 20 20 20 6e 61 6d 65 73  known.     names
5720: 70 61 63 65 20 65 76 61 6c 20 3a 3a 20 5b 6c 69  pace eval :: [li
5730: 73 74 20 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b  st namespace unk
5740: 6e 6f 77 6e 20 24 68 61 6e 64 6c 65 72 5d 0a 20  nown $handler]. 
5750: 7d 20 2d 72 65 73 75 6c 74 20 53 55 43 43 45 53  } -result SUCCES
5760: 53 0a 2d 20 20 20 20 0a 2b 0a 2b 23 0a 2b 23 20  S.-    .+.+#.+# 
5770: 54 49 50 20 32 38 33 3a 20 54 65 73 74 73 20 66  TIP 283: Tests f
5780: 6f 72 20 69 6e 74 65 72 61 63 74 69 6f 6e 20 6f  or interaction o
5790: 66 20 65 6e 73 65 6d 62 6c 65 73 2c 20 70 61 74  f ensembles, pat
57a0: 68 73 20 61 6e 64 20 6e 61 6d 65 73 70 61 63 65  hs and namespace
57b0: 20 75 6e 6b 6e 6f 77 6e 0a 2b 23 0a 2b 23 20 4e   unknown.+#.+# N
57c0: 6f 74 65 20 74 68 61 74 20 73 6f 6d 65 20 6f 74  ote that some ot
57d0: 68 65 72 20 74 65 73 74 73 20 6e 61 6d 65 64 20  her tests named 
57e0: 22 2e 61 22 20 61 72 65 20 69 6e 63 6c 75 64 65  ".a" are include
57f0: 64 20 61 62 6f 76 65 20 69 6e 20 74 68 65 20 65  d above in the e
5800: 6e 73 65 6d 62 6c 65 0a 2b 23 20 73 65 63 74 69  nsemble.+# secti
5810: 6f 6e 0a 2b 0a 2b 23 20 2d 75 6e 6b 6e 6f 77 6e  on.+.+# -unknown
5820: 20 66 6f 75 6e 64 20 69 6e 20 70 61 74 68 0a 2b   found in path.+
5830: 23 20 2d 75 6e 6b 6e 6f 77 6e 20 66 6f 75 6e 64  # -unknown found
5840: 20 62 79 20 6e 73 2d 75 6e 6b 6e 6f 77 6e 0a 2b   by ns-unknown.+
5850: 23 20 2d 75 6e 6b 6e 6f 77 6e 20 66 6f 6c 6c 6f  # -unknown follo
5860: 77 73 20 70 61 74 68 0a 2b 23 20 2d 75 6e 6b 6e  ws path.+# -unkn
5870: 6f 77 6e 20 66 6f 6c 6c 6f 77 73 20 6e 73 2d 75  own follows ns-u
5880: 6e 6b 6e 6f 77 6e 0a 2b 23 20 2d 6d 61 70 20 66  nknown.+# -map f
5890: 6f 6c 6c 6f 77 73 20 70 61 74 68 0a 2b 23 20 2d  ollows path.+# -
58a0: 6d 61 70 20 66 6f 6c 6c 6f 77 73 20 6e 73 2d 75  map follows ns-u
58b0: 6e 6b 6e 6f 77 6e 0a 2b 23 20 2d 73 75 62 63 6f  nknown.+# -subco
58c0: 6d 6d 61 6e 64 73 20 66 6f 6c 6c 6f 77 73 20 70  mmands follows p
58d0: 61 74 68 0a 2b 23 20 2d 73 75 62 63 6f 6d 6d 61  ath.+# -subcomma
58e0: 6e 64 73 20 66 6f 6c 6c 6f 77 73 20 6e 73 2d 75  nds follows ns-u
58f0: 6e 6b 6e 6f 77 6e 0a 2b 23 20 65 78 70 6f 72 74  nknown.+# export
5900: 73 20 66 6f 6c 6c 6f 77 20 70 61 74 68 20 28 3f  s follow path (?
5910: 29 0a 2b 23 20 65 78 70 6f 72 74 73 20 66 6f 6c  ).+# exports fol
5920: 6c 6f 77 20 6e 73 2d 75 6e 6b 6e 6f 77 6e 20 28  low ns-unknown (
5930: 3f 29 0a 2b 0a 20 23 20 63 6c 65 61 6e 75 70 0a  ?).+. # cleanup.
5940: 20 63 61 74 63 68 20 7b 72 65 6e 61 6d 65 20 63   catch {rename c
5950: 6d 64 31 20 7b 7d 7d 0a 20 63 61 74 63 68 20 7b  md1 {}}. catch {
5960: 75 6e 73 65 74 20 6c 7d 0a                       unset l}.