Tcl Source Code

Hex Artifact Content
Login

Artifact d7a3811d762080acdbfba00c49b74e9c3efaac31:

Attachment "ensemble-parameters.patch" to ticket [1901783fff] added by lars_h 2008-02-26 07:34:19.
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 32 39 0a 64 69 66 66 20 2d 63 20 2d 72  1.129.diff -c -r
00b0: 31 2e 31 32 39 20 74 63 6c 2e 64 65 63 6c 73 0a  1.129 tcl.decls.
00c0: 2a 2a 2a 20 67 65 6e 65 72 69 63 2f 74 63 6c 2e  *** generic/tcl.
00d0: 64 65 63 6c 73 09 31 33 20 44 65 63 20 32 30 30  decls.13 Dec 200
00e0: 37 20 31 35 3a 32 33 3a 31 34 20 2d 30 30 30 30  7 15:23:14 -0000
00f0: 09 31 2e 31 32 39 0a 2d 2d 2d 20 67 65 6e 65 72  .1.129.--- gener
0100: 69 63 2f 74 63 6c 2e 64 65 63 6c 73 09 32 35 20  ic/tcl.decls.25 
0110: 46 65 62 20 32 30 30 38 20 32 33 3a 30 36 3a 34  Feb 2008 23:06:4
0120: 38 20 2d 30 30 30 30 0a 2a 2a 2a 2a 2a 2a 2a 2a  8 -0000.********
0130: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 32 30 39 39  *******.*** 2099
0140: 2c 32 31 30 34 20 2a 2a 2a 2a 0a 2d 2d 2d 20 32  ,2104 ****.--- 2
0150: 30 39 39 2c 32 31 31 35 20 2d 2d 2d 2d 0a 20 20  099,2115 ----.  
0160: 20 20 20 20 76 6f 69 64 20 54 63 6c 5f 41 70 70      void Tcl_App
0170: 65 6e 64 50 72 69 6e 74 66 54 6f 4f 62 6a 28 54  endPrintfToObj(T
0180: 63 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 2c 20  cl_Obj *objPtr, 
0190: 43 4f 4e 53 54 20 63 68 61 72 20 2a 66 6f 72 6d  CONST char *form
01a0: 61 74 2c 20 2e 2e 2e 29 0a 20 20 7d 0a 20 20 0a  at, ...).  }.  .
01b0: 2b 20 23 20 54 49 50 20 78 78 78 20 45 6e 73 65  + # TIP xxx Ense
01c0: 6d 62 6c 65 73 20 77 69 74 68 20 70 61 72 61 6d  mbles with param
01d0: 65 74 65 72 73 0a 2b 20 64 65 63 6c 61 72 65 20  eters.+ declare 
01e0: 35 38 30 20 67 65 6e 65 72 69 63 20 7b 0a 2b 20  580 generic {.+ 
01f0: 20 20 20 20 69 6e 74 20 54 63 6c 5f 53 65 74 45      int Tcl_SetE
0200: 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 72  nsembleParameter
0210: 4c 69 73 74 28 54 63 6c 5f 49 6e 74 65 72 70 20  List(Tcl_Interp 
0220: 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 43 6f 6d  *interp, Tcl_Com
0230: 6d 61 6e 64 20 74 6f 6b 65 6e 2c 0a 2b 20 09 20  mand token,.+ . 
0240: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 61 72 61     Tcl_Obj *para
0250: 6d 4c 69 73 74 29 0a 2b 20 7d 0a 2b 20 64 65 63  mList).+ }.+ dec
0260: 6c 61 72 65 20 35 38 31 20 67 65 6e 65 72 69 63  lare 581 generic
0270: 20 7b 0a 2b 20 20 20 20 20 69 6e 74 20 54 63 6c   {.+     int Tcl
0280: 5f 47 65 74 45 6e 73 65 6d 62 6c 65 50 61 72 61  _GetEnsemblePara
0290: 6d 65 74 65 72 4c 69 73 74 28 54 63 6c 5f 49 6e  meterList(Tcl_In
02a0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 54 63  terp *interp, Tc
02b0: 6c 5f 43 6f 6d 6d 61 6e 64 20 74 6f 6b 65 6e 2c  l_Command token,
02c0: 0a 2b 20 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20  .+ .    Tcl_Obj 
02d0: 2a 2a 70 61 72 61 6d 4c 69 73 74 50 74 72 29 0a  **paramListPtr).
02e0: 2b 20 7d 0a 2b 20 0a 2b 20 0a 20 20 23 23 23 23  + }.+ .+ .  ####
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0330: 23 23 23 23 23 23 23 23 23 23 0a 20 20 0a 20 20  ##########.  .  
0340: 23 20 44 65 66 69 6e 65 20 74 68 65 20 70 6c 61  # Define the pla
0350: 74 66 6f 72 6d 20 73 70 65 63 69 66 69 63 20 70  tform specific p
0360: 75 62 6c 69 63 20 54 63 6c 20 69 6e 74 65 72 66  ublic Tcl interf
0370: 61 63 65 2e 20 20 54 68 65 73 65 20 66 75 6e 63  ace.  These func
0380: 74 69 6f 6e 73 20 61 72 65 0a 49 6e 64 65 78 3a  tions are.Index:
0390: 20 67 65 6e 65 72 69 63 2f 74 63 6c 44 65 63 6c   generic/tclDecl
03a0: 73 2e 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  s.h.============
03b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
03c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
03d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
03e0: 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65  =======.RCS file
03f0: 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74  : /cvsroot/tcl/t
0400: 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c 44 65  cl/generic/tclDe
0410: 63 6c 73 2e 68 2c 76 0a 72 65 74 72 69 65 76 69  cls.h,v.retrievi
0420: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 33  ng revision 1.13
0430: 30 0a 64 69 66 66 20 2d 63 20 2d 72 31 2e 31 33  0.diff -c -r1.13
0440: 30 20 74 63 6c 44 65 63 6c 73 2e 68 0a 2a 2a 2a  0 tclDecls.h.***
0450: 20 67 65 6e 65 72 69 63 2f 74 63 6c 44 65 63 6c   generic/tclDecl
0460: 73 2e 68 09 31 33 20 44 65 63 20 32 30 30 37 20  s.h.13 Dec 2007 
0470: 31 35 3a 32 33 3a 31 36 20 2d 30 30 30 30 09 31  15:23:16 -0000.1
0480: 2e 31 33 30 0a 2d 2d 2d 20 67 65 6e 65 72 69 63  .130.--- generic
0490: 2f 74 63 6c 44 65 63 6c 73 2e 68 09 32 35 20 46  /tclDecls.h.25 F
04a0: 65 62 20 32 30 30 38 20 32 33 3a 30 36 3a 35 36  eb 2008 23:06:56
04b0: 20 2d 30 30 30 30 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a   -0000.*********
04c0: 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 33 35 30 31 2c  ******.*** 3501,
04d0: 33 35 30 36 20 2a 2a 2a 2a 0a 2d 2d 2d 20 33 35  3506 ****.--- 35
04e0: 30 31 2c 33 35 31 38 20 2d 2d 2d 2d 0a 20 20 45  01,3518 ----.  E
04f0: 58 54 45 52 4e 20 76 6f 69 64 09 09 54 63 6c 5f  XTERN void..Tcl_
0500: 41 70 70 65 6e 64 50 72 69 6e 74 66 54 6f 4f 62  AppendPrintfToOb
0510: 6a 20 28 54 63 6c 5f 4f 62 6a 20 2a 20 6f 62 6a  j (Tcl_Obj * obj
0520: 50 74 72 2c 20 0a 20 20 09 09 09 09 43 4f 4e 53  Ptr, .  ....CONS
0530: 54 20 63 68 61 72 20 2a 20 66 6f 72 6d 61 74 2c  T char * format,
0540: 20 2e 2e 2e 29 3b 0a 20 20 23 65 6e 64 69 66 0a   ...);.  #endif.
0550: 2b 20 23 69 66 6e 64 65 66 20 54 63 6c 5f 53 65  + #ifndef Tcl_Se
0560: 74 45 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65 74  tEnsembleParamet
0570: 65 72 4c 69 73 74 5f 54 43 4c 5f 44 45 43 4c 41  erList_TCL_DECLA
0580: 52 45 44 0a 2b 20 23 64 65 66 69 6e 65 20 54 63  RED.+ #define Tc
0590: 6c 5f 53 65 74 45 6e 73 65 6d 62 6c 65 50 61 72  l_SetEnsemblePar
05a0: 61 6d 65 74 65 72 4c 69 73 74 5f 54 43 4c 5f 44  ameterList_TCL_D
05b0: 45 43 4c 41 52 45 44 0a 2b 20 2f 2a 20 35 38 30  ECLARED.+ /* 580
05c0: 20 2a 2f 0a 2b 20 45 58 54 45 52 4e 20 69 6e 74   */.+ EXTERN int
05d0: 09 09 54 63 6c 5f 53 65 74 45 6e 73 65 6d 62 6c  ..Tcl_SetEnsembl
05e0: 65 50 61 72 61 6d 65 74 65 72 4c 69 73 74 20 28  eParameterList (
05f0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 20 69 6e 74  Tcl_Interp * int
0600: 65 72 70 2c 20 0a 2b 20 09 09 09 09 54 63 6c 5f  erp, .+ ....Tcl_
0610: 43 6f 6d 6d 61 6e 64 20 74 6f 6b 65 6e 2c 20 54  Command token, T
0620: 63 6c 5f 4f 62 6a 20 2a 20 70 61 72 61 6d 4c 69  cl_Obj * paramLi
0630: 73 74 29 3b 0a 2b 20 23 65 6e 64 69 66 0a 2b 20  st);.+ #endif.+ 
0640: 23 69 66 6e 64 65 66 20 54 63 6c 5f 47 65 74 45  #ifndef Tcl_GetE
0650: 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 72  nsembleParameter
0660: 4c 69 73 74 5f 54 43 4c 5f 44 45 43 4c 41 52 45  List_TCL_DECLARE
0670: 44 0a 2b 20 23 64 65 66 69 6e 65 20 54 63 6c 5f  D.+ #define Tcl_
0680: 47 65 74 45 6e 73 65 6d 62 6c 65 50 61 72 61 6d  GetEnsembleParam
0690: 65 74 65 72 4c 69 73 74 5f 54 43 4c 5f 44 45 43  eterList_TCL_DEC
06a0: 4c 41 52 45 44 0a 2b 20 2f 2a 20 35 38 31 20 2a  LARED.+ /* 581 *
06b0: 2f 0a 2b 20 45 58 54 45 52 4e 20 69 6e 74 09 09  /.+ EXTERN int..
06c0: 54 63 6c 5f 47 65 74 45 6e 73 65 6d 62 6c 65 50  Tcl_GetEnsembleP
06d0: 61 72 61 6d 65 74 65 72 4c 69 73 74 20 28 54 63  arameterList (Tc
06e0: 6c 5f 49 6e 74 65 72 70 20 2a 20 69 6e 74 65 72  l_Interp * inter
06f0: 70 2c 20 0a 2b 20 09 09 09 09 54 63 6c 5f 43 6f  p, .+ ....Tcl_Co
0700: 6d 6d 61 6e 64 20 74 6f 6b 65 6e 2c 20 54 63 6c  mmand token, Tcl
0710: 5f 4f 62 6a 20 2a 2a 20 70 61 72 61 6d 4c 69 73  _Obj ** paramLis
0720: 74 50 74 72 29 3b 0a 2b 20 23 65 6e 64 69 66 0a  tPtr);.+ #endif.
0730: 20 20 0a 20 20 74 79 70 65 64 65 66 20 73 74 72    .  typedef str
0740: 75 63 74 20 54 63 6c 53 74 75 62 48 6f 6f 6b 73  uct TclStubHooks
0750: 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20   {.      struct 
0760: 54 63 6c 50 6c 61 74 53 74 75 62 73 20 2a 74 63  TclPlatStubs *tc
0770: 6c 50 6c 61 74 53 74 75 62 73 3b 0a 2a 2a 2a 2a  lPlatStubs;.****
0780: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20  ***********.*** 
0790: 34 31 34 30 2c 34 31 34 35 20 2a 2a 2a 2a 0a 2d  4140,4145 ****.-
07a0: 2d 2d 20 34 31 35 32 2c 34 31 35 39 20 2d 2d 2d  -- 4152,4159 ---
07b0: 2d 0a 20 20 20 20 20 20 69 6e 74 20 28 2a 74 63  -.      int (*tc
07c0: 6c 5f 41 70 70 65 6e 64 46 6f 72 6d 61 74 54 6f  l_AppendFormatTo
07d0: 4f 62 6a 29 20 28 54 63 6c 5f 49 6e 74 65 72 70  Obj) (Tcl_Interp
07e0: 20 2a 20 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f   * interp, Tcl_O
07f0: 62 6a 20 2a 20 6f 62 6a 50 74 72 2c 20 43 4f 4e  bj * objPtr, CON
0800: 53 54 20 63 68 61 72 20 2a 20 66 6f 72 6d 61 74  ST char * format
0810: 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f  , int objc, Tcl_
0820: 4f 62 6a 20 2a 20 43 4f 4e 53 54 20 6f 62 6a 76  Obj * CONST objv
0830: 5b 5d 29 3b 20 2f 2a 20 35 37 37 20 2a 2f 0a 20  []); /* 577 */. 
0840: 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 20 28       Tcl_Obj * (
0850: 2a 74 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 29 20  *tcl_ObjPrintf) 
0860: 28 43 4f 4e 53 54 20 63 68 61 72 20 2a 20 66 6f  (CONST char * fo
0870: 72 6d 61 74 2c 20 2e 2e 2e 29 3b 20 2f 2a 20 35  rmat, ...); /* 5
0880: 37 38 20 2a 2f 0a 20 20 20 20 20 20 76 6f 69 64  78 */.      void
0890: 20 28 2a 74 63 6c 5f 41 70 70 65 6e 64 50 72 69   (*tcl_AppendPri
08a0: 6e 74 66 54 6f 4f 62 6a 29 20 28 54 63 6c 5f 4f  ntfToObj) (Tcl_O
08b0: 62 6a 20 2a 20 6f 62 6a 50 74 72 2c 20 43 4f 4e  bj * objPtr, CON
08c0: 53 54 20 63 68 61 72 20 2a 20 66 6f 72 6d 61 74  ST char * format
08d0: 2c 20 2e 2e 2e 29 3b 20 2f 2a 20 35 37 39 20 2a  , ...); /* 579 *
08e0: 2f 0a 2b 20 20 20 20 20 69 6e 74 20 28 2a 74 63  /.+     int (*tc
08f0: 6c 5f 53 65 74 45 6e 73 65 6d 62 6c 65 50 61 72  l_SetEnsemblePar
0900: 61 6d 65 74 65 72 4c 69 73 74 29 20 28 54 63 6c  ameterList) (Tcl
0910: 5f 49 6e 74 65 72 70 20 2a 20 69 6e 74 65 72 70  _Interp * interp
0920: 2c 20 54 63 6c 5f 43 6f 6d 6d 61 6e 64 20 74 6f  , Tcl_Command to
0930: 6b 65 6e 2c 20 54 63 6c 5f 4f 62 6a 20 2a 20 70  ken, Tcl_Obj * p
0940: 61 72 61 6d 4c 69 73 74 29 3b 20 2f 2a 20 35 38  aramList); /* 58
0950: 30 20 2a 2f 0a 2b 20 20 20 20 20 69 6e 74 20 28  0 */.+     int (
0960: 2a 74 63 6c 5f 47 65 74 45 6e 73 65 6d 62 6c 65  *tcl_GetEnsemble
0970: 50 61 72 61 6d 65 74 65 72 4c 69 73 74 29 20 28  ParameterList) (
0980: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 20 69 6e 74  Tcl_Interp * int
0990: 65 72 70 2c 20 54 63 6c 5f 43 6f 6d 6d 61 6e 64  erp, Tcl_Command
09a0: 20 74 6f 6b 65 6e 2c 20 54 63 6c 5f 4f 62 6a 20   token, Tcl_Obj 
09b0: 2a 2a 20 70 61 72 61 6d 4c 69 73 74 50 74 72 29  ** paramListPtr)
09c0: 3b 20 2f 2a 20 35 38 31 20 2a 2f 0a 20 20 7d 20  ; /* 581 */.  } 
09d0: 54 63 6c 53 74 75 62 73 3b 0a 20 20 0a 20 20 23  TclStubs;.  .  #
09e0: 69 66 64 65 66 20 5f 5f 63 70 6c 75 73 70 6c 75  ifdef __cplusplu
09f0: 73 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  s.**************
0a00: 2a 0a 2a 2a 2a 20 36 35 33 36 2c 36 35 34 31 20  *.*** 6536,6541 
0a10: 2a 2a 2a 2a 0a 2d 2d 2d 20 36 35 35 30 2c 36 35  ****.--- 6550,65
0a20: 36 33 20 2d 2d 2d 2d 0a 20 20 23 64 65 66 69 6e  63 ----.  #defin
0a30: 65 20 54 63 6c 5f 41 70 70 65 6e 64 50 72 69 6e  e Tcl_AppendPrin
0a40: 74 66 54 6f 4f 62 6a 20 5c 0a 20 20 09 28 74 63  tfToObj \.  .(tc
0a50: 6c 53 74 75 62 73 50 74 72 2d 3e 74 63 6c 5f 41  lStubsPtr->tcl_A
0a60: 70 70 65 6e 64 50 72 69 6e 74 66 54 6f 4f 62 6a  ppendPrintfToObj
0a70: 29 20 2f 2a 20 35 37 39 20 2a 2f 0a 20 20 23 65  ) /* 579 */.  #e
0a80: 6e 64 69 66 0a 2b 20 23 69 66 6e 64 65 66 20 54  ndif.+ #ifndef T
0a90: 63 6c 5f 53 65 74 45 6e 73 65 6d 62 6c 65 50 61  cl_SetEnsemblePa
0aa0: 72 61 6d 65 74 65 72 4c 69 73 74 0a 2b 20 23 64  rameterList.+ #d
0ab0: 65 66 69 6e 65 20 54 63 6c 5f 53 65 74 45 6e 73  efine Tcl_SetEns
0ac0: 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 72 4c 69  embleParameterLi
0ad0: 73 74 20 5c 0a 2b 20 09 28 74 63 6c 53 74 75 62  st \.+ .(tclStub
0ae0: 73 50 74 72 2d 3e 74 63 6c 5f 53 65 74 45 6e 73  sPtr->tcl_SetEns
0af0: 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 72 4c 69  embleParameterLi
0b00: 73 74 29 20 2f 2a 20 35 38 30 20 2a 2f 0a 2b 20  st) /* 580 */.+ 
0b10: 23 65 6e 64 69 66 0a 2b 20 23 69 66 6e 64 65 66  #endif.+ #ifndef
0b20: 20 54 63 6c 5f 47 65 74 45 6e 73 65 6d 62 6c 65   Tcl_GetEnsemble
0b30: 50 61 72 61 6d 65 74 65 72 4c 69 73 74 0a 2b 20  ParameterList.+ 
0b40: 23 64 65 66 69 6e 65 20 54 63 6c 5f 47 65 74 45  #define Tcl_GetE
0b50: 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 72  nsembleParameter
0b60: 4c 69 73 74 20 5c 0a 2b 20 09 28 74 63 6c 53 74  List \.+ .(tclSt
0b70: 75 62 73 50 74 72 2d 3e 74 63 6c 5f 47 65 74 45  ubsPtr->tcl_GetE
0b80: 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 72  nsembleParameter
0b90: 4c 69 73 74 29 20 2f 2a 20 35 38 31 20 2a 2f 0a  List) /* 581 */.
0ba0: 2b 20 23 65 6e 64 69 66 0a 20 20 0a 20 20 23 65  + #endif.  .  #e
0bb0: 6e 64 69 66 20 2f 2a 20 64 65 66 69 6e 65 64 28  ndif /* defined(
0bc0: 55 53 45 5f 54 43 4c 5f 53 54 55 42 53 29 20 26  USE_TCL_STUBS) &
0bd0: 26 20 21 64 65 66 69 6e 65 64 28 55 53 45 5f 54  & !defined(USE_T
0be0: 43 4c 5f 53 54 55 42 5f 50 52 4f 43 53 29 20 2a  CL_STUB_PROCS) *
0bf0: 2f 0a 20 20 0a 49 6e 64 65 78 3a 20 67 65 6e 65  /.  .Index: gene
0c00: 72 69 63 2f 74 63 6c 4e 61 6d 65 73 70 2e 63 0a  ric/tclNamesp.c.
0c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0c20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0c40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0c50: 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63  ===.RCS file: /c
0c60: 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67  vsroot/tcl/tcl/g
0c70: 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d 65 73 70  eneric/tclNamesp
0c80: 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20  .c,v.retrieving 
0c90: 72 65 76 69 73 69 6f 6e 20 31 2e 31 36 31 0a 64  revision 1.161.d
0ca0: 69 66 66 20 2d 63 20 2d 72 31 2e 31 36 31 20 74  iff -c -r1.161 t
0cb0: 63 6c 4e 61 6d 65 73 70 2e 63 0a 2a 2a 2a 20 67  clNamesp.c.*** g
0cc0: 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d 65 73 70  eneric/tclNamesp
0cd0: 2e 63 09 31 33 20 44 65 63 20 32 30 30 37 20 31  .c.13 Dec 2007 1
0ce0: 35 3a 32 33 3a 31 39 20 2d 30 30 30 30 09 31 2e  5:23:19 -0000.1.
0cf0: 31 36 31 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f  161.--- generic/
0d00: 74 63 6c 4e 61 6d 65 73 70 2e 63 09 32 35 20 46  tclNamesp.c.25 F
0d10: 65 62 20 32 30 30 38 20 32 33 3a 30 37 3a 30 35  eb 2008 23:07:05
0d20: 20 2d 30 30 30 30 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a   -0000.*********
0d30: 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 31 31 31 2c 31  ******.*** 111,1
0d40: 31 39 20 2a 2a 2a 2a 0a 2d 2d 2d 20 31 31 31 2c  19 ****.--- 111,
0d50: 31 32 31 20 2d 2d 2d 2d 0a 20 20 09 09 09 09 20  121 ----.  .... 
0d60: 2a 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20  * field. */.    
0d70: 20 20 69 6e 74 20 66 6c 61 67 73 3b 09 09 09 2f    int flags;.../
0d80: 2a 20 4f 52 65 64 20 63 6f 6d 62 6f 20 6f 66 20  * ORed combo of 
0d90: 54 43 4c 5f 45 4e 53 45 4d 42 4c 45 5f 50 52 45  TCL_ENSEMBLE_PRE
0da0: 46 49 58 2c 20 45 4e 53 5f 44 45 41 44 0a 20 20  FIX, ENS_DEAD.  
0db0: 09 09 09 09 20 2a 20 61 6e 64 20 45 4e 53 45 4d  .... * and ENSEM
0dc0: 42 4c 45 5f 43 4f 4d 50 49 4c 45 2e 20 2a 2f 0a  BLE_COMPILE. */.
0dd0: 2b 20 20 20 20 20 69 6e 74 20 6e 75 6d 50 61 72  +     int numPar
0de0: 61 6d 65 74 65 72 73 3b 09 09 2f 2a 20 43 61 63  ameters;../* Cac
0df0: 68 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  hed number of pa
0e00: 72 61 6d 65 74 65 72 73 2e 20 2a 2f 20 0a 20 20  rameters. */ .  
0e10: 0a 20 20 20 20 20 20 2f 2a 20 4f 42 4a 45 43 54  .      /* OBJECT
0e20: 20 46 49 45 4c 44 53 20 46 4f 52 20 45 4e 53 45   FIELDS FOR ENSE
0e30: 4d 42 4c 45 20 43 4f 4e 46 49 47 55 52 41 54 49  MBLE CONFIGURATI
0e40: 4f 4e 20 2a 2f 0a 20 20 0a 2b 20 20 20 20 20 54  ON */.  .+     T
0e50: 63 6c 5f 4f 62 6a 20 2a 70 61 72 61 6d 65 74 65  cl_Obj *paramete
0e60: 72 4c 69 73 74 3b 09 2f 2a 20 4c 69 73 74 20 6f  rList;./* List o
0e70: 66 20 65 6e 73 65 6d 62 6c 65 20 70 61 72 61 6d  f ensemble param
0e80: 65 74 65 72 20 6e 61 6d 65 73 2e 20 2a 2f 0a 20  eter names. */. 
0e90: 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 73 75       Tcl_Obj *su
0ea0: 62 63 6f 6d 6d 61 6e 64 44 69 63 74 3b 09 2f 2a  bcommandDict;./*
0eb0: 20 44 69 63 74 69 6f 6e 61 72 79 20 70 72 6f 76   Dictionary prov
0ec0: 69 64 69 6e 67 20 6d 61 70 70 69 6e 67 20 66 72  iding mapping fr
0ed0: 6f 6d 0a 20 20 09 09 09 09 20 2a 20 73 75 62 63  om.  .... * subc
0ee0: 6f 6d 6d 61 6e 64 73 20 74 6f 20 74 68 65 69 72  ommands to their
0ef0: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 63 6f   implementing co
0f00: 6d 6d 61 6e 64 0a 20 20 09 09 09 09 20 2a 20 70  mmand.  .... * p
0f10: 72 65 66 69 78 65 73 2c 20 6f 72 20 4e 55 4c 4c  refixes, or NULL
0f20: 20 69 66 20 77 65 20 61 72 65 20 74 6f 20 62 75   if we are to bu
0f30: 69 6c 64 20 74 68 65 0a 2a 2a 2a 2a 2a 2a 2a 2a  ild the.********
0f40: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 31 34 34 2c  *******.*** 144,
0f50: 31 34 39 20 2a 2a 2a 2a 0a 2d 2d 2d 20 31 34 36  149 ****.--- 146
0f60: 2c 31 35 34 20 2d 2d 2d 2d 0a 20 20 23 64 65 66  ,154 ----.  #def
0f70: 69 6e 65 20 45 4e 53 5f 44 45 41 44 09 30 78 31  ine ENS_DEAD.0x1
0f80: 09 2f 2a 20 46 6c 61 67 20 76 61 6c 75 65 20 74  ./* Flag value t
0f90: 6f 20 73 61 79 20 74 68 61 74 20 74 68 65 20 65  o say that the e
0fa0: 6e 73 65 6d 62 6c 65 20 69 73 20 64 65 61 64 0a  nsemble is dead.
0fb0: 20 20 09 09 09 09 20 2a 20 61 6e 64 20 6f 6e 20    .... * and on 
0fc0: 69 74 73 20 77 61 79 20 6f 75 74 2e 20 2a 2f 0a  its way out. */.
0fd0: 20 20 0a 2b 20 0a 2b 20 0a 2b 20 0a 20 20 2f 2a    .+ .+ .+ .  /*
0fe0: 0a 20 20 20 2a 20 44 65 63 6c 61 72 61 74 69 6f  .   * Declaratio
0ff0: 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  ns for functions
1000: 20 6c 6f 63 61 6c 20 74 6f 20 74 68 69 73 20 66   local to this f
1010: 69 6c 65 3a 0a 20 20 20 2a 2f 0a 2a 2a 2a 2a 2a  ile:.   */.*****
1020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 34  **********.*** 4
1030: 37 34 35 2c 34 37 36 30 20 2a 2a 2a 2a 0a 20 20  745,4760 ****.  
1040: 09 45 4e 53 5f 43 4f 4e 46 49 47 2c 20 45 4e 53  .ENS_CONFIG, ENS
1050: 5f 43 52 45 41 54 45 2c 20 45 4e 53 5f 45 58 49  _CREATE, ENS_EXI
1060: 53 54 53 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20  STS.      };.   
1070: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
1080: 63 68 61 72 20 2a 63 72 65 61 74 65 4f 70 74 69  char *createOpti
1090: 6f 6e 73 5b 5d 20 3d 20 7b 0a 21 20 09 22 2d 63  ons[] = {.! ."-c
10a0: 6f 6d 6d 61 6e 64 22 2c 20 22 2d 6d 61 70 22 2c  ommand", "-map",
10b0: 20 22 2d 70 72 65 66 69 78 65 73 22 2c 20 22 2d   "-prefixes", "-
10c0: 73 75 62 63 6f 6d 6d 61 6e 64 73 22 2c 20 22 2d  subcommands", "-
10d0: 75 6e 6b 6e 6f 77 6e 22 2c 20 4e 55 4c 4c 0a 20  unknown", NULL. 
10e0: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 65 6e       };.      en
10f0: 75 6d 20 45 6e 73 43 72 65 61 74 65 4f 70 74 73  um EnsCreateOpts
1100: 20 7b 0a 21 20 09 43 52 54 5f 43 4d 44 2c 20 43   {.! .CRT_CMD, C
1110: 52 54 5f 4d 41 50 2c 20 43 52 54 5f 50 52 45 46  RT_MAP, CRT_PREF
1120: 49 58 2c 20 43 52 54 5f 53 55 42 43 4d 44 53 2c  IX, CRT_SUBCMDS,
1130: 20 43 52 54 5f 55 4e 4b 4e 4f 57 4e 0a 20 20 20   CRT_UNKNOWN.   
1140: 20 20 20 7d 3b 0a 20 20 20 20 20 20 73 74 61 74     };.      stat
1150: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
1160: 6f 6e 66 69 67 4f 70 74 69 6f 6e 73 5b 5d 20 3d  onfigOptions[] =
1170: 20 7b 0a 21 20 09 22 2d 6d 61 70 22 2c 20 22 2d   {.! ."-map", "-
1180: 6e 61 6d 65 73 70 61 63 65 22 2c 20 22 2d 70 72  namespace", "-pr
1190: 65 66 69 78 65 73 22 2c 20 22 2d 73 75 62 63 6f  efixes", "-subco
11a0: 6d 6d 61 6e 64 73 22 2c 20 22 2d 75 6e 6b 6e 6f  mmands", "-unkno
11b0: 77 6e 22 2c 20 4e 55 4c 4c 0a 20 20 20 20 20 20  wn", NULL.      
11c0: 7d 3b 0a 20 20 20 20 20 20 65 6e 75 6d 20 45 6e  };.      enum En
11d0: 73 43 6f 6e 66 69 67 4f 70 74 73 20 7b 0a 21 20  sConfigOpts {.! 
11e0: 09 43 4f 4e 46 5f 4d 41 50 2c 20 43 4f 4e 46 5f  .CONF_MAP, CONF_
11f0: 4e 41 4d 45 53 50 41 43 45 2c 20 43 4f 4e 46 5f  NAMESPACE, CONF_
1200: 50 52 45 46 49 58 2c 20 43 4f 4e 46 5f 53 55 42  PREFIX, CONF_SUB
1210: 43 4d 44 53 2c 20 43 4f 4e 46 5f 55 4e 4b 4e 4f  CMDS, CONF_UNKNO
1220: 57 4e 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  WN.      };.    
1230: 20 20 69 6e 74 20 69 6e 64 65 78 3b 0a 20 20 0a    int index;.  .
1240: 2d 2d 2d 20 34 37 35 30 2c 34 37 36 39 20 2d 2d  --- 4750,4769 --
1250: 2d 2d 0a 20 20 09 45 4e 53 5f 43 4f 4e 46 49 47  --.  .ENS_CONFIG
1260: 2c 20 45 4e 53 5f 43 52 45 41 54 45 2c 20 45 4e  , ENS_CREATE, EN
1270: 53 5f 45 58 49 53 54 53 0a 20 20 20 20 20 20 7d  S_EXISTS.      }
1280: 3b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  ;.      static c
1290: 6f 6e 73 74 20 63 68 61 72 20 2a 63 72 65 61 74  onst char *creat
12a0: 65 4f 70 74 69 6f 6e 73 5b 5d 20 3d 20 7b 0a 21  eOptions[] = {.!
12b0: 20 09 22 2d 63 6f 6d 6d 61 6e 64 22 2c 20 22 2d   ."-command", "-
12c0: 6d 61 70 22 2c 20 22 2d 70 61 72 61 6d 65 74 65  map", "-paramete
12d0: 72 73 22 2c 20 22 2d 70 72 65 66 69 78 65 73 22  rs", "-prefixes"
12e0: 2c 20 22 2d 73 75 62 63 6f 6d 6d 61 6e 64 73 22  , "-subcommands"
12f0: 2c 20 0a 21 20 20 20 20 20 20 20 20 20 22 2d 75  , .!         "-u
1300: 6e 6b 6e 6f 77 6e 22 2c 20 4e 55 4c 4c 0a 20 20  nknown", NULL.  
1310: 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 65 6e 75      };.      enu
1320: 6d 20 45 6e 73 43 72 65 61 74 65 4f 70 74 73 20  m EnsCreateOpts 
1330: 7b 0a 21 20 09 43 52 54 5f 43 4d 44 2c 20 43 52  {.! .CRT_CMD, CR
1340: 54 5f 4d 41 50 2c 20 43 52 54 5f 50 41 52 41 4d  T_MAP, CRT_PARAM
1350: 2c 20 43 52 54 5f 50 52 45 46 49 58 2c 20 43 52  , CRT_PREFIX, CR
1360: 54 5f 53 55 42 43 4d 44 53 2c 20 0a 21 20 20 20  T_SUBCMDS, .!   
1370: 20 20 20 20 20 20 43 52 54 5f 55 4e 4b 4e 4f 57        CRT_UNKNOW
1380: 4e 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  N.      };.     
1390: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
13a0: 61 72 20 2a 63 6f 6e 66 69 67 4f 70 74 69 6f 6e  ar *configOption
13b0: 73 5b 5d 20 3d 20 7b 0a 21 20 09 22 2d 6d 61 70  s[] = {.! ."-map
13c0: 22 2c 20 22 2d 6e 61 6d 65 73 70 61 63 65 22 2c  ", "-namespace",
13d0: 20 22 2d 70 61 72 61 6d 65 74 65 72 73 22 2c 20   "-parameters", 
13e0: 22 2d 70 72 65 66 69 78 65 73 22 2c 20 22 2d 73  "-prefixes", "-s
13f0: 75 62 63 6f 6d 6d 61 6e 64 73 22 2c 20 0a 21 20  ubcommands", .! 
1400: 20 20 20 20 20 20 20 20 22 2d 75 6e 6b 6e 6f 77          "-unknow
1410: 6e 22 2c 20 4e 55 4c 4c 0a 20 20 20 20 20 20 7d  n", NULL.      }
1420: 3b 0a 20 20 20 20 20 20 65 6e 75 6d 20 45 6e 73  ;.      enum Ens
1430: 43 6f 6e 66 69 67 4f 70 74 73 20 7b 0a 21 20 09  ConfigOpts {.! .
1440: 43 4f 4e 46 5f 4d 41 50 2c 20 43 4f 4e 46 5f 4e  CONF_MAP, CONF_N
1450: 41 4d 45 53 50 41 43 45 2c 20 43 4f 4e 46 5f 50  AMESPACE, CONF_P
1460: 41 52 41 4d 2c 20 43 4f 4e 46 5f 50 52 45 46 49  ARAM, CONF_PREFI
1470: 58 2c 20 43 4f 4e 46 5f 53 55 42 43 4d 44 53 2c  X, CONF_SUBCMDS,
1480: 20 0a 21 20 20 20 20 20 20 20 20 20 43 4f 4e 46   .!         CONF
1490: 5f 55 4e 4b 4e 4f 57 4e 0a 20 20 20 20 20 20 7d  _UNKNOWN.      }
14a0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65  ;.      int inde
14b0: 78 3b 0a 20 20 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  x;.  .**********
14c0: 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 34 37 38 39 2c 34  *****.*** 4789,4
14d0: 37 39 34 20 2a 2a 2a 2a 0a 2d 2d 2d 20 34 37 39  794 ****.--- 479
14e0: 38 2c 34 38 30 34 20 2d 2d 2d 2d 0a 20 20 09 54  8,4804 ----.  .T
14f0: 63 6c 5f 4f 62 6a 20 2a 6d 61 70 4f 62 6a 20 3d  cl_Obj *mapObj =
1500: 20 4e 55 4c 4c 3b 0a 20 20 09 69 6e 74 20 70 65   NULL;.  .int pe
1510: 72 6d 69 74 50 72 65 66 69 78 20 3d 20 31 3b 0a  rmitPrefix = 1;.
1520: 20 20 09 54 63 6c 5f 4f 62 6a 20 2a 75 6e 6b 6e    .Tcl_Obj *unkn
1530: 6f 77 6e 4f 62 6a 20 3d 20 4e 55 4c 4c 3b 0a 2b  ownObj = NULL;.+
1540: 20 09 54 63 6c 5f 4f 62 6a 20 2a 70 61 72 61 6d   .Tcl_Obj *param
1550: 4f 62 6a 20 3d 20 4e 55 4c 4c 3b 0a 20 20 0a 20  Obj = NULL;.  . 
1560: 20 09 6f 62 6a 76 20 2b 3d 20 33 3b 0a 20 20 09   .objv += 3;.  .
1570: 6f 62 6a 63 20 2d 3d 20 33 3b 0a 2a 2a 2a 2a 2a  objc -= 3;.*****
1580: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 34  **********.*** 4
1590: 38 32 39 2c 34 38 33 34 20 2a 2a 2a 2a 0a 2d 2d  829,4834 ****.--
15a0: 2d 20 34 38 33 39 2c 34 38 35 33 20 2d 2d 2d 2d  - 4839,4853 ----
15b0: 0a 20 20 09 09 7d 0a 20 20 09 09 73 75 62 63 6d  .  ..}.  ..subcm
15c0: 64 4f 62 6a 20 3d 20 28 6c 65 6e 20 3e 20 30 20  dObj = (len > 0 
15d0: 3f 20 6f 62 6a 76 5b 31 5d 20 3a 20 4e 55 4c 4c  ? objv[1] : NULL
15e0: 29 3b 0a 20 20 09 09 63 6f 6e 74 69 6e 75 65 3b  );.  ..continue;
15f0: 0a 2b 20 09 20 20 20 20 63 61 73 65 20 43 52 54  .+ .    case CRT
1600: 5f 50 41 52 41 4d 3a 0a 2b 20 09 09 69 66 20 28  _PARAM:.+ ..if (
1610: 54 63 6c 4c 69 73 74 4f 62 6a 4c 65 6e 67 74 68  TclListObjLength
1620: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d  (interp, objv[1]
1630: 2c 20 26 6c 65 6e 29 20 21 3d 20 54 43 4c 5f 4f  , &len) != TCL_O
1640: 4b 29 20 7b 0a 2b 20 09 09 20 20 20 20 69 66 20  K) {.+ ..    if 
1650: 28 61 6c 6c 6f 63 61 74 65 64 4d 61 70 46 6c 61  (allocatedMapFla
1660: 67 29 20 7b 0a 2b 20 09 09 09 54 63 6c 5f 44 65  g) {.+ ...Tcl_De
1670: 63 72 52 65 66 43 6f 75 6e 74 28 6d 61 70 4f 62  crRefCount(mapOb
1680: 6a 29 3b 0a 2b 20 09 09 20 20 20 20 7d 0a 2b 20  j);.+ ..    }.+ 
1690: 09 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ..    return TCL
16a0: 5f 45 52 52 4f 52 3b 0a 2b 20 09 09 7d 0a 2b 20  _ERROR;.+ ..}.+ 
16b0: 09 09 70 61 72 61 6d 4f 62 6a 20 3d 20 28 6c 65  ..paramObj = (le
16c0: 6e 20 3e 20 30 20 3f 20 6f 62 6a 76 5b 31 5d 20  n > 0 ? objv[1] 
16d0: 3a 20 4e 55 4c 4c 29 3b 0a 2b 20 09 09 63 6f 6e  : NULL);.+ ..con
16e0: 74 69 6e 75 65 3b 0a 20 20 09 20 20 20 20 63 61  tinue;.  .    ca
16f0: 73 65 20 43 52 54 5f 4d 41 50 3a 20 7b 0a 20 20  se CRT_MAP: {.  
1700: 09 09 54 63 6c 5f 4f 62 6a 20 2a 70 61 74 63 68  ..Tcl_Obj *patch
1710: 65 64 44 69 63 74 20 3d 20 4e 55 4c 4c 2c 20 2a  edDict = NULL, *
1720: 73 75 62 63 6d 64 4f 62 6a 3b 0a 20 20 0a 2a 2a  subcmdObj;.  .**
1730: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
1740: 2a 20 34 39 33 35 2c 34 39 34 30 20 2a 2a 2a 2a  * 4935,4940 ****
1750: 0a 2d 2d 2d 20 34 39 35 34 2c 34 39 36 30 20 2d  .--- 4954,4960 -
1760: 2d 2d 2d 0a 20 20 09 54 63 6c 5f 53 65 74 45 6e  ---.  .Tcl_SetEn
1770: 73 65 6d 62 6c 65 53 75 62 63 6f 6d 6d 61 6e 64  sembleSubcommand
1780: 4c 69 73 74 28 69 6e 74 65 72 70 2c 20 74 6f 6b  List(interp, tok
1790: 65 6e 2c 20 73 75 62 63 6d 64 4f 62 6a 29 3b 0a  en, subcmdObj);.
17a0: 20 20 09 54 63 6c 5f 53 65 74 45 6e 73 65 6d 62    .Tcl_SetEnsemb
17b0: 6c 65 4d 61 70 70 69 6e 67 44 69 63 74 28 69 6e  leMappingDict(in
17c0: 74 65 72 70 2c 20 74 6f 6b 65 6e 2c 20 6d 61 70  terp, token, map
17d0: 4f 62 6a 29 3b 0a 20 20 09 54 63 6c 5f 53 65 74  Obj);.  .Tcl_Set
17e0: 45 6e 73 65 6d 62 6c 65 55 6e 6b 6e 6f 77 6e 48  EnsembleUnknownH
17f0: 61 6e 64 6c 65 72 28 69 6e 74 65 72 70 2c 20 74  andler(interp, t
1800: 6f 6b 65 6e 2c 20 75 6e 6b 6e 6f 77 6e 4f 62 6a  oken, unknownObj
1810: 29 3b 0a 2b 20 09 54 63 6c 5f 53 65 74 45 6e 73  );.+ .Tcl_SetEns
1820: 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 72 4c 69  embleParameterLi
1830: 73 74 28 69 6e 74 65 72 70 2c 20 74 6f 6b 65 6e  st(interp, token
1840: 2c 20 70 61 72 61 6d 4f 62 6a 29 3b 0a 20 20 0a  , paramObj);.  .
1850: 20 20 09 2f 2a 0a 20 20 09 20 2a 20 54 72 69 63    ./*.  . * Tric
1860: 6b 79 21 20 4d 75 73 74 20 65 6e 73 75 72 65 20  ky! Must ensure 
1870: 74 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 20  that the result 
1880: 69 73 20 6e 6f 74 20 73 68 61 72 65 64 20 28 63  is not shared (c
1890: 6f 6d 6d 61 6e 64 20 64 65 6c 65 74 65 0a 2a 2a  ommand delete.**
18a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
18b0: 2a 20 34 39 38 30 2c 34 39 38 35 20 2a 2a 2a 2a  * 4980,4985 ****
18c0: 0a 2d 2d 2d 20 35 30 30 30 2c 35 30 31 31 20 2d  .--- 5000,5011 -
18d0: 2d 2d 2d 0a 20 20 09 09 20 20 20 20 54 63 6c 5f  ---.  ..    Tcl_
18e0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
18f0: 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a 29 3b  erp, resultObj);
1900: 0a 20 20 09 09 7d 0a 20 20 09 09 62 72 65 61 6b  .  ..}.  ..break
1910: 3b 0a 2b 20 09 20 20 20 20 63 61 73 65 20 43 4f  ;.+ .    case CO
1920: 4e 46 5f 50 41 52 41 4d 3a 0a 2b 20 09 09 54 63  NF_PARAM:.+ ..Tc
1930: 6c 5f 47 65 74 45 6e 73 65 6d 62 6c 65 50 61 72  l_GetEnsemblePar
1940: 61 6d 65 74 65 72 4c 69 73 74 28 4e 55 4c 4c 2c  ameterList(NULL,
1950: 20 74 6f 6b 65 6e 2c 20 26 72 65 73 75 6c 74 4f   token, &resultO
1960: 62 6a 29 3b 0a 2b 20 09 09 69 66 20 28 72 65 73  bj);.+ ..if (res
1970: 75 6c 74 4f 62 6a 20 21 3d 20 4e 55 4c 4c 29 20  ultObj != NULL) 
1980: 7b 0a 2b 20 09 09 20 20 20 20 54 63 6c 5f 53 65  {.+ ..    Tcl_Se
1990: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
19a0: 70 2c 20 72 65 73 75 6c 74 4f 62 6a 29 3b 0a 2b  p, resultObj);.+
19b0: 20 09 09 7d 0a 2b 20 09 09 62 72 65 61 6b 3b 0a   ..}.+ ..break;.
19c0: 20 20 09 20 20 20 20 63 61 73 65 20 43 4f 4e 46    .    case CONF
19d0: 5f 4d 41 50 3a 0a 20 20 09 09 54 63 6c 5f 47 65  _MAP:.  ..Tcl_Ge
19e0: 74 45 6e 73 65 6d 62 6c 65 4d 61 70 70 69 6e 67  tEnsembleMapping
19f0: 44 69 63 74 28 4e 55 4c 4c 2c 20 74 6f 6b 65 6e  Dict(NULL, token
1a00: 2c 20 26 72 65 73 75 6c 74 4f 62 6a 29 3b 0a 20  , &resultObj);. 
1a10: 20 09 09 69 66 20 28 72 65 73 75 6c 74 4f 62 6a   ..if (resultObj
1a20: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2a 2a 2a 2a   != NULL) {.****
1a30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20  ***********.*** 
1a40: 35 30 33 37 2c 35 30 34 32 20 2a 2a 2a 2a 0a 2d  5037,5042 ****.-
1a50: 2d 2d 20 35 30 36 33 2c 35 30 37 35 20 2d 2d 2d  -- 5063,5075 ---
1a60: 2d 0a 20 20 09 09 20 20 20 20 54 63 6c 5f 4e 65  -.  ..    Tcl_Ne
1a70: 77 53 74 72 69 6e 67 4f 62 6a 28 28 28 4e 61 6d  wStringObj(((Nam
1a80: 65 73 70 61 63 65 20 2a 29 6e 61 6d 65 73 70 61  espace *)namespa
1a90: 63 65 50 74 72 29 2d 3e 66 75 6c 6c 4e 61 6d 65  cePtr)->fullName
1aa0: 2c 0a 20 20 09 09 20 20 20 20 2d 31 29 29 3b 0a  ,.  ..    -1));.
1ab0: 20 20 0a 2b 20 09 20 20 20 20 2f 2a 20 2d 70 61    .+ .    /* -pa
1ac0: 72 61 6d 65 74 65 72 73 20 6f 70 74 69 6f 6e 20  rameters option 
1ad0: 2a 2f 0a 2b 20 09 20 20 20 20 54 63 6c 5f 4c 69  */.+ .    Tcl_Li
1ae0: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
1af0: 6e 74 28 4e 55 4c 4c 2c 20 72 65 73 75 6c 74 4f  nt(NULL, resultO
1b00: 62 6a 2c 0a 2b 20 09 09 20 20 20 20 54 63 6c 5f  bj,.+ ..    Tcl_
1b10: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 63 6f 6e  NewStringObj(con
1b20: 66 69 67 4f 70 74 69 6f 6e 73 5b 43 4f 4e 46 5f  figOptions[CONF_
1b30: 50 41 52 41 4d 5d 2c 20 2d 31 29 29 3b 0a 2b 20  PARAM], -1));.+ 
1b40: 09 20 20 20 20 54 63 6c 5f 47 65 74 45 6e 73 65  .    Tcl_GetEnse
1b50: 6d 62 6c 65 50 61 72 61 6d 65 74 65 72 4c 69 73  mbleParameterLis
1b60: 74 28 4e 55 4c 4c 2c 20 74 6f 6b 65 6e 2c 20 26  t(NULL, token, &
1b70: 74 6d 70 4f 62 6a 29 3b 0a 2b 20 09 20 20 20 20  tmpObj);.+ .    
1b80: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
1b90: 64 45 6c 65 6d 65 6e 74 28 4e 55 4c 4c 2c 20 72  dElement(NULL, r
1ba0: 65 73 75 6c 74 4f 62 6a 2c 0a 2b 20 09 09 20 20  esultObj,.+ ..  
1bb0: 20 20 28 74 6d 70 4f 62 6a 20 21 3d 20 4e 55 4c    (tmpObj != NUL
1bc0: 4c 29 20 3f 20 74 6d 70 4f 62 6a 20 3a 20 54 63  L) ? tmpObj : Tc
1bd0: 6c 5f 4e 65 77 4f 62 6a 28 29 29 3b 0a 2b 20 0a  l_NewObj());.+ .
1be0: 20 20 09 20 20 20 20 2f 2a 20 2d 70 72 65 66 69    .    /* -prefi
1bf0: 78 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20 20 09 20  x option */.  . 
1c00: 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70     Tcl_ListObjAp
1c10: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 4e 55 4c 4c  pendElement(NULL
1c20: 2c 20 72 65 73 75 6c 74 4f 62 6a 2c 0a 20 20 09  , resultObj,.  .
1c30: 09 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69  .    Tcl_NewStri
1c40: 6e 67 4f 62 6a 28 63 6f 6e 66 69 67 4f 70 74 69  ngObj(configOpti
1c50: 6f 6e 73 5b 43 4f 4e 46 5f 50 52 45 46 49 58 5d  ons[CONF_PREFIX]
1c60: 2c 20 2d 31 29 29 3b 0a 2a 2a 2a 2a 2a 2a 2a 2a  , -1));.********
1c70: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 35 30 36 34  *******.*** 5064
1c80: 2c 35 30 37 35 20 2a 2a 2a 2a 0a 20 20 09 20 20  ,5075 ****.  .  
1c90: 20 20 54 63 6c 5f 44 69 63 74 53 65 61 72 63 68    Tcl_DictSearch
1ca0: 20 73 65 61 72 63 68 3b 0a 20 20 09 20 20 20 20   search;.  .    
1cb0: 54 63 6c 5f 4f 62 6a 20 2a 6c 69 73 74 4f 62 6a  Tcl_Obj *listObj
1cc0: 3b 0a 20 20 09 20 20 20 20 69 6e 74 20 64 6f 6e  ;.  .    int don
1cd0: 65 2c 20 6c 65 6e 2c 20 61 6c 6c 6f 63 61 74 65  e, len, allocate
1ce0: 64 4d 61 70 46 6c 61 67 20 3d 20 30 3b 0a 21 20  dMapFlag = 0;.! 
1cf0: 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 73 75  .    Tcl_Obj *su
1d00: 62 63 6d 64 4f 62 6a 20 3d 20 4e 55 4c 4c 2c 20  bcmdObj = NULL, 
1d10: 2a 6d 61 70 4f 62 6a 20 3d 20 4e 55 4c 4c 2c 0a  *mapObj = NULL,.
1d20: 20 20 09 09 20 20 20 20 2a 75 6e 6b 6e 6f 77 6e    ..    *unknown
1d30: 4f 62 6a 20 3d 20 4e 55 4c 4c 3b 20 2f 2a 20 44  Obj = NULL; /* D
1d40: 65 66 61 75 6c 74 73 2c 20 73 69 6c 65 6e 63 65  efaults, silence
1d50: 20 67 63 63 20 34 20 77 61 72 6e 69 6e 67 73 20   gcc 4 warnings 
1d60: 2a 2f 0a 20 20 09 20 20 20 20 69 6e 74 20 70 65  */.  .    int pe
1d70: 72 6d 69 74 50 72 65 66 69 78 2c 20 66 6c 61 67  rmitPrefix, flag
1d80: 73 20 3d 20 30 3b 09 2f 2a 20 73 69 6c 65 6e 63  s = 0;./* silenc
1d90: 65 20 67 63 63 20 34 20 77 61 72 6e 69 6e 67 20  e gcc 4 warning 
1da0: 2a 2f 0a 20 20 0a 20 20 09 20 20 20 20 54 63 6c  */.  .  .    Tcl
1db0: 5f 47 65 74 45 6e 73 65 6d 62 6c 65 53 75 62 63  _GetEnsembleSubc
1dc0: 6f 6d 6d 61 6e 64 4c 69 73 74 28 4e 55 4c 4c 2c  ommandList(NULL,
1dd0: 20 74 6f 6b 65 6e 2c 20 26 73 75 62 63 6d 64 4f   token, &subcmdO
1de0: 62 6a 29 3b 0a 20 20 09 20 20 20 20 54 63 6c 5f  bj);.  .    Tcl_
1df0: 47 65 74 45 6e 73 65 6d 62 6c 65 4d 61 70 70 69  GetEnsembleMappi
1e00: 6e 67 44 69 63 74 28 4e 55 4c 4c 2c 20 74 6f 6b  ngDict(NULL, tok
1e10: 65 6e 2c 20 26 6d 61 70 4f 62 6a 29 3b 0a 20 20  en, &mapObj);.  
1e20: 09 20 20 20 20 54 63 6c 5f 47 65 74 45 6e 73 65  .    Tcl_GetEnse
1e30: 6d 62 6c 65 55 6e 6b 6e 6f 77 6e 48 61 6e 64 6c  mbleUnknownHandl
1e40: 65 72 28 4e 55 4c 4c 2c 20 74 6f 6b 65 6e 2c 20  er(NULL, token, 
1e50: 26 75 6e 6b 6e 6f 77 6e 4f 62 6a 29 3b 0a 20 20  &unknownObj);.  
1e60: 09 20 20 20 20 54 63 6c 5f 47 65 74 45 6e 73 65  .    Tcl_GetEnse
1e70: 6d 62 6c 65 46 6c 61 67 73 28 4e 55 4c 4c 2c 20  mbleFlags(NULL, 
1e80: 74 6f 6b 65 6e 2c 20 26 66 6c 61 67 73 29 3b 0a  token, &flags);.
1e90: 20 20 09 20 20 20 20 70 65 72 6d 69 74 50 72 65    .    permitPre
1ea0: 66 69 78 20 3d 20 28 66 6c 61 67 73 20 26 20 54  fix = (flags & T
1eb0: 43 4c 5f 45 4e 53 45 4d 42 4c 45 5f 50 52 45 46  CL_ENSEMBLE_PREF
1ec0: 49 58 29 20 21 3d 20 30 3b 0a 2d 2d 2d 20 35 30  IX) != 0;.--- 50
1ed0: 39 37 2c 35 31 30 39 20 2d 2d 2d 2d 0a 20 20 09  97,5109 ----.  .
1ee0: 20 20 20 20 54 63 6c 5f 44 69 63 74 53 65 61 72      Tcl_DictSear
1ef0: 63 68 20 73 65 61 72 63 68 3b 0a 20 20 09 20 20  ch search;.  .  
1f00: 20 20 54 63 6c 5f 4f 62 6a 20 2a 6c 69 73 74 4f    Tcl_Obj *listO
1f10: 62 6a 3b 0a 20 20 09 20 20 20 20 69 6e 74 20 64  bj;.  .    int d
1f20: 6f 6e 65 2c 20 6c 65 6e 2c 20 61 6c 6c 6f 63 61  one, len, alloca
1f30: 74 65 64 4d 61 70 46 6c 61 67 20 3d 20 30 3b 0a  tedMapFlag = 0;.
1f40: 21 20 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a  ! .    Tcl_Obj *
1f50: 73 75 62 63 6d 64 4f 62 6a 20 3d 20 4e 55 4c 4c  subcmdObj = NULL
1f60: 2c 20 2a 6d 61 70 4f 62 6a 20 3d 20 4e 55 4c 4c  , *mapObj = NULL
1f70: 2c 20 2a 70 61 72 61 6d 4f 62 6a 20 3d 20 4e 55  , *paramObj = NU
1f80: 4c 4c 2c 0a 20 20 09 09 20 20 20 20 2a 75 6e 6b  LL,.  ..    *unk
1f90: 6e 6f 77 6e 4f 62 6a 20 3d 20 4e 55 4c 4c 3b 20  nownObj = NULL; 
1fa0: 2f 2a 20 44 65 66 61 75 6c 74 73 2c 20 73 69 6c  /* Defaults, sil
1fb0: 65 6e 63 65 20 67 63 63 20 34 20 77 61 72 6e 69  ence gcc 4 warni
1fc0: 6e 67 73 20 2a 2f 0a 20 20 09 20 20 20 20 69 6e  ngs */.  .    in
1fd0: 74 20 70 65 72 6d 69 74 50 72 65 66 69 78 2c 20  t permitPrefix, 
1fe0: 66 6c 61 67 73 20 3d 20 30 3b 09 2f 2a 20 73 69  flags = 0;./* si
1ff0: 6c 65 6e 63 65 20 67 63 63 20 34 20 77 61 72 6e  lence gcc 4 warn
2000: 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 09 20 20 20  ing */.  .  .   
2010: 20 54 63 6c 5f 47 65 74 45 6e 73 65 6d 62 6c 65   Tcl_GetEnsemble
2020: 53 75 62 63 6f 6d 6d 61 6e 64 4c 69 73 74 28 4e  SubcommandList(N
2030: 55 4c 4c 2c 20 74 6f 6b 65 6e 2c 20 26 73 75 62  ULL, token, &sub
2040: 63 6d 64 4f 62 6a 29 3b 0a 20 20 09 20 20 20 20  cmdObj);.  .    
2050: 54 63 6c 5f 47 65 74 45 6e 73 65 6d 62 6c 65 4d  Tcl_GetEnsembleM
2060: 61 70 70 69 6e 67 44 69 63 74 28 4e 55 4c 4c 2c  appingDict(NULL,
2070: 20 74 6f 6b 65 6e 2c 20 26 6d 61 70 4f 62 6a 29   token, &mapObj)
2080: 3b 0a 2b 20 09 20 20 20 20 54 63 6c 5f 47 65 74  ;.+ .    Tcl_Get
2090: 45 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65 74 65  EnsembleParamete
20a0: 72 4c 69 73 74 28 4e 55 4c 4c 2c 20 74 6f 6b 65  rList(NULL, toke
20b0: 6e 2c 20 26 70 61 72 61 6d 4f 62 6a 29 3b 0a 20  n, &paramObj);. 
20c0: 20 09 20 20 20 20 54 63 6c 5f 47 65 74 45 6e 73   .    Tcl_GetEns
20d0: 65 6d 62 6c 65 55 6e 6b 6e 6f 77 6e 48 61 6e 64  embleUnknownHand
20e0: 6c 65 72 28 4e 55 4c 4c 2c 20 74 6f 6b 65 6e 2c  ler(NULL, token,
20f0: 20 26 75 6e 6b 6e 6f 77 6e 4f 62 6a 29 3b 0a 20   &unknownObj);. 
2100: 20 09 20 20 20 20 54 63 6c 5f 47 65 74 45 6e 73   .    Tcl_GetEns
2110: 65 6d 62 6c 65 46 6c 61 67 73 28 4e 55 4c 4c 2c  embleFlags(NULL,
2120: 20 74 6f 6b 65 6e 2c 20 26 66 6c 61 67 73 29 3b   token, &flags);
2130: 0a 20 20 09 20 20 20 20 70 65 72 6d 69 74 50 72  .  .    permitPr
2140: 65 66 69 78 20 3d 20 28 66 6c 61 67 73 20 26 20  efix = (flags & 
2150: 54 43 4c 5f 45 4e 53 45 4d 42 4c 45 5f 50 52 45  TCL_ENSEMBLE_PRE
2160: 46 49 58 29 20 21 3d 20 30 3b 0a 2a 2a 2a 2a 2a  FIX) != 0;.*****
2170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 35  **********.*** 5
2180: 31 30 32 2c 35 31 30 37 20 2a 2a 2a 2a 0a 2d 2d  102,5107 ****.--
2190: 2d 20 35 31 33 36 2c 35 31 35 30 20 2d 2d 2d 2d  - 5136,5150 ----
21a0: 0a 20 20 09 09 20 20 20 20 7d 0a 20 20 09 09 20  .  ..    }.  .. 
21b0: 20 20 20 73 75 62 63 6d 64 4f 62 6a 20 3d 20 28     subcmdObj = (
21c0: 6c 65 6e 20 3e 20 30 20 3f 20 6f 62 6a 76 5b 31  len > 0 ? objv[1
21d0: 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 20 09 09 20  ] : NULL);.  .. 
21e0: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 2b 20 09     continue;.+ .
21f0: 09 63 61 73 65 20 43 4f 4e 46 5f 50 41 52 41 4d  .case CONF_PARAM
2200: 3a 0a 2b 20 09 09 20 20 20 20 69 66 20 28 54 63  :.+ ..    if (Tc
2210: 6c 4c 69 73 74 4f 62 6a 4c 65 6e 67 74 68 28 69  lListObjLength(i
2220: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20  nterp, objv[1], 
2230: 26 6c 65 6e 29 20 21 3d 20 54 43 4c 5f 4f 4b 29  &len) != TCL_OK)
2240: 20 7b 0a 2b 20 09 09 09 69 66 20 28 61 6c 6c 6f   {.+ ...if (allo
2250: 63 61 74 65 64 4d 61 70 46 6c 61 67 29 20 7b 0a  catedMapFlag) {.
2260: 2b 20 09 09 09 20 20 20 20 54 63 6c 5f 44 65 63  + ...    Tcl_Dec
2270: 72 52 65 66 43 6f 75 6e 74 28 6d 61 70 4f 62 6a  rRefCount(mapObj
2280: 29 3b 0a 2b 20 09 09 09 7d 0a 2b 20 09 09 09 72  );.+ ...}.+ ...r
2290: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
22a0: 0a 2b 20 09 09 20 20 20 20 7d 0a 2b 20 09 09 20  .+ ..    }.+ .. 
22b0: 20 20 20 70 61 72 61 6d 4f 62 6a 20 3d 20 28 6c     paramObj = (l
22c0: 65 6e 20 3e 20 30 20 3f 20 6f 62 6a 76 5b 31 5d  en > 0 ? objv[1]
22d0: 20 3a 20 4e 55 4c 4c 29 3b 0a 2b 20 09 09 20 20   : NULL);.+ ..  
22e0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 09 09    continue;.  ..
22f0: 63 61 73 65 20 43 4f 4e 46 5f 4d 41 50 3a 20 7b  case CONF_MAP: {
2300: 0a 20 20 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a  .  ..    Tcl_Obj
2310: 20 2a 70 61 74 63 68 65 64 44 69 63 74 20 3d 20   *patchedDict = 
2320: 4e 55 4c 4c 2c 20 2a 73 75 62 63 6d 64 4f 62 6a  NULL, *subcmdObj
2330: 3b 0a 20 20 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ;.  .***********
2340: 2a 2a 2a 2a 0a 2a 2a 2a 20 35 32 31 31 2c 35 32  ****.*** 5211,52
2350: 31 36 20 2a 2a 2a 2a 0a 2d 2d 2d 20 35 32 35 34  16 ****.--- 5254
2360: 2c 35 32 36 30 20 2d 2d 2d 2d 0a 20 20 09 09 20  ,5260 ----.  .. 
2370: 20 20 20 3a 20 66 6c 61 67 73 26 7e 54 43 4c 5f     : flags&~TCL_
2380: 45 4e 53 45 4d 42 4c 45 5f 50 52 45 46 49 58 29  ENSEMBLE_PREFIX)
2390: 3b 0a 20 20 09 20 20 20 20 54 63 6c 5f 53 65 74  ;.  .    Tcl_Set
23a0: 45 6e 73 65 6d 62 6c 65 53 75 62 63 6f 6d 6d 61  EnsembleSubcomma
23b0: 6e 64 4c 69 73 74 28 69 6e 74 65 72 70 2c 20 74  ndList(interp, t
23c0: 6f 6b 65 6e 2c 20 73 75 62 63 6d 64 4f 62 6a 29  oken, subcmdObj)
23d0: 3b 0a 20 20 09 20 20 20 20 54 63 6c 5f 53 65 74  ;.  .    Tcl_Set
23e0: 45 6e 73 65 6d 62 6c 65 4d 61 70 70 69 6e 67 44  EnsembleMappingD
23f0: 69 63 74 28 69 6e 74 65 72 70 2c 20 74 6f 6b 65  ict(interp, toke
2400: 6e 2c 20 6d 61 70 4f 62 6a 29 3b 0a 2b 20 09 20  n, mapObj);.+ . 
2410: 20 20 20 54 63 6c 5f 53 65 74 45 6e 73 65 6d 62     Tcl_SetEnsemb
2420: 6c 65 50 61 72 61 6d 65 74 65 72 4c 69 73 74 28  leParameterList(
2430: 69 6e 74 65 72 70 2c 20 74 6f 6b 65 6e 2c 20 70  interp, token, p
2440: 61 72 61 6d 4f 62 6a 29 3b 0a 20 20 09 20 20 20  aramObj);.  .   
2450: 20 54 63 6c 5f 53 65 74 45 6e 73 65 6d 62 6c 65   Tcl_SetEnsemble
2460: 55 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 28 69  UnknownHandler(i
2470: 6e 74 65 72 70 2c 20 74 6f 6b 65 6e 2c 20 75 6e  nterp, token, un
2480: 6b 6e 6f 77 6e 4f 62 6a 29 3b 0a 20 20 09 20 20  knownObj);.  .  
2490: 20 20 54 63 6c 5f 53 65 74 45 6e 73 65 6d 62 6c    Tcl_SetEnsembl
24a0: 65 46 6c 61 67 73 28 69 6e 74 65 72 70 2c 20 74  eFlags(interp, t
24b0: 6f 6b 65 6e 2c 20 66 6c 61 67 73 29 3b 0a 20 20  oken, flags);.  
24c0: 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
24d0: 4f 4b 3b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  OK;.************
24e0: 2a 2a 2a 0a 2a 2a 2a 20 35 32 37 37 2c 35 32 38  ***.*** 5277,528
24f0: 32 20 2a 2a 2a 2a 0a 2d 2d 2d 20 35 33 32 31 2c  2 ****.--- 5321,
2500: 35 33 32 38 20 2d 2d 2d 2d 0a 20 20 20 20 20 20  5328 ----.      
2510: 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 73 75 62  ensemblePtr->sub
2520: 63 6d 64 4c 69 73 74 20 3d 20 4e 55 4c 4c 3b 0a  cmdList = NULL;.
2530: 20 20 20 20 20 20 65 6e 73 65 6d 62 6c 65 50 74        ensemblePt
2540: 72 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64 44 69 63  r->subcommandDic
2550: 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20  t = NULL;.      
2560: 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 66 6c 61  ensemblePtr->fla
2570: 67 73 20 3d 20 66 6c 61 67 73 3b 0a 2b 20 20 20  gs = flags;.+   
2580: 20 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e    ensemblePtr->n
2590: 75 6d 50 61 72 61 6d 65 74 65 72 73 20 3d 20 30  umParameters = 0
25a0: 3b 0a 2b 20 20 20 20 20 65 6e 73 65 6d 62 6c 65  ;.+     ensemble
25b0: 50 74 72 2d 3e 70 61 72 61 6d 65 74 65 72 4c 69  Ptr->parameterLi
25c0: 73 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20  st = NULL;.     
25d0: 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 75 6e   ensemblePtr->un
25e0: 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 20 3d 20 4e  knownHandler = N
25f0: 55 4c 4c 3b 0a 20 20 20 20 20 20 65 6e 73 65 6d  ULL;.      ensem
2600: 62 6c 65 50 74 72 2d 3e 74 6f 6b 65 6e 20 3d 20  blePtr->token = 
2610: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
2620: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 6e 61 6d  mand(interp, nam
2630: 65 2c 0a 20 20 09 20 20 20 20 4e 73 45 6e 73 65  e,.  .    NsEnse
2640: 6d 62 6c 65 49 6d 70 6c 65 6d 65 6e 74 61 74 69  mbleImplementati
2650: 6f 6e 43 6d 64 2c 20 65 6e 73 65 6d 62 6c 65 50  onCmd, ensembleP
2660: 74 72 2c 20 44 65 6c 65 74 65 45 6e 73 65 6d 62  tr, DeleteEnsemb
2670: 6c 65 43 6f 6e 66 69 67 29 3b 0a 2a 2a 2a 2a 2a  leConfig);.*****
2680: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 35  **********.*** 5
2690: 33 37 38 2c 35 33 38 33 20 2a 2a 2a 2a 0a 2d 2d  378,5383 ****.--
26a0: 2d 20 35 34 32 34 2c 35 35 30 35 20 2d 2d 2d 2d  - 5424,5505 ----
26b0: 0a 20 20 2f 2a 0a 20 20 20 2a 2d 2d 2d 2d 2d 2d  .  /*.   *------
26c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2700: 0a 20 20 20 2a 0a 2b 20 20 2a 20 54 63 6c 5f 53  .   *.+  * Tcl_S
2710: 65 74 45 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65  etEnsembleParame
2720: 74 65 72 4c 69 73 74 20 2d 2d 0a 2b 20 20 2a 0a  terList --.+  *.
2730: 2b 20 20 2a 09 53 65 74 20 74 68 65 20 70 61 72  +  *.Set the par
2740: 61 6d 65 74 65 72 20 6c 69 73 74 20 66 6f 72 20  ameter list for 
2750: 61 20 70 61 72 74 69 63 75 6c 61 72 20 65 6e 73  a particular ens
2760: 65 6d 62 6c 65 2e 0a 2b 20 20 2a 0a 2b 20 20 2a  emble..+  *.+  *
2770: 20 52 65 73 75 6c 74 73 3a 0a 2b 20 20 2a 09 54   Results:.+  *.T
2780: 63 6c 20 72 65 73 75 6c 74 20 63 6f 64 65 20 28  cl result code (
2790: 65 72 72 6f 72 20 69 66 20 63 6f 6d 6d 61 6e 64  error if command
27a0: 20 74 6f 6b 65 6e 20 64 6f 65 73 20 6e 6f 74 20   token does not 
27b0: 69 6e 64 69 63 61 74 65 20 61 6e 20 65 6e 73 65  indicate an ense
27c0: 6d 62 6c 65 0a 2b 20 20 2a 09 6f 72 20 74 68 65  mble.+  *.or the
27d0: 20 70 61 72 61 6d 65 74 65 72 20 6c 69 73 74 20   parameter list 
27e0: 2d 20 69 66 20 6e 6f 6e 2d 4e 55 4c 4c 20 2d 20  - if non-NULL - 
27f0: 69 73 20 6e 6f 74 20 61 20 6c 69 73 74 29 2e 0a  is not a list)..
2800: 2b 20 20 2a 0a 2b 20 20 2a 20 53 69 64 65 20 65  +  *.+  * Side e
2810: 66 66 65 63 74 73 3a 0a 2b 20 20 2a 09 54 68 65  ffects:.+  *.The
2820: 20 65 6e 73 65 6d 62 6c 65 20 69 73 20 75 70 64   ensemble is upd
2830: 61 74 65 64 20 61 6e 64 20 6d 61 72 6b 65 64 20  ated and marked 
2840: 66 6f 72 20 72 65 63 6f 6d 70 69 6c 61 74 69 6f  for recompilatio
2850: 6e 2e 0a 2b 20 20 2a 09 28 28 51 3a 20 49 73 20  n..+  *.((Q: Is 
2860: 74 68 65 20 6c 61 74 74 65 72 20 6e 65 63 65 73  the latter neces
2870: 73 61 72 79 3f 29 29 0a 2b 20 20 2a 0a 2b 20 20  sary?)).+  *.+  
2880: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
2890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28c0: 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 20 2a 2f 0a 2b 20  -------.+  */.+ 
28d0: 0a 2b 20 69 6e 74 0a 2b 20 54 63 6c 5f 53 65 74  .+ int.+ Tcl_Set
28e0: 45 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65 74 65  EnsembleParamete
28f0: 72 4c 69 73 74 28 0a 2b 20 20 20 20 20 54 63 6c  rList(.+     Tcl
2900: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
2910: 0a 2b 20 20 20 20 20 54 63 6c 5f 43 6f 6d 6d 61  .+     Tcl_Comma
2920: 6e 64 20 74 6f 6b 65 6e 2c 0a 2b 20 20 20 20 20  nd token,.+     
2930: 54 63 6c 5f 4f 62 6a 20 2a 70 61 72 61 6d 4c 69  Tcl_Obj *paramLi
2940: 73 74 29 0a 2b 20 7b 0a 2b 20 20 20 20 20 43 6f  st).+ {.+     Co
2950: 6d 6d 61 6e 64 20 2a 63 6d 64 50 74 72 20 3d 20  mmand *cmdPtr = 
2960: 28 43 6f 6d 6d 61 6e 64 20 2a 29 20 74 6f 6b 65  (Command *) toke
2970: 6e 3b 0a 2b 20 20 20 20 20 45 6e 73 65 6d 62 6c  n;.+     Ensembl
2980: 65 43 6f 6e 66 69 67 20 2a 65 6e 73 65 6d 62 6c  eConfig *ensembl
2990: 65 50 74 72 3b 0a 2b 20 20 20 20 20 54 63 6c 5f  ePtr;.+     Tcl_
29a0: 4f 62 6a 20 2a 6f 6c 64 4c 69 73 74 3b 0a 2b 20  Obj *oldList;.+ 
29b0: 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 3b 0a      int length;.
29c0: 2b 20 0a 2b 20 20 20 20 20 69 66 20 28 63 6d 64  + .+     if (cmd
29d0: 50 74 72 2d 3e 6f 62 6a 50 72 6f 63 20 21 3d 20  Ptr->objProc != 
29e0: 4e 73 45 6e 73 65 6d 62 6c 65 49 6d 70 6c 65 6d  NsEnsembleImplem
29f0: 65 6e 74 61 74 69 6f 6e 43 6d 64 29 20 7b 0a 2b  entationCmd) {.+
2a00: 20 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75   .Tcl_AppendResu
2a10: 6c 74 28 69 6e 74 65 72 70 2c 20 22 63 6f 6d 6d  lt(interp, "comm
2a20: 61 6e 64 20 69 73 20 6e 6f 74 20 61 6e 20 65 6e  and is not an en
2a30: 73 65 6d 62 6c 65 22 2c 20 4e 55 4c 4c 29 3b 0a  semble", NULL);.
2a40: 2b 20 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  + .return TCL_ER
2a50: 52 4f 52 3b 0a 2b 20 20 20 20 20 7d 0a 2b 20 20  ROR;.+     }.+  
2a60: 20 20 20 69 66 20 28 70 61 72 61 6d 4c 69 73 74     if (paramList
2a70: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 20 20 20   == NULL) {.+   
2a80: 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 30        length = 0
2a90: 3b 0a 2b 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ;.+     } else {
2aa0: 0a 2b 20 09 69 66 20 28 54 63 6c 4c 69 73 74 4f  .+ .if (TclListO
2ab0: 62 6a 4c 65 6e 67 74 68 28 69 6e 74 65 72 70 2c  bjLength(interp,
2ac0: 20 70 61 72 61 6d 4c 69 73 74 2c 20 26 6c 65 6e   paramList, &len
2ad0: 67 74 68 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20  gth) != TCL_OK) 
2ae0: 7b 0a 2b 20 09 20 20 20 20 72 65 74 75 72 6e 20  {.+ .    return 
2af0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 09 7d 0a  TCL_ERROR;.+ .}.
2b00: 2b 20 09 69 66 20 28 6c 65 6e 67 74 68 20 3c 20  + .if (length < 
2b10: 31 29 20 7b 0a 2b 20 09 20 20 20 20 70 61 72 61  1) {.+ .    para
2b20: 6d 4c 69 73 74 20 3d 20 4e 55 4c 4c 3b 0a 2b 20  mList = NULL;.+ 
2b30: 09 7d 0a 2b 20 20 20 20 20 7d 0a 2b 20 0a 2b 20  .}.+     }.+ .+ 
2b40: 20 20 20 20 65 6e 73 65 6d 62 6c 65 50 74 72 20      ensemblePtr 
2b50: 3d 20 63 6d 64 50 74 72 2d 3e 6f 62 6a 43 6c 69  = cmdPtr->objCli
2b60: 65 6e 74 44 61 74 61 3b 0a 2b 20 20 20 20 20 6f  entData;.+     o
2b70: 6c 64 4c 69 73 74 20 3d 20 65 6e 73 65 6d 62 6c  ldList = ensembl
2b80: 65 50 74 72 2d 3e 70 61 72 61 6d 65 74 65 72 4c  ePtr->parameterL
2b90: 69 73 74 3b 0a 2b 20 20 20 20 20 65 6e 73 65 6d  ist;.+     ensem
2ba0: 62 6c 65 50 74 72 2d 3e 70 61 72 61 6d 65 74 65  blePtr->paramete
2bb0: 72 4c 69 73 74 20 3d 20 70 61 72 61 6d 4c 69 73  rList = paramLis
2bc0: 74 3b 0a 2b 20 20 20 20 20 69 66 20 28 70 61 72  t;.+     if (par
2bd0: 61 6d 4c 69 73 74 20 21 3d 20 4e 55 4c 4c 29 20  amList != NULL) 
2be0: 7b 0a 2b 20 09 54 63 6c 5f 49 6e 63 72 52 65 66  {.+ .Tcl_IncrRef
2bf0: 43 6f 75 6e 74 28 70 61 72 61 6d 4c 69 73 74 29  Count(paramList)
2c00: 3b 0a 2b 20 20 20 20 20 7d 0a 2b 20 20 20 20 20  ;.+     }.+     
2c10: 69 66 20 28 6f 6c 64 4c 69 73 74 20 21 3d 20 4e  if (oldList != N
2c20: 55 4c 4c 29 20 7b 0a 2b 20 09 54 63 6c 44 65 63  ULL) {.+ .TclDec
2c30: 72 52 65 66 43 6f 75 6e 74 28 6f 6c 64 4c 69 73  rRefCount(oldLis
2c40: 74 29 3b 0a 2b 20 20 20 20 20 7d 0a 2b 20 20 20  t);.+     }.+   
2c50: 20 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e    ensemblePtr->n
2c60: 75 6d 50 61 72 61 6d 65 74 65 72 73 20 3d 20 6c  umParameters = l
2c70: 65 6e 67 74 68 3b 0a 2b 20 0a 2b 20 20 20 20 20  ength;.+ .+     
2c80: 2f 2a 0a 2b 20 20 20 20 20 20 2a 20 54 72 69 67  /*.+      * Trig
2c90: 67 65 72 20 61 6e 20 65 76 65 6e 74 75 61 6c 20  ger an eventual 
2ca0: 72 65 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66  recomputation of
2cb0: 20 74 68 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f   the ensemble co
2cc0: 6d 6d 61 6e 64 20 73 65 74 2e 20 4e 6f 74 65 0a  mmand set. Note.
2cd0: 2b 20 20 20 20 20 20 2a 20 74 68 61 74 20 74 68  +      * that th
2ce0: 69 73 20 69 73 20 73 6c 69 67 68 74 6c 79 20 74  is is slightly t
2cf0: 72 69 63 6b 79 2c 20 61 73 20 69 74 20 6d 65 61  ricky, as it mea
2d00: 6e 73 20 74 68 61 74 20 77 65 20 61 72 65 20 6e  ns that we are n
2d10: 6f 74 20 61 63 74 75 61 6c 6c 79 0a 2b 20 20 20  ot actually.+   
2d20: 20 20 20 2a 20 63 6f 75 6e 74 69 6e 67 20 74 68     * counting th
2d30: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65  e number of name
2d40: 73 70 61 63 65 20 65 78 70 6f 72 74 20 61 63 74  space export act
2d50: 69 6f 6e 73 2c 20 62 75 74 20 69 74 20 69 73 20  ions, but it is 
2d60: 74 68 65 20 73 69 6d 70 6c 65 73 74 0a 2b 20 20  the simplest.+  
2d70: 20 20 20 20 2a 20 77 61 79 20 74 6f 20 67 6f 21      * way to go!
2d80: 0a 2b 20 20 20 20 20 20 2a 2f 0a 2b 20 0a 2b 20  .+      */.+ .+ 
2d90: 20 20 20 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d      ensemblePtr-
2da0: 3e 6e 73 50 74 72 2d 3e 65 78 70 6f 72 74 4c 6f  >nsPtr->exportLo
2db0: 6f 6b 75 70 45 70 6f 63 68 2b 2b 3b 0a 2b 20 0a  okupEpoch++;.+ .
2dc0: 2b 20 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 20  +     /*.+      
2dd0: 2a 20 53 70 65 63 69 61 6c 20 68 61 63 6b 20 74  * Special hack t
2de0: 6f 20 6d 61 6b 65 20 63 6f 6d 70 69 6c 69 6e 67  o make compiling
2df0: 20 6f 66 20 5b 69 6e 66 6f 20 65 78 69 73 74 73   of [info exists
2e00: 5d 20 77 6f 72 6b 20 77 68 65 6e 20 74 68 65 0a  ] work when the.
2e10: 2b 20 20 20 20 20 20 2a 20 64 69 63 74 69 6f 6e  +      * diction
2e20: 61 72 79 20 69 73 20 6d 6f 64 69 66 69 65 64 2e  ary is modified.
2e30: 0a 2b 20 20 20 20 20 20 2a 2f 0a 2b 20 0a 2b 20  .+      */.+ .+ 
2e40: 20 20 20 20 69 66 20 28 63 6d 64 50 74 72 2d 3e      if (cmdPtr->
2e50: 63 6f 6d 70 69 6c 65 50 72 6f 63 20 21 3d 20 4e  compileProc != N
2e60: 55 4c 4c 29 20 7b 0a 2b 20 09 28 28 49 6e 74 65  ULL) {.+ .((Inte
2e70: 72 70 20 2a 29 69 6e 74 65 72 70 29 2d 3e 63 6f  rp *)interp)->co
2e80: 6d 70 69 6c 65 45 70 6f 63 68 2b 2b 3b 0a 2b 20  mpileEpoch++;.+ 
2e90: 20 20 20 20 7d 0a 2b 20 0a 2b 20 20 20 20 20 72      }.+ .+     r
2ea0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 20  eturn TCL_OK;.+ 
2eb0: 7d 0a 2b 20 0c 0a 2b 20 2f 2a 0a 2b 20 20 2a 2d  }.+ ..+ /*.+  *-
2ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f00: 2d 2d 2d 2d 2d 0a 2b 20 20 2a 0a 20 20 20 2a 20  -----.+  *.   * 
2f10: 54 63 6c 5f 53 65 74 45 6e 73 65 6d 62 6c 65 4d  Tcl_SetEnsembleM
2f20: 61 70 70 69 6e 67 44 69 63 74 20 2d 2d 0a 20 20  appingDict --.  
2f30: 20 2a 0a 20 20 20 2a 09 53 65 74 20 74 68 65 20   *.   *.Set the 
2f40: 6d 61 70 70 69 6e 67 20 64 69 63 74 69 6f 6e 61  mapping dictiona
2f50: 72 79 20 66 6f 72 20 61 20 70 61 72 74 69 63 75  ry for a particu
2f60: 6c 61 72 20 65 6e 73 65 6d 62 6c 65 2e 0a 2a 2a  lar ensemble..**
2f70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
2f80: 2a 20 35 36 35 30 2c 35 36 35 35 20 2a 2a 2a 2a  * 5650,5655 ****
2f90: 0a 2d 2d 2d 20 35 37 37 32 2c 35 38 31 37 20 2d  .--- 5772,5817 -
2fa0: 2d 2d 2d 0a 20 20 2f 2a 0a 20 20 20 2a 2d 2d 2d  ---.  /*.   *---
2fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ff0: 2d 2d 2d 0a 20 20 20 2a 0a 2b 20 20 2a 20 54 63  ---.   *.+  * Tc
3000: 6c 5f 47 65 74 45 6e 73 65 6d 62 6c 65 50 61 72  l_GetEnsemblePar
3010: 61 6d 65 74 65 72 4c 69 73 74 20 2d 2d 0a 2b 20  ameterList --.+ 
3020: 20 2a 0a 2b 20 20 2a 09 47 65 74 20 74 68 65 20   *.+  *.Get the 
3030: 6c 69 73 74 20 6f 66 20 70 61 72 61 6d 65 74 65  list of paramete
3040: 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
3050: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
3060: 65 6e 73 65 6d 62 6c 65 2e 0a 2b 20 20 2a 0a 2b  ensemble..+  *.+
3070: 20 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20 20    * Results:.+  
3080: 2a 09 54 63 6c 20 72 65 73 75 6c 74 20 63 6f 64  *.Tcl result cod
3090: 65 20 28 65 72 72 6f 72 20 69 66 20 63 6f 6d 6d  e (error if comm
30a0: 61 6e 64 20 74 6f 6b 65 6e 20 64 6f 65 73 20 6e  and token does n
30b0: 6f 74 20 69 6e 64 69 63 61 74 65 20 61 6e 0a 2b  ot indicate an.+
30c0: 20 20 2a 09 65 6e 73 65 6d 62 6c 65 29 2e 20 54    *.ensemble). T
30d0: 68 65 20 6c 69 73 74 20 6f 66 20 70 61 72 61 6d  he list of param
30e0: 65 74 65 72 73 20 69 73 20 72 65 74 75 72 6e 65  eters is returne
30f0: 64 20 62 79 20 75 70 64 61 74 69 6e 67 20 74 68  d by updating th
3100: 65 0a 2b 20 20 2a 09 76 61 72 69 61 62 6c 65 20  e.+  *.variable 
3110: 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 74 68  pointed to by th
3120: 65 20 6c 61 73 74 20 70 61 72 61 6d 65 74 65 72  e last parameter
3130: 20 28 4e 55 4c 4c 20 69 66 20 74 68 65 72 65 20   (NULL if there 
3140: 61 72 65 20 0a 2b 20 20 2a 09 6e 6f 20 70 61 72  are .+  *.no par
3150: 61 6d 65 74 65 72 73 29 2e 0a 2b 20 20 2a 0a 2b  ameters)..+  *.+
3160: 20 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73    * Side effects
3170: 3a 0a 2b 20 20 2a 09 4e 6f 6e 65 0a 2b 20 20 2a  :.+  *.None.+  *
3180: 0a 2b 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .+  *-----------
3190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
31a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
31b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
31c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 20 2a  -----------.+  *
31d0: 2f 0a 2b 20 0a 2b 20 69 6e 74 0a 2b 20 54 63 6c  /.+ .+ int.+ Tcl
31e0: 5f 47 65 74 45 6e 73 65 6d 62 6c 65 50 61 72 61  _GetEnsemblePara
31f0: 6d 65 74 65 72 4c 69 73 74 28 0a 2b 20 20 20 20  meterList(.+    
3200: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
3210: 65 72 70 2c 0a 2b 20 20 20 20 20 54 63 6c 5f 43  erp,.+     Tcl_C
3220: 6f 6d 6d 61 6e 64 20 74 6f 6b 65 6e 2c 0a 2b 20  ommand token,.+ 
3230: 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 2a 70 61      Tcl_Obj **pa
3240: 72 61 6d 4c 69 73 74 50 74 72 29 0a 2b 20 7b 0a  ramListPtr).+ {.
3250: 2b 20 20 20 20 20 43 6f 6d 6d 61 6e 64 20 2a 63  +     Command *c
3260: 6d 64 50 74 72 20 3d 20 28 43 6f 6d 6d 61 6e 64  mdPtr = (Command
3270: 20 2a 29 20 74 6f 6b 65 6e 3b 0a 2b 20 20 20 20   *) token;.+    
3280: 20 45 6e 73 65 6d 62 6c 65 43 6f 6e 66 69 67 20   EnsembleConfig 
3290: 2a 65 6e 73 65 6d 62 6c 65 50 74 72 3b 0a 2b 20  *ensemblePtr;.+ 
32a0: 0a 2b 20 20 20 20 20 69 66 20 28 63 6d 64 50 74  .+     if (cmdPt
32b0: 72 2d 3e 6f 62 6a 50 72 6f 63 20 21 3d 20 4e 73  r->objProc != Ns
32c0: 45 6e 73 65 6d 62 6c 65 49 6d 70 6c 65 6d 65 6e  EnsembleImplemen
32d0: 74 61 74 69 6f 6e 43 6d 64 29 20 7b 0a 2b 20 09  tationCmd) {.+ .
32e0: 69 66 20 28 69 6e 74 65 72 70 20 21 3d 20 4e 55  if (interp != NU
32f0: 4c 4c 29 20 7b 0a 2b 20 09 20 20 20 20 54 63 6c  LL) {.+ .    Tcl
3300: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
3310: 74 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64 20 69  terp, "command i
3320: 73 20 6e 6f 74 20 61 6e 20 65 6e 73 65 6d 62 6c  s not an ensembl
3330: 65 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 20 09 7d 0a  e", NULL);.+ .}.
3340: 2b 20 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  + .return TCL_ER
3350: 52 4f 52 3b 0a 2b 20 20 20 20 20 7d 0a 2b 20 0a  ROR;.+     }.+ .
3360: 2b 20 20 20 20 20 65 6e 73 65 6d 62 6c 65 50 74  +     ensemblePt
3370: 72 20 3d 20 63 6d 64 50 74 72 2d 3e 6f 62 6a 43  r = cmdPtr->objC
3380: 6c 69 65 6e 74 44 61 74 61 3b 0a 2b 20 20 20 20  lientData;.+    
3390: 20 2a 70 61 72 61 6d 4c 69 73 74 50 74 72 20 3d   *paramListPtr =
33a0: 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 70 61   ensemblePtr->pa
33b0: 72 61 6d 65 74 65 72 4c 69 73 74 3b 0a 2b 20 20  rameterList;.+  
33c0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b     return TCL_OK
33d0: 3b 0a 2b 20 7d 0a 2b 20 0c 0a 2b 20 2f 2a 0a 2b  ;.+ }.+ ..+ /*.+
33e0: 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    *-------------
33f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 20 2a 0a 20  ---------.+  *. 
3430: 20 20 2a 20 54 63 6c 5f 47 65 74 45 6e 73 65 6d    * Tcl_GetEnsem
3440: 62 6c 65 4d 61 70 70 69 6e 67 44 69 63 74 20 2d  bleMappingDict -
3450: 2d 0a 20 20 20 2a 0a 20 20 20 2a 09 47 65 74 20  -.   *.   *.Get 
3460: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6d 61 70 70  the command mapp
3470: 69 6e 67 20 64 69 63 74 69 6f 6e 61 72 79 20 61  ing dictionary a
3480: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
3490: 20 70 61 72 74 69 63 75 6c 61 72 0a 2a 2a 2a 2a   particular.****
34a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20  ***********.*** 
34b0: 36 30 31 35 2c 36 30 32 36 20 2a 2a 2a 2a 0a 20  6015,6026 ****. 
34c0: 20 20 20 20 20 69 6e 74 20 70 72 65 66 69 78 4f       int prefixO
34d0: 62 6a 63 3b 09 09 2f 2a 20 53 69 7a 65 20 6f 66  bjc;../* Size of
34e0: 20 70 72 65 66 69 78 4f 62 6a 76 20 6f 66 20 63   prefixObjv of c
34f0: 6f 75 72 73 65 21 20 2a 2f 0a 20 20 20 20 20 20  ourse! */.      
3500: 69 6e 74 20 72 65 70 61 72 73 65 43 6f 75 6e 74  int reparseCount
3510: 20 3d 20 30 3b 09 2f 2a 20 4e 75 6d 62 65 72 20   = 0;./* Number 
3520: 6f 66 20 72 65 70 61 72 73 65 73 2e 20 2a 2f 0a  of reparses. */.
3530: 20 20 0a 21 20 20 20 20 20 69 66 20 28 6f 62 6a    .!     if (obj
3540: 63 20 3c 20 32 29 20 7b 0a 21 20 09 54 63 6c 5f  c < 2) {.! .Tcl_
3550: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
3560: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 73  erp, 1, objv, "s
3570: 75 62 63 6f 6d 6d 61 6e 64 20 3f 61 72 67 75 6d  ubcommand ?argum
3580: 65 6e 74 20 2e 2e 2e 3f 22 29 3b 0a 20 20 09 72  ent ...?");.  .r
3590: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
35a0: 0a 20 20 20 20 20 20 7d 0a 20 20 0a 2d 20 20 20  .      }.  .-   
35b0: 72 65 73 74 61 72 74 45 6e 73 65 6d 62 6c 65 50  restartEnsembleP
35c0: 61 72 73 65 3a 0a 20 20 20 20 20 20 69 66 20 28  arse:.      if (
35d0: 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e 73 50  ensemblePtr->nsP
35e0: 74 72 2d 3e 66 6c 61 67 73 20 26 20 4e 53 5f 44  tr->flags & NS_D
35f0: 59 49 4e 47 29 20 7b 0a 20 20 09 2f 2a 0a 20 20  YING) {.  ./*.  
3600: 09 20 2a 20 44 6f 6e 27 74 20 6b 6e 6f 77 20 68  . * Don't know h
3610: 6f 77 20 77 65 20 67 6f 74 20 68 65 72 65 2c 20  ow we got here, 
3620: 62 75 74 20 6d 61 6b 65 20 74 68 69 6e 67 73 20  but make things 
3630: 67 69 76 65 20 75 70 20 71 75 69 63 6b 6c 79 2e  give up quickly.
3640: 0a 2d 2d 2d 20 36 31 37 37 2c 36 32 31 35 20 2d  .--- 6177,6215 -
3650: 2d 2d 2d 0a 20 20 20 20 20 20 69 6e 74 20 70 72  ---.      int pr
3660: 65 66 69 78 4f 62 6a 63 3b 09 09 2f 2a 20 53 69  efixObjc;../* Si
3670: 7a 65 20 6f 66 20 70 72 65 66 69 78 4f 62 6a 76  ze of prefixObjv
3680: 20 6f 66 20 63 6f 75 72 73 65 21 20 2a 2f 0a 20   of course! */. 
3690: 20 20 20 20 20 69 6e 74 20 72 65 70 61 72 73 65       int reparse
36a0: 43 6f 75 6e 74 20 3d 20 30 3b 09 2f 2a 20 4e 75  Count = 0;./* Nu
36b0: 6d 62 65 72 20 6f 66 20 72 65 70 61 72 73 65 73  mber of reparses
36c0: 2e 20 2a 2f 0a 20 20 0a 21 20 20 20 72 65 73 74  . */.  .!   rest
36d0: 61 72 74 45 6e 73 65 6d 62 6c 65 50 61 72 73 65  artEnsembleParse
36e0: 3a 0a 21 20 20 20 20 20 2f 2a 20 0a 21 20 20 20  :.!     /* .!   
36f0: 20 20 20 2a 20 4d 75 73 74 20 72 65 63 68 65 63     * Must rechec
3700: 6b 20 6f 62 6a 63 2c 20 73 69 6e 63 65 20 6e 75  k objc, since nu
3710: 6d 50 61 72 61 6d 65 74 65 72 73 20 6d 61 79 20  mParameters may 
3720: 68 61 76 65 20 63 68 61 6e 67 65 64 2e 0a 21 20  have changed..! 
3730: 20 20 20 20 20 2a 20 43 66 2e 20 74 65 73 74 20       * Cf. test 
3740: 6e 61 6d 65 73 70 61 63 65 2d 35 33 2e 39 2e 0a  namespace-53.9..
3750: 21 20 20 20 20 20 20 2a 2f 0a 21 20 20 20 20 20  !      */.!     
3760: 69 66 20 28 6f 62 6a 63 20 3c 20 32 20 2b 20 65  if (objc < 2 + e
3770: 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e 75 6d 50  nsemblePtr->numP
3780: 61 72 61 6d 65 74 65 72 73 29 20 7b 0a 21 20 09  arameters) {.! .
3790: 2f 2a 20 0a 21 20 09 20 2a 20 57 65 20 64 6f 6e  /* .! . * We don
37a0: 27 74 20 68 61 76 65 20 61 20 73 75 62 63 6f 6d  't have a subcom
37b0: 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 2e 0a 21  mand argument..!
37c0: 20 09 20 2a 20 4d 61 6b 65 20 65 72 72 6f 72 20   . * Make error 
37d0: 6d 65 73 73 61 67 65 2e 0a 21 20 09 20 2a 2f 0a  message..! . */.
37e0: 21 20 20 20 20 20 20 20 20 20 54 63 6c 5f 44 53  !         Tcl_DS
37f0: 74 72 69 6e 67 20 62 75 66 3b 09 2f 2a 20 4d 65  tring buf;./* Me
3800: 73 73 61 67 65 20 62 65 69 6e 67 20 62 75 69 6c  ssage being buil
3810: 74 20 2a 2f 0a 21 20 20 20 20 20 20 20 20 20 54  t */.!         T
3820: 63 6c 5f 4f 62 6a 20 2a 2a 65 6c 65 6d 50 74 72  cl_Obj **elemPtr
3830: 73 3b 20 20 20 20 20 2f 2a 20 50 61 72 61 6d 65  s;     /* Parame
3840: 74 65 72 20 6e 61 6d 65 73 20 2a 2f 0a 21 20 20  ter names */.!  
3850: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 09         int len;.
3860: 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61  ./* Number of pa
3870: 72 61 6d 65 74 65 72 73 20 74 6f 20 61 70 70 65  rameters to appe
3880: 6e 64 20 2a 2f 0a 21 20 20 20 20 20 20 20 20 20  nd */.!         
3890: 0a 21 20 20 20 20 20 20 20 20 20 54 63 6c 5f 44  .!         Tcl_D
38a0: 53 74 72 69 6e 67 49 6e 69 74 28 26 62 75 66 29  StringInit(&buf)
38b0: 3b 0a 21 20 20 20 20 20 20 20 20 20 69 66 20 28  ;.!         if (
38c0: 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 70 61 72  ensemblePtr->par
38d0: 61 6d 65 74 65 72 4c 69 73 74 20 3d 3d 20 4e 55  ameterList == NU
38e0: 4c 4c 29 20 7b 0a 21 20 20 20 20 20 20 20 20 20  LL) {.!         
38f0: 20 20 20 20 6c 65 6e 20 3d 20 30 3b 0a 21 20 20      len = 0;.!  
3900: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66         } else if
3910: 20 28 54 63 6c 4c 69 73 74 4f 62 6a 47 65 74 45   (TclListObjGetE
3920: 6c 65 6d 65 6e 74 73 28 4e 55 4c 4c 2c 20 65 6e  lements(NULL, en
3930: 73 65 6d 62 6c 65 50 74 72 2d 3e 70 61 72 61 6d  semblePtr->param
3940: 65 74 65 72 4c 69 73 74 2c 20 0a 21 20 20 20 20  eterList, .!    
3950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
3970: 6c 65 6e 2c 20 26 65 6c 65 6d 50 74 72 73 29 20  len, &elemPtrs) 
3980: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 21 20 20  != TCL_OK) {.!  
3990: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
39a0: 69 73 20 63 61 6e 27 74 20 68 61 70 70 65 6e 2e  is can't happen.
39b0: 20 2a 2f 0a 21 20 20 20 20 20 20 20 20 20 20 20   */.!           
39c0: 20 20 54 63 6c 5f 50 61 6e 69 63 28 22 4c 69 73    Tcl_Panic("Lis
39d0: 74 20 6f 66 20 65 6e 73 65 6d 62 6c 65 20 70 61  t of ensemble pa
39e0: 72 61 6d 65 74 65 72 73 20 69 73 20 6e 6f 74 20  rameters is not 
39f0: 61 20 6c 69 73 74 22 29 3b 0a 21 20 20 20 20 20  a list");.!     
3a00: 20 20 20 20 7d 0a 21 20 20 20 20 20 20 20 20 20      }.!         
3a10: 66 6f 72 20 28 3b 20 6c 65 6e 3e 30 3b 20 6c 65  for (; len>0; le
3a20: 6e 2d 2d 2c 65 6c 65 6d 50 74 72 73 2b 2b 29 20  n--,elemPtrs++) 
3a30: 7b 0a 21 20 20 20 20 20 20 20 20 20 20 20 20 20  {.!             
3a40: 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 70 65 6e  Tcl_DStringAppen
3a50: 64 28 26 62 75 66 2c 20 54 63 6c 5f 47 65 74 53  d(&buf, Tcl_GetS
3a60: 74 72 69 6e 67 28 2a 65 6c 65 6d 50 74 72 73 29  tring(*elemPtrs)
3a70: 2c 20 2d 31 29 3b 0a 21 20 20 20 20 20 20 20 20  , -1);.!        
3a80: 20 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67       Tcl_DString
3a90: 41 70 70 65 6e 64 28 26 62 75 66 2c 20 22 20 22  Append(&buf, " "
3aa0: 2c 20 2d 31 29 3b 0a 21 20 20 20 20 20 20 20 20  , -1);.!        
3ab0: 20 7d 0a 21 20 20 20 20 20 20 20 20 20 54 63 6c   }.!         Tcl
3ac0: 5f 44 53 74 72 69 6e 67 41 70 70 65 6e 64 28 26  _DStringAppend(&
3ad0: 62 75 66 2c 20 22 73 75 62 63 6f 6d 6d 61 6e 64  buf, "subcommand
3ae0: 20 3f 61 72 67 75 6d 65 6e 74 20 2e 2e 2e 3f 22   ?argument ...?"
3af0: 2c 20 2d 31 29 3b 0a 21 20 09 54 63 6c 5f 57 72  , -1);.! .Tcl_Wr
3b00: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
3b10: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 54 63 6c 5f  p, 1, objv, Tcl_
3b20: 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26 62 75  DStringValue(&bu
3b30: 66 29 29 3b 0a 21 20 20 20 20 20 20 20 20 20 54  f));.!         T
3b40: 63 6c 5f 44 53 74 72 69 6e 67 46 72 65 65 28 26  cl_DStringFree(&
3b50: 62 75 66 29 3b 0a 21 20 20 20 20 20 20 20 20 20  buf);.!         
3b60: 0a 20 20 09 72 65 74 75 72 6e 20 54 43 4c 5f 45  .  .return TCL_E
3b70: 52 52 4f 52 3b 0a 20 20 20 20 20 20 7d 0a 20 20  RROR;.      }.  
3b80: 0a 20 20 20 20 20 20 69 66 20 28 65 6e 73 65 6d  .      if (ensem
3b90: 62 6c 65 50 74 72 2d 3e 6e 73 50 74 72 2d 3e 66  blePtr->nsPtr->f
3ba0: 6c 61 67 73 20 26 20 4e 53 5f 44 59 49 4e 47 29  lags & NS_DYING)
3bb0: 20 7b 0a 20 20 09 2f 2a 0a 20 20 09 20 2a 20 44   {.  ./*.  . * D
3bc0: 6f 6e 27 74 20 6b 6e 6f 77 20 68 6f 77 20 77 65  on't know how we
3bd0: 20 67 6f 74 20 68 65 72 65 2c 20 62 75 74 20 6d   got here, but m
3be0: 61 6b 65 20 74 68 69 6e 67 73 20 67 69 76 65 20  ake things give 
3bf0: 75 70 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 2a 2a  up quickly..****
3c00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20  ***********.*** 
3c10: 36 30 34 36 2c 36 30 35 33 20 2a 2a 2a 2a 0a 20  6046,6053 ****. 
3c20: 20 09 20 2a 20 70 61 72 74 20 77 68 65 72 65 20   . * part where 
3c30: 77 65 20 64 6f 20 74 68 65 20 69 6e 76 6f 63 61  we do the invoca
3c40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 75 62 63  tion of the subc
3c50: 6f 6d 6d 61 6e 64 2e 0a 20 20 09 20 2a 2f 0a 20  ommand..  . */. 
3c60: 20 0a 21 20 09 69 66 20 28 6f 62 6a 76 5b 31 5d   .! .if (objv[1]
3c70: 2d 3e 74 79 70 65 50 74 72 20 3d 3d 20 26 74 63  ->typePtr == &tc
3c80: 6c 45 6e 73 65 6d 62 6c 65 43 6d 64 54 79 70 65  lEnsembleCmdType
3c90: 29 20 7b 0a 21 20 09 20 20 20 20 45 6e 73 65 6d  ) {.! .    Ensem
3ca0: 62 6c 65 43 6d 64 52 65 70 20 2a 65 6e 73 65 6d  bleCmdRep *ensem
3cb0: 62 6c 65 43 6d 64 20 3d 20 6f 62 6a 76 5b 31 5d  bleCmd = objv[1]
3cc0: 2d 3e 69 6e 74 65 72 6e 61 6c 52 65 70 2e 6f 74  ->internalRep.ot
3cd0: 68 65 72 56 61 6c 75 65 50 74 72 3b 0a 20 20 0a  herValuePtr;.  .
3ce0: 20 20 09 20 20 20 20 69 66 20 28 65 6e 73 65 6d    .    if (ensem
3cf0: 62 6c 65 43 6d 64 2d 3e 6e 73 50 74 72 20 3d 3d  bleCmd->nsPtr ==
3d00: 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e 73   ensemblePtr->ns
3d10: 50 74 72 20 26 26 0a 20 20 09 09 20 20 20 20 65  Ptr &&.  ..    e
3d20: 6e 73 65 6d 62 6c 65 43 6d 64 2d 3e 65 70 6f 63  nsembleCmd->epoc
3d30: 68 20 3d 3d 20 65 6e 73 65 6d 62 6c 65 50 74 72  h == ensemblePtr
3d40: 2d 3e 65 70 6f 63 68 20 26 26 0a 2d 2d 2d 20 36  ->epoch &&.--- 6
3d50: 32 33 35 2c 36 32 34 33 20 2d 2d 2d 2d 0a 20 20  235,6243 ----.  
3d60: 09 20 2a 20 70 61 72 74 20 77 68 65 72 65 20 77  . * part where w
3d70: 65 20 64 6f 20 74 68 65 20 69 6e 76 6f 63 61 74  e do the invocat
3d80: 69 6f 6e 20 6f 66 20 74 68 65 20 73 75 62 63 6f  ion of the subco
3d90: 6d 6d 61 6e 64 2e 0a 20 20 09 20 2a 2f 0a 20 20  mmand..  . */.  
3da0: 0a 21 20 09 69 66 20 28 6f 62 6a 76 5b 31 20 2b  .! .if (objv[1 +
3db0: 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e 75   ensemblePtr->nu
3dc0: 6d 50 61 72 61 6d 65 74 65 72 73 5d 2d 3e 74 79  mParameters]->ty
3dd0: 70 65 50 74 72 20 3d 3d 20 26 74 63 6c 45 6e 73  pePtr == &tclEns
3de0: 65 6d 62 6c 65 43 6d 64 54 79 70 65 29 20 7b 0a  embleCmdType) {.
3df0: 21 20 09 20 20 20 20 45 6e 73 65 6d 62 6c 65 43  ! .    EnsembleC
3e00: 6d 64 52 65 70 20 2a 65 6e 73 65 6d 62 6c 65 43  mdRep *ensembleC
3e10: 6d 64 20 3d 20 0a 21 20 20 20 20 20 20 20 20 20  md = .!         
3e20: 20 20 20 20 20 20 6f 62 6a 76 5b 31 20 2b 20 65        objv[1 + e
3e30: 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e 75 6d 50  nsemblePtr->numP
3e40: 61 72 61 6d 65 74 65 72 73 5d 2d 3e 69 6e 74 65  arameters]->inte
3e50: 72 6e 61 6c 52 65 70 2e 6f 74 68 65 72 56 61 6c  rnalRep.otherVal
3e60: 75 65 50 74 72 3b 0a 20 20 0a 20 20 09 20 20 20  uePtr;.  .  .   
3e70: 20 69 66 20 28 65 6e 73 65 6d 62 6c 65 43 6d 64   if (ensembleCmd
3e80: 2d 3e 6e 73 50 74 72 20 3d 3d 20 65 6e 73 65 6d  ->nsPtr == ensem
3e90: 62 6c 65 50 74 72 2d 3e 6e 73 50 74 72 20 26 26  blePtr->nsPtr &&
3ea0: 0a 20 20 09 09 20 20 20 20 65 6e 73 65 6d 62 6c  .  ..    ensembl
3eb0: 65 43 6d 64 2d 3e 65 70 6f 63 68 20 3d 3d 20 65  eCmd->epoch == e
3ec0: 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 65 70 6f 63  nsemblePtr->epoc
3ed0: 68 20 26 26 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  h &&.***********
3ee0: 2a 2a 2a 2a 0a 2a 2a 2a 20 36 30 36 38 2c 36 30  ****.*** 6068,60
3ef0: 37 34 20 2a 2a 2a 2a 0a 20 20 20 20 20 20 20 2a  74 ****.       *
3f00: 2f 0a 20 20 0a 20 20 20 20 20 20 68 50 74 72 20  /.  .      hPtr 
3f10: 3d 20 54 63 6c 5f 46 69 6e 64 48 61 73 68 45 6e  = Tcl_FindHashEn
3f20: 74 72 79 28 26 65 6e 73 65 6d 62 6c 65 50 74 72  try(&ensemblePtr
3f30: 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64 54 61 62 6c  ->subcommandTabl
3f40: 65 2c 0a 21 20 09 20 20 20 20 54 63 6c 47 65 74  e,.! .    TclGet
3f50: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 29  String(objv[1]))
3f60: 3b 0a 20 20 20 20 20 20 69 66 20 28 68 50 74 72  ;.      if (hPtr
3f70: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 09 63   != NULL) {.  .c
3f80: 68 61 72 20 2a 66 75 6c 6c 4e 61 6d 65 20 3d 20  har *fullName = 
3f90: 54 63 6c 5f 47 65 74 48 61 73 68 4b 65 79 28 26  Tcl_GetHashKey(&
3fa0: 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 73 75 62  ensemblePtr->sub
3fb0: 63 6f 6d 6d 61 6e 64 54 61 62 6c 65 2c 20 68 50  commandTable, hP
3fc0: 74 72 29 3b 0a 20 20 0a 2d 2d 2d 20 36 32 35 38  tr);.  .--- 6258
3fd0: 2c 36 32 36 34 20 2d 2d 2d 2d 0a 20 20 20 20 20  ,6264 ----.     
3fe0: 20 20 2a 2f 0a 20 20 0a 20 20 20 20 20 20 68 50    */.  .      hP
3ff0: 74 72 20 3d 20 54 63 6c 5f 46 69 6e 64 48 61 73  tr = Tcl_FindHas
4000: 68 45 6e 74 72 79 28 26 65 6e 73 65 6d 62 6c 65  hEntry(&ensemble
4010: 50 74 72 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64 54  Ptr->subcommandT
4020: 61 62 6c 65 2c 0a 21 20 09 20 20 20 20 54 63 6c  able,.! .    Tcl
4030: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
4040: 20 2b 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e   + ensemblePtr->
4050: 6e 75 6d 50 61 72 61 6d 65 74 65 72 73 5d 29 29  numParameters]))
4060: 3b 0a 20 20 20 20 20 20 69 66 20 28 68 50 74 72  ;.      if (hPtr
4070: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 09 63   != NULL) {.  .c
4080: 68 61 72 20 2a 66 75 6c 6c 4e 61 6d 65 20 3d 20  har *fullName = 
4090: 54 63 6c 5f 47 65 74 48 61 73 68 4b 65 79 28 26  Tcl_GetHashKey(&
40a0: 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 73 75 62  ensemblePtr->sub
40b0: 63 6f 6d 6d 61 6e 64 54 61 62 6c 65 2c 20 68 50  commandTable, hP
40c0: 74 72 29 3b 0a 20 20 0a 2a 2a 2a 2a 2a 2a 2a 2a  tr);.  .********
40d0: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 36 30 37 38  *******.*** 6078
40e0: 2c 36 30 38 34 20 2a 2a 2a 2a 0a 20 20 09 20 2a  ,6084 ****.  . *
40f0: 20 43 61 63 68 65 20 66 6f 72 20 6c 61 74 65 72   Cache for later
4100: 20 69 6e 20 74 68 65 20 73 75 62 63 6f 6d 6d 61   in the subcomma
4110: 6e 64 20 6f 62 6a 65 63 74 2e 0a 20 20 09 20 2a  nd object..  . *
4120: 2f 0a 20 20 0a 21 20 09 4d 61 6b 65 43 61 63 68  /.  .! .MakeCach
4130: 65 64 45 6e 73 65 6d 62 6c 65 43 6f 6d 6d 61 6e  edEnsembleComman
4140: 64 28 6f 62 6a 76 5b 31 5d 2c 20 65 6e 73 65 6d  d(objv[1], ensem
4150: 62 6c 65 50 74 72 2c 20 66 75 6c 6c 4e 61 6d 65  blePtr, fullName
4160: 2c 20 70 72 65 66 69 78 4f 62 6a 29 3b 0a 20 20  , prefixObj);.  
4170: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 21      } else if (!
4180: 28 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 66 6c  (ensemblePtr->fl
4190: 61 67 73 20 26 20 54 43 4c 5f 45 4e 53 45 4d 42  ags & TCL_ENSEMB
41a0: 4c 45 5f 50 52 45 46 49 58 29 29 20 7b 0a 20 20  LE_PREFIX)) {.  
41b0: 09 2f 2a 0a 20 20 09 20 2a 20 43 6f 75 6c 64 20  ./*.  . * Could 
41c0: 6e 6f 74 20 6d 61 70 2c 20 6e 6f 20 70 72 65 66  not map, no pref
41d0: 69 78 69 6e 67 2c 20 67 6f 20 74 6f 20 75 6e 6b  ixing, go to unk
41e0: 6e 6f 77 6e 2f 65 72 72 6f 72 20 68 61 6e 64 6c  nown/error handl
41f0: 69 6e 67 2e 0a 2d 2d 2d 20 36 32 36 38 2c 36 32  ing..--- 6268,62
4200: 37 35 20 2d 2d 2d 2d 0a 20 20 09 20 2a 20 43 61  75 ----.  . * Ca
4210: 63 68 65 20 66 6f 72 20 6c 61 74 65 72 20 69 6e  che for later in
4220: 20 74 68 65 20 73 75 62 63 6f 6d 6d 61 6e 64 20   the subcommand 
4230: 6f 62 6a 65 63 74 2e 0a 20 20 09 20 2a 2f 0a 20  object..  . */. 
4240: 20 0a 21 20 09 4d 61 6b 65 43 61 63 68 65 64 45   .! .MakeCachedE
4250: 6e 73 65 6d 62 6c 65 43 6f 6d 6d 61 6e 64 28 6f  nsembleCommand(o
4260: 62 6a 76 5b 31 20 2b 20 65 6e 73 65 6d 62 6c 65  bjv[1 + ensemble
4270: 50 74 72 2d 3e 6e 75 6d 50 61 72 61 6d 65 74 65  Ptr->numParamete
4280: 72 73 5d 2c 20 0a 21 20 20 20 20 20 20 20 20 20  rs], .!         
4290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42a0: 20 20 20 20 20 20 20 20 20 20 65 6e 73 65 6d 62            ensemb
42b0: 6c 65 50 74 72 2c 20 66 75 6c 6c 4e 61 6d 65 2c  lePtr, fullName,
42c0: 20 70 72 65 66 69 78 4f 62 6a 29 3b 0a 20 20 20   prefixObj);.   
42d0: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 21 28     } else if (!(
42e0: 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 66 6c 61  ensemblePtr->fla
42f0: 67 73 20 26 20 54 43 4c 5f 45 4e 53 45 4d 42 4c  gs & TCL_ENSEMBL
4300: 45 5f 50 52 45 46 49 58 29 29 20 7b 0a 20 20 09  E_PREFIX)) {.  .
4310: 2f 2a 0a 20 20 09 20 2a 20 43 6f 75 6c 64 20 6e  /*.  . * Could n
4320: 6f 74 20 6d 61 70 2c 20 6e 6f 20 70 72 65 66 69  ot map, no prefi
4330: 78 69 6e 67 2c 20 67 6f 20 74 6f 20 75 6e 6b 6e  xing, go to unkn
4340: 6f 77 6e 2f 65 72 72 6f 72 20 68 61 6e 64 6c 69  own/error handli
4350: 6e 67 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ng..************
4360: 2a 2a 2a 0a 2a 2a 2a 20 36 30 39 39 2c 36 31 30  ***.*** 6099,610
4370: 36 20 2a 2a 2a 2a 0a 20 20 09 69 6e 74 20 73 74  6 ****.  .int st
4380: 72 69 6e 67 4c 65 6e 67 74 68 2c 20 69 3b 0a 20  ringLength, i;. 
4390: 20 09 69 6e 74 20 74 61 62 6c 65 4c 65 6e 67 74   .int tableLengt
43a0: 68 20 3d 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d  h = ensemblePtr-
43b0: 3e 73 75 62 63 6f 6d 6d 61 6e 64 54 61 62 6c 65  >subcommandTable
43c0: 2e 6e 75 6d 45 6e 74 72 69 65 73 3b 0a 20 20 0a  .numEntries;.  .
43d0: 21 20 09 73 75 62 63 6d 64 4e 61 6d 65 20 3d 20  ! .subcmdName = 
43e0: 54 63 6c 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  TclGetString(obj
43f0: 76 5b 31 5d 29 3b 0a 21 20 09 73 74 72 69 6e 67  v[1]);.! .string
4400: 4c 65 6e 67 74 68 20 3d 20 6f 62 6a 76 5b 31 5d  Length = objv[1]
4410: 2d 3e 6c 65 6e 67 74 68 3b 0a 20 20 09 66 6f 72  ->length;.  .for
4420: 20 28 69 3d 30 20 3b 20 69 3c 74 61 62 6c 65 4c   (i=0 ; i<tableL
4430: 65 6e 67 74 68 20 3b 20 69 2b 2b 29 20 7b 0a 20  ength ; i++) {. 
4440: 20 09 20 20 20 20 72 65 67 69 73 74 65 72 20 69   .    register i
4450: 6e 74 20 63 6d 70 20 3d 20 73 74 72 6e 63 6d 70  nt cmp = strncmp
4460: 28 73 75 62 63 6d 64 4e 61 6d 65 2c 0a 20 20 09  (subcmdName,.  .
4470: 09 20 20 20 20 65 6e 73 65 6d 62 6c 65 50 74 72  .    ensemblePtr
4480: 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64 41 72 72 61  ->subcommandArra
4490: 79 50 74 72 5b 69 5d 2c 0a 2d 2d 2d 20 36 32 39  yPtr[i],.--- 629
44a0: 30 2c 36 32 39 37 20 2d 2d 2d 2d 0a 20 20 09 69  0,6297 ----.  .i
44b0: 6e 74 20 73 74 72 69 6e 67 4c 65 6e 67 74 68 2c  nt stringLength,
44c0: 20 69 3b 0a 20 20 09 69 6e 74 20 74 61 62 6c 65   i;.  .int table
44d0: 4c 65 6e 67 74 68 20 3d 20 65 6e 73 65 6d 62 6c  Length = ensembl
44e0: 65 50 74 72 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64  ePtr->subcommand
44f0: 54 61 62 6c 65 2e 6e 75 6d 45 6e 74 72 69 65 73  Table.numEntries
4500: 3b 0a 20 20 0a 21 20 09 73 75 62 63 6d 64 4e 61  ;.  .! .subcmdNa
4510: 6d 65 20 3d 20 54 63 6c 47 65 74 53 74 72 69 6e  me = TclGetStrin
4520: 67 28 6f 62 6a 76 5b 31 20 2b 20 65 6e 73 65 6d  g(objv[1 + ensem
4530: 62 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72 61 6d  blePtr->numParam
4540: 65 74 65 72 73 5d 29 3b 0a 21 20 09 73 74 72 69  eters]);.! .stri
4550: 6e 67 4c 65 6e 67 74 68 20 3d 20 6f 62 6a 76 5b  ngLength = objv[
4560: 31 20 2b 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d  1 + ensemblePtr-
4570: 3e 6e 75 6d 50 61 72 61 6d 65 74 65 72 73 5d 2d  >numParameters]-
4580: 3e 6c 65 6e 67 74 68 3b 0a 20 20 09 66 6f 72 20  >length;.  .for 
4590: 28 69 3d 30 20 3b 20 69 3c 74 61 62 6c 65 4c 65  (i=0 ; i<tableLe
45a0: 6e 67 74 68 20 3b 20 69 2b 2b 29 20 7b 0a 20 20  ngth ; i++) {.  
45b0: 09 20 20 20 20 72 65 67 69 73 74 65 72 20 69 6e  .    register in
45c0: 74 20 63 6d 70 20 3d 20 73 74 72 6e 63 6d 70 28  t cmp = strncmp(
45d0: 73 75 62 63 6d 64 4e 61 6d 65 2c 0a 20 20 09 09  subcmdName,.  ..
45e0: 20 20 20 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d      ensemblePtr-
45f0: 3e 73 75 62 63 6f 6d 6d 61 6e 64 41 72 72 61 79  >subcommandArray
4600: 50 74 72 5b 69 5d 2c 0a 2a 2a 2a 2a 2a 2a 2a 2a  Ptr[i],.********
4610: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 36 31 34 36  *******.*** 6146
4620: 2c 36 31 35 32 20 2a 2a 2a 2a 0a 20 20 09 20 2a  ,6152 ****.  . *
4630: 20 43 61 63 68 65 20 66 6f 72 20 6c 61 74 65 72   Cache for later
4640: 20 69 6e 20 74 68 65 20 73 75 62 63 6f 6d 6d 61   in the subcomma
4650: 6e 64 20 6f 62 6a 65 63 74 2e 0a 20 20 09 20 2a  nd object..  . *
4660: 2f 0a 20 20 0a 21 20 09 4d 61 6b 65 43 61 63 68  /.  .! .MakeCach
4670: 65 64 45 6e 73 65 6d 62 6c 65 43 6f 6d 6d 61 6e  edEnsembleComman
4680: 64 28 6f 62 6a 76 5b 31 5d 2c 20 65 6e 73 65 6d  d(objv[1], ensem
4690: 62 6c 65 50 74 72 2c 20 66 75 6c 6c 4e 61 6d 65  blePtr, fullName
46a0: 2c 20 70 72 65 66 69 78 4f 62 6a 29 3b 0a 20 20  , prefixObj);.  
46b0: 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 54      }.  .      T
46c0: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
46d0: 70 72 65 66 69 78 4f 62 6a 29 3b 0a 2d 2d 2d 20  prefixObj);.--- 
46e0: 36 33 33 37 2c 36 33 34 34 20 2d 2d 2d 2d 0a 20  6337,6344 ----. 
46f0: 20 09 20 2a 20 43 61 63 68 65 20 66 6f 72 20 6c   . * Cache for l
4700: 61 74 65 72 20 69 6e 20 74 68 65 20 73 75 62 63  ater in the subc
4710: 6f 6d 6d 61 6e 64 20 6f 62 6a 65 63 74 2e 0a 20  ommand object.. 
4720: 20 09 20 2a 2f 0a 20 20 0a 21 20 09 4d 61 6b 65   . */.  .! .Make
4730: 43 61 63 68 65 64 45 6e 73 65 6d 62 6c 65 43 6f  CachedEnsembleCo
4740: 6d 6d 61 6e 64 28 6f 62 6a 76 5b 31 20 2b 20 65  mmand(objv[1 + e
4750: 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e 75 6d 50  nsemblePtr->numP
4760: 61 72 61 6d 65 74 65 72 73 5d 2c 20 0a 21 20 20  arameters], .!  
4770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4790: 20 65 6e 73 65 6d 62 6c 65 50 74 72 2c 20 66 75   ensemblePtr, fu
47a0: 6c 6c 4e 61 6d 65 2c 20 70 72 65 66 69 78 4f 62  llName, prefixOb
47b0: 6a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  j);.      }.  . 
47c0: 20 20 20 20 20 54 63 6c 5f 49 6e 63 72 52 65 66       Tcl_IncrRef
47d0: 43 6f 75 6e 74 28 70 72 65 66 69 78 4f 62 6a 29  Count(prefixObj)
47e0: 3b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ;.**************
47f0: 2a 0a 2a 2a 2a 20 36 31 35 38 2c 36 31 36 34 20  *.*** 6158,6164 
4800: 2a 2a 2a 2a 0a 20 20 20 20 20 20 20 2a 20 6e 75  ****.       * nu
4810: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
4820: 73 20 74 6f 20 74 68 69 73 20 65 6e 73 65 6d 62  s to this ensemb
4830: 6c 65 20 63 6f 6d 6d 61 6e 64 29 2c 20 70 6f 70  le command), pop
4840: 75 6c 61 74 69 6e 67 20 69 74 20 61 6e 64 20 74  ulating it and t
4850: 68 65 6e 0a 20 20 20 20 20 20 20 2a 20 66 65 65  hen.       * fee
4860: 64 69 6e 67 20 69 74 20 62 61 63 6b 20 74 68 72  ding it back thr
4870: 6f 75 67 68 20 74 68 65 20 6d 61 69 6e 20 63 6f  ough the main co
4880: 6d 6d 61 6e 64 2d 6c 6f 6f 6b 75 70 20 65 6e 67  mmand-lookup eng
4890: 69 6e 65 2e 20 49 6e 20 74 68 65 6f 72 79 2c 20  ine. In theory, 
48a0: 77 65 0a 20 20 20 20 20 20 20 2a 20 63 6f 75 6c  we.       * coul
48b0: 64 20 6c 6f 6f 6b 20 75 70 20 74 68 65 20 63 6f  d look up the co
48c0: 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20 6e 61 6d  mmand in the nam
48d0: 65 73 70 61 63 65 20 6f 75 72 73 65 6c 76 65 73  espace ourselves
48e0: 2c 20 61 73 20 77 65 20 61 6c 72 65 61 64 79 0a  , as we already.
48f0: 21 20 20 20 20 20 20 2a 20 68 61 76 65 20 74 68  !      * have th
4900: 65 20 6e 61 6d 65 73 70 61 63 65 20 69 6e 20 77  e namespace in w
4910: 68 69 63 68 20 69 74 20 69 73 20 67 75 61 72 61  hich it is guara
4920: 6e 74 65 65 64 20 74 6f 20 65 78 69 73 74 2c 20  nteed to exist, 
4930: 62 75 74 20 77 65 20 64 6f 6e 27 74 20 64 6f 0a  but we don't do.
4940: 20 20 20 20 20 20 20 2a 20 74 68 61 74 20 28 74         * that (t
4950: 68 65 20 63 61 63 68 65 69 6e 67 20 6f 66 20 74  he cacheing of t
4960: 68 65 20 63 6f 6d 6d 61 6e 64 20 6f 62 6a 65 63  he command objec
4970: 74 20 75 73 65 64 20 73 68 6f 75 6c 64 20 68 65  t used should he
4980: 6c 70 20 77 69 74 68 20 74 68 61 74 2e 29 0a 20  lp with that.). 
4990: 20 20 20 20 20 20 2a 2f 0a 20 20 0a 2d 2d 2d 20        */.  .--- 
49a0: 36 33 35 30 2c 36 33 36 30 20 2d 2d 2d 2d 0a 20  6350,6360 ----. 
49b0: 20 20 20 20 20 20 2a 20 6e 75 6d 62 65 72 20 6f        * number o
49c0: 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
49d0: 68 69 73 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6d  his ensemble com
49e0: 6d 61 6e 64 29 2c 20 70 6f 70 75 6c 61 74 69 6e  mand), populatin
49f0: 67 20 69 74 20 61 6e 64 20 74 68 65 6e 0a 20 20  g it and then.  
4a00: 20 20 20 20 20 2a 20 66 65 65 64 69 6e 67 20 69       * feeding i
4a10: 74 20 62 61 63 6b 20 74 68 72 6f 75 67 68 20 74  t back through t
4a20: 68 65 20 6d 61 69 6e 20 63 6f 6d 6d 61 6e 64 2d  he main command-
4a30: 6c 6f 6f 6b 75 70 20 65 6e 67 69 6e 65 2e 20 49  lookup engine. I
4a40: 6e 20 74 68 65 6f 72 79 2c 20 77 65 0a 20 20 20  n theory, we.   
4a50: 20 20 20 20 2a 20 63 6f 75 6c 64 20 6c 6f 6f 6b      * could look
4a60: 20 75 70 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   up the command 
4a70: 69 6e 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65  in the namespace
4a80: 20 6f 75 72 73 65 6c 76 65 73 2c 20 61 73 20 77   ourselves, as w
4a90: 65 20 61 6c 72 65 61 64 79 0a 21 20 20 20 20 20  e already.!     
4aa0: 20 2a 20 68 61 76 65 20 74 68 65 20 6e 61 6d 65   * have the name
4ab0: 73 70 61 63 65 20 69 6e 20 77 68 69 63 68 20 69  space in which i
4ac0: 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
4ad0: 74 6f 20 65 78 69 73 74 2c 20 0a 21 20 20 20 20  to exist, .!    
4ae0: 20 20 2a 20 0a 21 20 20 20 20 20 20 2a 20 20 20    * .!      *   
4af0: 28 28 51 3a 20 54 68 61 74 27 73 20 6e 6f 74 20  ((Q: That's not 
4b00: 74 72 75 65 20 69 66 20 74 68 65 20 2d 6d 61 70  true if the -map
4b10: 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2c   option is used,
4b20: 20 69 73 20 69 74 3f 29 29 0a 21 20 20 20 20 20   is it?)).!     
4b30: 20 2a 20 0a 21 20 20 20 20 20 20 2a 20 62 75 74   * .!      * but
4b40: 20 77 65 20 64 6f 6e 27 74 20 64 6f 0a 20 20 20   we don't do.   
4b50: 20 20 20 20 2a 20 74 68 61 74 20 28 74 68 65 20      * that (the 
4b60: 63 61 63 68 65 69 6e 67 20 6f 66 20 74 68 65 20  cacheing of the 
4b70: 63 6f 6d 6d 61 6e 64 20 6f 62 6a 65 63 74 20 75  command object u
4b80: 73 65 64 20 73 68 6f 75 6c 64 20 68 65 6c 70 20  sed should help 
4b90: 77 69 74 68 20 74 68 61 74 2e 29 0a 20 20 20 20  with that.).    
4ba0: 20 20 20 2a 2f 0a 20 20 0a 2a 2a 2a 2a 2a 2a 2a     */.  .*******
4bb0: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 36 31 38  ********.*** 618
4bc0: 30 2c 36 31 39 37 20 2a 2a 2a 2a 0a 20 20 09 2f  0,6197 ****.  ./
4bd0: 2a 0a 20 20 09 20 2a 20 52 65 63 6f 72 64 20 77  *.  . * Record w
4be0: 68 61 74 20 61 72 67 75 6d 65 6e 74 73 20 74 68  hat arguments th
4bf0: 65 20 73 63 72 69 70 74 20 73 65 6e 74 20 69 6e  e script sent in
4c00: 20 73 6f 20 74 68 61 74 20 74 68 69 6e 67 73 20   so that things 
4c10: 6c 69 6b 65 0a 20 20 09 20 2a 20 54 63 6c 5f 57  like.  . * Tcl_W
4c20: 72 6f 6e 67 4e 75 6d 41 72 67 73 20 63 61 6e 20  rongNumArgs can 
4c30: 67 69 76 65 20 74 68 65 20 63 6f 72 72 65 63 74  give the correct
4c40: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0a   error message..
4c50: 20 20 09 20 2a 2f 0a 20 20 0a 20 20 09 69 73 52    . */.  .  .isR
4c60: 6f 6f 74 45 6e 73 65 6d 62 6c 65 20 3d 20 28 69  ootEnsemble = (i
4c70: 50 74 72 2d 3e 65 6e 73 65 6d 62 6c 65 52 65 77  Ptr->ensembleRew
4c80: 72 69 74 65 2e 73 6f 75 72 63 65 4f 62 6a 73 20  rite.sourceObjs 
4c90: 3d 3d 20 4e 55 4c 4c 29 3b 0a 20 20 09 69 66 20  == NULL);.  .if 
4ca0: 28 69 73 52 6f 6f 74 45 6e 73 65 6d 62 6c 65 29  (isRootEnsemble)
4cb0: 20 7b 0a 20 20 09 20 20 20 20 69 50 74 72 2d 3e   {.  .    iPtr->
4cc0: 65 6e 73 65 6d 62 6c 65 52 65 77 72 69 74 65 2e  ensembleRewrite.
4cd0: 73 6f 75 72 63 65 4f 62 6a 73 20 3d 20 6f 62 6a  sourceObjs = obj
4ce0: 76 3b 0a 21 20 09 20 20 20 20 69 50 74 72 2d 3e  v;.! .    iPtr->
4cf0: 65 6e 73 65 6d 62 6c 65 52 65 77 72 69 74 65 2e  ensembleRewrite.
4d00: 6e 75 6d 52 65 6d 6f 76 65 64 4f 62 6a 73 20 3d  numRemovedObjs =
4d10: 20 32 3b 0a 21 20 09 20 20 20 20 69 50 74 72 2d   2;.! .    iPtr-
4d20: 3e 65 6e 73 65 6d 62 6c 65 52 65 77 72 69 74 65  >ensembleRewrite
4d30: 2e 6e 75 6d 49 6e 73 65 72 74 65 64 4f 62 6a 73  .numInsertedObjs
4d40: 20 3d 20 70 72 65 66 69 78 4f 62 6a 63 3b 0a 20   = prefixObjc;. 
4d50: 20 09 7d 20 65 6c 73 65 20 7b 0a 21 20 09 20 20   .} else {.! .  
4d60: 20 20 69 6e 74 20 6e 69 20 3d 20 69 50 74 72 2d    int ni = iPtr-
4d70: 3e 65 6e 73 65 6d 62 6c 65 52 65 77 72 69 74 65  >ensembleRewrite
4d80: 2e 6e 75 6d 49 6e 73 65 72 74 65 64 4f 62 6a 73  .numInsertedObjs
4d90: 3b 0a 21 20 0a 21 20 09 20 20 20 20 69 66 20 28  ;.! .! .    if (
4da0: 6e 69 20 3c 20 32 29 20 7b 0a 21 20 09 09 69 50  ni < 2) {.! ..iP
4db0: 74 72 2d 3e 65 6e 73 65 6d 62 6c 65 52 65 77 72  tr->ensembleRewr
4dc0: 69 74 65 2e 6e 75 6d 52 65 6d 6f 76 65 64 4f 62  ite.numRemovedOb
4dd0: 6a 73 20 2b 3d 20 32 20 2d 20 6e 69 3b 0a 20 20  js += 2 - ni;.  
4de0: 09 09 69 50 74 72 2d 3e 65 6e 73 65 6d 62 6c 65  ..iPtr->ensemble
4df0: 52 65 77 72 69 74 65 2e 6e 75 6d 49 6e 73 65 72  Rewrite.numInser
4e00: 74 65 64 4f 62 6a 73 20 2b 3d 20 70 72 65 66 69  tedObjs += prefi
4e10: 78 4f 62 6a 63 2d 31 3b 0a 20 20 09 20 20 20 20  xObjc-1;.  .    
4e20: 7d 20 65 6c 73 65 20 7b 0a 20 20 09 09 69 50 74  } else {.  ..iPt
4e30: 72 2d 3e 65 6e 73 65 6d 62 6c 65 52 65 77 72 69  r->ensembleRewri
4e40: 74 65 2e 6e 75 6d 49 6e 73 65 72 74 65 64 4f 62  te.numInsertedOb
4e50: 6a 73 20 2b 3d 20 70 72 65 66 69 78 4f 62 6a 63  js += prefixObjc
4e60: 2d 32 3b 0a 2d 2d 2d 20 36 33 37 36 2c 36 33 39  -2;.--- 6376,639
4e70: 36 20 2d 2d 2d 2d 0a 20 20 09 2f 2a 0a 20 20 09  6 ----.  ./*.  .
4e80: 20 2a 20 52 65 63 6f 72 64 20 77 68 61 74 20 61   * Record what a
4e90: 72 67 75 6d 65 6e 74 73 20 74 68 65 20 73 63 72  rguments the scr
4ea0: 69 70 74 20 73 65 6e 74 20 69 6e 20 73 6f 20 74  ipt sent in so t
4eb0: 68 61 74 20 74 68 69 6e 67 73 20 6c 69 6b 65 0a  hat things like.
4ec0: 20 20 09 20 2a 20 54 63 6c 5f 57 72 6f 6e 67 4e    . * Tcl_WrongN
4ed0: 75 6d 41 72 67 73 20 63 61 6e 20 67 69 76 65 20  umArgs can give 
4ee0: 74 68 65 20 63 6f 72 72 65 63 74 20 65 72 72 6f  the correct erro
4ef0: 72 20 6d 65 73 73 61 67 65 2e 0a 2b 20 09 20 2a  r message..+ . *
4f00: 20 50 61 72 61 6d 65 74 65 72 73 20 63 6f 75 6e   Parameters coun
4f10: 74 20 62 6f 74 68 20 61 73 20 69 6e 73 65 72 74  t both as insert
4f20: 65 64 20 61 6e 64 20 72 65 6d 6f 76 65 64 20 61  ed and removed a
4f30: 72 67 75 6d 65 6e 74 73 2e 0a 20 20 09 20 2a 2f  rguments..  . */
4f40: 0a 20 20 0a 20 20 09 69 73 52 6f 6f 74 45 6e 73  .  .  .isRootEns
4f50: 65 6d 62 6c 65 20 3d 20 28 69 50 74 72 2d 3e 65  emble = (iPtr->e
4f60: 6e 73 65 6d 62 6c 65 52 65 77 72 69 74 65 2e 73  nsembleRewrite.s
4f70: 6f 75 72 63 65 4f 62 6a 73 20 3d 3d 20 4e 55 4c  ourceObjs == NUL
4f80: 4c 29 3b 0a 20 20 09 69 66 20 28 69 73 52 6f 6f  L);.  .if (isRoo
4f90: 74 45 6e 73 65 6d 62 6c 65 29 20 7b 0a 20 20 09  tEnsemble) {.  .
4fa0: 20 20 20 20 69 50 74 72 2d 3e 65 6e 73 65 6d 62      iPtr->ensemb
4fb0: 6c 65 52 65 77 72 69 74 65 2e 73 6f 75 72 63 65  leRewrite.source
4fc0: 4f 62 6a 73 20 3d 20 6f 62 6a 76 3b 0a 21 20 09  Objs = objv;.! .
4fd0: 20 20 20 20 69 50 74 72 2d 3e 65 6e 73 65 6d 62      iPtr->ensemb
4fe0: 6c 65 52 65 77 72 69 74 65 2e 6e 75 6d 52 65 6d  leRewrite.numRem
4ff0: 6f 76 65 64 4f 62 6a 73 20 3d 20 32 20 2b 20 65  ovedObjs = 2 + e
5000: 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e 75 6d 50  nsemblePtr->numP
5010: 61 72 61 6d 65 74 65 72 73 3b 0a 21 20 09 20 20  arameters;.! .  
5020: 20 20 69 50 74 72 2d 3e 65 6e 73 65 6d 62 6c 65    iPtr->ensemble
5030: 52 65 77 72 69 74 65 2e 6e 75 6d 49 6e 73 65 72  Rewrite.numInser
5040: 74 65 64 4f 62 6a 73 20 3d 20 70 72 65 66 69 78  tedObjs = prefix
5050: 4f 62 6a 63 20 2b 20 65 6e 73 65 6d 62 6c 65 50  Objc + ensembleP
5060: 74 72 2d 3e 6e 75 6d 50 61 72 61 6d 65 74 65 72  tr->numParameter
5070: 73 3b 0a 20 20 09 7d 20 65 6c 73 65 20 7b 0a 21  s;.  .} else {.!
5080: 20 09 20 20 20 20 69 6e 74 20 6e 69 20 3d 20 32   .    int ni = 2
5090: 20 2b 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e   + ensemblePtr->
50a0: 6e 75 6d 50 61 72 61 6d 65 74 65 72 73 0a 21 20  numParameters.! 
50b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50c0: 20 20 20 20 20 2d 20 20 69 50 74 72 2d 3e 65 6e       -  iPtr->en
50d0: 73 65 6d 62 6c 65 52 65 77 72 69 74 65 2e 6e 75  sembleRewrite.nu
50e0: 6d 49 6e 73 65 72 74 65 64 4f 62 6a 73 3b 0a 21  mInsertedObjs;.!
50f0: 20 09 09 09 09 2f 2a 20 50 6f 73 69 74 69 6f 6e   ..../* Position
5100: 20 69 6e 20 6f 62 6a 76 20 6f 66 20 6e 65 77 20   in objv of new 
5110: 66 72 6f 6e 74 20 0a 21 20 09 09 09 09 20 2a 20  front .! .... * 
5120: 6f 66 20 69 6e 73 65 72 74 69 6f 6e 20 72 65 6c  of insertion rel
5130: 61 74 69 76 65 20 74 6f 20 6f 6c 64 20 6f 6e 65  ative to old one
5140: 2e 20 2a 2f 0a 21 20 09 20 20 20 20 69 66 20 28  . */.! .    if (
5150: 6e 69 20 3e 20 30 29 20 7b 0a 21 20 09 09 69 50  ni > 0) {.! ..iP
5160: 74 72 2d 3e 65 6e 73 65 6d 62 6c 65 52 65 77 72  tr->ensembleRewr
5170: 69 74 65 2e 6e 75 6d 52 65 6d 6f 76 65 64 4f 62  ite.numRemovedOb
5180: 6a 73 20 2b 3d 20 6e 69 3b 0a 20 20 09 09 69 50  js += ni;.  ..iP
5190: 74 72 2d 3e 65 6e 73 65 6d 62 6c 65 52 65 77 72  tr->ensembleRewr
51a0: 69 74 65 2e 6e 75 6d 49 6e 73 65 72 74 65 64 4f  ite.numInsertedO
51b0: 62 6a 73 20 2b 3d 20 70 72 65 66 69 78 4f 62 6a  bjs += prefixObj
51c0: 63 2d 31 3b 0a 20 20 09 20 20 20 20 7d 20 65 6c  c-1;.  .    } el
51d0: 73 65 20 7b 0a 20 20 09 09 69 50 74 72 2d 3e 65  se {.  ..iPtr->e
51e0: 6e 73 65 6d 62 6c 65 52 65 77 72 69 74 65 2e 6e  nsembleRewrite.n
51f0: 75 6d 49 6e 73 65 72 74 65 64 4f 62 6a 73 20 2b  umInsertedObjs +
5200: 3d 20 70 72 65 66 69 78 4f 62 6a 63 2d 32 3b 0a  = prefixObjc-2;.
5210: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
5220: 2a 2a 2a 20 36 32 30 36 2c 36 32 31 32 20 2a 2a  *** 6206,6212 **
5230: 2a 2a 0a 20 20 09 74 65 6d 70 4f 62 6a 76 20 3d  **.  .tempObjv =
5240: 20 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20 54 63   (Tcl_Obj **) Tc
5250: 6c 53 74 61 63 6b 41 6c 6c 6f 63 28 69 6e 74 65  lStackAlloc(inte
5260: 72 70 2c 0a 20 20 09 09 28 69 6e 74 29 20 73 69  rp,.  ..(int) si
5270: 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a 20 2a 29 20  zeof(Tcl_Obj *) 
5280: 2a 20 28 6f 62 6a 63 20 2d 20 32 20 2b 20 70 72  * (objc - 2 + pr
5290: 65 66 69 78 4f 62 6a 63 29 29 3b 0a 20 20 09 6d  efixObjc));.  .m
52a0: 65 6d 63 70 79 28 74 65 6d 70 4f 62 6a 76 2c 20  emcpy(tempObjv, 
52b0: 70 72 65 66 69 78 4f 62 6a 76 2c 20 73 69 7a 65  prefixObjv, size
52c0: 6f 66 28 54 63 6c 5f 4f 62 6a 20 2a 29 20 2a 20  of(Tcl_Obj *) * 
52d0: 70 72 65 66 69 78 4f 62 6a 63 29 3b 0a 21 20 09  prefixObjc);.! .
52e0: 6d 65 6d 63 70 79 28 74 65 6d 70 4f 62 6a 76 2b  memcpy(tempObjv+
52f0: 70 72 65 66 69 78 4f 62 6a 63 2c 20 6f 62 6a 76  prefixObjc, objv
5300: 2b 32 2c 20 73 69 7a 65 6f 66 28 54 63 6c 5f 4f  +2, sizeof(Tcl_O
5310: 62 6a 20 2a 29 20 2a 20 28 6f 62 6a 63 2d 32 29  bj *) * (objc-2)
5320: 29 3b 0a 20 20 0a 20 20 09 2f 2a 0a 20 20 09 20  );.  .  ./*.  . 
5330: 2a 20 48 61 6e 64 20 6f 66 66 20 74 6f 20 74 68  * Hand off to th
5340: 65 20 74 61 72 67 65 74 20 63 6f 6d 6d 61 6e 64  e target command
5350: 2e 0a 2d 2d 2d 20 36 34 30 35 2c 36 34 31 35 20  ..--- 6405,6415 
5360: 2d 2d 2d 2d 0a 20 20 09 74 65 6d 70 4f 62 6a 76  ----.  .tempObjv
5370: 20 3d 20 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20   = (Tcl_Obj **) 
5380: 54 63 6c 53 74 61 63 6b 41 6c 6c 6f 63 28 69 6e  TclStackAlloc(in
5390: 74 65 72 70 2c 0a 20 20 09 09 28 69 6e 74 29 20  terp,.  ..(int) 
53a0: 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a 20 2a  sizeof(Tcl_Obj *
53b0: 29 20 2a 20 28 6f 62 6a 63 20 2d 20 32 20 2b 20  ) * (objc - 2 + 
53c0: 70 72 65 66 69 78 4f 62 6a 63 29 29 3b 0a 20 20  prefixObjc));.  
53d0: 09 6d 65 6d 63 70 79 28 74 65 6d 70 4f 62 6a 76  .memcpy(tempObjv
53e0: 2c 20 70 72 65 66 69 78 4f 62 6a 76 2c 20 73 69  , prefixObjv, si
53f0: 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a 20 2a 29 20  zeof(Tcl_Obj *) 
5400: 2a 20 70 72 65 66 69 78 4f 62 6a 63 29 3b 0a 21  * prefixObjc);.!
5410: 20 09 6d 65 6d 63 70 79 28 74 65 6d 70 4f 62 6a   .memcpy(tempObj
5420: 76 2b 70 72 65 66 69 78 4f 62 6a 63 2c 20 6f 62  v+prefixObjc, ob
5430: 6a 76 2b 31 2c 20 0a 21 20 20 20 20 20 20 20 20  jv+1, .!        
5440: 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 54          sizeof(T
5450: 63 6c 5f 4f 62 6a 20 2a 29 20 2a 20 65 6e 73 65  cl_Obj *) * ense
5460: 6d 62 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72 61  mblePtr->numPara
5470: 6d 65 74 65 72 73 29 3b 0a 21 20 09 6d 65 6d 63  meters);.! .memc
5480: 70 79 28 74 65 6d 70 4f 62 6a 76 2b 70 72 65 66  py(tempObjv+pref
5490: 69 78 4f 62 6a 63 2b 65 6e 73 65 6d 62 6c 65 50  ixObjc+ensembleP
54a0: 74 72 2d 3e 6e 75 6d 50 61 72 61 6d 65 74 65 72  tr->numParameter
54b0: 73 2c 20 0a 21 20 20 20 20 20 20 20 20 20 20 20  s, .!           
54c0: 20 20 20 20 20 6f 62 6a 76 2b 65 6e 73 65 6d 62       objv+ensemb
54d0: 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72 61 6d 65  lePtr->numParame
54e0: 74 65 72 73 2b 32 2c 20 0a 21 20 20 20 20 20 20  ters+2, .!      
54f0: 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
5500: 28 54 63 6c 5f 4f 62 6a 20 2a 29 20 2a 20 28 6f  (Tcl_Obj *) * (o
5510: 62 6a 63 2d 65 6e 73 65 6d 62 6c 65 50 74 72 2d  bjc-ensemblePtr-
5520: 3e 6e 75 6d 50 61 72 61 6d 65 74 65 72 73 2d 32  >numParameters-2
5530: 29 29 3b 0a 20 20 0a 20 20 09 2f 2a 0a 20 20 09  ));.  .  ./*.  .
5540: 20 2a 20 48 61 6e 64 20 6f 66 66 20 74 6f 20 74   * Hand off to t
5550: 68 65 20 74 61 72 67 65 74 20 63 6f 6d 6d 61 6e  he target comman
5560: 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  d..*************
5570: 2a 2a 0a 2a 2a 2a 20 36 33 33 34 2c 36 33 35 31  **.*** 6334,6351
5580: 20 2a 2a 2a 2a 0a 20 20 0a 20 20 20 20 20 20 54   ****.  .      T
5590: 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 28 69  cl_ResetResult(i
55a0: 6e 74 65 72 70 29 3b 0a 20 20 20 20 20 20 54 63  nterp);.      Tc
55b0: 6c 5f 53 65 74 45 72 72 6f 72 43 6f 64 65 28 69  l_SetErrorCode(i
55c0: 6e 74 65 72 70 2c 20 22 54 43 4c 22 2c 20 22 4c  nterp, "TCL", "L
55d0: 4f 4f 4b 55 50 22 2c 20 22 45 4e 53 45 4d 42 4c  OOKUP", "ENSEMBL
55e0: 45 22 2c 0a 21 20 09 20 20 20 20 54 63 6c 47 65  E",.! .    TclGe
55f0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
5600: 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 69  , NULL);.      i
5610: 66 20 28 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e  f (ensemblePtr->
5620: 73 75 62 63 6f 6d 6d 61 6e 64 54 61 62 6c 65 2e  subcommandTable.
5630: 6e 75 6d 45 6e 74 72 69 65 73 20 3d 3d 20 30 29  numEntries == 0)
5640: 20 7b 0a 21 20 09 54 63 6c 5f 41 70 70 65 6e 64   {.! .Tcl_Append
5650: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
5660: 75 6e 6b 6e 6f 77 6e 20 73 75 62 63 6f 6d 6d 61  unknown subcomma
5670: 6e 64 20 5c 22 22 2c 54 63 6c 47 65 74 53 74 72  nd \"",TclGetStr
5680: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 0a 20 20  ing(objv[1]),.  
5690: 09 09 22 5c 22 3a 20 6e 61 6d 65 73 70 61 63 65  .."\": namespace
56a0: 20 22 2c 20 65 6e 73 65 6d 62 6c 65 50 74 72 2d   ", ensemblePtr-
56b0: 3e 6e 73 50 74 72 2d 3e 66 75 6c 6c 4e 61 6d 65  >nsPtr->fullName
56c0: 2c 0a 20 20 09 09 22 20 64 6f 65 73 20 6e 6f 74  ,.  .." does not
56d0: 20 65 78 70 6f 72 74 20 61 6e 79 20 63 6f 6d 6d   export any comm
56e0: 61 6e 64 73 22 2c 20 4e 55 4c 4c 29 3b 0a 20 20  ands", NULL);.  
56f0: 09 54 63 6c 5f 53 65 74 45 72 72 6f 72 43 6f 64  .Tcl_SetErrorCod
5700: 65 28 69 6e 74 65 72 70 2c 20 22 54 43 4c 22 2c  e(interp, "TCL",
5710: 20 22 4c 4f 4f 4b 55 50 22 2c 20 22 53 55 42 43   "LOOKUP", "SUBC
5720: 4f 4d 4d 41 4e 44 22 2c 0a 21 20 09 09 54 63 6c  OMMAND",.! ..Tcl
5730: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
5740: 5d 29 2c 20 4e 55 4c 4c 29 3b 0a 20 20 09 72 65  ]), NULL);.  .re
5750: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
5760: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 54 63        }.      Tc
5770: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
5780: 6e 74 65 72 70 2c 20 22 75 6e 6b 6e 6f 77 6e 20  nterp, "unknown 
5790: 22 2c 0a 20 20 09 20 20 20 20 28 65 6e 73 65 6d  ",.  .    (ensem
57a0: 62 6c 65 50 74 72 2d 3e 66 6c 61 67 73 20 26 20  blePtr->flags & 
57b0: 54 43 4c 5f 45 4e 53 45 4d 42 4c 45 5f 50 52 45  TCL_ENSEMBLE_PRE
57c0: 46 49 58 20 3f 20 22 6f 72 20 61 6d 62 69 67 75  FIX ? "or ambigu
57d0: 6f 75 73 20 22 20 3a 20 22 22 29 2c 0a 21 20 09  ous " : ""),.! .
57e0: 20 20 20 20 22 73 75 62 63 6f 6d 6d 61 6e 64 20      "subcommand 
57f0: 5c 22 22 2c 20 54 63 6c 47 65 74 53 74 72 69 6e  \"", TclGetStrin
5800: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 22 5c 22 3a  g(objv[1]), "\":
5810: 20 6d 75 73 74 20 62 65 20 22 2c 20 4e 55 4c 4c   must be ", NULL
5820: 29 3b 0a 20 20 20 20 20 20 69 66 20 28 65 6e 73  );.      if (ens
5830: 65 6d 62 6c 65 50 74 72 2d 3e 73 75 62 63 6f 6d  emblePtr->subcom
5840: 6d 61 6e 64 54 61 62 6c 65 2e 6e 75 6d 45 6e 74  mandTable.numEnt
5850: 72 69 65 73 20 3d 3d 20 31 29 20 7b 0a 20 20 09  ries == 1) {.  .
5860: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
5870: 28 69 6e 74 65 72 70 2c 20 65 6e 73 65 6d 62 6c  (interp, ensembl
5880: 65 50 74 72 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64  ePtr->subcommand
5890: 41 72 72 61 79 50 74 72 5b 30 5d 2c 20 4e 55 4c  ArrayPtr[0], NUL
58a0: 4c 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  L);.      } else
58b0: 20 7b 0a 2d 2d 2d 20 36 35 33 37 2c 36 35 35 36   {.--- 6537,6556
58c0: 20 2d 2d 2d 2d 0a 20 20 0a 20 20 20 20 20 20 54   ----.  .      T
58d0: 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 28 69  cl_ResetResult(i
58e0: 6e 74 65 72 70 29 3b 0a 20 20 20 20 20 20 54 63  nterp);.      Tc
58f0: 6c 5f 53 65 74 45 72 72 6f 72 43 6f 64 65 28 69  l_SetErrorCode(i
5900: 6e 74 65 72 70 2c 20 22 54 43 4c 22 2c 20 22 4c  nterp, "TCL", "L
5910: 4f 4f 4b 55 50 22 2c 20 22 45 4e 53 45 4d 42 4c  OOKUP", "ENSEMBL
5920: 45 22 2c 0a 21 20 09 20 20 20 20 54 63 6c 47 65  E",.! .    TclGe
5930: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 2b 65  tString(objv[1+e
5940: 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e 75 6d 50  nsemblePtr->numP
5950: 61 72 61 6d 65 74 65 72 73 5d 29 2c 20 4e 55 4c  arameters]), NUL
5960: 4c 29 3b 0a 20 20 20 20 20 20 69 66 20 28 65 6e  L);.      if (en
5970: 73 65 6d 62 6c 65 50 74 72 2d 3e 73 75 62 63 6f  semblePtr->subco
5980: 6d 6d 61 6e 64 54 61 62 6c 65 2e 6e 75 6d 45 6e  mmandTable.numEn
5990: 74 72 69 65 73 20 3d 3d 20 30 29 20 7b 0a 21 20  tries == 0) {.! 
59a0: 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c  .Tcl_AppendResul
59b0: 74 28 69 6e 74 65 72 70 2c 20 22 75 6e 6b 6e 6f  t(interp, "unkno
59c0: 77 6e 20 73 75 62 63 6f 6d 6d 61 6e 64 20 5c 22  wn subcommand \"
59d0: 22 2c 0a 21 20 20 20 20 20 20 20 20 20 20 20 20  ",.!            
59e0: 20 20 20 20 20 54 63 6c 47 65 74 53 74 72 69 6e       TclGetStrin
59f0: 67 28 6f 62 6a 76 5b 31 2b 65 6e 73 65 6d 62 6c  g(objv[1+ensembl
5a00: 65 50 74 72 2d 3e 6e 75 6d 50 61 72 61 6d 65 74  ePtr->numParamet
5a10: 65 72 73 5d 29 2c 0a 20 20 09 09 22 5c 22 3a 20  ers]),.  .."\": 
5a20: 6e 61 6d 65 73 70 61 63 65 20 22 2c 20 65 6e 73  namespace ", ens
5a30: 65 6d 62 6c 65 50 74 72 2d 3e 6e 73 50 74 72 2d  emblePtr->nsPtr-
5a40: 3e 66 75 6c 6c 4e 61 6d 65 2c 0a 20 20 09 09 22  >fullName,.  .."
5a50: 20 64 6f 65 73 20 6e 6f 74 20 65 78 70 6f 72 74   does not export
5a60: 20 61 6e 79 20 63 6f 6d 6d 61 6e 64 73 22 2c 20   any commands", 
5a70: 4e 55 4c 4c 29 3b 0a 20 20 09 54 63 6c 5f 53 65  NULL);.  .Tcl_Se
5a80: 74 45 72 72 6f 72 43 6f 64 65 28 69 6e 74 65 72  tErrorCode(inter
5a90: 70 2c 20 22 54 43 4c 22 2c 20 22 4c 4f 4f 4b 55  p, "TCL", "LOOKU
5aa0: 50 22 2c 20 22 53 55 42 43 4f 4d 4d 41 4e 44 22  P", "SUBCOMMAND"
5ab0: 2c 0a 21 20 09 09 54 63 6c 47 65 74 53 74 72 69  ,.! ..TclGetStri
5ac0: 6e 67 28 6f 62 6a 76 5b 31 2b 65 6e 73 65 6d 62  ng(objv[1+ensemb
5ad0: 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72 61 6d 65  lePtr->numParame
5ae0: 74 65 72 73 5d 29 2c 20 4e 55 4c 4c 29 3b 0a 20  ters]), NULL);. 
5af0: 20 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52   .return TCL_ERR
5b00: 4f 52 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  OR;.      }.    
5b10: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
5b20: 6c 74 28 69 6e 74 65 72 70 2c 20 22 75 6e 6b 6e  lt(interp, "unkn
5b30: 6f 77 6e 20 22 2c 0a 20 20 09 20 20 20 20 28 65  own ",.  .    (e
5b40: 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 66 6c 61 67  nsemblePtr->flag
5b50: 73 20 26 20 54 43 4c 5f 45 4e 53 45 4d 42 4c 45  s & TCL_ENSEMBLE
5b60: 5f 50 52 45 46 49 58 20 3f 20 22 6f 72 20 61 6d  _PREFIX ? "or am
5b70: 62 69 67 75 6f 75 73 20 22 20 3a 20 22 22 29 2c  biguous " : ""),
5b80: 0a 21 20 09 20 20 20 20 22 73 75 62 63 6f 6d 6d  .! .    "subcomm
5b90: 61 6e 64 20 5c 22 22 2c 20 54 63 6c 47 65 74 53  and \"", TclGetS
5ba0: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 2b 65 6e 73  tring(objv[1+ens
5bb0: 65 6d 62 6c 65 50 74 72 2d 3e 6e 75 6d 50 61 72  emblePtr->numPar
5bc0: 61 6d 65 74 65 72 73 5d 29 2c 20 0a 21 20 20 20  ameters]), .!   
5bd0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 3a 20 6d            "\": m
5be0: 75 73 74 20 62 65 20 22 2c 20 4e 55 4c 4c 29 3b  ust be ", NULL);
5bf0: 0a 20 20 20 20 20 20 69 66 20 28 65 6e 73 65 6d  .      if (ensem
5c00: 62 6c 65 50 74 72 2d 3e 73 75 62 63 6f 6d 6d 61  blePtr->subcomma
5c10: 6e 64 54 61 62 6c 65 2e 6e 75 6d 45 6e 74 72 69  ndTable.numEntri
5c20: 65 73 20 3d 3d 20 31 29 20 7b 0a 20 20 09 54 63  es == 1) {.  .Tc
5c30: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
5c40: 6e 74 65 72 70 2c 20 65 6e 73 65 6d 62 6c 65 50  nterp, ensembleP
5c50: 74 72 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64 41 72  tr->subcommandAr
5c60: 72 61 79 50 74 72 5b 30 5d 2c 20 4e 55 4c 4c 29  rayPtr[0], NULL)
5c70: 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ;.      } else {
5c80: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
5c90: 0a 2a 2a 2a 20 36 33 35 39 2c 36 33 36 35 20 2a  .*** 6359,6365 *
5ca0: 2a 2a 2a 0a 20 20 09 09 65 6e 73 65 6d 62 6c 65  ***.  ..ensemble
5cb0: 50 74 72 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64 41  Ptr->subcommandA
5cc0: 72 72 61 79 50 74 72 5b 69 5d 2c 20 4e 55 4c 4c  rrayPtr[i], NULL
5cd0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
5ce0: 20 54 63 6c 5f 53 65 74 45 72 72 6f 72 43 6f 64   Tcl_SetErrorCod
5cf0: 65 28 69 6e 74 65 72 70 2c 20 22 54 43 4c 22 2c  e(interp, "TCL",
5d00: 20 22 4c 4f 4f 4b 55 50 22 2c 20 22 53 55 42 43   "LOOKUP", "SUBC
5d10: 4f 4d 4d 41 4e 44 22 2c 0a 21 20 09 20 20 20 20  OMMAND",.! .    
5d20: 54 63 6c 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  TclGetString(obj
5d30: 76 5b 31 5d 29 2c 20 4e 55 4c 4c 29 3b 0a 20 20  v[1]), NULL);.  
5d40: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
5d50: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 0c 0a 2d 2d  RROR;.  }.  ..--
5d60: 2d 20 36 35 36 34 2c 36 35 37 30 20 2d 2d 2d 2d  - 6564,6570 ----
5d70: 0a 20 20 09 09 65 6e 73 65 6d 62 6c 65 50 74 72  .  ..ensemblePtr
5d80: 2d 3e 73 75 62 63 6f 6d 6d 61 6e 64 41 72 72 61  ->subcommandArra
5d90: 79 50 74 72 5b 69 5d 2c 20 4e 55 4c 4c 29 3b 0a  yPtr[i], NULL);.
5da0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 54 63        }.      Tc
5db0: 6c 5f 53 65 74 45 72 72 6f 72 43 6f 64 65 28 69  l_SetErrorCode(i
5dc0: 6e 74 65 72 70 2c 20 22 54 43 4c 22 2c 20 22 4c  nterp, "TCL", "L
5dd0: 4f 4f 4b 55 50 22 2c 20 22 53 55 42 43 4f 4d 4d  OOKUP", "SUBCOMM
5de0: 41 4e 44 22 2c 0a 21 20 09 20 20 20 20 54 63 6c  AND",.! .    Tcl
5df0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
5e00: 2b 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 6e 75  +ensemblePtr->nu
5e10: 6d 50 61 72 61 6d 65 74 65 72 73 5d 29 2c 20 4e  mParameters]), N
5e20: 55 4c 4c 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ULL);.      retu
5e30: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
5e40: 7d 0a 20 20 0c 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  }.  ..**********
5e50: 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 36 35 30 32 2c 36  *****.*** 6502,6
5e60: 35 30 37 20 2a 2a 2a 2a 0a 2d 2d 2d 20 36 37 30  507 ****.--- 670
5e70: 37 2c 36 37 31 35 20 2d 2d 2d 2d 0a 20 20 20 20  7,6715 ----.    
5e80: 20 20 69 66 20 28 65 6e 73 65 6d 62 6c 65 50 74    if (ensemblePt
5e90: 72 2d 3e 73 75 62 63 6d 64 4c 69 73 74 20 21 3d  r->subcmdList !=
5ea0: 20 4e 55 4c 4c 29 20 7b 0a 20 20 09 54 63 6c 5f   NULL) {.  .Tcl_
5eb0: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 65 6e 73  DecrRefCount(ens
5ec0: 65 6d 62 6c 65 50 74 72 2d 3e 73 75 62 63 6d 64  emblePtr->subcmd
5ed0: 4c 69 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a 2b  List);.      }.+
5ee0: 20 20 20 20 20 69 66 20 28 65 6e 73 65 6d 62 6c       if (ensembl
5ef0: 65 50 74 72 2d 3e 70 61 72 61 6d 65 74 65 72 4c  ePtr->parameterL
5f00: 69 73 74 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b  ist != NULL) {.+
5f10: 20 09 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75   .Tcl_DecrRefCou
5f20: 6e 74 28 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e  nt(ensemblePtr->
5f30: 70 61 72 61 6d 65 74 65 72 4c 69 73 74 29 3b 0a  parameterList);.
5f40: 2b 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66  +     }.      if
5f50: 20 28 65 6e 73 65 6d 62 6c 65 50 74 72 2d 3e 73   (ensemblePtr->s
5f60: 75 62 63 6f 6d 6d 61 6e 64 44 69 63 74 20 21 3d  ubcommandDict !=
5f70: 20 4e 55 4c 4c 29 20 7b 0a 20 20 09 54 63 6c 5f   NULL) {.  .Tcl_
5f80: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 65 6e 73  DecrRefCount(ens
5f90: 65 6d 62 6c 65 50 74 72 2d 3e 73 75 62 63 6f 6d  emblePtr->subcom
5fa0: 6d 61 6e 64 44 69 63 74 29 3b 0a 20 20 20 20 20  mandDict);.     
5fb0: 20 7d 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69   }.Index: generi
5fc0: 63 2f 74 63 6c 53 74 75 62 49 6e 69 74 2e 63 0a  c/tclStubInit.c.
5fd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5fe0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5ff0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6000: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6010: 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63  ===.RCS file: /c
6020: 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67  vsroot/tcl/tcl/g
6030: 65 6e 65 72 69 63 2f 74 63 6c 53 74 75 62 49 6e  eneric/tclStubIn
6040: 69 74 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e  it.c,v.retrievin
6050: 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 35 30  g revision 1.150
6060: 0a 64 69 66 66 20 2d 63 20 2d 72 31 2e 31 35 30  .diff -c -r1.150
6070: 20 74 63 6c 53 74 75 62 49 6e 69 74 2e 63 0a 2a   tclStubInit.c.*
6080: 2a 2a 20 67 65 6e 65 72 69 63 2f 74 63 6c 53 74  ** generic/tclSt
6090: 75 62 49 6e 69 74 2e 63 09 32 33 20 4a 61 6e 20  ubInit.c.23 Jan 
60a0: 32 30 30 38 20 31 37 3a 33 31 3a 34 32 20 2d 30  2008 17:31:42 -0
60b0: 30 30 30 09 31 2e 31 35 30 0a 2d 2d 2d 20 67 65  000.1.150.--- ge
60c0: 6e 65 72 69 63 2f 74 63 6c 53 74 75 62 49 6e 69  neric/tclStubIni
60d0: 74 2e 63 09 32 35 20 46 65 62 20 32 30 30 38 20  t.c.25 Feb 2008 
60e0: 32 33 3a 30 37 3a 30 38 20 2d 30 30 30 30 0a 2a  23:07:08 -0000.*
60f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
6100: 2a 2a 20 31 31 32 38 2c 31 31 33 33 20 2a 2a 2a  ** 1128,1133 ***
6110: 2a 0a 2d 2d 2d 20 31 31 32 38 2c 31 31 33 35 20  *.--- 1128,1135 
6120: 2d 2d 2d 2d 0a 20 20 20 20 20 20 54 63 6c 5f 41  ----.      Tcl_A
6130: 70 70 65 6e 64 46 6f 72 6d 61 74 54 6f 4f 62 6a  ppendFormatToObj
6140: 2c 20 2f 2a 20 35 37 37 20 2a 2f 0a 20 20 20 20  , /* 577 */.    
6150: 20 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 2c    Tcl_ObjPrintf,
6160: 20 2f 2a 20 35 37 38 20 2a 2f 0a 20 20 20 20 20   /* 578 */.     
6170: 20 54 63 6c 5f 41 70 70 65 6e 64 50 72 69 6e 74   Tcl_AppendPrint
6180: 66 54 6f 4f 62 6a 2c 20 2f 2a 20 35 37 39 20 2a  fToObj, /* 579 *
6190: 2f 0a 2b 20 20 20 20 20 54 63 6c 5f 53 65 74 45  /.+     Tcl_SetE
61a0: 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 72  nsembleParameter
61b0: 4c 69 73 74 2c 20 2f 2a 20 35 38 30 20 2a 2f 0a  List, /* 580 */.
61c0: 2b 20 20 20 20 20 54 63 6c 5f 47 65 74 45 6e 73  +     Tcl_GetEns
61d0: 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 72 4c 69  embleParameterLi
61e0: 73 74 2c 20 2f 2a 20 35 38 31 20 2a 2f 0a 20 20  st, /* 581 */.  
61f0: 7d 3b 0a 20 20 0a 20 20 2f 2a 20 21 45 4e 44 21  };.  .  /* !END!
6200: 3a 20 44 6f 20 6e 6f 74 20 65 64 69 74 20 61 62  : Do not edit ab
6210: 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 2e 20 2a  ove this line. *
6220: 2f 0a 49 6e 64 65 78 3a 20 74 65 73 74 73 2f 6e  /.Index: tests/n
6230: 61 6d 65 73 70 61 63 65 2e 74 65 73 74 0a 3d 3d  amespace.test.==
6240: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6250: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6260: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6270: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6280: 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73  =.RCS file: /cvs
6290: 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 74 65 73  root/tcl/tcl/tes
62a0: 74 73 2f 6e 61 6d 65 73 70 61 63 65 2e 74 65 73  ts/namespace.tes
62b0: 74 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72  t,v.retrieving r
62c0: 65 76 69 73 69 6f 6e 20 31 2e 37 30 0a 64 69 66  evision 1.70.dif
62d0: 66 20 2d 63 20 2d 72 31 2e 37 30 20 6e 61 6d 65  f -c -r1.70 name
62e0: 73 70 61 63 65 2e 74 65 73 74 0a 2a 2a 2a 20 74  space.test.*** t
62f0: 65 73 74 73 2f 6e 61 6d 65 73 70 61 63 65 2e 74  ests/namespace.t
6300: 65 73 74 09 31 33 20 44 65 63 20 32 30 30 37 20  est.13 Dec 2007 
6310: 31 35 3a 32 36 3a 30 36 20 2d 30 30 30 30 09 31  15:26:06 -0000.1
6320: 2e 37 30 0a 2d 2d 2d 20 74 65 73 74 73 2f 6e 61  .70.--- tests/na
6330: 6d 65 73 70 61 63 65 2e 74 65 73 74 09 32 35 20  mespace.test.25 
6340: 46 65 62 20 32 30 30 38 20 32 33 3a 30 37 3a 31  Feb 2008 23:07:1
6350: 32 20 2d 30 30 30 30 0a 2a 2a 2a 2a 2a 2a 2a 2a  2 -0000.********
6360: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 31 36 39 36  *******.*** 1696
6370: 2c 31 37 30 32 20 2a 2a 2a 2a 0a 20 20 20 20 20  ,1702 ****.     
6380: 20 7d 0a 20 20 20 20 20 20 6e 61 6d 65 73 70 61   }.      namespa
6390: 63 65 20 64 65 6c 65 74 65 20 6e 73 0a 20 20 20  ce delete ns.   
63a0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 21 20     set result.! 
63b0: 7d 20 7b 2d 6d 61 70 20 7b 7d 20 2d 6e 61 6d 65  } {-map {} -name
63c0: 73 70 61 63 65 20 3a 3a 6e 73 20 2d 70 72 65 66  space ::ns -pref
63d0: 69 78 65 73 20 31 20 2d 73 75 62 63 6f 6d 6d 61  ixes 1 -subcomma
63e0: 6e 64 73 20 7b 7d 20 2d 75 6e 6b 6e 6f 77 6e 20  nds {} -unknown 
63f0: 7b 7d 7d 0a 20 20 74 65 73 74 20 6e 61 6d 65 73  {}}.  test names
6400: 70 61 63 65 2d 34 35 2e 32 20 7b 65 6e 73 65 6d  pace-45.2 {ensem
6410: 62 6c 65 3a 20 69 6e 74 72 6f 73 70 65 63 74 69  ble: introspecti
6420: 6f 6e 7d 20 7b 0a 20 20 20 20 20 20 6e 61 6d 65  on} {.      name
6430: 73 70 61 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a  space eval ns {.
6440: 20 20 09 6e 61 6d 65 73 70 61 63 65 20 65 78 70    .namespace exp
6450: 6f 72 74 20 78 0a 2d 2d 2d 20 31 36 39 36 2c 31  ort x.--- 1696,1
6460: 37 30 32 20 2d 2d 2d 2d 0a 20 20 20 20 20 20 7d  702 ----.      }
6470: 0a 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65  .      namespace
6480: 20 64 65 6c 65 74 65 20 6e 73 0a 20 20 20 20 20   delete ns.     
6490: 20 73 65 74 20 72 65 73 75 6c 74 0a 21 20 7d 20   set result.! } 
64a0: 7b 2d 6d 61 70 20 7b 7d 20 2d 6e 61 6d 65 73 70  {-map {} -namesp
64b0: 61 63 65 20 3a 3a 6e 73 20 2d 70 61 72 61 6d 65  ace ::ns -parame
64c0: 74 65 72 73 20 7b 7d 20 2d 70 72 65 66 69 78 65  ters {} -prefixe
64d0: 73 20 31 20 2d 73 75 62 63 6f 6d 6d 61 6e 64 73  s 1 -subcommands
64e0: 20 7b 7d 20 2d 75 6e 6b 6e 6f 77 6e 20 7b 7d 7d   {} -unknown {}}
64f0: 0a 20 20 74 65 73 74 20 6e 61 6d 65 73 70 61 63  .  test namespac
6500: 65 2d 34 35 2e 32 20 7b 65 6e 73 65 6d 62 6c 65  e-45.2 {ensemble
6510: 3a 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 7d  : introspection}
6520: 20 7b 0a 20 20 20 20 20 20 6e 61 6d 65 73 70 61   {.      namespa
6530: 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a 20 20 09  ce eval ns {.  .
6540: 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74  namespace export
6550: 20 78 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   x.*************
6560: 2a 2a 0a 2a 2a 2a 20 31 39 31 30 2c 31 39 31 36  **.*** 1910,1916
6570: 20 2a 2a 2a 2a 0a 20 20 20 20 20 20 6c 61 70 70   ****.      lapp
6580: 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63  end result [catc
6590: 68 20 7b 66 6f 6f 20 62 61 72 7d 20 6d 73 67 5d  h {foo bar} msg]
65a0: 20 24 6d 73 67 20 5b 6e 61 6d 65 73 70 61 63 65   $msg [namespace
65b0: 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6e 66 69 67   ensemble config
65c0: 20 66 6f 6f 5d 0a 20 20 20 20 20 20 72 65 6e 61   foo].      rena
65d0: 6d 65 20 66 6f 6f 20 7b 7d 0a 20 20 20 20 20 20  me foo {}.      
65e0: 73 65 74 20 72 65 73 75 6c 74 0a 21 20 7d 20 7b  set result.! } {
65f0: 7b 4c 4f 47 20 3a 3a 66 6f 6f 20 62 61 72 7d 20  {LOG ::foo bar} 
6600: 31 20 7b 75 6e 6b 6e 6f 77 6e 20 73 75 62 63 6f  1 {unknown subco
6610: 6d 6d 61 6e 64 20 22 62 61 72 22 3a 20 6e 61 6d  mmand "bar": nam
6620: 65 73 70 61 63 65 20 3a 3a 20 64 6f 65 73 20 6e  espace :: does n
6630: 6f 74 20 65 78 70 6f 72 74 20 61 6e 79 20 63 6f  ot export any co
6640: 6d 6d 61 6e 64 73 7d 20 7b 4c 4f 47 20 3a 3a 66  mmands} {LOG ::f
6650: 6f 6f 20 62 61 72 7d 20 62 6f 6f 20 68 6f 6f 20  oo bar} boo hoo 
6660: 30 20 7b 7b 4c 4f 47 20 3a 3a 66 6f 6f 20 62 61  0 {{LOG ::foo ba
6670: 72 7d 20 31 20 7b 75 6e 6b 6e 6f 77 6e 20 73 75  r} 1 {unknown su
6680: 62 63 6f 6d 6d 61 6e 64 20 22 62 61 72 22 3a 20  bcommand "bar": 
6690: 6e 61 6d 65 73 70 61 63 65 20 3a 3a 20 64 6f 65  namespace :: doe
66a0: 73 20 6e 6f 74 20 65 78 70 6f 72 74 20 61 6e 79  s not export any
66b0: 20 63 6f 6d 6d 61 6e 64 73 7d 20 7b 4c 4f 47 20   commands} {LOG 
66c0: 3a 3a 66 6f 6f 20 62 61 72 7d 20 62 6f 6f 20 68  ::foo bar} boo h
66d0: 6f 6f 7d 20 7b 2d 6d 61 70 20 7b 7d 20 2d 6e 61  oo} {-map {} -na
66e0: 6d 65 73 70 61 63 65 20 3a 3a 20 2d 70 72 65 66  mespace :: -pref
66f0: 69 78 65 73 20 31 20 2d 73 75 62 63 6f 6d 6d 61  ixes 1 -subcomma
6700: 6e 64 73 20 7b 7d 20 2d 75 6e 6b 6e 6f 77 6e 20  nds {} -unknown 
6710: 62 61 72 7d 7d 0a 20 20 74 65 73 74 20 6e 61 6d  bar}}.  test nam
6720: 65 73 70 61 63 65 2d 34 37 2e 36 20 7b 65 6e 73  espace-47.6 {ens
6730: 65 6d 62 6c 65 3a 20 75 6e 6b 6e 6f 77 6e 20 68  emble: unknown h
6740: 61 6e 64 6c 65 72 7d 20 7b 0a 20 20 20 20 20 20  andler} {.      
6750: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
6760: 6c 65 20 63 72 65 61 74 65 20 2d 63 6f 6d 6d 61  le create -comma
6770: 6e 64 20 66 6f 6f 20 2d 75 6e 6b 6e 6f 77 6e 20  nd foo -unknown 
6780: 62 61 72 0a 20 20 20 20 20 20 70 72 6f 63 20 62  bar.      proc b
6790: 61 72 20 7b 61 72 67 73 7d 20 7b 0a 2d 2d 2d 20  ar {args} {.--- 
67a0: 31 39 31 30 2c 31 39 31 36 20 2d 2d 2d 2d 0a 20  1910,1916 ----. 
67b0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
67c0: 75 6c 74 20 5b 63 61 74 63 68 20 7b 66 6f 6f 20  ult [catch {foo 
67d0: 62 61 72 7d 20 6d 73 67 5d 20 24 6d 73 67 20 5b  bar} msg] $msg [
67e0: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
67f0: 6c 65 20 63 6f 6e 66 69 67 20 66 6f 6f 5d 0a 20  le config foo]. 
6800: 20 20 20 20 20 72 65 6e 61 6d 65 20 66 6f 6f 20       rename foo 
6810: 7b 7d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73  {}.      set res
6820: 75 6c 74 0a 21 20 7d 20 7b 7b 4c 4f 47 20 3a 3a  ult.! } {{LOG ::
6830: 66 6f 6f 20 62 61 72 7d 20 31 20 7b 75 6e 6b 6e  foo bar} 1 {unkn
6840: 6f 77 6e 20 73 75 62 63 6f 6d 6d 61 6e 64 20 22  own subcommand "
6850: 62 61 72 22 3a 20 6e 61 6d 65 73 70 61 63 65 20  bar": namespace 
6860: 3a 3a 20 64 6f 65 73 20 6e 6f 74 20 65 78 70 6f  :: does not expo
6870: 72 74 20 61 6e 79 20 63 6f 6d 6d 61 6e 64 73 7d  rt any commands}
6880: 20 7b 4c 4f 47 20 3a 3a 66 6f 6f 20 62 61 72 7d   {LOG ::foo bar}
6890: 20 62 6f 6f 20 68 6f 6f 20 30 20 7b 7b 4c 4f 47   boo hoo 0 {{LOG
68a0: 20 3a 3a 66 6f 6f 20 62 61 72 7d 20 31 20 7b 75   ::foo bar} 1 {u
68b0: 6e 6b 6e 6f 77 6e 20 73 75 62 63 6f 6d 6d 61 6e  nknown subcomman
68c0: 64 20 22 62 61 72 22 3a 20 6e 61 6d 65 73 70 61  d "bar": namespa
68d0: 63 65 20 3a 3a 20 64 6f 65 73 20 6e 6f 74 20 65  ce :: does not e
68e0: 78 70 6f 72 74 20 61 6e 79 20 63 6f 6d 6d 61 6e  xport any comman
68f0: 64 73 7d 20 7b 4c 4f 47 20 3a 3a 66 6f 6f 20 62  ds} {LOG ::foo b
6900: 61 72 7d 20 62 6f 6f 20 68 6f 6f 7d 20 7b 2d 6d  ar} boo hoo} {-m
6910: 61 70 20 7b 7d 20 2d 6e 61 6d 65 73 70 61 63 65  ap {} -namespace
6920: 20 3a 3a 20 2d 70 61 72 61 6d 65 74 65 72 73 20   :: -parameters 
6930: 7b 7d 20 2d 70 72 65 66 69 78 65 73 20 31 20 2d  {} -prefixes 1 -
6940: 73 75 62 63 6f 6d 6d 61 6e 64 73 20 7b 7d 20 2d  subcommands {} -
6950: 75 6e 6b 6e 6f 77 6e 20 62 61 72 7d 7d 0a 20 20  unknown bar}}.  
6960: 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 34  test namespace-4
6970: 37 2e 36 20 7b 65 6e 73 65 6d 62 6c 65 3a 20 75  7.6 {ensemble: u
6980: 6e 6b 6e 6f 77 6e 20 68 61 6e 64 6c 65 72 7d 20  nknown handler} 
6990: 7b 0a 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  {.      namespac
69a0: 65 20 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74  e ensemble creat
69b0: 65 20 2d 63 6f 6d 6d 61 6e 64 20 66 6f 6f 20 2d  e -command foo -
69c0: 75 6e 6b 6e 6f 77 6e 20 62 61 72 0a 20 20 20 20  unknown bar.    
69d0: 20 20 70 72 6f 63 20 62 61 72 20 7b 61 72 67 73    proc bar {args
69e0: 7d 20 7b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  } {.************
69f0: 2a 2a 2a 0a 2a 2a 2a 20 31 39 37 37 2c 31 39 38  ***.*** 1977,198
6a00: 33 20 2a 2a 2a 2a 0a 20 20 20 20 20 20 62 61 72  3 ****.      bar
6a10: 20 7a 20 37 38 39 0a 20 20 20 20 20 20 6e 61 6d   z 789.      nam
6a20: 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 66 6f  espace delete fo
6a30: 6f 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75  o.      set resu
6a40: 6c 74 0a 21 20 7d 20 7b 7b 2d 6d 61 70 20 7b 7d  lt.! } {{-map {}
6a50: 20 2d 6e 61 6d 65 73 70 61 63 65 20 3a 3a 66 6f   -namespace ::fo
6a60: 6f 20 2d 70 72 65 66 69 78 65 73 20 31 20 2d 73  o -prefixes 1 -s
6a70: 75 62 63 6f 6d 6d 61 6e 64 73 20 78 20 2d 75 6e  ubcommands x -un
6a80: 6b 6e 6f 77 6e 20 3a 3a 66 6f 6f 3a 3a 75 7d 20  known ::foo::u} 
6a90: 58 58 58 20 31 32 33 20 3a 3a 66 6f 6f 3a 3a 62  XXX 123 ::foo::b
6aa0: 61 72 20 7b 79 20 34 35 36 7d 20 59 59 59 20 34  ar {y 456} YYY 4
6ab0: 35 36 20 3a 3a 66 6f 6f 3a 3a 62 61 72 20 7b 7a  56 ::foo::bar {z
6ac0: 20 37 38 39 7d 20 5a 5a 5a 20 37 38 39 7d 0a 20   789} ZZZ 789}. 
6ad0: 20 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d   test namespace-
6ae0: 34 38 2e 32 20 7b 65 6e 73 65 6d 62 6c 65 73 20  48.2 {ensembles 
6af0: 61 6e 64 20 6e 61 6d 65 73 70 61 63 65 20 69 6d  and namespace im
6b00: 70 6f 72 74 3a 20 65 78 69 73 74 73 7d 20 7b 0a  port: exists} {.
6b10: 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20        namespace 
6b20: 65 76 61 6c 20 66 6f 6f 20 7b 0a 20 20 09 6e 61  eval foo {.  .na
6b30: 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65  mespace ensemble
6b40: 20 63 72 65 61 74 65 20 2d 63 6f 6d 6d 61 6e 64   create -command
6b50: 20 3a 3a 66 6f 6f 3a 3a 62 61 72 0a 2d 2d 2d 20   ::foo::bar.--- 
6b60: 31 39 37 37 2c 31 39 38 33 20 2d 2d 2d 2d 0a 20  1977,1983 ----. 
6b70: 20 20 20 20 20 62 61 72 20 7a 20 37 38 39 0a 20       bar z 789. 
6b80: 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64       namespace d
6b90: 65 6c 65 74 65 20 66 6f 6f 0a 20 20 20 20 20 20  elete foo.      
6ba0: 73 65 74 20 72 65 73 75 6c 74 0a 21 20 7d 20 7b  set result.! } {
6bb0: 7b 2d 6d 61 70 20 7b 7d 20 2d 6e 61 6d 65 73 70  {-map {} -namesp
6bc0: 61 63 65 20 3a 3a 66 6f 6f 20 2d 70 61 72 61 6d  ace ::foo -param
6bd0: 65 74 65 72 73 20 7b 7d 20 2d 70 72 65 66 69 78  eters {} -prefix
6be0: 65 73 20 31 20 2d 73 75 62 63 6f 6d 6d 61 6e 64  es 1 -subcommand
6bf0: 73 20 78 20 2d 75 6e 6b 6e 6f 77 6e 20 3a 3a 66  s x -unknown ::f
6c00: 6f 6f 3a 3a 75 7d 20 58 58 58 20 31 32 33 20 3a  oo::u} XXX 123 :
6c10: 3a 66 6f 6f 3a 3a 62 61 72 20 7b 79 20 34 35 36  :foo::bar {y 456
6c20: 7d 20 59 59 59 20 34 35 36 20 3a 3a 66 6f 6f 3a  } YYY 456 ::foo:
6c30: 3a 62 61 72 20 7b 7a 20 37 38 39 7d 20 5a 5a 5a  :bar {z 789} ZZZ
6c40: 20 37 38 39 7d 0a 20 20 74 65 73 74 20 6e 61 6d   789}.  test nam
6c50: 65 73 70 61 63 65 2d 34 38 2e 32 20 7b 65 6e 73  espace-48.2 {ens
6c60: 65 6d 62 6c 65 73 20 61 6e 64 20 6e 61 6d 65 73  embles and names
6c70: 70 61 63 65 20 69 6d 70 6f 72 74 3a 20 65 78 69  pace import: exi
6c80: 73 74 73 7d 20 7b 0a 20 20 20 20 20 20 6e 61 6d  sts} {.      nam
6c90: 65 73 70 61 63 65 20 65 76 61 6c 20 66 6f 6f 20  espace eval foo 
6ca0: 7b 0a 20 20 09 6e 61 6d 65 73 70 61 63 65 20 65  {.  .namespace e
6cb0: 6e 73 65 6d 62 6c 65 20 63 72 65 61 74 65 20 2d  nsemble create -
6cc0: 63 6f 6d 6d 61 6e 64 20 3a 3a 66 6f 6f 3a 3a 62  command ::foo::b
6cd0: 61 72 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ar.*************
6ce0: 2a 2a 0a 2a 2a 2a 20 32 36 31 39 2c 32 36 32 35  **.*** 2619,2625
6cf0: 20 2a 2a 2a 2a 0a 20 20 20 20 20 20 72 65 6e 61   ****.      rena
6d00: 6d 65 20 75 6e 6b 6e 6f 77 6e 2e 73 61 76 65 20  me unknown.save 
6d10: 3a 3a 75 6e 6b 6e 6f 77 6e 0a 20 20 20 20 20 20  ::unknown.      
6d20: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a  namespace eval :
6d30: 3a 20 5b 6c 69 73 74 20 6e 61 6d 65 73 70 61 63  : [list namespac
6d40: 65 20 75 6e 6b 6e 6f 77 6e 20 24 68 61 6e 64 6c  e unknown $handl
6d50: 65 72 5d 0a 20 20 7d 20 2d 72 65 73 75 6c 74 20  er].  } -result 
6d60: 53 55 43 43 45 53 53 0a 21 20 20 20 20 20 0a 20  SUCCESS.!     . 
6d70: 20 23 20 63 6c 65 61 6e 75 70 0a 20 20 63 61 74   # cleanup.  cat
6d80: 63 68 20 7b 72 65 6e 61 6d 65 20 63 6d 64 31 20  ch {rename cmd1 
6d90: 7b 7d 7d 0a 20 20 63 61 74 63 68 20 7b 75 6e 73  {}}.  catch {uns
6da0: 65 74 20 6c 7d 0a 2d 2d 2d 20 32 36 31 39 2c 32  et l}.--- 2619,2
6db0: 38 34 30 20 2d 2d 2d 2d 0a 20 20 20 20 20 20 72  840 ----.      r
6dc0: 65 6e 61 6d 65 20 75 6e 6b 6e 6f 77 6e 2e 73 61  ename unknown.sa
6dd0: 76 65 20 3a 3a 75 6e 6b 6e 6f 77 6e 0a 20 20 20  ve ::unknown.   
6de0: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61     namespace eva
6df0: 6c 20 3a 3a 20 5b 6c 69 73 74 20 6e 61 6d 65 73  l :: [list names
6e00: 70 61 63 65 20 75 6e 6b 6e 6f 77 6e 20 24 68 61  pace unknown $ha
6e10: 6e 64 6c 65 72 5d 0a 20 20 7d 20 2d 72 65 73 75  ndler].  } -resu
6e20: 6c 74 20 53 55 43 43 45 53 53 0a 21 20 0a 21 20  lt SUCCESS.! .! 
6e30: 23 20 54 49 50 20 78 78 78 20 2d 20 65 6e 73 65  # TIP xxx - ense
6e40: 6d 62 6c 65 73 20 77 69 74 68 20 70 61 72 61 6d  mbles with param
6e50: 65 74 65 72 73 0a 21 20 0a 21 20 74 65 73 74 20  eters.! .! test 
6e60: 6e 61 6d 65 73 70 61 63 65 2d 35 33 2e 31 20 7b  namespace-53.1 {
6e70: 65 6e 73 65 6d 62 6c 65 73 3a 20 70 61 72 61 6d  ensembles: param
6e80: 65 74 65 72 73 7d 20 7b 0a 21 20 20 20 20 20 6e  eters} {.!     n
6e90: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e 73  amespace eval ns
6ea0: 20 7b 0a 21 20 09 6e 61 6d 65 73 70 61 63 65 20   {.! .namespace 
6eb0: 65 78 70 6f 72 74 20 78 0a 21 20 09 70 72 6f 63  export x.! .proc
6ec0: 20 78 20 7b 70 61 72 61 7d 20 7b 6c 69 73 74 20   x {para} {list 
6ed0: 31 20 24 70 61 72 61 7d 0a 21 20 09 6e 61 6d 65  1 $para}.! .name
6ee0: 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63  space ensemble c
6ef0: 72 65 61 74 65 20 2d 70 61 72 61 6d 65 74 65 72  reate -parameter
6f00: 73 20 7b 70 61 72 61 31 7d 0a 21 20 20 20 20 20  s {para1}.!     
6f10: 7d 0a 21 20 20 20 20 20 6c 69 73 74 20 5b 69 6e  }.!     list [in
6f20: 66 6f 20 63 6f 6d 6d 61 6e 64 20 6e 73 5d 20 5b  fo command ns] [
6f30: 6e 73 20 62 61 72 20 78 5d 20 5b 6e 61 6d 65 73  ns bar x] [names
6f40: 70 61 63 65 20 64 65 6c 65 74 65 20 6e 73 5d 20  pace delete ns] 
6f50: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 20 6e 73  [info command ns
6f60: 5d 0a 21 20 7d 20 7b 6e 73 20 7b 31 20 62 61 72  ].! } {ns {1 bar
6f70: 7d 20 7b 7d 20 7b 7d 7d 0a 21 20 0a 21 20 74 65  } {} {}}.! .! te
6f80: 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 35 33 2e  st namespace-53.
6f90: 32 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 70 61  2 {ensembles: pa
6fa0: 72 61 6d 65 74 65 72 73 7d 20 2d 73 65 74 75 70  rameters} -setup
6fb0: 20 7b 0a 21 20 20 20 20 20 6e 61 6d 65 73 70 61   {.!     namespa
6fc0: 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a 21 20 09  ce eval ns {.! .
6fd0: 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74  namespace export
6fe0: 20 78 0a 21 20 09 70 72 6f 63 20 78 20 7b 70 61   x.! .proc x {pa
6ff0: 72 61 7d 20 7b 6c 69 73 74 20 31 20 24 70 61 72  ra} {list 1 $par
7000: 61 7d 0a 21 20 09 6e 61 6d 65 73 70 61 63 65 20  a}.! .namespace 
7010: 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74 65 0a  ensemble create.
7020: 21 20 20 20 20 20 7d 0a 21 20 7d 20 2d 62 6f 64  !     }.! } -bod
7030: 79 20 7b 0a 21 20 20 20 20 20 6e 61 6d 65 73 70  y {.!     namesp
7040: 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6e  ace ensemble con
7050: 66 69 67 75 72 65 20 6e 73 20 2d 70 61 72 61 6d  figure ns -param
7060: 65 74 65 72 73 20 7b 70 61 72 61 31 7d 0a 21 20  eters {para1}.! 
7070: 20 20 20 20 72 65 6e 61 6d 65 20 6e 73 20 66 6f      rename ns fo
7080: 6f 0a 21 20 20 20 20 20 6c 69 73 74 20 5b 69 6e  o.!     list [in
7090: 66 6f 20 63 6f 6d 6d 61 6e 64 20 66 6f 6f 5d 20  fo command foo] 
70a0: 5b 66 6f 6f 20 62 61 72 20 78 5d 20 5b 6e 61 6d  [foo bar x] [nam
70b0: 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e 73  espace delete ns
70c0: 5d 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 20  ] [info command 
70d0: 66 6f 6f 5d 0a 21 20 7d 20 2d 72 65 73 75 6c 74  foo].! } -result
70e0: 20 7b 66 6f 6f 20 7b 31 20 62 61 72 7d 20 7b 7d   {foo {1 bar} {}
70f0: 20 7b 7d 7d 0a 21 20 0a 21 20 74 65 73 74 20 6e   {}}.! .! test n
7100: 61 6d 65 73 70 61 63 65 2d 35 33 2e 33 20 7b 65  amespace-53.3 {e
7110: 6e 73 65 6d 62 6c 65 73 3a 20 70 61 72 61 6d 65  nsembles: parame
7120: 74 65 72 73 7d 20 2d 73 65 74 75 70 20 7b 0a 21  ters} -setup {.!
7130: 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65       namespace e
7140: 76 61 6c 20 6e 73 20 7b 0a 21 20 09 6e 61 6d 65  val ns {.! .name
7150: 73 70 61 63 65 20 65 78 70 6f 72 74 20 78 2a 0a  space export x*.
7160: 21 20 09 70 72 6f 63 20 78 31 20 7b 70 61 72 61  ! .proc x1 {para
7170: 7d 20 7b 6c 69 73 74 20 31 20 24 70 61 72 61 7d  } {list 1 $para}
7180: 0a 21 20 09 70 72 6f 63 20 78 32 20 7b 70 61 72  .! .proc x2 {par
7190: 61 7d 20 7b 6c 69 73 74 20 32 20 24 70 61 72 61  a} {list 2 $para
71a0: 7d 0a 21 20 09 6e 61 6d 65 73 70 61 63 65 20 65  }.! .namespace e
71b0: 6e 73 65 6d 62 6c 65 20 63 72 65 61 74 65 20 2d  nsemble create -
71c0: 70 61 72 61 6d 65 74 65 72 73 20 70 61 72 61 6d  parameters param
71d0: 31 0a 21 20 20 20 20 20 7d 0a 21 20 7d 20 2d 62  1.!     }.! } -b
71e0: 6f 64 79 20 7b 0a 21 20 20 20 20 20 73 65 74 20  ody {.!     set 
71f0: 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 5b 6e 73  result [list [ns
7200: 20 78 32 20 78 31 5d 20 5b 6e 73 20 78 31 20 78   x2 x1] [ns x1 x
7210: 32 5d 5d 0a 21 20 20 20 20 20 6c 61 70 70 65 6e  2]].!     lappen
7220: 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  d result [catch 
7230: 7b 6e 73 20 78 7d 20 6d 73 67 5d 20 24 6d 73 67  {ns x} msg] $msg
7240: 0a 21 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72  .!     lappend r
7250: 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e 73  esult [catch {ns
7260: 20 78 20 78 7d 20 6d 73 67 5d 20 24 6d 73 67 0a   x x} msg] $msg.
7270: 21 20 20 20 20 20 72 65 6e 61 6d 65 20 6e 73 20  !     rename ns 
7280: 7b 7d 0a 21 20 20 20 20 20 6c 61 70 70 65 6e 64  {}.!     lappend
7290: 20 72 65 73 75 6c 74 20 5b 69 6e 66 6f 20 63 6f   result [info co
72a0: 6d 6d 61 6e 64 20 6e 73 3a 3a 78 31 5d 0a 21 20  mmand ns::x1].! 
72b0: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64 65      namespace de
72c0: 6c 65 74 65 20 6e 73 0a 21 20 20 20 20 20 6c 61  lete ns.!     la
72d0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 69 6e  ppend result [in
72e0: 66 6f 20 63 6f 6d 6d 61 6e 64 20 6e 73 3a 3a 78  fo command ns::x
72f0: 31 5d 0a 21 20 7d 20 2d 72 65 73 75 6c 74 5c 0a  1].! } -result\.
7300: 21 20 20 20 20 7b 7b 31 20 78 32 7d 20 7b 32 20  !    {{1 x2} {2 
7310: 78 31 7d 5c 0a 21 20 20 20 20 20 31 20 7b 77 72  x1}\.!     1 {wr
7320: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
7330: 6c 64 20 62 65 20 22 6e 73 20 70 61 72 61 6d 31  ld be "ns param1
7340: 20 73 75 62 63 6f 6d 6d 61 6e 64 20 3f 61 72 67   subcommand ?arg
7350: 75 6d 65 6e 74 20 2e 2e 2e 3f 22 7d 5c 0a 21 20  ument ...?"}\.! 
7360: 20 20 20 20 31 20 7b 75 6e 6b 6e 6f 77 6e 20 6f      1 {unknown o
7370: 72 20 61 6d 62 69 67 75 6f 75 73 20 73 75 62 63  r ambiguous subc
7380: 6f 6d 6d 61 6e 64 20 22 78 22 3a 20 6d 75 73 74  ommand "x": must
7390: 20 62 65 20 78 31 2c 20 6f 72 20 78 32 7d 5c 0a   be x1, or x2}\.
73a0: 21 20 20 20 20 20 3a 3a 6e 73 3a 3a 78 31 20 7b  !     ::ns::x1 {
73b0: 7d 7d 0a 21 20 0a 21 20 74 65 73 74 20 6e 61 6d  }}.! .! test nam
73c0: 65 73 70 61 63 65 2d 35 33 2e 34 20 7b 65 6e 73  espace-53.4 {ens
73d0: 65 6d 62 6c 65 73 3a 20 70 61 72 61 6d 65 74 65  embles: paramete
73e0: 72 73 7d 20 2d 73 65 74 75 70 20 7b 0a 21 20 20  rs} -setup {.!  
73f0: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61     namespace eva
7400: 6c 20 6e 73 20 7b 0a 21 20 09 6e 61 6d 65 73 70  l ns {.! .namesp
7410: 61 63 65 20 65 78 70 6f 72 74 20 78 2a 0a 21 20  ace export x*.! 
7420: 09 70 72 6f 63 20 78 31 20 7b 61 31 20 61 32 7d  .proc x1 {a1 a2}
7430: 20 7b 6c 69 73 74 20 31 20 24 61 31 20 24 61 32   {list 1 $a1 $a2
7440: 7d 0a 21 20 09 70 72 6f 63 20 78 32 20 7b 61 31  }.! .proc x2 {a1
7450: 20 61 32 7d 20 7b 6c 69 73 74 20 32 20 24 61 31   a2} {list 2 $a1
7460: 20 24 61 32 7d 0a 21 20 09 70 72 6f 63 20 78 33   $a2}.! .proc x3
7470: 20 7b 61 31 20 61 32 7d 20 7b 6c 69 73 74 20 33   {a1 a2} {list 3
7480: 20 24 61 31 20 24 61 32 7d 0a 21 20 09 6e 61 6d   $a1 $a2}.! .nam
7490: 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20  espace ensemble 
74a0: 63 72 65 61 74 65 0a 21 20 20 20 20 20 7d 0a 21  create.!     }.!
74b0: 20 7d 20 2d 62 6f 64 79 20 7b 0a 21 20 20 20 20   } -body {.!    
74c0: 20 73 65 74 20 72 65 73 75 6c 74 20 7b 7d 0a 21   set result {}.!
74d0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
74e0: 75 6c 74 20 5b 6e 73 20 78 31 20 78 32 20 78 33  ult [ns x1 x2 x3
74f0: 5d 0a 21 20 20 20 20 20 6e 61 6d 65 73 70 61 63  ].!     namespac
7500: 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6e 66 69  e ensemble confi
7510: 67 75 72 65 20 6e 73 20 2d 70 61 72 61 6d 65 74  gure ns -paramet
7520: 65 72 73 20 70 31 0a 21 20 20 20 20 20 6c 61 70  ers p1.!     lap
7530: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6e 73 20  pend result [ns 
7540: 78 31 20 78 32 20 78 33 5d 0a 21 20 20 20 20 20  x1 x2 x3].!     
7550: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
7560: 6c 65 20 63 6f 6e 66 69 67 75 72 65 20 6e 73 20  le configure ns 
7570: 2d 70 61 72 61 6d 65 74 65 72 73 20 7b 70 31 20  -parameters {p1 
7580: 70 32 7d 0a 21 20 20 20 20 20 6c 61 70 70 65 6e  p2}.!     lappen
7590: 64 20 72 65 73 75 6c 74 20 5b 6e 73 20 78 31 20  d result [ns x1 
75a0: 78 32 20 78 33 5d 0a 21 20 7d 20 2d 63 6c 65 61  x2 x3].! } -clea
75b0: 6e 75 70 20 7b 0a 21 20 20 20 20 20 6e 61 6d 65  nup {.!     name
75c0: 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e 73 0a  space delete ns.
75d0: 21 20 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 31 20  ! } -result {{1 
75e0: 78 32 20 78 33 7d 20 7b 32 20 78 31 20 78 33 7d  x2 x3} {2 x1 x3}
75f0: 20 7b 33 20 78 31 20 78 32 7d 7d 0a 21 20 0a 21   {3 x1 x2}}.! .!
7600: 20 74 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d   test namespace-
7610: 35 33 2e 35 20 7b 65 6e 73 65 6d 62 6c 65 73 3a  53.5 {ensembles:
7620: 20 70 61 72 61 6d 65 74 65 72 73 7d 20 2d 73 65   parameters} -se
7630: 74 75 70 20 7b 0a 21 20 20 20 20 20 6e 61 6d 65  tup {.!     name
7640: 73 70 61 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a  space eval ns {.
7650: 21 20 09 6e 61 6d 65 73 70 61 63 65 20 65 78 70  ! .namespace exp
7660: 6f 72 74 20 78 2a 0a 21 20 09 70 72 6f 63 20 78  ort x*.! .proc x
7670: 31 20 7b 70 61 72 61 7d 20 7b 6c 69 73 74 20 31  1 {para} {list 1
7680: 20 24 70 61 72 61 7d 0a 21 20 09 70 72 6f 63 20   $para}.! .proc 
7690: 78 32 20 7b 70 61 72 61 7d 20 7b 6c 69 73 74 20  x2 {para} {list 
76a0: 32 20 24 70 61 72 61 7d 0a 21 20 09 70 72 6f 63  2 $para}.! .proc
76b0: 20 78 33 20 7b 70 61 72 61 7d 20 7b 6c 69 73 74   x3 {para} {list
76c0: 20 33 20 24 70 61 72 61 7d 0a 21 20 09 6e 61 6d   3 $para}.! .nam
76d0: 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20  espace ensemble 
76e0: 63 72 65 61 74 65 0a 21 20 20 20 20 20 7d 0a 21  create.!     }.!
76f0: 20 7d 20 2d 62 6f 64 79 20 7b 0a 21 20 20 20 20   } -body {.!    
7700: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73   set result [lis
7710: 74 20 5b 63 61 74 63 68 20 7b 6e 73 20 78 20 78  t [catch {ns x x
7720: 31 7d 20 6d 73 67 5d 20 24 6d 73 67 5d 0a 21 20  1} msg] $msg].! 
7730: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
7740: 6c 74 20 5b 63 61 74 63 68 20 7b 6e 73 20 78 31  lt [catch {ns x1
7750: 20 78 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 21 20   x} msg] $msg.! 
7760: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 6e      namespace en
7770: 73 65 6d 62 6c 65 20 63 6f 6e 66 69 67 75 72 65  semble configure
7780: 20 6e 73 20 2d 70 61 72 61 6d 65 74 65 72 73 20   ns -parameters 
7790: 70 31 0a 21 20 20 20 20 20 6c 61 70 70 65 6e 64  p1.!     lappend
77a0: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b   result [catch {
77b0: 6e 73 20 78 31 20 78 7d 20 6d 73 67 5d 20 24 6d  ns x1 x} msg] $m
77c0: 73 67 0a 21 20 20 20 20 20 6c 61 70 70 65 6e 64  sg.!     lappend
77d0: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b   result [catch {
77e0: 6e 73 20 78 20 78 31 7d 20 6d 73 67 5d 20 24 6d  ns x x1} msg] $m
77f0: 73 67 0a 21 20 7d 20 2d 63 6c 65 61 6e 75 70 20  sg.! } -cleanup 
7800: 7b 0a 21 20 20 20 20 20 6e 61 6d 65 73 70 61 63  {.!     namespac
7810: 65 20 64 65 6c 65 74 65 20 6e 73 0a 21 20 7d 20  e delete ns.! } 
7820: 2d 72 65 73 75 6c 74 5c 0a 21 20 20 20 20 7b 31  -result\.!    {1
7830: 20 7b 75 6e 6b 6e 6f 77 6e 20 6f 72 20 61 6d 62   {unknown or amb
7840: 69 67 75 6f 75 73 20 73 75 62 63 6f 6d 6d 61 6e  iguous subcomman
7850: 64 20 22 78 22 3a 20 6d 75 73 74 20 62 65 20 78  d "x": must be x
7860: 31 2c 20 78 32 2c 20 6f 72 20 78 33 7d 5c 0a 21  1, x2, or x3}\.!
7870: 20 20 20 20 20 30 20 7b 31 20 78 7d 5c 0a 21 20       0 {1 x}\.! 
7880: 20 20 20 20 31 20 7b 75 6e 6b 6e 6f 77 6e 20 6f      1 {unknown o
7890: 72 20 61 6d 62 69 67 75 6f 75 73 20 73 75 62 63  r ambiguous subc
78a0: 6f 6d 6d 61 6e 64 20 22 78 22 3a 20 6d 75 73 74  ommand "x": must
78b0: 20 62 65 20 78 31 2c 20 78 32 2c 20 6f 72 20 78   be x1, x2, or x
78c0: 33 7d 5c 0a 21 20 20 20 20 20 30 20 7b 31 20 78  3}\.!     0 {1 x
78d0: 7d 7d 0a 21 20 0a 21 20 74 65 73 74 20 6e 61 6d  }}.! .! test nam
78e0: 65 73 70 61 63 65 2d 35 33 2e 36 20 7b 65 6e 73  espace-53.6 {ens
78f0: 65 6d 62 6c 65 73 3a 20 6e 65 73 74 65 64 7d 20  embles: nested} 
7900: 2d 73 65 74 75 70 20 7b 0a 21 20 20 20 20 20 6e  -setup {.!     n
7910: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e 73  amespace eval ns
7920: 20 7b 0a 21 20 09 6e 61 6d 65 73 70 61 63 65 20   {.! .namespace 
7930: 65 78 70 6f 72 74 20 78 2a 0a 21 20 09 6e 61 6d  export x*.! .nam
7940: 65 73 70 61 63 65 20 65 76 61 6c 20 78 30 20 7b  espace eval x0 {
7950: 0a 21 20 09 20 20 20 20 70 72 6f 63 20 7a 20 7b  .! .    proc z {
7960: 61 72 67 73 7d 20 7b 6c 69 73 74 20 30 20 24 61  args} {list 0 $a
7970: 72 67 73 7d 0a 21 20 09 20 20 20 20 6e 61 6d 65  rgs}.! .    name
7980: 73 70 61 63 65 20 65 78 70 6f 72 74 20 7a 0a 21  space export z.!
7990: 20 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20   .    namespace 
79a0: 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74 65 0a  ensemble create.
79b0: 21 20 09 7d 0a 21 20 09 70 72 6f 63 20 78 31 20  ! .}.! .proc x1 
79c0: 7b 61 72 67 73 7d 20 7b 6c 69 73 74 20 31 20 24  {args} {list 1 $
79d0: 61 72 67 73 7d 0a 21 20 09 70 72 6f 63 20 78 32  args}.! .proc x2
79e0: 20 7b 61 72 67 73 7d 20 7b 6c 69 73 74 20 32 20   {args} {list 2 
79f0: 24 61 72 67 73 7d 0a 21 20 09 70 72 6f 63 20 78  $args}.! .proc x
7a00: 33 20 7b 61 72 67 73 7d 20 7b 6c 69 73 74 20 33  3 {args} {list 3
7a10: 20 24 61 72 67 73 7d 0a 21 20 09 6e 61 6d 65 73   $args}.! .names
7a20: 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 72  pace ensemble cr
7a30: 65 61 74 65 20 2d 70 61 72 61 6d 65 74 65 72 73  eate -parameters
7a40: 20 70 0a 21 20 20 20 20 20 7d 0a 21 20 7d 20 2d   p.!     }.! } -
7a50: 62 6f 64 79 20 7b 0a 21 20 20 20 20 20 6c 69 73  body {.!     lis
7a60: 74 20 5b 6e 73 20 7a 20 78 30 5d 20 5b 6e 73 20  t [ns z x0] [ns 
7a70: 7a 20 78 31 5d 20 5b 6e 73 20 7a 20 78 32 5d 20  z x1] [ns z x2] 
7a80: 5b 6e 73 20 7a 20 78 33 5d 0a 21 20 7d 20 2d 63  [ns z x3].! } -c
7a90: 6c 65 61 6e 75 70 20 7b 0a 21 20 20 20 20 20 6e  leanup {.!     n
7aa0: 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20  amespace delete 
7ab0: 6e 73 0a 21 20 7d 20 2d 72 65 73 75 6c 74 20 7b  ns.! } -result {
7ac0: 7b 30 20 7b 7d 7d 20 7b 31 20 7a 7d 20 7b 32 20  {0 {}} {1 z} {2 
7ad0: 7a 7d 20 7b 33 20 7a 7d 7d 0a 21 20 0a 21 20 74  z} {3 z}}.! .! t
7ae0: 65 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 35 33  est namespace-53
7af0: 2e 37 20 7b 65 6e 73 65 6d 62 6c 65 73 3a 20 70  .7 {ensembles: p
7b00: 61 72 61 6d 65 74 65 72 73 20 26 20 77 72 6f 6e  arameters & wron
7b10: 67 20 23 20 61 72 67 73 7d 20 2d 73 65 74 75 70  g # args} -setup
7b20: 20 7b 0a 21 20 20 20 20 20 6e 61 6d 65 73 70 61   {.!     namespa
7b30: 63 65 20 65 76 61 6c 20 6e 73 20 7b 0a 21 20 09  ce eval ns {.! .
7b40: 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74  namespace export
7b50: 20 78 2a 0a 21 20 09 70 72 6f 63 20 78 31 20 7b   x*.! .proc x1 {
7b60: 61 31 20 61 32 20 61 33 20 61 34 7d 20 7b 6c 69  a1 a2 a3 a4} {li
7b70: 73 74 20 78 31 20 24 61 31 20 24 61 32 20 24 61  st x1 $a1 $a2 $a
7b80: 33 20 24 61 34 7d 0a 21 20 09 6e 61 6d 65 73 70  3 $a4}.! .namesp
7b90: 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 72 65  ace ensemble cre
7ba0: 61 74 65 20 2d 70 61 72 61 6d 65 74 65 72 73 20  ate -parameters 
7bb0: 70 31 0a 21 20 20 20 20 20 7d 0a 21 20 7d 20 2d  p1.!     }.! } -
7bc0: 62 6f 64 79 20 7b 0a 21 20 20 20 20 20 73 65 74  body {.!     set
7bd0: 20 72 65 73 75 6c 74 20 7b 7d 0a 21 20 20 20 20   result {}.!    
7be0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
7bf0: 5b 63 61 74 63 68 20 7b 6e 73 7d 20 6d 73 67 5d  [catch {ns} msg]
7c00: 20 24 6d 73 67 0a 21 20 20 20 20 20 6c 61 70 70   $msg.!     lapp
7c10: 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63  end result [catc
7c20: 68 20 7b 6e 73 20 78 31 7d 20 6d 73 67 5d 20 24  h {ns x1} msg] $
7c30: 6d 73 67 0a 21 20 20 20 20 20 6c 61 70 70 65 6e  msg.!     lappen
7c40: 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  d result [catch 
7c50: 7b 6e 73 20 78 31 20 78 31 7d 20 6d 73 67 5d 20  {ns x1 x1} msg] 
7c60: 24 6d 73 67 0a 21 20 20 20 20 20 6c 61 70 70 65  $msg.!     lappe
7c70: 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68  nd result [catch
7c80: 20 7b 6e 73 20 78 31 20 78 31 20 78 31 7d 20 6d   {ns x1 x1 x1} m
7c90: 73 67 5d 20 24 6d 73 67 0a 21 20 20 20 20 20 6c  sg] $msg.!     l
7ca0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63  append result [c
7cb0: 61 74 63 68 20 7b 6e 73 20 78 31 20 78 31 20 78  atch {ns x1 x1 x
7cc0: 31 20 78 31 7d 20 6d 73 67 5d 20 24 6d 73 67 0a  1 x1} msg] $msg.
7cd0: 21 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  !     lappend re
7ce0: 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e 73 20  sult [catch {ns 
7cf0: 78 31 20 78 31 20 78 31 20 78 31 20 78 31 7d 20  x1 x1 x1 x1 x1} 
7d00: 6d 73 67 5d 20 24 6d 73 67 0a 21 20 7d 20 2d 63  msg] $msg.! } -c
7d10: 6c 65 61 6e 75 70 20 7b 0a 21 20 20 20 20 20 6e  leanup {.!     n
7d20: 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20  amespace delete 
7d30: 6e 73 0a 21 20 7d 20 2d 72 65 73 75 6c 74 5c 0a  ns.! } -result\.
7d40: 21 20 20 20 20 7b 31 20 7b 77 72 6f 6e 67 20 23  !    {1 {wrong #
7d50: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
7d60: 20 22 6e 73 20 70 31 20 73 75 62 63 6f 6d 6d 61   "ns p1 subcomma
7d70: 6e 64 20 3f 61 72 67 75 6d 65 6e 74 20 2e 2e 2e  nd ?argument ...
7d80: 3f 22 7d 5c 0a 21 20 20 20 20 20 31 20 7b 77 72  ?"}\.!     1 {wr
7d90: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
7da0: 6c 64 20 62 65 20 22 6e 73 20 70 31 20 73 75 62  ld be "ns p1 sub
7db0: 63 6f 6d 6d 61 6e 64 20 3f 61 72 67 75 6d 65 6e  command ?argumen
7dc0: 74 20 2e 2e 2e 3f 22 7d 5c 0a 21 20 20 20 20 20  t ...?"}\.!     
7dd0: 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  1 {wrong # args:
7de0: 20 73 68 6f 75 6c 64 20 62 65 20 22 6e 73 20 78   should be "ns x
7df0: 31 20 78 31 20 61 32 20 61 33 20 61 34 22 7d 5c  1 x1 a2 a3 a4"}\
7e00: 0a 21 20 20 20 20 20 31 20 7b 77 72 6f 6e 67 20  .!     1 {wrong 
7e10: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
7e20: 65 20 22 6e 73 20 78 31 20 78 31 20 61 32 20 61  e "ns x1 x1 a2 a
7e30: 33 20 61 34 22 7d 5c 0a 21 20 20 20 20 20 31 20  3 a4"}\.!     1 
7e40: 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  {wrong # args: s
7e50: 68 6f 75 6c 64 20 62 65 20 22 6e 73 20 78 31 20  hould be "ns x1 
7e60: 78 31 20 61 32 20 61 33 20 61 34 22 7d 5c 0a 21  x1 a2 a3 a4"}\.!
7e70: 20 20 20 20 20 30 20 7b 78 31 20 78 31 20 78 31       0 {x1 x1 x1
7e80: 20 78 31 20 78 31 7d 7d 0a 21 20 0a 21 20 74 65   x1 x1}}.! .! te
7e90: 73 74 20 6e 61 6d 65 73 70 61 63 65 2d 35 33 2e  st namespace-53.
7ea0: 38 20 7b 65 6e 73 65 6d 62 6c 65 3a 20 75 6e 6b  8 {ensemble: unk
7eb0: 6e 6f 77 6e 20 68 61 6e 64 6c 65 72 20 63 68 61  nown handler cha
7ec0: 6e 67 69 6e 67 20 2d 70 61 72 61 6d 65 74 65 72  nging -parameter
7ed0: 73 7d 20 2d 73 65 74 75 70 20 7b 0a 21 20 20 20  s} -setup {.!   
7ee0: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c    namespace eval
7ef0: 20 6e 73 20 7b 0a 21 20 09 6e 61 6d 65 73 70 61   ns {.! .namespa
7f00: 63 65 20 65 78 70 6f 72 74 20 78 2a 0a 21 20 09  ce export x*.! .
7f10: 70 72 6f 63 20 78 31 20 7b 61 31 7d 20 7b 6c 69  proc x1 {a1} {li
7f20: 73 74 20 31 20 24 61 31 7d 0a 21 20 09 70 72 6f  st 1 $a1}.! .pro
7f30: 63 20 4d 61 67 69 63 20 7b 65 6e 73 65 6d 62 6c  c Magic {ensembl
7f40: 65 20 73 75 62 63 6d 64 20 61 72 67 73 7d 20 7b  e subcmd args} {
7f50: 0a 21 20 09 20 20 20 20 6e 61 6d 65 73 70 61 63  .! .    namespac
7f60: 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6e 66 69  e ensemble confi
7f70: 67 75 72 65 20 24 65 6e 73 65 6d 62 6c 65 5c 0a  gure $ensemble\.
7f80: 21 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  !               
7f90: 2d 70 61 72 61 6d 65 74 65 72 73 20 5b 6c 72 61  -parameters [lra
7fa0: 6e 67 65 20 70 31 20 5b 6c 6c 65 6e 67 74 68 20  nge p1 [llength 
7fb0: 5b 0a 21 20 20 20 20 20 20 20 20 20 20 20 20 20  [.!             
7fc0: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 6e      namespace en
7fd0: 73 65 6d 62 6c 65 20 63 6f 6e 66 69 67 75 72 65  semble configure
7fe0: 20 24 65 6e 73 65 6d 62 6c 65 20 2d 70 61 72 61   $ensemble -para
7ff0: 6d 65 74 65 72 73 0a 21 20 20 20 20 20 20 20 20  meters.!        
8000: 20 20 20 20 20 20 20 5d 5d 20 30 5d 0a 21 20 20         ]] 0].!  
8010: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 0a             list.
8020: 21 20 09 7d 0a 21 20 09 6e 61 6d 65 73 70 61 63  ! .}.! .namespac
8030: 65 20 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74  e ensemble creat
8040: 65 20 2d 75 6e 6b 6e 6f 77 6e 20 3a 3a 6e 73 3a  e -unknown ::ns:
8050: 3a 4d 61 67 69 63 0a 21 20 20 20 20 20 7d 0a 21  :Magic.!     }.!
8060: 20 7d 20 2d 62 6f 64 79 20 7b 0a 21 20 20 20 20   } -body {.!    
8070: 20 73 65 74 20 72 65 73 75 6c 74 20 7b 7d 0a 21   set result {}.!
8080: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
8090: 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e 73 20 78  ult [catch {ns x
80a0: 31 20 78 32 7d 20 6d 73 67 5d 20 24 6d 73 67 20  1 x2} msg] $msg 
80b0: 5b 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d  [namespace ensem
80c0: 62 6c 65 20 63 6f 6e 66 69 67 75 72 65 20 6e 73  ble configure ns
80d0: 20 2d 70 61 72 61 6d 65 74 65 72 73 5d 0a 21 20   -parameters].! 
80e0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
80f0: 6c 74 20 5b 63 61 74 63 68 20 7b 6e 73 20 78 32  lt [catch {ns x2
8100: 20 78 31 7d 20 6d 73 67 5d 20 24 6d 73 67 20 5b   x1} msg] $msg [
8110: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
8120: 6c 65 20 63 6f 6e 66 69 67 75 72 65 20 6e 73 20  le configure ns 
8130: 2d 70 61 72 61 6d 65 74 65 72 73 5d 0a 21 20 20  -parameters].!  
8140: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
8150: 74 20 5b 63 61 74 63 68 20 7b 6e 73 20 78 32 20  t [catch {ns x2 
8160: 78 33 7d 20 6d 73 67 5d 20 24 6d 73 67 20 5b 6e  x3} msg] $msg [n
8170: 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c  amespace ensembl
8180: 65 20 63 6f 6e 66 69 67 75 72 65 20 6e 73 20 2d  e configure ns -
8190: 70 61 72 61 6d 65 74 65 72 73 5d 0a 21 20 7d 20  parameters].! } 
81a0: 2d 63 6c 65 61 6e 75 70 20 7b 0a 21 20 20 20 20  -cleanup {.!    
81b0: 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74   namespace delet
81c0: 65 20 6e 73 0a 21 20 7d 20 2d 72 65 73 75 6c 74  e ns.! } -result
81d0: 5c 0a 21 20 20 20 20 7b 30 20 7b 31 20 78 32 7d  \.!    {0 {1 x2}
81e0: 20 7b 7d 5c 0a 21 20 20 20 20 20 30 20 7b 31 20   {}\.!     0 {1 
81f0: 78 32 7d 20 70 31 5c 0a 21 20 20 20 20 20 31 20  x2} p1\.!     1 
8200: 7b 75 6e 6b 6e 6f 77 6e 20 6f 72 20 61 6d 62 69  {unknown or ambi
8210: 67 75 6f 75 73 20 73 75 62 63 6f 6d 6d 61 6e 64  guous subcommand
8220: 20 22 78 32 22 3a 20 6d 75 73 74 20 62 65 20 78   "x2": must be x
8230: 31 7d 20 7b 7d 7d 0a 21 20 0a 21 20 74 65 73 74  1} {}}.! .! test
8240: 20 6e 61 6d 65 73 70 61 63 65 2d 35 33 2e 39 20   namespace-53.9 
8250: 7b 65 6e 73 65 6d 62 6c 65 3a 20 75 6e 6b 6e 6f  {ensemble: unkno
8260: 77 6e 20 68 61 6e 64 6c 65 72 20 63 68 61 6e 67  wn handler chang
8270: 69 6e 67 20 2d 70 61 72 61 6d 65 74 65 72 73 2c  ing -parameters,
8280: 5c 0a 21 20 20 20 74 68 65 72 65 62 79 20 65 61  \.!   thereby ea
8290: 74 69 6e 67 20 61 6c 6c 20 61 72 67 73 7d 20 2d  ting all args} -
82a0: 73 65 74 75 70 20 7b 0a 21 20 20 20 20 20 6e 61  setup {.!     na
82b0: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e 73 20  mespace eval ns 
82c0: 7b 0a 21 20 09 6e 61 6d 65 73 70 61 63 65 20 65  {.! .namespace e
82d0: 78 70 6f 72 74 20 78 2a 0a 21 20 09 70 72 6f 63  xport x*.! .proc
82e0: 20 78 31 20 7b 61 72 67 73 7d 20 7b 6c 69 73 74   x1 {args} {list
82f0: 20 31 20 24 61 72 67 73 7d 0a 21 20 09 70 72 6f   1 $args}.! .pro
8300: 63 20 4d 61 67 69 63 20 7b 65 6e 73 65 6d 62 6c  c Magic {ensembl
8310: 65 20 73 75 62 63 6d 64 20 61 72 67 73 7d 20 7b  e subcmd args} {
8320: 0a 21 20 09 20 20 20 20 6e 61 6d 65 73 70 61 63  .! .    namespac
8330: 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6e 66 69  e ensemble confi
8340: 67 75 72 65 20 24 65 6e 73 65 6d 62 6c 65 5c 0a  gure $ensemble\.
8350: 21 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  !               
8360: 2d 70 61 72 61 6d 65 74 65 72 73 20 7b 70 31 20  -parameters {p1 
8370: 70 32 20 70 33 20 70 34 20 70 35 7d 0a 21 20 20  p2 p3 p4 p5}.!  
8380: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 0a             list.
8390: 21 20 09 7d 0a 21 20 09 6e 61 6d 65 73 70 61 63  ! .}.! .namespac
83a0: 65 20 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74  e ensemble creat
83b0: 65 20 2d 75 6e 6b 6e 6f 77 6e 20 3a 3a 6e 73 3a  e -unknown ::ns:
83c0: 3a 4d 61 67 69 63 0a 21 20 20 20 20 20 7d 0a 21  :Magic.!     }.!
83d0: 20 7d 20 2d 62 6f 64 79 20 7b 0a 21 20 20 20 20   } -body {.!    
83e0: 20 73 65 74 20 72 65 73 75 6c 74 20 7b 7d 0a 21   set result {}.!
83f0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
8400: 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e 73 20 78  ult [catch {ns x
8410: 31 20 78 32 7d 20 6d 73 67 5d 20 24 6d 73 67 20  1 x2} msg] $msg 
8420: 5b 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d  [namespace ensem
8430: 62 6c 65 20 63 6f 6e 66 69 67 75 72 65 20 6e 73  ble configure ns
8440: 20 2d 70 61 72 61 6d 65 74 65 72 73 5d 0a 21 20   -parameters].! 
8450: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
8460: 6c 74 20 5b 63 61 74 63 68 20 7b 6e 73 20 78 32  lt [catch {ns x2
8470: 20 78 31 7d 20 6d 73 67 5d 20 24 6d 73 67 20 5b   x1} msg] $msg [
8480: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
8490: 6c 65 20 63 6f 6e 66 69 67 75 72 65 20 6e 73 20  le configure ns 
84a0: 2d 70 61 72 61 6d 65 74 65 72 73 5d 0a 21 20 20  -parameters].!  
84b0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
84c0: 74 20 5b 63 61 74 63 68 20 7b 6e 73 20 61 31 20  t [catch {ns a1 
84d0: 61 32 20 61 33 20 61 34 20 61 35 20 78 31 7d 20  a2 a3 a4 a5 x1} 
84e0: 6d 73 67 5d 20 24 6d 73 67 20 5b 6e 61 6d 65 73  msg] $msg [names
84f0: 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63 6f  pace ensemble co
8500: 6e 66 69 67 75 72 65 20 6e 73 20 2d 70 61 72 61  nfigure ns -para
8510: 6d 65 74 65 72 73 5d 0a 21 20 7d 20 2d 63 6c 65  meters].! } -cle
8520: 61 6e 75 70 20 7b 0a 21 20 20 20 20 20 6e 61 6d  anup {.!     nam
8530: 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e 73  espace delete ns
8540: 0a 21 20 7d 20 2d 72 65 73 75 6c 74 5c 0a 21 20  .! } -result\.! 
8550: 20 20 20 7b 30 20 7b 31 20 78 32 7d 20 7b 7d 5c     {0 {1 x2} {}\
8560: 0a 21 20 20 20 20 20 31 20 7b 77 72 6f 6e 67 20  .!     1 {wrong 
8570: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
8580: 65 20 22 6e 73 20 70 31 20 70 32 20 70 33 20 70  e "ns p1 p2 p3 p
8590: 34 20 70 35 20 73 75 62 63 6f 6d 6d 61 6e 64 20  4 p5 subcommand 
85a0: 3f 61 72 67 75 6d 65 6e 74 20 2e 2e 2e 3f 22 7d  ?argument ...?"}
85b0: 20 7b 70 31 20 70 32 20 70 33 20 70 34 20 70 35   {p1 p2 p3 p4 p5
85c0: 7d 5c 0a 21 20 20 20 20 20 30 20 7b 31 20 7b 61  }\.!     0 {1 {a
85d0: 31 20 61 32 20 61 33 20 61 34 20 61 35 7d 7d 20  1 a2 a3 a4 a5}} 
85e0: 7b 70 31 20 70 32 20 70 33 20 70 34 20 70 35 7d  {p1 p2 p3 p4 p5}
85f0: 7d 0a 21 20 0a 21 20 74 65 73 74 20 6e 61 6d 65  }.! .! test name
8600: 73 70 61 63 65 2d 35 33 2e 31 30 20 7b 65 6e 73  space-53.10 {ens
8610: 65 6d 62 6c 65 73 3a 20 6e 65 73 74 65 64 20 72  embles: nested r
8620: 65 77 72 69 74 65 7d 20 2d 73 65 74 75 70 20 7b  ewrite} -setup {
8630: 0a 21 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65  .!     namespace
8640: 20 65 76 61 6c 20 6e 73 20 7b 0a 21 20 09 6e 61   eval ns {.! .na
8650: 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 78  mespace export x
8660: 0a 21 20 09 6e 61 6d 65 73 70 61 63 65 20 65 76  .! .namespace ev
8670: 61 6c 20 78 20 7b 0a 21 20 09 20 20 20 20 70 72  al x {.! .    pr
8680: 6f 63 20 7a 30 20 7b 7d 20 7b 6c 69 73 74 20 30  oc z0 {} {list 0
8690: 7d 0a 21 20 09 20 20 20 20 70 72 6f 63 20 7a 31  }.! .    proc z1
86a0: 20 7b 61 31 7d 20 7b 6c 69 73 74 20 31 20 24 61   {a1} {list 1 $a
86b0: 31 7d 0a 21 20 09 20 20 20 20 70 72 6f 63 20 7a  1}.! .    proc z
86c0: 32 20 7b 61 31 20 61 32 7d 20 7b 6c 69 73 74 20  2 {a1 a2} {list 
86d0: 32 20 24 61 31 20 24 61 32 7d 0a 21 20 09 20 20  2 $a1 $a2}.! .  
86e0: 20 20 70 72 6f 63 20 7a 33 20 7b 61 31 20 61 32    proc z3 {a1 a2
86f0: 20 61 33 7d 20 7b 6c 69 73 74 20 33 20 24 61 31   a3} {list 3 $a1
8700: 20 24 61 32 20 24 61 33 7d 0a 21 20 09 20 20 20   $a2 $a3}.! .   
8710: 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72   namespace expor
8720: 74 20 7a 2a 0a 21 20 09 20 20 20 20 6e 61 6d 65  t z*.! .    name
8730: 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65 20 63  space ensemble c
8740: 72 65 61 74 65 0a 21 20 09 7d 0a 21 20 09 6e 61  reate.! .}.! .na
8750: 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65  mespace ensemble
8760: 20 63 72 65 61 74 65 20 2d 70 61 72 61 6d 65 74   create -paramet
8770: 65 72 73 20 70 0a 21 20 20 20 20 20 7d 0a 21 20  ers p.!     }.! 
8780: 7d 20 2d 62 6f 64 79 20 7b 0a 21 20 20 20 20 20  } -body {.!     
8790: 73 65 74 20 72 65 73 75 6c 74 20 7b 7d 0a 21 20  set result {}.! 
87a0: 20 20 20 20 23 20 49 6e 20 74 68 65 73 65 20 63      # In these c
87b0: 61 73 65 73 2c 20 70 61 72 73 69 6e 67 20 74 68  ases, parsing th
87c0: 65 20 73 75 62 65 6e 73 65 6d 62 6c 65 20 64 6f  e subensemble do
87d0: 65 73 20 6e 6f 74 20 67 72 61 62 20 61 20 6e 65  es not grab a ne
87e0: 77 20 77 6f 72 64 2e 0a 21 20 20 20 20 20 6c 61  w word..!     la
87f0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
8800: 74 63 68 20 7b 6e 73 20 7a 30 20 78 7d 20 6d 73  tch {ns z0 x} ms
8810: 67 5d 20 24 6d 73 67 0a 21 20 20 20 20 20 6c 61  g] $msg.!     la
8820: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
8830: 74 63 68 20 7b 6e 73 20 7a 31 20 78 7d 20 6d 73  tch {ns z1 x} ms
8840: 67 5d 20 24 6d 73 67 0a 21 20 20 20 20 20 6c 61  g] $msg.!     la
8850: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
8860: 74 63 68 20 7b 6e 73 20 7a 32 20 78 7d 20 6d 73  tch {ns z2 x} ms
8870: 67 5d 20 24 6d 73 67 0a 21 20 20 20 20 20 6c 61  g] $msg.!     la
8880: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
8890: 74 63 68 20 7b 6e 73 20 7a 32 20 78 20 76 7d 20  tch {ns z2 x v} 
88a0: 6d 73 67 5d 20 24 6d 73 67 0a 21 20 20 20 20 20  msg] $msg.!     
88b0: 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62  namespace ensemb
88c0: 6c 65 20 63 6f 6e 66 69 67 75 72 65 20 6e 73 3a  le configure ns:
88d0: 3a 78 20 2d 70 61 72 61 6d 65 74 65 72 73 20 71  :x -parameters q
88e0: 31 0a 21 20 20 20 20 20 23 20 49 6e 20 74 68 65  1.!     # In the
88f0: 73 65 20 63 61 73 65 73 2c 20 70 61 72 73 69 6e  se cases, parsin
8900: 67 20 74 68 65 20 73 75 62 65 6e 73 65 6d 62 6c  g the subensembl
8910: 65 20 67 72 61 62 73 20 61 20 6e 65 77 20 77 6f  e grabs a new wo
8920: 72 64 2e 0a 21 20 20 20 20 20 6c 61 70 70 65 6e  rd..!     lappen
8930: 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  d result [catch 
8940: 7b 6e 73 20 76 20 78 20 7a 30 7d 20 6d 73 67 5d  {ns v x z0} msg]
8950: 20 24 6d 73 67 0a 21 20 20 20 20 20 6c 61 70 70   $msg.!     lapp
8960: 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63  end result [catc
8970: 68 20 7b 6e 73 20 76 20 78 20 7a 31 7d 20 6d 73  h {ns v x z1} ms
8980: 67 5d 20 24 6d 73 67 0a 21 20 20 20 20 20 6c 61  g] $msg.!     la
8990: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
89a0: 74 63 68 20 7b 6e 73 20 76 20 78 20 7a 32 7d 20  tch {ns v x z2} 
89b0: 6d 73 67 5d 20 24 6d 73 67 0a 21 20 20 20 20 20  msg] $msg.!     
89c0: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
89d0: 63 61 74 63 68 20 7b 6e 73 20 76 20 78 20 7a 32  catch {ns v x z2
89e0: 20 76 32 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 21   v2} msg] $msg.!
89f0: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 21 20   } -cleanup {.! 
8a00: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64 65      namespace de
8a10: 6c 65 74 65 20 6e 73 0a 21 20 7d 20 2d 72 65 73  lete ns.! } -res
8a20: 75 6c 74 5c 0a 21 20 20 20 20 7b 30 20 30 5c 0a  ult\.!    {0 0\.
8a30: 21 20 20 20 20 20 31 20 7b 77 72 6f 6e 67 20 23  !     1 {wrong #
8a40: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
8a50: 20 22 6e 73 20 7a 31 20 78 20 61 31 22 7d 5c 0a   "ns z1 x a1"}\.
8a60: 21 20 20 20 20 20 31 20 7b 77 72 6f 6e 67 20 23  !     1 {wrong #
8a70: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
8a80: 20 22 6e 73 20 7a 32 20 78 20 61 31 20 61 32 22   "ns z2 x a1 a2"
8a90: 7d 5c 0a 21 20 20 20 20 20 31 20 7b 77 72 6f 6e  }\.!     1 {wron
8aa0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
8ab0: 20 62 65 20 22 6e 73 20 7a 32 20 78 20 61 31 20   be "ns z2 x a1 
8ac0: 61 32 22 7d 5c 0a 21 20 20 20 20 20 31 20 7b 77  a2"}\.!     1 {w
8ad0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
8ae0: 75 6c 64 20 62 65 20 22 3a 3a 6e 73 3a 3a 78 3a  uld be "::ns::x:
8af0: 3a 7a 30 22 7d 5c 0a 21 20 20 20 20 20 30 20 7b  :z0"}\.!     0 {
8b00: 31 20 76 7d 5c 0a 21 20 20 20 20 20 31 20 7b 77  1 v}\.!     1 {w
8b10: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
8b20: 75 6c 64 20 62 65 20 22 6e 73 20 76 20 78 20 7a  uld be "ns v x z
8b30: 32 20 61 32 22 7d 5c 0a 21 20 20 20 20 20 30 20  2 a2"}\.!     0 
8b40: 7b 32 20 76 20 76 32 7d 7d 0a 21 20 0a 20 20 23  {2 v v2}}.! .  #
8b50: 20 63 6c 65 61 6e 75 70 0a 20 20 63 61 74 63 68   cleanup.  catch
8b60: 20 7b 72 65 6e 61 6d 65 20 63 6d 64 31 20 7b 7d   {rename cmd1 {}
8b70: 7d 0a 20 20 63 61 74 63 68 20 7b 75 6e 73 65 74  }.  catch {unset
8b80: 20 6c 7d 0a                                       l}.