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.