Tcl Source Code

Hex Artifact Content
Login

Artifact 33cd3cd5e643f570ec5956101f7b519ca3429fb1:

Attachment "nsinvoke.patch" to ticket [1577324fff] added by msofer 2006-10-15 02:07:26.
0000: 49 6e 64 65 78 3a 20 64 6f 63 2f 6e 61 6d 65 73  Index: doc/names
0010: 70 61 63 65 2e 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d  pace.n.=========
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66  ==========.RCS f
0060: 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63  ile: /cvsroot/tc
0070: 6c 2f 74 63 6c 2f 64 6f 63 2f 6e 61 6d 65 73 70  l/tcl/doc/namesp
0080: 61 63 65 2e 6e 2c 76 0a 72 65 74 72 69 65 76 69  ace.n,v.retrievi
0090: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 32 31  ng revision 1.21
00a0: 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 32 31 20  .diff -u -r1.21 
00b0: 6e 61 6d 65 73 70 61 63 65 2e 6e 0a 2d 2d 2d 20  namespace.n.--- 
00c0: 64 6f 63 2f 6e 61 6d 65 73 70 61 63 65 2e 6e 09  doc/namespace.n.
00d0: 32 36 20 41 75 67 20 32 30 30 36 20 31 33 3a 30  26 Aug 2006 13:0
00e0: 30 3a 33 38 20 2d 30 30 30 30 09 31 2e 32 31 0a  0:38 -0000.1.21.
00f0: 2b 2b 2b 20 64 6f 63 2f 6e 61 6d 65 73 70 61 63  +++ doc/namespac
0100: 65 2e 6e 09 31 34 20 4f 63 74 20 32 30 30 36 20  e.n.14 Oct 2006 
0110: 31 39 3a 30 33 3a 35 32 20 2d 30 30 30 30 0a 40  19:03:52 -0000.@
0120: 40 20 2d 31 38 30 2c 36 20 2b 31 38 30 2c 31 31  @ -180,6 +180,11
0130: 20 40 40 0a 20 49 66 20 61 6e 6f 74 68 65 72 20   @@. If another 
0140: 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65 66 69 6e  command is defin
0150: 65 64 20 61 6e 64 20 65 78 70 6f 72 74 65 64 20  ed and exported 
0160: 69 6e 20 74 68 69 73 20 6e 61 6d 65 73 70 61 63  in this namespac
0170: 65 20 6c 61 74 65 72 20 6f 6e 2c 0a 20 69 74 20  e later on,. it 
0180: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 69 6d 70 6f  will not be impo
0190: 72 74 65 64 2e 0a 20 2e 54 50 0a 2b 5c 66 42 6e  rted.. .TP.+\fBn
01a0: 61 6d 65 73 70 61 63 65 20 69 6e 76 6f 6b 65 5c  amespace invoke\
01b0: 66 52 20 5c 66 49 6e 61 6d 65 73 70 61 63 65 20  fR \fInamespace 
01c0: 63 6d 64 5c 66 52 20 3f 5c 66 49 61 72 67 20 2e  cmd\fR ?\fIarg .
01d0: 2e 2e 5c 66 52 3f 0a 2b 49 6e 76 6f 6b 65 73 20  ..\fR?.+Invokes 
01e0: 69 6e 20 63 61 6c 6c 65 72 27 73 20 73 63 6f 70  in caller's scop
01f0: 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 63 61  e the command ca
0200: 6c 6c 65 64 20 5c 66 49 63 6d 64 5c 66 52 2c 20  lled \fIcmd\fR, 
0210: 61 73 20 72 65 73 6f 6c 76 65 64 20 66 72 6f 6d  as resolved from
0220: 0a 2b 6e 61 6d 65 73 70 61 63 65 20 5c 66 49 6e  .+namespace \fIn
0230: 61 6d 65 73 70 61 63 65 5c 66 52 2c 20 77 69 74  amespace\fR, wit
0240: 68 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 61  h the supplied a
0250: 72 67 75 6d 65 6e 74 73 2e 20 49 66 0a 2b 5c 66  rguments. If.+\f
0260: 49 6e 61 6d 65 73 70 61 63 65 5c 66 52 20 64 6f  Inamespace\fR do
0270: 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 74 68  es not exist, th
0280: 65 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e  e command return
0290: 73 20 61 6e 20 61 72 72 6f 72 2e 0a 2b 2e 54 50  s an arror..+.TP
02a0: 0a 20 5c 66 42 6e 61 6d 65 73 70 61 63 65 20 69  . \fBnamespace i
02b0: 6e 73 63 6f 70 65 5c 66 52 20 5c 66 49 6e 61 6d  nscope\fR \fInam
02c0: 65 73 70 61 63 65 5c 66 52 20 5c 66 49 73 63 72  espace\fR \fIscr
02d0: 69 70 74 5c 66 52 20 3f 5c 66 49 61 72 67 20 2e  ipt\fR ?\fIarg .
02e0: 2e 2e 5c 66 52 3f 0a 20 45 78 65 63 75 74 65 73  ..\fR?. Executes
02f0: 20 61 20 73 63 72 69 70 74 20 69 6e 20 74 68 65   a script in the
0300: 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20   context of the 
0310: 73 70 65 63 69 66 69 65 64 20 5c 66 49 6e 61 6d  specified \fInam
0320: 65 73 70 61 63 65 5c 66 52 2e 0a 20 54 68 69 73  espace\fR.. This
0330: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20   command is not 
0340: 65 78 70 65 63 74 65 64 20 74 6f 20 62 65 20 75  expected to be u
0350: 73 65 64 20 64 69 72 65 63 74 6c 79 20 62 79 20  sed directly by 
0360: 70 72 6f 67 72 61 6d 6d 65 72 73 3b 0a 49 6e 64  programmers;.Ind
0370: 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 4e  ex: generic/tclN
0380: 61 6d 65 73 70 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d  amesp.c.========
0390: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
03a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
03b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
03c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20  ===========.RCS 
03d0: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74  file: /cvsroot/t
03e0: 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74  cl/tcl/generic/t
03f0: 63 6c 4e 61 6d 65 73 70 2e 63 2c 76 0a 72 65 74  clNamesp.c,v.ret
0400: 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e  rieving revision
0410: 20 31 2e 31 30 31 0a 64 69 66 66 20 2d 75 20 2d   1.101.diff -u -
0420: 72 31 2e 31 30 31 20 74 63 6c 4e 61 6d 65 73 70  r1.101 tclNamesp
0430: 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74  .c.--- generic/t
0440: 63 6c 4e 61 6d 65 73 70 2e 63 09 31 30 20 4f 63  clNamesp.c.10 Oc
0450: 74 20 32 30 30 36 20 31 36 3a 34 35 3a 30 34 20  t 2006 16:45:04 
0460: 2d 30 30 30 30 09 31 2e 31 30 31 0a 2b 2b 2b 20  -0000.1.101.+++ 
0470: 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d 65 73  generic/tclNames
0480: 70 2e 63 09 31 34 20 4f 63 74 20 32 30 30 36 20  p.c.14 Oct 2006 
0490: 31 39 3a 30 34 3a 30 39 20 2d 30 30 30 30 0a 40  19:04:09 -0000.@
04a0: 40 20 2d 32 31 37 2c 36 20 2b 32 31 37 2c 38 20  @ -217,6 +217,8 
04b0: 40 40 0a 20 73 74 61 74 69 63 20 76 6f 69 64 09  @@. static void.
04c0: 09 4e 61 6d 65 73 70 61 63 65 46 72 65 65 28 4e  .NamespaceFree(N
04d0: 61 6d 65 73 70 61 63 65 20 2a 6e 73 50 74 72 29  amespace *nsPtr)
04e0: 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 4e  ;. static int..N
04f0: 61 6d 65 73 70 61 63 65 49 6d 70 6f 72 74 43 6d  amespaceImportCm
0500: 64 28 43 6c 69 65 6e 74 44 61 74 61 20 64 75 6d  d(ClientData dum
0510: 6d 79 2c 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  my,Tcl_Interp *i
0520: 6e 74 65 72 70 2c 0a 20 09 09 09 20 20 20 20 69  nterp,. ...    i
0530: 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a  nt objc, Tcl_Obj
0540: 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d 29 3b   *const objv[]);
0550: 0a 2b 73 74 61 74 69 63 20 69 6e 74 09 09 4e 61  .+static int..Na
0560: 6d 65 73 70 61 63 65 49 6e 76 6f 6b 65 43 6d 64  mespaceInvokeCmd
0570: 28 43 6c 69 65 6e 74 44 61 74 61 20 64 75 6d 6d  (ClientData dumm
0580: 79 2c 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  y,Tcl_Interp *in
0590: 74 65 72 70 2c 0a 2b 09 09 09 20 20 20 20 69 6e  terp,.+...    in
05a0: 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20  t objc, Tcl_Obj 
05b0: 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d 29 3b 0a  *const objv[]);.
05c0: 20 73 74 61 74 69 63 20 69 6e 74 09 09 4e 61 6d   static int..Nam
05d0: 65 73 70 61 63 65 49 6e 73 63 6f 70 65 43 6d 64  espaceInscopeCmd
05e0: 28 43 6c 69 65 6e 74 44 61 74 61 20 64 75 6d 6d  (ClientData dumm
05f0: 79 2c 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 49  y,. ...    Tcl_I
0600: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 69 6e  nterp *interp,in
0610: 74 20 6f 62 6a 63 2c 54 63 6c 5f 4f 62 6a 20 2a  t objc,Tcl_Obj *
0620: 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d 29 3b 0a 20  const objv[]);. 
0630: 73 74 61 74 69 63 20 69 6e 74 09 09 4e 61 6d 65  static int..Name
0640: 73 70 61 63 65 4f 72 69 67 69 6e 43 6d 64 28 43  spaceOriginCmd(C
0650: 6c 69 65 6e 74 44 61 74 61 20 64 75 6d 6d 79 2c  lientData dummy,
0660: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
0670: 72 70 2c 0a 40 40 20 2d 32 39 33 36 2c 31 34 20  rp,.@@ -2936,14 
0680: 2b 32 39 33 35 2c 31 34 20 40 40 0a 20 20 20 20  +2935,14 @@.    
0690: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
06a0: 61 72 20 2a 73 75 62 43 6d 64 73 5b 5d 20 3d 20  ar *subCmds[] = 
06b0: 7b 0a 20 09 22 63 68 69 6c 64 72 65 6e 22 2c 20  {. ."children", 
06c0: 22 63 6f 64 65 22 2c 20 22 63 75 72 72 65 6e 74  "code", "current
06d0: 22 2c 20 22 64 65 6c 65 74 65 22 2c 20 22 65 6e  ", "delete", "en
06e0: 73 65 6d 62 6c 65 22 2c 0a 20 09 22 65 76 61 6c  semble",. ."eval
06f0: 22 2c 20 22 65 78 69 73 74 73 22 2c 20 22 65 78  ", "exists", "ex
0700: 70 6f 72 74 22 2c 20 22 66 6f 72 67 65 74 22 2c  port", "forget",
0710: 20 22 69 6d 70 6f 72 74 22 2c 0a 2d 09 22 69 6e   "import",.-."in
0720: 73 63 6f 70 65 22 2c 20 22 6f 72 69 67 69 6e 22  scope", "origin"
0730: 2c 20 22 70 61 72 65 6e 74 22 2c 20 22 70 61 74  , "parent", "pat
0740: 68 22 2c 20 22 71 75 61 6c 69 66 69 65 72 73 22  h", "qualifiers"
0750: 2c 0a 2d 09 22 74 61 69 6c 22 2c 20 22 75 6e 6b  ,.-."tail", "unk
0760: 6e 6f 77 6e 22 2c 20 22 75 70 76 61 72 22 2c 20  nown", "upvar", 
0770: 22 77 68 69 63 68 22 2c 20 4e 55 4c 4c 0a 2b 09  "which", NULL.+.
0780: 22 69 6e 76 6f 6b 65 22 2c 20 22 69 6e 73 63 6f  "invoke", "insco
0790: 70 65 22 2c 20 22 6f 72 69 67 69 6e 22 2c 20 22  pe", "origin", "
07a0: 70 61 72 65 6e 74 22 2c 20 22 70 61 74 68 22 2c  parent", "path",
07b0: 0a 2b 09 22 71 75 61 6c 69 66 69 65 72 73 22 2c  .+."qualifiers",
07c0: 20 22 74 61 69 6c 22 2c 20 22 75 6e 6b 6e 6f 77   "tail", "unknow
07d0: 6e 22 2c 20 22 75 70 76 61 72 22 2c 20 22 77 68  n", "upvar", "wh
07e0: 69 63 68 22 2c 20 4e 55 4c 4c 0a 20 20 20 20 20  ich", NULL.     
07f0: 7d 3b 0a 20 20 20 20 20 65 6e 75 6d 20 4e 53 53  };.     enum NSS
0800: 75 62 43 6d 64 49 64 78 20 7b 0a 20 09 4e 53 43  ubCmdIdx {. .NSC
0810: 68 69 6c 64 72 65 6e 49 64 78 2c 20 4e 53 43 6f  hildrenIdx, NSCo
0820: 64 65 49 64 78 2c 20 4e 53 43 75 72 72 65 6e 74  deIdx, NSCurrent
0830: 49 64 78 2c 20 4e 53 44 65 6c 65 74 65 49 64 78  Idx, NSDeleteIdx
0840: 2c 20 4e 53 45 6e 73 65 6d 62 6c 65 49 64 78 2c  , NSEnsembleIdx,
0850: 0a 20 09 4e 53 45 76 61 6c 49 64 78 2c 20 4e 53  . .NSEvalIdx, NS
0860: 45 78 69 73 74 73 49 64 78 2c 20 4e 53 45 78 70  ExistsIdx, NSExp
0870: 6f 72 74 49 64 78 2c 20 4e 53 46 6f 72 67 65 74  ortIdx, NSForget
0880: 49 64 78 2c 20 4e 53 49 6d 70 6f 72 74 49 64 78  Idx, NSImportIdx
0890: 2c 0a 2d 09 4e 53 49 6e 73 63 6f 70 65 49 64 78  ,.-.NSInscopeIdx
08a0: 2c 20 4e 53 4f 72 69 67 69 6e 49 64 78 2c 20 4e  , NSOriginIdx, N
08b0: 53 50 61 72 65 6e 74 49 64 78 2c 20 4e 53 50 61  SParentIdx, NSPa
08c0: 74 68 49 64 78 2c 20 4e 53 51 75 61 6c 69 66 69  thIdx, NSQualifi
08d0: 65 72 73 49 64 78 2c 0a 2d 09 4e 53 54 61 69 6c  ersIdx,.-.NSTail
08e0: 49 64 78 2c 20 4e 53 55 6e 6b 6e 6f 77 6e 49 64  Idx, NSUnknownId
08f0: 78 2c 20 4e 53 55 70 76 61 72 49 64 78 2c 20 4e  x, NSUpvarIdx, N
0900: 53 57 68 69 63 68 49 64 78 0a 2b 09 4e 53 49 6e  SWhichIdx.+.NSIn
0910: 76 6f 6b 65 49 64 78 2c 20 4e 53 49 6e 73 63 6f  vokeIdx, NSInsco
0920: 70 65 49 64 78 2c 20 4e 53 4f 72 69 67 69 6e 49  peIdx, NSOriginI
0930: 64 78 2c 20 4e 53 50 61 72 65 6e 74 49 64 78 2c  dx, NSParentIdx,
0940: 20 4e 53 50 61 74 68 49 64 78 2c 0a 2b 09 4e 53   NSPathIdx,.+.NS
0950: 51 75 61 6c 69 66 69 65 72 73 49 64 78 2c 20 4e  QualifiersIdx, N
0960: 53 54 61 69 6c 49 64 78 2c 20 4e 53 55 6e 6b 6e  STailIdx, NSUnkn
0970: 6f 77 6e 49 64 78 2c 20 4e 53 55 70 76 61 72 49  ownIdx, NSUpvarI
0980: 64 78 2c 20 4e 53 57 68 69 63 68 49 64 78 0a 20  dx, NSWhichIdx. 
0990: 20 20 20 20 7d 3b 0a 20 20 20 20 20 69 6e 74 20      };.     int 
09a0: 69 6e 64 65 78 2c 20 72 65 73 75 6c 74 3b 0a 20  index, result;. 
09b0: 0a 40 40 20 2d 32 39 39 33 2c 36 20 2b 32 39 39  .@@ -2993,6 +299
09c0: 32 2c 39 20 40 40 0a 20 20 20 20 20 63 61 73 65  2,9 @@.     case
09d0: 20 4e 53 49 6d 70 6f 72 74 49 64 78 3a 0a 20 09   NSImportIdx:. .
09e0: 72 65 73 75 6c 74 20 3d 20 4e 61 6d 65 73 70 61  result = Namespa
09f0: 63 65 49 6d 70 6f 72 74 43 6d 64 28 63 6c 69 65  ceImportCmd(clie
0a00: 6e 74 44 61 74 61 2c 20 69 6e 74 65 72 70 2c 20  ntData, interp, 
0a10: 6f 62 6a 63 2c 20 6f 62 6a 76 29 3b 0a 20 09 62  objc, objv);. .b
0a20: 72 65 61 6b 3b 0a 2b 20 20 20 20 63 61 73 65 20  reak;.+    case 
0a30: 4e 53 49 6e 76 6f 6b 65 49 64 78 3a 0a 2b 09 72  NSInvokeIdx:.+.r
0a40: 65 73 75 6c 74 20 3d 20 4e 61 6d 65 73 70 61 63  esult = Namespac
0a50: 65 49 6e 76 6f 6b 65 43 6d 64 28 63 6c 69 65 6e  eInvokeCmd(clien
0a60: 74 44 61 74 61 2c 20 69 6e 74 65 72 70 2c 20 6f  tData, interp, o
0a70: 62 6a 63 2c 20 6f 62 6a 76 29 3b 0a 2b 09 62 72  bjc, objv);.+.br
0a80: 65 61 6b 3b 0a 20 20 20 20 20 63 61 73 65 20 4e  eak;.     case N
0a90: 53 49 6e 73 63 6f 70 65 49 64 78 3a 0a 20 09 72  SInscopeIdx:. .r
0aa0: 65 73 75 6c 74 20 3d 20 4e 61 6d 65 73 70 61 63  esult = Namespac
0ab0: 65 49 6e 73 63 6f 70 65 43 6d 64 28 63 6c 69 65  eInscopeCmd(clie
0ac0: 6e 74 44 61 74 61 2c 20 69 6e 74 65 72 70 2c 20  ntData, interp, 
0ad0: 6f 62 6a 63 2c 20 6f 62 6a 76 29 3b 0a 20 09 62  objc, objv);. .b
0ae0: 72 65 61 6b 3b 0a 40 40 20 2d 33 37 36 33 2c 36  reak;.@@ -3763,6
0af0: 20 2b 33 37 36 35 2c 37 36 20 40 40 0a 20 2f 2a   +3765,76 @@. /*
0b00: 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  *------------
0b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a 2b  ----------.  *.+
0b50: 20 2a 20 4e 61 6d 65 73 70 61 63 65 49 6e 76 6f   * NamespaceInvo
0b60: 6b 65 43 6d 64 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a  keCmd --.+ *.+ *
0b70: 09 49 6e 76 6f 6b 65 64 20 74 6f 20 69 6d 70 6c  .Invoked to impl
0b80: 65 6d 65 6e 74 20 74 68 65 20 22 6e 61 6d 65 73  ement the "names
0b90: 70 61 63 65 20 69 6e 76 6f 6b 65 22 20 63 6f 6d  pace invoke" com
0ba0: 6d 61 6e 64 20 74 68 61 74 20 69 6e 76 6f 6b 65  mand that invoke
0bb0: 73 20 61 0a 2b 20 2a 09 63 6f 6d 6d 61 6e 64 20  s a.+ *.command 
0bc0: 69 6e 20 61 20 70 72 65 64 65 66 69 6e 65 64 20  in a predefined 
0bd0: 6e 61 6d 65 73 70 61 63 65 2e 20 48 61 6e 64 6c  namespace. Handl
0be0: 65 73 20 74 68 65 20 73 79 6e 74 61 78 0a 2b 20  es the syntax.+ 
0bf0: 2a 0a 2b 20 2a 09 20 20 20 20 6e 61 6d 65 73 70  *.+ *.    namesp
0c00: 61 63 65 20 69 6e 76 6f 6b 65 20 6e 73 20 63 6d  ace invoke ns cm
0c10: 64 20 3f 61 72 67 31 3f 20 3f 61 72 67 32 3f 20  d ?arg1? ?arg2? 
0c20: 2e 2e 2e 0a 2b 20 2a 0a 2b 20 2a 20 20 20 20 20  ....+ *.+ *     
0c30: 20 54 68 69 73 20 69 6e 76 6f 6b 65 73 20 74 68   This invokes th
0c40: 65 20 63 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 61  e command cmd, a
0c50: 73 20 72 65 73 6f 6c 76 65 64 20 66 72 6f 6d 20  s resolved from 
0c60: 6e 61 6d 65 73 70 61 63 65 20 6e 73 2c 20 77 69  namespace ns, wi
0c70: 74 68 20 74 68 65 0a 2b 20 2a 20 20 20 20 20 20  th the.+ *      
0c80: 73 75 70 70 6c 69 65 64 20 61 72 67 75 6d 65 6e  supplied argumen
0c90: 74 73 2e 20 49 74 20 69 73 20 73 69 6d 69 6c 61  ts. It is simila
0ca0: 72 20 74 6f 0a 2b 20 2a 0a 2b 20 2a 20 20 20 20  r to.+ *.+ *    
0cb0: 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20        namespace 
0cc0: 65 76 61 6c 20 6e 73 20 5b 6c 69 73 74 20 63 6d  eval ns [list cm
0cd0: 64 20 3f 61 72 67 31 3f 20 3f 61 72 67 32 3f 20  d ?arg1? ?arg2? 
0ce0: 2e 2e 2e 5d 0a 2b 20 2a 0a 2b 20 2a 20 20 20 20  ...].+ *.+ *    
0cf0: 20 20 75 70 20 74 6f 20 74 68 65 20 66 61 63 74    up to the fact
0d00: 20 74 68 61 74 20 69 74 20 65 78 65 63 75 74 65   that it execute
0d10: 73 20 69 6e 20 74 68 65 20 63 61 6c 6c 65 72 27  s in the caller'
0d20: 73 20 63 6f 6e 74 65 78 74 3a 20 69 74 20 64 6f  s context: it do
0d30: 65 73 20 2a 6e 6f 74 2a 0a 2b 20 2a 20 20 20 20  es *not*.+ *    
0d40: 20 20 70 75 73 68 20 61 20 6e 65 77 20 43 61 6c    push a new Cal
0d50: 6c 46 72 61 6d 65 2e 0a 2b 20 2a 0a 2b 20 2a 20  lFrame..+ *.+ * 
0d60: 52 65 73 75 6c 74 73 3a 0a 2b 20 2a 09 52 65 74  Results:.+ *.Ret
0d70: 75 72 6e 73 20 54 43 4c 5f 4f 4b 20 69 66 20 74  urns TCL_OK if t
0d80: 68 65 20 6e 61 6d 65 73 70 61 63 65 20 69 73 20  he namespace is 
0d90: 66 6f 75 6e 64 20 61 6e 64 20 74 68 65 20 63 6f  found and the co
0da0: 6d 6d 61 6e 64 20 69 73 20 65 78 65 63 75 74 65  mmand is execute
0db0: 64 0a 2b 20 2a 09 73 75 63 63 65 73 73 66 75 6c  d.+ *.successful
0dc0: 6c 79 2e 20 52 65 74 75 72 6e 73 20 54 43 4c 5f  ly. Returns TCL_
0dd0: 45 52 52 4f 52 20 69 66 20 61 6e 79 74 68 69 6e  ERROR if anythin
0de0: 67 20 67 6f 65 73 20 77 72 6f 6e 67 2e 0a 2b 20  g goes wrong..+ 
0df0: 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63  *.+ * Side effec
0e00: 74 73 3a 0a 2b 20 2a 09 52 65 74 75 72 6e 73 20  ts:.+ *.Returns 
0e10: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
0e20: 65 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65  e command in the
0e30: 20 69 6e 74 65 72 70 72 65 74 65 72 27 73 20 72   interpreter's r
0e40: 65 73 75 6c 74 20 6f 62 6a 65 63 74 2e 0a 2b 20  esult object..+ 
0e50: 2a 09 49 66 20 61 6e 79 74 68 69 6e 67 20 67 6f  *.If anything go
0e60: 65 73 20 77 72 6f 6e 67 2c 20 74 68 69 73 20 66  es wrong, this f
0e70: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
0e80: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
0e90: 20 61 73 20 74 68 65 0a 2b 20 2a 09 72 65 73 75   as the.+ *.resu
0ea0: 6c 74 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d  lt..+ *.+ *-----
0eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ef0: 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63  -.+ */.+.+static
0f00: 20 69 6e 74 0a 2b 4e 61 6d 65 73 70 61 63 65 49   int.+NamespaceI
0f10: 6e 76 6f 6b 65 43 6d 64 28 0a 2b 20 20 20 20 43  nvokeCmd(.+    C
0f20: 6c 69 65 6e 74 44 61 74 61 20 64 75 6d 6d 79 2c  lientData dummy,
0f30: 09 09 2f 2a 20 4e 6f 74 20 75 73 65 64 2e 20 2a  ../* Not used. *
0f40: 2f 0a 2b 20 20 20 20 54 63 6c 5f 49 6e 74 65 72  /.+    Tcl_Inter
0f50: 70 20 2a 69 6e 74 65 72 70 2c 09 09 2f 2a 20 43  p *interp,../* C
0f60: 75 72 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74  urrent interpret
0f70: 65 72 2e 20 2a 2f 0a 2b 20 20 20 20 69 6e 74 20  er. */.+    int 
0f80: 6f 62 6a 63 2c 09 09 09 2f 2a 20 4e 75 6d 62 65  objc,.../* Numbe
0f90: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  r of arguments. 
0fa0: 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20  */.+    Tcl_Obj 
0fb0: 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d 29 09 2f  *const objv[])./
0fc0: 2a 20 41 72 67 75 6d 65 6e 74 20 6f 62 6a 65 63  * Argument objec
0fd0: 74 73 2e 20 2a 2f 0a 2b 7b 0a 2b 20 20 20 20 49  ts. */.+{.+    I
0fe0: 6e 74 65 72 70 20 2a 69 50 74 72 20 3d 20 28 49  nterp *iPtr = (I
0ff0: 6e 74 65 72 70 20 2a 29 20 69 6e 74 65 72 70 3b  nterp *) interp;
1000: 0a 2b 20 20 20 20 54 63 6c 5f 4e 61 6d 65 73 70  .+    Tcl_Namesp
1010: 61 63 65 20 2a 6e 61 6d 65 73 70 61 63 65 50 74  ace *namespacePt
1020: 72 3b 0a 2b 20 20 20 20 69 6e 74 20 72 65 73 75  r;.+    int resu
1030: 6c 74 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 6f  lt;.+.+    if (o
1040: 62 6a 63 20 3c 20 34 29 20 7b 0a 2b 09 54 63 6c  bjc < 4) {.+.Tcl
1050: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
1060: 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 20 22  terp, 2, objv, "
1070: 6e 61 6d 65 20 63 6d 64 20 3f 61 72 67 2e 2e 2e  name cmd ?arg...
1080: 3f 22 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43  ?");.+.return TC
1090: 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a  L_ERROR;.+    }.
10a0: 2b 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20  +.+    /*.+     
10b0: 2a 20 54 72 79 20 74 6f 20 72 65 73 6f 6c 76 65  * Try to resolve
10c0: 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 20 72   the namespace r
10d0: 65 66 65 72 65 6e 63 65 2c 20 63 61 63 68 69 6e  eference, cachin
10e0: 67 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  g the result in 
10f0: 74 68 65 0a 2b 20 20 20 20 20 2a 20 6e 61 6d 65  the.+     * name
1100: 73 70 61 63 65 20 6f 62 6a 65 63 74 20 61 6c 6f  space object alo
1110: 6e 67 20 74 68 65 20 77 61 79 2e 20 49 66 20 74  ng the way. If t
1120: 68 65 20 6e 61 6d 65 73 70 61 63 65 20 69 73 20  he namespace is 
1130: 6e 6f 74 20 66 6f 75 6e 64 2c 20 72 65 74 75 72  not found, retur
1140: 6e 0a 2b 20 20 20 20 20 2a 20 61 6e 20 65 72 72  n.+     * an err
1150: 6f 72 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b 0a 2b  or..+     */.+.+
1160: 20 20 20 20 72 65 73 75 6c 74 20 3d 20 54 63 6c      result = Tcl
1170: 47 65 74 4e 61 6d 65 73 70 61 63 65 46 72 6f 6d  GetNamespaceFrom
1180: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
1190: 5b 32 5d 2c 20 26 6e 61 6d 65 73 70 61 63 65 50  [2], &namespaceP
11a0: 74 72 29 3b 0a 2b 20 20 20 20 69 66 20 28 72 65  tr);.+    if (re
11b0: 73 75 6c 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20  sult != TCL_OK) 
11c0: 7b 0a 2b 09 72 65 74 75 72 6e 20 72 65 73 75 6c  {.+.return resul
11d0: 74 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 69  t;.+    }.+    i
11e0: 66 20 28 6e 61 6d 65 73 70 61 63 65 50 74 72 20  f (namespacePtr 
11f0: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 54 63 6c  == NULL) {.+.Tcl
1200: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
1210: 74 65 72 70 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6e  terp, "unknown n
1220: 61 6d 65 73 70 61 63 65 20 5c 22 22 2c 0a 2b 09  amespace \"",.+.
1230: 09 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f  .Tcl_GetString(o
1240: 62 6a 76 5b 32 5d 29 2c 20 22 5c 22 22 2c 20 4e  bjv[2]), "\"", N
1250: 55 4c 4c 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54  ULL);.+.return T
1260: 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d  CL_ERROR;.+    }
1270: 0a 2b 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20  .+.+    /*.+    
1280: 20 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 6f   * Invoke the co
1290: 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20 72 65 71  mmand in the req
12a0: 75 65 73 74 65 64 20 6e 61 6d 65 73 70 61 63 65  uested namespace
12b0: 0a 2b 20 20 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20  .+     */.+.+   
12c0: 20 69 50 74 72 2d 3e 6c 6f 6f 6b 75 70 4e 73 50   iPtr->lookupNsP
12d0: 74 72 20 3d 20 28 4e 61 6d 65 73 70 61 63 65 20  tr = (Namespace 
12e0: 2a 29 20 6e 61 6d 65 73 70 61 63 65 50 74 72 3b  *) namespacePtr;
12f0: 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c  .+    return Tcl
1300: 5f 45 76 61 6c 4f 62 6a 76 28 69 6e 74 65 72 70  _EvalObjv(interp
1310: 2c 20 6f 62 6a 63 2d 33 2c 20 6f 62 6a 76 2b 33  , objc-3, objv+3
1320: 2c 20 54 43 4c 5f 45 56 41 4c 5f 49 4e 56 4f 4b  , TCL_EVAL_INVOK
1330: 45 29 3b 0a 2b 7d 20 20 20 0a 2b 0c 0a 2b 2f 2a  E);.+}   .+..+/*
1340: 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .+ *------------
1350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 20  ----------.+ *. 
1390: 20 2a 20 4e 61 6d 65 73 70 61 63 65 49 6e 73 63   * NamespaceInsc
13a0: 6f 70 65 43 6d 64 20 2d 2d 0a 20 20 2a 0a 20 20  opeCmd --.  *.  
13b0: 2a 09 49 6e 76 6f 6b 65 64 20 74 6f 20 69 6d 70  *.Invoked to imp
13c0: 6c 65 6d 65 6e 74 20 74 68 65 20 22 6e 61 6d 65  lement the "name
13d0: 73 70 61 63 65 20 69 6e 73 63 6f 70 65 22 20 63  space inscope" c
13e0: 6f 6d 6d 61 6e 64 20 74 68 61 74 20 65 78 65 63  ommand that exec
13f0: 75 74 65 73 20 61 0a                             utes a.