Tcl Source Code

Hex Artifact Content
Login

Artifact 7be4dcdd11cfef96e8da5cebbc9b48828f71d83a:

Attachment "nsupvar.patch" to ticket [1275435fff] added by msofer 2006-01-18 03:40:08.
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 31 38  ng revision 1.18
00a0: 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 31 38 20  .diff -u -r1.18 
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: 33 30 20 4d 61 79 20 32 30 30 35 20 30 30 3a 30  30 May 2005 00:0
00e0: 34 3a 34 35 20 2d 30 30 30 30 09 31 2e 31 38 0a  4:45 -0000.1.18.
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 37 20 4a 61 6e 20 32 30 30 36 20  e.n.17 Jan 2006 
0110: 32 30 3a 33 35 3a 35 32 20 2d 30 30 30 30 0a 40  20:35:52 -0000.@
0120: 40 20 2d 32 34 39 2c 36 20 2b 32 34 39 2c 31 33  @ -249,6 +249,13
0130: 20 40 40 0a 20 49 74 20 64 6f 65 73 20 6e 6f 74   @@. It does not
0140: 20 63 68 65 63 6b 20 77 68 65 74 68 65 72 20 74   check whether t
0150: 68 65 20 6e 61 6d 65 73 70 61 63 65 20 6e 61 6d  he namespace nam
0160: 65 73 20 61 72 65 2c 20 69 6e 20 66 61 63 74 2c  es are, in fact,
0170: 0a 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 63  . the names of c
0180: 75 72 72 65 6e 74 6c 79 20 64 65 66 69 6e 65 64  urrently defined
0190: 20 6e 61 6d 65 73 70 61 63 65 73 2e 0a 20 2e 54   namespaces.. .T
01a0: 50 0a 2b 5c 66 42 6e 61 6d 65 73 70 61 63 65 20  P.+\fBnamespace 
01b0: 75 70 76 61 72 5c 66 52 20 5c 66 49 6e 61 6d 65  upvar\fR \fIname
01c0: 73 70 61 63 65 5c 66 52 20 5c 66 49 6f 74 68 65  space\fR \fIothe
01d0: 72 56 61 72 20 6d 79 56 61 72 20 5c 66 52 3f 5c  rVar myVar \fR?\
01e0: 66 49 6f 74 68 65 72 56 61 72 20 6d 79 56 61 72  fIotherVar myVar
01f0: 20 5c 66 52 2e 2e 2e 0a 2b 54 68 69 73 20 63 6f   \fR....+This co
0200: 6d 6d 61 6e 64 20 61 72 72 61 6e 67 65 73 20 66  mmand arranges f
0210: 6f 72 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6c  or one or more l
0220: 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 73 20 69  ocal variables i
0230: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2b 70  n the current.+p
0240: 72 6f 63 65 64 75 72 65 20 74 6f 20 72 65 66 65  rocedure to refe
0250: 72 20 74 6f 20 76 61 72 69 61 62 6c 65 73 20 69  r to variables i
0260: 6e 20 5c 66 49 6e 61 6d 65 73 70 61 63 65 5c 66  n \fInamespace\f
0270: 52 2e 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 0a  R. The command .
0280: 2b 5c 66 42 6e 61 6d 65 73 70 61 63 65 20 75 70  +\fBnamespace up
0290: 76 61 72 20 24 6e 73 20 61 20 62 5c 66 52 20 68  var $ns a b\fR h
02a0: 61 73 20 74 68 65 20 73 61 6d 65 20 62 65 68 61  as the same beha
02b0: 76 69 6f 75 72 20 61 73 0a 2b 5c 66 42 75 70 76  viour as.+\fBupv
02c0: 61 72 20 30 20 24 6e 73 3a 3a 61 20 62 5c 66 52  ar 0 $ns::a b\fR
02d0: 2e 20 20 0a 2b 5c 66 42 6e 61 6d 65 73 70 61 63  .  .+\fBnamespac
02e0: 65 20 75 70 76 61 72 5c 66 52 20 72 65 74 75 72  e upvar\fR retur
02f0: 6e 73 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69  ns an empty stri
0300: 6e 67 2e 0a 2b 2e 54 50 0a 20 5c 66 42 6e 61 6d  ng..+.TP. \fBnam
0310: 65 73 70 61 63 65 20 77 68 69 63 68 5c 66 52 20  espace which\fR 
0320: 3f 5c 2d 5c 66 42 63 6f 6d 6d 61 6e 64 5c 66 52  ?\-\fBcommand\fR
0330: 3f 20 3f 5c 2d 5c 66 42 76 61 72 69 61 62 6c 65  ? ?\-\fBvariable
0340: 5c 66 52 3f 20 5c 66 49 6e 61 6d 65 5c 66 52 0a  \fR? \fIname\fR.
0350: 20 4c 6f 6f 6b 73 20 75 70 20 5c 66 49 6e 61 6d   Looks up \fInam
0360: 65 5c 66 52 20 61 73 20 65 69 74 68 65 72 20 61  e\fR as either a
0370: 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 76 61 72 69   command or vari
0380: 61 62 6c 65 0a 20 61 6e 64 20 72 65 74 75 72 6e  able. and return
0390: 73 20 69 74 73 20 66 75 6c 6c 79 2d 71 75 61 6c  s its fully-qual
03a0: 69 66 69 65 64 20 6e 61 6d 65 2e 0a 40 40 20 2d  ified name..@@ -
03b0: 38 31 32 2c 37 20 2b 38 31 39 2c 37 20 40 40 0a  812,7 +819,7 @@.
03c0: 20 2e 43 45 0a 20 0a 20 2e 53 48 20 22 53 45 45   .CE. . .SH "SEE
03d0: 20 41 4c 53 4f 22 0a 2d 69 6e 74 65 72 70 28 6e   ALSO".-interp(n
03e0: 29 2c 20 76 61 72 69 61 62 6c 65 28 6e 29 0a 2b  ), variable(n).+
03f0: 69 6e 74 65 72 70 28 6e 29 2c 20 75 70 76 61 72  interp(n), upvar
0400: 28 6e 29 2c 20 76 61 72 69 61 62 6c 65 28 6e 29  (n), variable(n)
0410: 0a 20 0a 20 2e 53 48 20 4b 45 59 57 4f 52 44 53  . . .SH KEYWORDS
0420: 0a 20 63 6f 6d 6d 61 6e 64 2c 20 65 6e 73 65 6d  . command, ensem
0430: 62 6c 65 2c 20 65 78 70 6f 72 74 65 64 2c 20 69  ble, exported, i
0440: 6e 74 65 72 6e 61 6c 2c 20 76 61 72 69 61 62 6c  nternal, variabl
0450: 65 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63  e.Index: generic
0460: 2f 74 63 6c 49 6e 74 2e 68 0a 3d 3d 3d 3d 3d 3d  /tclInt.h.======
0470: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0480: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0490: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
04a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43  =============.RC
04b0: 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74  S file: /cvsroot
04c0: 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63  /tcl/tcl/generic
04d0: 2f 74 63 6c 49 6e 74 2e 68 2c 76 0a 72 65 74 72  /tclInt.h,v.retr
04e0: 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20  ieving revision 
04f0: 31 2e 32 36 34 0a 64 69 66 66 20 2d 75 20 2d 72  1.264.diff -u -r
0500: 31 2e 32 36 34 20 74 63 6c 49 6e 74 2e 68 0a 2d  1.264 tclInt.h.-
0510: 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e  -- generic/tclIn
0520: 74 2e 68 09 32 37 20 44 65 63 20 32 30 30 35 20  t.h.27 Dec 2005 
0530: 32 30 3a 31 34 3a 30 39 20 2d 30 30 30 30 09 31  20:14:09 -0000.1
0540: 2e 32 36 34 0a 2b 2b 2b 20 67 65 6e 65 72 69 63  .264.+++ generic
0550: 2f 74 63 6c 49 6e 74 2e 68 09 31 37 20 4a 61 6e  /tclInt.h.17 Jan
0560: 20 32 30 30 36 20 32 30 3a 33 35 3a 35 33 20 2d   2006 20:35:53 -
0570: 30 30 30 30 0a 40 40 20 2d 32 31 31 38 2c 36 20  0000.@@ -2118,6 
0580: 2b 32 31 31 38 2c 39 20 40 40 0a 20 4d 4f 44 55  +2118,9 @@. MODU
0590: 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 54 63 6c  LE_SCOPE int.Tcl
05a0: 4f 62 6a 49 6e 76 6f 6b 65 4e 61 6d 65 73 70 61  ObjInvokeNamespa
05b0: 63 65 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  ce(Tcl_Interp *i
05c0: 6e 74 65 72 70 2c 0a 20 09 09 09 20 20 20 20 69  nterp,. ...    i
05d0: 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a  nt objc, Tcl_Obj
05e0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 2c 0a   *CONST objv[],.
05f0: 20 09 09 09 20 20 20 20 54 63 6c 5f 4e 61 6d 65   ...    Tcl_Name
0600: 73 70 61 63 65 20 2a 6e 73 50 74 72 2c 20 69 6e  space *nsPtr, in
0610: 74 20 66 6c 61 67 73 29 3b 0a 2b 4d 4f 44 55 4c  t flags);.+MODUL
0620: 45 5f 53 43 4f 50 45 20 69 6e 74 09 54 63 6c 50  E_SCOPE int.TclP
0630: 74 72 4d 61 6b 65 55 70 76 61 72 20 28 54 63 6c  trMakeUpvar (Tcl
0640: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
0650: 0a 2b 09 09 09 20 20 20 20 56 61 72 20 2a 6f 74  .+...    Var *ot
0660: 68 65 72 50 31 50 74 72 2c 20 43 4f 4e 53 54 20  herP1Ptr, CONST 
0670: 63 68 61 72 20 2a 6d 79 4e 61 6d 65 2c 0a 2b 09  char *myName,.+.
0680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0690: 20 20 20 20 69 6e 74 20 6d 79 46 6c 61 67 73 2c      int myFlags,
06a0: 20 69 6e 74 20 69 6e 64 65 78 29 3b 0a 20 4d 4f   int index);. MO
06b0: 44 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 54  DULE_SCOPE int.T
06c0: 63 6c 4f 62 6a 50 72 69 6e 74 66 28 54 63 6c 5f  clObjPrintf(Tcl_
06d0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
06e0: 54 63 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 2c  Tcl_Obj *objPtr,
06f0: 0a 20 09 09 09 20 20 20 20 43 4f 4e 53 54 20 63  . ...    CONST c
0700: 68 61 72 20 2a 66 6f 72 6d 61 74 2c 20 2e 2e 2e  har *format, ...
0710: 29 3b 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45  );. MODULE_SCOPE
0720: 20 69 6e 74 09 54 63 6c 50 61 72 73 65 42 61 63   int.TclParseBac
0730: 6b 73 6c 61 73 68 28 43 4f 4e 53 54 20 63 68 61  kslash(CONST cha
0740: 72 20 2a 73 72 63 2c 0a 49 6e 64 65 78 3a 20 67  r *src,.Index: g
0750: 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d 65 73 70  eneric/tclNamesp
0760: 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .c.=============
0770: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0780: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0790: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
07a0: 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a  ======.RCS file:
07b0: 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63   /cvsroot/tcl/tc
07c0: 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d  l/generic/tclNam
07d0: 65 73 70 2e 63 2c 76 0a 72 65 74 72 69 65 76 69  esp.c,v.retrievi
07e0: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 39 31  ng revision 1.91
07f0: 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 39 31 20  .diff -u -r1.91 
0800: 74 63 6c 4e 61 6d 65 73 70 2e 63 0a 2d 2d 2d 20  tclNamesp.c.--- 
0810: 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d 65 73  generic/tclNames
0820: 70 2e 63 09 31 31 20 4a 61 6e 20 32 30 30 36 20  p.c.11 Jan 2006 
0830: 31 37 3a 33 34 3a 35 33 20 2d 30 30 30 30 09 31  17:34:53 -0000.1
0840: 2e 39 31 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f  .91.+++ generic/
0850: 74 63 6c 4e 61 6d 65 73 70 2e 63 09 31 37 20 4a  tclNamesp.c.17 J
0860: 61 6e 20 32 30 30 36 20 32 30 3a 33 35 3a 35 33  an 2006 20:35:53
0870: 20 2d 30 30 30 30 0a 40 40 20 2d 32 32 38 2c 36   -0000.@@ -228,6
0880: 20 2b 32 32 38 2c 38 20 40 40 0a 20 09 09 09 20   +228,8 @@. ... 
0890: 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69     Tcl_Interp *i
08a0: 6e 74 65 72 70 2c 69 6e 74 20 6f 62 6a 63 2c 54  nterp,int objc,T
08b0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
08c0: 6a 76 5b 5d 29 3b 0a 20 73 74 61 74 69 63 20 69  jv[]);. static i
08d0: 6e 74 09 09 4e 61 6d 65 73 70 61 63 65 54 61 69  nt..NamespaceTai
08e0: 6c 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 20  lCmd(ClientData 
08f0: 64 75 6d 6d 79 2c 20 54 63 6c 5f 49 6e 74 65 72  dummy, Tcl_Inter
0900: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 09 09 09 20  p *interp,. ... 
0910: 20 20 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c     int objc, Tcl
0920: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
0930: 5b 5d 29 3b 0a 2b 73 74 61 74 69 63 20 69 6e 74  []);.+static int
0940: 09 09 4e 61 6d 65 73 70 61 63 65 55 70 76 61 72  ..NamespaceUpvar
0950: 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 20 64  Cmd(ClientData d
0960: 75 6d 6d 79 2c 20 54 63 6c 5f 49 6e 74 65 72 70  ummy, Tcl_Interp
0970: 20 2a 69 6e 74 65 72 70 2c 0a 2b 09 09 09 20 20   *interp,.+...  
0980: 20 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f    int objc, Tcl_
0990: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
09a0: 5d 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09  ]);. static int.
09b0: 09 4e 61 6d 65 73 70 61 63 65 57 68 69 63 68 43  .NamespaceWhichC
09c0: 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 20 64 75  md(ClientData du
09d0: 6d 6d 79 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20  mmy, Tcl_Interp 
09e0: 2a 69 6e 74 65 72 70 2c 0a 20 09 09 09 20 20 20  *interp,. ...   
09f0: 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f   int objc, Tcl_O
0a00: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
0a10: 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09  );. static int..
0a20: 53 65 74 4e 73 4e 61 6d 65 46 72 6f 6d 41 6e 79  SetNsNameFromAny
0a30: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
0a40: 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 20 2a 6f 62  erp, Tcl_Obj *ob
0a50: 6a 50 74 72 29 3b 0a 40 40 20 2d 32 38 39 36 2c  jPtr);.@@ -2896,
0a60: 31 33 20 2b 32 38 39 38 2c 31 33 20 40 40 0a 20  13 +2898,13 @@. 
0a70: 09 22 63 68 69 6c 64 72 65 6e 22 2c 20 22 63 6f  ."children", "co
0a80: 64 65 22 2c 20 22 63 75 72 72 65 6e 74 22 2c 20  de", "current", 
0a90: 22 64 65 6c 65 74 65 22 2c 20 22 65 6e 73 65 6d  "delete", "ensem
0aa0: 62 6c 65 22 2c 0a 20 09 22 65 76 61 6c 22 2c 20  ble",. ."eval", 
0ab0: 22 65 78 69 73 74 73 22 2c 20 22 65 78 70 6f 72  "exists", "expor
0ac0: 74 22 2c 20 22 66 6f 72 67 65 74 22 2c 20 22 69  t", "forget", "i
0ad0: 6d 70 6f 72 74 22 2c 0a 20 09 22 69 6e 73 63 6f  mport",. ."insco
0ae0: 70 65 22 2c 20 22 6f 72 69 67 69 6e 22 2c 20 22  pe", "origin", "
0af0: 70 61 72 65 6e 74 22 2c 20 22 70 61 74 68 22 2c  parent", "path",
0b00: 20 22 71 75 61 6c 69 66 69 65 72 73 22 2c 0a 2d   "qualifiers",.-
0b10: 09 22 74 61 69 6c 22 2c 20 22 77 68 69 63 68 22  ."tail", "which"
0b20: 2c 20 4e 55 4c 4c 0a 2b 09 22 74 61 69 6c 22 2c  , NULL.+."tail",
0b30: 20 22 75 70 76 61 72 22 2c 20 22 77 68 69 63 68   "upvar", "which
0b40: 22 2c 20 4e 55 4c 4c 0a 20 20 20 20 20 7d 3b 0a  ", NULL.     };.
0b50: 20 20 20 20 20 65 6e 75 6d 20 4e 53 53 75 62 43       enum NSSubC
0b60: 6d 64 49 64 78 20 7b 0a 20 09 4e 53 43 68 69 6c  mdIdx {. .NSChil
0b70: 64 72 65 6e 49 64 78 2c 20 4e 53 43 6f 64 65 49  drenIdx, NSCodeI
0b80: 64 78 2c 20 4e 53 43 75 72 72 65 6e 74 49 64 78  dx, NSCurrentIdx
0b90: 2c 20 4e 53 44 65 6c 65 74 65 49 64 78 2c 20 4e  , NSDeleteIdx, N
0ba0: 53 45 6e 73 65 6d 62 6c 65 49 64 78 2c 0a 20 09  SEnsembleIdx,. .
0bb0: 4e 53 45 76 61 6c 49 64 78 2c 20 4e 53 45 78 69  NSEvalIdx, NSExi
0bc0: 73 74 73 49 64 78 2c 20 4e 53 45 78 70 6f 72 74  stsIdx, NSExport
0bd0: 49 64 78 2c 20 4e 53 46 6f 72 67 65 74 49 64 78  Idx, NSForgetIdx
0be0: 2c 20 4e 53 49 6d 70 6f 72 74 49 64 78 2c 0a 20  , NSImportIdx,. 
0bf0: 09 4e 53 49 6e 73 63 6f 70 65 49 64 78 2c 20 4e  .NSInscopeIdx, N
0c00: 53 4f 72 69 67 69 6e 49 64 78 2c 20 4e 53 50 61  SOriginIdx, NSPa
0c10: 72 65 6e 74 49 64 78 2c 20 4e 53 50 61 74 68 49  rentIdx, NSPathI
0c20: 64 78 2c 20 4e 53 51 75 61 6c 69 66 69 65 72 73  dx, NSQualifiers
0c30: 49 64 78 2c 0a 2d 09 4e 53 54 61 69 6c 49 64 78  Idx,.-.NSTailIdx
0c40: 2c 20 4e 53 57 68 69 63 68 49 64 78 0a 2b 09 4e  , NSWhichIdx.+.N
0c50: 53 54 61 69 6c 49 64 78 2c 20 4e 53 55 70 76 61  STailIdx, NSUpva
0c60: 72 49 64 78 2c 20 4e 53 57 68 69 63 68 49 64 78  rIdx, NSWhichIdx
0c70: 0a 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 69 6e  .     };.     in
0c80: 74 20 69 6e 64 65 78 2c 20 72 65 73 75 6c 74 3b  t index, result;
0c90: 0a 20 0a 40 40 20 2d 32 39 36 39 2c 36 20 2b 32  . .@@ -2969,6 +2
0ca0: 39 37 31 2c 39 20 40 40 0a 20 09 62 72 65 61 6b  971,9 @@. .break
0cb0: 3b 0a 20 20 20 20 20 63 61 73 65 20 4e 53 54 61  ;.     case NSTa
0cc0: 69 6c 49 64 78 3a 0a 20 09 72 65 73 75 6c 74 20  ilIdx:. .result 
0cd0: 3d 20 4e 61 6d 65 73 70 61 63 65 54 61 69 6c 43  = NamespaceTailC
0ce0: 6d 64 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 69  md(clientData, i
0cf0: 6e 74 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a  nterp, objc, obj
0d00: 76 29 3b 0a 2b 09 62 72 65 61 6b 3b 09 0a 2b 20  v);.+.break;..+ 
0d10: 20 20 20 63 61 73 65 20 4e 53 55 70 76 61 72 49     case NSUpvarI
0d20: 64 78 3a 0a 2b 09 72 65 73 75 6c 74 20 3d 20 4e  dx:.+.result = N
0d30: 61 6d 65 73 70 61 63 65 55 70 76 61 72 43 6d 64  amespaceUpvarCmd
0d40: 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e 74  (clientData, int
0d50: 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 29  erp, objc, objv)
0d60: 3b 0a 20 09 62 72 65 61 6b 3b 0a 20 20 20 20 20  ;. .break;.     
0d70: 63 61 73 65 20 4e 53 57 68 69 63 68 49 64 78 3a  case NSWhichIdx:
0d80: 0a 20 09 72 65 73 75 6c 74 20 3d 20 4e 61 6d 65  . .result = Name
0d90: 73 70 61 63 65 57 68 69 63 68 43 6d 64 28 63 6c  spaceWhichCmd(cl
0da0: 69 65 6e 74 44 61 74 61 2c 20 69 6e 74 65 72 70  ientData, interp
0db0: 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 29 3b 0a 40  , objc, objv);.@
0dc0: 40 20 2d 34 33 33 32 2c 36 20 2b 34 33 33 37 2c  @ -4332,6 +4337,
0dd0: 38 31 20 40 40 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d  81 @@. /*.  *---
0de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e20: 2d 2d 2d 0a 20 20 2a 0a 2b 20 2a 20 4e 61 6d 65  ---.  *.+ * Name
0e30: 73 70 61 63 65 55 70 76 61 72 43 6d 64 20 2d 2d  spaceUpvarCmd --
0e40: 0a 2b 20 2a 0a 2b 20 2a 09 49 6e 76 6f 6b 65 64  .+ *.+ *.Invoked
0e50: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
0e60: 65 20 22 6e 61 6d 65 73 70 61 63 65 20 75 70 76  e "namespace upv
0e70: 61 72 22 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 61  ar" command, tha
0e80: 74 20 63 72 65 61 74 65 73 0a 2b 20 2a 09 76 61  t creates.+ *.va
0e90: 72 69 61 62 6c 65 73 20 69 6e 20 74 68 65 20 63  riables in the c
0ea0: 75 72 72 65 6e 74 20 73 63 6f 70 65 20 6c 69 6e  urrent scope lin
0eb0: 6b 65 64 20 74 6f 20 76 61 72 69 61 62 6c 65 73  ked to variables
0ec0: 20 69 6e 20 61 6e 6f 74 68 65 72 0a 2b 20 2a 09   in another.+ *.
0ed0: 6e 61 6d 65 73 70 61 63 65 2e 20 48 61 6e 64 6c  namespace. Handl
0ee0: 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  es the following
0ef0: 20 73 79 6e 74 61 78 3a 0a 2b 20 2a 0a 2b 20 2a   syntax:.+ *.+ *
0f00: 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 75  .    namespace u
0f10: 70 76 61 72 20 6e 73 20 6f 74 68 65 72 56 61 72  pvar ns otherVar
0f20: 20 6d 79 56 61 72 20 3f 6f 74 68 65 72 56 61 72   myVar ?otherVar
0f30: 20 6d 79 56 61 72 20 2e 2e 2e 3f 0a 2b 20 2a 0a   myVar ...?.+ *.
0f40: 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20 2a  + * Results:.+ *
0f50: 09 52 65 74 75 72 6e 73 20 54 43 4c 5f 4f 4b 20  .Returns TCL_OK 
0f60: 69 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 61  if successful, a
0f70: 6e 64 20 54 43 4c 5f 45 52 52 4f 52 20 69 66 20  nd TCL_ERROR if 
0f80: 61 6e 79 74 68 69 6e 67 20 67 6f 65 73 20 77 72  anything goes wr
0f90: 6f 6e 67 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69 64  ong..+ *.+ * Sid
0fa0: 65 20 65 66 66 65 63 74 73 3a 0a 2b 20 2a 09 43  e effects:.+ *.C
0fb0: 72 65 61 74 65 73 20 6e 65 77 20 76 61 72 69 61  reates new varia
0fc0: 62 6c 65 73 20 69 6e 20 74 68 65 20 63 75 72 72  bles in the curr
0fd0: 65 6e 74 20 73 63 6f 70 65 2c 20 6c 69 6e 6b 65  ent scope, linke
0fe0: 64 20 74 6f 20 74 68 65 0a 2b 20 2a 20 20 20 20  d to the.+ *    
0ff0: 20 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20    corresponding 
1000: 76 61 72 69 61 62 6c 65 73 20 69 6e 20 74 68 65  variables in the
1010: 20 73 74 69 70 75 6c 61 74 65 64 20 6e 6d 61 6d   stipulated nmam
1020: 65 73 70 61 63 65 2e 0a 2b 20 2a 20 20 20 20 20  espace..+ *     
1030: 20 49 66 20 61 6e 79 74 68 69 6e 67 20 67 6f 65   If anything goe
1040: 73 20 77 72 6f 6e 67 2c 20 74 68 65 20 72 65 73  s wrong, the res
1050: 75 6c 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20  ult is an error 
1060: 6d 65 73 73 61 67 65 2e 0a 2b 20 2a 0a 2b 20 2a  message..+ *.+ *
1070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10b0: 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73  ------.+ */.+.+s
10c0: 74 61 74 69 63 20 69 6e 74 0a 2b 4e 61 6d 65 73  tatic int.+Names
10d0: 70 61 63 65 55 70 76 61 72 43 6d 64 28 64 75 6d  paceUpvarCmd(dum
10e0: 6d 79 2c 20 69 6e 74 65 72 70 2c 20 6f 62 6a 63  my, interp, objc
10f0: 2c 20 6f 62 6a 76 29 0a 2b 20 20 20 20 43 6c 69  , objv).+    Cli
1100: 65 6e 74 44 61 74 61 20 64 75 6d 6d 79 3b 09 09  entData dummy;..
1110: 09 2f 2a 20 4e 6f 74 20 75 73 65 64 2e 20 2a 2f  ./* Not used. */
1120: 0a 2b 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  .+    Tcl_Interp
1130: 20 2a 69 6e 74 65 72 70 3b 09 09 09 2f 2a 20 43   *interp;.../* C
1140: 75 72 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74  urrent interpret
1150: 65 72 2e 20 2a 2f 0a 2b 20 20 20 20 69 6e 74 20  er. */.+    int 
1160: 6f 62 6a 63 3b 09 09 09 09 2f 2a 20 4e 75 6d 62  objc;..../* Numb
1170: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  er of arguments.
1180: 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a   */.+    Tcl_Obj
1190: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 3b 09   *CONST objv[];.
11a0: 09 2f 2a 20 41 72 67 75 6d 65 6e 74 20 6f 62 6a  ./* Argument obj
11b0: 65 63 74 73 2e 20 2a 2f 0a 2b 7b 0a 2b 20 20 20  ects. */.+{.+   
11c0: 20 54 63 6c 5f 4e 61 6d 65 73 70 61 63 65 20 2a   Tcl_Namespace *
11d0: 6e 73 50 74 72 3b 0a 2b 20 20 20 20 69 6e 74 20  nsPtr;.+    int 
11e0: 72 65 73 75 6c 74 3b 0a 2b 20 20 20 20 56 61 72  result;.+    Var
11f0: 20 2a 6f 74 68 65 72 50 74 72 2c 20 2a 61 72 72   *otherPtr, *arr
1200: 61 79 50 74 72 3b 0a 2b 20 20 20 20 63 68 61 72  ayPtr;.+    char
1210: 20 2a 6d 79 4e 61 6d 65 3b 0a 2b 20 20 20 20 43   *myName;.+    C
1220: 61 6c 6c 46 72 61 6d 65 20 66 72 61 6d 65 2c 20  allFrame frame, 
1230: 2a 66 72 61 6d 65 50 74 72 20 3d 20 26 66 72 61  *framePtr = &fra
1240: 6d 65 3b 0a 2b 20 20 20 20 0a 2b 20 20 20 20 69  me;.+    .+    i
1250: 66 20 28 6f 62 6a 63 20 3c 20 35 20 7c 7c 20 21  f (objc < 5 || !
1260: 28 6f 62 6a 63 20 26 20 31 29 29 20 7b 0a 2b 09  (objc & 1)) {.+.
1270: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
1280: 28 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76  (interp, 2, objv
1290: 2c 20 22 6e 73 20 6f 74 68 65 72 56 61 72 20 6d  , "ns otherVar m
12a0: 79 56 61 72 20 3f 6f 74 68 65 72 56 61 72 20 6d  yVar ?otherVar m
12b0: 79 56 61 72 20 2e 2e 2e 3f 22 29 3b 0a 2b 09 72  yVar ...?");.+.r
12c0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12d0: 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 72  .+    }.+.+    r
12e0: 65 73 75 6c 74 20 3d 20 54 63 6c 47 65 74 4e 61  esult = TclGetNa
12f0: 6d 65 73 70 61 63 65 46 72 6f 6d 4f 62 6a 28 69  mespaceFromObj(i
1300: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
1310: 26 6e 73 50 74 72 29 3b 0a 2b 20 20 20 20 69 66  &nsPtr);.+    if
1320: 20 28 72 65 73 75 6c 74 20 21 3d 20 54 43 4c 5f   (result != TCL_
1330: 4f 4b 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 54  OK) {.+.return T
1340: 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d  CL_ERROR;.+    }
1350: 0a 2b 0a 2b 20 20 20 20 6f 62 6a 63 20 2d 3d 20  .+.+    objc -= 
1360: 33 3b 0a 2b 20 20 20 20 6f 62 6a 76 20 2b 3d 20  3;.+    objv += 
1370: 33 3b 0a 2b 20 20 20 20 0a 2b 20 20 20 20 66 6f  3;.+    .+    fo
1380: 72 20 28 3b 20 6f 62 6a 63 3e 30 20 3b 20 6f 62  r (; objc>0 ; ob
1390: 6a 63 2d 3d 32 2c 20 6f 62 6a 76 2b 3d 32 29 20  jc-=2, objv+=2) 
13a0: 7b 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 4c 6f 63 61  {.+./*.+. * Loca
13b0: 74 65 20 74 68 65 20 6f 74 68 65 72 20 76 61 72  te the other var
13c0: 69 61 62 6c 65 0a 2b 09 20 2a 2f 0a 2b 09 54 63  iable.+. */.+.Tc
13d0: 6c 5f 50 75 73 68 43 61 6c 6c 46 72 61 6d 65 28  l_PushCallFrame(
13e0: 69 6e 74 65 72 70 2c 20 28 54 63 6c 5f 43 61 6c  interp, (Tcl_Cal
13f0: 6c 46 72 61 6d 65 20 2a 29 20 66 72 61 6d 65 50  lFrame *) frameP
1400: 74 72 2c 20 6e 73 50 74 72 2c 20 30 29 3b 0a 2b  tr, nsPtr, 0);.+
1410: 09 6f 74 68 65 72 50 74 72 20 3d 20 54 63 6c 4f  .otherPtr = TclO
1420: 62 6a 4c 6f 6f 6b 75 70 56 61 72 28 69 6e 74 65  bjLookupVar(inte
1430: 72 70 2c 20 6f 62 6a 76 5b 30 5d 2c 20 4e 55 4c  rp, objv[0], NUL
1440: 4c 2c 0a 2b 09 09 28 54 43 4c 5f 4e 41 4d 45 53  L,.+..(TCL_NAMES
1450: 50 41 43 45 5f 4f 4e 4c 59 20 7c 20 54 43 4c 5f  PACE_ONLY | TCL_
1460: 4c 45 41 56 45 5f 45 52 52 5f 4d 53 47 29 2c 20  LEAVE_ERR_MSG), 
1470: 22 61 63 63 65 73 73 22 2c 0a 2b 09 09 2f 2a 63  "access",.+../*c
1480: 72 65 61 74 65 50 61 72 74 31 2a 2f 20 31 2c 20  reatePart1*/ 1, 
1490: 2f 2a 63 72 65 61 74 65 50 61 72 74 32 2a 2f 20  /*createPart2*/ 
14a0: 31 2c 20 26 61 72 72 61 79 50 74 72 29 3b 0a 2b  1, &arrayPtr);.+
14b0: 09 69 66 20 28 6f 74 68 65 72 50 74 72 20 3d 3d  .if (otherPtr ==
14c0: 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 72   NULL) {.+.    r
14d0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
14e0: 0a 2b 09 7d 0a 2b 09 54 63 6c 5f 50 6f 70 43 61  .+.}.+.Tcl_PopCa
14f0: 6c 6c 46 72 61 6d 65 28 69 6e 74 65 72 70 29 3b  llFrame(interp);
1500: 0a 2b 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 43 72 65  .+.+./*.+. * Cre
1510: 61 74 65 20 74 68 65 20 6e 65 77 20 76 61 72 69  ate the new vari
1520: 61 62 6c 65 20 61 6e 64 20 6c 69 6e 6b 20 69 74  able and link it
1530: 20 74 6f 20 6f 74 68 65 72 50 74 72 0a 2b 09 20   to otherPtr.+. 
1540: 2a 2f 0a 2b 09 0a 2b 09 6d 79 4e 61 6d 65 20 3d  */.+..+.myName =
1550: 20 54 63 6c 47 65 74 53 74 72 69 6e 67 28 6f 62   TclGetString(ob
1560: 6a 76 5b 31 5d 29 3b 0a 2b 09 72 65 73 75 6c 74  jv[1]);.+.result
1570: 20 3d 20 54 63 6c 50 74 72 4d 61 6b 65 55 70 76   = TclPtrMakeUpv
1580: 61 72 28 69 6e 74 65 72 70 2c 20 6f 74 68 65 72  ar(interp, other
1590: 50 74 72 2c 20 6d 79 4e 61 6d 65 2c 20 30 2c 20  Ptr, myName, 0, 
15a0: 2d 31 29 3b 0a 2b 09 69 66 20 28 72 65 73 75 6c  -1);.+.if (resul
15b0: 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b  t != TCL_OK) {.+
15c0: 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
15d0: 45 52 52 4f 52 3b 0a 2b 09 7d 0a 2b 20 20 20 20  ERROR;.+.}.+    
15e0: 7d 0a 2b 0a 2b 20 20 20 20 72 65 74 75 72 6e 20  }.+.+    return 
15f0: 54 43 4c 5f 4f 4b 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f  TCL_OK;.+}.+..+/
1600: 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.+ *-----------
1610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a  -----------.+ *.
1650: 20 20 2a 20 4e 61 6d 65 73 70 61 63 65 57 68 69    * NamespaceWhi
1660: 63 68 43 6d 64 20 2d 2d 0a 20 20 2a 0a 20 20 2a  chCmd --.  *.  *
1670: 09 49 6e 76 6f 6b 65 64 20 74 6f 20 69 6d 70 6c  .Invoked to impl
1680: 65 6d 65 6e 74 20 74 68 65 20 22 6e 61 6d 65 73  ement the "names
1690: 70 61 63 65 20 77 68 69 63 68 22 20 63 6f 6d 6d  pace which" comm
16a0: 61 6e 64 20 74 68 61 74 20 72 65 74 75 72 6e 73  and that returns
16b0: 20 74 68 65 0a 49 6e 64 65 78 3a 20 67 65 6e 65   the.Index: gene
16c0: 72 69 63 2f 74 63 6c 56 61 72 2e 63 0a 3d 3d 3d  ric/tclVar.c.===
16d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
16e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
16f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1700: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1710: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72  .RCS file: /cvsr
1720: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65  oot/tcl/tcl/gene
1730: 72 69 63 2f 74 63 6c 56 61 72 2e 63 2c 76 0a 72  ric/tclVar.c,v.r
1740: 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69  etrieving revisi
1750: 6f 6e 20 31 2e 31 31 37 0a 64 69 66 66 20 2d 75  on 1.117.diff -u
1760: 20 2d 72 31 2e 31 31 37 20 74 63 6c 56 61 72 2e   -r1.117 tclVar.
1770: 63 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63  c.--- generic/tc
1780: 6c 56 61 72 2e 63 09 32 37 20 4e 6f 76 20 32 30  lVar.c.27 Nov 20
1790: 30 35 20 30 32 3a 33 33 3a 34 39 20 2d 30 30 30  05 02:33:49 -000
17a0: 30 09 31 2e 31 31 37 0a 2b 2b 2b 20 67 65 6e 65  0.1.117.+++ gene
17b0: 72 69 63 2f 74 63 6c 56 61 72 2e 63 09 31 37 20  ric/tclVar.c.17 
17c0: 4a 61 6e 20 32 30 30 36 20 32 30 3a 33 35 3a 35  Jan 2006 20:35:5
17d0: 34 20 2d 30 30 30 30 0a 40 40 20 2d 33 32 30 34  4 -0000.@@ -3204
17e0: 2c 31 30 20 2b 33 32 30 34 2c 38 20 40 40 0a 20  ,10 +3204,8 @@. 
17f0: 09 09 09 09 20 2a 20 73 63 61 6c 61 72 2c 20 74  .... * scalar, t
1800: 68 69 73 20 69 73 20 69 74 73 20 69 6e 64 65 78  his is its index
1810: 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 2d 31 20  . Otherwise, -1 
1820: 2a 2f 0a 20 7b 0a 20 20 20 20 20 49 6e 74 65 72  */. {.     Inter
1830: 70 20 2a 69 50 74 72 20 3d 20 28 49 6e 74 65 72  p *iPtr = (Inter
1840: 70 20 2a 29 20 69 6e 74 65 72 70 3b 0a 2d 20 20  p *) interp;.-  
1850: 20 20 56 61 72 20 2a 6f 74 68 65 72 50 74 72 2c    Var *otherPtr,
1860: 20 2a 76 61 72 50 74 72 2c 20 2a 61 72 72 61 79   *varPtr, *array
1870: 50 74 72 3b 0a 2b 20 20 20 20 56 61 72 20 2a 6f  Ptr;.+    Var *o
1880: 74 68 65 72 50 74 72 2c 20 2a 61 72 72 61 79 50  therPtr, *arrayP
1890: 74 72 3b 0a 20 20 20 20 20 43 61 6c 6c 46 72 61  tr;.     CallFra
18a0: 6d 65 20 2a 76 61 72 46 72 61 6d 65 50 74 72 3b  me *varFramePtr;
18b0: 0a 2d 20 20 20 20 43 4f 4e 53 54 20 63 68 61 72  .-    CONST char
18c0: 20 2a 65 72 72 4d 73 67 3b 0a 2d 20 20 20 20 43   *errMsg;.-    C
18d0: 4f 4e 53 54 20 63 68 61 72 20 2a 70 3b 0a 20 0a  ONST char *p;. .
18e0: 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20       /*.      * 
18f0: 46 69 6e 64 20 22 6f 74 68 65 72 22 20 69 6e 20  Find "other" in 
1900: 22 66 72 61 6d 65 50 74 72 22 2e 20 49 66 20 6e  "framePtr". If n
1910: 6f 74 20 6c 6f 6f 6b 69 6e 67 20 75 70 20 6f 74  ot looking up ot
1920: 68 65 72 20 69 6e 20 6a 75 73 74 20 74 68 65 20  her in just the 
1930: 63 75 72 72 65 6e 74 0a 40 40 20 2d 33 32 32 39  current.@@ -3229
1940: 2c 33 30 20 2b 33 32 32 37 2c 37 34 20 40 40 0a  ,30 +3227,74 @@.
1950: 20 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52   .return TCL_ERR
1960: 4f 52 3b 0a 20 20 20 20 20 7d 0a 20 0a 2d 20 20  OR;.     }. .-  
1970: 20 20 69 66 20 28 69 6e 64 65 78 20 3e 3d 20 30    if (index >= 0
1980: 29 20 7b 0a 2d 09 69 66 20 28 21 28 76 61 72 46  ) {.-.if (!(varF
1990: 72 61 6d 65 50 74 72 2d 3e 69 73 50 72 6f 63 43  ramePtr->isProcC
19a0: 61 6c 6c 46 72 61 6d 65 20 26 20 46 52 41 4d 45  allFrame & FRAME
19b0: 5f 49 53 5f 50 52 4f 43 29 29 20 7b 0a 2d 09 20  _IS_PROC)) {.-. 
19c0: 20 20 20 54 63 6c 5f 50 61 6e 69 63 28 22 4f 62     Tcl_Panic("Ob
19d0: 6a 4d 61 6b 65 55 70 76 61 72 20 63 61 6c 6c 65  jMakeUpvar calle
19e0: 64 20 77 69 74 68 20 61 6e 20 69 6e 64 65 78 20  d with an index 
19f0: 6f 75 74 73 69 64 65 20 66 72 6f 6d 20 61 20 70  outside from a p
1a00: 72 6f 63 2e 5c 6e 22 29 3b 0a 2d 09 7d 0a 2d 09  roc.\n");.-.}.-.
1a10: 76 61 72 50 74 72 20 3d 20 26 28 76 61 72 46 72  varPtr = &(varFr
1a20: 61 6d 65 50 74 72 2d 3e 63 6f 6d 70 69 6c 65 64  amePtr->compiled
1a30: 4c 6f 63 61 6c 73 5b 69 6e 64 65 78 5d 29 3b 0a  Locals[index]);.
1a40: 2d 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2d 09  -    } else {.-.
1a50: 2f 2a 0a 2d 09 20 2a 20 43 68 65 63 6b 20 74 68  /*.-. * Check th
1a60: 61 74 20 77 65 20 61 72 65 20 6e 6f 74 20 74 72  at we are not tr
1a70: 79 69 6e 67 20 74 6f 20 63 72 65 61 74 65 20 61  ying to create a
1a80: 20 6e 61 6d 65 73 70 61 63 65 20 76 61 72 20 6c   namespace var l
1a90: 69 6e 6b 65 64 20 74 6f 20 61 0a 2d 09 20 2a 20  inked to a.-. * 
1aa0: 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 20 69  local variable i
1ab0: 6e 20 61 20 70 72 6f 63 65 64 75 72 65 2e 20 49  n a procedure. I
1ac0: 66 20 77 65 20 61 6c 6c 6f 77 65 64 20 74 68 69  f we allowed thi
1ad0: 73 2c 20 74 68 65 20 6c 6f 63 61 6c 0a 2d 09 20  s, the local.-. 
1ae0: 2a 20 76 61 72 69 61 62 6c 65 20 69 6e 20 74 68  * variable in th
1af0: 65 20 73 68 6f 72 74 65 72 2d 6c 69 76 65 64 20  e shorter-lived 
1b00: 70 72 6f 63 65 64 75 72 65 20 66 72 61 6d 65 20  procedure frame 
1b10: 63 6f 75 6c 64 20 67 6f 20 61 77 61 79 20 6c 65  could go away le
1b20: 61 76 69 6e 67 0a 2d 09 20 2a 20 74 68 65 20 6e  aving.-. * the n
1b30: 61 6d 65 73 70 61 63 65 20 76 61 72 27 73 20 72  amespace var's r
1b40: 65 66 65 72 65 6e 63 65 20 69 6e 76 61 6c 69 64  eference invalid
1b50: 2e 0a 2d 09 20 2a 2f 0a 2b 20 20 20 20 2f 2a 0a  ..-. */.+    /*.
1b60: 2b 20 20 20 20 20 2a 20 43 68 65 63 6b 20 74 68  +     * Check th
1b70: 61 74 20 77 65 20 61 72 65 20 6e 6f 74 20 74 72  at we are not tr
1b80: 79 69 6e 67 20 74 6f 20 63 72 65 61 74 65 20 61  ying to create a
1b90: 20 6e 61 6d 65 73 70 61 63 65 20 76 61 72 20 6c   namespace var l
1ba0: 69 6e 6b 65 64 20 74 6f 20 61 0a 2b 20 20 20 20  inked to a.+    
1bb0: 20 2a 20 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c   * local variabl
1bc0: 65 20 69 6e 20 61 20 70 72 6f 63 65 64 75 72 65  e in a procedure
1bd0: 2e 20 49 66 20 77 65 20 61 6c 6c 6f 77 65 64 20  . If we allowed 
1be0: 74 68 69 73 2c 20 74 68 65 20 6c 6f 63 61 6c 0a  this, the local.
1bf0: 2b 20 20 20 20 20 2a 20 76 61 72 69 61 62 6c 65  +     * variable
1c00: 20 69 6e 20 74 68 65 20 73 68 6f 72 74 65 72 2d   in the shorter-
1c10: 6c 69 76 65 64 20 70 72 6f 63 65 64 75 72 65 20  lived procedure 
1c20: 66 72 61 6d 65 20 63 6f 75 6c 64 20 67 6f 20 61  frame could go a
1c30: 77 61 79 20 6c 65 61 76 69 6e 67 0a 2b 20 20 20  way leaving.+   
1c40: 20 20 2a 20 74 68 65 20 6e 61 6d 65 73 70 61 63    * the namespac
1c50: 65 20 76 61 72 27 73 20 72 65 66 65 72 65 6e 63  e var's referenc
1c60: 65 20 69 6e 76 61 6c 69 64 2e 0a 2b 20 20 20 20  e invalid..+    
1c70: 20 2a 2f 0a 20 0a 2b 20 20 20 20 69 66 20 28 69   */. .+    if (i
1c80: 6e 64 65 78 20 3c 20 30 29 20 7b 0a 20 09 69 66  ndex < 0) {. .if
1c90: 20 28 28 28 6f 74 68 65 72 50 32 20 3f 20 61 72   (((otherP2 ? ar
1ca0: 72 61 79 50 74 72 2d 3e 6e 73 50 74 72 20 3a 20  rayPtr->nsPtr : 
1cb0: 6f 74 68 65 72 50 74 72 2d 3e 6e 73 50 74 72 29  otherPtr->nsPtr)
1cc0: 20 3d 3d 20 4e 55 4c 4c 29 0a 2d 09 20 20 20 20   == NULL).-.    
1cd0: 26 26 20 28 28 6d 79 46 6c 61 67 73 20 26 20 28  && ((myFlags & (
1ce0: 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 20  TCL_GLOBAL_ONLY 
1cf0: 7c 20 54 43 4c 5f 4e 41 4d 45 53 50 41 43 45 5f  | TCL_NAMESPACE_
1d00: 4f 4e 4c 59 29 29 0a 2d 09 09 7c 7c 20 28 76 61  ONLY)).-..|| (va
1d10: 72 46 72 61 6d 65 50 74 72 20 3d 3d 20 4e 55 4c  rFramePtr == NUL
1d20: 4c 29 0a 2d 09 09 7c 7c 20 21 28 76 61 72 46 72  L).-..|| !(varFr
1d30: 61 6d 65 50 74 72 2d 3e 69 73 50 72 6f 63 43 61  amePtr->isProcCa
1d40: 6c 6c 46 72 61 6d 65 20 26 20 46 52 41 4d 45 5f  llFrame & FRAME_
1d50: 49 53 5f 50 52 4f 43 29 0a 2d 09 09 7c 7c 20 28  IS_PROC).-..|| (
1d60: 73 74 72 73 74 72 28 6d 79 4e 61 6d 65 2c 20 22  strstr(myName, "
1d70: 3a 3a 22 29 20 21 3d 20 4e 55 4c 4c 29 29 29 20  ::") != NULL))) 
1d80: 7b 0a 2b 09 09 26 26 20 28 28 6d 79 46 6c 61 67  {.+..&& ((myFlag
1d90: 73 20 26 20 28 54 43 4c 5f 47 4c 4f 42 41 4c 5f  s & (TCL_GLOBAL_
1da0: 4f 4e 4c 59 20 7c 20 54 43 4c 5f 4e 41 4d 45 53  ONLY | TCL_NAMES
1db0: 50 41 43 45 5f 4f 4e 4c 59 29 29 0a 2b 09 09 09  PACE_ONLY)).+...
1dc0: 7c 7c 20 28 76 61 72 46 72 61 6d 65 50 74 72 20  || (varFramePtr 
1dd0: 3d 3d 20 4e 55 4c 4c 29 0a 2b 09 09 09 7c 7c 20  == NULL).+...|| 
1de0: 21 28 76 61 72 46 72 61 6d 65 50 74 72 2d 3e 69  !(varFramePtr->i
1df0: 73 50 72 6f 63 43 61 6c 6c 46 72 61 6d 65 20 26  sProcCallFrame &
1e00: 20 46 52 41 4d 45 5f 49 53 5f 50 52 4f 43 29 0a   FRAME_IS_PROC).
1e10: 2b 09 09 09 7c 7c 20 28 73 74 72 73 74 72 28 6d  +...|| (strstr(m
1e20: 79 4e 61 6d 65 2c 20 22 3a 3a 22 29 20 21 3d 20  yName, "::") != 
1e30: 4e 55 4c 4c 29 29 29 20 7b 0a 20 09 20 20 20 20  NULL))) {. .    
1e40: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
1e50: 28 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 20  ((Tcl_Interp *) 
1e60: 69 50 74 72 2c 20 22 62 61 64 20 76 61 72 69 61  iPtr, "bad varia
1e70: 62 6c 65 20 6e 61 6d 65 20 5c 22 22 2c 0a 20 09  ble name \"",. .
1e80: 09 20 20 20 20 6d 79 4e 61 6d 65 2c 20 22 5c 22  .    myName, "\"
1e90: 3a 20 75 70 76 61 72 20 77 6f 6e 27 74 20 63 72  : upvar won't cr
1ea0: 65 61 74 65 20 6e 61 6d 65 73 70 61 63 65 20 76  eate namespace v
1eb0: 61 72 69 61 62 6c 65 20 74 68 61 74 20 22 2c 0a  ariable that ",.
1ec0: 20 09 09 20 20 20 20 22 72 65 66 65 72 73 20 74   ..    "refers t
1ed0: 6f 20 70 72 6f 63 65 64 75 72 65 20 76 61 72 69  o procedure vari
1ee0: 61 62 6c 65 22 2c 20 4e 55 4c 4c 29 3b 0a 20 09  able", NULL);. .
1ef0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1f00: 52 52 4f 52 3b 0a 20 09 7d 0a 2b 20 20 20 20 7d  RROR;. .}.+    }
1f10: 0a 20 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 54  . .+    return T
1f20: 63 6c 50 74 72 4d 61 6b 65 55 70 76 61 72 28 69  clPtrMakeUpvar(i
1f30: 6e 74 65 72 70 2c 20 6f 74 68 65 72 50 74 72 2c  nterp, otherPtr,
1f40: 20 6d 79 4e 61 6d 65 2c 20 6d 79 46 6c 61 67 73   myName, myFlags
1f50: 2c 20 69 6e 64 65 78 29 3b 0a 2b 7d 0a 2b 0a 2b  , index);.+}.+.+
1f60: 0c 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d  ..+/*.+ *-------
1f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
1fb0: 2b 20 2a 0a 2b 20 2a 20 54 63 6c 50 74 72 4d 61  + *.+ * TclPtrMa
1fc0: 6b 65 55 70 76 61 72 20 2d 2d 0a 2b 20 2a 0a 2b  keUpvar --.+ *.+
1fd0: 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75 72   *.This procedur
1fe0: 65 20 64 6f 65 73 20 61 6c 6c 20 6f 66 20 74 68  e does all of th
1ff0: 65 20 77 6f 72 6b 20 6f 66 20 74 68 65 20 22 67  e work of the "g
2000: 6c 6f 62 61 6c 22 20 61 6e 64 20 22 75 70 76 61  lobal" and "upva
2010: 72 22 0a 2b 20 2a 09 63 6f 6d 6d 61 6e 64 73 2e  r".+ *.commands.
2020: 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73  .+ *.+ * Results
2030: 3a 0a 2b 20 2a 09 41 20 73 74 61 6e 64 61 72 64  :.+ *.A standard
2040: 20 54 63 6c 20 63 6f 6d 70 6c 65 74 69 6f 6e 20   Tcl completion 
2050: 63 6f 64 65 2e 20 49 66 20 61 6e 20 65 72 72 6f  code. If an erro
2060: 72 20 6f 63 63 75 72 73 20 74 68 65 6e 20 61 6e  r occurs then an
2070: 20 65 72 72 6f 72 0a 2b 20 2a 09 6d 65 73 73 61   error.+ *.messa
2080: 67 65 20 69 73 20 6c 65 66 74 20 69 6e 20 69 50  ge is left in iP
2090: 74 72 2d 3e 72 65 73 75 6c 74 2e 0a 2b 20 2a 0a  tr->result..+ *.
20a0: 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73  + * Side effects
20b0: 3a 0a 2b 20 2a 09 54 68 65 20 76 61 72 69 61 62  :.+ *.The variab
20c0: 6c 65 20 67 69 76 65 6e 20 62 79 20 6d 79 4e 61  le given by myNa
20d0: 6d 65 20 69 73 20 6c 69 6e 6b 65 64 20 74 6f 20  me is linked to 
20e0: 74 68 65 20 76 61 72 69 61 62 6c 65 20 69 6e 20  the variable in 
20f0: 66 72 61 6d 65 50 74 72 0a 2b 20 2a 09 67 69 76  framePtr.+ *.giv
2100: 65 6e 20 62 79 20 6f 74 68 65 72 50 31 20 61 6e  en by otherP1 an
2110: 64 20 6f 74 68 65 72 50 32 2c 20 73 6f 20 74 68  d otherP2, so th
2120: 61 74 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  at references to
2130: 20 6d 79 4e 61 6d 65 20 61 72 65 0a 2b 20 2a 09   myName are.+ *.
2140: 72 65 64 69 72 65 63 74 65 64 20 74 6f 20 74 68  redirected to th
2150: 65 20 6f 74 68 65 72 20 76 61 72 69 61 62 6c 65  e other variable
2160: 20 6c 69 6b 65 20 61 20 73 79 6d 62 6f 6c 69 63   like a symbolic
2170: 20 6c 69 6e 6b 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d   link..+ *.+ *--
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: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21c0: 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 20 0a 2b 69 6e  ----.+ */.+ .+in
21d0: 74 0a 2b 54 63 6c 50 74 72 4d 61 6b 65 55 70 76  t.+TclPtrMakeUpv
21e0: 61 72 28 69 6e 74 65 72 70 2c 20 6f 74 68 65 72  ar(interp, other
21f0: 50 74 72 2c 20 6d 79 4e 61 6d 65 2c 20 6d 79 46  Ptr, myName, myF
2200: 6c 61 67 73 2c 20 69 6e 64 65 78 29 0a 2b 20 20  lags, index).+  
2210: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
2220: 74 65 72 70 3b 09 09 2f 2a 20 49 6e 74 65 72 70  terp;../* Interp
2230: 72 65 74 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67  reter containing
2240: 20 76 61 72 69 61 62 6c 65 73 2e 20 55 73 65 64   variables. Used
2250: 20 66 6f 72 0a 2b 09 09 09 09 20 2a 20 65 72 72   for.+.... * err
2260: 6f 72 20 6d 65 73 73 61 67 65 73 2c 20 74 6f 6f  or messages, too
2270: 2e 20 2a 2f 0a 2b 20 20 20 20 56 61 72 20 2a 6f  . */.+    Var *o
2280: 74 68 65 72 50 74 72 3b 20 20 20 20 20 20 20 20  therPtr;        
2290: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
22a0: 20 74 6f 20 74 68 65 20 76 61 72 69 61 62 6c 65   to the variable
22b0: 20 62 65 69 6e 67 20 6c 69 6e 6b 65 64 2d 74 6f   being linked-to
22c0: 20 2a 2f 0a 2b 20 20 20 20 43 4f 4e 53 54 20 63   */.+    CONST c
22d0: 68 61 72 20 2a 6d 79 4e 61 6d 65 3b 09 09 2f 2a  har *myName;../*
22e0: 20 4e 61 6d 65 20 6f 66 20 76 61 72 69 61 62 6c   Name of variabl
22f0: 65 20 77 68 69 63 68 20 77 69 6c 6c 20 72 65 66  e which will ref
2300: 65 72 20 74 6f 0a 2b 09 09 09 09 20 2a 20 6f 74  er to.+.... * ot
2310: 68 65 72 50 31 2f 6f 74 68 65 72 50 32 2e 20 4d  herP1/otherP2. M
2320: 75 73 74 20 62 65 20 61 20 73 63 61 6c 61 72 2e  ust be a scalar.
2330: 20 2a 2f 0a 2b 20 20 20 20 69 6e 74 20 6d 79 46   */.+    int myF
2340: 6c 61 67 73 3b 09 09 2f 2a 20 30 2c 20 54 43 4c  lags;../* 0, TCL
2350: 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 20 6f 72 20  _GLOBAL_ONLY or 
2360: 54 43 4c 5f 4e 41 4d 45 53 50 41 43 45 5f 4f 4e  TCL_NAMESPACE_ON
2370: 4c 59 3a 0a 2b 09 09 09 09 20 2a 20 69 6e 64 69  LY:.+.... * indi
2380: 63 61 74 65 73 20 73 63 6f 70 65 20 6f 66 20 6d  cates scope of m
2390: 79 4e 61 6d 65 2e 20 2a 2f 0a 2b 20 20 20 20 69  yName. */.+    i
23a0: 6e 74 20 69 6e 64 65 78 3b 09 09 09 2f 2a 20 49  nt index;.../* I
23b0: 66 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 74  f the variable t
23c0: 6f 20 62 65 20 6c 69 6e 6b 65 64 20 69 73 20 61  o be linked is a
23d0: 6e 20 69 6e 64 65 78 65 64 0a 2b 09 09 09 09 20  n indexed.+.... 
23e0: 2a 20 73 63 61 6c 61 72 2c 20 74 68 69 73 20 69  * scalar, this i
23f0: 73 20 69 74 73 20 69 6e 64 65 78 2e 20 4f 74 68  s its index. Oth
2400: 65 72 77 69 73 65 2c 20 2d 31 20 2a 2f 0a 2b 7b  erwise, -1 */.+{
2410: 0a 2b 20 20 20 20 49 6e 74 65 72 70 20 2a 69 50  .+    Interp *iP
2420: 74 72 20 3d 20 28 49 6e 74 65 72 70 20 2a 29 20  tr = (Interp *) 
2430: 69 6e 74 65 72 70 3b 0a 2b 20 20 20 20 43 61 6c  interp;.+    Cal
2440: 6c 46 72 61 6d 65 20 2a 76 61 72 46 72 61 6d 65  lFrame *varFrame
2450: 50 74 72 20 3d 20 69 50 74 72 2d 3e 76 61 72 46  Ptr = iPtr->varF
2460: 72 61 6d 65 50 74 72 3b 0a 2b 20 20 20 20 56 61  ramePtr;.+    Va
2470: 72 20 2a 76 61 72 50 74 72 3b 0a 2b 20 20 20 20  r *varPtr;.+    
2480: 43 4f 4e 53 54 20 63 68 61 72 20 2a 65 72 72 4d  CONST char *errM
2490: 73 67 3b 0a 2b 20 20 20 20 43 4f 4e 53 54 20 63  sg;.+    CONST c
24a0: 68 61 72 20 2a 70 3b 20 20 20 20 0a 2b 20 20 20  har *p;    .+   
24b0: 20 0a 2b 20 20 20 20 69 66 20 28 69 6e 64 65 78   .+    if (index
24c0: 20 3e 3d 20 30 29 20 7b 0a 2b 09 69 66 20 28 21   >= 0) {.+.if (!
24d0: 28 76 61 72 46 72 61 6d 65 50 74 72 2d 3e 69 73  (varFramePtr->is
24e0: 50 72 6f 63 43 61 6c 6c 46 72 61 6d 65 20 26 20  ProcCallFrame & 
24f0: 46 52 41 4d 45 5f 49 53 5f 50 52 4f 43 29 29 20  FRAME_IS_PROC)) 
2500: 7b 0a 2b 09 20 20 20 20 54 63 6c 5f 50 61 6e 69  {.+.    Tcl_Pani
2510: 63 28 22 4f 62 6a 4d 61 6b 65 55 70 76 61 72 20  c("ObjMakeUpvar 
2520: 63 61 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 69  called with an i
2530: 6e 64 65 78 20 6f 75 74 73 69 64 65 20 66 72 6f  ndex outside fro
2540: 6d 20 61 20 70 72 6f 63 2e 5c 6e 22 29 3b 0a 2b  m a proc.\n");.+
2550: 09 7d 0a 2b 09 76 61 72 50 74 72 20 3d 20 26 28  .}.+.varPtr = &(
2560: 76 61 72 46 72 61 6d 65 50 74 72 2d 3e 63 6f 6d  varFramePtr->com
2570: 70 69 6c 65 64 4c 6f 63 61 6c 73 5b 69 6e 64 65  piledLocals[inde
2580: 78 5d 29 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65  x]);.+    } else
2590: 20 7b 0a 20 09 2f 2a 0a 20 09 20 2a 20 44 6f 20   {. ./*. . * Do 
25a0: 6e 6f 74 20 70 65 72 6d 69 74 20 74 68 65 20 6e  not permit the n
25b0: 65 77 20 76 61 72 69 61 62 6c 65 20 74 6f 20 6c  ew variable to l
25c0: 6f 6f 6b 20 6c 69 6b 65 20 61 6e 20 61 72 72 61  ook like an arra
25d0: 79 20 72 65 66 65 72 65 6e 63 65 2c 20 61 73 0a  y reference, as.
25e0: 20 09 20 2a 20 69 74 20 77 69 6c 6c 20 6e 6f 74   . * it will not
25f0: 20 62 65 20 72 65 61 63 68 61 62 6c 65 20 69 6e   be reachable in
2600: 20 74 68 61 74 20 63 61 73 65 20 5b 42 75 67 20   that case [Bug 
2610: 36 30 30 38 31 32 2c 20 54 49 50 20 31 38 34 5d  600812, TIP 184]
2620: 2e 20 54 68 65 0a 49 6e 64 65 78 3a 20 74 65 73  . The.Index: tes
2630: 74 73 2f 6e 61 6d 65 73 70 61 63 65 2e 74 65 73  ts/namespace.tes
2640: 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  t.==============
2650: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2660: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2670: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2680: 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20  =====.RCS file: 
2690: 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c  /cvsroot/tcl/tcl
26a0: 2f 74 65 73 74 73 2f 6e 61 6d 65 73 70 61 63 65  /tests/namespace
26b0: 2e 74 65 73 74 2c 76 0a 72 65 74 72 69 65 76 69  .test,v.retrievi
26c0: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 35 30  ng revision 1.50
26d0: 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 35 30 20  .diff -u -r1.50 
26e0: 6e 61 6d 65 73 70 61 63 65 2e 74 65 73 74 0a 2d  namespace.test.-
26f0: 2d 2d 20 74 65 73 74 73 2f 6e 61 6d 65 73 70 61  -- tests/namespa
2700: 63 65 2e 74 65 73 74 09 39 20 4a 61 6e 20 32 30  ce.test.9 Jan 20
2710: 30 36 20 31 38 3a 33 35 3a 30 31 20 2d 30 30 30  06 18:35:01 -000
2720: 30 09 31 2e 35 30 0a 2b 2b 2b 20 74 65 73 74 73  0.1.50.+++ tests
2730: 2f 6e 61 6d 65 73 70 61 63 65 2e 74 65 73 74 09  /namespace.test.
2740: 31 37 20 4a 61 6e 20 32 30 30 36 20 32 30 3a 33  17 Jan 2006 20:3
2750: 35 3a 35 34 20 2d 30 30 30 30 0a 40 40 20 2d 31  5:54 -0000.@@ -1
2760: 38 2c 36 20 2b 31 38 2c 31 31 20 40 40 0a 20 20  8,6 +18,11 @@.  
2770: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70     namespace imp
2780: 6f 72 74 20 2d 66 6f 72 63 65 20 3a 3a 74 63 6c  ort -force ::tcl
2790: 74 65 73 74 3a 3a 2a 0a 20 7d 0a 20 0a 2b 23 0a  test::*. }. .+#.
27a0: 2b 23 20 52 45 4d 41 52 4b 3a 20 74 68 65 20 74  +# REMARK: the t
27b0: 65 73 74 73 20 66 6f 72 20 27 6e 61 6d 65 73 70  ests for 'namesp
27c0: 61 63 65 20 75 70 76 61 72 27 20 61 72 65 20 6e  ace upvar' are n
27d0: 6f 74 20 64 6f 6e 65 20 68 65 72 65 2e 20 54 68  ot done here. Th
27e0: 65 79 20 61 72 65 20 74 6f 20 62 65 0a 2b 23 20  ey are to be.+# 
27f0: 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 66 69 6c  found in the fil
2800: 65 20 27 75 70 76 61 72 2e 74 65 73 74 27 2e 0a  e 'upvar.test'..
2810: 2b 23 0a 2b 0a 20 23 20 43 6c 65 61 72 20 6f 75  +#.+. # Clear ou
2820: 74 20 61 6e 79 20 6e 61 6d 65 73 70 61 63 65 73  t any namespaces
2830: 20 63 61 6c 6c 65 64 20 74 65 73 74 5f 6e 73 5f   called test_ns_
2840: 2a 0a 20 63 61 74 63 68 20 7b 6e 61 6d 65 73 70  *. catch {namesp
2850: 61 63 65 20 64 65 6c 65 74 65 20 7b 65 78 70 61  ace delete {expa
2860: 6e 64 7d 5b 6e 61 6d 65 73 70 61 63 65 20 63 68  nd}[namespace ch
2870: 69 6c 64 72 65 6e 20 3a 3a 20 74 65 73 74 5f 6e  ildren :: test_n
2880: 73 5f 2a 5d 7d 0a 20 0a 49 6e 64 65 78 3a 20 74  s_*]}. .Index: t
2890: 65 73 74 73 2f 75 70 76 61 72 2e 74 65 73 74 0a  ests/upvar.test.
28a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
28b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
28c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
28d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
28e0: 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63  ===.RCS file: /c
28f0: 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 74  vsroot/tcl/tcl/t
2900: 65 73 74 73 2f 75 70 76 61 72 2e 74 65 73 74 2c  ests/upvar.test,
2910: 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76  v.retrieving rev
2920: 69 73 69 6f 6e 20 31 2e 31 30 0a 64 69 66 66 20  ision 1.10.diff 
2930: 2d 75 20 2d 72 31 2e 31 30 20 75 70 76 61 72 2e  -u -r1.10 upvar.
2940: 74 65 73 74 0a 2d 2d 2d 20 74 65 73 74 73 2f 75  test.--- tests/u
2950: 70 76 61 72 2e 74 65 73 74 09 31 39 20 4d 61 79  pvar.test.19 May
2960: 20 32 30 30 34 20 31 30 3a 34 36 3a 32 37 20 2d   2004 10:46:27 -
2970: 30 30 30 30 09 31 2e 31 30 0a 2b 2b 2b 20 74 65  0000.1.10.+++ te
2980: 73 74 73 2f 75 70 76 61 72 2e 74 65 73 74 09 31  sts/upvar.test.1
2990: 37 20 4a 61 6e 20 32 30 30 36 20 32 30 3a 33 35  7 Jan 2006 20:35
29a0: 3a 35 34 20 2d 30 30 30 30 0a 40 40 20 2d 31 2c  :54 -0000.@@ -1,
29b0: 34 20 2b 31 2c 34 20 40 40 0a 2d 23 20 43 6f 6d  4 +1,4 @@.-# Com
29c0: 6d 61 6e 64 73 20 63 6f 76 65 72 65 64 3a 20 20  mands covered:  
29d0: 75 70 76 61 72 0a 2b 23 20 43 6f 6d 6d 61 6e 64  upvar.+# Command
29e0: 73 20 63 6f 76 65 72 65 64 3a 20 20 27 75 70 76  s covered:  'upv
29f0: 61 72 27 2c 20 27 6e 61 6d 65 73 70 61 63 65 20  ar', 'namespace 
2a00: 75 70 76 61 72 27 0a 20 23 0a 20 23 20 54 68 69  upvar'. #. # Thi
2a10: 73 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20  s file contains 
2a20: 61 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6f 66 20  a collection of 
2a30: 74 65 73 74 73 20 66 6f 72 20 6f 6e 65 20 6f 72  tests for one or
2a40: 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 54 63 6c   more of the Tcl
2a50: 0a 20 23 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6d  . # built-in com
2a60: 6d 61 6e 64 73 2e 20 20 53 6f 75 72 63 69 6e 67  mands.  Sourcing
2a70: 20 74 68 69 73 20 66 69 6c 65 20 69 6e 74 6f 20   this file into 
2a80: 54 63 6c 20 72 75 6e 73 20 74 68 65 20 74 65 73  Tcl runs the tes
2a90: 74 73 20 61 6e 64 0a 40 40 20 2d 34 30 35 2c 36  ts and.@@ -405,6
2aa0: 20 2b 34 30 35 2c 35 30 20 40 40 0a 20 7d 20 7b   +405,50 @@. } {
2ab0: 31 32 33 34 7d 0a 20 63 61 74 63 68 20 7b 75 6e  1234}. catch {un
2ac0: 73 65 74 20 61 7d 0a 20 0a 2b 0a 2b 23 0a 2b 23  set a}. .+.+#.+#
2ad0: 20 54 65 73 74 73 20 66 6f 72 20 27 6e 61 6d 65   Tests for 'name
2ae0: 73 70 61 63 65 20 75 70 76 61 72 27 2e 20 41 73  space upvar'. As
2af0: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
2b00: 69 6f 6e 20 69 73 20 65 73 73 65 6e 74 69 61 6c  ion is essential
2b10: 6c 79 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2b  ly the same as.+
2b20: 23 20 66 6f 72 20 27 75 70 76 61 72 27 2c 20 77  # for 'upvar', w
2b30: 65 20 6f 6e 6c 79 20 74 65 73 74 20 74 68 61 74  e only test that
2b40: 20 74 68 65 20 76 61 72 69 61 62 6c 65 73 20 61   the variables a
2b50: 72 65 20 6c 69 6e 6b 65 64 20 63 6f 72 72 65 63  re linked correc
2b60: 74 6c 79 2e 20 49 65 2c 20 77 65 0a 2b 23 20 61  tly. Ie, we.+# a
2b70: 73 73 75 6d 65 20 74 68 61 74 20 74 68 65 20 62  ssume that the b
2b80: 65 68 61 76 69 6f 75 72 20 6f 66 20 76 61 72 69  ehaviour of vari
2b90: 61 62 6c 65 73 20 6f 6e 63 65 20 74 68 65 20 6c  ables once the l
2ba0: 69 6e 6b 20 69 73 20 65 73 74 61 62 6c 69 73 68  ink is establish
2bb0: 65 64 20 68 61 73 20 0a 2b 23 20 61 6c 72 65 61  ed has .+# alrea
2bc0: 64 79 20 62 65 65 6e 20 74 65 73 74 65 64 20 61  dy been tested a
2bd0: 62 6f 76 65 2e 0a 2b 23 0a 2b 0a 2b 23 20 43 6c  bove..+#.+.+# Cl
2be0: 65 61 72 20 6f 75 74 20 61 6e 79 20 6e 61 6d 65  ear out any name
2bf0: 73 70 61 63 65 73 20 63 61 6c 6c 65 64 20 74 65  spaces called te
2c00: 73 74 5f 6e 73 5f 2a 0a 2b 63 61 74 63 68 20 7b  st_ns_*.+catch {
2c10: 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65  namespace delete
2c20: 20 7b 65 78 70 61 6e 64 7d 5b 6e 61 6d 65 73 70   {expand}[namesp
2c30: 61 63 65 20 63 68 69 6c 64 72 65 6e 20 3a 3a 20  ace children :: 
2c40: 74 65 73 74 5f 6e 73 5f 2a 5d 7d 0a 2b 0a 2b 6e  test_ns_*]}.+.+n
2c50: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 74 65  amespace eval te
2c60: 73 74 5f 6e 73 5f 30 20 7b 0a 2b 20 20 20 20 76  st_ns_0 {.+    v
2c70: 61 72 69 61 62 6c 65 20 78 20 74 65 73 74 5f 6e  ariable x test_n
2c80: 73 5f 30 0a 2b 7d 0a 2b 0a 2b 6e 61 6d 65 73 70  s_0.+}.+.+namesp
2c90: 61 63 65 20 65 76 61 6c 20 74 65 73 74 5f 6e 73  ace eval test_ns
2ca0: 5f 31 20 7b 0a 2b 20 20 20 20 76 61 72 69 61 62  _1 {.+    variab
2cb0: 6c 65 20 78 20 74 65 73 74 5f 6e 73 5f 31 0a 2b  le x test_ns_1.+
2cc0: 7d 0a 2b 0a 2b 6e 61 6d 65 73 70 61 63 65 20 65  }.+.+namespace e
2cd0: 76 61 6c 20 74 65 73 74 5f 6e 73 5f 32 20 7b 7d  val test_ns_2 {}
2ce0: 0a 2b 0a 2b 73 65 74 20 78 20 74 65 73 74 5f 67  .+.+set x test_g
2cf0: 6c 6f 62 61 6c 0a 2b 0a 2b 74 65 73 74 20 75 70  lobal.+.+test up
2d00: 76 61 72 2d 4e 53 2d 31 2e 31 20 7b 6e 73 75 70  var-NS-1.1 {nsup
2d10: 76 61 72 20 6c 69 6e 6b 73 20 74 6f 20 63 6f 72  var links to cor
2d20: 72 65 63 74 20 76 61 72 69 61 62 6c 65 7d 20 5c  rect variable} \
2d30: 0a 2b 20 20 20 20 2d 62 6f 64 79 20 7b 0a 2b 09  .+    -body {.+.
2d40: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 74  namespace eval t
2d50: 65 73 74 5f 6e 73 5f 32 20 7b 0a 2b 09 20 20 20  est_ns_2 {.+.   
2d60: 20 6e 61 6d 65 73 70 61 63 65 20 75 70 76 61 72   namespace upvar
2d70: 20 3a 3a 74 65 73 74 5f 6e 73 5f 30 20 78 20 77   ::test_ns_0 x w
2d80: 0a 2b 09 20 20 20 20 73 65 74 20 77 0a 2b 09 7d  .+.    set w.+.}
2d90: 0a 2b 20 20 20 20 7d 20 5c 0a 2b 20 20 20 20 2d  .+    } \.+    -
2da0: 72 65 73 75 6c 74 20 7b 74 65 73 74 5f 6e 73 5f  result {test_ns_
2db0: 30 7d 0a 2b 0a 2b 74 65 73 74 20 75 70 76 61 72  0}.+.+test upvar
2dc0: 2d 4e 53 2d 31 2e 32 20 7b 6e 73 75 70 76 61 72  -NS-1.2 {nsupvar
2dd0: 20 6c 69 6e 6b 73 20 74 6f 20 63 6f 72 72 65 63   links to correc
2de0: 74 20 76 61 72 69 61 62 6c 65 7d 20 5c 0a 2b 20  t variable} \.+ 
2df0: 20 20 20 2d 62 6f 64 79 20 7b 0a 2b 09 6e 61 6d     -body {.+.nam
2e00: 65 73 70 61 63 65 20 65 76 61 6c 20 74 65 73 74  espace eval test
2e10: 5f 6e 73 5f 32 20 7b 0a 2b 09 20 20 20 20 70 72  _ns_2 {.+.    pr
2e20: 6f 63 20 61 20 7b 7d 20 7b 0a 2b 09 09 6e 61 6d  oc a {} {.+..nam
2e30: 65 73 70 61 63 65 20 75 70 76 61 72 20 3a 3a 74  espace upvar ::t
2e40: 65 73 74 5f 6e 73 5f 30 20 78 20 77 0a 2b 09 09  est_ns_0 x w.+..
2e50: 73 65 74 20 77 0a 2b 09 20 20 20 20 7d 0a 2b 09  set w.+.    }.+.
2e60: 20 20 20 20 72 65 74 75 72 6e 20 5b 61 5d 5b 72      return [a][r
2e70: 65 6e 61 6d 65 20 61 20 7b 7d 5d 0a 2b 09 7d 0a  ename a {}].+.}.
2e80: 2b 20 20 20 20 7d 20 5c 0a 2b 20 20 20 20 2d 72  +    } \.+    -r
2e90: 65 73 75 6c 74 20 7b 74 65 73 74 5f 6e 73 5f 30  esult {test_ns_0
2ea0: 7d 0a 2b 0a 20 23 20 63 6c 65 61 6e 75 70 0a 20  }.+. # cleanup. 
2eb0: 3a 3a 74 63 6c 74 65 73 74 3a 3a 63 6c 65 61 6e  ::tcltest::clean
2ec0: 75 70 54 65 73 74 73 0a 20 72 65 74 75 72 6e 0a  upTests. return.