Tcl Source Code

Hex Artifact Content
Login

Artifact fdd2de29aa4d05209e297212bedbefdc904703cf:

Attachment "ensemble-parameters-v2.patch" to ticket [1901783fff] added by lars_h 2008-08-20 19:23:07.
0000: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74  Index: generic/t
0010: 63 6c 2e 64 65 63 6c 73 0a 3d 3d 3d 3d 3d 3d 3d  cl.decls.=======
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 3d 3d 0a 52 43 53  ============.RCS
0060: 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f   file: /cvsroot/
0070: 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f  tcl/tcl/generic/
0080: 74 63 6c 2e 64 65 63 6c 73 2c 76 0a 72 65 74 72  tcl.decls,v.retr
0090: 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20  ieving revision 
00a0: 31 2e 31 34 32 0a 64 69 66 66 20 2d 75 20 2d 72  1.142.diff -u -r
00b0: 31 2e 31 34 32 20 74 63 6c 2e 64 65 63 6c 73 0a  1.142 tcl.decls.
00c0: 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 2e  --- generic/tcl.
00d0: 64 65 63 6c 73 09 32 39 20 4a 75 6c 20 32 30 30  decls.29 Jul 200
00e0: 38 20 30 35 3a 33 30 3a 32 35 20 2d 30 30 30 30  8 05:30:25 -0000
00f0: 09 31 2e 31 34 32 0a 2b 2b 2b 20 67 65 6e 65 72  .1.142.+++ gener
0100: 69 63 2f 74 63 6c 2e 64 65 63 6c 73 09 32 30 20  ic/tcl.decls.20 
0110: 41 75 67 20 32 30 30 38 20 31 32 3a 30 37 3a 34  Aug 2008 12:07:4
0120: 39 20 2d 30 30 30 30 0a 40 40 20 2d 32 31 34 36  9 -0000.@@ -2146
0130: 2c 36 20 2b 32 31 34 36 2c 31 37 20 40 40 0a 20  ,6 +2146,17 @@. 
0140: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0150: 20 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 43        Tcl_Obj *C
0160: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 0a 20 7d 0a  ONST objv[]). }.
0170: 20 0a 2b 23 20 54 49 50 23 33 31 34 20 28 65 6e   .+# TIP#314 (en
0180: 73 65 6d 62 6c 65 73 20 77 69 74 68 20 70 61 72  sembles with par
0190: 61 6d 65 74 65 72 73 29 0a 2b 64 65 63 6c 61 72  ameters).+declar
01a0: 65 20 35 38 39 20 67 65 6e 65 72 69 63 20 7b 0a  e 589 generic {.
01b0: 2b 20 20 20 20 69 6e 74 20 54 63 6c 5f 53 65 74  +    int Tcl_Set
01c0: 45 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65 74 65  EnsembleParamete
01d0: 72 4c 69 73 74 28 54 63 6c 5f 49 6e 74 65 72 70  rList(Tcl_Interp
01e0: 20 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 43 6f   *interp, Tcl_Co
01f0: 6d 6d 61 6e 64 20 74 6f 6b 65 6e 2c 0a 2b 09 20  mmand token,.+. 
0200: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 61 72 61     Tcl_Obj *para
0210: 6d 4c 69 73 74 29 0a 2b 7d 0a 2b 64 65 63 6c 61  mList).+}.+decla
0220: 72 65 20 35 39 30 20 67 65 6e 65 72 69 63 20 7b  re 590 generic {
0230: 0a 2b 20 20 20 20 69 6e 74 20 54 63 6c 5f 47 65  .+    int Tcl_Ge
0240: 74 45 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65 74  tEnsembleParamet
0250: 65 72 4c 69 73 74 28 54 63 6c 5f 49 6e 74 65 72  erList(Tcl_Inter
0260: 70 20 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 43  p *interp, Tcl_C
0270: 6f 6d 6d 61 6e 64 20 74 6f 6b 65 6e 2c 0a 2b 09  ommand token,.+.
0280: 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 2a 70 61      Tcl_Obj **pa
0290: 72 61 6d 4c 69 73 74 50 74 72 29 0a 2b 7d 0a 2b  ramListPtr).+}.+
02a0: 0a 2b 0a 20 23 23 23 23 23 23 23 23 23 23 23 23  .+. ############
02b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 0a 20 0a 20 23 20 44 65 66 69 6e 65 20 74  ##. . # Define t
0300: 68 65 20 70 6c 61 74 66 6f 72 6d 20 73 70 65 63  he platform spec
0310: 69 66 69 63 20 70 75 62 6c 69 63 20 54 63 6c 20  ific public Tcl 
0320: 69 6e 74 65 72 66 61 63 65 2e 20 20 54 68 65 73  interface.  Thes
0330: 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 0a  e functions are.
0340: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74  Index: generic/t
0350: 63 6c 4e 61 6d 65 73 70 2e 63 0a 3d 3d 3d 3d 3d  clNamesp.c.=====
0360: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0370: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0380: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0390: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52  ==============.R
03a0: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f  CS file: /cvsroo
03b0: 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69  t/tcl/tcl/generi
03c0: 63 2f 74 63 6c 4e 61 6d 65 73 70 2e 63 2c 76 0a  c/tclNamesp.c,v.
03d0: 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73  retrieving revis
03e0: 69 6f 6e 20 31 2e 31 37 34 0a 64 69 66 66 20 2d  ion 1.174.diff -
03f0: 75 20 2d 72 31 2e 31 37 34 20 74 63 6c 4e 61 6d  u -r1.174 tclNam
0400: 65 73 70 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72 69  esp.c.--- generi
0410: 63 2f 74 63 6c 4e 61 6d 65 73 70 2e 63 09 33 20  c/tclNamesp.c.3 
0420: 41 75 67 20 32 30 30 38 20 31 37 3a 33 33 3a 31  Aug 2008 17:33:1
0430: 32 20 2d 30 30 30 30 09 31 2e 31 37 34 0a 2b 2b  2 -0000.1.174.++
0440: 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d  + generic/tclNam
0450: 65 73 70 2e 63 09 32 30 20 41 75 67 20 32 30 30  esp.c.20 Aug 200
0460: 38 20 31 32 3a 30 37 3a 35 33 20 2d 30 30 30 30  8 12:07:53 -0000
0470: 0a 40 40 20 2d 31 31 31 2c 39 20 2b 31 31 31 2c  .@@ -111,9 +111,
0480: 31 31 20 40 40 0a 20 09 09 09 09 20 2a 20 66 69  11 @@. .... * fi
0490: 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 69 6e 74  eld. */.     int
04a0: 20 66 6c 61 67 73 3b 09 09 09 2f 2a 20 4f 52 65   flags;.../* ORe
04b0: 64 20 63 6f 6d 62 6f 20 6f 66 20 54 43 4c 5f 45  d combo of TCL_E
04c0: 4e 53 45 4d 42 4c 45 5f 50 52 45 46 49 58 2c 20  NSEMBLE_PREFIX, 
04d0: 45 4e 53 5f 44 45 41 44 0a 20 09 09 09 09 20 2a  ENS_DEAD. .... *
04e0: 20 61 6e 64 20 45 4e 53 45 4d 42 4c 45 5f 43 4f   and ENSEMBLE_CO
04f0: 4d 50 49 4c 45 2e 20 2a 2f 0a 2b 20 20 20 20 69  MPILE. */.+    i
0500: 6e 74 20 6e 75 6d 50 61 72 61 6d 65 74 65 72 73  nt numParameters
0510: 3b 09 09 2f 2a 20 43 61 63 68 65 64 20 6e 75 6d  ;../* Cached num
0520: 62 65 72 20 6f 66 20 70 61 72 61 6d 65 74 65 72  ber of parameter
0530: 73 2e 20 2a 2f 20 0a 20 0a 20 20 20 20 20 2f 2a  s. */ . .     /*
0540: 20 4f 42 4a 45 43 54 20 46 49 45 4c 44 53 20 46   OBJECT FIELDS F
0550: 4f 52 20 45 4e 53 45 4d 42 4c 45 20 43 4f 4e 46  OR ENSEMBLE CONF
0560: 49 47 55 52 41 54 49 4f 4e 20 2a 2f 0a 20 0a 2b  IGURATION */. .+
0570: 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 61 72      Tcl_Obj *par
0580: 61 6d 65 74 65 72 4c 69 73 74 3b 09 2f 2a 20 4c  ameterList;./* L
0590: 69 73 74 20 6f 66 20 65 6e 73 65 6d 62 6c 65 20  ist of ensemble 
05a0: 70 61 72 61 6d 65 74 65 72 20 6e 61 6d 65 73 2e  parameter names.
05b0: 20 2a 2f 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a   */.     Tcl_Obj
05c0: 20 2a 73 75 62 63 6f 6d 6d 61 6e 64 44 69 63 74   *subcommandDict
05d0: 3b 09 2f 2a 20 44 69 63 74 69 6f 6e 61 72 79 20  ;./* Dictionary 
05e0: 70 72 6f 76 69 64 69 6e 67 20 6d 61 70 70 69 6e  providing mappin
05f0: 67 20 66 72 6f 6d 0a 20 09 09 09 09 20 2a 20 73  g from. .... * s
0600: 75 62 63 6f 6d 6d 61 6e 64 73 20 74 6f 20 74 68  ubcommands to th
0610: 65 69 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  eir implementing
0620: 20 63 6f 6d 6d 61 6e 64 0a 20 09 09 09 09 20 2a   command. .... *
0630: 20 70 72 65 66 69 78 65 73 2c 20 6f 72 20 4e 55   prefixes, or NU
0640: 4c 4c 20 69 66 20 77 65 20 61 72 65 20 74 6f 20  LL if we are to 
0650: 62 75 69 6c 64 20 74 68 65 0a 40 40 20 2d 31 34  build the.@@ -14
0660: 34 2c 36 20 2b 31 34 36 2c 39 20 40 40 0a 20 23  4,6 +146,9 @@. #
0670: 64 65 66 69 6e 65 20 45 4e 53 5f 44 45 41 44 09  define ENS_DEAD.
0680: 30 78 31 09 2f 2a 20 46 6c 61 67 20 76 61 6c 75  0x1./* Flag valu
0690: 65 20 74 6f 20 73 61 79 20 74 68 61 74 20 74 68  e to say that th
06a0: 65 20 65 6e 73 65 6d 62 6c 65 20 69 73 20 64 65  e ensemble is de
06b0: 61 64 0a 20 09 09 09 09 20 2a 20 61 6e 64 20 6f  ad. .... * and o
06c0: 6e 20 69 74 73 20 77 61 79 20 6f 75 74 2e 20 2a  n its way out. *
06d0: 2f 0a 20 0a 2b 0a 2b 0a 2b 0a 20 2f 2a 0a 20 20  /. .+.+.+. /*.  
06e0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  * Declarations f
06f0: 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 6c 6f 63  or functions loc
0700: 61 6c 20 74 6f 20 74 68 69 73 20 66 69 6c 65 3a  al to this file:
0710: 0a 20 20 2a 2f 0a 40 40 20 2d 34 37 39 37 2c 31  .  */.@@ -4797,1
0720: 36 20 2b 34 38 30 32 2c 32 30 20 40 40 0a 20 09  6 +4802,20 @@. .
0730: 45 4e 53 5f 43 4f 4e 46 49 47 2c 20 45 4e 53 5f  ENS_CONFIG, ENS_
0740: 43 52 45 41 54 45 2c 20 45 4e 53 5f 45 58 49 53  CREATE, ENS_EXIS
0750: 54 53 0a 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  TS.     };.     
0760: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
0770: 72 20 2a 63 72 65 61 74 65 4f 70 74 69 6f 6e 73  r *createOptions
0780: 5b 5d 20 3d 20 7b 0a 2d 09 22 2d 63 6f 6d 6d 61  [] = {.-."-comma
0790: 6e 64 22 2c 20 22 2d 6d 61 70 22 2c 20 22 2d 70  nd", "-map", "-p
07a0: 72 65 66 69 78 65 73 22 2c 20 22 2d 73 75 62 63  refixes", "-subc
07b0: 6f 6d 6d 61 6e 64 73 22 2c 20 22 2d 75 6e 6b 6e  ommands", "-unkn
07c0: 6f 77 6e 22 2c 20 4e 55 4c 4c 0a 2b 09 22 2d 63  own", NULL.+."-c
07d0: 6f 6d 6d 61 6e 64 22 2c 20 22 2d 6d 61 70 22 2c  ommand", "-map",
07e0: 20 22 2d 70 61 72 61 6d 65 74 65 72 73 22 2c 20   "-parameters", 
07f0: 22 2d 70 72 65 66 69 78 65 73 22 2c 20 22 2d 73  "-prefixes", "-s
0800: 75 62 63 6f 6d 6d 61 6e 64 73 22 2c 20 0a 2b 20  ubcommands", .+ 
0810: 20 20 20 20 20 20 20 22 2d 75 6e 6b 6e 6f 77 6e         "-unknown
0820: 22 2c 20 4e 55 4c 4c 0a 20 20 20 20 20 7d 3b 0a  ", NULL.     };.
0830: 20 20 20 20 20 65 6e 75 6d 20 45 6e 73 43 72 65       enum EnsCre
0840: 61 74 65 4f 70 74 73 20 7b 0a 2d 09 43 52 54 5f  ateOpts {.-.CRT_
0850: 43 4d 44 2c 20 43 52 54 5f 4d 41 50 2c 20 43 52  CMD, CRT_MAP, CR
0860: 54 5f 50 52 45 46 49 58 2c 20 43 52 54 5f 53 55  T_PREFIX, CRT_SU
0870: 42 43 4d 44 53 2c 20 43 52 54 5f 55 4e 4b 4e 4f  BCMDS, CRT_UNKNO
0880: 57 4e 0a 2b 09 43 52 54 5f 43 4d 44 2c 20 43 52  WN.+.CRT_CMD, CR
0890: 54 5f 4d 41 50 2c 20 43 52 54 5f 50 41 52 41 4d  T_MAP, CRT_PARAM
08a0: 2c 20 43 52 54 5f 50 52 45 46 49 58 2c 20 43 52  , CRT_PREFIX, CR
08b0: 54 5f 53 55 42 43 4d 44 53 2c 20 0a 2b 20 20 20  T_SUBCMDS, .+   
08c0: 20 20 20 20 20 43 52 54 5f 55 4e 4b 4e 4f 57 4e       CRT_UNKNOWN
08d0: 0a 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 73 74  .     };.     st
08e0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
08f0: 2a 63 6f 6e 66 69 67 4f 70 74 69 6f 6e 73 5b 5d  *configOptions[]
0900: 20 3d 20 7b 0a 2d 09 22 2d 6d 61 70 22 2c 20 22   = {.-."-map", "
0910: 2d 6e 61 6d 65 73 70 61 63 65 22 2c 20 22 2d 70  -namespace", "-p
0920: 72 65 66 69 78 65 73 22 2c 20 22 2d 73 75 62 63  refixes", "-subc
0930: 6f 6d 6d 61 6e 64 73 22 2c 20 22 2d 75 6e 6b 6e  ommands", "-unkn
0940: 6f 77 6e 22 2c 20 4e 55 4c 4c 0a 2b 09 22 2d 6d  own", NULL.+."-m
0950: 61 70 22 2c 20 22 2d 6e 61 6d 65 73 70 61 63 65  ap", "-namespace
0960: 22 2c 20 22 2d 70 61 72 61 6d 65 74 65 72 73 22  ", "-parameters"
0970: 2c 20 22 2d 70 72 65 66 69 78 65 73 22 2c 20 22  , "-prefixes", "
0980: 2d 73 75 62 63 6f 6d 6d 61 6e 64 73 22 2c 20 0a  -subcommands", .
0990: 2b 20 20 20 20 20 20 20 20 22 2d 75 6e 6b 6e 6f  +        "-unkno
09a0: 77 6e 22 2c 20 4e 55 4c 4c 0a 20 20 20 20 20 7d  wn", NULL.     }
09b0: 3b 0a 20 20 20 20 20 65 6e 75 6d 20 45 6e 73 43  ;.     enum EnsC
09c0: 6f 6e 66 69 67 4f 70 74 73 20 7b 0a 2d 09 43 4f  onfigOpts {.-.CO
09d0: 4e 46 5f 4d 41 50 2c 20 43 4f 4e 46 5f 4e 41 4d  NF_MAP, CONF_NAM
09e0: 45 53 50 41 43 45 2c 20 43 4f 4e 46 5f 50 52 45  ESPACE, CONF_PRE
09f0: 46 49 58 2c 20 43 4f 4e 46 5f 53 55 42 43 4d 44  FIX, CONF_SUBCMD
0a00: 53 2c 20 43 4f 4e 46 5f 55 4e 4b 4e 4f 57 4e 0a  S, CONF_UNKNOWN.
0a10: 2b 09 43 4f 4e 46 5f 4d 41 50 2c 20 43 4f 4e 46  +.CONF_MAP, CONF
0a20: 5f 4e 41 4d 45 53 50 41 43 45 2c 20 43 4f 4e 46  _NAMESPACE, CONF
0a30: 5f 50 41 52 41 4d 2c 20 43 4f 4e 46 5f 50 52 45  _PARAM, CONF_PRE
0a40: 46 49 58 2c 20 43 4f 4e 46 5f 53 55 42 43 4d 44  FIX, CONF_SUBCMD
0a50: 53 2c 20 0a 2b 20 20 20 20 20 20 20 20 43 4f 4e  S, .+        CON
0a60: 46 5f 55 4e 4b 4e 4f 57 4e 0a 20 20 20 20 20 7d  F_UNKNOWN.     }
0a70: 3b 0a 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78  ;.     int index
0a80: 3b 0a 20 0a 40 40 20 2d 34 38 34 31 2c 36 20 2b  ;. .@@ -4841,6 +
0a90: 34 38 35 30 2c 37 20 40 40 0a 20 09 54 63 6c 5f  4850,7 @@. .Tcl_
0aa0: 4f 62 6a 20 2a 6d 61 70 4f 62 6a 20 3d 20 4e 55  Obj *mapObj = NU
0ab0: 4c 4c 3b 0a 20 09 69 6e 74 20 70 65 72 6d 69 74  LL;. .int permit
0ac0: 50 72 65 66 69 78 20 3d 20 31 3b 0a 20 09 54 63  Prefix = 1;. .Tc
0ad0: 6c 5f 4f 62 6a 20 2a 75 6e 6b 6e 6f 77 6e 4f 62  l_Obj *unknownOb
0ae0: 6a 20 3d 20 4e 55 4c 4c 3b 0a 2b 09 54 63 6c 5f  j = NULL;.+.Tcl_
0af0: 4f 62 6a 20 2a 70 61 72 61 6d 4f 62 6a 20 3d 20  Obj *paramObj = 
0b00: 4e 55 4c 4c 3b 0a 20 0a 20 09 6f 62 6a 76 20 2b  NULL;. . .objv +
0b10: 3d 20 33 3b 0a 20 09 6f 62 6a 63 20 2d 3d 20 33  = 3;. .objc -= 3
0b20: 3b 0a 40 40 20 2d 34 38 38 31 2c 36 20 2b 34 38  ;.@@ -4881,6 +48
0b30: 39 31 2c 31 35 20 40 40 0a 20 09 09 7d 0a 20 09  91,15 @@. ..}. .
0b40: 09 73 75 62 63 6d 64 4f 62 6a 20 3d 20 28 6c 65  .subcmdObj = (le
0b50: 6e 20 3e 20 30 20 3f 20 6f 62 6a 76 5b 31 5d 20  n > 0 ? objv[1] 
0b60: 3a 20 4e 55 4c 4c 29 3b 0a 20 09 09 63 6f 6e 74  : NULL);. ..cont
0b70: 69 6e 75 65 3b 0a 2b 09 20 20 20 20 63 61 73 65  inue;.+.    case
0b80: 20 43 52 54 5f 50 41 52 41 4d 3a 0a 2b 09 09 69   CRT_PARAM:.+..i
0b90: 66 20 28 54 63 6c 4c 69 73 74 4f 62 6a 4c 65 6e  f (TclListObjLen
0ba0: 67 74 68 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  gth(interp, objv
0bb0: 5b 31 5d 2c 20 26 6c 65 6e 29 20 21 3d 20 54 43  [1], &len) != TC
0bc0: 4c 5f 4f 4b 29 20 7b 0a 2b 09 09 20 20 20 20 69  L_OK) {.+..    i
0bd0: 66 20 28 61 6c 6c 6f 63 61 74 65 64 4d 61 70 46  f (allocatedMapF
0be0: 6c 61 67 29 20 7b 0a 2b 09 09 09 54 63 6c 5f 44  lag) {.+...Tcl_D
0bf0: 65 63 72 52 65 66 43 6f 75 6e 74 28 6d 61 70 4f  ecrRefCount(mapO
0c00: 62 6a 29 3b 0a 2b 09 09 20 20 20 20 7d 0a 2b 09  bj);.+..    }.+.
0c10: 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
0c20: 45 52 52 4f 52 3b 0a 2b 09 09 7d 0a 2b 09 09 70  ERROR;.+..}.+..p
0c30: 61 72 61 6d 4f 62 6a 20 3d 20 28 6c 65 6e 20 3e  aramObj = (len >
0c40: 20 30 20 3f 20 6f 62 6a 76 5b 31 5d 20 3a 20 4e   0 ? objv[1] : N
0c50: 55 4c 4c 29 3b 0a 2b 09 09 63 6f 6e 74 69 6e 75  ULL);.+..continu
0c60: 65 3b 0a 20 09 20 20 20 20 63 61 73 65 20 43 52  e;. .    case CR
0c70: 54 5f 4d 41 50 3a 20 7b 0a 20 09 09 54 63 6c 5f  T_MAP: {. ..Tcl_
0c80: 4f 62 6a 20 2a 70 61 74 63 68 65 64 44 69 63 74  Obj *patchedDict
0c90: 20 3d 20 4e 55 4c 4c 2c 20 2a 73 75 62 63 6d 64   = NULL, *subcmd
0ca0: 4f 62 6a 3b 0a 20 0a 40 40 20 2d 34 39 38 37 2c  Obj;. .@@ -4987,
0cb0: 36 20 2b 35 30 30 36 2c 37 20 40 40 0a 20 09 54  6 +5006,7 @@. .T
0cc0: 63 6c 5f 53 65 74 45 6e 73 65 6d 62 6c 65 53 75  cl_SetEnsembleSu
0cd0: 62 63 6f 6d 6d 61 6e 64 4c 69 73 74 28 69 6e 74  bcommandList(int
0ce0: 65 72 70 2c 20 74 6f 6b 65 6e 2c 20 73 75 62 63  erp, token, subc
0cf0: 6d 64 4f 62 6a 29 3b 0a 20 09 54 63 6c 5f 53 65  mdObj);. .Tcl_Se
0d00: 74 45 6e 73 65 6d 62 6c 65 4d 61 70 70 69 6e 67  tEnsembleMapping
0d10: 44 69 63 74 28 69 6e 74 65 72 70 2c 20 74 6f 6b  Dict(interp, tok
0d20: 65 6e 2c 20 6d 61 70 4f 62 6a 29 3b 0a 20 09 54  en, mapObj);. .T
0d30: 63 6c 5f 53 65 74 45 6e 73 65 6d 62 6c 65 55 6e  cl_SetEnsembleUn
0d40: 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 28 69 6e 74  knownHandler(int
0d50: 65 72 70 2c 20 74 6f 6b 65 6e 2c 20 75 6e 6b 6e  erp, token, unkn
0d60: 6f 77 6e 4f 62 6a 29 3b 0a 2b 09 54 63 6c 5f 53  ownObj);.+.Tcl_S
0d70: 65 74 45 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65  etEnsembleParame
0d80: 74 65 72 4c 69 73 74 28 69 6e 74 65 72 70 2c 20  terList(interp, 
0d90: 74 6f 6b 65 6e 2c 20 70 61 72 61 6d 4f 62 6a 29  token, paramObj)
0da0: 3b 0a 20 0a 20 09 2f 2a 0a 20 09 20 2a 20 54 72  ;. . ./*. . * Tr
0db0: 69 63 6b 79 21 20 4d 75 73 74 20 65 6e 73 75 72  icky! Must ensur
0dc0: 65 20 74 68 61 74 20 74 68 65 20 72 65 73 75 6c  e that the resul
0dd0: 74 20 69 73 20 6e 6f 74 20 73 68 61 72 65 64 20  t is not shared 
0de0: 28 63 6f 6d 6d 61 6e 64 20 64 65 6c 65 74 65 0a  (command delete.
0df0: 40 40 20 2d 35 30 33 32 2c 36 20 2b 35 30 35 32  @@ -5032,6 +5052
0e00: 2c 31 32 20 40 40 0a 20 09 09 20 20 20 20 54 63  ,12 @@. ..    Tc
0e10: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
0e20: 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a  nterp, resultObj
0e30: 29 3b 0a 20 09 09 7d 0a 20 09 09 62 72 65 61 6b  );. ..}. ..break
0e40: 3b 0a 2b 09 20 20 20 20 63 61 73 65 20 43 4f 4e  ;.+.    case CON
0e50: 46 5f 50 41 52 41 4d 3a 0a 2b 09 09 54 63 6c 5f  F_PARAM:.+..Tcl_
0e60: 47 65 74 45 6e 73 65 6d 62 6c 65 50 61 72 61 6d  GetEnsembleParam
0e70: 65 74 65 72 4c 69 73 74 28 4e 55 4c 4c 2c 20 74  eterList(NULL, t
0e80: 6f 6b 65 6e 2c 20 26 72 65 73 75 6c 74 4f 62 6a  oken, &resultObj
0e90: 29 3b 0a 2b 09 09 69 66 20 28 72 65 73 75 6c 74  );.+..if (result
0ea0: 4f 62 6a 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b  Obj != NULL) {.+
0eb0: 09 09 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a  ..    Tcl_SetObj
0ec0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 72  Result(interp, r
0ed0: 65 73 75 6c 74 4f 62 6a 29 3b 0a 2b 09 09 7d 0a  esultObj);.+..}.
0ee0: 2b 09 09 62 72 65 61 6b 3b 0a 20 09 20 20 20 20  +..break;. .    
0ef0: 63 61 73 65 20 43 4f 4e 46 5f 4d 41 50 3a 0a 20  case CONF_MAP:. 
0f00: 09 09 54 63 6c 5f 47 65 74 45 6e 73 65 6d 62 6c  ..Tcl_GetEnsembl
0f10: 65 4d 61 70 70 69 6e 67 44 69 63 74 28 4e 55 4c  eMappingDict(NUL
0f20: 4c 2c 20 74 6f 6b 65 6e 2c 20 26 72 65 73 75 6c  L, token, &resul
0f30: 74 4f 62 6a 29 3b 0a 20 09 09 69 66 20 28 72 65  tObj);. ..if (re
0f40: 73 75 6c 74 4f 62 6a 20 21 3d 20 4e 55 4c 4c 29  sultObj != NULL)
0f50: 20 7b 0a 40 40 20 2d 35 30 38 39 2c 36 20 2b 35   {.@@ -5089,6 +5
0f60: 31 31 35 2c 31 33 20 40 40 0a 20 09 09 20 20 20  115,13 @@. ..   
0f70: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
0f80: 6a 28 28 28 4e 61 6d 65 73 70 61 63 65 20 2a 29  j(((Namespace *)
0f90: 6e 61 6d 65 73 70 61 63 65 50 74 72 29 2d 3e 66  namespacePtr)->f
0fa0: 75 6c 6c 4e 61 6d 65 2c 0a 20 09 09 20 20 20 20  ullName,. ..    
0fb0: 2d 31 29 29 3b 0a 20 0a 2b 09 20 20 20 20 2f 2a  -1));. .+.    /*
0fc0: 20 2d 70 61 72 61 6d 65 74 65 72 73 20 6f 70 74   -parameters opt
0fd0: 69 6f 6e 20 2a 2f 0a 2b 09 20 20 20 20 54 63 6c  ion */.+.    Tcl
0fe0: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
0ff0: 65 6d 65 6e 74 28 4e 55 4c 4c 2c 20 72 65 73 75  ement(NULL, resu
1000: 6c 74 4f 62 6a 2c 0a 2b 09 09 20 20 20 20 54 63  ltObj,.+..    Tc
1010: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 63  l_NewStringObj(c
1020: 6f 6e 66 69 67 4f 70 74 69 6f 6e 73 5b 43 4f 4e  onfigOptions[CON
1030: 46 5f 50 41 52 41 4d 5d 2c 20 2d 31 29 29 3b 0a  F_PARAM], -1));.
1040: 2b 09 20 20 20 20 54 63 6c 5f 47 65 74 45 6e 73  +.    Tcl_GetEns
1050: 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 72 4c 69  embleParameterLi
1060: 73 74 28 4e 55 4c 4c 2c 20 74 6f 6b 65 6e 2c 20  st(NULL, token, 
1070: 26 74 6d 70 4f 62 6a 29 3b 0a 2b 09 20 20 20 20  &tmpObj);.+.    
1080: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
1090: 64 45 6c 65 6d 65 6e 74 28 4e 55 4c 4c 2c 20 72  dElement(NULL, r
10a0: 65 73 75 6c 74 4f 62 6a 2c 0a 2b 09 09 20 20 20  esultObj,.+..   
10b0: 20 28 74 6d 70 4f 62 6a 20 21 3d 20 4e 55 4c 4c   (tmpObj != NULL
10c0: 29 20 3f 20 74 6d 70 4f 62 6a 20 3a 20 54 63 6c  ) ? tmpObj : Tcl
10d0: 5f 4e 65 77 4f 62 6a 28 29 29 3b 0a 2b 0a 20 09  _NewObj());.+. .
10e0: 20 20 20 20 2f 2a 20 2d 70 72 65 66 69 78 20 6f      /* -prefix o
10f0: 70 74 69 6f 6e 20 2a 2f 0a 20 09 20 20 20 20 54  ption */. .    T
1100: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
1110: 45 6c 65 6d 65 6e 74 28 4e 55 4c 4c 2c 20 72 65  Element(NULL, re
1120: 73 75 6c 74 4f 62 6a 2c 0a 20 09 09 20 20 20 20  sultObj,. ..    
1130: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
1140: 28 63 6f 6e 66 69 67 4f 70 74 69 6f 6e 73 5b 43  (configOptions[C
1150: 4f 4e 46 5f 50 52 45 46 49 58 5d 2c 20 2d 31 29  ONF_PREFIX], -1)
1160: 29 3b 0a 40 40 20 2d 35 31 31 36 2c 31 32 20 2b  );.@@ -5116,12 +
1170: 35 31 34 39 2c 31 33 20 40 40 0a 20 09 20 20 20  5149,13 @@. .   
1180: 20 54 63 6c 5f 44 69 63 74 53 65 61 72 63 68 20   Tcl_DictSearch 
1190: 73 65 61 72 63 68 3b 0a 20 09 20 20 20 20 54 63  search;. .    Tc
11a0: 6c 5f 4f 62 6a 20 2a 6c 69 73 74 4f 62 6a 3b 0a  l_Obj *listObj;.
11b0: 20 09 20 20 20 20 69 6e 74 20 64 6f 6e 65 2c 20   .    int done, 
11c0: 6c 65 6e 2c 20 61 6c 6c 6f 63 61 74 65 64 4d 61  len, allocatedMa
11d0: 70 46 6c 61 67 20 3d 20 30 3b 0a 2d 09 20 20 20  pFlag = 0;.-.   
11e0: 20 54 63 6c 5f 4f 62 6a 20 2a 73 75 62 63 6d 64   Tcl_Obj *subcmd
11f0: 4f 62 6a 20 3d 20 4e 55 4c 4c 2c 20 2a 6d 61 70  Obj = NULL, *map
1200: 4f 62 6a 20 3d 20 4e 55 4c 4c 2c 0a 2b 09 20 20  Obj = NULL,.+.  
1210: 20 20 54 63 6c 5f 4f 62 6a 20 2a 73 75 62 63 6d    Tcl_Obj *subcm
1220: 64 4f 62 6a 20 3d 20 4e 55 4c 4c 2c 20 2a 6d 61  dObj = NULL, *ma
1230: 70 4f 62 6a 20 3d 20 4e 55 4c 4c 2c 20 2a 70 61  pObj = NULL, *pa
1240: 72 61 6d 4f 62 6a 20 3d 20 4e 55 4c 4c 2c 0a 20  ramObj = NULL,. 
1250: 09 09 20 20 20 20 2a 75 6e 6b 6e 6f 77 6e 4f 62  ..    *unknownOb
1260: 6a 20 3d 20 4e 55 4c 4c 3b 20 2f 2a 20 44 65 66  j = NULL; /* Def
1270: 61 75 6c 74 73 2c 20 73 69 6c 65 6e 63 65 20 67  aults, silence g
1280: 63 63 20 34 20 77 61 72 6e 69 6e 67 73 20 2a 2f  cc 4 warnings */
1290: 0a 20 09 20 20 20 20 69 6e 74 20 70 65 72 6d 69  . .    int permi
12a0: 74 50 72 65 66 69 78 2c 20 66 6c 61 67 73 20 3d  tPrefix, flags =
12b0: 20 30 3b 09 2f 2a 20 73 69 6c 65 6e 63 65 20 67   0;./* silence g
12c0: 63 63 20 34 20 77 61 72 6e 69 6e 67 20 2a 2f 0a  cc 4 warning */.
12d0: 20 0a 20 09 20 20 20 20 54 63 6c 5f 47 65 74 45   . .    Tcl_GetE
12e0: 6e 73 65 6d 62 6c 65 53 75 62 63 6f 6d 6d 61 6e  nsembleSubcomman
12f0: 64 4c 69 73 74 28 4e 55 4c 4c 2c 20 74 6f 6b 65  dList(NULL, toke
1300: 6e 2c 20 26 73 75 62 63 6d 64 4f 62 6a 29 3b 0a  n, &subcmdObj);.
1310: 20 09 20 20 20 20 54 63 6c 5f 47 65 74 45 6e 73   .    Tcl_GetEns
1320: 65 6d 62 6c 65 4d 61 70 70 69 6e 67 44 69 63 74  embleMappingDict
1330: 28 4e 55 4c 4c 2c 20 74 6f 6b 65 6e 2c 20 26 6d  (NULL, token, &m
1340: 61 70 4f 62 6a 29 3b 0a 2b 09 20 20 20 20 54 63  apObj);.+.    Tc
1350: 6c 5f 47 65 74 45 6e 73 65 6d 62 6c 65 50 61 72  l_GetEnsemblePar
1360: 61 6d 65 74 65 72 4c 69 73 74 28 4e 55 4c 4c 2c  ameterList(NULL,
1370: 20 74 6f 6b 65 6e 2c 20 26 70 61 72 61 6d 4f 62   token, &paramOb
1380: 6a 29 3b 0a 20 09 20 20 20 20 54 63 6c 5f 47 65  j);. .    Tcl_Ge
1390: 74 45 6e 73 65 6d 62 6c 65 55 6e 6b 6e 6f 77 6e  tEnsembleUnknown
13a0: 48 61 6e 64 6c 65 72 28 4e 55 4c 4c 2c 20 74 6f  Handler(NULL, to
13b0: 6b 65 6e 2c 20 26 75 6e 6b 6e 6f 77 6e 4f 62 6a  ken, &unknownObj
13c0: 29 3b 0a 20 09 20 20 20 20 54 63 6c 5f 47 65 74  );. .    Tcl_Get
13d0: 45 6e 73 65 6d 62 6c 65 46 6c 61 67 73 28 4e 55  EnsembleFlags(NU
13e0: 4c 4c 2c 20 74 6f 6b 65 6e 2c 20 26 66 6c 61 67  LL, token, &flag
13f0: 73 29 3b 0a 20 09 20 20 20 20 70 65 72 6d 69 74  s);. .    permit
1400: 50 72 65 66 69 78 20 3d 20 28 66 6c 61 67 73 20  Prefix = (flags 
1410: 26 20 54 43 4c 5f 45 4e 53 45 4d 42 4c 45 5f 50  & TCL_ENSEMBLE_P
1420: 52 45 46 49 58 29 20 21 3d 20 30 3b 0a 40 40 20  REFIX) != 0;.@@ 
1430: 2d 35 31 35 34 2c 36 20 2b 35 31 38 38 2c 31 35  -5154,6 +5188,15
1440: 20 40 40 0a 20 09 09 20 20 20 20 7d 0a 20 09 09   @@. ..    }. ..
1450: 20 20 20 20 73 75 62 63 6d 64 4f 62 6a 20 3d 20      subcmdObj = 
1460: 28 6c 65 6e 20 3e 20 30 20 3f 20 6f 62 6a 76 5b  (len > 0 ? objv[
1470: 31 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 09 09 20  1] : NULL);. .. 
1480: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 2b 09 09     continue;.+..
1490: 63 61 73 65 20 43 4f 4e 46 5f 50 41 52 41 4d 3a  case CONF_PARAM:
14a0: 0a 2b 09 09 20 20 20 20 69 66 20 28 54 63 6c 4c  .+..    if (TclL
14b0: 69 73 74 4f 62 6a 4c 65 6e 67 74 68 28 69 6e 74  istObjLength(int
14c0: 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 6c  erp, objv[1], &l
14d0: 65 6e 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  en) != TCL_OK) {
14e0: 0a 2b 09 09 09 69 66 20 28 61 6c 6c 6f 63 61 74  .+...if (allocat
14f0: 65 64 4d 61 70 46 6c 61 67 29 20 7b 0a 2b 09 09  edMapFlag) {.+..
1500: 09 20 20 20 20 54 63 6c 5f 44 65 63 72 52 65 66  .    Tcl_DecrRef
1510: 43 6f 75 6e 74 28 6d 61 70 4f 62 6a 29 3b 0a 2b  Count(mapObj);.+
1520: 09 09 09 7d 0a 2b 09 09 09 72 65 74 75 72 6e 20  ...}.+...return 
1530: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 09 20 20  TCL_ERROR;.+..  
1540: 20 20 7d 0a 2b 09 09 20 20 20 20 70 61 72 61 6d    }.+..    param
1550: 4f 62 6a 20 3d 20 28 6c 65 6e 20 3e 20 30 20 3f  Obj = (len > 0 ?
1560: 20 6f 62 6a 76 5b 31 5d 20 3a 20 4e 55 4c 4c 29   objv[1] : NULL)
1570: 3b 0a 2b 09 09 20 20 20 20 63 6f 6e 74 69 6e 75  ;.+..    continu
1580: 65 3b 0a 20 09 09 63 61 73 65 20 43 4f 4e 46 5f  e;. ..case CONF_
1590: 4d 41 50 3a 20 7b 0a 20 09 09 20 20 20 20 54 63  MAP: {. ..    Tc
15a0: 6c 5f 4f 62 6a 20 2a 70 61 74 63 68 65 64 44 69  l_Obj *patchedDi
15b0: 63 74 20 3d 20 4e 55 4c 4c 2c 20 2a 73 75 62 63  ct = NULL, *subc
15c0: 6d 64 4f 62 6a 3b 0a 20 0a 40 40 20 2d 35 32 36  mdObj;. .@@ -526
15d0: 33 2c 36 20 2b 35 33 30 36 2c 37 20 40 40 0a 20  3,6 +5306,7 @@. 
15e0: 09 09 20 20 20 20 3a 20 66 6c 61 67 73 26 7e 54  ..    : flags&~T
15f0: 43 4c 5f 45 4e 53 45 4d 42 4c 45 5f 50 52 45 46  CL_ENSEMBLE_PREF
1600: 49 58 29 3b 0a 20 09 20 20 20 20 54 63 6c 5f 53  IX);. .    Tcl_S
1610: 65 74 45 6e 73 65 6d 62 6c 65 53 75 62 63 6f 6d  etEnsembleSubcom
1620: 6d 61 6e 64 4c 69 73 74 28 69 6e 74 65 72 70 2c  mandList(interp,
1630: 20 74 6f 6b 65 6e 2c 20 73 75 62 63 6d 64 4f 62   token, subcmdOb
1640: 6a 29 3b 0a 20 09 20 20 20 20 54 63 6c 5f 53 65  j);. .    Tcl_Se
1650: 74 45 6e 73 65 6d 62 6c 65 4d 61 70 70 69 6e 67  tEnsembleMapping
1660: 44 69 63 74 28 69 6e 74 65 72 70 2c 20 74 6f 6b  Dict(interp, tok
1670: 65 6e 2c 20 6d 61 70 4f 62 6a 29 3b 0a 2b 09 20  en, mapObj);.+. 
1680: 20 20 20 54 63 6c 5f 53 65 74 45 6e 73 65 6d 62     Tcl_SetEnsemb
1690: 6c 65 50 61 72 61 6d 65 74 65 72 4c 69 73 74 28  leParameterList(
16a0: 69 6e 74 65 72 70 2c 20 74 6f 6b 65 6e 2c 20 70  interp, token, p
16b0: 61 72 61 6d 4f 62 6a 29 3b 0a 20 09 20 20 20 20  aramObj);. .    
16c0: 54 63 6c 5f 53 65 74 45 6e 73 65 6d 62 6c 65 55  Tcl_SetEnsembleU
16d0: 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 28 69 6e  nknownHandler(in
16e0: 74 65 72 70 2c 20 74 6f 6b 65 6e 2c 20 75 6e 6b  terp, token, unk
16f0: 6e 6f 77 6e 4f 62 6a 29 3b 0a 20 09 20 20 20 20  nownObj);. .    
1700: 54 63 6c 5f 53 65 74 45 6e 73 65 6d 62 6c 65 46  Tcl_SetEnsembleF
1710: 6c 61 67 73 28 69 6e 74 65 72 70 2c 20 74 6f 6b  lags(interp, tok
1720: 65 6e 2c 20 66 6c 61 67 73 29 3b 0a 20 09 20 20  en, flags);. .  
1730: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1740: 0a 40 40 20 2d 35 33 32 39 2c 36 20 2b 35 33 37  .@@ -5329,6 +537
1750: 33 2c 38 20 40 40 0a 20 20 20 20 20 65 6e 73 65  3,8 @@.     ense
1760: 6d 62 6c 65 50 74 72 2d 3e 73 75 62 63 6d 64 4c  mblePtr->subcmdL
1770: 69 73 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20  ist = NULL;.    
1780: 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 73 75   ensemblePtr->su
1790: 62 63 6f 6d 6d 61 6e 64 44 69 63 74 20 3d 20 4e  bcommandDict = N
17a0: 55 4c 4c 3b 0a 20 20 20 20 20 65 6e 73 65 6d 62  ULL;.     ensemb
17b0: 6c 65 50 74 72 2d 3e 66 6c 61 67 73 20 3d 20 66  lePtr->flags = f
17c0: 6c 61 67 73 3b 0a 2b 20 20 20 20 65 6e 73 65 6d  lags;.+    ensem
17d0: 62 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72 61 6d  blePtr->numParam
17e0: 65 74 65 72 73 20 3d 20 30 3b 0a 2b 20 20 20 20  eters = 0;.+    
17f0: 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 70 61 72  ensemblePtr->par
1800: 61 6d 65 74 65 72 4c 69 73 74 20 3d 20 4e 55 4c  ameterList = NUL
1810: 4c 3b 0a 20 20 20 20 20 65 6e 73 65 6d 62 6c 65  L;.     ensemble
1820: 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e 48 61 6e 64  Ptr->unknownHand
1830: 6c 65 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20  ler = NULL;.    
1840: 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 74 6f   ensemblePtr->to
1850: 6b 65 6e 20 3d 20 54 63 6c 5f 4e 52 43 72 65 61  ken = Tcl_NRCrea
1860: 74 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70  teCommand(interp
1870: 2c 20 6e 61 6d 65 2c 0a 20 09 20 20 20 20 4e 73  , name,. .    Ns
1880: 45 6e 73 65 6d 62 6c 65 49 6d 70 6c 65 6d 65 6e  EnsembleImplemen
1890: 74 61 74 69 6f 6e 43 6d 64 2c 20 4e 73 45 6e 73  tationCmd, NsEns
18a0: 65 6d 62 6c 65 49 6d 70 6c 65 6d 65 6e 74 61 74  embleImplementat
18b0: 69 6f 6e 43 6d 64 4e 52 2c 0a 40 40 20 2d 35 34  ionCmdNR,.@@ -54
18c0: 33 31 2c 36 20 2b 35 34 37 37 2c 38 32 20 40 40  31,6 +5477,82 @@
18d0: 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  . /*.  *--------
18e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
1920: 20 2a 0a 2b 20 2a 20 54 63 6c 5f 53 65 74 45 6e   *.+ * Tcl_SetEn
1930: 73 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 72 4c  sembleParameterL
1940: 69 73 74 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a 09 53  ist --.+ *.+ *.S
1950: 65 74 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  et the parameter
1960: 20 6c 69 73 74 20 66 6f 72 20 61 20 70 61 72 74   list for a part
1970: 69 63 75 6c 61 72 20 65 6e 73 65 6d 62 6c 65 2e  icular ensemble.
1980: 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73  .+ *.+ * Results
1990: 3a 0a 2b 20 2a 09 54 63 6c 20 72 65 73 75 6c 74  :.+ *.Tcl result
19a0: 20 63 6f 64 65 20 28 65 72 72 6f 72 20 69 66 20   code (error if 
19b0: 63 6f 6d 6d 61 6e 64 20 74 6f 6b 65 6e 20 64 6f  command token do
19c0: 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 20  es not indicate 
19d0: 61 6e 20 65 6e 73 65 6d 62 6c 65 0a 2b 20 2a 09  an ensemble.+ *.
19e0: 6f 72 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  or the parameter
19f0: 20 6c 69 73 74 20 2d 20 69 66 20 6e 6f 6e 2d 4e   list - if non-N
1a00: 55 4c 4c 20 2d 20 69 73 20 6e 6f 74 20 61 20 6c  ULL - is not a l
1a10: 69 73 74 29 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69  ist)..+ *.+ * Si
1a20: 64 65 20 65 66 66 65 63 74 73 3a 0a 2b 20 2a 09  de effects:.+ *.
1a30: 54 68 65 20 65 6e 73 65 6d 62 6c 65 20 69 73 20  The ensemble is 
1a40: 75 70 64 61 74 65 64 20 61 6e 64 20 6d 61 72 6b  updated and mark
1a50: 65 64 20 66 6f 72 20 72 65 63 6f 6d 70 69 6c 61  ed for recompila
1a60: 74 69 6f 6e 2e 0a 2b 20 2a 09 28 28 51 3a 20 49  tion..+ *.((Q: I
1a70: 73 20 74 68 65 20 6c 61 74 74 65 72 20 6e 65 63  s the latter nec
1a80: 65 73 73 61 72 79 3f 29 29 0a 2b 20 2a 0a 2b 20  essary?)).+ *.+ 
1a90: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
1aa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ad0: 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b  -------.+ */.+.+
1ae0: 69 6e 74 0a 2b 54 63 6c 5f 53 65 74 45 6e 73 65  int.+Tcl_SetEnse
1af0: 6d 62 6c 65 50 61 72 61 6d 65 74 65 72 4c 69 73  mbleParameterLis
1b00: 74 28 0a 2b 20 20 20 20 54 63 6c 5f 49 6e 74 65  t(.+    Tcl_Inte
1b10: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 2b 20 20 20  rp *interp,.+   
1b20: 20 54 63 6c 5f 43 6f 6d 6d 61 6e 64 20 74 6f 6b   Tcl_Command tok
1b30: 65 6e 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a  en,.+    Tcl_Obj
1b40: 20 2a 70 61 72 61 6d 4c 69 73 74 29 0a 2b 7b 0a   *paramList).+{.
1b50: 2b 20 20 20 20 43 6f 6d 6d 61 6e 64 20 2a 63 6d  +    Command *cm
1b60: 64 50 74 72 20 3d 20 28 43 6f 6d 6d 61 6e 64 20  dPtr = (Command 
1b70: 2a 29 20 74 6f 6b 65 6e 3b 0a 2b 20 20 20 20 45  *) token;.+    E
1b80: 6e 73 65 6d 62 6c 65 43 6f 6e 66 69 67 20 2a 65  nsembleConfig *e
1b90: 6e 73 65 6d 62 6c 65 50 74 72 3b 0a 2b 20 20 20  nsemblePtr;.+   
1ba0: 20 54 63 6c 5f 4f 62 6a 20 2a 6f 6c 64 4c 69 73   Tcl_Obj *oldLis
1bb0: 74 3b 0a 2b 20 20 20 20 69 6e 74 20 6c 65 6e 67  t;.+    int leng
1bc0: 74 68 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 63  th;.+.+    if (c
1bd0: 6d 64 50 74 72 2d 3e 6f 62 6a 50 72 6f 63 20 21  mdPtr->objProc !
1be0: 3d 20 4e 73 45 6e 73 65 6d 62 6c 65 49 6d 70 6c  = NsEnsembleImpl
1bf0: 65 6d 65 6e 74 61 74 69 6f 6e 43 6d 64 29 20 7b  ementationCmd) {
1c00: 0a 2b 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .+.Tcl_AppendRes
1c10: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 63 6f 6d  ult(interp, "com
1c20: 6d 61 6e 64 20 69 73 20 6e 6f 74 20 61 6e 20 65  mand is not an e
1c30: 6e 73 65 6d 62 6c 65 22 2c 20 4e 55 4c 4c 29 3b  nsemble", NULL);
1c40: 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  .+.return TCL_ER
1c50: 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20  ROR;.+    }.+   
1c60: 20 69 66 20 28 70 61 72 61 6d 4c 69 73 74 20 3d   if (paramList =
1c70: 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 20 20 20 20 20  = NULL) {.+     
1c80: 20 20 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0a 2b     length = 0;.+
1c90: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 69      } else {.+.i
1ca0: 66 20 28 54 63 6c 4c 69 73 74 4f 62 6a 4c 65 6e  f (TclListObjLen
1cb0: 67 74 68 28 69 6e 74 65 72 70 2c 20 70 61 72 61  gth(interp, para
1cc0: 6d 4c 69 73 74 2c 20 26 6c 65 6e 67 74 68 29 20  mList, &length) 
1cd0: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 20  != TCL_OK) {.+. 
1ce0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1cf0: 52 4f 52 3b 0a 2b 09 7d 0a 2b 09 69 66 20 28 6c  ROR;.+.}.+.if (l
1d00: 65 6e 67 74 68 20 3c 20 31 29 20 7b 0a 2b 09 20  ength < 1) {.+. 
1d10: 20 20 20 70 61 72 61 6d 4c 69 73 74 20 3d 20 4e     paramList = N
1d20: 55 4c 4c 3b 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a  ULL;.+.}.+    }.
1d30: 2b 0a 2b 20 20 20 20 65 6e 73 65 6d 62 6c 65 50  +.+    ensembleP
1d40: 74 72 20 3d 20 63 6d 64 50 74 72 2d 3e 6f 62 6a  tr = cmdPtr->obj
1d50: 43 6c 69 65 6e 74 44 61 74 61 3b 0a 2b 20 20 20  ClientData;.+   
1d60: 20 6f 6c 64 4c 69 73 74 20 3d 20 65 6e 73 65 6d   oldList = ensem
1d70: 62 6c 65 50 74 72 2d 3e 70 61 72 61 6d 65 74 65  blePtr->paramete
1d80: 72 4c 69 73 74 3b 0a 2b 20 20 20 20 65 6e 73 65  rList;.+    ense
1d90: 6d 62 6c 65 50 74 72 2d 3e 70 61 72 61 6d 65 74  mblePtr->paramet
1da0: 65 72 4c 69 73 74 20 3d 20 70 61 72 61 6d 4c 69  erList = paramLi
1db0: 73 74 3b 0a 2b 20 20 20 20 69 66 20 28 70 61 72  st;.+    if (par
1dc0: 61 6d 4c 69 73 74 20 21 3d 20 4e 55 4c 4c 29 20  amList != NULL) 
1dd0: 7b 0a 2b 09 54 63 6c 5f 49 6e 63 72 52 65 66 43  {.+.Tcl_IncrRefC
1de0: 6f 75 6e 74 28 70 61 72 61 6d 4c 69 73 74 29 3b  ount(paramList);
1df0: 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 69 66 20  .+    }.+    if 
1e00: 28 6f 6c 64 4c 69 73 74 20 21 3d 20 4e 55 4c 4c  (oldList != NULL
1e10: 29 20 7b 0a 2b 09 54 63 6c 44 65 63 72 52 65 66  ) {.+.TclDecrRef
1e20: 43 6f 75 6e 74 28 6f 6c 64 4c 69 73 74 29 3b 0a  Count(oldList);.
1e30: 2b 20 20 20 20 7d 0a 2b 20 20 20 20 65 6e 73 65  +    }.+    ense
1e40: 6d 62 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72 61  mblePtr->numPara
1e50: 6d 65 74 65 72 73 20 3d 20 6c 65 6e 67 74 68 3b  meters = length;
1e60: 0a 2b 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20  .+.+    /*.+    
1e70: 20 2a 20 54 72 69 67 67 65 72 20 61 6e 20 65 76   * Trigger an ev
1e80: 65 6e 74 75 61 6c 20 72 65 63 6f 6d 70 75 74 61  entual recomputa
1e90: 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 6e 73 65  tion of the ense
1ea0: 6d 62 6c 65 20 63 6f 6d 6d 61 6e 64 20 73 65 74  mble command set
1eb0: 2e 20 4e 6f 74 65 0a 2b 20 20 20 20 20 2a 20 74  . Note.+     * t
1ec0: 68 61 74 20 74 68 69 73 20 69 73 20 73 6c 69 67  hat this is slig
1ed0: 68 74 6c 79 20 74 72 69 63 6b 79 2c 20 61 73 20  htly tricky, as 
1ee0: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 77 65  it means that we
1ef0: 20 61 72 65 20 6e 6f 74 20 61 63 74 75 61 6c 6c   are not actuall
1f00: 79 0a 2b 20 20 20 20 20 2a 20 63 6f 75 6e 74 69  y.+     * counti
1f10: 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ng the number of
1f20: 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72   namespace expor
1f30: 74 20 61 63 74 69 6f 6e 73 2c 20 62 75 74 20 69  t actions, but i
1f40: 74 20 69 73 20 74 68 65 20 73 69 6d 70 6c 65 73  t is the simples
1f50: 74 0a 2b 20 20 20 20 20 2a 20 77 61 79 20 74 6f  t.+     * way to
1f60: 20 67 6f 21 0a 2b 20 20 20 20 20 2a 2f 0a 2b 0a   go!.+     */.+.
1f70: 2b 20 20 20 20 65 6e 73 65 6d 62 6c 65 50 74 72  +    ensemblePtr
1f80: 2d 3e 6e 73 50 74 72 2d 3e 65 78 70 6f 72 74 4c  ->nsPtr->exportL
1f90: 6f 6f 6b 75 70 45 70 6f 63 68 2b 2b 3b 0a 2b 0a  ookupEpoch++;.+.
1fa0: 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20  +    /*.+     * 
1fb0: 53 70 65 63 69 61 6c 20 68 61 63 6b 20 74 6f 20  Special hack to 
1fc0: 6d 61 6b 65 20 63 6f 6d 70 69 6c 69 6e 67 20 6f  make compiling o
1fd0: 66 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 5d 20  f [info exists] 
1fe0: 77 6f 72 6b 20 77 68 65 6e 20 74 68 65 0a 2b 20  work when the.+ 
1ff0: 20 20 20 20 2a 20 64 69 63 74 69 6f 6e 61 72 79      * dictionary
2000: 20 69 73 20 6d 6f 64 69 66 69 65 64 2e 0a 2b 20   is modified..+ 
2010: 20 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 69 66      */.+.+    if
2020: 20 28 63 6d 64 50 74 72 2d 3e 63 6f 6d 70 69 6c   (cmdPtr->compil
2030: 65 50 72 6f 63 20 21 3d 20 4e 55 4c 4c 29 20 7b  eProc != NULL) {
2040: 0a 2b 09 28 28 49 6e 74 65 72 70 20 2a 29 69 6e  .+.((Interp *)in
2050: 74 65 72 70 29 2d 3e 63 6f 6d 70 69 6c 65 45 70  terp)->compileEp
2060: 6f 63 68 2b 2b 3b 0a 2b 20 20 20 20 7d 0a 2b 0a  och++;.+    }.+.
2070: 2b 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  +    return TCL_
2080: 4f 4b 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b 20  OK;.+}.+..+/*.+ 
2090: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
20a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20d0: 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 20 20 2a 20  -------.+ *.  * 
20e0: 54 63 6c 5f 53 65 74 45 6e 73 65 6d 62 6c 65 4d  Tcl_SetEnsembleM
20f0: 61 70 70 69 6e 67 44 69 63 74 20 2d 2d 0a 20 20  appingDict --.  
2100: 2a 0a 20 20 2a 09 53 65 74 20 74 68 65 20 6d 61  *.  *.Set the ma
2110: 70 70 69 6e 67 20 64 69 63 74 69 6f 6e 61 72 79  pping dictionary
2120: 20 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61   for a particula
2130: 72 20 65 6e 73 65 6d 62 6c 65 2e 0a 40 40 20 2d  r ensemble..@@ -
2140: 35 37 30 33 2c 36 20 2b 35 38 32 35 2c 34 36 20  5703,6 +5825,46 
2150: 40 40 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d  @@. /*.  *------
2160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21a0: 0a 20 20 2a 0a 2b 20 2a 20 54 63 6c 5f 47 65 74  .  *.+ * Tcl_Get
21b0: 45 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65 74 65  EnsembleParamete
21c0: 72 4c 69 73 74 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a  rList --.+ *.+ *
21d0: 09 47 65 74 20 74 68 65 20 6c 69 73 74 20 6f 66  .Get the list of
21e0: 20 70 61 72 61 6d 65 74 65 72 73 20 61 73 73 6f   parameters asso
21f0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
2200: 72 74 69 63 75 6c 61 72 20 65 6e 73 65 6d 62 6c  rticular ensembl
2210: 65 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c  e..+ *.+ * Resul
2220: 74 73 3a 0a 2b 20 2a 09 54 63 6c 20 72 65 73 75  ts:.+ *.Tcl resu
2230: 6c 74 20 63 6f 64 65 20 28 65 72 72 6f 72 20 69  lt code (error i
2240: 66 20 63 6f 6d 6d 61 6e 64 20 74 6f 6b 65 6e 20  f command token 
2250: 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74  does not indicat
2260: 65 20 61 6e 0a 2b 20 2a 09 65 6e 73 65 6d 62 6c  e an.+ *.ensembl
2270: 65 29 2e 20 54 68 65 20 6c 69 73 74 20 6f 66 20  e). The list of 
2280: 70 61 72 61 6d 65 74 65 72 73 20 69 73 20 72 65  parameters is re
2290: 74 75 72 6e 65 64 20 62 79 20 75 70 64 61 74 69  turned by updati
22a0: 6e 67 20 74 68 65 0a 2b 20 2a 09 76 61 72 69 61  ng the.+ *.varia
22b0: 62 6c 65 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  ble pointed to b
22c0: 79 20 74 68 65 20 6c 61 73 74 20 70 61 72 61 6d  y the last param
22d0: 65 74 65 72 20 28 4e 55 4c 4c 20 69 66 20 74 68  eter (NULL if th
22e0: 65 72 65 20 61 72 65 20 0a 2b 20 2a 09 6e 6f 20  ere are .+ *.no 
22f0: 70 61 72 61 6d 65 74 65 72 73 29 2e 0a 2b 20 2a  parameters)..+ *
2300: 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  .+ * Side effect
2310: 73 3a 0a 2b 20 2a 09 4e 6f 6e 65 0a 2b 20 2a 0a  s:.+ *.None.+ *.
2320: 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  + *-------------
2330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b  ---------.+ */.+
2370: 0a 2b 69 6e 74 0a 2b 54 63 6c 5f 47 65 74 45 6e  .+int.+Tcl_GetEn
2380: 73 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 72 4c  sembleParameterL
2390: 69 73 74 28 0a 2b 20 20 20 20 54 63 6c 5f 49 6e  ist(.+    Tcl_In
23a0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 2b 20  terp *interp,.+ 
23b0: 20 20 20 54 63 6c 5f 43 6f 6d 6d 61 6e 64 20 74     Tcl_Command t
23c0: 6f 6b 65 6e 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f  oken,.+    Tcl_O
23d0: 62 6a 20 2a 2a 70 61 72 61 6d 4c 69 73 74 50 74  bj **paramListPt
23e0: 72 29 0a 2b 7b 0a 2b 20 20 20 20 43 6f 6d 6d 61  r).+{.+    Comma
23f0: 6e 64 20 2a 63 6d 64 50 74 72 20 3d 20 28 43 6f  nd *cmdPtr = (Co
2400: 6d 6d 61 6e 64 20 2a 29 20 74 6f 6b 65 6e 3b 0a  mmand *) token;.
2410: 2b 20 20 20 20 45 6e 73 65 6d 62 6c 65 43 6f 6e  +    EnsembleCon
2420: 66 69 67 20 2a 65 6e 73 65 6d 62 6c 65 50 74 72  fig *ensemblePtr
2430: 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 63 6d 64  ;.+.+    if (cmd
2440: 50 74 72 2d 3e 6f 62 6a 50 72 6f 63 20 21 3d 20  Ptr->objProc != 
2450: 4e 73 45 6e 73 65 6d 62 6c 65 49 6d 70 6c 65 6d  NsEnsembleImplem
2460: 65 6e 74 61 74 69 6f 6e 43 6d 64 29 20 7b 0a 2b  entationCmd) {.+
2470: 09 69 66 20 28 69 6e 74 65 72 70 20 21 3d 20 4e  .if (interp != N
2480: 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 54 63 6c  ULL) {.+.    Tcl
2490: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
24a0: 74 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64 20 69  terp, "command i
24b0: 73 20 6e 6f 74 20 61 6e 20 65 6e 73 65 6d 62 6c  s not an ensembl
24c0: 65 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 7d 0a 2b  e", NULL);.+.}.+
24d0: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f  .return TCL_ERRO
24e0: 52 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20  R;.+    }.+.+   
24f0: 20 65 6e 73 65 6d 62 6c 65 50 74 72 20 3d 20 63   ensemblePtr = c
2500: 6d 64 50 74 72 2d 3e 6f 62 6a 43 6c 69 65 6e 74  mdPtr->objClient
2510: 44 61 74 61 3b 0a 2b 20 20 20 20 2a 70 61 72 61  Data;.+    *para
2520: 6d 4c 69 73 74 50 74 72 20 3d 20 65 6e 73 65 6d  mListPtr = ensem
2530: 62 6c 65 50 74 72 2d 3e 70 61 72 61 6d 65 74 65  blePtr->paramete
2540: 72 4c 69 73 74 3b 0a 2b 20 20 20 20 72 65 74 75  rList;.+    retu
2550: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 7d 0a 2b 0c  rn TCL_OK;.+}.+.
2560: 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  .+/*.+ *--------
2570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
25a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b  --------------.+
25b0: 20 2a 0a 20 20 2a 20 54 63 6c 5f 47 65 74 45 6e   *.  * Tcl_GetEn
25c0: 73 65 6d 62 6c 65 4d 61 70 70 69 6e 67 44 69 63  sembleMappingDic
25d0: 74 20 2d 2d 0a 20 20 2a 0a 20 20 2a 09 47 65 74  t --.  *.  *.Get
25e0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6d 61 70   the command map
25f0: 70 69 6e 67 20 64 69 63 74 69 6f 6e 61 72 79 20  ping dictionary 
2600: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2610: 61 20 70 61 72 74 69 63 75 6c 61 72 0a 40 40 20  a particular.@@ 
2620: 2d 36 30 37 32 2c 31 32 20 2b 36 32 33 34 2c 33  -6072,12 +6234,3
2630: 39 20 40 40 0a 20 09 09 09 09 20 2a 20 6e 61 6d  9 @@. .... * nam
2640: 65 73 2e 20 2a 2f 0a 20 20 20 20 20 69 6e 74 20  es. */.     int 
2650: 72 65 70 61 72 73 65 43 6f 75 6e 74 20 3d 20 30  reparseCount = 0
2660: 3b 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72  ;./* Number of r
2670: 65 70 61 72 73 65 73 2e 20 2a 2f 0a 20 0a 2d 20  eparses. */. .- 
2680: 20 20 20 69 66 20 28 6f 62 6a 63 20 3c 20 32 29     if (objc < 2)
2690: 20 7b 0a 2d 09 54 63 6c 5f 57 72 6f 6e 67 4e 75   {.-.Tcl_WrongNu
26a0: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
26b0: 20 6f 62 6a 76 2c 20 22 73 75 62 63 6f 6d 6d 61   objv, "subcomma
26c0: 6e 64 20 3f 61 72 67 20 2e 2e 2e 3f 22 29 3b 0a  nd ?arg ...?");.
26d0: 2b 20 20 72 65 73 74 61 72 74 45 6e 73 65 6d 62  +  restartEnsemb
26e0: 6c 65 50 61 72 73 65 3a 0a 2b 20 20 20 20 2f 2a  leParse:.+    /*
26f0: 20 0a 2b 20 20 20 20 20 2a 20 4d 75 73 74 20 72   .+     * Must r
2700: 65 63 68 65 63 6b 20 6f 62 6a 63 2c 20 73 69 6e  echeck objc, sin
2710: 63 65 20 6e 75 6d 50 61 72 61 6d 65 74 65 72 73  ce numParameters
2720: 20 6d 69 67 68 74 20 68 61 76 65 20 63 68 61 6e   might have chan
2730: 67 65 64 2e 0a 2b 20 20 20 20 20 2a 20 43 66 2e  ged..+     * Cf.
2740: 20 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d   test namespace-
2750: 35 33 2e 39 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b  53.9..+     */.+
2760: 20 20 20 20 69 66 20 28 6f 62 6a 63 20 3c 20 32      if (objc < 2
2770: 20 2b 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e   + ensemblePtr->
2780: 6e 75 6d 50 61 72 61 6d 65 74 65 72 73 29 20 7b  numParameters) {
2790: 0a 2b 09 2f 2a 20 0a 2b 09 20 2a 20 57 65 20 64  .+./* .+. * We d
27a0: 6f 6e 27 74 20 68 61 76 65 20 61 20 73 75 62 63  on't have a subc
27b0: 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 2e  ommand argument.
27c0: 0a 2b 09 20 2a 20 4d 61 6b 65 20 65 72 72 6f 72  .+. * Make error
27d0: 20 6d 65 73 73 61 67 65 2e 0a 2b 09 20 2a 2f 0a   message..+. */.
27e0: 2b 20 20 20 20 20 20 20 20 54 63 6c 5f 44 53 74  +        Tcl_DSt
27f0: 72 69 6e 67 20 62 75 66 3b 09 2f 2a 20 4d 65 73  ring buf;./* Mes
2800: 73 61 67 65 20 62 65 69 6e 67 20 62 75 69 6c 74  sage being built
2810: 20 2a 2f 0a 2b 20 20 20 20 20 20 20 20 54 63 6c   */.+        Tcl
2820: 5f 4f 62 6a 20 2a 2a 65 6c 65 6d 50 74 72 73 3b  _Obj **elemPtrs;
2830: 20 20 20 20 20 2f 2a 20 50 61 72 61 6d 65 74 65       /* Paramete
2840: 72 20 6e 61 6d 65 73 20 2a 2f 0a 2b 20 20 20 20  r names */.+    
2850: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 09 09 2f 2a      int len;../*
2860: 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 72 61 6d   Number of param
2870: 65 74 65 72 73 20 74 6f 20 61 70 70 65 6e 64 20  eters to append 
2880: 2a 2f 0a 2b 20 20 20 20 20 20 20 20 0a 2b 20 20  */.+        .+  
2890: 20 20 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e        Tcl_DStrin
28a0: 67 49 6e 69 74 28 26 62 75 66 29 3b 0a 2b 20 20  gInit(&buf);.+  
28b0: 20 20 20 20 20 20 69 66 20 28 65 6e 73 65 6d 62        if (ensemb
28c0: 6c 65 50 74 72 2d 3e 70 61 72 61 6d 65 74 65 72  lePtr->parameter
28d0: 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  List == NULL) {.
28e0: 2b 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e  +            len
28f0: 20 3d 20 30 3b 0a 2b 20 20 20 20 20 20 20 20 7d   = 0;.+        }
2900: 20 65 6c 73 65 20 69 66 20 28 54 63 6c 4c 69 73   else if (TclLis
2910: 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28  tObjGetElements(
2920: 4e 55 4c 4c 2c 20 65 6e 73 65 6d 62 6c 65 50 74  NULL, ensemblePt
2930: 72 2d 3e 70 61 72 61 6d 65 74 65 72 4c 69 73 74  r->parameterList
2940: 2c 20 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20  , .+            
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2960: 20 20 20 20 20 20 26 6c 65 6e 2c 20 26 65 6c 65        &len, &ele
2970: 6d 50 74 72 73 29 20 21 3d 20 54 43 4c 5f 4f 4b  mPtrs) != TCL_OK
2980: 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 20  ) {.+           
2990: 20 2f 2a 20 54 68 69 73 20 63 61 6e 27 74 20 68   /* This can't h
29a0: 61 70 70 65 6e 2e 20 2a 2f 0a 2b 20 20 20 20 20  appen. */.+     
29b0: 20 20 20 20 20 20 20 54 63 6c 5f 50 61 6e 69 63         Tcl_Panic
29c0: 28 22 4c 69 73 74 20 6f 66 20 65 6e 73 65 6d 62  ("List of ensemb
29d0: 6c 65 20 70 61 72 61 6d 65 74 65 72 73 20 69 73  le parameters is
29e0: 20 6e 6f 74 20 61 20 6c 69 73 74 22 29 3b 0a 2b   not a list");.+
29f0: 20 20 20 20 20 20 20 20 7d 0a 2b 20 20 20 20 20          }.+     
2a00: 20 20 20 66 6f 72 20 28 3b 20 6c 65 6e 3e 30 3b     for (; len>0;
2a10: 20 6c 65 6e 2d 2d 2c 65 6c 65 6d 50 74 72 73 2b   len--,elemPtrs+
2a20: 2b 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 20 20  +) {.+          
2a30: 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 70    Tcl_DStringApp
2a40: 65 6e 64 28 26 62 75 66 2c 20 54 63 6c 5f 47 65  end(&buf, Tcl_Ge
2a50: 74 53 74 72 69 6e 67 28 2a 65 6c 65 6d 50 74 72  tString(*elemPtr
2a60: 73 29 2c 20 2d 31 29 3b 0a 2b 20 20 20 20 20 20  s), -1);.+      
2a70: 20 20 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e        Tcl_DStrin
2a80: 67 41 70 70 65 6e 64 28 26 62 75 66 2c 20 22 20  gAppend(&buf, " 
2a90: 22 2c 20 2d 31 29 3b 0a 2b 20 20 20 20 20 20 20  ", -1);.+       
2aa0: 20 7d 0a 2b 20 20 20 20 20 20 20 20 54 63 6c 5f   }.+        Tcl_
2ab0: 44 53 74 72 69 6e 67 41 70 70 65 6e 64 28 26 62  DStringAppend(&b
2ac0: 75 66 2c 20 22 73 75 62 63 6f 6d 6d 61 6e 64 20  uf, "subcommand 
2ad0: 3f 61 72 67 20 2e 2e 2e 3f 22 2c 20 2d 31 29 3b  ?arg ...?", -1);
2ae0: 0a 2b 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41  .+.Tcl_WrongNumA
2af0: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
2b00: 62 6a 76 2c 20 54 63 6c 5f 44 53 74 72 69 6e 67  bjv, Tcl_DString
2b10: 56 61 6c 75 65 28 26 62 75 66 29 29 3b 0a 2b 20  Value(&buf));.+ 
2b20: 20 20 20 20 20 20 20 54 63 6c 5f 44 53 74 72 69         Tcl_DStri
2b30: 6e 67 46 72 65 65 28 26 62 75 66 29 3b 0a 2b 20  ngFree(&buf);.+ 
2b40: 20 20 20 20 20 20 20 0a 20 09 72 65 74 75 72 6e         . .return
2b50: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
2b60: 20 7d 0a 20 0a 2d 20 20 72 65 73 74 61 72 74 45   }. .-  restartE
2b70: 6e 73 65 6d 62 6c 65 50 61 72 73 65 3a 0a 20 20  nsembleParse:.  
2b80: 20 20 20 69 66 20 28 65 6e 73 65 6d 62 6c 65 50     if (ensembleP
2b90: 74 72 2d 3e 6e 73 50 74 72 2d 3e 66 6c 61 67 73  tr->nsPtr->flags
2ba0: 20 26 20 4e 53 5f 44 59 49 4e 47 29 20 7b 0a 20   & NS_DYING) {. 
2bb0: 09 2f 2a 0a 20 09 20 2a 20 44 6f 6e 27 74 20 6b  ./*. . * Don't k
2bc0: 6e 6f 77 20 68 6f 77 20 77 65 20 67 6f 74 20 68  now how we got h
2bd0: 65 72 65 2c 20 62 75 74 20 6d 61 6b 65 20 74 68  ere, but make th
2be0: 69 6e 67 73 20 67 69 76 65 20 75 70 20 71 75 69  ings give up qui
2bf0: 63 6b 6c 79 2e 0a 40 40 20 2d 36 31 30 33 2c 38  ckly..@@ -6103,8
2c00: 20 2b 36 32 39 32 2c 39 20 40 40 0a 20 09 20 2a   +6292,9 @@. . *
2c10: 20 70 61 72 74 20 77 68 65 72 65 20 77 65 20 64   part where we d
2c20: 6f 20 74 68 65 20 69 6e 76 6f 63 61 74 69 6f 6e  o the invocation
2c30: 20 6f 66 20 74 68 65 20 73 75 62 63 6f 6d 6d 61   of the subcomma
2c40: 6e 64 2e 0a 20 09 20 2a 2f 0a 20 0a 2d 09 69 66  nd.. . */. .-.if
2c50: 20 28 6f 62 6a 76 5b 31 5d 2d 3e 74 79 70 65 50   (objv[1]->typeP
2c60: 74 72 20 3d 3d 20 26 74 63 6c 45 6e 73 65 6d 62  tr == &tclEnsemb
2c70: 6c 65 43 6d 64 54 79 70 65 29 20 7b 0a 2d 09 20  leCmdType) {.-. 
2c80: 20 20 20 45 6e 73 65 6d 62 6c 65 43 6d 64 52 65     EnsembleCmdRe
2c90: 70 20 2a 65 6e 73 65 6d 62 6c 65 43 6d 64 20 3d  p *ensembleCmd =
2ca0: 20 6f 62 6a 76 5b 31 5d 2d 3e 69 6e 74 65 72 6e   objv[1]->intern
2cb0: 61 6c 52 65 70 2e 6f 74 68 65 72 56 61 6c 75 65  alRep.otherValue
2cc0: 50 74 72 3b 0a 2b 09 69 66 20 28 6f 62 6a 76 5b  Ptr;.+.if (objv[
2cd0: 31 20 2b 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d  1 + ensemblePtr-
2ce0: 3e 6e 75 6d 50 61 72 61 6d 65 74 65 72 73 5d 2d  >numParameters]-
2cf0: 3e 74 79 70 65 50 74 72 20 3d 3d 20 26 74 63 6c  >typePtr == &tcl
2d00: 45 6e 73 65 6d 62 6c 65 43 6d 64 54 79 70 65 29  EnsembleCmdType)
2d10: 20 7b 0a 2b 09 20 20 20 20 45 6e 73 65 6d 62 6c   {.+.    Ensembl
2d20: 65 43 6d 64 52 65 70 20 2a 65 6e 73 65 6d 62 6c  eCmdRep *ensembl
2d30: 65 43 6d 64 20 3d 20 0a 2b 20 20 20 20 20 20 20  eCmd = .+       
2d40: 20 20 20 20 20 20 20 6f 62 6a 76 5b 31 20 2b 20         objv[1 + 
2d50: 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e 75 6d  ensemblePtr->num
2d60: 50 61 72 61 6d 65 74 65 72 73 5d 2d 3e 69 6e 74  Parameters]->int
2d70: 65 72 6e 61 6c 52 65 70 2e 6f 74 68 65 72 56 61  ernalRep.otherVa
2d80: 6c 75 65 50 74 72 3b 0a 20 0a 20 09 20 20 20 20  luePtr;. . .    
2d90: 69 66 20 28 65 6e 73 65 6d 62 6c 65 43 6d 64 2d  if (ensembleCmd-
2da0: 3e 6e 73 50 74 72 20 3d 3d 20 65 6e 73 65 6d 62  >nsPtr == ensemb
2db0: 6c 65 50 74 72 2d 3e 6e 73 50 74 72 20 26 26 0a  lePtr->nsPtr &&.
2dc0: 20 09 09 20 20 20 20 65 6e 73 65 6d 62 6c 65 43   ..    ensembleC
2dd0: 6d 64 2d 3e 65 70 6f 63 68 20 3d 3d 20 65 6e 73  md->epoch == ens
2de0: 65 6d 62 6c 65 50 74 72 2d 3e 65 70 6f 63 68 20  emblePtr->epoch 
2df0: 26 26 0a 40 40 20 2d 36 31 32 35 2c 37 20 2b 36  &&.@@ -6125,7 +6
2e00: 33 31 35 2c 37 20 40 40 0a 20 20 20 20 20 20 2a  315,7 @@.      *
2e10: 2f 0a 20 0a 20 20 20 20 20 68 50 74 72 20 3d 20  /. .     hPtr = 
2e20: 54 63 6c 5f 46 69 6e 64 48 61 73 68 45 6e 74 72  Tcl_FindHashEntr
2e30: 79 28 26 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e  y(&ensemblePtr->
2e40: 73 75 62 63 6f 6d 6d 61 6e 64 54 61 62 6c 65 2c  subcommandTable,
2e50: 0a 2d 09 20 20 20 20 54 63 6c 47 65 74 53 74 72  .-.    TclGetStr
2e60: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 29 3b 0a 2b  ing(objv[1]));.+
2e70: 09 20 20 20 20 54 63 6c 47 65 74 53 74 72 69 6e  .    TclGetStrin
2e80: 67 28 6f 62 6a 76 5b 31 20 2b 20 65 6e 73 65 6d  g(objv[1 + ensem
2e90: 62 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72 61 6d  blePtr->numParam
2ea0: 65 74 65 72 73 5d 29 29 3b 0a 20 20 20 20 20 69  eters]));.     i
2eb0: 66 20 28 68 50 74 72 20 21 3d 20 4e 55 4c 4c 29  f (hPtr != NULL)
2ec0: 20 7b 0a 20 09 63 68 61 72 20 2a 66 75 6c 6c 4e   {. .char *fullN
2ed0: 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 48 61 73  ame = Tcl_GetHas
2ee0: 68 4b 65 79 28 26 65 6e 73 65 6d 62 6c 65 50 74  hKey(&ensemblePt
2ef0: 72 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64 54 61 62  r->subcommandTab
2f00: 6c 65 2c 20 68 50 74 72 29 3b 0a 20 0a 40 40 20  le, hPtr);. .@@ 
2f10: 2d 36 31 33 35 2c 37 20 2b 36 33 32 35 2c 38 20  -6135,7 +6325,8 
2f20: 40 40 0a 20 09 20 2a 20 43 61 63 68 65 20 66 6f  @@. . * Cache fo
2f30: 72 20 6c 61 74 65 72 20 69 6e 20 74 68 65 20 73  r later in the s
2f40: 75 62 63 6f 6d 6d 61 6e 64 20 6f 62 6a 65 63 74  ubcommand object
2f50: 2e 0a 20 09 20 2a 2f 0a 20 0a 2d 09 4d 61 6b 65  .. . */. .-.Make
2f60: 43 61 63 68 65 64 45 6e 73 65 6d 62 6c 65 43 6f  CachedEnsembleCo
2f70: 6d 6d 61 6e 64 28 6f 62 6a 76 5b 31 5d 2c 20 65  mmand(objv[1], e
2f80: 6e 73 65 6d 62 6c 65 50 74 72 2c 20 66 75 6c 6c  nsemblePtr, full
2f90: 4e 61 6d 65 2c 20 70 72 65 66 69 78 4f 62 6a 29  Name, prefixObj)
2fa0: 3b 0a 2b 09 4d 61 6b 65 43 61 63 68 65 64 45 6e  ;.+.MakeCachedEn
2fb0: 73 65 6d 62 6c 65 43 6f 6d 6d 61 6e 64 28 6f 62  sembleCommand(ob
2fc0: 6a 76 5b 31 20 2b 20 65 6e 73 65 6d 62 6c 65 50  jv[1 + ensembleP
2fd0: 74 72 2d 3e 6e 75 6d 50 61 72 61 6d 65 74 65 72  tr->numParameter
2fe0: 73 5d 2c 20 0a 2b 20 20 20 20 20 20 20 20 20 20  s], .+          
2ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3000: 20 20 20 20 20 20 20 20 65 6e 73 65 6d 62 6c 65          ensemble
3010: 50 74 72 2c 20 66 75 6c 6c 4e 61 6d 65 2c 20 70  Ptr, fullName, p
3020: 72 65 66 69 78 4f 62 6a 29 3b 0a 20 20 20 20 20  refixObj);.     
3030: 7d 20 65 6c 73 65 20 69 66 20 28 21 28 65 6e 73  } else if (!(ens
3040: 65 6d 62 6c 65 50 74 72 2d 3e 66 6c 61 67 73 20  emblePtr->flags 
3050: 26 20 54 43 4c 5f 45 4e 53 45 4d 42 4c 45 5f 50  & TCL_ENSEMBLE_P
3060: 52 45 46 49 58 29 29 20 7b 0a 20 09 2f 2a 0a 20  REFIX)) {. ./*. 
3070: 09 20 2a 20 43 6f 75 6c 64 20 6e 6f 74 20 6d 61  . * Could not ma
3080: 70 2c 20 6e 6f 20 70 72 65 66 69 78 69 6e 67 2c  p, no prefixing,
3090: 20 67 6f 20 74 6f 20 75 6e 6b 6e 6f 77 6e 2f 65   go to unknown/e
30a0: 72 72 6f 72 20 68 61 6e 64 6c 69 6e 67 2e 0a 40  rror handling..@
30b0: 40 20 2d 36 31 35 36 2c 38 20 2b 36 33 34 37 2c  @ -6156,8 +6347,
30c0: 38 20 40 40 0a 20 09 69 6e 74 20 73 74 72 69 6e  8 @@. .int strin
30d0: 67 4c 65 6e 67 74 68 2c 20 69 3b 0a 20 09 69 6e  gLength, i;. .in
30e0: 74 20 74 61 62 6c 65 4c 65 6e 67 74 68 20 3d 20  t tableLength = 
30f0: 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 73 75 62  ensemblePtr->sub
3100: 63 6f 6d 6d 61 6e 64 54 61 62 6c 65 2e 6e 75 6d  commandTable.num
3110: 45 6e 74 72 69 65 73 3b 0a 20 0a 2d 09 73 75 62  Entries;. .-.sub
3120: 63 6d 64 4e 61 6d 65 20 3d 20 54 63 6c 47 65 74  cmdName = TclGet
3130: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b  String(objv[1]);
3140: 0a 2d 09 73 74 72 69 6e 67 4c 65 6e 67 74 68 20  .-.stringLength 
3150: 3d 20 6f 62 6a 76 5b 31 5d 2d 3e 6c 65 6e 67 74  = objv[1]->lengt
3160: 68 3b 0a 2b 09 73 75 62 63 6d 64 4e 61 6d 65 20  h;.+.subcmdName 
3170: 3d 20 54 63 6c 47 65 74 53 74 72 69 6e 67 28 6f  = TclGetString(o
3180: 62 6a 76 5b 31 20 2b 20 65 6e 73 65 6d 62 6c 65  bjv[1 + ensemble
3190: 50 74 72 2d 3e 6e 75 6d 50 61 72 61 6d 65 74 65  Ptr->numParamete
31a0: 72 73 5d 29 3b 0a 2b 09 73 74 72 69 6e 67 4c 65  rs]);.+.stringLe
31b0: 6e 67 74 68 20 3d 20 6f 62 6a 76 5b 31 20 2b 20  ngth = objv[1 + 
31c0: 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e 75 6d  ensemblePtr->num
31d0: 50 61 72 61 6d 65 74 65 72 73 5d 2d 3e 6c 65 6e  Parameters]->len
31e0: 67 74 68 3b 0a 20 09 66 6f 72 20 28 69 3d 30 20  gth;. .for (i=0 
31f0: 3b 20 69 3c 74 61 62 6c 65 4c 65 6e 67 74 68 20  ; i<tableLength 
3200: 3b 20 69 2b 2b 29 20 7b 0a 20 09 20 20 20 20 72  ; i++) {. .    r
3210: 65 67 69 73 74 65 72 20 69 6e 74 20 63 6d 70 20  egister int cmp 
3220: 3d 20 73 74 72 6e 63 6d 70 28 73 75 62 63 6d 64  = strncmp(subcmd
3230: 4e 61 6d 65 2c 0a 20 09 09 20 20 20 20 65 6e 73  Name,. ..    ens
3240: 65 6d 62 6c 65 50 74 72 2d 3e 73 75 62 63 6f 6d  emblePtr->subcom
3250: 6d 61 6e 64 41 72 72 61 79 50 74 72 5b 69 5d 2c  mandArrayPtr[i],
3260: 0a 40 40 20 2d 36 32 30 33 2c 37 20 2b 36 33 39  .@@ -6203,7 +639
3270: 34 2c 38 20 40 40 0a 20 09 20 2a 20 43 61 63 68  4,8 @@. . * Cach
3280: 65 20 66 6f 72 20 6c 61 74 65 72 20 69 6e 20 74  e for later in t
3290: 68 65 20 73 75 62 63 6f 6d 6d 61 6e 64 20 6f 62  he subcommand ob
32a0: 6a 65 63 74 2e 0a 20 09 20 2a 2f 0a 20 0a 2d 09  ject.. . */. .-.
32b0: 4d 61 6b 65 43 61 63 68 65 64 45 6e 73 65 6d 62  MakeCachedEnsemb
32c0: 6c 65 43 6f 6d 6d 61 6e 64 28 6f 62 6a 76 5b 31  leCommand(objv[1
32d0: 5d 2c 20 65 6e 73 65 6d 62 6c 65 50 74 72 2c 20  ], ensemblePtr, 
32e0: 66 75 6c 6c 4e 61 6d 65 2c 20 70 72 65 66 69 78  fullName, prefix
32f0: 4f 62 6a 29 3b 0a 2b 09 4d 61 6b 65 43 61 63 68  Obj);.+.MakeCach
3300: 65 64 45 6e 73 65 6d 62 6c 65 43 6f 6d 6d 61 6e  edEnsembleComman
3310: 64 28 6f 62 6a 76 5b 31 20 2b 20 65 6e 73 65 6d  d(objv[1 + ensem
3320: 62 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72 61 6d  blePtr->numParam
3330: 65 74 65 72 73 5d 2c 20 0a 2b 20 20 20 20 20 20  eters], .+      
3340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3350: 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 73 65              ense
3360: 6d 62 6c 65 50 74 72 2c 20 66 75 6c 6c 4e 61 6d  mblePtr, fullNam
3370: 65 2c 20 70 72 65 66 69 78 4f 62 6a 29 3b 0a 20  e, prefixObj);. 
3380: 20 20 20 20 7d 0a 20 0a 20 20 20 20 20 54 63 6c      }. .     Tcl
3390: 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 72  _IncrRefCount(pr
33a0: 65 66 69 78 4f 62 6a 29 3b 0a 40 40 20 2d 36 32  efixObj);.@@ -62
33b0: 31 35 2c 37 20 2b 36 34 30 37 2c 31 31 20 40 40  15,7 +6407,11 @@
33c0: 0a 20 20 20 20 20 20 2a 20 6e 75 6d 62 65 72 20  .      * number 
33d0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
33e0: 74 68 69 73 20 65 6e 73 65 6d 62 6c 65 20 63 6f  this ensemble co
33f0: 6d 6d 61 6e 64 29 2c 20 70 6f 70 75 6c 61 74 69  mmand), populati
3400: 6e 67 20 69 74 20 61 6e 64 20 74 68 65 6e 0a 20  ng it and then. 
3410: 20 20 20 20 20 2a 20 66 65 65 64 69 6e 67 20 69       * feeding i
3420: 74 20 62 61 63 6b 20 74 68 72 6f 75 67 68 20 74  t back through t
3430: 68 65 20 6d 61 69 6e 20 63 6f 6d 6d 61 6e 64 2d  he main command-
3440: 6c 6f 6f 6b 75 70 20 65 6e 67 69 6e 65 2e 20 49  lookup engine. I
3450: 6e 20 74 68 65 6f 72 79 2c 20 77 65 0a 20 20 20  n theory, we.   
3460: 20 20 20 2a 20 63 6f 75 6c 64 20 6c 6f 6f 6b 20     * could look 
3470: 75 70 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 69  up the command i
3480: 6e 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 20  n the namespace 
3490: 6f 75 72 73 65 6c 76 65 73 2c 20 61 73 20 77 65  ourselves, as we
34a0: 20 61 6c 72 65 61 64 79 0a 2d 20 20 20 20 20 2a   already.-     *
34b0: 20 68 61 76 65 20 74 68 65 20 6e 61 6d 65 73 70   have the namesp
34c0: 61 63 65 20 69 6e 20 77 68 69 63 68 20 69 74 20  ace in which it 
34d0: 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f  is guaranteed to
34e0: 20 65 78 69 73 74 2c 20 62 75 74 20 77 65 20 64   exist, but we d
34f0: 6f 6e 27 74 20 64 6f 0a 2b 20 20 20 20 20 2a 20  on't do.+     * 
3500: 68 61 76 65 20 74 68 65 20 6e 61 6d 65 73 70 61  have the namespa
3510: 63 65 20 69 6e 20 77 68 69 63 68 20 69 74 20 69  ce in which it i
3520: 73 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  s guaranteed to 
3530: 65 78 69 73 74 2c 20 0a 2b 20 20 20 20 20 2a 20  exist, .+     * 
3540: 0a 2b 20 20 20 20 20 2a 20 20 20 28 28 51 3a 20  .+     *   ((Q: 
3550: 54 68 61 74 27 73 20 6e 6f 74 20 74 72 75 65 20  That's not true 
3560: 69 66 20 74 68 65 20 2d 6d 61 70 20 6f 70 74 69  if the -map opti
3570: 6f 6e 20 69 73 20 75 73 65 64 2c 20 69 73 20 69  on is used, is i
3580: 74 3f 29 29 0a 2b 20 20 20 20 20 2a 20 0a 2b 20  t?)).+     * .+ 
3590: 20 20 20 20 2a 20 62 75 74 20 77 65 20 64 6f 6e      * but we don
35a0: 27 74 20 64 6f 0a 20 20 20 20 20 20 2a 20 74 68  't do.      * th
35b0: 61 74 20 28 74 68 65 20 63 61 63 68 65 69 6e 67  at (the cacheing
35c0: 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   of the command 
35d0: 6f 62 6a 65 63 74 20 75 73 65 64 20 73 68 6f 75  object used shou
35e0: 6c 64 20 68 65 6c 70 20 77 69 74 68 20 74 68 61  ld help with tha
35f0: 74 2e 29 0a 20 20 20 20 20 20 2a 2f 0a 20 0a 40  t.).      */. .@
3600: 40 20 2d 36 32 35 31 2c 37 20 2b 36 34 34 37 2c  @ -6251,7 +6447,
3610: 31 31 20 40 40 0a 20 09 20 20 20 20 6c 69 73 74  11 @@. .    list
3620: 52 65 70 50 74 72 2d 3e 65 6c 65 6d 43 6f 75 6e  RepPtr->elemCoun
3630: 74 20 3d 20 63 6f 70 79 4f 62 6a 63 3b 0a 20 09  t = copyObjc;. .
3640: 20 20 20 20 63 6f 70 79 4f 62 6a 76 20 3d 20 26      copyObjv = &
3650: 6c 69 73 74 52 65 70 50 74 72 2d 3e 65 6c 65 6d  listRepPtr->elem
3660: 65 6e 74 73 3b 0a 20 09 20 20 20 20 6d 65 6d 63  ents;. .    memc
3670: 70 79 28 63 6f 70 79 4f 62 6a 76 2c 20 70 72 65  py(copyObjv, pre
3680: 66 69 78 4f 62 6a 76 2c 20 73 69 7a 65 6f 66 28  fixObjv, sizeof(
3690: 54 63 6c 5f 4f 62 6a 20 2a 29 20 2a 20 70 72 65  Tcl_Obj *) * pre
36a0: 66 69 78 4f 62 6a 63 29 3b 0a 2d 09 20 20 20 20  fixObjc);.-.    
36b0: 6d 65 6d 63 70 79 28 63 6f 70 79 4f 62 6a 76 2b  memcpy(copyObjv+
36c0: 70 72 65 66 69 78 4f 62 6a 63 2c 20 6f 62 6a 76  prefixObjc, objv
36d0: 2b 32 2c 20 73 69 7a 65 6f 66 28 54 63 6c 5f 4f  +2, sizeof(Tcl_O
36e0: 62 6a 20 2a 29 20 2a 20 28 6f 62 6a 63 2d 32 29  bj *) * (objc-2)
36f0: 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20  );.+            
3700: 6d 65 6d 63 70 79 28 63 6f 70 79 4f 62 6a 76 2b  memcpy(copyObjv+
3710: 70 72 65 66 69 78 4f 62 6a 63 2c 20 6f 62 6a 76  prefixObjc, objv
3720: 2b 31 2c 20 0a 2b 20 20 20 20 20 20 20 20 20 20  +1, .+          
3730: 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
3740: 54 63 6c 5f 4f 62 6a 20 2a 29 20 2a 20 65 6e 73  Tcl_Obj *) * ens
3750: 65 6d 62 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72  emblePtr->numPar
3760: 61 6d 65 74 65 72 73 29 3b 0a 2b 20 20 20 20 20  ameters);.+     
3770: 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 63 6f         memcpy(co
3780: 70 79 4f 62 6a 76 2b 70 72 65 66 69 78 4f 62 6a  pyObjv+prefixObj
3790: 63 2b 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e  c+ensemblePtr->n
37a0: 75 6d 50 61 72 61 6d 65 74 65 72 73 2c 20 0a 2b  umParameters, .+
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c0: 20 20 20 6f 62 6a 76 2b 65 6e 73 65 6d 62 6c 65     objv+ensemble
37d0: 50 74 72 2d 3e 6e 75 6d 50 61 72 61 6d 65 74 65  Ptr->numParamete
37e0: 72 73 2b 32 2c 20 0a 2b 20 20 20 20 20 20 20 20  rs+2, .+        
37f0: 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
3800: 66 28 54 63 6c 5f 4f 62 6a 20 2a 29 20 2a 20 28  f(Tcl_Obj *) * (
3810: 6f 62 6a 63 20 2d 20 65 6e 73 65 6d 62 6c 65 50  objc - ensembleP
3820: 74 72 2d 3e 6e 75 6d 50 61 72 61 6d 65 74 65 72  tr->numParameter
3830: 73 20 2d 20 32 29 29 3b 0a 20 0a 20 09 20 20 20  s - 2));. . .   
3840: 20 66 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20 63   for (i=0; i < c
3850: 6f 70 79 4f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a  opyObjc; i++) {.
3860: 20 09 09 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f   ..Tcl_IncrRefCo
3870: 75 6e 74 28 63 6f 70 79 4f 62 6a 76 5b 69 5d 29  unt(copyObjv[i])
3880: 3b 0a 40 40 20 2d 36 32 36 32 2c 31 39 20 2b 36  ;.@@ -6262,19 +6
3890: 34 36 32 2c 32 32 20 40 40 0a 20 09 2f 2a 0a 20  462,22 @@. ./*. 
38a0: 09 20 2a 20 52 65 63 6f 72 64 20 77 68 61 74 20  . * Record what 
38b0: 61 72 67 75 6d 65 6e 74 73 20 74 68 65 20 73 63  arguments the sc
38c0: 72 69 70 74 20 73 65 6e 74 20 69 6e 20 73 6f 20  ript sent in so 
38d0: 74 68 61 74 20 74 68 69 6e 67 73 20 6c 69 6b 65  that things like
38e0: 0a 20 09 20 2a 20 54 63 6c 5f 57 72 6f 6e 67 4e  . . * Tcl_WrongN
38f0: 75 6d 41 72 67 73 20 63 61 6e 20 67 69 76 65 20  umArgs can give 
3900: 74 68 65 20 63 6f 72 72 65 63 74 20 65 72 72 6f  the correct erro
3910: 72 20 6d 65 73 73 61 67 65 2e 0a 2b 09 20 2a 20  r message..+. * 
3920: 50 61 72 61 6d 65 74 65 72 73 20 63 6f 75 6e 74  Parameters count
3930: 20 62 6f 74 68 20 61 73 20 69 6e 73 65 72 74 65   both as inserte
3940: 64 20 61 6e 64 20 72 65 6d 6f 76 65 64 20 61 72  d and removed ar
3950: 67 75 6d 65 6e 74 73 2e 0a 20 09 20 2a 2f 0a 20  guments.. . */. 
3960: 0a 20 09 69 66 20 28 69 50 74 72 2d 3e 65 6e 73  . .if (iPtr->ens
3970: 65 6d 62 6c 65 52 65 77 72 69 74 65 2e 73 6f 75  embleRewrite.sou
3980: 72 63 65 4f 62 6a 73 20 3d 3d 20 4e 55 4c 4c 29  rceObjs == NULL)
3990: 20 7b 0a 20 09 20 20 20 20 69 50 74 72 2d 3e 65   {. .    iPtr->e
39a0: 6e 73 65 6d 62 6c 65 52 65 77 72 69 74 65 2e 73  nsembleRewrite.s
39b0: 6f 75 72 63 65 4f 62 6a 73 20 3d 20 6f 62 6a 76  ourceObjs = objv
39c0: 3b 0a 2d 09 20 20 20 20 69 50 74 72 2d 3e 65 6e  ;.-.    iPtr->en
39d0: 73 65 6d 62 6c 65 52 65 77 72 69 74 65 2e 6e 75  sembleRewrite.nu
39e0: 6d 52 65 6d 6f 76 65 64 4f 62 6a 73 20 3d 20 32  mRemovedObjs = 2
39f0: 3b 0a 2d 09 20 20 20 20 69 50 74 72 2d 3e 65 6e  ;.-.    iPtr->en
3a00: 73 65 6d 62 6c 65 52 65 77 72 69 74 65 2e 6e 75  sembleRewrite.nu
3a10: 6d 49 6e 73 65 72 74 65 64 4f 62 6a 73 20 3d 20  mInsertedObjs = 
3a20: 70 72 65 66 69 78 4f 62 6a 63 3b 0a 2b 09 20 20  prefixObjc;.+.  
3a30: 20 20 69 50 74 72 2d 3e 65 6e 73 65 6d 62 6c 65    iPtr->ensemble
3a40: 52 65 77 72 69 74 65 2e 6e 75 6d 52 65 6d 6f 76  Rewrite.numRemov
3a50: 65 64 4f 62 6a 73 20 3d 20 32 20 2b 20 65 6e 73  edObjs = 2 + ens
3a60: 65 6d 62 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72  emblePtr->numPar
3a70: 61 6d 65 74 65 72 73 3b 0a 2b 09 20 20 20 20 69  ameters;.+.    i
3a80: 50 74 72 2d 3e 65 6e 73 65 6d 62 6c 65 52 65 77  Ptr->ensembleRew
3a90: 72 69 74 65 2e 6e 75 6d 49 6e 73 65 72 74 65 64  rite.numInserted
3aa0: 4f 62 6a 73 20 3d 20 70 72 65 66 69 78 4f 62 6a  Objs = prefixObj
3ab0: 63 20 2b 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d  c + ensemblePtr-
3ac0: 3e 6e 75 6d 50 61 72 61 6d 65 74 65 72 73 3b 0a  >numParameters;.
3ad0: 20 09 20 20 20 20 54 63 6c 4e 52 41 64 64 43 61   .    TclNRAddCa
3ae0: 6c 6c 62 61 63 6b 28 69 6e 74 65 72 70 2c 20 54  llback(interp, T
3af0: 63 6c 43 6c 65 61 72 52 6f 6f 74 45 6e 73 65 6d  clClearRootEnsem
3b00: 62 6c 65 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c  ble, NULL, NULL,
3b10: 20 4e 55 4c 4c 2c 0a 20 09 09 20 20 20 20 4e 55   NULL,. ..    NU
3b20: 4c 4c 29 3b 0a 20 09 7d 20 65 6c 73 65 20 7b 0a  LL);. .} else {.
3b30: 2d 09 20 20 20 20 72 65 67 69 73 74 65 72 20 69  -.    register i
3b40: 6e 74 20 6e 69 20 3d 20 69 50 74 72 2d 3e 65 6e  nt ni = iPtr->en
3b50: 73 65 6d 62 6c 65 52 65 77 72 69 74 65 2e 6e 75  sembleRewrite.nu
3b60: 6d 49 6e 73 65 72 74 65 64 4f 62 6a 73 3b 0a 2d  mInsertedObjs;.-
3b70: 0a 2d 09 20 20 20 20 69 66 20 28 6e 69 20 3c 20  .-.    if (ni < 
3b80: 32 29 20 7b 0a 2d 09 09 69 50 74 72 2d 3e 65 6e  2) {.-..iPtr->en
3b90: 73 65 6d 62 6c 65 52 65 77 72 69 74 65 2e 6e 75  sembleRewrite.nu
3ba0: 6d 52 65 6d 6f 76 65 64 4f 62 6a 73 20 2b 3d 20  mRemovedObjs += 
3bb0: 32 20 2d 20 6e 69 3b 0a 2b 09 20 20 20 20 72 65  2 - ni;.+.    re
3bc0: 67 69 73 74 65 72 20 69 6e 74 20 6e 69 20 3d 20  gister int ni = 
3bd0: 32 20 2b 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d  2 + ensemblePtr-
3be0: 3e 6e 75 6d 50 61 72 61 6d 65 74 65 72 73 0a 2b  >numParameters.+
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c00: 20 20 20 20 20 2d 20 20 69 50 74 72 2d 3e 65 6e       -  iPtr->en
3c10: 73 65 6d 62 6c 65 52 65 77 72 69 74 65 2e 6e 75  sembleRewrite.nu
3c20: 6d 49 6e 73 65 72 74 65 64 4f 62 6a 73 3b 0a 2b  mInsertedObjs;.+
3c30: 09 09 09 09 2f 2a 20 50 6f 73 69 74 69 6f 6e 20  ..../* Position 
3c40: 69 6e 20 6f 62 6a 76 20 6f 66 20 6e 65 77 20 66  in objv of new f
3c50: 72 6f 6e 74 20 0a 2b 09 09 09 09 20 2a 20 6f 66  ront .+.... * of
3c60: 20 69 6e 73 65 72 74 69 6f 6e 20 72 65 6c 61 74   insertion relat
3c70: 69 76 65 20 74 6f 20 6f 6c 64 20 6f 6e 65 2e 20  ive to old one. 
3c80: 2a 2f 0a 2b 09 20 20 20 20 69 66 20 28 6e 69 20  */.+.    if (ni 
3c90: 3e 20 30 29 20 7b 0a 2b 09 09 69 50 74 72 2d 3e  > 0) {.+..iPtr->
3ca0: 65 6e 73 65 6d 62 6c 65 52 65 77 72 69 74 65 2e  ensembleRewrite.
3cb0: 6e 75 6d 52 65 6d 6f 76 65 64 4f 62 6a 73 20 2b  numRemovedObjs +
3cc0: 3d 20 6e 69 3b 0a 20 09 09 69 50 74 72 2d 3e 65  = ni;. ..iPtr->e
3cd0: 6e 73 65 6d 62 6c 65 52 65 77 72 69 74 65 2e 6e  nsembleRewrite.n
3ce0: 75 6d 49 6e 73 65 72 74 65 64 4f 62 6a 73 20 2b  umInsertedObjs +
3cf0: 3d 20 70 72 65 66 69 78 4f 62 6a 63 2d 31 3b 0a  = prefixObjc-1;.
3d00: 20 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20   .    } else {. 
3d10: 09 09 69 50 74 72 2d 3e 65 6e 73 65 6d 62 6c 65  ..iPtr->ensemble
3d20: 52 65 77 72 69 74 65 2e 6e 75 6d 49 6e 73 65 72  Rewrite.numInser
3d30: 74 65 64 4f 62 6a 73 20 2b 3d 20 70 72 65 66 69  tedObjs += prefi
3d40: 78 4f 62 6a 63 2d 32 3b 0a 40 40 20 2d 36 33 31  xObjc-2;.@@ -631
3d50: 37 2c 31 38 20 2b 36 35 32 30 2c 32 30 20 40 40  7,18 +6520,20 @@
3d60: 0a 20 0a 20 20 20 20 20 54 63 6c 5f 52 65 73 65  . .     Tcl_Rese
3d70: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b  tResult(interp);
3d80: 0a 20 20 20 20 20 54 63 6c 5f 53 65 74 45 72 72  .     Tcl_SetErr
3d90: 6f 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 22  orCode(interp, "
3da0: 54 43 4c 22 2c 20 22 4c 4f 4f 4b 55 50 22 2c 20  TCL", "LOOKUP", 
3db0: 22 45 4e 53 45 4d 42 4c 45 22 2c 0a 2d 09 20 20  "ENSEMBLE",.-.  
3dc0: 20 20 54 63 6c 47 65 74 53 74 72 69 6e 67 28 6f    TclGetString(o
3dd0: 62 6a 76 5b 31 5d 29 2c 20 4e 55 4c 4c 29 3b 0a  bjv[1]), NULL);.
3de0: 2b 09 20 20 20 20 54 63 6c 47 65 74 53 74 72 69  +.    TclGetStri
3df0: 6e 67 28 6f 62 6a 76 5b 31 2b 65 6e 73 65 6d 62  ng(objv[1+ensemb
3e00: 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72 61 6d 65  lePtr->numParame
3e10: 74 65 72 73 5d 29 2c 20 4e 55 4c 4c 29 3b 0a 20  ters]), NULL);. 
3e20: 20 20 20 20 69 66 20 28 65 6e 73 65 6d 62 6c 65      if (ensemble
3e30: 50 74 72 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64 54  Ptr->subcommandT
3e40: 61 62 6c 65 2e 6e 75 6d 45 6e 74 72 69 65 73 20  able.numEntries 
3e50: 3d 3d 20 30 29 20 7b 0a 2d 09 54 63 6c 5f 41 70  == 0) {.-.Tcl_Ap
3e60: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
3e70: 70 2c 20 22 75 6e 6b 6e 6f 77 6e 20 73 75 62 63  p, "unknown subc
3e80: 6f 6d 6d 61 6e 64 20 5c 22 22 2c 54 63 6c 47 65  ommand \"",TclGe
3e90: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
3ea0: 2c 0a 2b 09 54 63 6c 5f 41 70 70 65 6e 64 52 65  ,.+.Tcl_AppendRe
3eb0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 75 6e  sult(interp, "un
3ec0: 6b 6e 6f 77 6e 20 73 75 62 63 6f 6d 6d 61 6e 64  known subcommand
3ed0: 20 5c 22 22 2c 0a 2b 20 20 20 20 20 20 20 20 20   \"",.+         
3ee0: 20 20 20 20 20 20 20 54 63 6c 47 65 74 53 74 72         TclGetStr
3ef0: 69 6e 67 28 6f 62 6a 76 5b 31 2b 65 6e 73 65 6d  ing(objv[1+ensem
3f00: 62 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72 61 6d  blePtr->numParam
3f10: 65 74 65 72 73 5d 29 2c 0a 20 09 09 22 5c 22 3a  eters]),. .."\":
3f20: 20 6e 61 6d 65 73 70 61 63 65 20 22 2c 20 65 6e   namespace ", en
3f30: 73 65 6d 62 6c 65 50 74 72 2d 3e 6e 73 50 74 72  semblePtr->nsPtr
3f40: 2d 3e 66 75 6c 6c 4e 61 6d 65 2c 0a 20 09 09 22  ->fullName,. .."
3f50: 20 64 6f 65 73 20 6e 6f 74 20 65 78 70 6f 72 74   does not export
3f60: 20 61 6e 79 20 63 6f 6d 6d 61 6e 64 73 22 2c 20   any commands", 
3f70: 4e 55 4c 4c 29 3b 0a 20 09 54 63 6c 5f 53 65 74  NULL);. .Tcl_Set
3f80: 45 72 72 6f 72 43 6f 64 65 28 69 6e 74 65 72 70  ErrorCode(interp
3f90: 2c 20 22 54 43 4c 22 2c 20 22 4c 4f 4f 4b 55 50  , "TCL", "LOOKUP
3fa0: 22 2c 20 22 53 55 42 43 4f 4d 4d 41 4e 44 22 2c  ", "SUBCOMMAND",
3fb0: 0a 2d 09 09 54 63 6c 47 65 74 53 74 72 69 6e 67  .-..TclGetString
3fc0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 4e 55 4c 4c 29  (objv[1]), NULL)
3fd0: 3b 0a 2b 09 09 54 63 6c 47 65 74 53 74 72 69 6e  ;.+..TclGetStrin
3fe0: 67 28 6f 62 6a 76 5b 31 2b 65 6e 73 65 6d 62 6c  g(objv[1+ensembl
3ff0: 65 50 74 72 2d 3e 6e 75 6d 50 61 72 61 6d 65 74  ePtr->numParamet
4000: 65 72 73 5d 29 2c 20 4e 55 4c 4c 29 3b 0a 20 09  ers]), NULL);. .
4010: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
4020: 3b 0a 20 20 20 20 20 7d 0a 20 20 20 20 20 54 63  ;.     }.     Tc
4030: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
4040: 6e 74 65 72 70 2c 20 22 75 6e 6b 6e 6f 77 6e 20  nterp, "unknown 
4050: 22 2c 0a 20 09 20 20 20 20 28 65 6e 73 65 6d 62  ",. .    (ensemb
4060: 6c 65 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 54  lePtr->flags & T
4070: 43 4c 5f 45 4e 53 45 4d 42 4c 45 5f 50 52 45 46  CL_ENSEMBLE_PREF
4080: 49 58 20 3f 20 22 6f 72 20 61 6d 62 69 67 75 6f  IX ? "or ambiguo
4090: 75 73 20 22 20 3a 20 22 22 29 2c 0a 2d 09 20 20  us " : ""),.-.  
40a0: 20 20 22 73 75 62 63 6f 6d 6d 61 6e 64 20 5c 22    "subcommand \"
40b0: 22 2c 20 54 63 6c 47 65 74 53 74 72 69 6e 67 28  ", TclGetString(
40c0: 6f 62 6a 76 5b 31 5d 29 2c 20 22 5c 22 3a 20 6d  objv[1]), "\": m
40d0: 75 73 74 20 62 65 20 22 2c 20 4e 55 4c 4c 29 3b  ust be ", NULL);
40e0: 0a 2b 09 20 20 20 20 22 73 75 62 63 6f 6d 6d 61  .+.    "subcomma
40f0: 6e 64 20 5c 22 22 2c 20 54 63 6c 47 65 74 53 74  nd \"", TclGetSt
4100: 72 69 6e 67 28 6f 62 6a 76 5b 31 2b 65 6e 73 65  ring(objv[1+ense
4110: 6d 62 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72 61  mblePtr->numPara
4120: 6d 65 74 65 72 73 5d 29 2c 20 0a 2b 20 20 20 20  meters]), .+    
4130: 20 20 20 20 20 20 20 20 22 5c 22 3a 20 6d 75 73          "\": mus
4140: 74 20 62 65 20 22 2c 20 4e 55 4c 4c 29 3b 0a 20  t be ", NULL);. 
4150: 20 20 20 20 69 66 20 28 65 6e 73 65 6d 62 6c 65      if (ensemble
4160: 50 74 72 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64 54  Ptr->subcommandT
4170: 61 62 6c 65 2e 6e 75 6d 45 6e 74 72 69 65 73 20  able.numEntries 
4180: 3d 3d 20 31 29 20 7b 0a 20 09 54 63 6c 5f 41 70  == 1) {. .Tcl_Ap
4190: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
41a0: 70 2c 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e  p, ensemblePtr->
41b0: 73 75 62 63 6f 6d 6d 61 6e 64 41 72 72 61 79 50  subcommandArrayP
41c0: 74 72 5b 30 5d 2c 20 4e 55 4c 4c 29 3b 0a 20 20  tr[0], NULL);.  
41d0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 40 40 20 2d     } else {.@@ -
41e0: 36 33 34 32 2c 37 20 2b 36 35 34 37 2c 37 20 40  6342,7 +6547,7 @
41f0: 40 0a 20 09 09 65 6e 73 65 6d 62 6c 65 50 74 72  @. ..ensemblePtr
4200: 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64 41 72 72 61  ->subcommandArra
4210: 79 50 74 72 5b 69 5d 2c 20 4e 55 4c 4c 29 3b 0a  yPtr[i], NULL);.
4220: 20 20 20 20 20 7d 0a 20 20 20 20 20 54 63 6c 5f       }.     Tcl_
4230: 53 65 74 45 72 72 6f 72 43 6f 64 65 28 69 6e 74  SetErrorCode(int
4240: 65 72 70 2c 20 22 54 43 4c 22 2c 20 22 4c 4f 4f  erp, "TCL", "LOO
4250: 4b 55 50 22 2c 20 22 53 55 42 43 4f 4d 4d 41 4e  KUP", "SUBCOMMAN
4260: 44 22 2c 0a 2d 09 20 20 20 20 54 63 6c 47 65 74  D",.-.    TclGet
4270: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
4280: 20 4e 55 4c 4c 29 3b 0a 2b 09 20 20 20 20 54 63   NULL);.+.    Tc
4290: 6c 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  lGetString(objv[
42a0: 31 2b 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e  1+ensemblePtr->n
42b0: 75 6d 50 61 72 61 6d 65 74 65 72 73 5d 29 2c 20  umParameters]), 
42c0: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 72 65 74 75  NULL);.     retu
42d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 7d  rn TCL_ERROR;. }
42e0: 0a 20 0a 40 40 20 2d 36 36 33 39 2c 36 20 2b 36  . .@@ -6639,6 +6
42f0: 38 34 34 2c 39 20 40 40 0a 20 20 20 20 20 69 66  844,9 @@.     if
4300: 20 28 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 73   (ensemblePtr->s
4310: 75 62 63 6d 64 4c 69 73 74 20 21 3d 20 4e 55 4c  ubcmdList != NUL
4320: 4c 29 20 7b 0a 20 09 54 63 6c 5f 44 65 63 72 52  L) {. .Tcl_DecrR
4330: 65 66 43 6f 75 6e 74 28 65 6e 73 65 6d 62 6c 65  efCount(ensemble
4340: 50 74 72 2d 3e 73 75 62 63 6d 64 4c 69 73 74 29  Ptr->subcmdList)
4350: 3b 0a 20 20 20 20 20 7d 0a 2b 20 20 20 20 69 66  ;.     }.+    if
4360: 20 28 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 70   (ensemblePtr->p
4370: 61 72 61 6d 65 74 65 72 4c 69 73 74 20 21 3d 20  arameterList != 
4380: 4e 55 4c 4c 29 20 7b 0a 2b 09 54 63 6c 5f 44 65  NULL) {.+.Tcl_De
4390: 63 72 52 65 66 43 6f 75 6e 74 28 65 6e 73 65 6d  crRefCount(ensem
43a0: 62 6c 65 50 74 72 2d 3e 70 61 72 61 6d 65 74 65  blePtr->paramete
43b0: 72 4c 69 73 74 29 3b 0a 2b 20 20 20 20 7d 0a 20  rList);.+    }. 
43c0: 20 20 20 20 69 66 20 28 65 6e 73 65 6d 62 6c 65      if (ensemble
43d0: 50 74 72 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64 44  Ptr->subcommandD
43e0: 69 63 74 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20  ict != NULL) {. 
43f0: 09 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e  .Tcl_DecrRefCoun
4400: 74 28 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 73  t(ensemblePtr->s
4410: 75 62 63 6f 6d 6d 61 6e 64 44 69 63 74 29 3b 0a  ubcommandDict);.
4420: 20 20 20 20 20 7d 0a 49 6e 64 65 78 3a 20 74 65       }.Index: te
4430: 73 74 73 2f 6e 61 6d 65 73 70 61 63 65 2e 74 65  sts/namespace.te
4440: 73 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  st.=============
4450: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4460: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4470: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4480: 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a  ======.RCS file:
4490: 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63   /cvsroot/tcl/tc
44a0: 6c 2f 74 65 73 74 73 2f 6e 61 6d 65 73 70 61 63  l/tests/namespac
44b0: 65 2e 74 65 73 74 2c 76 0a 72 65 74 72 69 65 76  e.test,v.retriev
44c0: 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 37  ing revision 1.7
44d0: 33 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 37 33  3.diff -u -r1.73
44e0: 20 6e 61 6d 65 73 70 61 63 65 2e 74 65 73 74 0a   namespace.test.
44f0: 2d 2d 2d 20 74 65 73 74 73 2f 6e 61 6d 65 73 70  --- tests/namesp
4500: 61 63 65 2e 74 65 73 74 09 31 39 20 4a 75 6c 20  ace.test.19 Jul 
4510: 32 30 30 38 20 32 32 3a 35 30 3a 33 38 20 2d 30  2008 22:50:38 -0
4520: 30 30 30 09 31 2e 37 33 0a 2b 2b 2b 20 74 65 73  000.1.73.+++ tes
4530: 74 73 2f 6e 61 6d 65 73 70 61 63 65 2e 74 65 73  ts/namespace.tes
4540: 74 09 32 30 20 41 75 67 20 32 30 30 38 20 31 32  t.20 Aug 2008 12
4550: 3a 30 37 3a 35 38 20 2d 30 30 30 30 0a 40 40 20  :07:58 -0000.@@ 
4560: 2d 31 37 30 30 2c 37 20 2b 31 37 30 30 2c 37 20  -1700,7 +1700,7 
4570: 40 40 0a 20 20 20 20 20 7d 0a 20 20 20 20 20 6e  @@.     }.     n
4580: 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20  amespace delete 
4590: 6e 73 0a 20 20 20 20 20 73 65 74 20 72 65 73 75  ns.     set resu
45a0: 6c 74 0a 2d 7d 20 7b 2d 6d 61 70 20 7b 7d 20 2d  lt.-} {-map {} -
45b0: 6e 61 6d 65 73 70 61 63 65 20 3a 3a 6e 73 20 2d  namespace ::ns -
45c0: 70 72 65 66 69 78 65 73 20 31 20 2d 73 75 62 63  prefixes 1 -subc
45d0: 6f 6d 6d 61 6e 64 73 20 7b 7d 20 2d 75 6e 6b 6e  ommands {} -unkn
45e0: 6f 77 6e 20 7b 7d 7d 0a 2b 7d 20 7b 2d 6d 61 70  own {}}.+} {-map
45f0: 20 7b 7d 20 2d 6e 61 6d 65 73 70 61 63 65 20 3a   {} -namespace :
4600: 3a 6e 73 20 2d 70 61 72 61 6d 65 74 65 72 73 20  :ns -parameters 
4610: 7b 7d 20 2d 70 72 65 66 69 78 65 73 20 31 20 2d  {} -prefixes 1 -
4620: 73 75 62 63 6f 6d 6d 61 6e 64 73 20 7b 7d 20 2d  subcommands {} -
4630: 75 6e 6b 6e 6f 77 6e 20 7b 7d 7d 0a 20 74 65 73  unknown {}}. tes
4640: 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 35 2e 32  t namespace-45.2
4650: 20 7b 65 6e 73 65 6d 62 6c 65 3a 20 69 6e 74 72   {ensemble: intr
4660: 6f 73 70 65 63 74 69 6f 6e 7d 20 7b 0a 20 20 20  ospection} {.   
4670: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c    namespace eval
4680: 20 6e 73 20 7b 0a 20 09 6e 61 6d 65 73 70 61 63   ns {. .namespac
4690: 65 20 65 78 70 6f 72 74 20 78 0a 40 40 20 2d 31  e export x.@@ -1
46a0: 39 31 34 2c 37 20 2b 31 39 31 34 2c 37 20 40 40  914,7 +1914,7 @@
46b0: 0a 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  .     lappend re
46c0: 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 66 6f 6f  sult [catch {foo
46d0: 20 62 61 72 7d 20 6d 73 67 5d 20 24 6d 73 67 20   bar} msg] $msg 
46e0: 5b 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d  [namespace ensem
46f0: 62 6c 65 20 63 6f 6e 66 69 67 20 66 6f 6f 5d 0a  ble config foo].
4700: 20 20 20 20 20 72 65 6e 61 6d 65 20 66 6f 6f 20       rename foo 
4710: 7b 7d 0a 20 20 20 20 20 73 65 74 20 72 65 73 75  {}.     set resu
4720: 6c 74 0a 2d 7d 20 7b 7b 4c 4f 47 20 3a 3a 66 6f  lt.-} {{LOG ::fo
4730: 6f 20 62 61 72 7d 20 31 20 7b 75 6e 6b 6e 6f 77  o bar} 1 {unknow
4740: 6e 20 73 75 62 63 6f 6d 6d 61 6e 64 20 22 62 61  n subcommand "ba
4750: 72 22 3a 20 6e 61 6d 65 73 70 61 63 65 20 3a 3a  r": namespace ::
4760: 20 64 6f 65 73 20 6e 6f 74 20 65 78 70 6f 72 74   does not export
4770: 20 61 6e 79 20 63 6f 6d 6d 61 6e 64 73 7d 20 7b   any commands} {
4780: 4c 4f 47 20 3a 3a 66 6f 6f 20 62 61 72 7d 20 62  LOG ::foo bar} b
4790: 6f 6f 20 68 6f 6f 20 30 20 7b 7b 4c 4f 47 20 3a  oo hoo 0 {{LOG :
47a0: 3a 66 6f 6f 20 62 61 72 7d 20 31 20 7b 75 6e 6b  :foo bar} 1 {unk
47b0: 6e 6f 77 6e 20 73 75 62 63 6f 6d 6d 61 6e 64 20  nown subcommand 
47c0: 22 62 61 72 22 3a 20 6e 61 6d 65 73 70 61 63 65  "bar": namespace
47d0: 20 3a 3a 20 64 6f 65 73 20 6e 6f 74 20 65 78 70   :: does not exp
47e0: 6f 72 74 20 61 6e 79 20 63 6f 6d 6d 61 6e 64 73  ort any commands
47f0: 7d 20 7b 4c 4f 47 20 3a 3a 66 6f 6f 20 62 61 72  } {LOG ::foo bar
4800: 7d 20 62 6f 6f 20 68 6f 6f 7d 20 7b 2d 6d 61 70  } boo hoo} {-map
4810: 20 7b 7d 20 2d 6e 61 6d 65 73 70 61 63 65 20 3a   {} -namespace :
4820: 3a 20 2d 70 72 65 66 69 78 65 73 20 31 20 2d 73  : -prefixes 1 -s
4830: 75 62 63 6f 6d 6d 61 6e 64 73 20 7b 7d 20 2d 75  ubcommands {} -u
4840: 6e 6b 6e 6f 77 6e 20 62 61 72 7d 7d 0a 2b 7d 20  nknown bar}}.+} 
4850: 7b 7b 4c 4f 47 20 3a 3a 66 6f 6f 20 62 61 72 7d  {{LOG ::foo bar}
4860: 20 31 20 7b 75 6e 6b 6e 6f 77 6e 20 73 75 62 63   1 {unknown subc
4870: 6f 6d 6d 61 6e 64 20 22 62 61 72 22 3a 20 6e 61  ommand "bar": na
4880: 6d 65 73 70 61 63 65 20 3a 3a 20 64 6f 65 73 20  mespace :: does 
4890: 6e 6f 74 20 65 78 70 6f 72 74 20 61 6e 79 20 63  not export any c
48a0: 6f 6d 6d 61 6e 64 73 7d 20 7b 4c 4f 47 20 3a 3a  ommands} {LOG ::
48b0: 66 6f 6f 20 62 61 72 7d 20 62 6f 6f 20 68 6f 6f  foo bar} boo hoo
48c0: 20 30 20 7b 7b 4c 4f 47 20 3a 3a 66 6f 6f 20 62   0 {{LOG ::foo b
48d0: 61 72 7d 20 31 20 7b 75 6e 6b 6e 6f 77 6e 20 73  ar} 1 {unknown s
48e0: 75 62 63 6f 6d 6d 61 6e 64 20 22 62 61 72 22 3a  ubcommand "bar":
48f0: 20 6e 61 6d 65 73 70 61 63 65 20 3a 3a 20 64 6f   namespace :: do
4900: 65 73 20 6e 6f 74 20 65 78 70 6f 72 74 20 61 6e  es not export an
4910: 79 20 63 6f 6d 6d 61 6e 64 73 7d 20 7b 4c 4f 47  y commands} {LOG
4920: 20 3a 3a 66 6f 6f 20 62 61 72 7d 20 62 6f 6f 20   ::foo bar} boo 
4930: 68 6f 6f 7d 20 7b 2d 6d 61 70 20 7b 7d 20 2d 6e  hoo} {-map {} -n
4940: 61 6d 65 73 70 61 63 65 20 3a 3a 20 2d 70 61 72  amespace :: -par
4950: 61 6d 65 74 65 72 73 20 7b 7d 20 2d 70 72 65 66  ameters {} -pref
4960: 69 78 65 73 20 31 20 2d 73 75 62 63 6f 6d 6d 61  ixes 1 -subcomma
4970: 6e 64 73 20 7b 7d 20 2d 75 6e 6b 6e 6f 77 6e 20  nds {} -unknown 
4980: 62 61 72 7d 7d 0a 20 74 65 73 74 20 6e 61 6d 65  bar}}. test name
4990: 73 70 61 63 65 2d 34 37 2e 36 20 7b 65 6e 73 65  space-47.6 {ense
49a0: 6d 62 6c 65 3a 20 75 6e 6b 6e 6f 77 6e 20 68 61  mble: unknown ha
49b0: 6e 64 6c 65 72 7d 20 7b 0a 20 20 20 20 20 6e 61  ndler} {.     na
49c0: 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65  mespace ensemble
49d0: 20 63 72 65 61 74 65 20 2d 63 6f 6d 6d 61 6e 64   create -command
49e0: 20 66 6f 6f 20 2d 75 6e 6b 6e 6f 77 6e 20 62 61   foo -unknown ba
49f0: 72 0a 20 20 20 20 20 70 72 6f 63 20 62 61 72 20  r.     proc bar 
4a00: 7b 61 72 67 73 7d 20 7b 0a 40 40 20 2d 31 39 38  {args} {.@@ -198
4a10: 31 2c 37 20 2b 31 39 38 31 2c 37 20 40 40 0a 20  1,7 +1981,7 @@. 
4a20: 20 20 20 20 62 61 72 20 7a 20 37 38 39 0a 20 20      bar z 789.  
4a30: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c     namespace del
4a40: 65 74 65 20 66 6f 6f 0a 20 20 20 20 20 73 65 74  ete foo.     set
4a50: 20 72 65 73 75 6c 74 0a 2d 7d 20 7b 7b 2d 6d 61   result.-} {{-ma
4a60: 70 20 7b 7d 20 2d 6e 61 6d 65 73 70 61 63 65 20  p {} -namespace 
4a70: 3a 3a 66 6f 6f 20 2d 70 72 65 66 69 78 65 73 20  ::foo -prefixes 
4a80: 31 20 2d 73 75 62 63 6f 6d 6d 61 6e 64 73 20 78  1 -subcommands x
4a90: 20 2d 75 6e 6b 6e 6f 77 6e 20 3a 3a 66 6f 6f 3a   -unknown ::foo:
4aa0: 3a 75 7d 20 58 58 58 20 31 32 33 20 3a 3a 66 6f  :u} XXX 123 ::fo
4ab0: 6f 3a 3a 62 61 72 20 7b 79 20 34 35 36 7d 20 59  o::bar {y 456} Y
4ac0: 59 59 20 34 35 36 20 3a 3a 66 6f 6f 3a 3a 62 61  YY 456 ::foo::ba
4ad0: 72 20 7b 7a 20 37 38 39 7d 20 5a 5a 5a 20 37 38  r {z 789} ZZZ 78
4ae0: 39 7d 0a 2b 7d 20 7b 7b 2d 6d 61 70 20 7b 7d 20  9}.+} {{-map {} 
4af0: 2d 6e 61 6d 65 73 70 61 63 65 20 3a 3a 66 6f 6f  -namespace ::foo
4b00: 20 2d 70 61 72 61 6d 65 74 65 72 73 20 7b 7d 20   -parameters {} 
4b10: 2d 70 72 65 66 69 78 65 73 20 31 20 2d 73 75 62  -prefixes 1 -sub
4b20: 63 6f 6d 6d 61 6e 64 73 20 78 20 2d 75 6e 6b 6e  commands x -unkn
4b30: 6f 77 6e 20 3a 3a 66 6f 6f 3a 3a 75 7d 20 58 58  own ::foo::u} XX
4b40: 58 20 31 32 33 20 3a 3a 66 6f 6f 3a 3a 62 61 72  X 123 ::foo::bar
4b50: 20 7b 79 20 34 35 36 7d 20 59 59 59 20 34 35 36   {y 456} YYY 456
4b60: 20 3a 3a 66 6f 6f 3a 3a 62 61 72 20 7b 7a 20 37   ::foo::bar {z 7
4b70: 38 39 7d 20 5a 5a 5a 20 37 38 39 7d 0a 20 74 65  89} ZZZ 789}. te
4b80: 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 34 38 2e  st namespace-48.
4b90: 32 20 7b 65 6e 73 65 6d 62 6c 65 73 20 61 6e 64  2 {ensembles and
4ba0: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72   namespace impor
4bb0: 74 3a 20 65 78 69 73 74 73 7d 20 7b 0a 20 20 20  t: exists} {.   
4bc0: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c    namespace eval
4bd0: 20 66 6f 6f 20 7b 0a 20 09 6e 61 6d 65 73 70 61   foo {. .namespa
4be0: 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 72 65 61  ce ensemble crea
4bf0: 74 65 20 2d 63 6f 6d 6d 61 6e 64 20 3a 3a 66 6f  te -command ::fo
4c00: 6f 3a 3a 62 61 72 0a 40 40 20 2d 32 36 33 35 2c  o::bar.@@ -2635,
4c10: 36 20 2b 32 36 33 35 2c 32 32 31 20 40 40 0a 20  6 +2635,221 @@. 
4c20: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64 65      namespace de
4c30: 6c 65 74 65 20 66 6f 6f 0a 20 7d 20 2d 72 65 73  lete foo. } -res
4c40: 75 6c 74 20 6f 6b 0a 20 0a 2b 23 20 54 49 50 20  ult ok. .+# TIP 
4c50: 33 31 34 20 2d 20 65 6e 73 65 6d 62 6c 65 73 20  314 - ensembles 
4c60: 77 69 74 68 20 70 61 72 61 6d 65 74 65 72 73 0a  with parameters.
4c70: 2b 0a 2b 74 65 73 74 20 6e 61 6d 65 73 70 61 63  +.+test namespac
4c80: 65 2d 35 33 2e 31 20 7b 65 6e 73 65 6d 62 6c 65  e-53.1 {ensemble
4c90: 73 3a 20 70 61 72 61 6d 65 74 65 72 73 7d 20 7b  s: parameters} {
4ca0: 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  .+    namespace 
4cb0: 65 76 61 6c 20 6e 73 20 7b 0a 2b 09 6e 61 6d 65  eval ns {.+.name
4cc0: 73 70 61 63 65 20 65 78 70 6f 72 74 20 78 0a 2b  space export x.+
4cd0: 09 70 72 6f 63 20 78 20 7b 70 61 72 61 7d 20 7b  .proc x {para} {
4ce0: 6c 69 73 74 20 31 20 24 70 61 72 61 7d 0a 2b 09  list 1 $para}.+.
4cf0: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
4d00: 6c 65 20 63 72 65 61 74 65 20 2d 70 61 72 61 6d  le create -param
4d10: 65 74 65 72 73 20 7b 70 61 72 61 31 7d 0a 2b 20  eters {para1}.+ 
4d20: 20 20 20 7d 0a 2b 20 20 20 20 6c 69 73 74 20 5b     }.+    list [
4d30: 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 20 6e 73 5d  info command ns]
4d40: 20 5b 6e 73 20 62 61 72 20 78 5d 20 5b 6e 61 6d   [ns bar x] [nam
4d50: 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e 73  espace delete ns
4d60: 5d 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 20  ] [info command 
4d70: 6e 73 5d 0a 2b 7d 20 7b 6e 73 20 7b 31 20 62 61  ns].+} {ns {1 ba
4d80: 72 7d 20 7b 7d 20 7b 7d 7d 0a 2b 0a 2b 74 65 73  r} {} {}}.+.+tes
4d90: 74 20 6e 61 6d 65 73 70 61 63 65 2d 35 33 2e 32  t namespace-53.2
4da0: 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 70 61 72   {ensembles: par
4db0: 61 6d 65 74 65 72 73 7d 20 2d 73 65 74 75 70 20  ameters} -setup 
4dc0: 7b 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65  {.+    namespace
4dd0: 20 65 76 61 6c 20 6e 73 20 7b 0a 2b 09 6e 61 6d   eval ns {.+.nam
4de0: 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 78 0a  espace export x.
4df0: 2b 09 70 72 6f 63 20 78 20 7b 70 61 72 61 7d 20  +.proc x {para} 
4e00: 7b 6c 69 73 74 20 31 20 24 70 61 72 61 7d 0a 2b  {list 1 $para}.+
4e10: 09 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d  .namespace ensem
4e20: 62 6c 65 20 63 72 65 61 74 65 0a 2b 20 20 20 20  ble create.+    
4e30: 7d 0a 2b 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20  }.+} -body {.+  
4e40: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65    namespace ense
4e50: 6d 62 6c 65 20 63 6f 6e 66 69 67 75 72 65 20 6e  mble configure n
4e60: 73 20 2d 70 61 72 61 6d 65 74 65 72 73 20 7b 70  s -parameters {p
4e70: 61 72 61 31 7d 0a 2b 20 20 20 20 72 65 6e 61 6d  ara1}.+    renam
4e80: 65 20 6e 73 20 66 6f 6f 0a 2b 20 20 20 20 6c 69  e ns foo.+    li
4e90: 73 74 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64  st [info command
4ea0: 20 66 6f 6f 5d 20 5b 66 6f 6f 20 62 61 72 20 78   foo] [foo bar x
4eb0: 5d 20 5b 6e 61 6d 65 73 70 61 63 65 20 64 65 6c  ] [namespace del
4ec0: 65 74 65 20 6e 73 5d 20 5b 69 6e 66 6f 20 63 6f  ete ns] [info co
4ed0: 6d 6d 61 6e 64 20 66 6f 6f 5d 0a 2b 7d 20 2d 72  mmand foo].+} -r
4ee0: 65 73 75 6c 74 20 7b 66 6f 6f 20 7b 31 20 62 61  esult {foo {1 ba
4ef0: 72 7d 20 7b 7d 20 7b 7d 7d 0a 2b 0a 2b 74 65 73  r} {} {}}.+.+tes
4f00: 74 20 6e 61 6d 65 73 70 61 63 65 2d 35 33 2e 33  t namespace-53.3
4f10: 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 70 61 72   {ensembles: par
4f20: 61 6d 65 74 65 72 73 7d 20 2d 73 65 74 75 70 20  ameters} -setup 
4f30: 7b 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65  {.+    namespace
4f40: 20 65 76 61 6c 20 6e 73 20 7b 0a 2b 09 6e 61 6d   eval ns {.+.nam
4f50: 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 78 2a  espace export x*
4f60: 0a 2b 09 70 72 6f 63 20 78 31 20 7b 70 61 72 61  .+.proc x1 {para
4f70: 7d 20 7b 6c 69 73 74 20 31 20 24 70 61 72 61 7d  } {list 1 $para}
4f80: 0a 2b 09 70 72 6f 63 20 78 32 20 7b 70 61 72 61  .+.proc x2 {para
4f90: 7d 20 7b 6c 69 73 74 20 32 20 24 70 61 72 61 7d  } {list 2 $para}
4fa0: 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 6e 73  .+.namespace ens
4fb0: 65 6d 62 6c 65 20 63 72 65 61 74 65 20 2d 70 61  emble create -pa
4fc0: 72 61 6d 65 74 65 72 73 20 70 61 72 61 6d 31 0a  rameters param1.
4fd0: 2b 20 20 20 20 7d 0a 2b 7d 20 2d 62 6f 64 79 20  +    }.+} -body 
4fe0: 7b 0a 2b 20 20 20 20 73 65 74 20 72 65 73 75 6c  {.+    set resul
4ff0: 74 20 5b 6c 69 73 74 20 5b 6e 73 20 78 32 20 78  t [list [ns x2 x
5000: 31 5d 20 5b 6e 73 20 78 31 20 78 32 5d 5d 0a 2b  1] [ns x1 x2]].+
5010: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
5020: 6c 74 20 5b 63 61 74 63 68 20 7b 6e 73 20 78 7d  lt [catch {ns x}
5030: 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 20 20 20 20   msg] $msg.+    
5040: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
5050: 63 61 74 63 68 20 7b 6e 73 20 78 20 78 7d 20 6d  catch {ns x x} m
5060: 73 67 5d 20 24 6d 73 67 0a 2b 20 20 20 20 72 65  sg] $msg.+    re
5070: 6e 61 6d 65 20 6e 73 20 7b 7d 0a 2b 20 20 20 20  name ns {}.+    
5080: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
5090: 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 20 6e 73 3a  info command ns:
50a0: 3a 78 31 5d 0a 2b 20 20 20 20 6e 61 6d 65 73 70  :x1].+    namesp
50b0: 61 63 65 20 64 65 6c 65 74 65 20 6e 73 0a 2b 20  ace delete ns.+ 
50c0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
50d0: 74 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 20  t [info command 
50e0: 6e 73 3a 3a 78 31 5d 0a 2b 7d 20 2d 72 65 73 75  ns::x1].+} -resu
50f0: 6c 74 5c 0a 2b 20 20 20 7b 7b 31 20 78 32 7d 20  lt\.+   {{1 x2} 
5100: 7b 32 20 78 31 7d 5c 0a 2b 20 20 20 20 31 20 7b  {2 x1}\.+    1 {
5110: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
5120: 6f 75 6c 64 20 62 65 20 22 6e 73 20 70 61 72 61  ould be "ns para
5130: 6d 31 20 73 75 62 63 6f 6d 6d 61 6e 64 20 3f 61  m1 subcommand ?a
5140: 72 67 20 2e 2e 2e 3f 22 7d 5c 0a 2b 20 20 20 20  rg ...?"}\.+    
5150: 31 20 7b 75 6e 6b 6e 6f 77 6e 20 6f 72 20 61 6d  1 {unknown or am
5160: 62 69 67 75 6f 75 73 20 73 75 62 63 6f 6d 6d 61  biguous subcomma
5170: 6e 64 20 22 78 22 3a 20 6d 75 73 74 20 62 65 20  nd "x": must be 
5180: 78 31 2c 20 6f 72 20 78 32 7d 5c 0a 2b 20 20 20  x1, or x2}\.+   
5190: 20 3a 3a 6e 73 3a 3a 78 31 20 7b 7d 7d 0a 2b 0a   ::ns::x1 {}}.+.
51a0: 2b 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d  +test namespace-
51b0: 35 33 2e 34 20 7b 65 6e 73 65 6d 62 6c 65 73 3a  53.4 {ensembles:
51c0: 20 70 61 72 61 6d 65 74 65 72 73 7d 20 2d 73 65   parameters} -se
51d0: 74 75 70 20 7b 0a 2b 20 20 20 20 6e 61 6d 65 73  tup {.+    names
51e0: 70 61 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a 2b  pace eval ns {.+
51f0: 09 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72  .namespace expor
5200: 74 20 78 2a 0a 2b 09 70 72 6f 63 20 78 31 20 7b  t x*.+.proc x1 {
5210: 61 31 20 61 32 7d 20 7b 6c 69 73 74 20 31 20 24  a1 a2} {list 1 $
5220: 61 31 20 24 61 32 7d 0a 2b 09 70 72 6f 63 20 78  a1 $a2}.+.proc x
5230: 32 20 7b 61 31 20 61 32 7d 20 7b 6c 69 73 74 20  2 {a1 a2} {list 
5240: 32 20 24 61 31 20 24 61 32 7d 0a 2b 09 70 72 6f  2 $a1 $a2}.+.pro
5250: 63 20 78 33 20 7b 61 31 20 61 32 7d 20 7b 6c 69  c x3 {a1 a2} {li
5260: 73 74 20 33 20 24 61 31 20 24 61 32 7d 0a 2b 09  st 3 $a1 $a2}.+.
5270: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
5280: 6c 65 20 63 72 65 61 74 65 0a 2b 20 20 20 20 7d  le create.+    }
5290: 0a 2b 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20  .+} -body {.+   
52a0: 20 73 65 74 20 72 65 73 75 6c 74 20 7b 7d 0a 2b   set result {}.+
52b0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
52c0: 6c 74 20 5b 6e 73 20 78 31 20 78 32 20 78 33 5d  lt [ns x1 x2 x3]
52d0: 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  .+    namespace 
52e0: 65 6e 73 65 6d 62 6c 65 20 63 6f 6e 66 69 67 75  ensemble configu
52f0: 72 65 20 6e 73 20 2d 70 61 72 61 6d 65 74 65 72  re ns -parameter
5300: 73 20 70 31 0a 2b 20 20 20 20 6c 61 70 70 65 6e  s p1.+    lappen
5310: 64 20 72 65 73 75 6c 74 20 5b 6e 73 20 78 31 20  d result [ns x1 
5320: 78 32 20 78 33 5d 0a 2b 20 20 20 20 6e 61 6d 65  x2 x3].+    name
5330: 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63  space ensemble c
5340: 6f 6e 66 69 67 75 72 65 20 6e 73 20 2d 70 61 72  onfigure ns -par
5350: 61 6d 65 74 65 72 73 20 7b 70 31 20 70 32 7d 0a  ameters {p1 p2}.
5360: 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  +    lappend res
5370: 75 6c 74 20 5b 6e 73 20 78 31 20 78 32 20 78 33  ult [ns x1 x2 x3
5380: 5d 0a 2b 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  ].+} -cleanup {.
5390: 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64  +    namespace d
53a0: 65 6c 65 74 65 20 6e 73 0a 2b 7d 20 2d 72 65 73  elete ns.+} -res
53b0: 75 6c 74 20 7b 7b 31 20 78 32 20 78 33 7d 20 7b  ult {{1 x2 x3} {
53c0: 32 20 78 31 20 78 33 7d 20 7b 33 20 78 31 20 78  2 x1 x3} {3 x1 x
53d0: 32 7d 7d 0a 2b 0a 2b 74 65 73 74 20 6e 61 6d 65  2}}.+.+test name
53e0: 73 70 61 63 65 2d 35 33 2e 35 20 7b 65 6e 73 65  space-53.5 {ense
53f0: 6d 62 6c 65 73 3a 20 70 61 72 61 6d 65 74 65 72  mbles: parameter
5400: 73 7d 20 2d 73 65 74 75 70 20 7b 0a 2b 20 20 20  s} -setup {.+   
5410: 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20   namespace eval 
5420: 6e 73 20 7b 0a 2b 09 6e 61 6d 65 73 70 61 63 65  ns {.+.namespace
5430: 20 65 78 70 6f 72 74 20 78 2a 0a 2b 09 70 72 6f   export x*.+.pro
5440: 63 20 78 31 20 7b 70 61 72 61 7d 20 7b 6c 69 73  c x1 {para} {lis
5450: 74 20 31 20 24 70 61 72 61 7d 0a 2b 09 70 72 6f  t 1 $para}.+.pro
5460: 63 20 78 32 20 7b 70 61 72 61 7d 20 7b 6c 69 73  c x2 {para} {lis
5470: 74 20 32 20 24 70 61 72 61 7d 0a 2b 09 70 72 6f  t 2 $para}.+.pro
5480: 63 20 78 33 20 7b 70 61 72 61 7d 20 7b 6c 69 73  c x3 {para} {lis
5490: 74 20 33 20 24 70 61 72 61 7d 0a 2b 09 6e 61 6d  t 3 $para}.+.nam
54a0: 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20  espace ensemble 
54b0: 63 72 65 61 74 65 0a 2b 20 20 20 20 7d 0a 2b 7d  create.+    }.+}
54c0: 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 73 65   -body {.+    se
54d0: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 5b  t result [list [
54e0: 63 61 74 63 68 20 7b 6e 73 20 78 20 78 31 7d 20  catch {ns x x1} 
54f0: 6d 73 67 5d 20 24 6d 73 67 5d 0a 2b 20 20 20 20  msg] $msg].+    
5500: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
5510: 63 61 74 63 68 20 7b 6e 73 20 78 31 20 78 7d 20  catch {ns x1 x} 
5520: 6d 73 67 5d 20 24 6d 73 67 0a 2b 20 20 20 20 6e  msg] $msg.+    n
5530: 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c  amespace ensembl
5540: 65 20 63 6f 6e 66 69 67 75 72 65 20 6e 73 20 2d  e configure ns -
5550: 70 61 72 61 6d 65 74 65 72 73 20 70 31 0a 2b 20  parameters p1.+ 
5560: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
5570: 74 20 5b 63 61 74 63 68 20 7b 6e 73 20 78 31 20  t [catch {ns x1 
5580: 78 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 20 20  x} msg] $msg.+  
5590: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
55a0: 20 5b 63 61 74 63 68 20 7b 6e 73 20 78 20 78 31   [catch {ns x x1
55b0: 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 7d 20 2d  } msg] $msg.+} -
55c0: 63 6c 65 61 6e 75 70 20 7b 0a 2b 20 20 20 20 6e  cleanup {.+    n
55d0: 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20  amespace delete 
55e0: 6e 73 0a 2b 7d 20 2d 72 65 73 75 6c 74 5c 0a 2b  ns.+} -result\.+
55f0: 20 20 20 7b 31 20 7b 75 6e 6b 6e 6f 77 6e 20 6f     {1 {unknown o
5600: 72 20 61 6d 62 69 67 75 6f 75 73 20 73 75 62 63  r ambiguous subc
5610: 6f 6d 6d 61 6e 64 20 22 78 22 3a 20 6d 75 73 74  ommand "x": must
5620: 20 62 65 20 78 31 2c 20 78 32 2c 20 6f 72 20 78   be x1, x2, or x
5630: 33 7d 5c 0a 2b 20 20 20 20 30 20 7b 31 20 78 7d  3}\.+    0 {1 x}
5640: 5c 0a 2b 20 20 20 20 31 20 7b 75 6e 6b 6e 6f 77  \.+    1 {unknow
5650: 6e 20 6f 72 20 61 6d 62 69 67 75 6f 75 73 20 73  n or ambiguous s
5660: 75 62 63 6f 6d 6d 61 6e 64 20 22 78 22 3a 20 6d  ubcommand "x": m
5670: 75 73 74 20 62 65 20 78 31 2c 20 78 32 2c 20 6f  ust be x1, x2, o
5680: 72 20 78 33 7d 5c 0a 2b 20 20 20 20 30 20 7b 31  r x3}\.+    0 {1
5690: 20 78 7d 7d 0a 2b 0a 2b 74 65 73 74 20 6e 61 6d   x}}.+.+test nam
56a0: 65 73 70 61 63 65 2d 35 33 2e 36 20 7b 65 6e 73  espace-53.6 {ens
56b0: 65 6d 62 6c 65 73 3a 20 6e 65 73 74 65 64 7d 20  embles: nested} 
56c0: 2d 73 65 74 75 70 20 7b 0a 2b 20 20 20 20 6e 61  -setup {.+    na
56d0: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e 73 20  mespace eval ns 
56e0: 7b 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 78  {.+.namespace ex
56f0: 70 6f 72 74 20 78 2a 0a 2b 09 6e 61 6d 65 73 70  port x*.+.namesp
5700: 61 63 65 20 65 76 61 6c 20 78 30 20 7b 0a 2b 09  ace eval x0 {.+.
5710: 20 20 20 20 70 72 6f 63 20 7a 20 7b 61 72 67 73      proc z {args
5720: 7d 20 7b 6c 69 73 74 20 30 20 24 61 72 67 73 7d  } {list 0 $args}
5730: 0a 2b 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65  .+.    namespace
5740: 20 65 78 70 6f 72 74 20 7a 0a 2b 09 20 20 20 20   export z.+.    
5750: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
5760: 6c 65 20 63 72 65 61 74 65 0a 2b 09 7d 0a 2b 09  le create.+.}.+.
5770: 70 72 6f 63 20 78 31 20 7b 61 72 67 73 7d 20 7b  proc x1 {args} {
5780: 6c 69 73 74 20 31 20 24 61 72 67 73 7d 0a 2b 09  list 1 $args}.+.
5790: 70 72 6f 63 20 78 32 20 7b 61 72 67 73 7d 20 7b  proc x2 {args} {
57a0: 6c 69 73 74 20 32 20 24 61 72 67 73 7d 0a 2b 09  list 2 $args}.+.
57b0: 70 72 6f 63 20 78 33 20 7b 61 72 67 73 7d 20 7b  proc x3 {args} {
57c0: 6c 69 73 74 20 33 20 24 61 72 67 73 7d 0a 2b 09  list 3 $args}.+.
57d0: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
57e0: 6c 65 20 63 72 65 61 74 65 20 2d 70 61 72 61 6d  le create -param
57f0: 65 74 65 72 73 20 70 0a 2b 20 20 20 20 7d 0a 2b  eters p.+    }.+
5800: 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 6c  } -body {.+    l
5810: 69 73 74 20 5b 6e 73 20 7a 20 78 30 5d 20 5b 6e  ist [ns z x0] [n
5820: 73 20 7a 20 78 31 5d 20 5b 6e 73 20 7a 20 78 32  s z x1] [ns z x2
5830: 5d 20 5b 6e 73 20 7a 20 78 33 5d 0a 2b 7d 20 2d  ] [ns z x3].+} -
5840: 63 6c 65 61 6e 75 70 20 7b 0a 2b 20 20 20 20 6e  cleanup {.+    n
5850: 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20  amespace delete 
5860: 6e 73 0a 2b 7d 20 2d 72 65 73 75 6c 74 20 7b 7b  ns.+} -result {{
5870: 30 20 7b 7d 7d 20 7b 31 20 7a 7d 20 7b 32 20 7a  0 {}} {1 z} {2 z
5880: 7d 20 7b 33 20 7a 7d 7d 0a 2b 0a 2b 74 65 73 74  } {3 z}}.+.+test
5890: 20 6e 61 6d 65 73 70 61 63 65 2d 35 33 2e 37 20   namespace-53.7 
58a0: 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 70 61 72 61  {ensembles: para
58b0: 6d 65 74 65 72 73 20 26 20 77 72 6f 6e 67 20 23  meters & wrong #
58c0: 20 61 72 67 73 7d 20 2d 73 65 74 75 70 20 7b 0a   args} -setup {.
58d0: 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65  +    namespace e
58e0: 76 61 6c 20 6e 73 20 7b 0a 2b 09 6e 61 6d 65 73  val ns {.+.names
58f0: 70 61 63 65 20 65 78 70 6f 72 74 20 78 2a 0a 2b  pace export x*.+
5900: 09 70 72 6f 63 20 78 31 20 7b 61 31 20 61 32 20  .proc x1 {a1 a2 
5910: 61 33 20 61 34 7d 20 7b 6c 69 73 74 20 78 31 20  a3 a4} {list x1 
5920: 24 61 31 20 24 61 32 20 24 61 33 20 24 61 34 7d  $a1 $a2 $a3 $a4}
5930: 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 6e 73  .+.namespace ens
5940: 65 6d 62 6c 65 20 63 72 65 61 74 65 20 2d 70 61  emble create -pa
5950: 72 61 6d 65 74 65 72 73 20 70 31 0a 2b 20 20 20  rameters p1.+   
5960: 20 7d 0a 2b 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20   }.+} -body {.+ 
5970: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 7b 7d     set result {}
5980: 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  .+    lappend re
5990: 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e 73 7d  sult [catch {ns}
59a0: 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 20 20 20 20   msg] $msg.+    
59b0: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
59c0: 63 61 74 63 68 20 7b 6e 73 20 78 31 7d 20 6d 73  catch {ns x1} ms
59d0: 67 5d 20 24 6d 73 67 0a 2b 20 20 20 20 6c 61 70  g] $msg.+    lap
59e0: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74  pend result [cat
59f0: 63 68 20 7b 6e 73 20 78 31 20 78 31 7d 20 6d 73  ch {ns x1 x1} ms
5a00: 67 5d 20 24 6d 73 67 0a 2b 20 20 20 20 6c 61 70  g] $msg.+    lap
5a10: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74  pend result [cat
5a20: 63 68 20 7b 6e 73 20 78 31 20 78 31 20 78 31 7d  ch {ns x1 x1 x1}
5a30: 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 20 20 20 20   msg] $msg.+    
5a40: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
5a50: 63 61 74 63 68 20 7b 6e 73 20 78 31 20 78 31 20  catch {ns x1 x1 
5a60: 78 31 20 78 31 7d 20 6d 73 67 5d 20 24 6d 73 67  x1 x1} msg] $msg
5a70: 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  .+    lappend re
5a80: 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e 73 20  sult [catch {ns 
5a90: 78 31 20 78 31 20 78 31 20 78 31 20 78 31 7d 20  x1 x1 x1 x1 x1} 
5aa0: 6d 73 67 5d 20 24 6d 73 67 0a 2b 7d 20 2d 63 6c  msg] $msg.+} -cl
5ab0: 65 61 6e 75 70 20 7b 0a 2b 20 20 20 20 6e 61 6d  eanup {.+    nam
5ac0: 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e 73  espace delete ns
5ad0: 0a 2b 7d 20 2d 72 65 73 75 6c 74 5c 0a 2b 20 20  .+} -result\.+  
5ae0: 20 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67   {1 {wrong # arg
5af0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 6e 73  s: should be "ns
5b00: 20 70 31 20 73 75 62 63 6f 6d 6d 61 6e 64 20 3f   p1 subcommand ?
5b10: 61 72 67 20 2e 2e 2e 3f 22 7d 5c 0a 2b 20 20 20  arg ...?"}\.+   
5b20: 20 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73   1 {wrong # args
5b30: 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 6e 73 20  : should be "ns 
5b40: 70 31 20 73 75 62 63 6f 6d 6d 61 6e 64 20 3f 61  p1 subcommand ?a
5b50: 72 67 20 2e 2e 2e 3f 22 7d 5c 0a 2b 20 20 20 20  rg ...?"}\.+    
5b60: 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  1 {wrong # args:
5b70: 20 73 68 6f 75 6c 64 20 62 65 20 22 6e 73 20 78   should be "ns x
5b80: 31 20 78 31 20 61 32 20 61 33 20 61 34 22 7d 5c  1 x1 a2 a3 a4"}\
5b90: 0a 2b 20 20 20 20 31 20 7b 77 72 6f 6e 67 20 23  .+    1 {wrong #
5ba0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
5bb0: 20 22 6e 73 20 78 31 20 78 31 20 61 32 20 61 33   "ns x1 x1 a2 a3
5bc0: 20 61 34 22 7d 5c 0a 2b 20 20 20 20 31 20 7b 77   a4"}\.+    1 {w
5bd0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
5be0: 75 6c 64 20 62 65 20 22 6e 73 20 78 31 20 78 31  uld be "ns x1 x1
5bf0: 20 61 32 20 61 33 20 61 34 22 7d 5c 0a 2b 20 20   a2 a3 a4"}\.+  
5c00: 20 20 30 20 7b 78 31 20 78 31 20 78 31 20 78 31    0 {x1 x1 x1 x1
5c10: 20 78 31 7d 7d 0a 2b 0a 2b 74 65 73 74 20 6e 61   x1}}.+.+test na
5c20: 6d 65 73 70 61 63 65 2d 35 33 2e 38 20 7b 65 6e  mespace-53.8 {en
5c30: 73 65 6d 62 6c 65 3a 20 75 6e 6b 6e 6f 77 6e 20  semble: unknown 
5c40: 68 61 6e 64 6c 65 72 20 63 68 61 6e 67 69 6e 67  handler changing
5c50: 20 2d 70 61 72 61 6d 65 74 65 72 73 7d 20 2d 73   -parameters} -s
5c60: 65 74 75 70 20 7b 0a 2b 20 20 20 20 6e 61 6d 65  etup {.+    name
5c70: 73 70 61 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a  space eval ns {.
5c80: 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f  +.namespace expo
5c90: 72 74 20 78 2a 0a 2b 09 70 72 6f 63 20 78 31 20  rt x*.+.proc x1 
5ca0: 7b 61 31 7d 20 7b 6c 69 73 74 20 31 20 24 61 31  {a1} {list 1 $a1
5cb0: 7d 0a 2b 09 70 72 6f 63 20 4d 61 67 69 63 20 7b  }.+.proc Magic {
5cc0: 65 6e 73 65 6d 62 6c 65 20 73 75 62 63 6d 64 20  ensemble subcmd 
5cd0: 61 72 67 73 7d 20 7b 0a 2b 09 20 20 20 20 6e 61  args} {.+.    na
5ce0: 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65  mespace ensemble
5cf0: 20 63 6f 6e 66 69 67 75 72 65 20 24 65 6e 73 65   configure $ense
5d00: 6d 62 6c 65 5c 0a 2b 20 20 20 20 20 20 20 20 20  mble\.+         
5d10: 20 20 20 20 20 2d 70 61 72 61 6d 65 74 65 72 73       -parameters
5d20: 20 5b 6c 72 61 6e 67 65 20 70 31 20 5b 6c 6c 65   [lrange p1 [lle
5d30: 6e 67 74 68 20 5b 0a 2b 20 20 20 20 20 20 20 20  ngth [.+        
5d40: 20 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63          namespac
5d50: 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6e 66 69  e ensemble confi
5d60: 67 75 72 65 20 24 65 6e 73 65 6d 62 6c 65 20 2d  gure $ensemble -
5d70: 70 61 72 61 6d 65 74 65 72 73 0a 2b 20 20 20 20  parameters.+    
5d80: 20 20 20 20 20 20 20 20 20 20 5d 5d 20 30 5d 0a            ]] 0].
5d90: 2b 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 73  +            lis
5da0: 74 0a 2b 09 7d 0a 2b 09 6e 61 6d 65 73 70 61 63  t.+.}.+.namespac
5db0: 65 20 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74  e ensemble creat
5dc0: 65 20 2d 75 6e 6b 6e 6f 77 6e 20 3a 3a 6e 73 3a  e -unknown ::ns:
5dd0: 3a 4d 61 67 69 63 0a 2b 20 20 20 20 7d 0a 2b 7d  :Magic.+    }.+}
5de0: 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 73 65   -body {.+    se
5df0: 74 20 72 65 73 75 6c 74 20 7b 7d 0a 2b 20 20 20  t result {}.+   
5e00: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
5e10: 5b 63 61 74 63 68 20 7b 6e 73 20 78 31 20 78 32  [catch {ns x1 x2
5e20: 7d 20 6d 73 67 5d 20 24 6d 73 67 20 5b 6e 61 6d  } msg] $msg [nam
5e30: 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20  espace ensemble 
5e40: 63 6f 6e 66 69 67 75 72 65 20 6e 73 20 2d 70 61  configure ns -pa
5e50: 72 61 6d 65 74 65 72 73 5d 0a 2b 20 20 20 20 6c  rameters].+    l
5e60: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63  append result [c
5e70: 61 74 63 68 20 7b 6e 73 20 78 32 20 78 31 7d 20  atch {ns x2 x1} 
5e80: 6d 73 67 5d 20 24 6d 73 67 20 5b 6e 61 6d 65 73  msg] $msg [names
5e90: 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f  pace ensemble co
5ea0: 6e 66 69 67 75 72 65 20 6e 73 20 2d 70 61 72 61  nfigure ns -para
5eb0: 6d 65 74 65 72 73 5d 0a 2b 20 20 20 20 6c 61 70  meters].+    lap
5ec0: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74  pend result [cat
5ed0: 63 68 20 7b 6e 73 20 78 32 20 78 33 7d 20 6d 73  ch {ns x2 x3} ms
5ee0: 67 5d 20 24 6d 73 67 20 5b 6e 61 6d 65 73 70 61  g] $msg [namespa
5ef0: 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6e 66  ce ensemble conf
5f00: 69 67 75 72 65 20 6e 73 20 2d 70 61 72 61 6d 65  igure ns -parame
5f10: 74 65 72 73 5d 0a 2b 7d 20 2d 63 6c 65 61 6e 75  ters].+} -cleanu
5f20: 70 20 7b 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61  p {.+    namespa
5f30: 63 65 20 64 65 6c 65 74 65 20 6e 73 0a 2b 7d 20  ce delete ns.+} 
5f40: 2d 72 65 73 75 6c 74 5c 0a 2b 20 20 20 7b 30 20  -result\.+   {0 
5f50: 7b 31 20 78 32 7d 20 7b 7d 5c 0a 2b 20 20 20 20  {1 x2} {}\.+    
5f60: 30 20 7b 31 20 78 32 7d 20 70 31 5c 0a 2b 20 20  0 {1 x2} p1\.+  
5f70: 20 20 31 20 7b 75 6e 6b 6e 6f 77 6e 20 6f 72 20    1 {unknown or 
5f80: 61 6d 62 69 67 75 6f 75 73 20 73 75 62 63 6f 6d  ambiguous subcom
5f90: 6d 61 6e 64 20 22 78 32 22 3a 20 6d 75 73 74 20  mand "x2": must 
5fa0: 62 65 20 78 31 7d 20 7b 7d 7d 0a 2b 0a 2b 74 65  be x1} {}}.+.+te
5fb0: 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 35 33 2e  st namespace-53.
5fc0: 39 20 7b 65 6e 73 65 6d 62 6c 65 3a 20 75 6e 6b  9 {ensemble: unk
5fd0: 6e 6f 77 6e 20 68 61 6e 64 6c 65 72 20 63 68 61  nown handler cha
5fe0: 6e 67 69 6e 67 20 2d 70 61 72 61 6d 65 74 65 72  nging -parameter
5ff0: 73 2c 5c 0a 2b 20 20 74 68 65 72 65 62 79 20 65  s,\.+  thereby e
6000: 61 74 69 6e 67 20 61 6c 6c 20 61 72 67 73 7d 20  ating all args} 
6010: 2d 73 65 74 75 70 20 7b 0a 2b 20 20 20 20 6e 61  -setup {.+    na
6020: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e 73 20  mespace eval ns 
6030: 7b 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20 65 78  {.+.namespace ex
6040: 70 6f 72 74 20 78 2a 0a 2b 09 70 72 6f 63 20 78  port x*.+.proc x
6050: 31 20 7b 61 72 67 73 7d 20 7b 6c 69 73 74 20 31  1 {args} {list 1
6060: 20 24 61 72 67 73 7d 0a 2b 09 70 72 6f 63 20 4d   $args}.+.proc M
6070: 61 67 69 63 20 7b 65 6e 73 65 6d 62 6c 65 20 73  agic {ensemble s
6080: 75 62 63 6d 64 20 61 72 67 73 7d 20 7b 0a 2b 09  ubcmd args} {.+.
6090: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 6e      namespace en
60a0: 73 65 6d 62 6c 65 20 63 6f 6e 66 69 67 75 72 65  semble configure
60b0: 20 24 65 6e 73 65 6d 62 6c 65 5c 0a 2b 20 20 20   $ensemble\.+   
60c0: 20 20 20 20 20 20 20 20 20 20 20 2d 70 61 72 61             -para
60d0: 6d 65 74 65 72 73 20 7b 70 31 20 70 32 20 70 33  meters {p1 p2 p3
60e0: 20 70 34 20 70 35 7d 0a 2b 20 20 20 20 20 20 20   p4 p5}.+       
60f0: 20 20 20 20 20 6c 69 73 74 0a 2b 09 7d 0a 2b 09       list.+.}.+.
6100: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
6110: 6c 65 20 63 72 65 61 74 65 20 2d 75 6e 6b 6e 6f  le create -unkno
6120: 77 6e 20 3a 3a 6e 73 3a 3a 4d 61 67 69 63 0a 2b  wn ::ns::Magic.+
6130: 20 20 20 20 7d 0a 2b 7d 20 2d 62 6f 64 79 20 7b      }.+} -body {
6140: 0a 2b 20 20 20 20 73 65 74 20 72 65 73 75 6c 74  .+    set result
6150: 20 7b 7d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64   {}.+    lappend
6160: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b   result [catch {
6170: 6e 73 20 78 31 20 78 32 7d 20 6d 73 67 5d 20 24  ns x1 x2} msg] $
6180: 6d 73 67 20 5b 6e 61 6d 65 73 70 61 63 65 20 65  msg [namespace e
6190: 6e 73 65 6d 62 6c 65 20 63 6f 6e 66 69 67 75 72  nsemble configur
61a0: 65 20 6e 73 20 2d 70 61 72 61 6d 65 74 65 72 73  e ns -parameters
61b0: 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72  ].+    lappend r
61c0: 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e 73  esult [catch {ns
61d0: 20 78 32 20 78 31 7d 20 6d 73 67 5d 20 24 6d 73   x2 x1} msg] $ms
61e0: 67 20 5b 6e 61 6d 65 73 70 61 63 65 20 65 6e 73  g [namespace ens
61f0: 65 6d 62 6c 65 20 63 6f 6e 66 69 67 75 72 65 20  emble configure 
6200: 6e 73 20 2d 70 61 72 61 6d 65 74 65 72 73 5d 0a  ns -parameters].
6210: 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  +    lappend res
6220: 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e 73 20 61  ult [catch {ns a
6230: 31 20 61 32 20 61 33 20 61 34 20 61 35 20 78 31  1 a2 a3 a4 a5 x1
6240: 7d 20 6d 73 67 5d 20 24 6d 73 67 20 5b 6e 61 6d  } msg] $msg [nam
6250: 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20  espace ensemble 
6260: 63 6f 6e 66 69 67 75 72 65 20 6e 73 20 2d 70 61  configure ns -pa
6270: 72 61 6d 65 74 65 72 73 5d 0a 2b 7d 20 2d 63 6c  rameters].+} -cl
6280: 65 61 6e 75 70 20 7b 0a 2b 20 20 20 20 6e 61 6d  eanup {.+    nam
6290: 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e 73  espace delete ns
62a0: 0a 2b 7d 20 2d 72 65 73 75 6c 74 5c 0a 2b 20 20  .+} -result\.+  
62b0: 20 7b 30 20 7b 31 20 78 32 7d 20 7b 7d 5c 0a 2b   {0 {1 x2} {}\.+
62c0: 20 20 20 20 31 20 7b 77 72 6f 6e 67 20 23 20 61      1 {wrong # a
62d0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22  rgs: should be "
62e0: 6e 73 20 70 31 20 70 32 20 70 33 20 70 34 20 70  ns p1 p2 p3 p4 p
62f0: 35 20 73 75 62 63 6f 6d 6d 61 6e 64 20 3f 61 72  5 subcommand ?ar
6300: 67 20 2e 2e 2e 3f 22 7d 20 7b 70 31 20 70 32 20  g ...?"} {p1 p2 
6310: 70 33 20 70 34 20 70 35 7d 5c 0a 2b 20 20 20 20  p3 p4 p5}\.+    
6320: 30 20 7b 31 20 7b 61 31 20 61 32 20 61 33 20 61  0 {1 {a1 a2 a3 a
6330: 34 20 61 35 7d 7d 20 7b 70 31 20 70 32 20 70 33  4 a5}} {p1 p2 p3
6340: 20 70 34 20 70 35 7d 7d 0a 2b 0a 2b 74 65 73 74   p4 p5}}.+.+test
6350: 20 6e 61 6d 65 73 70 61 63 65 2d 35 33 2e 31 30   namespace-53.10
6360: 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 6e 65 73   {ensembles: nes
6370: 74 65 64 20 72 65 77 72 69 74 65 7d 20 2d 73 65  ted rewrite} -se
6380: 74 75 70 20 7b 0a 2b 20 20 20 20 6e 61 6d 65 73  tup {.+    names
6390: 70 61 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a 2b  pace eval ns {.+
63a0: 09 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72  .namespace expor
63b0: 74 20 78 0a 2b 09 6e 61 6d 65 73 70 61 63 65 20  t x.+.namespace 
63c0: 65 76 61 6c 20 78 20 7b 0a 2b 09 20 20 20 20 70  eval x {.+.    p
63d0: 72 6f 63 20 7a 30 20 7b 7d 20 7b 6c 69 73 74 20  roc z0 {} {list 
63e0: 30 7d 0a 2b 09 20 20 20 20 70 72 6f 63 20 7a 31  0}.+.    proc z1
63f0: 20 7b 61 31 7d 20 7b 6c 69 73 74 20 31 20 24 61   {a1} {list 1 $a
6400: 31 7d 0a 2b 09 20 20 20 20 70 72 6f 63 20 7a 32  1}.+.    proc z2
6410: 20 7b 61 31 20 61 32 7d 20 7b 6c 69 73 74 20 32   {a1 a2} {list 2
6420: 20 24 61 31 20 24 61 32 7d 0a 2b 09 20 20 20 20   $a1 $a2}.+.    
6430: 70 72 6f 63 20 7a 33 20 7b 61 31 20 61 32 20 61  proc z3 {a1 a2 a
6440: 33 7d 20 7b 6c 69 73 74 20 33 20 24 61 31 20 24  3} {list 3 $a1 $
6450: 61 32 20 24 61 33 7d 0a 2b 09 20 20 20 20 6e 61  a2 $a3}.+.    na
6460: 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 7a  mespace export z
6470: 2a 0a 2b 09 20 20 20 20 6e 61 6d 65 73 70 61 63  *.+.    namespac
6480: 65 20 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74  e ensemble creat
6490: 65 0a 2b 09 7d 0a 2b 09 6e 61 6d 65 73 70 61 63  e.+.}.+.namespac
64a0: 65 20 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74  e ensemble creat
64b0: 65 20 2d 70 61 72 61 6d 65 74 65 72 73 20 70 0a  e -parameters p.
64c0: 2b 20 20 20 20 7d 0a 2b 7d 20 2d 62 6f 64 79 20  +    }.+} -body 
64d0: 7b 0a 2b 20 20 20 20 73 65 74 20 72 65 73 75 6c  {.+    set resul
64e0: 74 20 7b 7d 0a 2b 20 20 20 20 23 20 49 6e 20 74  t {}.+    # In t
64f0: 68 65 73 65 20 63 61 73 65 73 2c 20 70 61 72 73  hese cases, pars
6500: 69 6e 67 20 74 68 65 20 73 75 62 65 6e 73 65 6d  ing the subensem
6510: 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 67 72 61  ble does not gra
6520: 62 20 61 20 6e 65 77 20 77 6f 72 64 2e 0a 2b 20  b a new word..+ 
6530: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
6540: 74 20 5b 63 61 74 63 68 20 7b 6e 73 20 7a 30 20  t [catch {ns z0 
6550: 78 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 20 20  x} msg] $msg.+  
6560: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
6570: 20 5b 63 61 74 63 68 20 7b 6e 73 20 7a 31 20 78   [catch {ns z1 x
6580: 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 20 20 20  } msg] $msg.+   
6590: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
65a0: 5b 63 61 74 63 68 20 7b 6e 73 20 7a 32 20 78 7d  [catch {ns z2 x}
65b0: 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 20 20 20 20   msg] $msg.+    
65c0: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
65d0: 63 61 74 63 68 20 7b 6e 73 20 7a 32 20 78 20 76  catch {ns z2 x v
65e0: 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 20 20 20  } msg] $msg.+   
65f0: 20 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d   namespace ensem
6600: 62 6c 65 20 63 6f 6e 66 69 67 75 72 65 20 6e 73  ble configure ns
6610: 3a 3a 78 20 2d 70 61 72 61 6d 65 74 65 72 73 20  ::x -parameters 
6620: 71 31 0a 2b 20 20 20 20 23 20 49 6e 20 74 68 65  q1.+    # In the
6630: 73 65 20 63 61 73 65 73 2c 20 70 61 72 73 69 6e  se cases, parsin
6640: 67 20 74 68 65 20 73 75 62 65 6e 73 65 6d 62 6c  g the subensembl
6650: 65 20 67 72 61 62 73 20 61 20 6e 65 77 20 77 6f  e grabs a new wo
6660: 72 64 2e 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64  rd..+    lappend
6670: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b   result [catch {
6680: 6e 73 20 76 20 78 20 7a 30 7d 20 6d 73 67 5d 20  ns v x z0} msg] 
6690: 24 6d 73 67 0a 2b 20 20 20 20 6c 61 70 70 65 6e  $msg.+    lappen
66a0: 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  d result [catch 
66b0: 7b 6e 73 20 76 20 78 20 7a 31 7d 20 6d 73 67 5d  {ns v x z1} msg]
66c0: 20 24 6d 73 67 0a 2b 20 20 20 20 6c 61 70 70 65   $msg.+    lappe
66d0: 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68  nd result [catch
66e0: 20 7b 6e 73 20 76 20 78 20 7a 32 7d 20 6d 73 67   {ns v x z2} msg
66f0: 5d 20 24 6d 73 67 0a 2b 20 20 20 20 6c 61 70 70  ] $msg.+    lapp
6700: 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63  end result [catc
6710: 68 20 7b 6e 73 20 76 20 78 20 7a 32 20 76 32 7d  h {ns v x z2 v2}
6720: 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 7d 20 2d 63   msg] $msg.+} -c
6730: 6c 65 61 6e 75 70 20 7b 0a 2b 20 20 20 20 6e 61  leanup {.+    na
6740: 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e  mespace delete n
6750: 73 0a 2b 7d 20 2d 72 65 73 75 6c 74 5c 0a 2b 20  s.+} -result\.+ 
6760: 20 20 7b 30 20 30 5c 0a 2b 20 20 20 20 31 20 7b    {0 0\.+    1 {
6770: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
6780: 6f 75 6c 64 20 62 65 20 22 6e 73 20 7a 31 20 78  ould be "ns z1 x
6790: 20 61 31 22 7d 5c 0a 2b 20 20 20 20 31 20 7b 77   a1"}\.+    1 {w
67a0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
67b0: 75 6c 64 20 62 65 20 22 6e 73 20 7a 32 20 78 20  uld be "ns z2 x 
67c0: 61 31 20 61 32 22 7d 5c 0a 2b 20 20 20 20 31 20  a1 a2"}\.+    1 
67d0: 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  {wrong # args: s
67e0: 68 6f 75 6c 64 20 62 65 20 22 6e 73 20 7a 32 20  hould be "ns z2 
67f0: 78 20 61 31 20 61 32 22 7d 5c 0a 2b 20 20 20 20  x a1 a2"}\.+    
6800: 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  1 {wrong # args:
6810: 20 73 68 6f 75 6c 64 20 62 65 20 22 3a 3a 6e 73   should be "::ns
6820: 3a 3a 78 3a 3a 7a 30 22 7d 5c 0a 2b 20 20 20 20  ::x::z0"}\.+    
6830: 30 20 7b 31 20 76 7d 5c 0a 2b 20 20 20 20 31 20  0 {1 v}\.+    1 
6840: 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  {wrong # args: s
6850: 68 6f 75 6c 64 20 62 65 20 22 6e 73 20 76 20 78  hould be "ns v x
6860: 20 7a 32 20 61 32 22 7d 5c 0a 2b 20 20 20 20 30   z2 a2"}\.+    0
6870: 20 7b 32 20 76 20 76 32 7d 7d 0a 2b 0a 20 23 20   {2 v v2}}.+. # 
6880: 63 6c 65 61 6e 75 70 0a 20 63 61 74 63 68 20 7b  cleanup. catch {
6890: 72 65 6e 61 6d 65 20 63 6d 64 31 20 7b 7d 7d 0a  rename cmd1 {}}.
68a0: 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 6c 7d   catch {unset l}
68b0: 0a                                               .