Tcl Source Code

Hex Artifact Content
Login

Artifact 30f647d46731841bdb5a932f0ebc05b865725435:

Attachment "tip283.patch" to ticket [1577282fff] added by msofer 2006-10-26 08:13:12.
0000: 49 6e 64 65 78 3a 20 64 6f 63 2f 6e 61 6d 65 73  Index: doc/names
0010: 70 61 63 65 2e 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d  pace.n.=========
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66  ==========.RCS f
0060: 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63  ile: /cvsroot/tc
0070: 6c 2f 74 63 6c 2f 64 6f 63 2f 6e 61 6d 65 73 70  l/tcl/doc/namesp
0080: 61 63 65 2e 6e 2c 76 0a 72 65 74 72 69 65 76 69  ace.n,v.retrievi
0090: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 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 32 36 20 4f 63 74 20 32 30 30 36 20  e.n.26 Oct 2006 
0110: 30 31 3a 31 30 3a 32 38 20 2d 30 30 30 30 0a 40  01:10:28 -0000.@
0120: 40 20 2d 36 37 39 2c 37 20 2b 36 37 39 2c 38 20  @ -679,7 +679,8 
0130: 40 40 0a 20 74 68 65 20 72 65 73 75 6c 74 20 6f  @@. the result o
0140: 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2e 20 20  f the command.  
0150: 4e 6f 74 65 20 74 68 61 74 20 69 74 20 69 73 20  Note that it is 
0160: 6c 65 67 61 6c 20 74 6f 20 6d 61 6b 65 20 74 68  legal to make th
0170: 65 20 74 61 72 67 65 74 0a 20 6f 66 20 61 6e 20  e target. of an 
0180: 65 6e 73 65 6d 62 6c 65 20 72 65 77 72 69 74 65  ensemble rewrite
0190: 20 62 65 20 61 6e 6f 74 68 65 72 20 28 6f 72 20   be another (or 
01a0: 65 76 65 6e 20 74 68 65 20 73 61 6d 65 29 20 65  even the same) e
01b0: 6e 73 65 6d 62 6c 65 0a 20 63 6f 6d 6d 61 6e 64  nsemble. command
01c0: 2e 20 20 54 68 65 20 65 6e 73 65 6d 62 6c 65 20  .  The ensemble 
01d0: 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 6e 6f 74  command will not
01e0: 20 62 65 20 76 69 73 69 62 6c 65 20 74 68 72 6f   be visible thro
01f0: 75 67 68 20 74 68 65 20 75 73 65 20 6f 66 0a 2d  ugh the use of.-
0200: 74 68 65 20 5c 66 42 75 70 6c 65 76 65 6c 5c 66  the \fBuplevel\f
0210: 52 20 6f 72 20 5c 66 42 69 6e 66 6f 20 6c 65 76  R or \fBinfo lev
0220: 65 6c 5c 66 52 20 63 6f 6d 6d 61 6e 64 73 2e 0a  el\fR commands..
0230: 2b 74 68 65 20 5c 66 42 75 70 6c 65 76 65 6c 5c  +the \fBuplevel\
0240: 66 52 20 6f 72 20 5c 66 42 69 6e 66 6f 20 6c 65  fR or \fBinfo le
0250: 76 65 6c 5c 66 52 20 63 6f 6d 6d 61 6e 64 73 2c  vel\fR commands,
0260: 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74   with the except
0270: 69 6f 6e 20 6f 66 0a 2b 5c 66 42 69 6e 66 6f 20  ion of.+\fBinfo 
0280: 6c 65 76 65 6c 20 30 5c 66 52 2e 0a 20 2e 53 53  level 0\fR.. .SS
0290: 20 22 45 4e 53 45 4d 42 4c 45 20 4f 50 54 49 4f   "ENSEMBLE OPTIO
02a0: 4e 53 22 0a 20 2e 50 50 0a 20 54 68 65 20 66 6f  NS". .PP. The fo
02b0: 6c 6c 6f 77 69 6e 67 20 6f 70 74 69 6f 6e 73 2c  llowing options,
02c0: 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 74 68   supported by th
02d0: 65 20 5c 66 42 6e 61 6d 65 73 70 61 63 65 20 65  e \fBnamespace e
02e0: 6e 73 65 6d 62 6c 65 0a 40 40 20 2d 36 38 37 2c  nsemble.@@ -687,
02f0: 31 33 20 2b 36 38 38 2c 31 36 20 40 40 0a 20 61  13 +688,16 @@. a
0300: 6e 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6d 6d 61  n ensemble comma
0310: 6e 64 20 62 65 68 61 76 65 73 3a 0a 20 2e 54 50  nd behaves:. .TP
0320: 0a 20 5c 66 42 5c 2d 6d 61 70 5c 66 52 0a 2d 57  . \fB\-map\fR.-W
0330: 68 65 6e 20 6e 6f 6e 2d 65 6d 70 74 79 2c 20 74  hen non-empty, t
0340: 68 69 73 20 6f 70 74 69 6f 6e 20 73 75 70 70 6c  his option suppl
0350: 69 65 73 20 61 20 64 69 63 74 69 6f 6e 61 72 79  ies a dictionary
0360: 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61   that provides a
0370: 0a 2d 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 73  .-mapping from s
0380: 75 62 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 73 20  ubcommand names 
0390: 74 6f 20 61 20 6c 69 73 74 20 6f 66 20 70 72 65  to a list of pre
03a0: 66 69 78 20 77 6f 72 64 73 20 74 6f 20 73 75 62  fix words to sub
03b0: 73 74 69 74 75 74 65 0a 2d 69 6e 20 70 6c 61 63  stitute.-in plac
03c0: 65 20 6f 66 20 74 68 65 20 65 6e 73 65 6d 62 6c  e of the ensembl
03d0: 65 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 73 75  e command and su
03e0: 62 63 6f 6d 6d 61 6e 64 20 77 6f 72 64 73 20 28  bcommand words (
03f0: 69 6e 20 61 20 6d 61 6e 6e 65 72 0a 2d 73 69 6d  in a manner.-sim
0400: 69 6c 61 72 20 74 6f 20 61 6e 20 61 6c 69 61 73  ilar to an alias
0410: 20 63 72 65 61 74 65 64 20 77 69 74 68 20 5c 66   created with \f
0420: 42 69 6e 74 65 72 70 20 61 6c 69 61 73 5c 66 52  Binterp alias\fR
0430: 3b 20 74 68 65 20 77 6f 72 64 73 20 61 72 65 20  ; the words are 
0440: 6e 6f 74 0a 2d 72 65 70 61 72 73 65 64 20 61 66  not.-reparsed af
0450: 74 65 72 20 73 75 62 73 74 69 74 75 74 69 6f 6e  ter substitution
0460: 29 2e 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70  ).  When this op
0470: 74 69 6f 6e 20 69 73 20 65 6d 70 74 79 2c 20 74  tion is empty, t
0480: 68 65 20 6d 61 70 70 69 6e 67 0a 2d 77 69 6c 6c  he mapping.-will
0490: 20 62 65 20 66 72 6f 6d 20 74 68 65 20 6c 6f 63   be from the loc
04a0: 61 6c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73  al name of the s
04b0: 75 62 63 6f 6d 6d 61 6e 64 20 74 6f 20 69 74 73  ubcommand to its
04c0: 20 66 75 6c 6c 79 2d 71 75 61 6c 69 66 69 65 64   fully-qualified
04d0: 0a 2d 6e 61 6d 65 2e 20 20 4e 6f 74 65 20 74 68  .-name.  Note th
04e0: 61 74 20 77 68 65 6e 20 74 68 69 73 20 6f 70 74  at when this opt
04f0: 69 6f 6e 20 69 73 20 6e 6f 6e 2d 65 6d 70 74 79  ion is non-empty
0500: 20 61 6e 64 20 74 68 65 0a 2b 57 68 65 6e 20 6e   and the.+When n
0510: 6f 6e 2d 65 6d 70 74 79 2c 20 74 68 69 73 20 6f  on-empty, this o
0520: 70 74 69 6f 6e 20 73 75 70 70 6c 69 65 73 20 61  ption supplies a
0530: 20 64 69 63 74 69 6f 6e 61 72 79 20 74 68 61 74   dictionary that
0540: 20 70 72 6f 76 69 64 65 73 20 61 20 6d 61 70 70   provides a mapp
0550: 69 6e 67 0a 2b 66 72 6f 6d 20 73 75 62 63 6f 6d  ing.+from subcom
0560: 6d 61 6e 64 20 6e 61 6d 65 73 20 74 6f 20 61 20  mand names to a 
0570: 6c 69 73 74 20 6f 66 20 70 72 65 66 69 78 20 77  list of prefix w
0580: 6f 72 64 73 20 74 6f 20 73 75 62 73 74 69 74 75  ords to substitu
0590: 74 65 20 69 6e 20 70 6c 61 63 65 20 6f 66 0a 2b  te in place of.+
05a0: 74 68 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6d  the ensemble com
05b0: 6d 61 6e 64 20 61 6e 64 20 73 75 62 63 6f 6d 6d  mand and subcomm
05c0: 61 6e 64 20 77 6f 72 64 73 20 28 69 6e 20 61 20  and words (in a 
05d0: 6d 61 6e 6e 65 72 20 73 69 6d 69 6c 61 72 20 74  manner similar t
05e0: 6f 20 61 6e 20 61 6c 69 61 73 0a 2b 63 72 65 61  o an alias.+crea
05f0: 74 65 64 20 77 69 74 68 20 69 6e 74 65 72 70 20  ted with interp 
0600: 61 6c 69 61 73 3b 20 74 68 65 20 77 6f 72 64 73  alias; the words
0610: 20 61 72 65 20 6e 6f 74 20 72 65 70 61 72 73 65   are not reparse
0620: 64 20 61 66 74 65 72 0a 2b 73 75 62 73 74 69 74  d after.+substit
0630: 75 74 69 6f 6e 29 2e 20 54 68 65 20 72 65 73 75  ution). The resu
0640: 6c 74 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 69 73  lting command is
0650: 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 68   invoked with th
0660: 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d  e original argum
0670: 65 6e 74 73 0a 2b 69 6e 20 74 68 65 20 6e 61 6d  ents.+in the nam
0680: 65 73 70 61 63 65 20 6f 66 20 74 68 65 20 65 6e  espace of the en
0690: 73 65 6d 62 6c 65 2e 20 0a 2b 57 68 65 6e 20 74  semble. .+When t
06a0: 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 65 6d  his option is em
06b0: 70 74 79 2c 20 74 68 65 20 6d 61 70 70 69 6e 67  pty, the mapping
06c0: 0a 2b 77 69 6c 6c 20 62 65 20 66 72 6f 6d 20 74  .+will be from t
06d0: 68 65 20 6c 6f 63 61 6c 20 6e 61 6d 65 20 6f 66  he local name of
06e0: 20 74 68 65 20 73 75 62 63 6f 6d 6d 61 6e 64 20   the subcommand 
06f0: 74 6f 20 69 74 73 20 61 6c 69 61 73 2c 20 72 65  to its alias, re
0700: 73 6f 6c 76 65 64 20 66 72 6f 6d 0a 2b 74 68 65  solved from.+the
0710: 20 65 6e 73 65 6d 62 6c 65 27 73 20 6e 61 6d 65   ensemble's name
0720: 73 70 61 63 65 2e 0a 2b 4e 6f 74 65 20 74 68 61  space..+Note tha
0730: 74 20 77 68 65 6e 20 74 68 69 73 20 6f 70 74 69  t when this opti
0740: 6f 6e 20 69 73 20 6e 6f 6e 2d 65 6d 70 74 79 20  on is non-empty 
0750: 61 6e 64 20 74 68 65 0a 20 5c 66 42 5c 2d 73 75  and the. \fB\-su
0760: 62 63 6f 6d 6d 61 6e 64 73 5c 66 52 20 6f 70 74  bcommands\fR opt
0770: 69 6f 6e 20 69 73 20 65 6d 70 74 79 2c 20 74 68  ion is empty, th
0780: 65 20 65 6e 73 65 6d 62 6c 65 20 73 75 62 63 6f  e ensemble subco
0790: 6d 6d 61 6e 64 20 6e 61 6d 65 73 0a 20 77 69 6c  mmand names. wil
07a0: 6c 20 62 65 20 65 78 61 63 74 6c 79 20 74 68 6f  l be exactly tho
07b0: 73 65 20 77 6f 72 64 73 20 74 68 61 74 20 68 61  se words that ha
07c0: 76 65 20 6d 61 70 70 69 6e 67 73 20 69 6e 20 74  ve mappings in t
07d0: 68 65 20 64 69 63 74 69 6f 6e 61 72 79 2e 0a 20  he dictionary.. 
07e0: 2e 54 50 0a 40 40 20 2d 37 37 31 2c 39 20 2b 37  .TP.@@ -771,9 +7
07f0: 37 35 2c 39 20 40 40 0a 20 2e 50 50 0a 20 57 68  75,9 @@. .PP. Wh
0800: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
0810: 20 61 20 6e 6f 6e 2d 65 6d 70 74 79 20 6c 69 73   a non-empty lis
0820: 74 2c 20 74 68 65 20 77 6f 72 64 73 20 6f 66 20  t, the words of 
0830: 74 68 61 74 20 6c 69 73 74 20 61 72 65 20 75 73  that list are us
0840: 65 64 0a 20 74 6f 20 72 65 70 6c 61 63 65 20 74  ed. to replace t
0850: 68 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6d 6d  he ensemble comm
0860: 61 6e 64 20 61 6e 64 20 73 75 62 63 6f 6d 6d 61  and and subcomma
0870: 6e 64 2c 20 6a 75 73 74 20 61 73 20 69 66 20 74  nd, just as if t
0880: 68 65 79 20 68 61 64 0a 2d 62 65 65 6e 20 6c 6f  hey had.-been lo
0890: 6f 6b 65 64 20 75 70 20 69 6e 20 74 68 65 20 5c  oked up in the \
08a0: 66 42 5c 2d 6d 61 70 5c 66 52 2e 20 49 74 20 69  fB\-map\fR. It i
08b0: 73 20 75 70 20 74 6f 20 74 68 65 20 75 6e 6b 6e  s up to the unkn
08c0: 6f 77 6e 20 68 61 6e 64 6c 65 72 20 74 6f 0a 2d  own handler to.-
08d0: 73 75 70 70 6c 79 20 61 6c 6c 20 6e 61 6d 65 73  supply all names
08e0: 70 61 63 65 20 71 75 61 6c 69 66 69 65 72 73 20  pace qualifiers 
08f0: 69 66 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  if the implement
0900: 69 6e 67 20 73 75 62 63 6f 6d 6d 61 6e 64 20 69  ing subcommand i
0910: 73 20 6e 6f 74 0a 2d 69 6e 20 74 68 65 20 6e 61  s not.-in the na
0920: 6d 65 73 70 61 63 65 20 6f 66 20 74 68 65 20 63  mespace of the c
0930: 61 6c 6c 65 72 20 6f 66 20 74 68 65 20 65 6e 73  aller of the ens
0940: 65 6d 62 6c 65 20 63 6f 6d 6d 61 6e 64 2e 20 41  emble command. A
0950: 6c 73 6f 20 6e 6f 74 65 20 74 68 61 74 0a 2b 62  lso note that.+b
0960: 65 65 6e 20 6c 6f 6f 6b 65 64 20 75 70 20 69 6e  een looked up in
0970: 20 74 68 65 20 5c 66 42 5c 2d 6d 61 70 5c 66 52   the \fB\-map\fR
0980: 2e 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 69  . The implementi
0990: 6e 67 20 73 75 62 63 6f 6d 6d 61 6e 64 20 69 73  ng subcommand is
09a0: 20 6c 6f 6f 6b 65 64 20 75 70 0a 2b 69 6e 20 74   looked up.+in t
09b0: 68 65 20 65 6e 73 65 6d 62 6c 65 27 73 20 6e 61  he ensemble's na
09c0: 6d 65 73 70 61 63 65 20 75 73 69 6e 67 20 6e 6f  mespace using no
09d0: 72 6d 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 6f 63  rmal command loc
09e0: 61 74 69 6f 6e 20 72 75 6c 65 73 2e 0a 2b 41 6c  ation rules..+Al
09f0: 73 6f 20 6e 6f 74 65 20 74 68 61 74 0a 20 77 68  so note that. wh
0a00: 65 6e 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6d 6d  en ensemble comm
0a10: 61 6e 64 73 20 61 72 65 20 63 68 61 69 6e 65 64  ands are chained
0a20: 20 28 65 2e 67 2e 20 69 66 20 79 6f 75 20 6d 61   (e.g. if you ma
0a30: 6b 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 20 63  ke one of the. c
0a40: 6f 6d 6d 61 6e 64 73 20 74 68 61 74 20 69 6d 70  ommands that imp
0a50: 6c 65 6d 65 6e 74 20 61 6e 20 65 6e 73 65 6d 62  lement an ensemb
0a60: 6c 65 20 73 75 62 63 6f 6d 6d 61 6e 64 20 69 6e  le subcommand in
0a70: 74 6f 20 61 6e 20 65 6e 73 65 6d 62 6c 65 2c 20  to an ensemble, 
0a80: 69 6e 20 61 0a 20 6d 61 6e 6e 65 72 20 73 69 6d  in a. manner sim
0a90: 69 6c 61 72 20 74 6f 20 74 68 65 20 74 65 78 74  ilar to the text
0aa0: 20 77 69 64 67 65 74 27 73 20 74 61 67 20 61 6e   widget's tag an
0ab0: 64 20 6d 61 72 6b 20 73 75 62 63 6f 6d 6d 61 6e  d mark subcomman
0ac0: 64 73 29 20 74 68 65 6e 20 74 68 65 0a 49 6e 64  ds) then the.Ind
0ad0: 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 42  ex: generic/tclB
0ae0: 61 73 69 63 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d  asic.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 3d 0a 52 43 53 20 66  ==========.RCS f
0b30: 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63  ile: /cvsroot/tc
0b40: 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63  l/tcl/generic/tc
0b50: 6c 42 61 73 69 63 2e 63 2c 76 0a 72 65 74 72 69  lBasic.c,v.retri
0b60: 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31  eving revision 1
0b70: 2e 32 30 33 0a 64 69 66 66 20 2d 75 20 2d 72 31  .203.diff -u -r1
0b80: 2e 32 30 33 20 74 63 6c 42 61 73 69 63 2e 63 0a  .203 tclBasic.c.
0b90: 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 42  --- generic/tclB
0ba0: 61 73 69 63 2e 63 09 32 33 20 4f 63 74 20 32 30  asic.c.23 Oct 20
0bb0: 30 36 20 32 33 3a 30 34 3a 31 32 20 2d 30 30 30  06 23:04:12 -000
0bc0: 30 09 31 2e 32 30 33 0a 2b 2b 2b 20 67 65 6e 65  0.1.203.+++ gene
0bd0: 72 69 63 2f 74 63 6c 42 61 73 69 63 2e 63 09 32  ric/tclBasic.c.2
0be0: 36 20 4f 63 74 20 32 30 30 36 20 30 31 3a 31 30  6 Oct 2006 01:10
0bf0: 3a 33 31 20 2d 30 30 30 30 0a 40 40 20 2d 33 32  :31 -0000.@@ -32
0c00: 39 34 2c 31 33 20 2b 33 32 39 34 2c 31 32 20 40  94,13 +3294,12 @
0c10: 40 0a 20 09 76 61 72 46 72 61 6d 65 50 74 72 20  @. .varFramePtr 
0c20: 3d 20 69 50 74 72 2d 3e 72 6f 6f 74 46 72 61 6d  = iPtr->rootFram
0c30: 65 50 74 72 3b 0a 20 09 73 61 76 65 64 56 61 72  ePtr;. .savedVar
0c40: 46 72 61 6d 65 50 74 72 20 3d 20 69 50 74 72 2d  FramePtr = iPtr-
0c50: 3e 76 61 72 46 72 61 6d 65 50 74 72 3b 0a 20 09  >varFramePtr;. .
0c60: 69 50 74 72 2d 3e 76 61 72 46 72 61 6d 65 50 74  iPtr->varFramePt
0c70: 72 20 3d 20 76 61 72 46 72 61 6d 65 50 74 72 3b  r = varFramePtr;
0c80: 20 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 69 66   .+    } else if
0c90: 20 28 69 50 74 72 2d 3e 6c 6f 6f 6b 75 70 4e 73   (iPtr->lookupNs
0ca0: 50 74 72 29 20 7b 0a 2b 09 73 61 76 65 64 4e 73  Ptr) {.+.savedNs
0cb0: 50 74 72 20 3d 20 76 61 72 46 72 61 6d 65 50 74  Ptr = varFramePt
0cc0: 72 2d 3e 6e 73 50 74 72 3b 0a 2b 09 76 61 72 46  r->nsPtr;.+.varF
0cd0: 72 61 6d 65 50 74 72 2d 3e 6e 73 50 74 72 20 3d  ramePtr->nsPtr =
0ce0: 20 69 50 74 72 2d 3e 6c 6f 6f 6b 75 70 4e 73 50   iPtr->lookupNsP
0cf0: 74 72 3b 0a 20 20 20 20 20 7d 20 65 6c 73 65 20  tr;.     } else 
0d00: 69 66 20 28 66 6c 61 67 73 20 26 20 54 43 4c 5f  if (flags & TCL_
0d10: 45 56 41 4c 5f 49 4e 56 4f 4b 45 29 20 7b 0a 20  EVAL_INVOKE) {. 
0d20: 09 73 61 76 65 64 4e 73 50 74 72 20 3d 20 76 61  .savedNsPtr = va
0d30: 72 46 72 61 6d 65 50 74 72 2d 3e 6e 73 50 74 72  rFramePtr->nsPtr
0d40: 3b 0a 2d 09 69 66 20 28 69 50 74 72 2d 3e 6c 6f  ;.-.if (iPtr->lo
0d50: 6f 6b 75 70 4e 73 50 74 72 29 20 7b 0a 2d 09 20  okupNsPtr) {.-. 
0d60: 20 20 20 76 61 72 46 72 61 6d 65 50 74 72 2d 3e     varFramePtr->
0d70: 6e 73 50 74 72 20 3d 20 69 50 74 72 2d 3e 6c 6f  nsPtr = iPtr->lo
0d80: 6f 6b 75 70 4e 73 50 74 72 3b 0a 2d 09 7d 20 65  okupNsPtr;.-.} e
0d90: 6c 73 65 20 7b 0a 2d 09 20 20 20 20 76 61 72 46  lse {.-.    varF
0da0: 72 61 6d 65 50 74 72 2d 3e 6e 73 50 74 72 20 3d  ramePtr->nsPtr =
0db0: 20 69 50 74 72 2d 3e 67 6c 6f 62 61 6c 4e 73 50   iPtr->globalNsP
0dc0: 74 72 3b 0a 2d 09 7d 0a 2b 09 76 61 72 46 72 61  tr;.-.}.+.varFra
0dd0: 6d 65 50 74 72 2d 3e 6e 73 50 74 72 20 3d 20 69  mePtr->nsPtr = i
0de0: 50 74 72 2d 3e 67 6c 6f 62 61 6c 4e 73 50 74 72  Ptr->globalNsPtr
0df0: 3b 0a 20 20 20 20 20 7d 0a 20 0a 20 0a 49 6e 64  ;.     }. . .Ind
0e00: 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 4e  ex: generic/tclN
0e10: 61 6d 65 73 70 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d  amesp.c.========
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 0a 52 43 53 20  ===========.RCS 
0e60: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74  file: /cvsroot/t
0e70: 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74  cl/tcl/generic/t
0e80: 63 6c 4e 61 6d 65 73 70 2e 63 2c 76 0a 72 65 74  clNamesp.c,v.ret
0e90: 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e  rieving revision
0ea0: 20 31 2e 31 30 35 0a 64 69 66 66 20 2d 75 20 2d   1.105.diff -u -
0eb0: 72 31 2e 31 30 35 20 74 63 6c 4e 61 6d 65 73 70  r1.105 tclNamesp
0ec0: 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74  .c.--- generic/t
0ed0: 63 6c 4e 61 6d 65 73 70 2e 63 09 32 33 20 4f 63  clNamesp.c.23 Oc
0ee0: 74 20 32 30 30 36 20 32 32 3a 34 39 3a 32 35 20  t 2006 22:49:25 
0ef0: 2d 30 30 30 30 09 31 2e 31 30 35 0a 2b 2b 2b 20  -0000.1.105.+++ 
0f00: 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d 65 73  generic/tclNames
0f10: 70 2e 63 09 32 36 20 4f 63 74 20 32 30 30 36 20  p.c.26 Oct 2006 
0f20: 30 31 3a 31 30 3a 33 34 20 2d 30 30 30 30 0a 40  01:10:34 -0000.@
0f30: 40 20 2d 35 30 31 35 2c 37 20 2b 35 30 31 35 2c  @ -5015,7 +5015,
0f40: 37 20 40 40 0a 20 09 63 68 61 72 20 2a 6e 61 6d  7 @@. .char *nam
0f50: 65 3b 0a 20 09 54 63 6c 5f 44 69 63 74 53 65 61  e;. .Tcl_DictSea
0f60: 72 63 68 20 73 65 61 72 63 68 3b 0a 20 09 54 63  rch search;. .Tc
0f70: 6c 5f 4f 62 6a 20 2a 6c 69 73 74 4f 62 6a 3b 0a  l_Obj *listObj;.
0f80: 2d 09 69 6e 74 20 64 6f 6e 65 2c 20 6c 65 6e 2c  -.int done, len,
0f90: 20 61 6c 6c 6f 63 61 74 65 64 4d 61 70 46 6c 61   allocatedMapFla
0fa0: 67 20 3d 20 30 3b 0a 2b 09 69 6e 74 20 64 6f 6e  g = 0;.+.int don
0fb0: 65 2c 20 6c 65 6e 3b 0a 20 09 2f 2a 0a 20 09 20  e, len;. ./*. . 
0fc0: 2a 20 44 65 66 61 75 6c 74 73 0a 20 09 20 2a 2f  * Defaults. . */
0fd0: 0a 40 40 20 2d 35 30 34 35 2c 39 20 2b 35 30 34  .@@ -5045,9 +504
0fe0: 35 2c 36 20 40 40 0a 20 09 66 6f 72 20 28 3b 20  5,6 @@. .for (; 
0ff0: 6f 62 6a 63 3e 31 20 3b 20 6f 62 6a 63 2d 3d 32  objc>1 ; objc-=2
1000: 2c 6f 62 6a 76 2b 3d 32 20 29 20 7b 0a 20 09 20  ,objv+=2 ) {. . 
1010: 20 20 20 69 66 20 28 54 63 6c 5f 47 65 74 49 6e     if (Tcl_GetIn
1020: 64 65 78 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  dexFromObj(inter
1030: 70 2c 20 6f 62 6a 76 5b 30 5d 2c 20 63 72 65 61  p, objv[0], crea
1040: 74 65 4f 70 74 69 6f 6e 73 2c 20 22 6f 70 74 69  teOptions, "opti
1050: 6f 6e 22 2c 0a 20 09 09 20 20 20 20 30 2c 20 26  on",. ..    0, &
1060: 69 6e 64 65 78 29 20 21 3d 20 54 43 4c 5f 4f 4b  index) != TCL_OK
1070: 29 20 7b 0a 2d 09 09 69 66 20 28 61 6c 6c 6f 63  ) {.-..if (alloc
1080: 61 74 65 64 4d 61 70 46 6c 61 67 29 20 7b 0a 2d  atedMapFlag) {.-
1090: 09 09 20 20 20 20 54 63 6c 5f 44 65 63 72 52 65  ..    Tcl_DecrRe
10a0: 66 43 6f 75 6e 74 28 6d 61 70 4f 62 6a 29 3b 0a  fCount(mapObj);.
10b0: 2d 09 09 7d 0a 20 09 09 72 65 74 75 72 6e 20 54  -..}. ..return T
10c0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 09 20 20 20 20  CL_ERROR;. .    
10d0: 7d 0a 20 09 20 20 20 20 73 77 69 74 63 68 20 28  }. .    switch (
10e0: 28 65 6e 75 6d 20 45 6e 73 43 72 65 61 74 65 4f  (enum EnsCreateO
10f0: 70 74 73 29 20 69 6e 64 65 78 29 20 7b 0a 40 40  pts) index) {.@@
1100: 20 2d 35 30 35 36 2c 32 35 20 2b 35 30 35 33 2c   -5056,25 +5053,
1110: 31 39 20 40 40 0a 20 09 09 63 6f 6e 74 69 6e 75  19 @@. ..continu
1120: 65 3b 0a 20 09 20 20 20 20 63 61 73 65 20 43 52  e;. .    case CR
1130: 54 5f 53 55 42 43 4d 44 53 3a 0a 20 09 09 69 66  T_SUBCMDS:. ..if
1140: 20 28 54 63 6c 5f 4c 69 73 74 4f 62 6a 4c 65 6e   (Tcl_ListObjLen
1150: 67 74 68 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  gth(interp, objv
1160: 5b 31 5d 2c 20 26 6c 65 6e 29 20 21 3d 20 54 43  [1], &len) != TC
1170: 4c 5f 4f 4b 29 20 7b 0a 2d 09 09 20 20 20 20 69  L_OK) {.-..    i
1180: 66 20 28 61 6c 6c 6f 63 61 74 65 64 4d 61 70 46  f (allocatedMapF
1190: 6c 61 67 29 20 7b 0a 2d 09 09 09 54 63 6c 5f 44  lag) {.-...Tcl_D
11a0: 65 63 72 52 65 66 43 6f 75 6e 74 28 6d 61 70 4f  ecrRefCount(mapO
11b0: 62 6a 29 3b 0a 2d 09 09 20 20 20 20 7d 0a 20 09  bj);.-..    }. .
11c0: 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
11d0: 45 52 52 4f 52 3b 0a 20 09 09 7d 0a 20 09 09 73  ERROR;. ..}. ..s
11e0: 75 62 63 6d 64 4f 62 6a 20 3d 20 28 6c 65 6e 20  ubcmdObj = (len 
11f0: 3e 20 30 20 3f 20 6f 62 6a 76 5b 31 5d 20 3a 20  > 0 ? objv[1] : 
1200: 4e 55 4c 4c 29 3b 0a 20 09 09 63 6f 6e 74 69 6e  NULL);. ..contin
1210: 75 65 3b 0a 20 09 20 20 20 20 63 61 73 65 20 43  ue;. .    case C
1220: 52 54 5f 4d 41 50 3a 20 7b 0a 2d 09 09 54 63 6c  RT_MAP: {.-..Tcl
1230: 5f 4f 62 6a 20 2a 70 61 74 63 68 65 64 44 69 63  _Obj *patchedDic
1240: 74 20 3d 20 4e 55 4c 4c 2c 20 2a 73 75 62 63 6d  t = NULL, *subcm
1250: 64 4f 62 6a 3b 0a 2d 0a 2d 09 09 2f 2a 0a 2b 09  dObj;.-.-../*.+.
1260: 09 54 63 6c 5f 4f 62 6a 20 2a 73 75 62 63 6d 64  .Tcl_Obj *subcmd
1270: 4f 62 6a 3b 0a 2b 09 09 0a 2b 20 20 20 20 20 20  Obj;.+...+      
1280: 20 20 20 20 20 20 20 20 20 20 2f 2a 0a 20 09 09            /*. ..
1290: 20 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 74   * Verify that t
12a0: 68 65 20 6d 61 70 20 69 73 20 73 65 6e 73 69 62  he map is sensib
12b0: 6c 65 2e 0a 20 09 09 20 2a 2f 0a 20 0a 20 09 09  le.. .. */. . ..
12c0: 69 66 20 28 54 63 6c 5f 44 69 63 74 4f 62 6a 46  if (Tcl_DictObjF
12d0: 69 72 73 74 28 69 6e 74 65 72 70 2c 20 6f 62 6a  irst(interp, obj
12e0: 76 5b 31 5d 2c 20 26 73 65 61 72 63 68 2c 0a 20  v[1], &search,. 
12f0: 09 09 09 26 73 75 62 63 6d 64 4f 62 6a 2c 20 26  ...&subcmdObj, &
1300: 6c 69 73 74 4f 62 6a 2c 20 26 64 6f 6e 65 29 20  listObj, &done) 
1310: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2d 09 09  != TCL_OK) {.-..
1320: 20 20 20 20 69 66 20 28 61 6c 6c 6f 63 61 74 65      if (allocate
1330: 64 4d 61 70 46 6c 61 67 29 20 7b 0a 2d 09 09 09  dMapFlag) {.-...
1340: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
1350: 28 6d 61 70 4f 62 6a 29 3b 0a 2d 09 09 20 20 20  (mapObj);.-..   
1360: 20 7d 0a 20 09 09 20 20 20 20 72 65 74 75 72 6e   }. ..    return
1370: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 09 09 7d   TCL_ERROR;. ..}
1380: 0a 20 09 09 69 66 20 28 64 6f 6e 65 29 20 7b 0a  . ..if (done) {.
1390: 40 40 20 2d 35 30 38 33 2c 31 37 20 2b 35 30 37  @@ -5083,17 +507
13a0: 34 2c 31 30 20 40 40 0a 20 09 09 7d 0a 20 09 09  4,10 @@. ..}. ..
13b0: 64 6f 20 7b 0a 20 09 09 20 20 20 20 54 63 6c 5f  do {. ..    Tcl_
13c0: 4f 62 6a 20 2a 2a 6c 69 73 74 76 3b 0a 2d 09 09  Obj **listv;.-..
13d0: 20 20 20 20 63 68 61 72 20 2a 63 6d 64 3b 0a 20      char *cmd;. 
13e0: 0a 20 09 09 20 20 20 20 69 66 20 28 54 63 6c 5f  . ..    if (Tcl_
13f0: 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e  ListObjGetElemen
1400: 74 73 28 69 6e 74 65 72 70 2c 20 6c 69 73 74 4f  ts(interp, listO
1410: 62 6a 2c 20 26 6c 65 6e 2c 0a 20 09 09 09 20 20  bj, &len,. ...  
1420: 20 20 26 6c 69 73 74 76 29 20 21 3d 20 54 43 4c    &listv) != TCL
1430: 5f 4f 4b 29 20 7b 0a 20 09 09 09 54 63 6c 5f 44  _OK) {. ...Tcl_D
1440: 69 63 74 4f 62 6a 44 6f 6e 65 28 26 73 65 61 72  ictObjDone(&sear
1450: 63 68 29 3b 0a 2d 09 09 09 69 66 20 28 70 61 74  ch);.-...if (pat
1460: 63 68 65 64 44 69 63 74 29 20 7b 0a 2d 09 09 09  chedDict) {.-...
1470: 20 20 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43      Tcl_DecrRefC
1480: 6f 75 6e 74 28 70 61 74 63 68 65 64 44 69 63 74  ount(patchedDict
1490: 29 3b 0a 2d 09 09 09 7d 0a 2d 09 09 09 69 66 20  );.-...}.-...if 
14a0: 28 61 6c 6c 6f 63 61 74 65 64 4d 61 70 46 6c 61  (allocatedMapFla
14b0: 67 29 20 7b 0a 2d 09 09 09 20 20 20 20 54 63 6c  g) {.-...    Tcl
14c0: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 6d 61  _DecrRefCount(ma
14d0: 70 4f 62 6a 29 3b 0a 2d 09 09 09 7d 0a 20 09 09  pObj);.-...}. ..
14e0: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f  .return TCL_ERRO
14f0: 52 3b 0a 20 09 09 20 20 20 20 7d 0a 20 09 09 20  R;. ..    }. .. 
1500: 20 20 20 69 66 20 28 6c 65 6e 20 3c 20 31 29 20     if (len < 1) 
1510: 7b 0a 40 40 20 2d 35 31 30 31 2c 35 35 20 2b 35  {.@@ -5101,55 +5
1520: 30 38 35 2c 32 32 20 40 40 0a 20 09 09 09 09 22  085,22 @@. ...."
1530: 65 6e 73 65 6d 62 6c 65 20 73 75 62 63 6f 6d 6d  ensemble subcomm
1540: 61 6e 64 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  and implementati
1550: 6f 6e 73 20 22 0a 20 09 09 09 09 22 6d 75 73 74  ons ". ...."must
1560: 20 62 65 20 6e 6f 6e 2d 65 6d 70 74 79 20 6c 69   be non-empty li
1570: 73 74 73 22 2c 20 54 43 4c 5f 53 54 41 54 49 43  sts", TCL_STATIC
1580: 29 3b 0a 20 09 09 09 54 63 6c 5f 44 69 63 74 4f  );. ...Tcl_DictO
1590: 62 6a 44 6f 6e 65 28 26 73 65 61 72 63 68 29 3b  bjDone(&search);
15a0: 0a 2d 09 09 09 69 66 20 28 70 61 74 63 68 65 64  .-...if (patched
15b0: 44 69 63 74 29 20 7b 0a 2d 09 09 09 20 20 20 20  Dict) {.-...    
15c0: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
15d0: 28 70 61 74 63 68 65 64 44 69 63 74 29 3b 0a 2d  (patchedDict);.-
15e0: 09 09 09 7d 0a 2d 09 09 09 69 66 20 28 61 6c 6c  ...}.-...if (all
15f0: 6f 63 61 74 65 64 4d 61 70 46 6c 61 67 29 20 7b  ocatedMapFlag) {
1600: 0a 2d 09 09 09 20 20 20 20 54 63 6c 5f 44 65 63  .-...    Tcl_Dec
1610: 72 52 65 66 43 6f 75 6e 74 28 6d 61 70 4f 62 6a  rRefCount(mapObj
1620: 29 3b 0a 2d 09 09 09 7d 0a 20 09 09 09 72 65 74  );.-...}. ...ret
1630: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1640: 09 09 20 20 20 20 7d 0a 2d 09 09 20 20 20 20 63  ..    }.-..    c
1650: 6d 64 20 3d 20 54 63 6c 47 65 74 53 74 72 69 6e  md = TclGetStrin
1660: 67 28 6c 69 73 74 76 5b 30 5d 29 3b 0a 2d 09 09  g(listv[0]);.-..
1670: 20 20 20 20 69 66 20 28 21 28 63 6d 64 5b 30 5d      if (!(cmd[0]
1680: 20 3d 3d 20 27 3a 27 20 26 26 20 63 6d 64 5b 31   == ':' && cmd[1
1690: 5d 20 3d 3d 20 27 3a 27 29 29 20 7b 0a 2d 09 09  ] == ':')) {.-..
16a0: 09 54 63 6c 5f 4f 62 6a 20 2a 6e 65 77 4c 69 73  .Tcl_Obj *newLis
16b0: 74 20 3d 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f  t = Tcl_NewListO
16c0: 62 6a 28 6c 65 6e 2c 20 6c 69 73 74 76 29 3b 0a  bj(len, listv);.
16d0: 2d 09 09 09 54 63 6c 5f 4f 62 6a 20 2a 6e 65 77  -...Tcl_Obj *new
16e0: 43 6d 64 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72  Cmd = Tcl_NewStr
16f0: 69 6e 67 4f 62 6a 28 6e 73 50 74 72 2d 3e 66 75  ingObj(nsPtr->fu
1700: 6c 6c 4e 61 6d 65 2c 2d 31 29 3b 0a 2d 0a 2d 09  llName,-1);.-.-.
1710: 09 09 69 66 20 28 6e 73 50 74 72 2d 3e 70 61 72  ..if (nsPtr->par
1720: 65 6e 74 50 74 72 29 20 7b 0a 2d 09 09 09 20 20  entPtr) {.-...  
1730: 20 20 54 63 6c 5f 41 70 70 65 6e 64 53 74 72 69    Tcl_AppendStri
1740: 6e 67 73 54 6f 4f 62 6a 28 6e 65 77 43 6d 64 2c  ngsToObj(newCmd,
1750: 20 22 3a 3a 22 2c 20 4e 55 4c 4c 29 3b 0a 2d 09   "::", NULL);.-.
1760: 09 09 7d 0a 2d 09 09 09 54 63 6c 5f 41 70 70 65  ..}.-...Tcl_Appe
1770: 6e 64 4f 62 6a 54 6f 4f 62 6a 28 6e 65 77 43 6d  ndObjToObj(newCm
1780: 64 2c 20 6c 69 73 74 76 5b 30 5d 29 3b 0a 2d 09  d, listv[0]);.-.
1790: 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 52 65 70  ..Tcl_ListObjRep
17a0: 6c 61 63 65 28 4e 55 4c 4c 2c 20 6e 65 77 4c 69  lace(NULL, newLi
17b0: 73 74 2c 20 30 2c 20 31 2c 20 31 2c 20 26 6e 65  st, 0, 1, 1, &ne
17c0: 77 43 6d 64 29 3b 0a 2d 09 09 09 69 66 20 28 70  wCmd);.-...if (p
17d0: 61 74 63 68 65 64 44 69 63 74 20 3d 3d 20 4e 55  atchedDict == NU
17e0: 4c 4c 29 20 7b 0a 2d 09 09 09 20 20 20 20 70 61  LL) {.-...    pa
17f0: 74 63 68 65 64 44 69 63 74 20 3d 20 54 63 6c 5f  tchedDict = Tcl_
1800: 44 75 70 6c 69 63 61 74 65 4f 62 6a 28 6f 62 6a  DuplicateObj(obj
1810: 76 5b 31 5d 29 3b 0a 2d 09 09 09 7d 0a 2d 09 09  v[1]);.-...}.-..
1820: 09 54 63 6c 5f 44 69 63 74 4f 62 6a 50 75 74 28  .Tcl_DictObjPut(
1830: 4e 55 4c 4c 2c 20 70 61 74 63 68 65 64 44 69 63  NULL, patchedDic
1840: 74 2c 20 73 75 62 63 6d 64 4f 62 6a 2c 20 6e 65  t, subcmdObj, ne
1850: 77 4c 69 73 74 29 3b 0a 2d 09 09 20 20 20 20 7d  wList);.-..    }
1860: 0a 20 09 09 20 20 20 20 54 63 6c 5f 44 69 63 74  . ..    Tcl_Dict
1870: 4f 62 6a 4e 65 78 74 28 26 73 65 61 72 63 68 2c  ObjNext(&search,
1880: 20 26 73 75 62 63 6d 64 4f 62 6a 2c 20 26 6c 69   &subcmdObj, &li
1890: 73 74 4f 62 6a 2c 20 26 64 6f 6e 65 29 3b 0a 20  stObj, &done);. 
18a0: 09 09 7d 20 77 68 69 6c 65 20 28 21 64 6f 6e 65  ..} while (!done
18b0: 29 3b 0a 20 0a 2d 09 09 69 66 20 28 61 6c 6c 6f  );. .-..if (allo
18c0: 63 61 74 65 64 4d 61 70 46 6c 61 67 29 20 7b 0a  catedMapFlag) {.
18d0: 2d 09 09 20 20 20 20 54 63 6c 5f 44 65 63 72 52  -..    Tcl_DecrR
18e0: 65 66 43 6f 75 6e 74 28 6d 61 70 4f 62 6a 29 3b  efCount(mapObj);
18f0: 0a 2d 09 09 7d 0a 2d 09 09 6d 61 70 4f 62 6a 20  .-..}.-..mapObj 
1900: 3d 20 28 70 61 74 63 68 65 64 44 69 63 74 20 3f  = (patchedDict ?
1910: 20 70 61 74 63 68 65 64 44 69 63 74 20 3a 20 6f   patchedDict : o
1920: 62 6a 76 5b 31 5d 29 3b 0a 2d 09 09 69 66 20 28  bjv[1]);.-..if (
1930: 70 61 74 63 68 65 64 44 69 63 74 29 20 7b 0a 2d  patchedDict) {.-
1940: 09 09 20 20 20 20 61 6c 6c 6f 63 61 74 65 64 4d  ..    allocatedM
1950: 61 70 46 6c 61 67 20 3d 20 31 3b 0a 2d 09 09 7d  apFlag = 1;.-..}
1960: 0a 2b 09 09 6d 61 70 4f 62 6a 20 3d 20 6f 62 6a  .+..mapObj = obj
1970: 76 5b 31 5d 3b 0a 20 09 09 63 6f 6e 74 69 6e 75  v[1];. ..continu
1980: 65 3b 0a 20 09 20 20 20 20 7d 0a 20 09 20 20 20  e;. .    }. .   
1990: 20 63 61 73 65 20 43 52 54 5f 50 52 45 46 49 58   case CRT_PREFIX
19a0: 3a 0a 20 09 09 69 66 20 28 54 63 6c 5f 47 65 74  :. ..if (Tcl_Get
19b0: 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69  BooleanFromObj(i
19c0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 0a  nterp, objv[1],.
19d0: 20 09 09 09 26 70 65 72 6d 69 74 50 72 65 66 69   ...&permitPrefi
19e0: 78 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  x) != TCL_OK) {.
19f0: 2d 09 09 20 20 20 20 69 66 20 28 61 6c 6c 6f 63  -..    if (alloc
1a00: 61 74 65 64 4d 61 70 46 6c 61 67 29 20 7b 0a 2d  atedMapFlag) {.-
1a10: 09 09 09 54 63 6c 5f 44 65 63 72 52 65 66 43 6f  ...Tcl_DecrRefCo
1a20: 75 6e 74 28 6d 61 70 4f 62 6a 29 3b 0a 2d 09 09  unt(mapObj);.-..
1a30: 20 20 20 20 7d 0a 20 09 09 20 20 20 20 72 65 74      }. ..    ret
1a40: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1a50: 09 09 7d 0a 20 09 09 63 6f 6e 74 69 6e 75 65 3b  ..}. ..continue;
1a60: 0a 20 09 20 20 20 20 63 61 73 65 20 43 52 54 5f  . .    case CRT_
1a70: 55 4e 4b 4e 4f 57 4e 3a 0a 20 09 09 69 66 20 28  UNKNOWN:. ..if (
1a80: 54 63 6c 5f 4c 69 73 74 4f 62 6a 4c 65 6e 67 74  Tcl_ListObjLengt
1a90: 68 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31  h(interp, objv[1
1aa0: 5d 2c 20 26 6c 65 6e 29 20 21 3d 20 54 43 4c 5f  ], &len) != TCL_
1ab0: 4f 4b 29 20 7b 0a 2d 09 09 20 20 20 20 69 66 20  OK) {.-..    if 
1ac0: 28 61 6c 6c 6f 63 61 74 65 64 4d 61 70 46 6c 61  (allocatedMapFla
1ad0: 67 29 20 7b 0a 2d 09 09 09 54 63 6c 5f 44 65 63  g) {.-...Tcl_Dec
1ae0: 72 52 65 66 43 6f 75 6e 74 28 6d 61 70 4f 62 6a  rRefCount(mapObj
1af0: 29 3b 0a 2d 09 09 20 20 20 20 7d 0a 20 09 09 20  );.-..    }. .. 
1b00: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1b10: 52 4f 52 3b 0a 20 09 09 7d 0a 20 09 09 75 6e 6b  ROR;. ..}. ..unk
1b20: 6e 6f 77 6e 4f 62 6a 20 3d 20 28 6c 65 6e 20 3e  nownObj = (len >
1b30: 20 30 20 3f 20 6f 62 6a 76 5b 31 5d 20 3a 20 4e   0 ? objv[1] : N
1b40: 55 4c 4c 29 3b 0a 40 40 20 2d 35 33 33 37 2c 37  ULL);.@@ -5337,7
1b50: 20 2b 35 32 38 38 2c 37 20 40 40 0a 20 09 09 20   +5288,7 @@. .. 
1b60: 20 20 20 73 75 62 63 6d 64 4f 62 6a 20 3d 20 28     subcmdObj = (
1b70: 6c 65 6e 20 3e 20 30 20 3f 20 6f 62 6a 76 5b 31  len > 0 ? objv[1
1b80: 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 09 09 20 20  ] : NULL);. ..  
1b90: 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 09 09 63    continue;. ..c
1ba0: 61 73 65 20 43 4f 4e 46 5f 4d 41 50 3a 20 7b 0a  ase CONF_MAP: {.
1bb0: 2d 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a  -..    Tcl_Obj *
1bc0: 70 61 74 63 68 65 64 44 69 63 74 20 3d 20 4e 55  patchedDict = NU
1bd0: 4c 4c 2c 20 2a 73 75 62 63 6d 64 4f 62 6a 3b 0a  LL, *subcmdObj;.
1be0: 2b 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a  +..    Tcl_Obj *
1bf0: 73 75 62 63 6d 64 4f 62 6a 3b 0a 20 0a 20 09 09  subcmdObj;. . ..
1c00: 20 20 20 20 2f 2a 0a 20 09 09 20 20 20 20 20 2a      /*. ..     *
1c10: 20 56 65 72 69 66 79 20 74 68 61 74 20 74 68 65   Verify that the
1c20: 20 6d 61 70 20 69 73 20 73 65 6e 73 69 62 6c 65   map is sensible
1c30: 2e 0a 40 40 20 2d 35 33 34 35 2c 39 20 2b 35 32  ..@@ -5345,9 +52
1c40: 39 36 2c 36 20 40 40 0a 20 0a 20 09 09 20 20 20  96,6 @@. . ..   
1c50: 20 69 66 20 28 54 63 6c 5f 44 69 63 74 4f 62 6a   if (Tcl_DictObj
1c60: 46 69 72 73 74 28 69 6e 74 65 72 70 2c 20 6f 62  First(interp, ob
1c70: 6a 76 5b 31 5d 2c 20 26 73 65 61 72 63 68 2c 0a  jv[1], &search,.
1c80: 20 09 09 09 20 20 20 20 26 73 75 62 63 6d 64 4f   ...    &subcmdO
1c90: 62 6a 2c 20 26 6c 69 73 74 4f 62 6a 2c 20 26 64  bj, &listObj, &d
1ca0: 6f 6e 65 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20  one) != TCL_OK) 
1cb0: 7b 0a 2d 09 09 09 69 66 20 28 61 6c 6c 6f 63 61  {.-...if (alloca
1cc0: 74 65 64 4d 61 70 46 6c 61 67 29 20 7b 0a 2d 09  tedMapFlag) {.-.
1cd0: 09 09 20 20 20 20 54 63 6c 5f 44 65 63 72 52 65  ..    Tcl_DecrRe
1ce0: 66 43 6f 75 6e 74 28 6d 61 70 4f 62 6a 29 3b 0a  fCount(mapObj);.
1cf0: 2d 09 09 09 7d 0a 20 09 09 09 72 65 74 75 72 6e  -...}. ...return
1d00: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 09 09 20   TCL_ERROR;. .. 
1d10: 20 20 20 7d 0a 20 09 09 20 20 20 20 69 66 20 28     }. ..    if (
1d20: 64 6f 6e 65 29 20 7b 0a 40 40 20 2d 35 33 35 36  done) {.@@ -5356
1d30: 2c 31 37 20 2b 35 33 30 34 2c 31 30 20 40 40 0a  ,17 +5304,10 @@.
1d40: 20 09 09 20 20 20 20 7d 0a 20 09 09 20 20 20 20   ..    }. ..    
1d50: 64 6f 20 7b 0a 20 09 09 09 54 63 6c 5f 4f 62 6a  do {. ...Tcl_Obj
1d60: 20 2a 2a 6c 69 73 74 76 3b 0a 2d 09 09 09 63 68   **listv;.-...ch
1d70: 61 72 20 2a 63 6d 64 3b 0a 20 0a 20 09 09 09 69  ar *cmd;. . ...i
1d80: 66 20 28 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65  f (Tcl_ListObjGe
1d90: 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74 65 72 70  tElements(interp
1da0: 2c 20 6c 69 73 74 4f 62 6a 2c 20 26 6c 65 6e 2c  , listObj, &len,
1db0: 0a 20 09 09 09 09 26 6c 69 73 74 76 29 20 21 3d  . ....&listv) !=
1dc0: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 09 09 09 20   TCL_OK) {. ... 
1dd0: 20 20 20 54 63 6c 5f 44 69 63 74 4f 62 6a 44 6f     Tcl_DictObjDo
1de0: 6e 65 28 26 73 65 61 72 63 68 29 3b 0a 2d 09 09  ne(&search);.-..
1df0: 09 20 20 20 20 69 66 20 28 70 61 74 63 68 65 64  .    if (patched
1e00: 44 69 63 74 29 20 7b 0a 2d 09 09 09 09 54 63 6c  Dict) {.-....Tcl
1e10: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 61  _DecrRefCount(pa
1e20: 74 63 68 65 64 44 69 63 74 29 3b 0a 2d 09 09 09  tchedDict);.-...
1e30: 20 20 20 20 7d 0a 2d 09 09 09 20 20 20 20 69 66      }.-...    if
1e40: 20 28 61 6c 6c 6f 63 61 74 65 64 4d 61 70 46 6c   (allocatedMapFl
1e50: 61 67 29 20 7b 0a 2d 09 09 09 09 54 63 6c 5f 44  ag) {.-....Tcl_D
1e60: 65 63 72 52 65 66 43 6f 75 6e 74 28 6d 61 70 4f  ecrRefCount(mapO
1e70: 62 6a 29 3b 0a 2d 09 09 09 20 20 20 20 7d 0a 20  bj);.-...    }. 
1e80: 09 09 09 20 20 20 20 72 65 74 75 72 6e 20 54 43  ...    return TC
1e90: 4c 5f 45 52 52 4f 52 3b 0a 20 09 09 09 7d 0a 20  L_ERROR;. ...}. 
1ea0: 09 09 09 69 66 20 28 6c 65 6e 20 3c 20 31 29 20  ...if (len < 1) 
1eb0: 7b 0a 40 40 20 2d 35 33 37 34 2c 33 39 20 2b 35  {.@@ -5374,39 +5
1ec0: 33 31 35 2c 31 31 20 40 40 0a 20 09 09 09 09 20  315,11 @@. .... 
1ed0: 20 20 20 22 65 6e 73 65 6d 62 6c 65 20 73 75 62     "ensemble sub
1ee0: 63 6f 6d 6d 61 6e 64 20 69 6d 70 6c 65 6d 65 6e  command implemen
1ef0: 74 61 74 69 6f 6e 73 20 22 0a 20 09 09 09 09 20  tations ". .... 
1f00: 20 20 20 22 6d 75 73 74 20 62 65 20 6e 6f 6e 2d     "must be non-
1f10: 65 6d 70 74 79 20 6c 69 73 74 73 22 2c 20 54 43  empty lists", TC
1f20: 4c 5f 53 54 41 54 49 43 29 3b 0a 20 09 09 09 20  L_STATIC);. ... 
1f30: 20 20 20 54 63 6c 5f 44 69 63 74 4f 62 6a 44 6f     Tcl_DictObjDo
1f40: 6e 65 28 26 73 65 61 72 63 68 29 3b 0a 2d 09 09  ne(&search);.-..
1f50: 09 20 20 20 20 69 66 20 28 70 61 74 63 68 65 64  .    if (patched
1f60: 44 69 63 74 29 20 7b 0a 2d 09 09 09 09 54 63 6c  Dict) {.-....Tcl
1f70: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 61  _DecrRefCount(pa
1f80: 74 63 68 65 64 44 69 63 74 29 3b 0a 2d 09 09 09  tchedDict);.-...
1f90: 20 20 20 20 7d 0a 2d 09 09 09 20 20 20 20 69 66      }.-...    if
1fa0: 20 28 61 6c 6c 6f 63 61 74 65 64 4d 61 70 46 6c   (allocatedMapFl
1fb0: 61 67 29 20 7b 0a 2d 09 09 09 09 54 63 6c 5f 44  ag) {.-....Tcl_D
1fc0: 65 63 72 52 65 66 43 6f 75 6e 74 28 6d 61 70 4f  ecrRefCount(mapO
1fd0: 62 6a 29 3b 0a 2d 09 09 09 20 20 20 20 7d 0a 20  bj);.-...    }. 
1fe0: 09 09 09 20 20 20 20 72 65 74 75 72 6e 20 54 43  ...    return TC
1ff0: 4c 5f 45 52 52 4f 52 3b 0a 20 09 09 09 7d 0a 2d  L_ERROR;. ...}.-
2000: 09 09 09 63 6d 64 20 3d 20 54 63 6c 47 65 74 53  ...cmd = TclGetS
2010: 74 72 69 6e 67 28 6c 69 73 74 76 5b 30 5d 29 3b  tring(listv[0]);
2020: 0a 2d 09 09 09 69 66 20 28 21 28 63 6d 64 5b 30  .-...if (!(cmd[0
2030: 5d 20 3d 3d 20 27 3a 27 20 26 26 20 63 6d 64 5b  ] == ':' && cmd[
2040: 31 5d 20 3d 3d 20 27 3a 27 29 29 20 7b 0a 2d 09  1] == ':')) {.-.
2050: 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 6e  ..    Tcl_Obj *n
2060: 65 77 4c 69 73 74 20 3d 20 54 63 6c 5f 4e 65 77  ewList = Tcl_New
2070: 4c 69 73 74 4f 62 6a 28 6c 65 6e 2c 20 6c 69 73  ListObj(len, lis
2080: 74 76 29 3b 0a 2d 09 09 09 20 20 20 20 54 63 6c  tv);.-...    Tcl
2090: 5f 4f 62 6a 20 2a 6e 65 77 43 6d 64 20 3d 0a 2d  _Obj *newCmd =.-
20a0: 09 09 09 09 20 20 20 20 54 63 6c 5f 4e 65 77 53  ....    Tcl_NewS
20b0: 74 72 69 6e 67 4f 62 6a 28 6e 73 50 74 72 2d 3e  tringObj(nsPtr->
20c0: 66 75 6c 6c 4e 61 6d 65 2c 20 2d 31 29 3b 0a 2d  fullName, -1);.-
20d0: 09 09 09 20 20 20 20 69 66 20 28 6e 73 50 74 72  ...    if (nsPtr
20e0: 2d 3e 70 61 72 65 6e 74 50 74 72 29 20 7b 0a 2d  ->parentPtr) {.-
20f0: 09 09 09 09 54 63 6c 5f 41 70 70 65 6e 64 53 74  ....Tcl_AppendSt
2100: 72 69 6e 67 73 54 6f 4f 62 6a 28 6e 65 77 43 6d  ringsToObj(newCm
2110: 64 2c 20 22 3a 3a 22 2c 20 4e 55 4c 4c 29 3b 0a  d, "::", NULL);.
2120: 2d 09 09 09 20 20 20 20 7d 0a 2d 09 09 09 20 20  -...    }.-...  
2130: 20 20 54 63 6c 5f 41 70 70 65 6e 64 4f 62 6a 54    Tcl_AppendObjT
2140: 6f 4f 62 6a 28 6e 65 77 43 6d 64 2c 20 6c 69 73  oObj(newCmd, lis
2150: 74 76 5b 30 5d 29 3b 0a 2d 09 09 09 20 20 20 20  tv[0]);.-...    
2160: 54 63 6c 5f 4c 69 73 74 4f 62 6a 52 65 70 6c 61  Tcl_ListObjRepla
2170: 63 65 28 4e 55 4c 4c 2c 20 6e 65 77 4c 69 73 74  ce(NULL, newList
2180: 2c 20 30 2c 31 2c 20 31 2c 26 6e 65 77 43 6d 64  , 0,1, 1,&newCmd
2190: 29 3b 0a 2d 09 09 09 20 20 20 20 69 66 20 28 70  );.-...    if (p
21a0: 61 74 63 68 65 64 44 69 63 74 20 3d 3d 20 4e 55  atchedDict == NU
21b0: 4c 4c 29 20 7b 0a 2d 09 09 09 09 70 61 74 63 68  LL) {.-....patch
21c0: 65 64 44 69 63 74 20 3d 20 54 63 6c 5f 44 75 70  edDict = Tcl_Dup
21d0: 6c 69 63 61 74 65 4f 62 6a 28 6f 62 6a 76 5b 31  licateObj(objv[1
21e0: 5d 29 3b 0a 2d 09 09 09 20 20 20 20 7d 0a 2d 09  ]);.-...    }.-.
21f0: 09 09 20 20 20 20 54 63 6c 5f 44 69 63 74 4f 62  ..    Tcl_DictOb
2200: 6a 50 75 74 28 4e 55 4c 4c 2c 20 70 61 74 63 68  jPut(NULL, patch
2210: 65 64 44 69 63 74 2c 20 73 75 62 63 6d 64 4f 62  edDict, subcmdOb
2220: 6a 2c 0a 2d 09 09 09 09 20 20 20 20 6e 65 77 4c  j,.-....    newL
2230: 69 73 74 29 3b 0a 2d 09 09 09 7d 0a 20 09 09 09  ist);.-...}. ...
2240: 54 63 6c 5f 44 69 63 74 4f 62 6a 4e 65 78 74 28  Tcl_DictObjNext(
2250: 26 73 65 61 72 63 68 2c 20 26 73 75 62 63 6d 64  &search, &subcmd
2260: 4f 62 6a 2c 20 26 6c 69 73 74 4f 62 6a 2c 20 26  Obj, &listObj, &
2270: 64 6f 6e 65 29 3b 0a 20 09 09 20 20 20 20 7d 20  done);. ..    } 
2280: 77 68 69 6c 65 20 28 21 64 6f 6e 65 29 3b 0a 2d  while (!done);.-
2290: 09 09 20 20 20 20 69 66 20 28 61 6c 6c 6f 63 61  ..    if (alloca
22a0: 74 65 64 4d 61 70 46 6c 61 67 29 20 7b 0a 2d 09  tedMapFlag) {.-.
22b0: 09 09 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75  ..Tcl_DecrRefCou
22c0: 6e 74 28 6d 61 70 4f 62 6a 29 3b 0a 2d 09 09 20  nt(mapObj);.-.. 
22d0: 20 20 20 7d 0a 2d 09 09 20 20 20 20 6d 61 70 4f     }.-..    mapO
22e0: 62 6a 20 3d 20 28 70 61 74 63 68 65 64 44 69 63  bj = (patchedDic
22f0: 74 20 3f 20 70 61 74 63 68 65 64 44 69 63 74 20  t ? patchedDict 
2300: 3a 20 6f 62 6a 76 5b 31 5d 29 3b 0a 2d 09 09 20  : objv[1]);.-.. 
2310: 20 20 20 69 66 20 28 70 61 74 63 68 65 64 44 69     if (patchedDi
2320: 63 74 29 20 7b 0a 2d 09 09 09 61 6c 6c 6f 63 61  ct) {.-...alloca
2330: 74 65 64 4d 61 70 46 6c 61 67 20 3d 20 31 3b 0a  tedMapFlag = 1;.
2340: 2d 09 09 20 20 20 20 7d 0a 2b 09 09 20 20 20 20  -..    }.+..    
2350: 6d 61 70 4f 62 6a 20 3d 20 6f 62 6a 76 5b 31 5d  mapObj = objv[1]
2360: 3b 0a 20 09 09 20 20 20 20 63 6f 6e 74 69 6e 75  ;. ..    continu
2370: 65 3b 0a 20 09 09 7d 0a 20 09 09 63 61 73 65 20  e;. ..}. ..case 
2380: 43 4f 4e 46 5f 4e 41 4d 45 53 50 41 43 45 3a 0a  CONF_NAMESPACE:.
2390: 40 40 20 2d 36 32 37 35 2c 36 20 2b 36 31 38 38  @@ -6275,6 +6188
23a0: 2c 37 20 40 40 0a 20 09 74 65 6d 70 4f 62 6a 76  ,7 @@. .tempObjv
23b0: 20 3d 20 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20   = (Tcl_Obj **) 
23c0: 63 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 54  ckalloc(sizeof(T
23d0: 63 6c 5f 4f 62 6a 20 2a 29 2a 28 6f 62 6a 63 2d  cl_Obj *)*(objc-
23e0: 32 2b 70 72 65 66 69 78 4f 62 6a 63 29 29 3b 0a  2+prefixObjc));.
23f0: 20 09 6d 65 6d 63 70 79 28 74 65 6d 70 4f 62 6a   .memcpy(tempObj
2400: 76 2c 20 70 72 65 66 69 78 4f 62 6a 76 2c 20 73  v, prefixObjv, s
2410: 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a 20 2a 29  izeof(Tcl_Obj *)
2420: 20 2a 20 70 72 65 66 69 78 4f 62 6a 63 29 3b 0a   * prefixObjc);.
2430: 20 09 6d 65 6d 63 70 79 28 74 65 6d 70 4f 62 6a   .memcpy(tempObj
2440: 76 2b 70 72 65 66 69 78 4f 62 6a 63 2c 20 6f 62  v+prefixObjc, ob
2450: 6a 76 2b 32 2c 20 73 69 7a 65 6f 66 28 54 63 6c  jv+2, sizeof(Tcl
2460: 5f 4f 62 6a 20 2a 29 20 2a 20 28 6f 62 6a 63 2d  _Obj *) * (objc-
2470: 32 29 29 3b 0a 2b 09 69 50 74 72 2d 3e 6c 6f 6f  2));.+.iPtr->loo
2480: 6b 75 70 4e 73 50 74 72 20 3d 20 65 6e 73 65 6d  kupNsPtr = ensem
2490: 62 6c 65 50 74 72 2d 3e 6e 73 50 74 72 3b 0a 20  blePtr->nsPtr;. 
24a0: 09 72 65 73 75 6c 74 20 3d 20 54 63 6c 5f 45 76  .result = Tcl_Ev
24b0: 61 6c 4f 62 6a 76 28 69 6e 74 65 72 70 2c 20 6f  alObjv(interp, o
24c0: 62 6a 63 2d 32 2b 70 72 65 66 69 78 4f 62 6a 63  bjc-2+prefixObjc
24d0: 2c 20 74 65 6d 70 4f 62 6a 76 2c 0a 20 09 09 54  , tempObjv,. ..T
24e0: 43 4c 5f 45 56 41 4c 5f 49 4e 56 4f 4b 45 7c 54  CL_EVAL_INVOKE|T
24f0: 43 4c 5f 45 56 41 4c 5f 4e 4f 52 45 57 52 49 54  CL_EVAL_NOREWRIT
2500: 45 29 3b 0a 20 09 54 63 6c 5f 44 65 63 72 52 65  E);. .Tcl_DecrRe
2510: 66 43 6f 75 6e 74 28 70 72 65 66 69 78 4f 62 6a  fCount(prefixObj
2520: 29 3b 0a 40 40 20 2d 36 33 31 30 2c 36 20 2b 36  );.@@ -6310,6 +6
2530: 32 32 34 2c 37 20 40 40 0a 20 09 54 63 6c 5f 4c  224,7 @@. .Tcl_L
2540: 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74  istObjGetElement
2550: 73 28 4e 55 4c 4c 2c 20 75 6e 6b 6e 6f 77 6e 43  s(NULL, unknownC
2560: 6d 64 2c 20 26 70 61 72 61 6d 63 2c 20 26 70 61  md, &paramc, &pa
2570: 72 61 6d 76 29 3b 0a 20 09 54 63 6c 5f 50 72 65  ramv);. .Tcl_Pre
2580: 73 65 72 76 65 28 65 6e 73 65 6d 62 6c 65 50 74  serve(ensemblePt
2590: 72 29 3b 0a 20 09 54 63 6c 5f 49 6e 63 72 52 65  r);. .Tcl_IncrRe
25a0: 66 43 6f 75 6e 74 28 75 6e 6b 6e 6f 77 6e 43 6d  fCount(unknownCm
25b0: 64 29 3b 0a 2b 09 69 50 74 72 2d 3e 6c 6f 6f 6b  d);.+.iPtr->look
25c0: 75 70 4e 73 50 74 72 20 3d 20 65 6e 73 65 6d 62  upNsPtr = ensemb
25d0: 6c 65 50 74 72 2d 3e 6e 73 50 74 72 3b 0a 20 09  lePtr->nsPtr;. .
25e0: 72 65 73 75 6c 74 20 3d 20 54 63 6c 5f 45 76 61  result = Tcl_Eva
25f0: 6c 4f 62 6a 76 28 69 6e 74 65 72 70 2c 20 70 61  lObjv(interp, pa
2600: 72 61 6d 63 2c 20 70 61 72 61 6d 76 2c 20 30 29  ramc, paramv, 0)
2610: 3b 0a 20 09 69 66 20 28 72 65 73 75 6c 74 20 3d  ;. .if (result =
2620: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 09 20 20  = TCL_OK) {. .  
2630: 20 20 70 72 65 66 69 78 4f 62 6a 20 3d 20 54 63    prefixObj = Tc
2640: 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_GetObjResult(i
2650: 6e 74 65 72 70 29 3b 0a 40 40 20 2d 36 33 33 37  nterp);.@@ -6337
2660: 2c 39 20 2b 36 32 35 32 2c 36 20 40 40 0a 20 09  ,9 +6252,6 @@. .
2670: 09 09 22 5c 6e 20 20 20 20 77 68 69 6c 65 20 70  .."\n    while p
2680: 61 72 73 69 6e 67 20 72 65 73 75 6c 74 20 6f 66  arsing result of
2690: 20 65 6e 73 65 6d 62 6c 65 20 75 6e 6b 6e 6f 77   ensemble unknow
26a0: 6e 20 73 75 62 63 6f 6d 6d 61 6e 64 20 68 61 6e  n subcommand han
26b0: 64 6c 65 72 22 29 3b 0a 20 09 09 72 65 74 75 72  dler");. ..retur
26c0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 09 20  n TCL_ERROR;. . 
26d0: 20 20 20 7d 0a 2d 09 20 20 20 20 69 66 20 28 70     }.-.    if (p
26e0: 72 65 66 69 78 4f 62 6a 63 20 3e 20 30 29 20 7b  refixObjc > 0) {
26f0: 0a 2d 09 09 67 6f 74 6f 20 72 75 6e 52 65 73 75  .-..goto runResu
2700: 6c 74 69 6e 67 53 75 62 63 6f 6d 6d 61 6e 64 3b  ltingSubcommand;
2710: 0a 2d 09 20 20 20 20 7d 0a 20 0a 20 09 20 20 20  .-.    }. . .   
2720: 20 2f 2a 0a 20 09 20 20 20 20 20 2a 20 52 65 73   /*. .     * Res
2730: 74 6f 72 65 20 74 68 65 20 69 6e 74 65 72 70 27  tore the interp'
2740: 73 20 63 61 6c 6c 20 64 61 74 61 2c 20 77 68 69  s call data, whi
2750: 63 68 20 6d 61 79 20 68 61 76 65 20 62 65 65 6e  ch may have been
2760: 20 77 69 70 65 64 20 6f 75 74 0a 40 40 20 2d 36   wiped out.@@ -6
2770: 33 34 38 2c 37 20 2b 36 32 36 30 2c 31 31 20 40  348,7 +6260,11 @
2780: 40 0a 20 0a 20 09 20 20 20 20 69 50 74 72 2d 3e  @. . .    iPtr->
2790: 63 61 6c 6c 4f 62 6a 63 20 3d 20 6f 62 6a 63 3b  callObjc = objc;
27a0: 0a 20 09 20 20 20 20 69 50 74 72 2d 3e 63 61 6c  . .    iPtr->cal
27b0: 6c 4f 62 6a 76 20 3d 20 6f 62 6a 76 3b 0a 2d 09  lObjv = objv;.-.
27c0: 20 20 20 20 0a 2b 09 20 20 20 20 09 20 20 20 20      .+.    .    
27d0: 0a 2b 09 20 20 20 20 69 66 20 28 70 72 65 66 69  .+.    if (prefi
27e0: 78 4f 62 6a 63 20 3e 20 30 29 20 7b 0a 2b 09 09  xObjc > 0) {.+..
27f0: 67 6f 74 6f 20 72 75 6e 52 65 73 75 6c 74 69 6e  goto runResultin
2800: 67 53 75 62 63 6f 6d 6d 61 6e 64 3b 0a 2b 09 20  gSubcommand;.+. 
2810: 20 20 20 7d 0a 2b 0a 20 09 20 20 20 20 2f 2a 0a     }.+. .    /*.
2820: 20 09 20 20 20 20 20 2a 20 4e 61 6d 65 73 70 61   .     * Namespa
2830: 63 65 20 61 6c 69 76 65 20 26 20 65 6d 70 74 79  ce alive & empty
2840: 20 72 65 73 75 6c 74 20 3d 3e 20 72 65 70 61 72   result => repar
2850: 73 65 2e 0a 20 09 20 20 20 20 20 2a 2f 0a 40 40  se.. .     */.@@
2860: 20 2d 36 36 37 34 2c 31 32 20 2b 36 35 39 30 2c   -6674,12 +6590,
2870: 37 20 40 40 0a 20 09 20 20 20 20 20 2a 20 74 68  7 @@. .     * th
2880: 65 20 70 72 6f 67 72 61 6d 6d 65 72 27 73 20 72  e programmer's r
2890: 65 73 70 6f 6e 73 69 62 69 6c 69 74 79 20 28 6f  esponsibility (o
28a0: 72 20 5b 3a 3a 75 6e 6b 6e 6f 77 6e 5d 20 6f 66  r [::unknown] of
28b0: 20 63 6f 75 72 73 65 29 2e 0a 20 09 20 20 20 20   course).. .    
28c0: 20 2a 2f 0a 20 0a 2d 09 20 20 20 20 63 6d 64 4f   */. .-.    cmdO
28d0: 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69  bj = Tcl_NewStri
28e0: 6e 67 4f 62 6a 28 65 6e 73 65 6d 62 6c 65 50 74  ngObj(ensemblePt
28f0: 72 2d 3e 6e 73 50 74 72 2d 3e 66 75 6c 6c 4e 61  r->nsPtr->fullNa
2900: 6d 65 2c 20 2d 31 29 3b 0a 2d 09 20 20 20 20 69  me, -1);.-.    i
2910: 66 20 28 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e  f (ensemblePtr->
2920: 6e 73 50 74 72 2d 3e 70 61 72 65 6e 74 50 74 72  nsPtr->parentPtr
2930: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 09 09 54   != NULL) {.-..T
2940: 63 6c 5f 41 70 70 65 6e 64 53 74 72 69 6e 67 73  cl_AppendStrings
2950: 54 6f 4f 62 6a 28 63 6d 64 4f 62 6a 2c 20 22 3a  ToObj(cmdObj, ":
2960: 3a 22 2c 20 6e 61 6d 65 2c 20 4e 55 4c 4c 29 3b  :", name, NULL);
2970: 0a 2d 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  .-.    } else {.
2980: 2d 09 09 54 63 6c 5f 41 70 70 65 6e 64 53 74 72  -..Tcl_AppendStr
2990: 69 6e 67 73 54 6f 4f 62 6a 28 63 6d 64 4f 62 6a  ingsToObj(cmdObj
29a0: 2c 20 6e 61 6d 65 2c 20 4e 55 4c 4c 29 3b 0a 2d  , name, NULL);.-
29b0: 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 63 6d 64  .    }.+.    cmd
29c0: 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72  Obj = Tcl_NewStr
29d0: 69 6e 67 4f 62 6a 28 6e 61 6d 65 2c 20 2d 31 29  ingObj(name, -1)
29e0: 3b 0a 20 09 20 20 20 20 63 6d 64 50 72 65 66 69  ;. .    cmdPrefi
29f0: 78 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 4c 69  xObj = Tcl_NewLi
2a00: 73 74 4f 62 6a 28 31 2c 20 26 63 6d 64 4f 62 6a  stObj(1, &cmdObj
2a10: 29 3b 0a 20 09 20 20 20 20 54 63 6c 5f 53 65 74  );. .    Tcl_Set
2a20: 48 61 73 68 56 61 6c 75 65 28 68 50 74 72 2c 20  HashValue(hPtr, 
2a30: 28 43 6c 69 65 6e 74 44 61 74 61 29 20 63 6d 64  (ClientData) cmd
2a40: 50 72 65 66 69 78 4f 62 6a 29 3b 0a 20 09 20 20  PrefixObj);. .  
2a50: 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75    Tcl_IncrRefCou
2a60: 6e 74 28 63 6d 64 50 72 65 66 69 78 4f 62 6a 29  nt(cmdPrefixObj)
2a70: 3b 0a 40 40 20 2d 36 37 34 30 2c 31 31 20 2b 36  ;.@@ -6740,11 +6
2a80: 36 35 31 2c 37 20 40 40 0a 20 09 09 20 20 20 20  651,7 @@. ..    
2a90: 69 66 20 28 69 73 4e 65 77 29 20 7b 0a 20 09 09  if (isNew) {. ..
2aa0: 09 54 63 6c 5f 4f 62 6a 20 2a 63 6d 64 4f 62 6a  .Tcl_Obj *cmdObj
2ab0: 2c 20 2a 63 6d 64 50 72 65 66 69 78 4f 62 6a 3b  , *cmdPrefixObj;
2ac0: 0a 20 0a 2d 09 09 09 54 63 6c 4e 65 77 4f 62 6a  . .-...TclNewObj
2ad0: 28 63 6d 64 4f 62 6a 29 3b 0a 2d 09 09 09 54 63  (cmdObj);.-...Tc
2ae0: 6c 5f 41 70 70 65 6e 64 53 74 72 69 6e 67 73 54  l_AppendStringsT
2af0: 6f 4f 62 6a 28 63 6d 64 4f 62 6a 2c 0a 2d 09 09  oObj(cmdObj,.-..
2b00: 09 09 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e  ..ensemblePtr->n
2b10: 73 50 74 72 2d 3e 66 75 6c 6c 4e 61 6d 65 2c 0a  sPtr->fullName,.
2b20: 2d 09 09 09 09 28 65 6e 73 65 6d 62 6c 65 50 74  -....(ensemblePt
2b30: 72 2d 3e 6e 73 50 74 72 2d 3e 70 61 72 65 6e 74  r->nsPtr->parent
2b40: 50 74 72 20 3f 20 22 3a 3a 22 20 3a 20 22 22 29  Ptr ? "::" : "")
2b50: 2c 0a 2d 09 09 09 09 6e 73 43 6d 64 4e 61 6d 65  ,.-....nsCmdName
2b60: 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 09 09 63 6d 64  , NULL);.+...cmd
2b70: 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72  Obj = Tcl_NewStr
2b80: 69 6e 67 4f 62 6a 28 6e 73 43 6d 64 4e 61 6d 65  ingObj(nsCmdName
2b90: 2c 20 2d 31 29 3b 0a 20 09 09 09 63 6d 64 50 72  , -1);. ...cmdPr
2ba0: 65 66 69 78 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65  efixObj = Tcl_Ne
2bb0: 77 4c 69 73 74 4f 62 6a 28 31 2c 20 26 63 6d 64  wListObj(1, &cmd
2bc0: 4f 62 6a 29 3b 0a 20 09 09 09 54 63 6c 5f 53 65  Obj);. ...Tcl_Se
2bd0: 74 48 61 73 68 56 61 6c 75 65 28 68 50 74 72 2c  tHashValue(hPtr,
2be0: 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20 63 6d   (ClientData) cm
2bf0: 64 50 72 65 66 69 78 4f 62 6a 29 3b 0a 20 09 09  dPrefixObj);. ..
2c00: 09 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e  .Tcl_IncrRefCoun
2c10: 74 28 63 6d 64 50 72 65 66 69 78 4f 62 6a 29 3b  t(cmdPrefixObj);
2c20: 0a 49 6e 64 65 78 3a 20 74 65 73 74 73 2f 6e 61  .Index: tests/na
2c30: 6d 65 73 70 61 63 65 2e 74 65 73 74 0a 3d 3d 3d  mespace.test.===
2c40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2c50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2c80: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72  .RCS file: /cvsr
2c90: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 74 65 73 74  oot/tcl/tcl/test
2ca0: 73 2f 6e 61 6d 65 73 70 61 63 65 2e 74 65 73 74  s/namespace.test
2cb0: 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65  ,v.retrieving re
2cc0: 76 69 73 69 6f 6e 20 31 2e 35 39 0a 64 69 66 66  vision 1.59.diff
2cd0: 20 2d 75 20 2d 72 31 2e 35 39 20 6e 61 6d 65 73   -u -r1.59 names
2ce0: 70 61 63 65 2e 74 65 73 74 0a 2d 2d 2d 20 74 65  pace.test.--- te
2cf0: 73 74 73 2f 6e 61 6d 65 73 70 61 63 65 2e 74 65  sts/namespace.te
2d00: 73 74 09 32 33 20 4f 63 74 20 32 30 30 36 20 32  st.23 Oct 2006 2
2d10: 32 3a 34 39 3a 32 36 20 2d 30 30 30 30 09 31 2e  2:49:26 -0000.1.
2d20: 35 39 0a 2b 2b 2b 20 74 65 73 74 73 2f 6e 61 6d  59.+++ tests/nam
2d30: 65 73 70 61 63 65 2e 74 65 73 74 09 32 36 20 4f  espace.test.26 O
2d40: 63 74 20 32 30 30 36 20 30 31 3a 31 30 3a 33 36  ct 2006 01:10:36
2d50: 20 2d 30 30 30 30 0a 40 40 20 2d 31 35 35 35 2c   -0000.@@ -1555,
2d60: 36 20 2b 31 35 35 35 2c 31 39 20 40 40 0a 20 20  6 +1555,19 @@.  
2d70: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c     namespace del
2d80: 65 74 65 20 6e 73 0a 20 20 20 20 20 73 65 74 20  ete ns.     set 
2d90: 72 65 73 75 6c 74 0a 20 7d 20 7b 7b 31 20 7b 7d  result. } {{1 {}
2da0: 7d 20 7b 32 20 30 7d 20 7b 31 20 2e 7d 20 7b 31  } {2 0} {1 .} {1
2db0: 20 7b 2e 20 66 6f 6f 7d 7d 20 7b 32 20 31 7d 20   {. foo}} {2 1} 
2dc0: 7b 32 20 32 7d 7d 0a 2b 74 65 73 74 20 6e 61 6d  {2 2}}.+test nam
2dd0: 65 73 70 61 63 65 2d 34 33 2e 32 2e 61 20 7b 65  espace-43.2.a {e
2de0: 6e 73 65 6d 62 6c 65 73 3a 20 64 69 63 74 2d 64  nsembles: dict-d
2df0: 72 69 76 65 6e 7d 20 7b 0a 2b 20 20 20 20 6e 61  riven} {.+    na
2e00: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e 73 20  mespace eval ns 
2e10: 7b 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 78  {.+.namespace ex
2e20: 70 6f 72 74 20 78 2a 0a 2b 09 70 72 6f 63 20 78  port x*.+.proc x
2e30: 31 20 7b 61 72 67 73 7d 20 7b 6c 69 73 74 20 31  1 {args} {list 1
2e40: 20 24 61 72 67 73 7d 0a 2b 09 70 72 6f 63 20 78   $args}.+.proc x
2e50: 32 20 7b 61 72 67 73 7d 20 7b 6c 69 73 74 20 32  2 {args} {list 2
2e60: 20 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67 73 5d   [llength $args]
2e70: 7d 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 6e  }.+.namespace en
2e80: 73 65 6d 62 6c 65 20 63 72 65 61 74 65 20 2d 6d  semble create -m
2e90: 61 70 20 7b 0a 2b 09 20 20 20 20 61 20 78 31 20  ap {.+.    a x1 
2ea0: 62 20 78 32 20 63 20 7b 78 31 20 2e 7d 20 64 20  b x2 c {x1 .} d 
2eb0: 7b 78 32 20 2e 7d 0a 2b 09 7d 0a 2b 20 20 20 20  {x2 .}.+.}.+    
2ec0: 7d 0a 2b 20 20 20 20 73 65 74 20 72 65 73 75 6c  }.+    set resul
2ed0: 74 20 5b 6c 69 73 74 20 5b 6e 73 20 61 5d 20 5b  t [list [ns a] [
2ee0: 6e 73 20 62 5d 20 5b 6e 73 20 63 5d 20 5b 6e 73  ns b] [ns c] [ns
2ef0: 20 63 20 66 6f 6f 5d 20 5b 6e 73 20 64 5d 20 5b   c foo] [ns d] [
2f00: 6e 73 20 64 20 66 6f 6f 5d 5d 0a 2b 20 20 20 20  ns d foo]].+    
2f10: 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65  namespace delete
2f20: 20 6e 73 0a 2b 20 20 20 20 73 65 74 20 72 65 73   ns.+    set res
2f30: 75 6c 74 0a 2b 7d 20 7b 7b 31 20 7b 7d 7d 20 7b  ult.+} {{1 {}} {
2f40: 32 20 30 7d 20 7b 31 20 2e 7d 20 7b 31 20 7b 2e  2 0} {1 .} {1 {.
2f50: 20 66 6f 6f 7d 7d 20 7b 32 20 31 7d 20 7b 32 20   foo}} {2 1} {2 
2f60: 32 7d 7d 0a 20 73 65 74 20 53 45 54 55 50 20 7b  2}}. set SETUP {
2f70: 0a 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  .     namespace 
2f80: 65 76 61 6c 20 6e 73 20 7b 0a 20 09 6e 61 6d 65  eval ns {. .name
2f90: 73 70 61 63 65 20 65 78 70 6f 72 74 20 61 20 62  space export a b
2fa0: 0a 40 40 20 2d 31 35 38 38 2c 36 20 2b 31 36 30  .@@ -1588,6 +160
2fb0: 31 2c 37 20 40 40 0a 20 09 70 72 6f 63 20 63 20  1,7 @@. .proc c 
2fc0: 61 72 67 73 20 7b 66 6f 72 6d 61 74 20 33 2c 5b  args {format 3,[
2fd0: 6c 6c 65 6e 67 74 68 20 24 61 72 67 73 5d 7d 0a  llength $args]}.
2fe0: 20 09 70 72 6f 63 20 64 20 61 72 67 73 20 7b 66   .proc d args {f
2ff0: 6f 72 6d 61 74 20 34 2c 5b 6c 6c 65 6e 67 74 68  ormat 4,[llength
3000: 20 24 61 72 67 73 5d 7d 0a 20 09 6e 61 6d 65 73   $args]}. .names
3010: 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 72  pace ensemble cr
3020: 65 61 74 65 20 2d 73 75 62 63 6f 6d 6d 61 6e 64  eate -subcommand
3030: 73 20 7b 62 20 63 7d 20 2d 6d 61 70 20 7b 63 20  s {b c} -map {c 
3040: 3a 3a 6e 73 3a 3a 64 7d 0a 2b 09 6e 61 6d 65 73  ::ns::d}.+.names
3050: 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 72  pace ensemble cr
3060: 65 61 74 65 20 2d 63 6f 6d 6d 61 6e 64 20 3a 3a  eate -command ::
3070: 6e 73 61 20 2d 73 75 62 63 6f 6d 6d 61 6e 64 73  nsa -subcommands
3080: 20 7b 62 20 63 7d 20 2d 6d 61 70 20 7b 63 20 64   {b c} -map {c d
3090: 7d 0a 20 20 20 20 20 7d 0a 20 7d 0a 20 74 65 73  }.     }. }. tes
30a0: 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 33 2e 38  t namespace-43.8
30b0: 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 6c 69 73   {ensembles: lis
30c0: 74 2d 61 6e 64 2d 6d 61 70 2d 64 72 69 76 65 6e  t-and-map-driven
30d0: 7d 20 2d 73 65 74 75 70 20 24 53 45 54 55 50 20  } -setup $SETUP 
30e0: 2d 62 6f 64 79 20 7b 0a 40 40 20 2d 31 35 39 39  -body {.@@ -1599
30f0: 2c 39 20 2b 31 36 31 33 2c 31 35 20 40 40 0a 20  ,9 +1613,15 @@. 
3100: 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 34  test namespace-4
3110: 33 2e 31 30 20 7b 65 6e 73 65 6d 62 6c 65 73 3a  3.10 {ensembles:
3120: 20 6c 69 73 74 2d 61 6e 64 2d 6d 61 70 2d 64 72   list-and-map-dr
3130: 69 76 65 6e 7d 20 2d 73 65 74 75 70 20 24 53 45  iven} -setup $SE
3140: 54 55 50 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  TUP -body {.    
3150: 20 6e 73 20 62 20 66 6f 6f 20 62 61 72 20 62 6f   ns b foo bar bo
3160: 6f 20 73 70 6f 6e 67 20 77 69 62 62 6c 65 0a 20  o spong wibble. 
3170: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 6e 61 6d 65  } -cleanup {name
3180: 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e 73 7d  space delete ns}
3190: 20 2d 72 65 73 75 6c 74 20 32 2c 35 0a 2b 74 65   -result 2,5.+te
31a0: 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 33 2e  st namespace-43.
31b0: 31 30 61 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20  10a {ensembles: 
31c0: 6c 69 73 74 2d 61 6e 64 2d 6d 61 70 2d 64 72 69  list-and-map-dri
31d0: 76 65 6e 7d 20 2d 73 65 74 75 70 20 24 53 45 54  ven} -setup $SET
31e0: 55 50 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20  UP -body {.+    
31f0: 6e 73 61 20 62 20 66 6f 6f 20 62 61 72 20 62 6f  nsa b foo bar bo
3200: 6f 20 73 70 6f 6e 67 20 77 69 62 62 6c 65 0a 2b  o spong wibble.+
3210: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 6e 61 6d 65  } -cleanup {name
3220: 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e 73 7d  space delete ns}
3230: 20 2d 72 65 73 75 6c 74 20 32 2c 35 0a 20 74 65   -result 2,5. te
3240: 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 33 2e  st namespace-43.
3250: 31 31 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 6c  11 {ensembles: l
3260: 69 73 74 2d 61 6e 64 2d 6d 61 70 2d 64 72 69 76  ist-and-map-driv
3270: 65 6e 7d 20 2d 73 65 74 75 70 20 24 53 45 54 55  en} -setup $SETU
3280: 50 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 20 6e  P -body {.     n
3290: 73 20 63 20 66 6f 6f 20 62 61 72 20 62 6f 6f 20  s c foo bar boo 
32a0: 73 70 6f 6e 67 20 77 69 62 62 6c 65 0a 20 7d 20  spong wibble. } 
32b0: 2d 63 6c 65 61 6e 75 70 20 7b 6e 61 6d 65 73 70  -cleanup {namesp
32c0: 61 63 65 20 64 65 6c 65 74 65 20 6e 73 7d 20 2d  ace delete ns} -
32d0: 72 65 73 75 6c 74 20 34 2c 35 0a 2b 74 65 73 74  result 4,5.+test
32e0: 20 6e 61 6d 65 73 70 61 63 65 2d 34 33 2e 31 31   namespace-43.11
32f0: 2e 61 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 6c  .a {ensembles: l
3300: 69 73 74 2d 61 6e 64 2d 6d 61 70 2d 64 72 69 76  ist-and-map-driv
3310: 65 6e 7d 20 2d 73 65 74 75 70 20 24 53 45 54 55  en} -setup $SETU
3320: 50 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 6e  P -body {.+    n
3330: 73 61 20 63 20 66 6f 6f 20 62 61 72 20 62 6f 6f  sa c foo bar boo
3340: 20 73 70 6f 6e 67 20 77 69 62 62 6c 65 0a 2b 7d   spong wibble.+}
3350: 20 2d 63 6c 65 61 6e 75 70 20 7b 6e 61 6d 65 73   -cleanup {names
3360: 70 61 63 65 20 64 65 6c 65 74 65 20 6e 73 7d 20  pace delete ns} 
3370: 2d 72 65 73 75 6c 74 20 34 2c 35 0a 20 74 65 73  -result 4,5. tes
3380: 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 33 2e 31  t namespace-43.1
3390: 32 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 6c 69  2 {ensembles: li
33a0: 73 74 2d 61 6e 64 2d 6d 61 70 2d 64 72 69 76 65  st-and-map-drive
33b0: 6e 7d 20 2d 73 65 74 75 70 20 24 53 45 54 55 50  n} -setup $SETUP
33c0: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 20 6e 73   -body {.     ns
33d0: 20 64 20 66 6f 6f 20 62 61 72 20 62 6f 6f 20 73   d foo bar boo s
33e0: 70 6f 6e 67 20 77 69 62 62 6c 65 0a 20 7d 20 2d  pong wibble. } -
33f0: 63 6c 65 61 6e 75 70 20 7b 6e 61 6d 65 73 70 61  cleanup {namespa
3400: 63 65 20 64 65 6c 65 74 65 20 6e 73 7d 20 2d 72  ce delete ns} -r
3410: 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72  eturnCodes error
3420: 20 2d 72 65 73 75 6c 74 20 7b 75 6e 6b 6e 6f 77   -result {unknow
3430: 6e 20 6f 72 20 61 6d 62 69 67 75 6f 75 73 20 73  n or ambiguous s
3440: 75 62 63 6f 6d 6d 61 6e 64 20 22 64 22 3a 20 6d  ubcommand "d": m
3450: 75 73 74 20 62 65 20 62 2c 20 6f 72 20 63 7d 0a  ust be b, or c}.
3460: 40 40 20 2d 31 36 35 31 2c 37 20 2b 31 36 37 31  @@ -1651,7 +1671
3470: 2c 37 20 40 40 0a 20 20 20 20 20 66 6f 6f 62 61  ,7 @@.     fooba
3480: 72 20 66 6f 6f 62 61 72 63 6f 6e 0a 20 7d 20 2d  r foobarcon. } -
3490: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 20 72  cleanup {.     r
34a0: 65 6e 61 6d 65 20 66 6f 6f 62 61 72 20 7b 7d 0a  ename foobar {}.
34b0: 2d 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20  -} -returnCodes 
34c0: 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 69  error -result {i
34d0: 6e 76 61 6c 69 64 20 63 6f 6d 6d 61 6e 64 20 6e  nvalid command n
34e0: 61 6d 65 20 22 3a 3a 66 6f 6f 62 61 72 63 6f 6e  ame "::foobarcon
34f0: 66 69 67 75 72 65 22 7d 0a 2b 7d 20 2d 72 65 74  figure"}.+} -ret
3500: 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d  urnCodes error -
3510: 72 65 73 75 6c 74 20 7b 69 6e 76 61 6c 69 64 20  result {invalid 
3520: 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20 22 66 6f  command name "fo
3530: 6f 62 61 72 63 6f 6e 66 69 67 75 72 65 22 7d 0a  obarconfigure"}.
3540: 20 0a 20 74 65 73 74 20 6e 61 6d 65 73 70 61 63   . test namespac
3550: 65 2d 34 35 2e 31 20 7b 65 6e 73 65 6d 62 6c 65  e-45.1 {ensemble
3560: 3a 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 7d  : introspection}
3570: 20 7b 0a 20 20 20 20 20 6e 61 6d 65 73 70 61 63   {.     namespac
3580: 65 20 65 76 61 6c 20 6e 73 20 7b 0a 40 40 20 2d  e eval ns {.@@ -
3590: 31 36 37 32 2c 37 20 2b 31 36 39 32 2c 37 20 40  1672,7 +1692,7 @
35a0: 40 0a 20 20 20 20 20 7d 0a 20 20 20 20 20 6e 61  @.     }.     na
35b0: 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e  mespace delete n
35c0: 73 0a 20 20 20 20 20 73 65 74 20 72 65 73 75 6c  s.     set resul
35d0: 74 0a 2d 7d 20 7b 41 20 3a 3a 6e 73 3a 3a 78 7d  t.-} {A ::ns::x}
35e0: 0a 2b 7d 20 7b 41 20 78 7d 0a 20 0a 20 74 65 73  .+} {A x}. . tes
35f0: 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 36 2e 31  t namespace-46.1
3600: 20 7b 65 6e 73 65 6d 62 6c 65 3a 20 6d 6f 64 69   {ensemble: modi
3610: 66 69 63 61 74 69 6f 6e 7d 20 7b 0a 20 20 20 20  fication} {.    
3620: 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20   namespace eval 
3630: 6e 73 20 7b 0a 40 40 20 2d 31 36 39 34 2c 36 20  ns {.@@ -1694,6 
3640: 2b 31 37 31 34 2c 32 36 20 40 40 0a 20 20 20 20  +1714,26 @@.    
3650: 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74   namespace delet
3660: 65 20 6e 73 0a 20 20 20 20 20 73 65 74 20 72 65  e ns.     set re
3670: 73 75 6c 74 0a 20 7d 20 7b 7b 41 20 3a 3a 6e 73  sult. } {{A ::ns
3680: 3a 3a 78 7d 20 31 32 33 20 7b 42 20 3a 3a 6e 73  ::x} 123 {B ::ns
3690: 3a 3a 78 7d 20 31 32 33 20 7b 7d 20 31 32 33 7d  ::x} 123 {} 123}
36a0: 0a 2b 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65  .+test namespace
36b0: 2d 34 36 2e 31 2e 61 20 7b 65 6e 73 65 6d 62 6c  -46.1.a {ensembl
36c0: 65 3a 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 7d  e: modification}
36d0: 20 7b 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63   {.+    namespac
36e0: 65 20 65 76 61 6c 20 6e 73 20 7b 0a 2b 09 6e 61  e eval ns {.+.na
36f0: 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 78  mespace export x
3700: 0a 2b 09 70 72 6f 63 20 78 20 7b 7d 20 7b 66 6f  .+.proc x {} {fo
3710: 72 6d 61 74 20 31 32 33 7d 0a 2b 0a 2b 09 23 20  rmat 123}.+.+.# 
3720: 45 6e 73 65 6d 62 6c 65 20 6d 61 70 73 20 41 2d  Ensemble maps A-
3730: 3e 78 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65  >x.+.namespace e
3740: 6e 73 65 6d 62 6c 65 20 63 72 65 61 74 65 20 2d  nsemble create -
3750: 63 6f 6d 6d 61 6e 64 20 6e 73 20 2d 6d 61 70 20  command ns -map 
3760: 7b 41 20 78 7d 0a 2b 09 73 65 74 20 3a 3a 72 65  {A x}.+.set ::re
3770: 73 75 6c 74 20 5b 6c 69 73 74 20 5b 6e 61 6d 65  sult [list [name
3780: 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63  space ensemble c
3790: 6f 6e 66 69 67 75 72 65 20 6e 73 20 2d 6d 61 70  onfigure ns -map
37a0: 5d 20 5b 6e 73 20 41 5d 5d 0a 2b 0a 2b 09 23 20  ] [ns A]].+.+.# 
37b0: 45 6e 73 65 6d 62 6c 65 20 6d 61 70 73 20 42 2d  Ensemble maps B-
37c0: 3e 78 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65  >x.+.namespace e
37d0: 6e 73 65 6d 62 6c 65 20 63 6f 6e 66 69 67 75 72  nsemble configur
37e0: 65 20 6e 73 20 2d 6d 61 70 20 7b 42 20 78 7d 0a  e ns -map {B x}.
37f0: 2b 09 6c 61 70 70 65 6e 64 20 3a 3a 72 65 73 75  +.lappend ::resu
3800: 6c 74 20 5b 6e 61 6d 65 73 70 61 63 65 20 65 6e  lt [namespace en
3810: 73 65 6d 62 6c 65 20 63 6f 6e 66 69 67 75 72 65  semble configure
3820: 20 6e 73 20 2d 6d 61 70 5d 20 5b 6e 73 20 42 5d   ns -map] [ns B]
3830: 0a 2b 0a 2b 09 23 20 45 6e 73 65 6d 62 6c 65 20  .+.+.# Ensemble 
3840: 6d 61 70 73 20 78 2d 3e 78 0a 2b 09 6e 61 6d 65  maps x->x.+.name
3850: 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63  space ensemble c
3860: 6f 6e 66 69 67 75 72 65 20 6e 73 20 2d 6d 61 70  onfigure ns -map
3870: 20 7b 7d 0a 2b 09 6c 61 70 70 65 6e 64 20 3a 3a   {}.+.lappend ::
3880: 72 65 73 75 6c 74 20 5b 6e 61 6d 65 73 70 61 63  result [namespac
3890: 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6e 66 69  e ensemble confi
38a0: 67 75 72 65 20 6e 73 20 2d 6d 61 70 5d 20 5b 6e  gure ns -map] [n
38b0: 73 20 78 5d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20  s x].+    }.+   
38c0: 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74   namespace delet
38d0: 65 20 6e 73 0a 2b 20 20 20 20 73 65 74 20 72 65  e ns.+    set re
38e0: 73 75 6c 74 0a 2b 7d 20 7b 7b 41 20 78 7d 20 31  sult.+} {{A x} 1
38f0: 32 33 20 7b 42 20 78 7d 20 31 32 33 20 7b 7d 20  23 {B x} 123 {} 
3900: 31 32 33 7d 0a 20 74 65 73 74 20 6e 61 6d 65 73  123}. test names
3910: 70 61 63 65 2d 34 36 2e 32 20 7b 65 6e 73 65 6d  pace-46.2 {ensem
3920: 62 6c 65 3a 20 65 6e 73 65 6d 62 6c 65 73 20 72  ble: ensembles r
3930: 65 61 6c 6c 79 20 75 73 65 20 63 75 72 72 65 6e  eally use curren
3940: 74 20 65 78 70 6f 72 74 20 6c 69 73 74 7d 20 7b  t export list} {
3950: 0a 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  .     namespace 
3960: 65 76 61 6c 20 6e 73 20 7b 0a 20 09 6e 61 6d 65  eval ns {. .name
3970: 73 70 61 63 65 20 65 78 70 6f 72 74 20 78 31 0a  space export x1.
3980: 40 40 20 2d 31 38 31 36 2c 36 20 2b 31 38 35 36  @@ -1816,6 +1856
3990: 2c 33 35 20 40 40 0a 20 20 20 20 20 6c 61 70 70  ,35 @@.     lapp
39a0: 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63  end result [catc
39b0: 68 20 7b 6e 73 20 4d 61 67 69 63 20 66 6f 6f 20  h {ns Magic foo 
39c0: 62 61 72 20 73 70 6f 6e 67 20 77 69 62 62 6c 65  bar spong wibble
39d0: 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20 20 20 20  } msg] $msg.    
39e0: 20 6c 69 73 74 20 24 72 65 73 75 6c 74 20 5b 6c   list $result [l
39f0: 73 6f 72 74 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61  sort [info comma
3a00: 6e 64 73 20 3a 3a 6e 73 3a 3a 2a 5d 5d 20 24 6c  nds ::ns::*]] $l
3a10: 6f 67 20 5b 6e 61 6d 65 73 70 61 63 65 20 64 65  og [namespace de
3a20: 6c 65 74 65 20 6e 73 5d 0a 20 7d 20 7b 7b 30 20  lete ns]. } {{0 
3a30: 32 20 30 20 32 20 30 20 32 20 30 20 32 20 31 20  2 0 2 0 2 0 2 1 
3a40: 7b 75 6e 6b 6e 6f 77 6e 20 6f 72 20 70 72 6f 74  {unknown or prot
3a50: 65 63 74 65 64 20 73 75 62 63 6f 6d 6d 61 6e 64  ected subcommand
3a60: 20 22 4d 61 67 69 63 22 7d 7d 20 7b 3a 3a 6e 73   "Magic"}} {::ns
3a70: 3a 3a 4d 61 67 69 63 20 3a 3a 6e 73 3a 3a 61 20  ::Magic ::ns::a 
3a80: 3a 3a 6e 73 3a 3a 62 20 3a 3a 6e 73 3a 3a 63 7d  ::ns::b ::ns::c}
3a90: 20 7b 7b 6d 61 6b 69 6e 67 20 61 7d 20 7b 72 75   {{making a} {ru
3aa0: 6e 6e 69 6e 67 20 6e 73 20 61 20 62 20 63 7d 20  nning ns a b c} 
3ab0: 7b 72 75 6e 6e 69 6e 67 20 6e 73 20 61 20 62 20  {running ns a b 
3ac0: 63 7d 20 7b 6d 61 6b 69 6e 67 20 62 7d 20 7b 72  c} {making b} {r
3ad0: 75 6e 6e 69 6e 67 20 6e 73 20 62 20 63 20 64 7d  unning ns b c d}
3ae0: 20 7b 6d 61 6b 69 6e 67 20 63 7d 20 7b 72 75 6e   {making c} {run
3af0: 6e 69 6e 67 20 6e 73 20 63 20 64 20 65 7d 20 7b  ning ns c d e} {
3b00: 75 6e 6b 6e 6f 77 6e 20 4d 61 67 69 63 20 2d 20  unknown Magic - 
3b10: 61 72 67 73 20 3d 20 66 6f 6f 20 62 61 72 20 73  args = foo bar s
3b20: 70 6f 6e 67 20 77 69 62 62 6c 65 7d 7d 20 7b 7d  pong wibble}} {}
3b30: 7d 0a 2b 74 65 73 74 20 6e 61 6d 65 73 70 61 63  }.+test namespac
3b40: 65 2d 34 37 2e 31 2e 61 20 7b 65 6e 73 65 6d 62  e-47.1.a {ensemb
3b50: 6c 65 3a 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64  le: unknown hand
3b60: 6c 65 72 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20  ler} {.+    set 
3b70: 6c 6f 67 20 7b 7d 0a 2b 20 20 20 20 6e 61 6d 65  log {}.+    name
3b80: 73 70 61 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a  space eval ns {.
3b90: 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f  +.namespace expo
3ba0: 72 74 20 7b 5b 61 2d 7a 5d 2a 7d 0a 2b 09 70 72  rt {[a-z]*}.+.pr
3bb0: 6f 63 20 4d 61 67 69 63 20 7b 65 6e 73 65 6d 62  oc Magic {ensemb
3bc0: 6c 65 20 73 75 62 63 6d 64 20 61 72 67 73 7d 20  le subcmd args} 
3bd0: 7b 0a 2b 09 20 20 20 20 67 6c 6f 62 61 6c 20 6c  {.+.    global l
3be0: 6f 67 0a 2b 09 20 20 20 20 69 66 20 7b 5b 73 74  og.+.    if {[st
3bf0: 72 69 6e 67 20 6d 61 74 63 68 20 7b 5b 61 2d 7a  ring match {[a-z
3c00: 5d 2a 7d 20 24 73 75 62 63 6d 64 5d 7d 20 7b 0a  ]*} $subcmd]} {.
3c10: 2b 09 09 6c 61 70 70 65 6e 64 20 6c 6f 67 20 22  +..lappend log "
3c20: 6d 61 6b 69 6e 67 20 24 73 75 62 63 6d 64 22 0a  making $subcmd".
3c30: 2b 09 09 70 72 6f 63 20 24 73 75 62 63 6d 64 20  +..proc $subcmd 
3c40: 61 72 67 73 20 7b 0a 2b 09 09 20 20 20 20 67 6c  args {.+..    gl
3c50: 6f 62 61 6c 20 6c 6f 67 0a 2b 09 09 20 20 20 20  obal log.+..    
3c60: 6c 61 70 70 65 6e 64 20 6c 6f 67 20 22 72 75 6e  lappend log "run
3c70: 6e 69 6e 67 20 5b 69 6e 66 6f 20 6c 65 76 65 6c  ning [info level
3c80: 20 30 5d 22 0a 2b 09 09 20 20 20 20 6c 6c 65 6e   0]".+..    llen
3c90: 67 74 68 20 24 61 72 67 73 0a 2b 09 09 7d 0a 2b  gth $args.+..}.+
3ca0: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09  .    } else {.+.
3cb0: 09 6c 61 70 70 65 6e 64 20 6c 6f 67 20 22 75 6e  .lappend log "un
3cc0: 6b 6e 6f 77 6e 20 24 73 75 62 63 6d 64 20 2d 20  known $subcmd - 
3cd0: 61 72 67 73 20 3d 20 24 61 72 67 73 22 0a 2b 09  args = $args".+.
3ce0: 09 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 72  .return -code er
3cf0: 72 6f 72 20 5c 0a 2b 09 09 09 22 75 6e 6b 6e 6f  ror \.+..."unkno
3d00: 77 6e 20 6f 72 20 70 72 6f 74 65 63 74 65 64 20  wn or protected 
3d10: 73 75 62 63 6f 6d 6d 61 6e 64 20 5c 22 24 73 75  subcommand \"$su
3d20: 62 63 6d 64 5c 22 22 0a 2b 09 20 20 20 20 7d 0a  bcmd\"".+.    }.
3d30: 2b 09 7d 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20  +.}.+.namespace 
3d40: 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74 65 20  ensemble create 
3d50: 2d 75 6e 6b 6e 6f 77 6e 20 4d 61 67 69 63 0a 2b  -unknown Magic.+
3d60: 20 20 20 20 7d 0a 2b 20 20 20 20 73 65 74 20 72      }.+    set r
3d70: 65 73 75 6c 74 20 7b 7d 0a 2b 20 20 20 20 6c 61  esult {}.+    la
3d80: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
3d90: 74 63 68 20 7b 6e 73 20 61 20 62 20 63 7d 20 6d  tch {ns a b c} m
3da0: 73 67 5d 20 24 6d 73 67 0a 2b 20 20 20 20 6c 61  sg] $msg.+    la
3db0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
3dc0: 74 63 68 20 7b 6e 73 20 61 20 62 20 63 7d 20 6d  tch {ns a b c} m
3dd0: 73 67 5d 20 24 6d 73 67 0a 2b 20 20 20 20 6c 61  sg] $msg.+    la
3de0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
3df0: 74 63 68 20 7b 6e 73 20 62 20 63 20 64 7d 20 6d  tch {ns b c d} m
3e00: 73 67 5d 20 24 6d 73 67 0a 2b 20 20 20 20 6c 61  sg] $msg.+    la
3e10: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
3e20: 74 63 68 20 7b 6e 73 20 63 20 64 20 65 7d 20 6d  tch {ns c d e} m
3e30: 73 67 5d 20 24 6d 73 67 0a 2b 20 20 20 20 6c 61  sg] $msg.+    la
3e40: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
3e50: 74 63 68 20 7b 6e 73 20 4d 61 67 69 63 20 66 6f  tch {ns Magic fo
3e60: 6f 20 62 61 72 20 73 70 6f 6e 67 20 77 69 62 62  o bar spong wibb
3e70: 6c 65 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 20  le} msg] $msg.+ 
3e80: 20 20 20 6c 69 73 74 20 24 72 65 73 75 6c 74 20     list $result 
3e90: 5b 6c 73 6f 72 74 20 5b 69 6e 66 6f 20 63 6f 6d  [lsort [info com
3ea0: 6d 61 6e 64 73 20 3a 3a 6e 73 3a 3a 2a 5d 5d 20  mands ::ns::*]] 
3eb0: 24 6c 6f 67 20 5b 6e 61 6d 65 73 70 61 63 65 20  $log [namespace 
3ec0: 64 65 6c 65 74 65 20 6e 73 5d 0a 2b 7d 20 7b 7b  delete ns].+} {{
3ed0: 30 20 32 20 30 20 32 20 30 20 32 20 30 20 32 20  0 2 0 2 0 2 0 2 
3ee0: 31 20 7b 75 6e 6b 6e 6f 77 6e 20 6f 72 20 70 72  1 {unknown or pr
3ef0: 6f 74 65 63 74 65 64 20 73 75 62 63 6f 6d 6d 61  otected subcomma
3f00: 6e 64 20 22 4d 61 67 69 63 22 7d 7d 20 7b 3a 3a  nd "Magic"}} {::
3f10: 6e 73 3a 3a 4d 61 67 69 63 20 3a 3a 6e 73 3a 3a  ns::Magic ::ns::
3f20: 61 20 3a 3a 6e 73 3a 3a 62 20 3a 3a 6e 73 3a 3a  a ::ns::b ::ns::
3f30: 63 7d 20 7b 7b 6d 61 6b 69 6e 67 20 61 7d 20 7b  c} {{making a} {
3f40: 72 75 6e 6e 69 6e 67 20 6e 73 20 61 20 62 20 63  running ns a b c
3f50: 7d 20 7b 72 75 6e 6e 69 6e 67 20 6e 73 20 61 20  } {running ns a 
3f60: 62 20 63 7d 20 7b 6d 61 6b 69 6e 67 20 62 7d 20  b c} {making b} 
3f70: 7b 72 75 6e 6e 69 6e 67 20 6e 73 20 62 20 63 20  {running ns b c 
3f80: 64 7d 20 7b 6d 61 6b 69 6e 67 20 63 7d 20 7b 72  d} {making c} {r
3f90: 75 6e 6e 69 6e 67 20 6e 73 20 63 20 64 20 65 7d  unning ns c d e}
3fa0: 20 7b 75 6e 6b 6e 6f 77 6e 20 4d 61 67 69 63 20   {unknown Magic 
3fb0: 2d 20 61 72 67 73 20 3d 20 66 6f 6f 20 62 61 72  - args = foo bar
3fc0: 20 73 70 6f 6e 67 20 77 69 62 62 6c 65 7d 7d 20   spong wibble}} 
3fd0: 7b 7d 7d 0a 20 74 65 73 74 20 6e 61 6d 65 73 70  {}}. test namesp
3fe0: 61 63 65 2d 34 37 2e 32 20 7b 65 6e 73 65 6d 62  ace-47.2 {ensemb
3ff0: 6c 65 3a 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64  le: unknown hand
4000: 6c 65 72 7d 20 7b 0a 20 20 20 20 20 6e 61 6d 65  ler} {.     name
4010: 73 70 61 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a  space eval ns {.
4020: 20 09 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f   .namespace expo
4030: 72 74 20 7b 5b 61 2d 7a 5d 2a 7d 0a 40 40 20 2d  rt {[a-z]*}.@@ -
4040: 31 38 33 34 2c 36 20 2b 31 39 30 33 2c 32 34 20  1834,6 +1903,24 
4050: 40 40 0a 20 20 20 20 20 28 65 6e 73 65 6d 62 6c  @@.     (ensembl
4060: 65 20 75 6e 6b 6e 6f 77 6e 20 73 75 62 63 6f 6d  e unknown subcom
4070: 6d 61 6e 64 20 68 61 6e 64 6c 65 72 29 0a 20 20  mand handler).  
4080: 20 20 20 69 6e 76 6f 6b 65 64 20 66 72 6f 6d 20     invoked from 
4090: 77 69 74 68 69 6e 0a 20 22 6e 73 20 73 70 6f 6e  within. "ns spon
40a0: 67 22 7d 20 7b 7d 7d 0a 2b 74 65 73 74 20 6e 61  g"} {}}.+test na
40b0: 6d 65 73 70 61 63 65 2d 34 37 2e 32 2e 61 20 7b  mespace-47.2.a {
40c0: 65 6e 73 65 6d 62 6c 65 3a 20 75 6e 6b 6e 6f 77  ensemble: unknow
40d0: 6e 20 68 61 6e 64 6c 65 72 7d 20 7b 0a 2b 20 20  n handler} {.+  
40e0: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c    namespace eval
40f0: 20 6e 73 20 7b 0a 2b 09 6e 61 6d 65 73 70 61 63   ns {.+.namespac
4100: 65 20 65 78 70 6f 72 74 20 7b 5b 61 2d 7a 5d 2a  e export {[a-z]*
4110: 7d 0a 2b 09 70 72 6f 63 20 4d 61 67 69 63 20 7b  }.+.proc Magic {
4120: 65 6e 73 65 6d 62 6c 65 20 73 75 62 63 6d 64 20  ensemble subcmd 
4130: 61 72 67 73 7d 20 7b 0a 2b 09 20 20 20 20 65 72  args} {.+.    er
4140: 72 6f 72 20 66 6f 6f 62 61 72 0a 2b 09 7d 0a 2b  ror foobar.+.}.+
4150: 09 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d  .namespace ensem
4160: 62 6c 65 20 63 72 65 61 74 65 20 2d 75 6e 6b 6e  ble create -unkn
4170: 6f 77 6e 20 4d 61 67 69 63 0a 2b 20 20 20 20 7d  own Magic.+    }
4180: 0a 2b 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63  .+    list [catc
4190: 68 20 7b 6e 73 20 73 70 6f 6e 67 7d 20 6d 73 67  h {ns spong} msg
41a0: 5d 20 24 6d 73 67 20 24 3a 3a 65 72 72 6f 72 49  ] $msg $::errorI
41b0: 6e 66 6f 20 5b 6e 61 6d 65 73 70 61 63 65 20 64  nfo [namespace d
41c0: 65 6c 65 74 65 20 6e 73 5d 0a 2b 7d 20 7b 31 20  elete ns].+} {1 
41d0: 66 6f 6f 62 61 72 20 7b 66 6f 6f 62 61 72 0a 2b  foobar {foobar.+
41e0: 20 20 20 20 77 68 69 6c 65 20 65 78 65 63 75 74      while execut
41f0: 69 6e 67 0a 2b 22 65 72 72 6f 72 20 66 6f 6f 62  ing.+"error foob
4200: 61 72 22 0a 2b 20 20 20 20 28 70 72 6f 63 65 64  ar".+    (proced
4210: 75 72 65 20 22 4d 61 67 69 63 22 20 6c 69 6e 65  ure "Magic" line
4220: 20 32 29 0a 2b 20 20 20 20 69 6e 76 6f 6b 65 64   2).+    invoked
4230: 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2b 22 4d   from within.+"M
4240: 61 67 69 63 20 3a 3a 6e 73 20 73 70 6f 6e 67 22  agic ::ns spong"
4250: 0a 2b 20 20 20 20 28 65 6e 73 65 6d 62 6c 65 20  .+    (ensemble 
4260: 75 6e 6b 6e 6f 77 6e 20 73 75 62 63 6f 6d 6d 61  unknown subcomma
4270: 6e 64 20 68 61 6e 64 6c 65 72 29 0a 2b 20 20 20  nd handler).+   
4280: 20 69 6e 76 6f 6b 65 64 20 66 72 6f 6d 20 77 69   invoked from wi
4290: 74 68 69 6e 0a 2b 22 6e 73 20 73 70 6f 6e 67 22  thin.+"ns spong"
42a0: 7d 20 7b 7d 7d 0a 20 74 65 73 74 20 6e 61 6d 65  } {}}. test name
42b0: 73 70 61 63 65 2d 34 37 2e 33 20 7b 65 6e 73 65  space-47.3 {ense
42c0: 6d 62 6c 65 3a 20 75 6e 6b 6e 6f 77 6e 20 68 61  mble: unknown ha
42d0: 6e 64 6c 65 72 7d 20 7b 0a 20 20 20 20 20 6e 61  ndler} {.     na
42e0: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e 73 20  mespace eval ns 
42f0: 7b 0a 20 09 76 61 72 69 61 62 6c 65 20 63 6f 75  {. .variable cou
4300: 6e 74 20 30 0a 40 40 20 2d 31 38 34 39 2c 36 20  nt 0.@@ -1849,6 
4310: 2b 31 39 33 36 2c 32 31 20 40 40 0a 20 20 20 20  +1936,21 @@.    
4320: 20 7d 0a 20 20 20 20 20 6c 69 73 74 20 5b 63 61   }.     list [ca
4330: 74 63 68 20 7b 6e 73 20 73 70 6f 6e 67 7d 20 6d  tch {ns spong} m
4340: 73 67 5d 20 24 6d 73 67 20 24 6e 73 3a 3a 63 6f  sg] $msg $ns::co
4350: 75 6e 74 20 5b 6e 61 6d 65 73 70 61 63 65 20 64  unt [namespace d
4360: 65 6c 65 74 65 20 6e 73 5d 0a 20 7d 20 7b 31 20  elete ns]. } {1 
4370: 7b 75 6e 6b 6e 6f 77 6e 20 6f 72 20 61 6d 62 69  {unknown or ambi
4380: 67 75 6f 75 73 20 73 75 62 63 6f 6d 6d 61 6e 64  guous subcommand
4390: 20 22 73 70 6f 6e 67 22 3a 20 6d 75 73 74 20 62   "spong": must b
43a0: 65 20 61 2c 20 62 2c 20 6f 72 20 63 7d 20 31 20  e a, b, or c} 1 
43b0: 7b 7d 7d 0a 2b 74 65 73 74 20 6e 61 6d 65 73 70  {}}.+test namesp
43c0: 61 63 65 2d 34 37 2e 33 20 7b 65 6e 73 65 6d 62  ace-47.3 {ensemb
43d0: 6c 65 3a 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64  le: unknown hand
43e0: 6c 65 72 7d 20 7b 0a 2b 20 20 20 20 6e 61 6d 65  ler} {.+    name
43f0: 73 70 61 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a  space eval ns {.
4400: 2b 09 76 61 72 69 61 62 6c 65 20 63 6f 75 6e 74  +.variable count
4410: 20 30 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65   0.+.namespace e
4420: 78 70 6f 72 74 20 7b 5b 61 2d 7a 5d 2a 7d 0a 2b  xport {[a-z]*}.+
4430: 09 70 72 6f 63 20 61 20 7b 7d 20 7b 7d 0a 2b 09  .proc a {} {}.+.
4440: 70 72 6f 63 20 63 20 7b 7d 20 7b 7d 0a 2b 09 70  proc c {} {}.+.p
4450: 72 6f 63 20 4d 61 67 69 63 20 7b 65 6e 73 65 6d  roc Magic {ensem
4460: 62 6c 65 20 73 75 62 63 6d 64 20 61 72 67 73 7d  ble subcmd args}
4470: 20 7b 0a 2b 09 20 20 20 20 76 61 72 69 61 62 6c   {.+.    variabl
4480: 65 20 63 6f 75 6e 74 0a 2b 09 20 20 20 20 69 6e  e count.+.    in
4490: 63 72 20 63 6f 75 6e 74 0a 2b 09 20 20 20 20 70  cr count.+.    p
44a0: 72 6f 63 20 62 20 7b 7d 20 7b 7d 0a 2b 09 7d 0a  roc b {} {}.+.}.
44b0: 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65  +.namespace ense
44c0: 6d 62 6c 65 20 63 72 65 61 74 65 20 2d 75 6e 6b  mble create -unk
44d0: 6e 6f 77 6e 20 4d 61 67 69 63 0a 2b 20 20 20 20  nown Magic.+    
44e0: 7d 0a 2b 20 20 20 20 6c 69 73 74 20 5b 63 61 74  }.+    list [cat
44f0: 63 68 20 7b 6e 73 20 73 70 6f 6e 67 7d 20 6d 73  ch {ns spong} ms
4500: 67 5d 20 24 6d 73 67 20 24 6e 73 3a 3a 63 6f 75  g] $msg $ns::cou
4510: 6e 74 20 5b 6e 61 6d 65 73 70 61 63 65 20 64 65  nt [namespace de
4520: 6c 65 74 65 20 6e 73 5d 0a 2b 7d 20 7b 31 20 7b  lete ns].+} {1 {
4530: 75 6e 6b 6e 6f 77 6e 20 6f 72 20 61 6d 62 69 67  unknown or ambig
4540: 75 6f 75 73 20 73 75 62 63 6f 6d 6d 61 6e 64 20  uous subcommand 
4550: 22 73 70 6f 6e 67 22 3a 20 6d 75 73 74 20 62 65  "spong": must be
4560: 20 61 2c 20 62 2c 20 6f 72 20 63 7d 20 31 20 7b   a, b, or c} 1 {
4570: 7d 7d 0a 20 74 65 73 74 20 6e 61 6d 65 73 70 61  }}. test namespa
4580: 63 65 2d 34 37 2e 34 20 7b 65 6e 73 65 6d 62 6c  ce-47.4 {ensembl
4590: 65 3a 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64 6c  e: unknown handl
45a0: 65 72 7d 20 7b 0a 20 20 20 20 20 6e 61 6d 65 73  er} {.     names
45b0: 70 61 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a 20  pace eval ns {. 
45c0: 09 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72  .namespace expor
45d0: 74 20 7b 5b 61 2d 7a 5d 2a 7d 0a 40 40 20 2d 31  t {[a-z]*}.@@ -1
45e0: 38 36 32 2c 36 20 2b 31 39 36 34 2c 31 39 20 40  862,6 +1964,19 @
45f0: 40 0a 20 20 20 20 20 72 65 73 75 6c 74 20 6f 66  @.     result of
4600: 20 65 6e 73 65 6d 62 6c 65 20 75 6e 6b 6e 6f 77   ensemble unknow
4610: 6e 20 73 75 62 63 6f 6d 6d 61 6e 64 20 68 61 6e  n subcommand han
4620: 64 6c 65 72 3a 20 3a 3a 6e 73 3a 3a 4d 61 67 69  dler: ::ns::Magi
4630: 63 20 3a 3a 6e 73 20 73 70 6f 6e 67 0a 20 20 20  c ::ns spong.   
4640: 20 20 69 6e 76 6f 6b 65 64 20 66 72 6f 6d 20 77    invoked from w
4650: 69 74 68 69 6e 0a 20 22 6e 73 20 73 70 6f 6e 67  ithin. "ns spong
4660: 22 7d 20 7b 7d 7d 0a 2b 74 65 73 74 20 6e 61 6d  "} {}}.+test nam
4670: 65 73 70 61 63 65 2d 34 37 2e 34 2e 61 20 7b 65  espace-47.4.a {e
4680: 6e 73 65 6d 62 6c 65 3a 20 75 6e 6b 6e 6f 77 6e  nsemble: unknown
4690: 20 68 61 6e 64 6c 65 72 7d 20 7b 0a 2b 20 20 20   handler} {.+   
46a0: 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20   namespace eval 
46b0: 6e 73 20 7b 0a 2b 09 6e 61 6d 65 73 70 61 63 65  ns {.+.namespace
46c0: 20 65 78 70 6f 72 74 20 7b 5b 61 2d 7a 5d 2a 7d   export {[a-z]*}
46d0: 0a 2b 09 70 72 6f 63 20 4d 61 67 69 63 20 7b 65  .+.proc Magic {e
46e0: 6e 73 65 6d 62 6c 65 20 73 75 62 63 6d 64 20 61  nsemble subcmd a
46f0: 72 67 73 7d 20 7b 0a 2b 09 20 20 20 20 72 65 74  rgs} {.+.    ret
4700: 75 72 6e 20 2d 63 6f 64 65 20 62 72 65 61 6b 0a  urn -code break.
4710: 2b 09 7d 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20  +.}.+.namespace 
4720: 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74 65 20  ensemble create 
4730: 2d 75 6e 6b 6e 6f 77 6e 20 4d 61 67 69 63 0a 2b  -unknown Magic.+
4740: 20 20 20 20 7d 0a 2b 20 20 20 20 6c 69 73 74 20      }.+    list 
4750: 5b 63 61 74 63 68 20 7b 6e 73 20 73 70 6f 6e 67  [catch {ns spong
4760: 7d 20 6d 73 67 5d 20 24 6d 73 67 20 24 3a 3a 65  } msg] $msg $::e
4770: 72 72 6f 72 49 6e 66 6f 20 5b 6e 61 6d 65 73 70  rrorInfo [namesp
4780: 61 63 65 20 64 65 6c 65 74 65 20 6e 73 5d 0a 2b  ace delete ns].+
4790: 7d 20 7b 31 20 7b 75 6e 6b 6e 6f 77 6e 20 73 75  } {1 {unknown su
47a0: 62 63 6f 6d 6d 61 6e 64 20 68 61 6e 64 6c 65 72  bcommand handler
47b0: 20 72 65 74 75 72 6e 65 64 20 62 61 64 20 63 6f   returned bad co
47c0: 64 65 3a 20 62 72 65 61 6b 7d 20 7b 75 6e 6b 6e  de: break} {unkn
47d0: 6f 77 6e 20 73 75 62 63 6f 6d 6d 61 6e 64 20 68  own subcommand h
47e0: 61 6e 64 6c 65 72 20 72 65 74 75 72 6e 65 64 20  andler returned 
47f0: 62 61 64 20 63 6f 64 65 3a 20 62 72 65 61 6b 0a  bad code: break.
4800: 2b 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 65  +    result of e
4810: 6e 73 65 6d 62 6c 65 20 75 6e 6b 6e 6f 77 6e 20  nsemble unknown 
4820: 73 75 62 63 6f 6d 6d 61 6e 64 20 68 61 6e 64 6c  subcommand handl
4830: 65 72 3a 20 4d 61 67 69 63 20 3a 3a 6e 73 20 73  er: Magic ::ns s
4840: 70 6f 6e 67 0a 2b 20 20 20 20 69 6e 76 6f 6b 65  pong.+    invoke
4850: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2b 22  d from within.+"
4860: 6e 73 20 73 70 6f 6e 67 22 7d 20 7b 7d 7d 0a 20  ns spong"} {}}. 
4870: 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 34  test namespace-4
4880: 37 2e 35 20 7b 65 6e 73 65 6d 62 6c 65 3a 20 75  7.5 {ensemble: u
4890: 6e 6b 6e 6f 77 6e 20 68 61 6e 64 6c 65 72 7d 20  nknown handler} 
48a0: 7b 0a 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65  {.     namespace
48b0: 20 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74 65   ensemble create
48c0: 20 2d 63 6f 6d 6d 61 6e 64 20 66 6f 6f 20 2d 75   -command foo -u
48d0: 6e 6b 6e 6f 77 6e 20 62 61 72 0a 20 20 20 20 20  nknown bar.     
48e0: 70 72 6f 63 20 62 61 72 20 7b 61 72 67 73 7d 20  proc bar {args} 
48f0: 7b 0a 40 40 20 2d 31 38 38 39 2c 36 20 2b 32 30  {.@@ -1889,6 +20
4900: 30 34 2c 34 35 20 40 40 0a 20 20 20 20 20 77 68  04,45 @@.     wh
4910: 69 6c 65 20 70 61 72 73 69 6e 67 20 72 65 73 75  ile parsing resu
4920: 6c 74 20 6f 66 20 65 6e 73 65 6d 62 6c 65 20 75  lt of ensemble u
4930: 6e 6b 6e 6f 77 6e 20 73 75 62 63 6f 6d 6d 61 6e  nknown subcomman
4940: 64 20 68 61 6e 64 6c 65 72 0a 20 20 20 20 20 69  d handler.     i
4950: 6e 76 6f 6b 65 64 20 66 72 6f 6d 20 77 69 74 68  nvoked from with
4960: 69 6e 0a 20 22 66 6f 6f 20 62 61 72 22 7d 7d 0a  in. "foo bar"}}.
4970: 2b 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d  +test namespace-
4980: 34 37 2e 37 2e 61 20 7b 65 6e 73 65 6d 62 6c 65  47.7.a {ensemble
4990: 3a 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64 6c 65  : unknown handle
49a0: 72 20 69 6e 76 6f 6b 65 73 20 69 6e 20 65 6e 73  r invokes in ens
49b0: 65 6d 62 6c 65 27 73 20 6e 73 7d 20 5c 0a 2b 2d  emble's ns} \.+-
49c0: 62 6f 64 79 20 7b 0a 2b 20 20 20 20 6e 61 6d 65  body {.+    name
49d0: 73 70 61 63 65 20 65 76 61 6c 20 6e 73 30 20 7b  space eval ns0 {
49e0: 0a 2b 09 70 72 6f 63 20 4d 61 67 69 63 49 6d 70  .+.proc MagicImp
49f0: 6c 20 61 72 67 73 20 7b 0a 2b 09 20 20 20 20 72  l args {.+.    r
4a00: 65 74 75 72 6e 20 7b 4d 61 67 69 63 20 63 61 6c  eturn {Magic cal
4a10: 6c 65 64 7d 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a  led}.+.}.+    }.
4a20: 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65  +    namespace e
4a30: 76 61 6c 20 6e 73 31 20 7b 0a 2b 09 6e 61 6d 65  val ns1 {.+.name
4a40: 73 70 61 63 65 20 70 61 74 68 20 3a 3a 6e 73 30  space path ::ns0
4a50: 0a 2b 09 70 72 6f 63 20 4d 61 67 69 63 20 7b 65  .+.proc Magic {e
4a60: 6e 73 65 6d 62 6c 65 20 73 75 62 63 6d 64 20 61  nsemble subcmd a
4a70: 72 67 73 7d 20 7b 0a 2b 09 20 20 20 20 72 65 74  rgs} {.+.    ret
4a80: 75 72 6e 20 5b 6c 69 73 74 20 4d 61 67 69 63 49  urn [list MagicI
4a90: 6d 70 6c 5d 0a 2b 09 7d 0a 2b 09 6e 61 6d 65 73  mpl].+.}.+.names
4aa0: 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 72  pace ensemble cr
4ab0: 65 61 74 65 20 2d 75 6e 6b 6e 6f 77 6e 20 4d 61  eate -unknown Ma
4ac0: 67 69 63 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20  gic.+    }.+    
4ad0: 6e 73 31 20 66 6f 6f 0a 2b 7d 20 2d 63 6c 65 61  ns1 foo.+} -clea
4ae0: 6e 75 70 20 7b 0a 2b 20 20 20 20 6e 61 6d 65 73  nup {.+    names
4af0: 70 61 63 65 20 64 65 6c 65 74 65 20 6e 73 30 0a  pace delete ns0.
4b00: 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64  +    namespace d
4b10: 65 6c 65 74 65 20 6e 73 31 0a 2b 7d 20 2d 72 65  elete ns1.+} -re
4b20: 73 75 6c 74 20 7b 4d 61 67 69 63 20 63 61 6c 6c  sult {Magic call
4b30: 65 64 7d 0a 2b 74 65 73 74 20 6e 61 6d 65 73 70  ed}.+test namesp
4b40: 61 63 65 2d 34 37 2e 38 2e 61 20 7b 65 6e 73 65  ace-47.8.a {ense
4b50: 6d 62 6c 65 3a 20 75 6e 6b 6e 6f 77 6e 20 68 61  mble: unknown ha
4b60: 6e 64 6c 65 72 20 69 6e 76 6f 6b 65 73 20 69 6e  ndler invokes in
4b70: 20 65 6e 73 65 6d 62 6c 65 27 73 20 6e 73 7d 20   ensemble's ns} 
4b80: 5c 0a 2b 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20  \.+-body {.+    
4b90: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e  namespace eval n
4ba0: 73 30 20 7b 0a 2b 09 70 72 6f 63 20 4d 61 67 69  s0 {.+.proc Magi
4bb0: 63 49 6d 70 6c 20 61 72 67 73 20 7b 0a 2b 09 20  cImpl args {.+. 
4bc0: 20 20 20 72 65 74 75 72 6e 20 7b 4d 61 67 69 63     return {Magic
4bd0: 20 63 61 6c 6c 65 64 7d 0a 2b 09 7d 0a 2b 20 20   called}.+.}.+  
4be0: 20 20 7d 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61    }.+    namespa
4bf0: 63 65 20 65 76 61 6c 20 6e 73 31 20 7b 0a 2b 09  ce eval ns1 {.+.
4c00: 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b 6e 6f 77  namespace unknow
4c10: 6e 20 5b 6c 69 73 74 20 6e 61 6d 65 73 70 61 63  n [list namespac
4c20: 65 20 65 76 61 6c 20 3a 3a 6e 73 30 5d 0a 2b 09  e eval ::ns0].+.
4c30: 70 72 6f 63 20 4d 61 67 69 63 20 7b 65 6e 73 65  proc Magic {ense
4c40: 6d 62 6c 65 20 73 75 62 63 6d 64 20 61 72 67 73  mble subcmd args
4c50: 7d 20 7b 0a 2b 09 20 20 20 20 72 65 74 75 72 6e  } {.+.    return
4c60: 20 5b 6c 69 73 74 20 4d 61 67 69 63 49 6d 70 6c   [list MagicImpl
4c70: 5d 0a 2b 09 7d 0a 2b 09 6e 61 6d 65 73 70 61 63  ].+.}.+.namespac
4c80: 65 20 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74  e ensemble creat
4c90: 65 20 2d 75 6e 6b 6e 6f 77 6e 20 4d 61 67 69 63  e -unknown Magic
4ca0: 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 6e 73 31  .+    }.+    ns1
4cb0: 20 66 6f 6f 0a 2b 7d 20 2d 63 6c 65 61 6e 75 70   foo.+} -cleanup
4cc0: 20 7b 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63   {.+    namespac
4cd0: 65 20 64 65 6c 65 74 65 20 6e 73 30 0a 2b 20 20  e delete ns0.+  
4ce0: 20 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65    namespace dele
4cf0: 74 65 20 6e 73 31 0a 2b 7d 20 2d 72 65 73 75 6c  te ns1.+} -resul
4d00: 74 20 7b 4d 61 67 69 63 20 63 61 6c 6c 65 64 7d  t {Magic called}
4d10: 0a 2b 0a 20 0a 20 74 65 73 74 20 6e 61 6d 65 73  .+. . test names
4d20: 70 61 63 65 2d 34 38 2e 31 20 7b 65 6e 73 65 6d  pace-48.1 {ensem
4d30: 62 6c 65 73 20 61 6e 64 20 6e 61 6d 65 73 70 61  bles and namespa
4d40: 63 65 20 69 6d 70 6f 72 74 3a 20 75 6e 6b 6e 6f  ce import: unkno
4d50: 77 6e 20 68 61 6e 64 6c 65 72 7d 20 7b 0a 20 20  wn handler} {.  
4d60: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61     namespace eva
4d70: 6c 20 66 6f 6f 20 7b 0a 40 40 20 2d 31 39 32 36  l foo {.@@ -1926
4d80: 2c 36 20 2b 32 30 38 30 2c 34 32 20 40 40 0a 20  ,6 +2080,42 @@. 
4d90: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64 65      namespace de
4da0: 6c 65 74 65 20 66 6f 6f 0a 20 20 20 20 20 73 65  lete foo.     se
4db0: 74 20 72 65 73 75 6c 74 0a 20 7d 20 7b 7b 2d 6d  t result. } {{-m
4dc0: 61 70 20 7b 7d 20 2d 6e 61 6d 65 73 70 61 63 65  ap {} -namespace
4dd0: 20 3a 3a 66 6f 6f 20 2d 70 72 65 66 69 78 65 73   ::foo -prefixes
4de0: 20 31 20 2d 73 75 62 63 6f 6d 6d 61 6e 64 73 20   1 -subcommands 
4df0: 78 20 2d 75 6e 6b 6e 6f 77 6e 20 3a 3a 66 6f 6f  x -unknown ::foo
4e00: 3a 3a 75 7d 20 58 58 58 20 31 32 33 20 3a 3a 66  ::u} XXX 123 ::f
4e10: 6f 6f 3a 3a 62 61 72 20 7b 79 20 34 35 36 7d 20  oo::bar {y 456} 
4e20: 59 59 59 20 34 35 36 20 3a 3a 66 6f 6f 3a 3a 62  YYY 456 ::foo::b
4e30: 61 72 20 7b 7a 20 37 38 39 7d 20 5a 5a 5a 20 37  ar {z 789} ZZZ 7
4e40: 38 39 7d 0a 2b 74 65 73 74 20 6e 61 6d 65 73 70  89}.+test namesp
4e50: 61 63 65 2d 34 38 2e 31 2e 61 20 7b 65 6e 73 65  ace-48.1.a {ense
4e60: 6d 62 6c 65 73 20 61 6e 64 20 6e 61 6d 65 73 70  mbles and namesp
4e70: 61 63 65 20 69 6d 70 6f 72 74 3a 20 75 6e 6b 6e  ace import: unkn
4e80: 6f 77 6e 20 68 61 6e 64 6c 65 72 7d 20 7b 0a 2b  own handler} {.+
4e90: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76      namespace ev
4ea0: 61 6c 20 66 6f 6f 20 7b 0a 2b 09 6e 61 6d 65 73  al foo {.+.names
4eb0: 70 61 63 65 20 65 78 70 6f 72 74 20 62 61 72 0a  pace export bar.
4ec0: 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65  +.namespace ense
4ed0: 6d 62 6c 65 20 63 72 65 61 74 65 20 2d 63 6f 6d  mble create -com
4ee0: 6d 61 6e 64 20 62 61 72 20 2d 75 6e 6b 6e 6f 77  mand bar -unknow
4ef0: 6e 20 75 20 2d 73 75 62 63 6f 6d 6d 20 78 0a 2b  n u -subcomm x.+
4f00: 09 70 72 6f 63 20 75 20 7b 65 6e 73 20 61 72 67  .proc u {ens arg
4f10: 73 7d 20 7b 0a 2b 09 20 20 20 20 67 6c 6f 62 61  s} {.+.    globa
4f20: 6c 20 72 65 73 75 6c 74 0a 2b 09 20 20 20 20 6c  l result.+.    l
4f30: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 65  append result $e
4f40: 6e 73 20 24 61 72 67 73 0a 2b 09 20 20 20 20 6e  ns $args.+.    n
4f50: 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c  amespace ensembl
4f60: 65 20 63 6f 6e 66 69 67 20 24 65 6e 73 20 2d 73  e config $ens -s
4f70: 75 62 63 6f 6d 6d 61 6e 64 20 7b 78 20 79 7d 0a  ubcommand {x y}.
4f80: 2b 09 7d 0a 2b 09 70 72 6f 63 20 75 32 20 7b 65  +.}.+.proc u2 {e
4f90: 6e 73 20 61 72 67 73 7d 20 7b 0a 2b 09 20 20 20  ns args} {.+.   
4fa0: 20 67 6c 6f 62 61 6c 20 72 65 73 75 6c 74 0a 2b   global result.+
4fb0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
4fc0: 75 6c 74 20 24 65 6e 73 20 24 61 72 67 73 0a 2b  ult $ens $args.+
4fd0: 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65  .    namespace e
4fe0: 6e 73 65 6d 62 6c 65 20 63 6f 6e 66 69 67 20 3a  nsemble config :
4ff0: 3a 62 61 72 20 2d 73 75 62 63 6f 6d 6d 61 6e 64  :bar -subcommand
5000: 20 7b 78 20 79 20 7a 7d 0a 2b 09 7d 0a 2b 09 70   {x y z}.+.}.+.p
5010: 72 6f 63 20 78 20 61 72 67 73 20 7b 0a 2b 09 20  roc x args {.+. 
5020: 20 20 20 67 6c 6f 62 61 6c 20 72 65 73 75 6c 74     global result
5030: 0a 2b 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72  .+.    lappend r
5040: 65 73 75 6c 74 20 58 58 58 20 24 61 72 67 73 0a  esult XXX $args.
5050: 2b 09 7d 0a 2b 09 70 72 6f 63 20 79 20 61 72 67  +.}.+.proc y arg
5060: 73 20 7b 0a 2b 09 20 20 20 20 67 6c 6f 62 61 6c  s {.+.    global
5070: 20 72 65 73 75 6c 74 0a 2b 09 20 20 20 20 6c 61   result.+.    la
5080: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 59 59 59  ppend result YYY
5090: 20 24 61 72 67 73 0a 2b 09 7d 0a 2b 09 70 72 6f   $args.+.}.+.pro
50a0: 63 20 7a 20 61 72 67 73 20 7b 0a 2b 09 20 20 20  c z args {.+.   
50b0: 20 67 6c 6f 62 61 6c 20 72 65 73 75 6c 74 0a 2b   global result.+
50c0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
50d0: 75 6c 74 20 5a 5a 5a 20 24 61 72 67 73 0a 2b 09  ult ZZZ $args.+.
50e0: 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 6e 61  }.+    }.+    na
50f0: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 2d  mespace import -
5100: 66 6f 72 63 65 20 66 6f 6f 3a 3a 62 61 72 0a 2b  force foo::bar.+
5110: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
5120: 6c 69 73 74 20 5b 6e 61 6d 65 73 70 61 63 65 20  list [namespace 
5130: 65 6e 73 65 6d 62 6c 65 20 63 6f 6e 66 69 67 20  ensemble config 
5140: 62 61 72 5d 5d 0a 2b 20 20 20 20 62 61 72 20 78  bar]].+    bar x
5150: 20 31 32 33 0a 2b 20 20 20 20 62 61 72 20 79 20   123.+    bar y 
5160: 34 35 36 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61  456.+    namespa
5170: 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6e 66  ce ensemble conf
5180: 69 67 20 62 61 72 20 2d 75 6e 6b 6e 6f 77 6e 20  ig bar -unknown 
5190: 3a 3a 66 6f 6f 3a 3a 75 32 0a 2b 20 20 20 20 62  ::foo::u2.+    b
51a0: 61 72 20 7a 20 37 38 39 0a 2b 20 20 20 20 6e 61  ar z 789.+    na
51b0: 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 66  mespace delete f
51c0: 6f 6f 0a 2b 20 20 20 20 73 65 74 20 72 65 73 75  oo.+    set resu
51d0: 6c 74 0a 2b 7d 20 7b 7b 2d 6d 61 70 20 7b 7d 20  lt.+} {{-map {} 
51e0: 2d 6e 61 6d 65 73 70 61 63 65 20 3a 3a 66 6f 6f  -namespace ::foo
51f0: 20 2d 70 72 65 66 69 78 65 73 20 31 20 2d 73 75   -prefixes 1 -su
5200: 62 63 6f 6d 6d 61 6e 64 73 20 78 20 2d 75 6e 6b  bcommands x -unk
5210: 6e 6f 77 6e 20 75 7d 20 58 58 58 20 31 32 33 20  nown u} XXX 123 
5220: 3a 3a 66 6f 6f 3a 3a 62 61 72 20 7b 79 20 34 35  ::foo::bar {y 45
5230: 36 7d 20 59 59 59 20 34 35 36 20 3a 3a 66 6f 6f  6} YYY 456 ::foo
5240: 3a 3a 62 61 72 20 7b 7a 20 37 38 39 7d 20 5a 5a  ::bar {z 789} ZZ
5250: 5a 20 37 38 39 7d 0a 20 74 65 73 74 20 6e 61 6d  Z 789}. test nam
5260: 65 73 70 61 63 65 2d 34 38 2e 32 20 7b 65 6e 73  espace-48.2 {ens
5270: 65 6d 62 6c 65 73 20 61 6e 64 20 6e 61 6d 65 73  embles and names
5280: 70 61 63 65 20 69 6d 70 6f 72 74 3a 20 65 78 69  pace import: exi
5290: 73 74 73 7d 20 7b 0a 20 20 20 20 20 6e 61 6d 65  sts} {.     name
52a0: 73 70 61 63 65 20 65 76 61 6c 20 66 6f 6f 20 7b  space eval foo {
52b0: 0a 20 09 6e 61 6d 65 73 70 61 63 65 20 65 6e 73  . .namespace ens
52c0: 65 6d 62 6c 65 20 63 72 65 61 74 65 20 2d 63 6f  emble create -co
52d0: 6d 6d 61 6e 64 20 3a 3a 66 6f 6f 3a 3a 62 61 72  mmand ::foo::bar
52e0: 0a 40 40 20 2d 32 35 36 38 2c 37 20 2b 32 37 35  .@@ -2568,7 +275
52f0: 38 2c 32 34 20 40 40 0a 20 20 20 20 20 72 65 6e  8,24 @@.     ren
5300: 61 6d 65 20 75 6e 6b 6e 6f 77 6e 2e 73 61 76 65  ame unknown.save
5310: 20 3a 3a 75 6e 6b 6e 6f 77 6e 0a 20 20 20 20 20   ::unknown.     
5320: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a  namespace eval :
5330: 3a 20 5b 6c 69 73 74 20 6e 61 6d 65 73 70 61 63  : [list namespac
5340: 65 20 75 6e 6b 6e 6f 77 6e 20 24 68 61 6e 64 6c  e unknown $handl
5350: 65 72 5d 0a 20 7d 20 2d 72 65 73 75 6c 74 20 53  er]. } -result S
5360: 55 43 43 45 53 53 0a 2d 20 20 20 20 0a 2b 0a 2b  UCCESS.-    .+.+
5370: 23 0a 2b 23 20 54 49 50 20 32 38 33 3a 20 54 65  #.+# TIP 283: Te
5380: 73 74 73 20 66 6f 72 20 69 6e 74 65 72 61 63 74  sts for interact
5390: 69 6f 6e 20 6f 66 20 65 6e 73 65 6d 62 6c 65 73  ion of ensembles
53a0: 2c 20 70 61 74 68 73 20 61 6e 64 20 6e 61 6d 65  , paths and name
53b0: 73 70 61 63 65 20 75 6e 6b 6e 6f 77 6e 0a 2b 23  space unknown.+#
53c0: 0a 2b 23 20 4e 6f 74 65 20 74 68 61 74 20 73 6f  .+# Note that so
53d0: 6d 65 20 6f 74 68 65 72 20 74 65 73 74 73 20 6e  me other tests n
53e0: 61 6d 65 64 20 22 2e 61 22 20 61 72 65 20 69 6e  amed ".a" are in
53f0: 63 6c 75 64 65 64 20 61 62 6f 76 65 20 69 6e 20  cluded above in 
5400: 74 68 65 20 65 6e 73 65 6d 62 6c 65 0a 2b 23 20  the ensemble.+# 
5410: 73 65 63 74 69 6f 6e 0a 2b 0a 2b 23 20 2d 75 6e  section.+.+# -un
5420: 6b 6e 6f 77 6e 20 66 6f 75 6e 64 20 69 6e 20 70  known found in p
5430: 61 74 68 0a 2b 23 20 2d 75 6e 6b 6e 6f 77 6e 20  ath.+# -unknown 
5440: 66 6f 75 6e 64 20 62 79 20 6e 73 2d 75 6e 6b 6e  found by ns-unkn
5450: 6f 77 6e 0a 2b 23 20 2d 75 6e 6b 6e 6f 77 6e 20  own.+# -unknown 
5460: 66 6f 6c 6c 6f 77 73 20 70 61 74 68 0a 2b 23 20  follows path.+# 
5470: 2d 75 6e 6b 6e 6f 77 6e 20 66 6f 6c 6c 6f 77 73  -unknown follows
5480: 20 6e 73 2d 75 6e 6b 6e 6f 77 6e 0a 2b 23 20 2d   ns-unknown.+# -
5490: 6d 61 70 20 66 6f 6c 6c 6f 77 73 20 70 61 74 68  map follows path
54a0: 0a 2b 23 20 2d 6d 61 70 20 66 6f 6c 6c 6f 77 73  .+# -map follows
54b0: 20 6e 73 2d 75 6e 6b 6e 6f 77 6e 0a 2b 23 20 2d   ns-unknown.+# -
54c0: 73 75 62 63 6f 6d 6d 61 6e 64 73 20 66 6f 6c 6c  subcommands foll
54d0: 6f 77 73 20 70 61 74 68 0a 2b 23 20 2d 73 75 62  ows path.+# -sub
54e0: 63 6f 6d 6d 61 6e 64 73 20 66 6f 6c 6c 6f 77 73  commands follows
54f0: 20 6e 73 2d 75 6e 6b 6e 6f 77 6e 0a 2b 23 20 65   ns-unknown.+# e
5500: 78 70 6f 72 74 73 20 66 6f 6c 6c 6f 77 20 70 61  xports follow pa
5510: 74 68 20 28 3f 29 0a 2b 23 20 65 78 70 6f 72 74  th (?).+# export
5520: 73 20 66 6f 6c 6c 6f 77 20 6e 73 2d 75 6e 6b 6e  s follow ns-unkn
5530: 6f 77 6e 20 28 3f 29 0a 2b 0a 20 23 20 63 6c 65  own (?).+. # cle
5540: 61 6e 75 70 0a 20 63 61 74 63 68 20 7b 72 65 6e  anup. catch {ren
5550: 61 6d 65 20 63 6d 64 31 20 7b 7d 7d 0a 20 63 61  ame cmd1 {}}. ca
5560: 74 63 68 20 7b 75 6e 73 65 74 20 6c 7d 0a        tch {unset l}.