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