Attachment "1992824.patch" to
ticket [1992824fff]
added by
dgp
2008-09-17 23:48:52.
0000: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 Index: generic/t
0010: 63 6c 2e 64 65 63 6c 73 0a 3d 3d 3d 3d 3d 3d 3d cl.decls.=======
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 ============.RCS
0060: 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f file: /cvsroot/
0070: 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f tcl/tcl/generic/
0080: 74 63 6c 2e 64 65 63 6c 73 2c 76 0a 72 65 74 72 tcl.decls,v.retr
0090: 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 ieving revision
00a0: 31 2e 31 34 33 0a 64 69 66 66 20 2d 75 20 2d 72 1.143.diff -u -r
00b0: 31 2e 31 34 33 20 74 63 6c 2e 64 65 63 6c 73 0a 1.143 tcl.decls.
00c0: 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 2e --- generic/tcl.
00d0: 64 65 63 6c 73 09 32 31 20 41 75 67 20 32 30 30 decls.21 Aug 200
00e0: 38 20 32 31 3a 33 35 3a 33 37 20 2d 30 30 30 30 8 21:35:37 -0000
00f0: 09 31 2e 31 34 33 0a 2b 2b 2b 20 67 65 6e 65 72 .1.143.+++ gener
0100: 69 63 2f 74 63 6c 2e 64 65 63 6c 73 09 31 37 20 ic/tcl.decls.17
0110: 53 65 70 20 32 30 30 38 20 31 36 3a 34 35 3a 35 Sep 2008 16:45:5
0120: 38 20 2d 30 30 30 30 0a 40 40 20 2d 32 31 34 36 8 -0000.@@ -2146
0130: 2c 36 20 2b 32 31 34 36 2c 31 33 20 40 40 0a 20 ,6 +2146,13 @@.
0140: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0150: 20 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 Tcl_Obj *C
0160: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 0a 20 7d 0a ONST objv[]). }.
0170: 20 0a 2b 23 20 54 49 50 23 33 31 32 20 4e 65 77 .+# TIP#312 New
0180: 20 54 63 6c 5f 4c 69 6e 6b 41 72 72 61 79 28 29 Tcl_LinkArray()
0190: 20 66 75 6e 63 74 69 6f 6e 0a 2b 64 65 63 6c 61 function.+decla
01a0: 72 65 20 35 38 39 20 67 65 6e 65 72 69 63 20 7b re 589 generic {
01b0: 0a 2b 20 20 20 20 69 6e 74 20 54 63 6c 5f 4c 69 .+ int Tcl_Li
01c0: 6e 6b 41 72 72 61 79 28 54 63 6c 5f 49 6e 74 65 nkArray(Tcl_Inte
01d0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 43 4f 4e 53 rp *interp, CONS
01e0: 54 20 63 68 61 72 20 2a 76 61 72 4e 61 6d 65 2c T char *varName,
01f0: 20 63 68 61 72 20 2a 61 64 64 72 2c 0a 2b 20 20 char *addr,.+
0200: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 74 79 int ty
0210: 70 65 2c 20 69 6e 74 20 73 69 7a 65 29 0a 2b 7d pe, int size).+}
0220: 0a 2b 0a 2b 0a 20 23 23 23 23 23 23 23 23 23 23 .+.+. ##########
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0270: 23 23 23 23 0a 20 0a 20 23 20 44 65 66 69 6e 65 ####. . # Define
0280: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 73 70 the platform sp
0290: 65 63 69 66 69 63 20 70 75 62 6c 69 63 20 54 63 ecific public Tc
02a0: 6c 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54 68 l interface. Th
02b0: 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 ese functions ar
02c0: 65 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 e.Index: generic
02d0: 2f 74 63 6c 2e 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d /tcl.h.=========
02e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
02f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0300: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0310: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 ==========.RCS f
0320: 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 ile: /cvsroot/tc
0330: 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 l/tcl/generic/tc
0340: 6c 2e 68 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 l.h,v.retrieving
0350: 20 72 65 76 69 73 69 6f 6e 20 31 2e 32 37 30 0a revision 1.270.
0360: 64 69 66 66 20 2d 75 20 2d 72 31 2e 32 37 30 20 diff -u -r1.270
0370: 74 63 6c 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72 69 tcl.h.--- generi
0380: 63 2f 74 63 6c 2e 68 09 33 20 53 65 70 20 32 30 c/tcl.h.3 Sep 20
0390: 30 38 20 30 35 3a 34 33 3a 33 31 20 2d 30 30 30 08 05:43:31 -000
03a0: 30 09 31 2e 32 37 30 0a 2b 2b 2b 20 67 65 6e 65 0.1.270.+++ gene
03b0: 72 69 63 2f 74 63 6c 2e 68 09 31 37 20 53 65 70 ric/tcl.h.17 Sep
03c0: 20 32 30 30 38 20 31 36 3a 34 35 3a 35 38 20 2d 2008 16:45:58 -
03d0: 30 30 30 30 0a 40 40 20 2d 31 30 37 38 2c 36 20 0000.@@ -1078,6
03e0: 2b 31 30 37 38 2c 38 20 40 40 0a 20 23 64 65 66 +1078,8 @@. #def
03f0: 69 6e 65 20 54 43 4c 5f 4c 49 4e 4b 5f 55 4c 4f ine TCL_LINK_ULO
0400: 4e 47 09 09 31 32 0a 20 23 64 65 66 69 6e 65 20 NG..12. #define
0410: 54 43 4c 5f 4c 49 4e 4b 5f 46 4c 4f 41 54 09 09 TCL_LINK_FLOAT..
0420: 31 33 0a 20 23 64 65 66 69 6e 65 20 54 43 4c 5f 13. #define TCL_
0430: 4c 49 4e 4b 5f 57 49 44 45 5f 55 49 4e 54 09 31 LINK_WIDE_UINT.1
0440: 34 0a 2b 23 64 65 66 69 6e 65 20 54 43 4c 5f 4c 4.+#define TCL_L
0450: 49 4e 4b 5f 43 48 41 52 53 20 20 20 20 20 20 20 INK_CHARS
0460: 20 20 20 31 35 0a 2b 23 64 65 66 69 6e 65 20 54 15.+#define T
0470: 43 4c 5f 4c 49 4e 4b 5f 42 49 4e 41 52 59 20 20 CL_LINK_BINARY
0480: 20 20 20 20 20 20 20 31 36 0a 20 23 64 65 66 69 16. #defi
0490: 6e 65 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 ne TCL_LINK_READ
04a0: 5f 4f 4e 4c 59 09 30 78 38 30 0a 20 0a 20 2f 2a _ONLY.0x80. . /*
04b0: 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f .Index: generic/
04c0: 74 63 6c 44 65 63 6c 73 2e 68 0a 3d 3d 3d 3d 3d tclDecls.h.=====
04d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
04e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
04f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0500: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 ==============.R
0510: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f CS file: /cvsroo
0520: 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 t/tcl/tcl/generi
0530: 63 2f 74 63 6c 44 65 63 6c 73 2e 68 2c 76 0a 72 c/tclDecls.h,v.r
0540: 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 etrieving revisi
0550: 6f 6e 20 31 2e 31 34 35 0a 64 69 66 66 20 2d 75 on 1.145.diff -u
0560: 20 2d 72 31 2e 31 34 35 20 74 63 6c 44 65 63 6c -r1.145 tclDecl
0570: 73 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f s.h.--- generic/
0580: 74 63 6c 44 65 63 6c 73 2e 68 09 32 31 20 41 75 tclDecls.h.21 Au
0590: 67 20 32 30 30 38 20 32 31 3a 33 35 3a 33 38 20 g 2008 21:35:38
05a0: 2d 30 30 30 30 09 31 2e 31 34 35 0a 2b 2b 2b 20 -0000.1.145.+++
05b0: 67 65 6e 65 72 69 63 2f 74 63 6c 44 65 63 6c 73 generic/tclDecls
05c0: 2e 68 09 31 37 20 53 65 70 20 32 30 30 38 20 31 .h.17 Sep 2008 1
05d0: 36 3a 34 35 3a 35 39 20 2d 30 30 30 30 0a 40 40 6:45:59 -0000.@@
05e0: 20 2d 33 35 36 36 2c 36 20 2b 33 35 36 36 2c 31 -3566,6 +3566,1
05f0: 33 20 40 40 0a 20 09 09 09 09 43 6c 69 65 6e 74 3 @@. ....Client
0600: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c Data clientData,
0610: 20 69 6e 74 20 6f 62 6a 63 2c 20 0a 20 09 09 09 int objc, . ...
0620: 09 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 .Tcl_Obj *CONST
0630: 6f 62 6a 76 5b 5d 29 3b 0a 20 23 65 6e 64 69 66 objv[]);. #endif
0640: 0a 2b 23 69 66 6e 64 65 66 20 54 63 6c 5f 4c 69 .+#ifndef Tcl_Li
0650: 6e 6b 41 72 72 61 79 5f 54 43 4c 5f 44 45 43 4c nkArray_TCL_DECL
0660: 41 52 45 44 0a 2b 23 64 65 66 69 6e 65 20 54 63 ARED.+#define Tc
0670: 6c 5f 4c 69 6e 6b 41 72 72 61 79 5f 54 43 4c 5f l_LinkArray_TCL_
0680: 44 45 43 4c 41 52 45 44 0a 2b 2f 2a 20 35 38 39 DECLARED.+/* 589
0690: 20 2a 2f 0a 2b 45 58 54 45 52 4e 20 69 6e 74 09 */.+EXTERN int.
06a0: 09 54 63 6c 5f 4c 69 6e 6b 41 72 72 61 79 20 28 .Tcl_LinkArray (
06b0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 20 69 6e 74 Tcl_Interp * int
06c0: 65 72 70 2c 20 0a 2b 09 09 09 09 43 4f 4e 53 54 erp, .+....CONST
06d0: 20 63 68 61 72 20 2a 20 76 61 72 4e 61 6d 65 2c char * varName,
06e0: 20 63 68 61 72 20 2a 20 61 64 64 72 2c 20 69 6e char * addr, in
06f0: 74 20 74 79 70 65 2c 20 0a 2b 09 09 09 09 69 6e t type, .+....in
0700: 74 20 73 69 7a 65 29 3b 0a 2b 23 65 6e 64 69 66 t size);.+#endif
0710: 0a 20 0a 20 74 79 70 65 64 65 66 20 73 74 72 75 . . typedef stru
0720: 63 74 20 54 63 6c 53 74 75 62 48 6f 6f 6b 73 20 ct TclStubHooks
0730: 7b 0a 20 20 20 20 20 43 4f 4e 53 54 20 73 74 72 {. CONST str
0740: 75 63 74 20 54 63 6c 50 6c 61 74 53 74 75 62 73 uct TclPlatStubs
0750: 20 2a 74 63 6c 50 6c 61 74 53 74 75 62 73 3b 0a *tclPlatStubs;.
0760: 40 40 20 2d 34 32 31 34 2c 36 20 2b 34 32 32 31 @@ -4214,6 +4221
0770: 2c 37 20 40 40 0a 20 20 20 20 20 69 6e 74 20 28 ,7 @@. int (
0780: 2a 74 63 6c 5f 4e 52 43 6d 64 53 77 61 70 29 20 *tcl_NRCmdSwap)
0790: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 20 69 6e (Tcl_Interp * in
07a0: 74 65 72 70 2c 20 54 63 6c 5f 43 6f 6d 6d 61 6e terp, Tcl_Comman
07b0: 64 20 63 6d 64 2c 20 69 6e 74 20 6f 62 6a 63 2c d cmd, int objc,
07c0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 Tcl_Obj *CONST
07d0: 6f 62 6a 76 5b 5d 2c 20 69 6e 74 20 66 6c 61 67 objv[], int flag
07e0: 73 29 3b 20 2f 2a 20 35 38 36 20 2a 2f 0a 20 20 s); /* 586 */.
07f0: 20 20 20 76 6f 69 64 20 28 2a 74 63 6c 5f 4e 52 void (*tcl_NR
0800: 41 64 64 43 61 6c 6c 62 61 63 6b 29 20 28 54 63 AddCallback) (Tc
0810: 6c 5f 49 6e 74 65 72 70 20 2a 20 69 6e 74 65 72 l_Interp * inter
0820: 70 2c 20 54 63 6c 5f 4e 52 50 6f 73 74 50 72 6f p, Tcl_NRPostPro
0830: 63 20 2a 20 70 6f 73 74 50 72 6f 63 50 74 72 2c c * postProcPtr,
0840: 20 43 6c 69 65 6e 74 44 61 74 61 20 64 61 74 61 ClientData data
0850: 30 2c 20 43 6c 69 65 6e 74 44 61 74 61 20 64 61 0, ClientData da
0860: 74 61 31 2c 20 43 6c 69 65 6e 74 44 61 74 61 20 ta1, ClientData
0870: 64 61 74 61 32 2c 20 43 6c 69 65 6e 74 44 61 74 data2, ClientDat
0880: 61 20 64 61 74 61 33 29 3b 20 2f 2a 20 35 38 37 a data3); /* 587
0890: 20 2a 2f 0a 20 20 20 20 20 69 6e 74 20 28 2a 74 */. int (*t
08a0: 63 6c 5f 4e 52 43 61 6c 6c 4f 62 6a 50 72 6f 63 cl_NRCallObjProc
08b0: 29 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 20 ) (Tcl_Interp *
08c0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 43 interp, Tcl_ObjC
08d0: 6d 64 50 72 6f 63 20 2a 20 6f 62 6a 50 72 6f 63 mdProc * objProc
08e0: 2c 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 , ClientData cli
08f0: 65 6e 74 44 61 74 61 2c 20 69 6e 74 20 6f 62 6a entData, int obj
0900: 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 c, Tcl_Obj *CONS
0910: 54 20 6f 62 6a 76 5b 5d 29 3b 20 2f 2a 20 35 38 T objv[]); /* 58
0920: 38 20 2a 2f 0a 2b 20 20 20 20 69 6e 74 20 28 2a 8 */.+ int (*
0930: 74 63 6c 5f 4c 69 6e 6b 41 72 72 61 79 29 20 28 tcl_LinkArray) (
0940: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 20 69 6e 74 Tcl_Interp * int
0950: 65 72 70 2c 20 43 4f 4e 53 54 20 63 68 61 72 20 erp, CONST char
0960: 2a 20 76 61 72 4e 61 6d 65 2c 20 63 68 61 72 20 * varName, char
0970: 2a 20 61 64 64 72 2c 20 69 6e 74 20 74 79 70 65 * addr, int type
0980: 2c 20 69 6e 74 20 73 69 7a 65 29 3b 20 2f 2a 20 , int size); /*
0990: 35 38 39 20 2a 2f 0a 20 7d 20 54 63 6c 53 74 75 589 */. } TclStu
09a0: 62 73 3b 0a 20 0a 20 23 69 66 20 64 65 66 69 6e bs;. . #if defin
09b0: 65 64 28 55 53 45 5f 54 43 4c 5f 53 54 55 42 53 ed(USE_TCL_STUBS
09c0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 55 53 ) && !defined(US
09d0: 45 5f 54 43 4c 5f 53 54 55 42 5f 50 52 4f 43 53 E_TCL_STUB_PROCS
09e0: 29 0a 40 40 20 2d 36 36 34 32 2c 36 20 2b 36 36 ).@@ -6642,6 +66
09f0: 35 30 2c 31 30 20 40 40 0a 20 23 64 65 66 69 6e 50,10 @@. #defin
0a00: 65 20 54 63 6c 5f 4e 52 43 61 6c 6c 4f 62 6a 50 e Tcl_NRCallObjP
0a10: 72 6f 63 20 5c 0a 20 09 28 74 63 6c 53 74 75 62 roc \. .(tclStub
0a20: 73 50 74 72 2d 3e 74 63 6c 5f 4e 52 43 61 6c 6c sPtr->tcl_NRCall
0a30: 4f 62 6a 50 72 6f 63 29 20 2f 2a 20 35 38 38 20 ObjProc) /* 588
0a40: 2a 2f 0a 20 23 65 6e 64 69 66 0a 2b 23 69 66 6e */. #endif.+#ifn
0a50: 64 65 66 20 54 63 6c 5f 4c 69 6e 6b 41 72 72 61 def Tcl_LinkArra
0a60: 79 0a 2b 23 64 65 66 69 6e 65 20 54 63 6c 5f 4c y.+#define Tcl_L
0a70: 69 6e 6b 41 72 72 61 79 20 5c 0a 2b 09 28 74 63 inkArray \.+.(tc
0a80: 6c 53 74 75 62 73 50 74 72 2d 3e 74 63 6c 5f 4c lStubsPtr->tcl_L
0a90: 69 6e 6b 41 72 72 61 79 29 20 2f 2a 20 35 38 39 inkArray) /* 589
0aa0: 20 2a 2f 0a 2b 23 65 6e 64 69 66 0a 20 0a 20 23 */.+#endif. . #
0ab0: 65 6e 64 69 66 20 2f 2a 20 64 65 66 69 6e 65 64 endif /* defined
0ac0: 28 55 53 45 5f 54 43 4c 5f 53 54 55 42 53 29 20 (USE_TCL_STUBS)
0ad0: 26 26 20 21 64 65 66 69 6e 65 64 28 55 53 45 5f && !defined(USE_
0ae0: 54 43 4c 5f 53 54 55 42 5f 50 52 4f 43 53 29 20 TCL_STUB_PROCS)
0af0: 2a 2f 0a 20 0a 49 6e 64 65 78 3a 20 67 65 6e 65 */. .Index: gene
0b00: 72 69 63 2f 74 63 6c 4c 69 6e 6b 2e 63 0a 3d 3d ric/tclLink.c.==
0b10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0b20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0b30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0b40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0b50: 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 =.RCS file: /cvs
0b60: 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e root/tcl/tcl/gen
0b70: 65 72 69 63 2f 74 63 6c 4c 69 6e 6b 2e 63 2c 76 eric/tclLink.c,v
0b80: 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 .retrieving revi
0b90: 73 69 6f 6e 20 31 2e 32 35 0a 64 69 66 66 20 2d sion 1.25.diff -
0ba0: 75 20 2d 72 31 2e 32 35 20 74 63 6c 4c 69 6e 6b u -r1.25 tclLink
0bb0: 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 .c.--- generic/t
0bc0: 63 6c 4c 69 6e 6b 2e 63 09 32 37 20 41 70 72 20 clLink.c.27 Apr
0bd0: 32 30 30 38 20 32 32 3a 32 31 3a 33 30 20 2d 30 2008 22:21:30 -0
0be0: 30 30 30 09 31 2e 32 35 0a 2b 2b 2b 20 67 65 6e 000.1.25.+++ gen
0bf0: 65 72 69 63 2f 74 63 6c 4c 69 6e 6b 2e 63 09 31 eric/tclLink.c.1
0c00: 37 20 53 65 70 20 32 30 30 38 20 31 36 3a 34 35 7 Sep 2008 16:45
0c10: 3a 35 39 20 2d 30 30 30 30 0a 40 40 20 2d 33 30 :59 -0000.@@ -30
0c20: 2c 36 20 2b 33 30 2c 39 20 40 40 0a 20 09 09 09 ,6 +30,9 @@. ...
0c30: 09 20 2a 20 61 63 74 75 61 6c 20 76 61 72 69 61 . * actual varia
0c40: 62 6c 65 20 6d 61 79 20 62 65 20 61 6c 69 61 73 ble may be alias
0c50: 65 64 20 61 74 20 74 68 61 74 20 74 69 6d 65 0a ed at that time.
0c60: 20 09 09 09 09 20 2a 20 76 69 61 20 75 70 76 61 .... * via upva
0c70: 72 2e 20 2a 2f 0a 20 20 20 20 20 63 68 61 72 20 r. */. char
0c80: 2a 61 64 64 72 3b 09 09 09 2f 2a 20 4c 6f 63 61 *addr;.../* Loca
0c90: 74 69 6f 6e 20 6f 66 20 43 20 76 61 72 69 61 62 tion of C variab
0ca0: 6c 65 2e 20 2a 2f 0a 2b 20 20 20 20 69 6e 74 20 le. */.+ int
0cb0: 62 79 74 65 73 3b 09 09 09 2f 2a 20 53 69 7a 65 bytes;.../* Size
0cc0: 20 6f 66 20 43 20 76 61 72 69 61 62 6c 65 20 61 of C variable a
0cd0: 72 72 61 79 2e 0a 2b 09 09 09 09 20 2a 20 30 20 rray..+.... * 0
0ce0: 77 68 65 6e 20 73 69 6e 67 6c 65 20 76 61 72 69 when single vari
0cf0: 61 62 6c 65 73 0a 2b 09 09 09 09 20 2a 20 3e 30 ables.+.... * >0
0d00: 20 75 73 65 64 20 66 6f 72 20 61 72 72 61 79 20 used for array
0d10: 76 61 72 69 61 62 6c 65 73 20 2a 2f 0a 20 20 20 variables */.
0d20: 20 20 69 6e 74 20 74 79 70 65 3b 09 09 09 2f 2a int type;.../*
0d30: 20 54 79 70 65 20 6f 66 20 6c 69 6e 6b 20 28 54 Type of link (T
0d40: 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 2c 20 65 74 63 CL_LINK_INT, etc
0d50: 2e 29 2e 20 2a 2f 0a 20 20 20 20 20 75 6e 69 6f .). */. unio
0d60: 6e 20 7b 0a 20 09 63 68 61 72 20 63 3b 0a 40 40 n {. .char c;.@@
0d70: 20 2d 34 34 2c 36 20 2b 34 37 2c 31 38 20 40 40 -44,6 +47,18 @@
0d80: 0a 20 09 54 63 6c 5f 57 69 64 65 55 49 6e 74 20 . .Tcl_WideUInt
0d90: 75 77 3b 0a 20 09 66 6c 6f 61 74 20 66 3b 0a 20 uw;. .float f;.
0da0: 09 64 6f 75 62 6c 65 20 64 3b 0a 2b 09 63 68 61 .double d;.+.cha
0db0: 72 20 2a 70 63 3b 0a 2b 09 75 6e 73 69 67 6e 65 r *pc;.+.unsigne
0dc0: 64 20 63 68 61 72 20 2a 70 75 63 3b 0a 2b 09 69 d char *puc;.+.i
0dd0: 6e 74 20 2a 70 69 3b 0a 2b 09 75 6e 73 69 67 6e nt *pi;.+.unsign
0de0: 65 64 20 69 6e 74 20 2a 70 75 69 3b 0a 2b 09 73 ed int *pui;.+.s
0df0: 68 6f 72 74 20 2a 70 73 3b 0a 2b 09 75 6e 73 69 hort *ps;.+.unsi
0e00: 67 6e 65 64 20 73 68 6f 72 74 20 2a 70 75 73 3b gned short *pus;
0e10: 0a 2b 09 6c 6f 6e 67 20 2a 70 6c 3b 0a 2b 09 75 .+.long *pl;.+.u
0e20: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 70 75 nsigned long *pu
0e30: 6c 3b 0a 2b 09 54 63 6c 5f 57 69 64 65 49 6e 74 l;.+.Tcl_WideInt
0e40: 20 2a 70 77 3b 0a 2b 09 54 63 6c 5f 57 69 64 65 *pw;.+.Tcl_Wide
0e50: 55 49 6e 74 20 2a 70 75 77 3b 0a 2b 09 66 6c 6f UInt *puw;.+.flo
0e60: 61 74 20 2a 70 66 3b 0a 2b 09 64 6f 75 62 6c 65 at *pf;.+.double
0e70: 20 2a 70 64 3b 0a 20 20 20 20 20 7d 20 6c 61 73 *pd;. } las
0e80: 74 56 61 6c 75 65 3b 09 09 2f 2a 20 4c 61 73 74 tValue;../* Last
0e90: 20 6b 6e 6f 77 6e 20 76 61 6c 75 65 20 6f 66 20 known value of
0ea0: 43 20 76 61 72 69 61 62 6c 65 3b 20 75 73 65 64 C variable; used
0eb0: 20 74 6f 0a 20 09 09 09 09 20 2a 20 61 76 6f 69 to. .... * avoi
0ec0: 64 20 73 74 72 69 6e 67 20 63 6f 6e 76 65 72 73 d string convers
0ed0: 69 6f 6e 73 2e 20 2a 2f 0a 20 20 20 20 20 69 6e ions. */. in
0ee0: 74 20 66 6c 61 67 73 3b 09 09 09 2f 2a 20 4d 69 t flags;.../* Mi
0ef0: 73 63 65 6c 6c 61 6e 65 6f 75 73 20 6f 6e 65 2d scellaneous one-
0f00: 62 69 74 20 76 61 6c 75 65 73 3b 20 73 65 65 20 bit values; see
0f10: 62 65 6c 6f 77 20 66 6f 72 0a 40 40 20 2d 35 37 below for.@@ -57
0f20: 2c 31 30 20 2b 37 32 2c 31 34 20 40 40 0a 20 20 ,10 +72,14 @@.
0f30: 2a 20 4c 49 4e 4b 5f 42 45 49 4e 47 5f 55 50 44 * LINK_BEING_UPD
0f40: 41 54 45 44 20 2d 09 09 31 20 6d 65 61 6e 73 20 ATED -..1 means
0f50: 74 68 61 74 20 61 20 63 61 6c 6c 20 74 6f 20 54 that a call to T
0f60: 63 6c 5f 55 70 64 61 74 65 4c 69 6e 6b 65 64 56 cl_UpdateLinkedV
0f70: 61 72 20 69 73 0a 20 20 2a 09 09 09 09 69 6e 20 ar is. *....in
0f80: 70 72 6f 67 72 65 73 73 20 66 6f 72 20 74 68 69 progress for thi
0f90: 73 20 76 61 72 69 61 62 6c 65 2c 20 73 6f 20 74 s variable, so t
0fa0: 72 61 63 65 0a 20 20 2a 09 09 09 09 63 61 6c 6c race. *....call
0fb0: 62 61 63 6b 73 20 6f 6e 20 74 68 65 20 76 61 72 backs on the var
0fc0: 69 61 62 6c 65 20 73 68 6f 75 6c 64 20 62 65 20 iable should be
0fd0: 69 67 6e 6f 72 65 64 2e 0a 2b 20 2a 20 4c 49 4e ignored..+ * LIN
0fe0: 4b 5f 41 4c 4c 4f 43 5f 41 44 44 52 20 2d 09 09 K_ALLOC_ADDR -..
0ff0: 31 20 6d 65 61 6e 73 20 6c 69 6e 6b 50 74 72 2d 1 means linkPtr-
1000: 3e 61 64 64 72 20 77 61 73 20 61 6c 6c 6f 63 61 >addr was alloca
1010: 74 65 64 20 6f 6e 20 74 68 65 20 68 65 61 70 0a ted on the heap.
1020: 2b 20 2a 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c + * LINK_ALLOC_L
1030: 41 53 54 20 2d 09 09 31 20 6d 65 61 6e 73 20 6c AST -..1 means l
1040: 69 6e 6b 50 74 72 2d 3e 76 61 6c 75 65 4c 61 73 inkPtr->valueLas
1050: 74 2e 70 20 77 61 73 20 61 6c 6c 6f 63 61 74 65 t.p was allocate
1060: 64 20 6f 6e 20 74 68 65 20 68 65 61 70 0a 20 20 d on the heap.
1070: 2a 2f 0a 20 0a 20 23 64 65 66 69 6e 65 20 4c 49 */. . #define LI
1080: 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 09 09 31 0a NK_READ_ONLY..1.
1090: 20 23 64 65 66 69 6e 65 20 4c 49 4e 4b 5f 42 45 #define LINK_BE
10a0: 49 4e 47 5f 55 50 44 41 54 45 44 09 32 0a 2b 23 ING_UPDATED.2.+#
10b0: 64 65 66 69 6e 65 20 4c 49 4e 4b 5f 41 4c 4c 4f define LINK_ALLO
10c0: 43 5f 41 44 44 52 09 09 34 0a 2b 23 64 65 66 69 C_ADDR..4.+#defi
10d0: 6e 65 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 ne LINK_ALLOC_LA
10e0: 53 54 09 09 38 0a 20 0a 20 2f 2a 0a 20 20 2a 20 ST..8. . /*. *
10f0: 46 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 Forward referenc
1100: 65 73 20 74 6f 20 66 75 6e 63 74 69 6f 6e 73 20 es to functions
1110: 64 65 66 69 6e 65 64 20 6c 61 74 65 72 20 69 6e defined later in
1120: 20 74 68 69 73 20 66 69 6c 65 3a 0a 40 40 20 2d this file:.@@ -
1130: 36 39 2c 36 20 2b 38 38 2c 37 20 40 40 0a 20 73 69,6 +88,7 @@. s
1140: 74 61 74 69 63 20 63 68 61 72 20 2a 09 09 4c 69 tatic char *..Li
1150: 6e 6b 54 72 61 63 65 50 72 6f 63 28 43 6c 69 65 nkTraceProc(Clie
1160: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 ntData clientDat
1170: 61 2c 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e a,Tcl_Interp *in
1180: 74 65 72 70 2c 0a 20 09 09 09 20 20 20 20 63 6f terp,. ... co
1190: 6e 73 74 20 63 68 61 72 20 2a 6e 61 6d 65 31 2c nst char *name1,
11a0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6e 61 6d const char *nam
11b0: 65 32 2c 20 69 6e 74 20 66 6c 61 67 73 29 3b 0a e2, int flags);.
11c0: 20 73 74 61 74 69 63 20 54 63 6c 5f 4f 62 6a 20 static Tcl_Obj
11d0: 2a 09 4f 62 6a 56 61 6c 75 65 28 4c 69 6e 6b 20 *.ObjValue(Link
11e0: 2a 6c 69 6e 6b 50 74 72 29 3b 0a 2b 73 74 61 74 *linkPtr);.+stat
11f0: 69 63 20 76 6f 69 64 09 09 4c 69 6e 6b 46 72 65 ic void..LinkFre
1200: 65 28 4c 69 6e 6b 20 2a 6c 69 6e 6b 50 74 72 29 e(Link *linkPtr)
1210: 3b 0a 20 0a 20 2f 2a 0a 20 20 2a 20 43 6f 6e 76 ;. . /*. * Conv
1220: 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 66 6f enience macro fo
1230: 72 20 61 63 63 65 73 73 69 6e 67 20 74 68 65 20 r accessing the
1240: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 43 20 76 value of the C v
1250: 61 72 69 61 62 6c 65 20 70 6f 69 6e 74 65 64 20 ariable pointed
1260: 74 6f 20 62 79 20 61 0a 40 40 20 2d 31 32 35 2c to by a.@@ -125,
1270: 31 38 20 2b 31 34 35 2c 31 36 31 20 40 40 0a 20 18 +145,161 @@.
1280: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 09 6c } else {. .l
1290: 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 3d 20 inkPtr->flags =
12a0: 30 3b 0a 20 20 20 20 20 7d 0a 2b 20 20 20 20 6c 0;. }.+ l
12b0: 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 20 3d 20 inkPtr->bytes =
12c0: 30 3b 0a 20 20 20 20 20 6f 62 6a 50 74 72 20 3d 0;. objPtr =
12d0: 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e 6b 50 74 ObjValue(linkPt
12e0: 72 29 3b 0a 20 20 20 20 20 69 66 20 28 54 63 6c r);. if (Tcl
12f0: 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 _ObjSetVar2(inte
1300: 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 rp, linkPtr->var
1310: 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 6f 62 6a 50 Name, NULL, objP
1320: 74 72 2c 0a 20 09 20 20 20 20 54 43 4c 5f 47 4c tr,. . TCL_GL
1330: 4f 42 41 4c 5f 4f 4e 4c 59 7c 54 43 4c 5f 4c 45 OBAL_ONLY|TCL_LE
1340: 41 56 45 5f 45 52 52 5f 4d 53 47 29 20 3d 3d 20 AVE_ERR_MSG) ==
1350: 4e 55 4c 4c 29 20 7b 0a 20 09 54 63 6c 5f 44 65 NULL) {. .Tcl_De
1360: 63 72 52 65 66 43 6f 75 6e 74 28 6c 69 6e 6b 50 crRefCount(linkP
1370: 74 72 2d 3e 76 61 72 4e 61 6d 65 29 3b 0a 2d 09 tr->varName);.-.
1380: 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a 29 20 ckfree((char *)
1390: 6c 69 6e 6b 50 74 72 29 3b 0a 2b 09 4c 69 6e 6b linkPtr);.+.Link
13a0: 46 72 65 65 28 6c 69 6e 6b 50 74 72 29 3b 0a 20 Free(linkPtr);.
13b0: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f .return TCL_ERRO
13c0: 52 3b 0a 20 20 20 20 20 7d 0a 20 20 20 20 20 63 R;. }. c
13d0: 6f 64 65 20 3d 20 54 63 6c 5f 54 72 61 63 65 56 ode = Tcl_TraceV
13e0: 61 72 28 69 6e 74 65 72 70 2c 20 76 61 72 4e 61 ar(interp, varNa
13f0: 6d 65 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f me, TCL_GLOBAL_O
1400: 4e 4c 59 7c 54 43 4c 5f 54 52 41 43 45 5f 52 45 NLY|TCL_TRACE_RE
1410: 41 44 53 0a 20 09 20 20 20 20 7c 54 43 4c 5f 54 ADS. . |TCL_T
1420: 52 41 43 45 5f 57 52 49 54 45 53 7c 54 43 4c 5f RACE_WRITES|TCL_
1430: 54 52 41 43 45 5f 55 4e 53 45 54 53 2c 20 4c 69 TRACE_UNSETS, Li
1440: 6e 6b 54 72 61 63 65 50 72 6f 63 2c 20 6c 69 6e nkTraceProc, lin
1450: 6b 50 74 72 29 3b 0a 20 20 20 20 20 69 66 20 28 kPtr);. if (
1460: 63 6f 64 65 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 code != TCL_OK)
1470: 7b 0a 20 09 54 63 6c 5f 44 65 63 72 52 65 66 43 {. .Tcl_DecrRefC
1480: 6f 75 6e 74 28 6c 69 6e 6b 50 74 72 2d 3e 76 61 ount(linkPtr->va
1490: 72 4e 61 6d 65 29 3b 0a 2d 09 63 6b 66 72 65 65 rName);.-.ckfree
14a0: 28 28 63 68 61 72 20 2a 29 20 6c 69 6e 6b 50 74 ((char *) linkPt
14b0: 72 29 3b 0a 2b 09 4c 69 6e 6b 46 72 65 65 28 6c r);.+.LinkFree(l
14c0: 69 6e 6b 50 74 72 29 3b 0a 2b 20 20 20 20 7d 0a inkPtr);.+ }.
14d0: 2b 20 20 20 20 72 65 74 75 72 6e 20 63 6f 64 65 + return code
14e0: 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b 20 2a 2d ;.+}.+..+/*.+ *-
14f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1530: 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20 54 63 -----.+ *.+ * Tc
1540: 6c 5f 4c 69 6e 6b 41 72 72 61 79 20 2d 2d 0a 2b l_LinkArray --.+
1550: 20 2a 0a 2b 20 2a 09 4c 69 6e 6b 20 61 20 43 20 *.+ *.Link a C
1560: 76 61 72 69 61 62 6c 65 20 61 72 72 61 79 20 74 variable array t
1570: 6f 20 61 20 54 63 6c 20 76 61 72 69 61 62 6c 65 o a Tcl variable
1580: 20 73 6f 20 74 68 61 74 20 63 68 61 6e 67 65 73 so that changes
1590: 20 74 6f 20 65 69 74 68 65 72 20 6f 6e 65 0a 2b to either one.+
15a0: 20 2a 09 63 61 75 73 65 73 20 74 68 65 20 6f 74 *.causes the ot
15b0: 68 65 72 20 74 6f 20 63 68 61 6e 67 65 2e 0a 2b her to change..+
15c0: 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a *.+ * Results:.
15d0: 2b 20 2a 09 54 68 65 20 72 65 74 75 72 6e 20 76 + *.The return v
15e0: 61 6c 75 65 20 69 73 20 54 43 4c 5f 4f 4b 20 69 alue is TCL_OK i
15f0: 66 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 6e f everything wen
1600: 74 20 77 65 6c 6c 20 6f 72 20 54 43 4c 5f 45 52 t well or TCL_ER
1610: 52 4f 52 20 69 66 20 61 6e 0a 2b 20 2a 09 65 72 ROR if an.+ *.er
1620: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 28 74 68 ror occurred (th
1630: 65 20 69 6e 74 65 72 70 27 73 20 72 65 73 75 6c e interp's resul
1640: 74 20 69 73 20 61 6c 73 6f 20 73 65 74 20 61 66 t is also set af
1650: 74 65 72 20 65 72 72 6f 72 73 29 2e 0a 2b 20 2a ter errors)..+ *
1660: 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 .+ * Side effect
1670: 73 3a 0a 2b 20 2a 09 54 68 65 20 76 61 6c 75 65 s:.+ *.The value
1680: 20 61 74 20 2a 61 64 64 72 20 69 73 20 6c 69 6e at *addr is lin
1690: 6b 65 64 20 74 6f 20 74 68 65 20 54 63 6c 20 76 ked to the Tcl v
16a0: 61 72 69 61 62 6c 65 20 22 76 61 72 4e 61 6d 65 ariable "varName
16b0: 22 2c 20 75 73 69 6e 67 0a 2b 20 2a 09 22 74 79 ", using.+ *."ty
16c0: 70 65 22 20 74 6f 20 63 6f 6e 76 65 72 74 20 62 pe" to convert b
16d0: 65 74 77 65 65 6e 20 73 74 72 69 6e 67 20 76 61 etween string va
16e0: 6c 75 65 73 20 66 6f 72 20 54 63 6c 20 61 6e 64 lues for Tcl and
16f0: 20 62 69 6e 61 72 79 20 76 61 6c 75 65 73 20 66 binary values f
1700: 6f 72 0a 2b 20 2a 09 2a 61 64 64 72 2e 0a 2b 20 or.+ *.*addr..+
1710: 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *.+ *-----------
1720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f -----------.+ */
1760: 0a 2b 0a 2b 69 6e 74 0a 2b 54 63 6c 5f 4c 69 6e .+.+int.+Tcl_Lin
1770: 6b 41 72 72 61 79 28 0a 2b 20 20 20 20 54 63 6c kArray(.+ Tcl
1780: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c _Interp *interp,
1790: 09 09 2f 2a 20 49 6e 74 65 72 70 72 65 74 65 72 ../* Interpreter
17a0: 20 69 6e 20 77 68 69 63 68 20 76 61 72 4e 61 6d in which varNam
17b0: 65 20 65 78 69 73 74 73 2e 20 2a 2f 0a 2b 20 20 e exists. */.+
17c0: 20 20 43 4f 4e 53 54 20 63 68 61 72 20 2a 76 61 CONST char *va
17d0: 72 4e 61 6d 65 2c 09 2f 2a 20 4e 61 6d 65 20 6f rName,./* Name o
17e0: 66 20 61 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 f a global varia
17f0: 62 6c 65 20 69 6e 20 69 6e 74 65 72 70 2e 20 2a ble in interp. *
1800: 2f 0a 2b 20 20 20 20 63 68 61 72 20 2a 61 64 64 /.+ char *add
1810: 72 2c 09 09 09 2f 2a 20 41 64 64 72 65 73 73 20 r,.../* Address
1820: 6f 66 20 61 20 43 20 76 61 72 69 61 62 6c 65 20 of a C variable
1830: 74 6f 20 62 65 20 6c 69 6e 6b 65 64 20 74 6f 0a to be linked to.
1840: 2b 09 09 09 09 20 2a 20 76 61 72 4e 61 6d 65 2e +.... * varName.
1850: 20 49 66 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 If NULL then th
1860: 65 20 6e 65 63 65 73 73 61 72 79 20 73 70 61 63 e necessary spac
1870: 65 0a 2b 09 09 09 09 20 2a 20 77 69 6c 6c 20 62 e.+.... * will b
1880: 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 e allocated and
1890: 72 65 74 75 72 6e 65 64 20 61 73 20 74 68 65 0a returned as the.
18a0: 2b 09 09 09 09 20 2a 20 69 6e 74 65 72 70 72 65 +.... * interpre
18b0: 74 65 72 20 72 65 73 75 6c 74 2e 20 2a 2f 0a 2b ter result. */.+
18c0: 20 20 20 20 69 6e 74 20 74 79 70 65 2c 09 09 09 int type,...
18d0: 2f 2a 20 54 79 70 65 20 6f 66 20 43 20 76 61 72 /* Type of C var
18e0: 69 61 62 6c 65 3a 20 54 43 4c 5f 4c 49 4e 4b 5f iable: TCL_LINK_
18f0: 49 4e 54 2c 20 65 74 63 2e 20 41 6c 73 6f 0a 2b INT, etc. Also.+
1900: 09 09 09 09 20 2a 20 6d 61 79 20 68 61 76 65 20 .... * may have
1910: 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e TCL_LINK_READ_ON
1920: 4c 59 20 61 6e 64 0a 2b 09 09 09 09 20 2a 20 54 LY and.+.... * T
1930: 43 4c 5f 4c 49 4e 4b 5f 41 4c 4c 4f 43 20 4f 52 CL_LINK_ALLOC OR
1940: 27 65 64 20 69 6e 2e 20 2a 2f 0a 2b 20 20 20 20 'ed in. */.+
1950: 69 6e 74 20 73 69 7a 65 29 09 09 09 2f 2a 20 53 int size).../* S
1960: 69 7a 65 20 6f 66 20 43 20 76 61 72 69 61 62 6c ize of C variabl
1970: 65 20 61 72 72 61 79 2c 20 3e 31 20 69 66 20 61 e array, >1 if a
1980: 72 72 61 79 20 2a 2f 0a 2b 7b 0a 2b 20 20 20 20 rray */.+{.+
1990: 54 63 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 3b Tcl_Obj *objPtr;
19a0: 0a 2b 20 20 20 20 4c 69 6e 6b 20 2a 6c 69 6e 6b .+ Link *link
19b0: 50 74 72 3b 0a 2b 20 20 20 20 69 6e 74 20 63 6f Ptr;.+ int co
19c0: 64 65 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 73 de;.+.+ if (s
19d0: 69 7a 65 20 3c 20 31 29 20 7b 0a 2b 09 54 63 6c ize < 1) {.+.Tcl
19e0: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 _SetResult(inter
19f0: 70 2c 20 22 77 72 6f 6e 67 20 61 72 72 61 79 20 p, "wrong array
1a00: 73 69 7a 65 20 67 69 76 65 6e 22 2c 20 54 43 4c size given", TCL
1a10: 5f 53 54 41 54 49 43 29 3b 0a 2b 09 72 65 74 75 _STATIC);.+.retu
1a20: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 rn TCL_ERROR;.+
1a30: 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 6c 69 6e 6b }.+.+ link
1a40: 50 74 72 20 3d 20 28 4c 69 6e 6b 20 2a 29 20 63 Ptr = (Link *) c
1a50: 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 4c 69 kalloc(sizeof(Li
1a60: 6e 6b 29 29 3b 0a 2b 20 20 20 20 6c 69 6e 6b 50 nk));.+ linkP
1a70: 74 72 2d 3e 74 79 70 65 20 3d 20 74 79 70 65 20 tr->type = type
1a80: 26 20 7e 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 & ~TCL_LINK_READ
1a90: 5f 4f 4e 4c 59 3b 0a 2b 20 20 20 20 69 66 20 28 _ONLY;.+ if (
1aa0: 74 79 70 65 20 26 20 54 43 4c 5f 4c 49 4e 4b 5f type & TCL_LINK_
1ab0: 52 45 41 44 5f 4f 4e 4c 59 29 20 7b 0a 2b 09 6c READ_ONLY) {.+.l
1ac0: 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 3d 20 inkPtr->flags =
1ad0: 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 3b 0a LINK_READ_ONLY;.
1ae0: 2b 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 + } else {.+.
1af0: 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 3d linkPtr->flags =
1b00: 20 30 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 0;.+ }.+
1b10: 73 77 69 74 63 68 20 28 6c 69 6e 6b 50 74 72 2d switch (linkPtr-
1b20: 3e 74 79 70 65 29 20 7b 0a 2b 20 20 20 20 63 61 >type) {.+ ca
1b30: 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 3a se TCL_LINK_INT:
1b40: 0a 2b 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c .+ case TCL_L
1b50: 49 4e 4b 5f 42 4f 4f 4c 45 41 4e 3a 0a 2b 09 6c INK_BOOLEAN:.+.l
1b60: 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 20 3d 20 inkPtr->bytes =
1b70: 73 69 7a 65 20 2a 20 73 69 7a 65 6f 66 28 69 6e size * sizeof(in
1b80: 74 29 3b 0a 2b 09 62 72 65 61 6b 3b 0a 2b 20 20 t);.+.break;.+
1b90: 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f case TCL_LINK_
1ba0: 44 4f 55 42 4c 45 3a 0a 2b 09 6c 69 6e 6b 50 74 DOUBLE:.+.linkPt
1bb0: 72 2d 3e 62 79 74 65 73 20 3d 20 73 69 7a 65 20 r->bytes = size
1bc0: 2a 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 * sizeof(double)
1bd0: 3b 0a 2b 09 62 72 65 61 6b 3b 0a 2b 20 20 20 20 ;.+.break;.+
1be0: 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 57 49 case TCL_LINK_WI
1bf0: 44 45 5f 49 4e 54 3a 0a 2b 09 6c 69 6e 6b 50 74 DE_INT:.+.linkPt
1c00: 72 2d 3e 62 79 74 65 73 20 3d 20 73 69 7a 65 20 r->bytes = size
1c10: 2a 20 73 69 7a 65 6f 66 28 54 63 6c 5f 57 69 64 * sizeof(Tcl_Wid
1c20: 65 49 6e 74 29 3b 0a 2b 09 62 72 65 61 6b 3b 0a eInt);.+.break;.
1c30: 2b 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 + case TCL_LI
1c40: 4e 4b 5f 57 49 44 45 5f 55 49 4e 54 3a 0a 2b 09 NK_WIDE_UINT:.+.
1c50: 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 20 3d linkPtr->bytes =
1c60: 20 73 69 7a 65 20 2a 20 73 69 7a 65 6f 66 28 54 size * sizeof(T
1c70: 63 6c 5f 57 69 64 65 55 49 6e 74 29 3b 0a 2b 09 cl_WideUInt);.+.
1c80: 62 72 65 61 6b 3b 0a 2b 20 20 20 20 63 61 73 65 break;.+ case
1c90: 20 54 43 4c 5f 4c 49 4e 4b 5f 43 48 41 52 3a 0a TCL_LINK_CHAR:.
1ca0: 2b 09 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 +.linkPtr->bytes
1cb0: 20 3d 20 73 69 7a 65 20 2a 20 73 69 7a 65 6f 66 = size * sizeof
1cc0: 28 63 68 61 72 29 3b 0a 2b 09 62 72 65 61 6b 3b (char);.+.break;
1cd0: 0a 2b 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c .+ case TCL_L
1ce0: 49 4e 4b 5f 55 43 48 41 52 3a 0a 2b 09 6c 69 6e INK_UCHAR:.+.lin
1cf0: 6b 50 74 72 2d 3e 62 79 74 65 73 20 3d 20 73 69 kPtr->bytes = si
1d00: 7a 65 20 2a 20 73 69 7a 65 6f 66 28 75 6e 73 69 ze * sizeof(unsi
1d10: 67 6e 65 64 20 63 68 61 72 29 3b 0a 2b 09 62 72 gned char);.+.br
1d20: 65 61 6b 3b 0a 2b 20 20 20 20 63 61 73 65 20 54 eak;.+ case T
1d30: 43 4c 5f 4c 49 4e 4b 5f 53 48 4f 52 54 3a 0a 2b CL_LINK_SHORT:.+
1d40: 09 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 20 .linkPtr->bytes
1d50: 3d 20 73 69 7a 65 20 2a 20 73 69 7a 65 6f 66 28 = size * sizeof(
1d60: 73 68 6f 72 74 29 3b 0a 2b 09 62 72 65 61 6b 3b short);.+.break;
1d70: 0a 2b 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c .+ case TCL_L
1d80: 49 4e 4b 5f 55 53 48 4f 52 54 3a 0a 2b 09 6c 69 INK_USHORT:.+.li
1d90: 6e 6b 50 74 72 2d 3e 62 79 74 65 73 20 3d 20 73 nkPtr->bytes = s
1da0: 69 7a 65 20 2a 20 73 69 7a 65 6f 66 28 75 6e 73 ize * sizeof(uns
1db0: 69 67 6e 65 64 20 73 68 6f 72 74 29 3b 0a 2b 09 igned short);.+.
1dc0: 62 72 65 61 6b 3b 0a 2b 20 20 20 20 63 61 73 65 break;.+ case
1dd0: 20 54 43 4c 5f 4c 49 4e 4b 5f 55 49 4e 54 3a 0a TCL_LINK_UINT:.
1de0: 2b 09 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 +.linkPtr->bytes
1df0: 20 3d 20 73 69 7a 65 20 2a 20 73 69 7a 65 6f 66 = size * sizeof
1e00: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a (unsigned int);.
1e10: 2b 09 62 72 65 61 6b 3b 0a 2b 20 20 20 20 63 61 +.break;.+ ca
1e20: 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 4c 4f 4e 47 se TCL_LINK_LONG
1e30: 3a 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 :.+.linkPtr->byt
1e40: 65 73 20 3d 20 73 69 7a 65 20 2a 20 73 69 7a 65 es = size * size
1e50: 6f 66 28 6c 6f 6e 67 29 3b 0a 2b 09 62 72 65 61 of(long);.+.brea
1e60: 6b 3b 0a 2b 20 20 20 20 63 61 73 65 20 54 43 4c k;.+ case TCL
1e70: 5f 4c 49 4e 4b 5f 55 4c 4f 4e 47 3a 0a 2b 09 6c _LINK_ULONG:.+.l
1e80: 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 20 3d 20 inkPtr->bytes =
1e90: 73 69 7a 65 20 2a 20 73 69 7a 65 6f 66 28 75 6e size * sizeof(un
1ea0: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 3b 0a 2b 09 signed long);.+.
1eb0: 62 72 65 61 6b 3b 0a 2b 20 20 20 20 63 61 73 65 break;.+ case
1ec0: 20 54 43 4c 5f 4c 49 4e 4b 5f 46 4c 4f 41 54 3a TCL_LINK_FLOAT:
1ed0: 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 .+.linkPtr->byte
1ee0: 73 20 3d 20 73 69 7a 65 20 2a 20 73 69 7a 65 6f s = size * sizeo
1ef0: 66 28 66 6c 6f 61 74 29 3b 0a 2b 09 62 72 65 61 f(float);.+.brea
1f00: 6b 3b 0a 2b 20 20 20 20 63 61 73 65 20 54 43 4c k;.+ case TCL
1f10: 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 3a 0a 2b 09 _LINK_STRING:.+.
1f20: 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 20 3d linkPtr->bytes =
1f30: 20 73 69 7a 65 20 2a 20 73 69 7a 65 6f 66 28 63 size * sizeof(c
1f40: 68 61 72 29 3b 0a 2b 09 73 69 7a 65 20 3d 20 31 har);.+.size = 1
1f50: 3b 2f 2a 20 74 68 69 73 20 69 73 20 61 20 76 61 ;/* this is a va
1f60: 72 69 61 62 6c 65 20 6c 65 6e 67 74 68 20 73 74 riable length st
1f70: 72 69 6e 67 2c 20 6e 6f 20 6e 65 65 64 20 74 6f ring, no need to
1f80: 20 63 68 65 63 6b 20 6c 61 73 74 20 76 61 6c 75 check last valu
1f90: 65 20 2a 2f 0a 2b 09 2f 2a 20 69 66 20 6e 6f 20 e */.+./* if no
1fa0: 61 64 64 72 65 73 73 20 69 73 20 67 69 76 65 6e address is given
1fb0: 20 63 72 65 61 74 65 20 6f 6e 65 20 61 6e 64 20 create one and
1fc0: 75 73 65 20 61 73 20 61 64 64 72 65 73 73 20 74 use as address t
1fd0: 68 65 0a 2b 20 20 20 20 20 20 20 20 20 2a 20 6e he.+ * n
1fe0: 6f 74 20 6e 65 65 64 65 64 20 6c 69 6e 6b 50 74 ot needed linkPt
1ff0: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 20 2a 2f 0a r->lastValue */.
2000: 2b 09 69 66 20 28 61 64 64 72 20 3d 3d 20 4e 55 +.if (addr == NU
2010: 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 6c 69 6e 6b LL) {.+. link
2020: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 Ptr->lastValue.p
2030: 63 20 3d 20 63 6b 61 6c 6c 6f 63 28 6c 69 6e 6b c = ckalloc(link
2040: 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 20 Ptr->bytes);.+.
2050: 20 20 20 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 linkPtr->flag
2060: 73 20 7c 3d 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f s |= LINK_ALLOC_
2070: 4c 41 53 54 3b 0a 2b 09 20 20 20 20 61 64 64 72 LAST;.+. addr
2080: 20 3d 20 28 63 68 61 72 20 2a 29 26 6c 69 6e 6b = (char *)&link
2090: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 Ptr->lastValue.p
20a0: 63 3b 0a 2b 09 7d 0a 2b 09 62 72 65 61 6b 3b 0a c;.+.}.+.break;.
20b0: 2b 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 + case TCL_LI
20c0: 4e 4b 5f 43 48 41 52 53 3a 0a 2b 20 20 20 20 63 NK_CHARS:.+ c
20d0: 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 42 49 4e ase TCL_LINK_BIN
20e0: 41 52 59 3a 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e ARY:.+.linkPtr->
20f0: 62 79 74 65 73 20 3d 20 73 69 7a 65 20 2a 20 73 bytes = size * s
2100: 69 7a 65 6f 66 28 63 68 61 72 29 3b 0a 2b 09 62 izeof(char);.+.b
2110: 72 65 61 6b 3b 0a 2b 20 20 20 20 64 65 66 61 75 reak;.+ defau
2120: 6c 74 3a 0a 2b 09 4c 69 6e 6b 46 72 65 65 28 6c lt:.+.LinkFree(l
2130: 69 6e 6b 50 74 72 29 3b 0a 2b 09 54 63 6c 5f 53 inkPtr);.+.Tcl_S
2140: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c etResult(interp,
2150: 20 22 62 61 64 20 6c 69 6e 6b 65 64 20 61 72 72 "bad linked arr
2160: 61 79 20 76 61 72 69 61 62 6c 65 20 74 79 70 65 ay variable type
2170: 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a ", TCL_STATIC);.
2180: 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 +.return TCL_ERR
2190: 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 OR;.+ }.+
21a0: 2f 2a 20 61 6c 6c 6f 63 61 74 65 20 43 20 76 61 /* allocate C va
21b0: 72 69 61 62 6c 65 20 73 70 61 63 65 20 69 6e 20 riable space in
21c0: 63 61 73 65 20 6e 6f 20 61 64 64 72 65 73 73 20 case no address
21d0: 69 73 20 67 69 76 65 6e 20 2a 2f 0a 2b 20 20 20 is given */.+
21e0: 20 69 66 20 28 61 64 64 72 3d 3d 4e 55 4c 4c 29 if (addr==NULL)
21f0: 20 7b 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e 61 64 {.+.linkPtr->ad
2200: 64 72 20 3d 20 63 6b 61 6c 6c 6f 63 28 6c 69 6e dr = ckalloc(lin
2210: 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 kPtr->bytes);.+.
2220: 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 7c linkPtr->flags |
2230: 3d 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 41 44 44 = LINK_ALLOC_ADD
2240: 52 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 7b R;.+ } else {
2250: 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 .+.linkPtr->addr
2260: 20 3d 20 61 64 64 72 3b 0a 2b 20 20 20 20 7d 0a = addr;.+ }.
2270: 2b 20 20 20 20 2f 2a 20 69 66 20 6e 65 63 65 73 + /* if neces
2280: 73 61 72 79 20 63 72 65 61 74 65 20 73 70 61 63 sary create spac
2290: 65 20 66 6f 72 20 6c 61 73 74 20 75 73 65 64 20 e for last used
22a0: 76 61 6c 75 65 20 2a 2f 0a 2b 20 20 20 20 69 66 value */.+ if
22b0: 20 28 73 69 7a 65 20 3e 20 31 29 20 7b 0a 2b 09 (size > 1) {.+.
22c0: 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c linkPtr->lastVal
22d0: 75 65 2e 70 63 20 3d 20 63 6b 61 6c 6c 6f 63 28 ue.pc = ckalloc(
22e0: 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b linkPtr->bytes);
22f0: 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 .+.linkPtr->flag
2300: 73 20 7c 3d 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f s |= LINK_ALLOC_
2310: 4c 41 53 54 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 LAST;.+ }.+
2320: 20 20 2f 2a 20 73 65 74 20 63 6f 6d 6d 6f 6e 20 /* set common
2330: 73 74 72 75 63 74 75 72 65 20 76 61 6c 75 65 73 structure values
2340: 20 2a 2f 0a 2b 20 20 20 20 6c 69 6e 6b 50 74 72 */.+ linkPtr
2350: 2d 3e 69 6e 74 65 72 70 20 3d 20 69 6e 74 65 72 ->interp = inter
2360: 70 3b 0a 2b 20 20 20 20 6c 69 6e 6b 50 74 72 2d p;.+ linkPtr-
2370: 3e 76 61 72 4e 61 6d 65 20 3d 20 54 63 6c 5f 4e >varName = Tcl_N
2380: 65 77 53 74 72 69 6e 67 4f 62 6a 28 76 61 72 4e ewStringObj(varN
2390: 61 6d 65 2c 20 2d 31 29 3b 0a 2b 20 20 20 20 54 ame, -1);.+ T
23a0: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 cl_IncrRefCount(
23b0: 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 linkPtr->varName
23c0: 29 3b 0a 2b 20 20 20 20 6f 62 6a 50 74 72 20 3d );.+ objPtr =
23d0: 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e 6b 50 74 ObjValue(linkPt
23e0: 72 29 3b 0a 2b 20 20 20 20 69 66 20 28 54 63 6c r);.+ if (Tcl
23f0: 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 _ObjSetVar2(inte
2400: 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 rp, linkPtr->var
2410: 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 6f 62 6a 50 Name, NULL, objP
2420: 74 72 2c 0a 2b 09 20 20 20 20 54 43 4c 5f 47 4c tr,.+. TCL_GL
2430: 4f 42 41 4c 5f 4f 4e 4c 59 7c 54 43 4c 5f 4c 45 OBAL_ONLY|TCL_LE
2440: 41 56 45 5f 45 52 52 5f 4d 53 47 29 20 3d 3d 20 AVE_ERR_MSG) ==
2450: 4e 55 4c 4c 29 20 7b 0a 2b 09 54 63 6c 5f 44 65 NULL) {.+.Tcl_De
2460: 63 72 52 65 66 43 6f 75 6e 74 28 6c 69 6e 6b 50 crRefCount(linkP
2470: 74 72 2d 3e 76 61 72 4e 61 6d 65 29 3b 0a 2b 09 tr->varName);.+.
2480: 4c 69 6e 6b 46 72 65 65 28 6c 69 6e 6b 50 74 72 LinkFree(linkPtr
2490: 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f );.+.return TCL_
24a0: 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 ERROR;.+ }.+
24b0: 20 20 20 63 6f 64 65 20 3d 20 54 63 6c 5f 54 72 code = Tcl_Tr
24c0: 61 63 65 56 61 72 28 69 6e 74 65 72 70 2c 20 76 aceVar(interp, v
24d0: 61 72 4e 61 6d 65 2c 20 54 43 4c 5f 47 4c 4f 42 arName, TCL_GLOB
24e0: 41 4c 5f 4f 4e 4c 59 7c 54 43 4c 5f 54 52 41 43 AL_ONLY|TCL_TRAC
24f0: 45 5f 52 45 41 44 53 0a 2b 09 20 20 20 20 7c 54 E_READS.+. |T
2500: 43 4c 5f 54 52 41 43 45 5f 57 52 49 54 45 53 7c CL_TRACE_WRITES|
2510: 54 43 4c 5f 54 52 41 43 45 5f 55 4e 53 45 54 53 TCL_TRACE_UNSETS
2520: 2c 20 4c 69 6e 6b 54 72 61 63 65 50 72 6f 63 2c , LinkTraceProc,
2530: 0a 2b 09 20 20 20 20 28 43 6c 69 65 6e 74 44 61 .+. (ClientDa
2540: 74 61 29 20 6c 69 6e 6b 50 74 72 29 3b 0a 2b 20 ta) linkPtr);.+
2550: 20 20 20 69 66 20 28 63 6f 64 65 20 21 3d 20 54 if (code != T
2560: 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 54 63 6c 5f 44 CL_OK) {.+.Tcl_D
2570: 65 63 72 52 65 66 43 6f 75 6e 74 28 6c 69 6e 6b ecrRefCount(link
2580: 50 74 72 2d 3e 76 61 72 4e 61 6d 65 29 3b 0a 2b Ptr->varName);.+
2590: 09 4c 69 6e 6b 46 72 65 65 28 6c 69 6e 6b 50 74 .LinkFree(linkPt
25a0: 72 29 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 r);.+ } else
25b0: 7b 0a 2b 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 {.+.Tcl_SetObjRe
25c0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 54 63 6c 5f sult(interp,Tcl_
25d0: 4e 65 77 49 6e 74 4f 62 6a 28 28 69 6e 74 29 6c NewIntObj((int)l
25e0: 69 6e 6b 50 74 72 2d 3e 61 64 64 72 29 29 3b 0a inkPtr->addr));.
25f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 72 65 74 75 }. retu
2600: 72 6e 20 63 6f 64 65 3b 0a 20 7d 0a 40 40 20 2d rn code;. }.@@ -
2610: 31 37 34 2c 37 20 2b 33 33 37 2c 37 20 40 40 0a 174,7 +337,7 @@.
2620: 20 09 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c . TCL_GLOBAL
2630: 5f 4f 4e 4c 59 7c 54 43 4c 5f 54 52 41 43 45 5f _ONLY|TCL_TRACE_
2640: 52 45 41 44 53 7c 54 43 4c 5f 54 52 41 43 45 5f READS|TCL_TRACE_
2650: 57 52 49 54 45 53 7c 54 43 4c 5f 54 52 41 43 45 WRITES|TCL_TRACE
2660: 5f 55 4e 53 45 54 53 2c 0a 20 09 20 20 20 20 4c _UNSETS,. . L
2670: 69 6e 6b 54 72 61 63 65 50 72 6f 63 2c 20 6c 69 inkTraceProc, li
2680: 6e 6b 50 74 72 29 3b 0a 20 20 20 20 20 54 63 6c nkPtr);. Tcl
2690: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 6c 69 _DecrRefCount(li
26a0: 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 29 3b nkPtr->varName);
26b0: 0a 2d 20 20 20 20 63 6b 66 72 65 65 28 28 63 68 .- ckfree((ch
26c0: 61 72 20 2a 29 20 6c 69 6e 6b 50 74 72 29 3b 0a ar *) linkPtr);.
26d0: 2b 20 20 20 20 4c 69 6e 6b 46 72 65 65 28 6c 69 + LinkFree(li
26e0: 6e 6b 50 74 72 29 3b 0a 20 7d 0a 20 0c 0a 20 2f nkPtr);. }. .. /
26f0: 2a 0a 40 40 20 2d 32 35 39 2c 36 20 2b 34 32 32 *.@@ -259,6 +422
2700: 2c 39 20 40 40 0a 20 20 20 20 20 69 6e 74 20 76 ,9 @@. int v
2710: 61 6c 75 65 49 6e 74 3b 0a 20 20 20 20 20 54 63 alueInt;. Tc
2720: 6c 5f 57 69 64 65 49 6e 74 20 76 61 6c 75 65 57 l_WideInt valueW
2730: 69 64 65 3b 0a 20 20 20 20 20 64 6f 75 62 6c 65 ide;. double
2740: 20 76 61 6c 75 65 44 6f 75 62 6c 65 3b 0a 2b 20 valueDouble;.+
2750: 20 20 20 69 6e 74 20 6f 62 6a 63 3b 0a 2b 20 20 int objc;.+
2760: 20 20 54 63 6c 5f 4f 62 6a 20 2a 2a 6f 62 6a 76 Tcl_Obj **objv
2770: 3b 0a 2b 20 20 20 20 69 6e 74 20 69 3b 0a 20 0a ;.+ int i;. .
2780: 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20 /*. *
2790: 49 66 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 If the variable
27a0: 69 73 20 62 65 69 6e 67 20 75 6e 73 65 74 2c 20 is being unset,
27b0: 74 68 65 6e 20 6a 75 73 74 20 72 65 2d 63 72 65 then just re-cre
27c0: 61 74 65 20 69 74 20 28 77 69 74 68 20 61 20 74 ate it (with a t
27d0: 72 61 63 65 29 0a 40 40 20 2d 32 36 38 2c 37 20 race).@@ -268,7
27e0: 2b 34 33 34 2c 37 20 40 40 0a 20 20 20 20 20 69 +434,7 @@. i
27f0: 66 20 28 66 6c 61 67 73 20 26 20 54 43 4c 5f 54 f (flags & TCL_T
2800: 52 41 43 45 5f 55 4e 53 45 54 53 29 20 7b 0a 20 RACE_UNSETS) {.
2810: 09 69 66 20 28 54 63 6c 5f 49 6e 74 65 72 70 44 .if (Tcl_InterpD
2820: 65 6c 65 74 65 64 28 69 6e 74 65 72 70 29 29 20 eleted(interp))
2830: 7b 0a 20 09 20 20 20 20 54 63 6c 5f 44 65 63 72 {. . Tcl_Decr
2840: 52 65 66 43 6f 75 6e 74 28 6c 69 6e 6b 50 74 72 RefCount(linkPtr
2850: 2d 3e 76 61 72 4e 61 6d 65 29 3b 0a 2d 09 20 20 ->varName);.-.
2860: 20 20 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a ckfree((char *
2870: 29 20 6c 69 6e 6b 50 74 72 29 3b 0a 2b 09 20 20 ) linkPtr);.+.
2880: 20 20 4c 69 6e 6b 46 72 65 65 28 6c 69 6e 6b 50 LinkFree(linkP
2890: 74 72 29 3b 0a 20 09 7d 20 65 6c 73 65 20 69 66 tr);. .} else if
28a0: 20 28 66 6c 61 67 73 20 26 20 54 43 4c 5f 54 52 (flags & TCL_TR
28b0: 41 43 45 5f 44 45 53 54 52 4f 59 45 44 29 20 7b ACE_DESTROYED) {
28c0: 0a 20 09 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 . . Tcl_ObjSe
28d0: 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6c 69 tVar2(interp, li
28e0: 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 nkPtr->varName,
28f0: 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c NULL, ObjValue(l
2900: 69 6e 6b 50 74 72 29 2c 0a 20 09 09 20 20 20 20 inkPtr),. ..
2910: 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 TCL_GLOBAL_ONLY)
2920: 3b 0a 40 40 20 2d 32 39 35 2c 36 20 2b 34 36 31 ;.@@ -295,6 +461
2930: 2c 31 31 20 40 40 0a 20 20 20 20 20 20 2a 2f 0a ,11 @@. */.
2940: 20 0a 20 20 20 20 20 69 66 20 28 66 6c 61 67 73 . if (flags
2950: 20 26 20 54 43 4c 5f 54 52 41 43 45 5f 52 45 41 & TCL_TRACE_REA
2960: 44 53 29 20 7b 0a 2b 09 2f 2a 20 76 61 72 69 61 DS) {.+./* varia
2970: 62 6c 65 20 61 72 72 61 79 73 20 2a 2f 0a 2b 09 ble arrays */.+.
2980: 69 66 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 if (linkPtr->fla
2990: 67 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f gs & LINK_ALLOC_
29a0: 4c 41 53 54 29 20 7b 0a 2b 09 20 20 20 20 63 68 LAST) {.+. ch
29b0: 61 6e 67 65 64 20 3d 20 6d 65 6d 63 6d 70 28 6c anged = memcmp(l
29c0: 69 6e 6b 50 74 72 2d 3e 61 64 64 72 2c 6c 69 6e inkPtr->addr,lin
29d0: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e kPtr->lastValue.
29e0: 70 63 2c 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 pc,linkPtr->byte
29f0: 73 29 3b 0a 2b 09 2f 2a 20 73 69 6e 67 6c 65 20 s);.+./* single
2a00: 76 61 72 69 61 62 6c 65 73 20 2a 2f 0a 2b 09 7d variables */.+.}
2a10: 20 65 6c 73 65 20 7b 0a 20 09 73 77 69 74 63 68 else {. .switch
2a20: 20 28 6c 69 6e 6b 50 74 72 2d 3e 74 79 70 65 29 (linkPtr->type)
2a30: 20 7b 0a 20 09 63 61 73 65 20 54 43 4c 5f 4c 49 {. .case TCL_LI
2a40: 4e 4b 5f 49 4e 54 3a 0a 20 09 63 61 73 65 20 54 NK_INT:. .case T
2a50: 43 4c 5f 4c 49 4e 4b 5f 42 4f 4f 4c 45 41 4e 3a CL_LINK_BOOLEAN:
2a60: 0a 40 40 20 2d 33 33 34 2c 31 30 20 2b 35 30 35 .@@ -334,10 +505
2a70: 2c 31 33 20 40 40 0a 20 09 20 20 20 20 63 68 61 ,13 @@. . cha
2a80: 6e 67 65 64 20 3d 20 28 4c 69 6e 6b 65 64 56 61 nged = (LinkedVa
2a90: 72 28 66 6c 6f 61 74 29 20 21 3d 20 6c 69 6e 6b r(float) != link
2aa0: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 66 Ptr->lastValue.f
2ab0: 29 3b 0a 20 09 20 20 20 20 62 72 65 61 6b 3b 0a );. . break;.
2ac0: 20 09 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f .case TCL_LINK_
2ad0: 53 54 52 49 4e 47 3a 0a 2b 09 63 61 73 65 20 54 STRING:.+.case T
2ae0: 43 4c 5f 4c 49 4e 4b 5f 43 48 41 52 53 3a 0a 2b CL_LINK_CHARS:.+
2af0: 09 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 42 .case TCL_LINK_B
2b00: 49 4e 41 52 59 3a 0a 20 09 20 20 20 20 63 68 61 INARY:. . cha
2b10: 6e 67 65 64 20 3d 20 31 3b 0a 20 09 20 20 20 20 nged = 1;. .
2b20: 62 72 65 61 6b 3b 0a 20 09 64 65 66 61 75 6c 74 break;. .default
2b30: 3a 0a 2d 09 20 20 20 20 72 65 74 75 72 6e 20 22 :.-. return "
2b40: 69 6e 74 65 72 6e 61 6c 20 65 72 72 6f 72 3a 20 internal error:
2b50: 62 61 64 20 6c 69 6e 6b 65 64 20 76 61 72 69 61 bad linked varia
2b60: 62 6c 65 20 74 79 70 65 22 3b 0a 2b 09 20 20 20 ble type";.+.
2b70: 20 63 68 61 6e 67 65 64 20 3d 20 30 3b 0a 2b 09 changed = 0;.+.
2b80: 7d 0a 20 09 7d 0a 20 09 69 66 20 28 63 68 61 6e }. .}. .if (chan
2b90: 67 65 64 29 20 7b 0a 20 09 20 20 20 20 54 63 6c ged) {. . Tcl
2ba0: 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 _ObjSetVar2(inte
2bb0: 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 rp, linkPtr->var
2bc0: 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 Name, NULL, ObjV
2bd0: 61 6c 75 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 40 alue(linkPtr),.@
2be0: 40 20 2d 33 34 39 2c 37 20 2b 35 32 33 2c 37 20 @ -349,7 +523,7
2bf0: 40 40 0a 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 @@. /*.
2c00: 20 2a 20 46 6f 72 20 77 72 69 74 65 73 2c 20 66 * For writes, f
2c10: 69 72 73 74 20 6d 61 6b 65 20 73 75 72 65 20 74 irst make sure t
2c20: 68 61 74 20 74 68 65 20 76 61 72 69 61 62 6c 65 hat the variable
2c30: 20 69 73 20 77 72 69 74 61 62 6c 65 2e 20 54 68 is writable. Th
2c40: 65 6e 20 63 6f 6e 76 65 72 74 0a 20 20 20 20 20 en convert.
2c50: 20 2a 20 74 68 65 20 54 63 6c 20 76 61 6c 75 65 * the Tcl value
2c60: 20 74 6f 20 43 20 69 66 20 70 6f 73 73 69 62 6c to C if possibl
2c70: 65 2e 20 49 66 20 74 68 65 20 76 61 72 69 61 62 e. If the variab
2c80: 6c 65 20 69 73 6e 27 74 20 77 72 69 74 61 62 6c le isn't writabl
2c90: 65 20 6f 72 20 63 61 6e 27 74 0a 2d 20 20 20 20 e or can't.-
2ca0: 20 2a 20 62 65 20 63 6f 6e 76 65 72 74 65 64 2c * be converted,
2cb0: 20 74 68 65 6e 20 72 65 73 74 6f 72 65 20 74 68 then restore th
2cc0: 65 20 76 61 72 61 69 62 6c 65 27 73 20 6f 6c 64 e varaible's old
2cd0: 20 76 61 6c 75 65 20 61 6e 64 20 72 65 74 75 72 value and retur
2ce0: 6e 20 61 6e 0a 2b 20 20 20 20 20 2a 20 62 65 20 n an.+ * be
2cf0: 63 6f 6e 76 65 72 74 65 64 2c 20 74 68 65 6e 20 converted, then
2d00: 72 65 73 74 6f 72 65 20 74 68 65 20 76 61 72 69 restore the vari
2d10: 61 62 6c 65 27 73 20 6f 6c 64 20 76 61 6c 75 65 able's old value
2d20: 20 61 6e 64 20 72 65 74 75 72 6e 20 61 6e 0a 20 and return an.
2d30: 20 20 20 20 20 2a 20 65 72 72 6f 72 2e 20 41 6e * error. An
2d40: 6f 74 68 65 72 20 74 72 69 63 6b 79 20 74 68 69 other tricky thi
2d50: 6e 67 3a 20 77 65 20 68 61 76 65 20 74 6f 20 73 ng: we have to s
2d60: 61 76 65 20 61 6e 64 20 72 65 73 74 6f 72 65 20 ave and restore
2d70: 74 68 65 20 69 6e 74 65 72 70 27 73 0a 20 20 20 the interp's.
2d80: 20 20 20 2a 20 72 65 73 75 6c 74 2c 20 73 69 6e * result, sin
2d90: 63 65 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 ce the variable
2da0: 61 63 63 65 73 73 20 63 6f 75 6c 64 20 6f 63 63 access could occ
2db0: 75 72 20 77 68 65 6e 20 74 68 65 20 72 65 73 75 ur when the resu
2dc0: 6c 74 20 68 61 73 20 62 65 65 6e 0a 20 20 20 20 lt has been.
2dd0: 20 20 2a 20 70 61 72 74 69 61 6c 6c 79 20 73 65 * partially se
2de0: 74 2e 0a 40 40 20 2d 33 37 31 2c 36 20 2b 35 34 t..@@ -371,6 +54
2df0: 35 2c 32 31 20 40 40 0a 20 0a 20 20 20 20 20 73 5,21 @@. . s
2e00: 77 69 74 63 68 20 28 6c 69 6e 6b 50 74 72 2d 3e witch (linkPtr->
2e10: 74 79 70 65 29 20 7b 0a 20 20 20 20 20 63 61 73 type) {. cas
2e20: 65 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 3a 0a e TCL_LINK_INT:.
2e30: 2b 09 69 66 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 +.if (linkPtr->f
2e40: 6c 61 67 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f lags & LINK_ALLO
2e50: 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 20 20 20 C_LAST) {.+.
2e60: 69 66 20 28 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 if (Tcl_ListObjG
2e70: 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74 65 72 etElements(inter
2e80: 70 2c 76 61 6c 75 65 4f 62 6a 2c 26 6f 62 6a 63 p,valueObj,&objc
2e90: 2c 26 6f 62 6a 76 29 3d 3d 54 43 4c 5f 45 52 52 ,&objv)==TCL_ERR
2ea0: 4f 52 0a 2b 09 09 7c 7c 20 6f 62 6a 63 20 21 3d OR.+..|| objc !=
2eb0: 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 2f linkPtr->bytes/
2ec0: 73 69 7a 65 6f 66 28 69 6e 74 29 29 20 7b 0a 2b sizeof(int)) {.+
2ed0: 09 09 72 65 74 75 72 6e 20 22 77 72 6f 6e 67 20 ..return "wrong
2ee0: 64 69 6d 65 6e 73 69 6f 6e 22 3b 0a 2b 09 20 20 dimension";.+.
2ef0: 20 20 7d 0a 2b 09 20 20 20 20 66 6f 72 20 28 69 }.+. for (i
2f00: 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 69 2b =0; i < objc; i+
2f10: 2b 29 20 7b 0a 2b 09 09 69 66 20 28 54 63 6c 5f +) {.+..if (Tcl_
2f20: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55 GetIntFromObj(NU
2f30: 4c 4c 2c 6f 62 6a 76 5b 69 5d 2c 26 6c 69 6e 6b LL,objv[i],&link
2f40: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 Ptr->lastValue.p
2f50: 69 5b 69 5d 29 21 3d 20 54 43 4c 5f 4f 4b 29 20 i[i])!= TCL_OK)
2f60: 7b 0a 2b 09 20 20 20 20 20 20 20 20 54 63 6c 5f {.+. Tcl_
2f70: 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 ObjSetVar2(inter
2f80: 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e p, linkPtr->varN
2f90: 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 ame, NULL, ObjVa
2fa0: 6c 75 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b 09 lue(linkPtr),.+.
2fb0: 09 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f . TCL_GLOBAL_
2fc0: 4f 4e 4c 59 29 3b 0a 2b 09 20 20 20 20 20 20 20 ONLY);.+.
2fd0: 20 20 20 20 20 72 65 74 75 72 6e 20 22 76 61 72 return "var
2fe0: 69 61 62 6c 65 20 61 72 72 61 79 20 6d 75 73 74 iable array must
2ff0: 20 68 61 76 65 20 69 6e 74 65 67 65 72 20 76 61 have integer va
3000: 6c 75 65 22 3b 0a 2b 09 09 7d 0a 2b 09 20 20 20 lue";.+..}.+.
3010: 20 7d 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 }.+. memcpy(
3020: 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 2c 6c 69 linkPtr->addr,li
3030: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 nkPtr->lastValue
3040: 2e 70 63 2c 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 .pc,linkPtr->byt
3050: 65 73 29 3b 0a 2b 09 20 20 20 20 62 72 65 61 6b es);.+. break
3060: 3b 0a 2b 09 7d 0a 20 09 69 66 20 28 54 63 6c 5f ;.+.}. .if (Tcl_
3070: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55 GetIntFromObj(NU
3080: 4c 4c 2c 20 76 61 6c 75 65 4f 62 6a 2c 20 26 6c LL, valueObj, &l
3090: 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 inkPtr->lastValu
30a0: 65 2e 69 29 0a 20 09 09 21 3d 20 54 43 4c 5f 4f e.i). ..!= TCL_O
30b0: 4b 29 20 7b 0a 20 09 20 20 20 20 54 63 6c 5f 4f K) {. . Tcl_O
30c0: 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 bjSetVar2(interp
30d0: 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 , linkPtr->varNa
30e0: 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c me, NULL, ObjVal
30f0: 75 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 40 40 20 ue(linkPtr),.@@
3100: 2d 33 38 31 2c 31 36 20 2b 35 37 30 2c 35 33 20 -381,16 +570,53
3110: 40 40 0a 20 09 62 72 65 61 6b 3b 0a 20 0a 20 20 @@. .break;. .
3120: 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b case TCL_LINK
3130: 5f 57 49 44 45 5f 49 4e 54 3a 0a 2b 09 69 66 20 _WIDE_INT:.+.if
3140: 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 (linkPtr->flags
3150: 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 & LINK_ALLOC_LAS
3160: 54 29 20 7b 0a 2b 09 20 20 20 20 69 66 20 28 54 T) {.+. if (T
3170: 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 cl_ListObjGetEle
3180: 6d 65 6e 74 73 28 69 6e 74 65 72 70 2c 76 61 6c ments(interp,val
3190: 75 65 4f 62 6a 2c 26 6f 62 6a 63 2c 26 6f 62 6a ueObj,&objc,&obj
31a0: 76 29 3d 3d 54 43 4c 5f 45 52 52 4f 52 0a 2b 09 v)==TCL_ERROR.+.
31b0: 09 7c 7c 20 6f 62 6a 63 20 21 3d 20 6c 69 6e 6b .|| objc != link
31c0: 50 74 72 2d 3e 62 79 74 65 73 2f 73 69 7a 65 6f Ptr->bytes/sizeo
31d0: 66 28 54 63 6c 5f 57 69 64 65 49 6e 74 29 29 20 f(Tcl_WideInt))
31e0: 7b 0a 2b 09 09 72 65 74 75 72 6e 20 22 77 72 6f {.+..return "wro
31f0: 6e 67 20 64 69 6d 65 6e 73 69 6f 6e 22 3b 0a 2b ng dimension";.+
3200: 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 66 6f 72 . }.+. for
3210: 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b (i=0; i < objc;
3220: 20 69 2b 2b 29 20 7b 0a 2b 09 09 69 66 20 28 54 i++) {.+..if (T
3230: 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72 6f cl_GetWideIntFro
3240: 6d 4f 62 6a 28 4e 55 4c 4c 2c 6f 62 6a 76 5b 69 mObj(NULL,objv[i
3250: 5d 2c 26 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 ],&linkPtr->last
3260: 56 61 6c 75 65 2e 70 77 5b 69 5d 29 21 3d 20 54 Value.pw[i])!= T
3270: 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 20 20 20 20 20 CL_OK) {.+.
3280: 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 Tcl_ObjSetVar
3290: 32 28 69 6e 74 65 72 70 2c 20 6c 69 6e 6b 50 74 2(interp, linkPt
32a0: 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c r->varName, NULL
32b0: 2c 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e 6b 50 , ObjValue(linkP
32c0: 74 72 29 2c 0a 2b 09 09 20 20 20 20 54 43 4c 5f tr),.+.. TCL_
32d0: 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 2b 09 GLOBAL_ONLY);.+.
32e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
32f0: 72 6e 20 22 76 61 72 69 61 62 6c 65 20 61 72 72 rn "variable arr
3300: 61 79 20 6d 75 73 74 20 68 61 76 65 20 77 69 64 ay must have wid
3310: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 22 e integer value"
3320: 3b 0a 2b 09 09 7d 0a 2b 09 20 20 20 20 7d 0a 2b ;.+..}.+. }.+
3330: 09 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b . memcpy(link
3340: 50 74 72 2d 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 Ptr->addr,linkPt
3350: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c r->lastValue.pc,
3360: 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b linkPtr->bytes);
3370: 0a 2b 09 20 20 20 20 62 72 65 61 6b 3b 0a 2b 09 .+. break;.+.
3380: 7d 0a 20 09 69 66 20 28 54 63 6c 5f 47 65 74 57 }. .if (Tcl_GetW
3390: 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55 ideIntFromObj(NU
33a0: 4c 4c 2c 20 76 61 6c 75 65 4f 62 6a 2c 20 26 6c LL, valueObj, &l
33b0: 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 inkPtr->lastValu
33c0: 65 2e 77 29 0a 20 09 09 21 3d 20 54 43 4c 5f 4f e.w). ..!= TCL_O
33d0: 4b 29 20 7b 0a 20 09 20 20 20 20 54 63 6c 5f 4f K) {. . Tcl_O
33e0: 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 bjSetVar2(interp
33f0: 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 , linkPtr->varNa
3400: 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c me, NULL, ObjVal
3410: 75 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 20 09 09 ue(linkPtr),. ..
3420: 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f TCL_GLOBAL_O
3430: 4e 4c 59 29 3b 0a 2d 09 20 20 20 20 72 65 74 75 NLY);.-. retu
3440: 72 6e 20 22 76 61 72 69 61 62 6c 65 20 6d 75 73 rn "variable mus
3450: 74 20 68 61 76 65 20 69 6e 74 65 67 65 72 20 76 t have integer v
3460: 61 6c 75 65 22 3b 0a 2b 09 20 20 20 20 72 65 74 alue";.+. ret
3470: 75 72 6e 20 22 76 61 72 69 61 62 6c 65 20 6d 75 urn "variable mu
3480: 73 74 20 68 61 76 65 20 77 69 64 65 20 69 6e 74 st have wide int
3490: 65 67 65 72 20 76 61 6c 75 65 22 3b 0a 20 09 7d eger value";. .}
34a0: 0a 20 09 4c 69 6e 6b 65 64 56 61 72 28 54 63 6c . .LinkedVar(Tcl
34b0: 5f 57 69 64 65 49 6e 74 29 20 3d 20 6c 69 6e 6b _WideInt) = link
34c0: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 77 Ptr->lastValue.w
34d0: 3b 0a 20 09 62 72 65 61 6b 3b 0a 20 0a 20 20 20 ;. .break;. .
34e0: 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f case TCL_LINK_
34f0: 44 4f 55 42 4c 45 3a 0a 2b 09 69 66 20 28 6c 69 DOUBLE:.+.if (li
3500: 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c nkPtr->flags & L
3510: 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 INK_ALLOC_LAST)
3520: 7b 0a 2b 09 20 20 20 20 69 66 20 28 54 63 6c 5f {.+. if (Tcl_
3530: 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e ListObjGetElemen
3540: 74 73 28 69 6e 74 65 72 70 2c 76 61 6c 75 65 4f ts(interp,valueO
3550: 62 6a 2c 26 6f 62 6a 63 2c 26 6f 62 6a 76 29 3d bj,&objc,&objv)=
3560: 3d 54 43 4c 5f 45 52 52 4f 52 0a 2b 09 09 7c 7c =TCL_ERROR.+..||
3570: 20 6f 62 6a 63 20 21 3d 20 6c 69 6e 6b 50 74 72 objc != linkPtr
3580: 2d 3e 62 79 74 65 73 2f 73 69 7a 65 6f 66 28 64 ->bytes/sizeof(d
3590: 6f 75 62 6c 65 29 29 20 7b 0a 2b 09 09 72 65 74 ouble)) {.+..ret
35a0: 75 72 6e 20 22 77 72 6f 6e 67 20 64 69 6d 65 6e urn "wrong dimen
35b0: 73 69 6f 6e 22 3b 0a 2b 09 20 20 20 20 7d 0a 2b sion";.+. }.+
35c0: 09 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 . for (i=0; i
35d0: 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a < objc; i++) {.
35e0: 2b 09 09 69 66 20 28 54 63 6c 5f 47 65 74 44 6f +..if (Tcl_GetDo
35f0: 75 62 6c 65 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c ubleFromObj(NULL
3600: 2c 6f 62 6a 76 5b 69 5d 2c 26 6c 69 6e 6b 50 74 ,objv[i],&linkPt
3610: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 64 5b r->lastValue.pd[
3620: 69 5d 29 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a i])!= TCL_OK) {.
3630: 2b 23 69 66 64 65 66 20 41 43 43 45 50 54 5f 4e +#ifdef ACCEPT_N
3640: 41 4e 0a 2b 09 20 20 20 20 69 66 20 28 76 61 6c AN.+. if (val
3650: 75 65 4f 62 6a 2d 3e 74 79 70 65 50 74 72 20 21 ueObj->typePtr !
3660: 3d 20 26 74 63 6c 44 6f 75 62 6c 65 54 79 70 65 = &tclDoubleType
3670: 29 20 7b 0a 2b 23 65 6e 64 69 66 0a 2b 09 20 20 ) {.+#endif.+.
3680: 20 20 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 Tcl_ObjSet
3690: 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6c 69 6e Var2(interp, lin
36a0: 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e kPtr->varName, N
36b0: 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c 69 ULL, ObjValue(li
36c0: 6e 6b 50 74 72 29 2c 0a 2b 09 09 20 20 20 20 54 nkPtr),.+.. T
36d0: 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b CL_GLOBAL_ONLY);
36e0: 0a 2b 09 20 20 20 20 20 20 20 20 20 20 20 20 72 .+. r
36f0: 65 74 75 72 6e 20 22 76 61 72 69 61 62 6c 65 20 eturn "variable
3700: 61 72 72 61 79 20 6d 75 73 74 20 68 61 76 65 20 array must have
3710: 72 65 61 6c 20 76 61 6c 75 65 22 3b 0a 2b 23 69 real value";.+#i
3720: 66 64 65 66 20 41 43 43 45 50 54 5f 4e 41 4e 0a fdef ACCEPT_NAN.
3730: 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 6c 69 +. }.+. li
3740: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 nkPtr->lastValue
3750: 2e 70 64 69 5b 69 5d 20 3d 20 76 61 6c 75 65 4f .pdi[i] = valueO
3760: 62 6a 2d 3e 69 6e 74 65 72 6e 61 6c 52 65 70 2e bj->internalRep.
3770: 64 6f 75 62 6c 65 56 61 6c 75 65 3b 0a 2b 23 65 doubleValue;.+#e
3780: 6e 64 69 66 0a 2b 09 09 7d 0a 2b 09 20 20 20 20 ndif.+..}.+.
3790: 7d 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 6c }.+. memcpy(l
37a0: 69 6e 6b 50 74 72 2d 3e 61 64 64 72 2c 6c 69 6e inkPtr->addr,lin
37b0: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e kPtr->lastValue.
37c0: 70 63 2c 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 pc,linkPtr->byte
37d0: 73 29 3b 0a 2b 09 20 20 20 20 62 72 65 61 6b 3b s);.+. break;
37e0: 0a 2b 09 7d 0a 20 09 69 66 20 28 54 63 6c 5f 47 .+.}. .if (Tcl_G
37f0: 65 74 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28 etDoubleFromObj(
3800: 4e 55 4c 4c 2c 20 76 61 6c 75 65 4f 62 6a 2c 20 NULL, valueObj,
3810: 26 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 &linkPtr->lastVa
3820: 6c 75 65 2e 64 29 0a 20 09 09 21 3d 20 54 43 4c lue.d). ..!= TCL
3830: 5f 4f 4b 29 20 7b 0a 20 23 69 66 64 65 66 20 41 _OK) {. #ifdef A
3840: 43 43 45 50 54 5f 4e 41 4e 0a 40 40 20 2d 34 30 CCEPT_NAN.@@ -40
3850: 38 2c 36 20 2b 36 33 34 2c 32 31 20 40 40 0a 20 8,6 +634,21 @@.
3860: 09 62 72 65 61 6b 3b 0a 20 0a 20 20 20 20 20 63 .break;. . c
3870: 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 42 4f 4f ase TCL_LINK_BOO
3880: 4c 45 41 4e 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b LEAN:.+.if (link
3890: 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e Ptr->flags & LIN
38a0: 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a K_ALLOC_LAST) {.
38b0: 2b 09 20 20 20 20 69 66 20 28 54 63 6c 5f 4c 69 +. if (Tcl_Li
38c0: 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 stObjGetElements
38d0: 28 69 6e 74 65 72 70 2c 76 61 6c 75 65 4f 62 6a (interp,valueObj
38e0: 2c 26 6f 62 6a 63 2c 26 6f 62 6a 76 29 3d 3d 54 ,&objc,&objv)==T
38f0: 43 4c 5f 45 52 52 4f 52 0a 2b 09 09 7c 7c 20 6f CL_ERROR.+..|| o
3900: 62 6a 63 20 21 3d 20 6c 69 6e 6b 50 74 72 2d 3e bjc != linkPtr->
3910: 62 79 74 65 73 2f 73 69 7a 65 6f 66 28 69 6e 74 bytes/sizeof(int
3920: 29 29 20 7b 0a 2b 09 09 72 65 74 75 72 6e 20 22 )) {.+..return "
3930: 77 72 6f 6e 67 20 64 69 6d 65 6e 73 69 6f 6e 22 wrong dimension"
3940: 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 ;.+. }.+.
3950: 66 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 for (i=0; i < ob
3960: 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09 69 66 jc; i++) {.+..if
3970: 20 28 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e (Tcl_GetBoolean
3980: 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 6f 62 6a FromObj(NULL,obj
3990: 76 5b 69 5d 2c 26 6c 69 6e 6b 50 74 72 2d 3e 6c v[i],&linkPtr->l
39a0: 61 73 74 56 61 6c 75 65 2e 70 69 5b 69 5d 29 21 astValue.pi[i])!
39b0: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 20 20 = TCL_OK) {.+.
39c0: 20 20 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 Tcl_ObjSet
39d0: 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6c 69 6e Var2(interp, lin
39e0: 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e kPtr->varName, N
39f0: 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c 69 ULL, ObjValue(li
3a00: 6e 6b 50 74 72 29 2c 0a 2b 09 09 20 20 20 20 54 nkPtr),.+.. T
3a10: 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b CL_GLOBAL_ONLY);
3a20: 0a 2b 09 20 20 20 20 20 20 20 20 20 20 20 20 72 .+. r
3a30: 65 74 75 72 6e 20 22 76 61 72 69 61 62 6c 65 20 eturn "variable
3a40: 61 72 72 61 79 20 6d 75 73 74 20 68 61 76 65 20 array must have
3a50: 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 22 3b 0a boolean value";.
3a60: 2b 09 09 7d 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 +..}.+. }.+.
3a70: 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 memcpy(linkPt
3a80: 72 2d 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72 2d r->addr,linkPtr-
3a90: 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c 6c 69 >lastValue.pc,li
3aa0: 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b nkPtr->bytes);.+
3ab0: 09 20 20 20 20 62 72 65 61 6b 3b 0a 2b 09 7d 0a . break;.+.}.
3ac0: 20 09 69 66 20 28 54 63 6c 5f 47 65 74 42 6f 6f .if (Tcl_GetBoo
3ad0: 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c leanFromObj(NULL
3ae0: 2c 20 76 61 6c 75 65 4f 62 6a 2c 20 26 6c 69 6e , valueObj, &lin
3af0: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e kPtr->lastValue.
3b00: 69 29 0a 20 09 09 21 3d 20 54 43 4c 5f 4f 4b 29 i). ..!= TCL_OK)
3b10: 20 7b 0a 20 09 20 20 20 20 54 63 6c 5f 4f 62 6a {. . Tcl_Obj
3b20: 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 SetVar2(interp,
3b30: 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 linkPtr->varName
3b40: 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 , NULL, ObjValue
3b50: 28 6c 69 6e 6b 50 74 72 29 2c 0a 40 40 20 2d 34 (linkPtr),.@@ -4
3b60: 31 38 2c 36 20 2b 36 35 39 2c 32 33 20 40 40 0a 18,6 +659,23 @@.
3b70: 20 09 62 72 65 61 6b 3b 0a 20 0a 20 20 20 20 20 .break;. .
3b80: 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 43 48 case TCL_LINK_CH
3b90: 41 52 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74 AR:.+.if (linkPt
3ba0: 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f r->flags & LINK_
3bb0: 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 ALLOC_LAST) {.+.
3bc0: 20 20 20 20 69 66 20 28 54 63 6c 5f 4c 69 73 74 if (Tcl_List
3bd0: 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 ObjGetElements(i
3be0: 6e 74 65 72 70 2c 76 61 6c 75 65 4f 62 6a 2c 26 nterp,valueObj,&
3bf0: 6f 62 6a 63 2c 26 6f 62 6a 76 29 3d 3d 54 43 4c objc,&objv)==TCL
3c00: 5f 45 52 52 4f 52 0a 2b 09 09 7c 7c 20 6f 62 6a _ERROR.+..|| obj
3c10: 63 20 21 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 c != linkPtr->by
3c20: 74 65 73 2f 73 69 7a 65 6f 66 28 63 68 61 72 29 tes/sizeof(char)
3c30: 29 20 7b 0a 2b 09 09 72 65 74 75 72 6e 20 22 77 ) {.+..return "w
3c40: 72 6f 6e 67 20 64 69 6d 65 6e 73 69 6f 6e 22 3b rong dimension";
3c50: 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 66 .+. }.+. f
3c60: 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a or (i=0; i < obj
3c70: 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09 69 66 20 c; i++) {.+..if
3c80: 28 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f (Tcl_GetIntFromO
3c90: 62 6a 28 4e 55 4c 4c 2c 6f 62 6a 76 5b 69 5d 2c bj(NULL,objv[i],
3ca0: 26 76 61 6c 75 65 49 6e 74 29 21 3d 20 54 43 4c &valueInt)!= TCL
3cb0: 5f 4f 4b 0a 2b 09 09 09 7c 7c 20 76 61 6c 75 65 _OK.+...|| value
3cc0: 49 6e 74 20 3c 20 53 43 48 41 52 5f 4d 49 4e 20 Int < SCHAR_MIN
3cd0: 7c 7c 20 76 61 6c 75 65 49 6e 74 20 3e 20 53 43 || valueInt > SC
3ce0: 48 41 52 5f 4d 41 58 29 20 7b 0a 2b 09 20 20 20 HAR_MAX) {.+.
3cf0: 20 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 Tcl_ObjSetV
3d00: 61 72 32 28 69 6e 74 65 72 70 2c 20 6c 69 6e 6b ar2(interp, link
3d10: 50 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e 55 Ptr->varName, NU
3d20: 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e LL, ObjValue(lin
3d30: 6b 50 74 72 29 2c 0a 2b 09 09 20 20 20 20 54 43 kPtr),.+.. TC
3d40: 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a L_GLOBAL_ONLY);.
3d50: 2b 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 +. re
3d60: 74 75 72 6e 20 22 76 61 72 69 61 62 6c 65 20 61 turn "variable a
3d70: 72 72 61 79 20 6d 75 73 74 20 68 61 76 65 20 63 rray must have c
3d80: 68 61 72 20 76 61 6c 75 65 22 3b 0a 2b 09 09 7d har value";.+..}
3d90: 0a 2b 09 09 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 .+..linkPtr->las
3da0: 74 56 61 6c 75 65 2e 70 63 5b 69 5d 20 3d 20 28 tValue.pc[i] = (
3db0: 63 68 61 72 29 76 61 6c 75 65 49 6e 74 3b 0a 2b char)valueInt;.+
3dc0: 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 6d 65 6d . }.+. mem
3dd0: 63 70 79 28 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 cpy(linkPtr->add
3de0: 72 2c 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 r,linkPtr->lastV
3df0: 61 6c 75 65 2e 70 63 2c 6c 69 6e 6b 50 74 72 2d alue.pc,linkPtr-
3e00: 3e 62 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 62 >bytes);.+. b
3e10: 72 65 61 6b 3b 0a 2b 09 7d 0a 20 09 69 66 20 28 reak;.+.}. .if (
3e20: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 Tcl_GetIntFromOb
3e30: 6a 28 69 6e 74 65 72 70 2c 20 76 61 6c 75 65 4f j(interp, valueO
3e40: 62 6a 2c 20 26 76 61 6c 75 65 49 6e 74 29 20 21 bj, &valueInt) !
3e50: 3d 20 54 43 4c 5f 4f 4b 0a 20 09 09 7c 7c 20 76 = TCL_OK. ..|| v
3e60: 61 6c 75 65 49 6e 74 20 3c 20 53 43 48 41 52 5f alueInt < SCHAR_
3e70: 4d 49 4e 20 7c 7c 20 76 61 6c 75 65 49 6e 74 20 MIN || valueInt
3e80: 3e 20 53 43 48 41 52 5f 4d 41 58 29 20 7b 0a 20 > SCHAR_MAX) {.
3e90: 09 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 . Tcl_ObjSetV
3ea0: 61 72 32 28 69 6e 74 65 72 70 2c 20 6c 69 6e 6b ar2(interp, link
3eb0: 50 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e 55 Ptr->varName, NU
3ec0: 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e LL, ObjValue(lin
3ed0: 6b 50 74 72 29 2c 0a 40 40 20 2d 34 32 39 2c 36 kPtr),.@@ -429,6
3ee0: 20 2b 36 38 37 2c 32 33 20 40 40 0a 20 09 62 72 +687,23 @@. .br
3ef0: 65 61 6b 3b 0a 20 0a 20 20 20 20 20 63 61 73 65 eak;. . case
3f00: 20 54 43 4c 5f 4c 49 4e 4b 5f 55 43 48 41 52 3a TCL_LINK_UCHAR:
3f10: 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74 72 2d 3e .+.if (linkPtr->
3f20: 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c flags & LINK_ALL
3f30: 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 20 20 OC_LAST) {.+.
3f40: 20 69 66 20 28 54 63 6c 5f 4c 69 73 74 4f 62 6a if (Tcl_ListObj
3f50: 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74 65 GetElements(inte
3f60: 72 70 2c 76 61 6c 75 65 4f 62 6a 2c 26 6f 62 6a rp,valueObj,&obj
3f70: 63 2c 26 6f 62 6a 76 29 3d 3d 54 43 4c 5f 45 52 c,&objv)==TCL_ER
3f80: 52 4f 52 0a 2b 09 09 7c 7c 20 6f 62 6a 63 20 21 ROR.+..|| objc !
3f90: 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 = linkPtr->bytes
3fa0: 2f 73 69 7a 65 6f 66 28 75 6e 73 69 67 6e 65 64 /sizeof(unsigned
3fb0: 20 63 68 61 72 29 29 20 7b 0a 2b 09 09 72 65 74 char)) {.+..ret
3fc0: 75 72 6e 20 22 77 72 6f 6e 67 20 64 69 6d 65 6e urn "wrong dimen
3fd0: 73 69 6f 6e 22 3b 0a 2b 09 20 20 20 20 7d 0a 2b sion";.+. }.+
3fe0: 09 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 . for (i=0; i
3ff0: 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a < objc; i++) {.
4000: 2b 09 09 69 66 20 28 54 63 6c 5f 47 65 74 49 6e +..if (Tcl_GetIn
4010: 74 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 6f 62 tFromObj(NULL,ob
4020: 6a 76 5b 69 5d 2c 26 76 61 6c 75 65 49 6e 74 29 jv[i],&valueInt)
4030: 21 3d 20 54 43 4c 5f 4f 4b 0a 2b 09 09 09 7c 7c != TCL_OK.+...||
4040: 20 76 61 6c 75 65 49 6e 74 20 3c 20 30 20 7c 7c valueInt < 0 ||
4050: 20 76 61 6c 75 65 49 6e 74 20 3e 20 55 43 48 41 valueInt > UCHA
4060: 52 5f 4d 41 58 29 20 7b 0a 2b 09 20 20 20 20 20 R_MAX) {.+.
4070: 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 Tcl_ObjSetVar
4080: 32 28 69 6e 74 65 72 70 2c 20 6c 69 6e 6b 50 74 2(interp, linkPt
4090: 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c r->varName, NULL
40a0: 2c 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e 6b 50 , ObjValue(linkP
40b0: 74 72 29 2c 0a 2b 09 09 20 20 20 20 54 43 4c 5f tr),.+.. TCL_
40c0: 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 2b 09 GLOBAL_ONLY);.+.
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
40e0: 72 6e 20 22 76 61 72 69 61 62 6c 65 20 61 72 72 rn "variable arr
40f0: 61 79 20 6d 75 73 74 20 68 61 76 65 20 75 6e 73 ay must have uns
4100: 69 67 6e 65 64 20 63 68 61 72 20 76 61 6c 75 65 igned char value
4110: 22 3b 0a 2b 09 09 7d 0a 2b 09 09 6c 69 6e 6b 50 ";.+..}.+..linkP
4120: 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 75 tr->lastValue.pu
4130: 63 5b 69 5d 20 3d 20 28 75 6e 73 69 67 6e 65 64 c[i] = (unsigned
4140: 20 63 68 61 72 29 76 61 6c 75 65 49 6e 74 3b 0a char)valueInt;.
4150: 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 6d 65 +. }.+. me
4160: 6d 63 70 79 28 6c 69 6e 6b 50 74 72 2d 3e 61 64 mcpy(linkPtr->ad
4170: 64 72 2c 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 dr,linkPtr->last
4180: 56 61 6c 75 65 2e 70 63 2c 6c 69 6e 6b 50 74 72 Value.pc,linkPtr
4190: 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 ->bytes);.+.
41a0: 62 72 65 61 6b 3b 0a 2b 09 7d 0a 20 09 69 66 20 break;.+.}. .if
41b0: 28 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f (Tcl_GetIntFromO
41c0: 62 6a 28 69 6e 74 65 72 70 2c 20 76 61 6c 75 65 bj(interp, value
41d0: 4f 62 6a 2c 20 26 76 61 6c 75 65 49 6e 74 29 20 Obj, &valueInt)
41e0: 21 3d 20 54 43 4c 5f 4f 4b 0a 20 09 09 7c 7c 20 != TCL_OK. ..||
41f0: 76 61 6c 75 65 49 6e 74 20 3c 20 30 20 7c 7c 20 valueInt < 0 ||
4200: 76 61 6c 75 65 49 6e 74 20 3e 20 55 43 48 41 52 valueInt > UCHAR
4210: 5f 4d 41 58 29 20 7b 0a 20 09 20 20 20 20 54 63 _MAX) {. . Tc
4220: 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 l_ObjSetVar2(int
4230: 65 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 erp, linkPtr->va
4240: 72 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a rName, NULL, Obj
4250: 56 61 6c 75 65 28 6c 69 6e 6b 50 74 72 29 2c 0a Value(linkPtr),.
4260: 40 40 20 2d 34 34 30 2c 36 20 2b 37 31 35 2c 32 @@ -440,6 +715,2
4270: 33 20 40 40 0a 20 09 62 72 65 61 6b 3b 0a 20 0a 3 @@. .break;. .
4280: 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 case TCL_LI
4290: 4e 4b 5f 53 48 4f 52 54 3a 0a 2b 09 69 66 20 28 NK_SHORT:.+.if (
42a0: 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 linkPtr->flags &
42b0: 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 LINK_ALLOC_LAST
42c0: 29 20 7b 0a 2b 09 20 20 20 20 69 66 20 28 54 63 ) {.+. if (Tc
42d0: 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d l_ListObjGetElem
42e0: 65 6e 74 73 28 69 6e 74 65 72 70 2c 76 61 6c 75 ents(interp,valu
42f0: 65 4f 62 6a 2c 26 6f 62 6a 63 2c 26 6f 62 6a 76 eObj,&objc,&objv
4300: 29 3d 3d 54 43 4c 5f 45 52 52 4f 52 0a 2b 09 09 )==TCL_ERROR.+..
4310: 7c 7c 20 6f 62 6a 63 20 21 3d 20 6c 69 6e 6b 50 || objc != linkP
4320: 74 72 2d 3e 62 79 74 65 73 2f 73 69 7a 65 6f 66 tr->bytes/sizeof
4330: 28 73 68 6f 72 74 29 29 20 7b 0a 2b 09 09 72 65 (short)) {.+..re
4340: 74 75 72 6e 20 22 77 72 6f 6e 67 20 64 69 6d 65 turn "wrong dime
4350: 6e 73 69 6f 6e 22 3b 0a 2b 09 20 20 20 20 7d 0a nsion";.+. }.
4360: 2b 09 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 +. for (i=0;
4370: 69 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b i < objc; i++) {
4380: 0a 2b 09 09 69 66 20 28 54 63 6c 5f 47 65 74 49 .+..if (Tcl_GetI
4390: 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 6f ntFromObj(NULL,o
43a0: 62 6a 76 5b 69 5d 2c 26 76 61 6c 75 65 49 6e 74 bjv[i],&valueInt
43b0: 29 21 3d 20 54 43 4c 5f 4f 4b 0a 2b 09 09 09 7c )!= TCL_OK.+...|
43c0: 7c 20 76 61 6c 75 65 49 6e 74 20 3c 20 53 48 52 | valueInt < SHR
43d0: 54 5f 4d 49 4e 20 7c 7c 20 76 61 6c 75 65 49 6e T_MIN || valueIn
43e0: 74 20 3e 20 53 48 52 54 5f 4d 41 58 29 20 7b 0a t > SHRT_MAX) {.
43f0: 2b 09 20 20 20 20 20 20 20 20 54 63 6c 5f 4f 62 +. Tcl_Ob
4400: 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c jSetVar2(interp,
4410: 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d linkPtr->varNam
4420: 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 e, NULL, ObjValu
4430: 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b 09 09 20 e(linkPtr),.+..
4440: 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e TCL_GLOBAL_ON
4450: 4c 59 29 3b 0a 2b 09 20 20 20 20 20 20 20 20 20 LY);.+.
4460: 20 20 20 72 65 74 75 72 6e 20 22 76 61 72 69 61 return "varia
4470: 62 6c 65 20 61 72 72 61 79 20 6d 75 73 74 20 68 ble array must h
4480: 61 76 65 20 73 68 6f 72 74 20 76 61 6c 75 65 22 ave short value"
4490: 3b 0a 2b 09 09 7d 0a 2b 09 09 6c 69 6e 6b 50 74 ;.+..}.+..linkPt
44a0: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 73 5b r->lastValue.ps[
44b0: 69 5d 20 3d 20 28 73 68 6f 72 74 29 76 61 6c 75 i] = (short)valu
44c0: 65 49 6e 74 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 eInt;.+. }.+.
44d0: 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 memcpy(linkP
44e0: 74 72 2d 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72 tr->addr,linkPtr
44f0: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c 6c ->lastValue.pc,l
4500: 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a inkPtr->bytes);.
4510: 2b 09 20 20 20 20 62 72 65 61 6b 3b 0a 2b 09 7d +. break;.+.}
4520: 0a 20 09 69 66 20 28 54 63 6c 5f 47 65 74 49 6e . .if (Tcl_GetIn
4530: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c tFromObj(interp,
4540: 20 76 61 6c 75 65 4f 62 6a 2c 20 26 76 61 6c 75 valueObj, &valu
4550: 65 49 6e 74 29 20 21 3d 20 54 43 4c 5f 4f 4b 0a eInt) != TCL_OK.
4560: 20 09 09 7c 7c 20 76 61 6c 75 65 49 6e 74 20 3c ..|| valueInt <
4570: 20 53 48 52 54 5f 4d 49 4e 20 7c 7c 20 76 61 6c SHRT_MIN || val
4580: 75 65 49 6e 74 20 3e 20 53 48 52 54 5f 4d 41 58 ueInt > SHRT_MAX
4590: 29 20 7b 0a 20 09 20 20 20 20 54 63 6c 5f 4f 62 ) {. . Tcl_Ob
45a0: 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c jSetVar2(interp,
45b0: 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d linkPtr->varNam
45c0: 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 e, NULL, ObjValu
45d0: 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 40 40 20 2d e(linkPtr),.@@ -
45e0: 34 35 31 2c 36 20 2b 37 34 33 2c 32 33 20 40 40 451,6 +743,23 @@
45f0: 0a 20 09 62 72 65 61 6b 3b 0a 20 0a 20 20 20 20 . .break;. .
4600: 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 55 case TCL_LINK_U
4610: 53 48 4f 52 54 3a 0a 2b 09 69 66 20 28 6c 69 6e SHORT:.+.if (lin
4620: 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 kPtr->flags & LI
4630: 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b NK_ALLOC_LAST) {
4640: 0a 2b 09 20 20 20 20 69 66 20 28 54 63 6c 5f 4c .+. if (Tcl_L
4650: 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 istObjGetElement
4660: 73 28 69 6e 74 65 72 70 2c 76 61 6c 75 65 4f 62 s(interp,valueOb
4670: 6a 2c 26 6f 62 6a 63 2c 26 6f 62 6a 76 29 3d 3d j,&objc,&objv)==
4680: 54 43 4c 5f 45 52 52 4f 52 0a 2b 09 09 7c 7c 20 TCL_ERROR.+..||
4690: 6f 62 6a 63 20 21 3d 20 6c 69 6e 6b 50 74 72 2d objc != linkPtr-
46a0: 3e 62 79 74 65 73 2f 73 69 7a 65 6f 66 28 75 6e >bytes/sizeof(un
46b0: 73 69 67 6e 65 64 20 73 68 6f 72 74 29 29 20 7b signed short)) {
46c0: 0a 2b 09 09 72 65 74 75 72 6e 20 22 77 72 6f 6e .+..return "wron
46d0: 67 20 64 69 6d 65 6e 73 69 6f 6e 22 3b 0a 2b 09 g dimension";.+.
46e0: 20 20 20 20 7d 0a 2b 09 20 20 20 20 66 6f 72 20 }.+. for
46f0: 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 (i=0; i < objc;
4700: 69 2b 2b 29 20 7b 0a 2b 09 09 69 66 20 28 54 63 i++) {.+..if (Tc
4710: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 l_GetIntFromObj(
4720: 4e 55 4c 4c 2c 6f 62 6a 76 5b 69 5d 2c 26 76 61 NULL,objv[i],&va
4730: 6c 75 65 49 6e 74 29 21 3d 20 54 43 4c 5f 4f 4b lueInt)!= TCL_OK
4740: 0a 2b 09 09 09 7c 7c 20 76 61 6c 75 65 49 6e 74 .+...|| valueInt
4750: 20 3c 20 30 20 7c 7c 20 76 61 6c 75 65 49 6e 74 < 0 || valueInt
4760: 20 3e 20 55 53 48 52 54 5f 4d 41 58 29 20 7b 0a > USHRT_MAX) {.
4770: 2b 09 20 20 20 20 20 20 20 20 54 63 6c 5f 4f 62 +. Tcl_Ob
4780: 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c jSetVar2(interp,
4790: 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d linkPtr->varNam
47a0: 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 e, NULL, ObjValu
47b0: 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b 09 09 20 e(linkPtr),.+..
47c0: 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e TCL_GLOBAL_ON
47d0: 4c 59 29 3b 0a 2b 09 20 20 20 20 20 20 20 20 20 LY);.+.
47e0: 20 20 20 72 65 74 75 72 6e 20 22 76 61 72 69 61 return "varia
47f0: 62 6c 65 20 61 72 72 61 79 20 6d 75 73 74 20 68 ble array must h
4800: 61 76 65 20 75 6e 73 69 67 6e 65 64 20 73 68 6f ave unsigned sho
4810: 72 74 20 76 61 6c 75 65 22 3b 0a 2b 09 09 7d 0a rt value";.+..}.
4820: 2b 09 09 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 +..linkPtr->last
4830: 56 61 6c 75 65 2e 70 75 73 5b 69 5d 20 3d 20 28 Value.pus[i] = (
4840: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 29 76 unsigned short)v
4850: 61 6c 75 65 49 6e 74 3b 0a 2b 09 20 20 20 20 7d alueInt;.+. }
4860: 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 .+. memcpy(li
4870: 6e 6b 50 74 72 2d 3e 61 64 64 72 2c 6c 69 6e 6b nkPtr->addr,link
4880: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 Ptr->lastValue.p
4890: 63 2c 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 c,linkPtr->bytes
48a0: 29 3b 0a 2b 09 20 20 20 20 62 72 65 61 6b 3b 0a );.+. break;.
48b0: 2b 09 7d 0a 20 09 69 66 20 28 54 63 6c 5f 47 65 +.}. .if (Tcl_Ge
48c0: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 tIntFromObj(inte
48d0: 72 70 2c 20 76 61 6c 75 65 4f 62 6a 2c 20 26 76 rp, valueObj, &v
48e0: 61 6c 75 65 49 6e 74 29 20 21 3d 20 54 43 4c 5f alueInt) != TCL_
48f0: 4f 4b 0a 20 09 09 7c 7c 20 76 61 6c 75 65 49 6e OK. ..|| valueIn
4900: 74 20 3c 20 30 20 7c 7c 20 76 61 6c 75 65 49 6e t < 0 || valueIn
4910: 74 20 3e 20 55 53 48 52 54 5f 4d 41 58 29 20 7b t > USHRT_MAX) {
4920: 0a 20 09 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 . . Tcl_ObjSe
4930: 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6c 69 tVar2(interp, li
4940: 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 nkPtr->varName,
4950: 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c NULL, ObjValue(l
4960: 69 6e 6b 50 74 72 29 2c 0a 40 40 20 2d 34 36 32 inkPtr),.@@ -462
4970: 2c 36 20 2b 37 37 31 2c 32 33 20 40 40 0a 20 09 ,6 +771,23 @@. .
4980: 62 72 65 61 6b 3b 0a 20 0a 20 20 20 20 20 63 61 break;. . ca
4990: 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 55 49 4e 54 se TCL_LINK_UINT
49a0: 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74 72 2d :.+.if (linkPtr-
49b0: 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f 41 4c >flags & LINK_AL
49c0: 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 20 LOC_LAST) {.+.
49d0: 20 20 69 66 20 28 54 63 6c 5f 4c 69 73 74 4f 62 if (Tcl_ListOb
49e0: 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74 jGetElements(int
49f0: 65 72 70 2c 76 61 6c 75 65 4f 62 6a 2c 26 6f 62 erp,valueObj,&ob
4a00: 6a 63 2c 26 6f 62 6a 76 29 3d 3d 54 43 4c 5f 45 jc,&objv)==TCL_E
4a10: 52 52 4f 52 0a 2b 09 09 7c 7c 20 6f 62 6a 63 20 RROR.+..|| objc
4a20: 21 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 != linkPtr->byte
4a30: 73 2f 73 69 7a 65 6f 66 28 75 6e 73 69 67 6e 65 s/sizeof(unsigne
4a40: 64 20 69 6e 74 29 29 20 7b 0a 2b 09 09 72 65 74 d int)) {.+..ret
4a50: 75 72 6e 20 22 77 72 6f 6e 67 20 64 69 6d 65 6e urn "wrong dimen
4a60: 73 69 6f 6e 22 3b 0a 2b 09 20 20 20 20 7d 0a 2b sion";.+. }.+
4a70: 09 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 . for (i=0; i
4a80: 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a < objc; i++) {.
4a90: 2b 09 09 69 66 20 28 54 63 6c 5f 47 65 74 57 69 +..if (Tcl_GetWi
4aa0: 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55 4c deIntFromObj(NUL
4ab0: 4c 2c 6f 62 6a 76 5b 69 5d 2c 26 76 61 6c 75 65 L,objv[i],&value
4ac0: 57 69 64 65 29 21 3d 20 54 43 4c 5f 4f 4b 0a 2b Wide)!= TCL_OK.+
4ad0: 09 09 09 7c 7c 20 76 61 6c 75 65 57 69 64 65 20 ...|| valueWide
4ae0: 3c 20 30 20 7c 7c 20 76 61 6c 75 65 57 69 64 65 < 0 || valueWide
4af0: 20 3e 20 55 49 4e 54 5f 4d 41 58 29 20 7b 0a 2b > UINT_MAX) {.+
4b00: 09 20 20 20 20 20 20 20 20 54 63 6c 5f 4f 62 6a . Tcl_Obj
4b10: 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 SetVar2(interp,
4b20: 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 linkPtr->varName
4b30: 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 , NULL, ObjValue
4b40: 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b 09 09 20 20 (linkPtr),.+..
4b50: 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c TCL_GLOBAL_ONL
4b60: 59 29 3b 0a 2b 09 20 20 20 20 20 20 20 20 20 20 Y);.+.
4b70: 20 20 72 65 74 75 72 6e 20 22 76 61 72 69 61 62 return "variab
4b80: 6c 65 20 61 72 72 61 79 20 6d 75 73 74 20 68 61 le array must ha
4b90: 76 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 ve unsigned int
4ba0: 76 61 6c 75 65 22 3b 0a 2b 09 09 7d 0a 2b 09 09 value";.+..}.+..
4bb0: 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c linkPtr->lastVal
4bc0: 75 65 2e 70 75 69 5b 69 5d 20 3d 20 28 75 6e 73 ue.pui[i] = (uns
4bd0: 69 67 6e 65 64 20 69 6e 74 29 76 61 6c 75 65 57 igned int)valueW
4be0: 69 64 65 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 ide;.+. }.+.
4bf0: 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 memcpy(linkPt
4c00: 72 2d 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72 2d r->addr,linkPtr-
4c10: 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c 6c 69 >lastValue.pc,li
4c20: 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b nkPtr->bytes);.+
4c30: 09 20 20 20 20 62 72 65 61 6b 3b 0a 2b 09 7d 0a . break;.+.}.
4c40: 20 09 69 66 20 28 54 63 6c 5f 47 65 74 57 69 64 .if (Tcl_GetWid
4c50: 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 eIntFromObj(inte
4c60: 72 70 2c 20 76 61 6c 75 65 4f 62 6a 2c 20 26 76 rp, valueObj, &v
4c70: 61 6c 75 65 57 69 64 65 29 20 21 3d 20 54 43 4c alueWide) != TCL
4c80: 5f 4f 4b 0a 20 09 09 7c 7c 20 76 61 6c 75 65 57 _OK. ..|| valueW
4c90: 69 64 65 20 3c 20 30 20 7c 7c 20 76 61 6c 75 65 ide < 0 || value
4ca0: 57 69 64 65 20 3e 20 55 49 4e 54 5f 4d 41 58 29 Wide > UINT_MAX)
4cb0: 20 7b 0a 20 09 20 20 20 20 54 63 6c 5f 4f 62 6a {. . Tcl_Obj
4cc0: 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 SetVar2(interp,
4cd0: 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 linkPtr->varName
4ce0: 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 , NULL, ObjValue
4cf0: 28 6c 69 6e 6b 50 74 72 29 2c 0a 40 40 20 2d 34 (linkPtr),.@@ -4
4d00: 37 33 2c 36 20 2b 37 39 39 2c 32 33 20 40 40 0a 73,6 +799,23 @@.
4d10: 20 09 62 72 65 61 6b 3b 0a 20 0a 20 20 20 20 20 .break;. .
4d20: 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 4c 4f case TCL_LINK_LO
4d30: 4e 47 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74 NG:.+.if (linkPt
4d40: 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f r->flags & LINK_
4d50: 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 ALLOC_LAST) {.+.
4d60: 20 20 20 20 69 66 20 28 54 63 6c 5f 4c 69 73 74 if (Tcl_List
4d70: 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 ObjGetElements(i
4d80: 6e 74 65 72 70 2c 76 61 6c 75 65 4f 62 6a 2c 26 nterp,valueObj,&
4d90: 6f 62 6a 63 2c 26 6f 62 6a 76 29 3d 3d 54 43 4c objc,&objv)==TCL
4da0: 5f 45 52 52 4f 52 0a 2b 09 09 7c 7c 20 6f 62 6a _ERROR.+..|| obj
4db0: 63 20 21 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 c != linkPtr->by
4dc0: 74 65 73 2f 73 69 7a 65 6f 66 28 6c 6f 6e 67 29 tes/sizeof(long)
4dd0: 29 20 7b 0a 2b 09 09 72 65 74 75 72 6e 20 22 77 ) {.+..return "w
4de0: 72 6f 6e 67 20 64 69 6d 65 6e 73 69 6f 6e 22 3b rong dimension";
4df0: 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 66 .+. }.+. f
4e00: 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a or (i=0; i < obj
4e10: 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09 69 66 20 c; i++) {.+..if
4e20: 28 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 (Tcl_GetWideIntF
4e30: 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 6f 62 6a 76 romObj(NULL,objv
4e40: 5b 69 5d 2c 26 76 61 6c 75 65 57 69 64 65 29 21 [i],&valueWide)!
4e50: 3d 20 54 43 4c 5f 4f 4b 0a 2b 09 09 09 7c 7c 20 = TCL_OK.+...||
4e60: 76 61 6c 75 65 57 69 64 65 20 3c 20 4c 4f 4e 47 valueWide < LONG
4e70: 5f 4d 49 4e 20 7c 7c 20 76 61 6c 75 65 57 69 64 _MIN || valueWid
4e80: 65 20 3e 20 4c 4f 4e 47 5f 4d 41 58 29 20 7b 0a e > LONG_MAX) {.
4e90: 2b 09 20 20 20 20 20 20 20 20 54 63 6c 5f 4f 62 +. Tcl_Ob
4ea0: 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c jSetVar2(interp,
4eb0: 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d linkPtr->varNam
4ec0: 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 e, NULL, ObjValu
4ed0: 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b 09 09 20 e(linkPtr),.+..
4ee0: 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e TCL_GLOBAL_ON
4ef0: 4c 59 29 3b 0a 2b 09 20 20 20 20 20 20 20 20 20 LY);.+.
4f00: 20 20 20 72 65 74 75 72 6e 20 22 76 61 72 69 61 return "varia
4f10: 62 6c 65 20 61 72 72 61 79 20 6d 75 73 74 20 68 ble array must h
4f20: 61 76 65 20 6c 6f 6e 67 20 76 61 6c 75 65 22 3b ave long value";
4f30: 0a 2b 09 09 7d 0a 2b 09 09 6c 69 6e 6b 50 74 72 .+..}.+..linkPtr
4f40: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 6c 5b 69 ->lastValue.pl[i
4f50: 5d 20 3d 20 28 6c 6f 6e 67 29 76 61 6c 75 65 57 ] = (long)valueW
4f60: 69 64 65 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 ide;.+. }.+.
4f70: 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 memcpy(linkPt
4f80: 72 2d 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72 2d r->addr,linkPtr-
4f90: 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c 6c 69 >lastValue.pc,li
4fa0: 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b nkPtr->bytes);.+
4fb0: 09 20 20 20 20 62 72 65 61 6b 3b 0a 2b 09 7d 0a . break;.+.}.
4fc0: 20 09 69 66 20 28 54 63 6c 5f 47 65 74 57 69 64 .if (Tcl_GetWid
4fd0: 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 eIntFromObj(inte
4fe0: 72 70 2c 20 76 61 6c 75 65 4f 62 6a 2c 20 26 76 rp, valueObj, &v
4ff0: 61 6c 75 65 57 69 64 65 29 20 21 3d 20 54 43 4c alueWide) != TCL
5000: 5f 4f 4b 0a 20 09 09 7c 7c 20 76 61 6c 75 65 57 _OK. ..|| valueW
5010: 69 64 65 20 3c 20 4c 4f 4e 47 5f 4d 49 4e 20 7c ide < LONG_MIN |
5020: 7c 20 76 61 6c 75 65 57 69 64 65 20 3e 20 4c 4f | valueWide > LO
5030: 4e 47 5f 4d 41 58 29 20 7b 0a 20 09 20 20 20 20 NG_MAX) {. .
5040: 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 Tcl_ObjSetVar2(i
5050: 6e 74 65 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e nterp, linkPtr->
5060: 76 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f varName, NULL, O
5070: 62 6a 56 61 6c 75 65 28 6c 69 6e 6b 50 74 72 29 bjValue(linkPtr)
5080: 2c 0a 40 40 20 2d 34 38 34 2c 36 20 2b 38 32 37 ,.@@ -484,6 +827
5090: 2c 32 33 20 40 40 0a 20 09 62 72 65 61 6b 3b 0a ,23 @@. .break;.
50a0: 20 0a 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f . case TCL_
50b0: 4c 49 4e 4b 5f 55 4c 4f 4e 47 3a 0a 2b 09 69 66 LINK_ULONG:.+.if
50c0: 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 (linkPtr->flags
50d0: 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 & LINK_ALLOC_LA
50e0: 53 54 29 20 7b 0a 2b 09 20 20 20 20 69 66 20 28 ST) {.+. if (
50f0: 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c Tcl_ListObjGetEl
5100: 65 6d 65 6e 74 73 28 69 6e 74 65 72 70 2c 76 61 ements(interp,va
5110: 6c 75 65 4f 62 6a 2c 26 6f 62 6a 63 2c 26 6f 62 lueObj,&objc,&ob
5120: 6a 76 29 3d 3d 54 43 4c 5f 45 52 52 4f 52 0a 2b jv)==TCL_ERROR.+
5130: 09 09 7c 7c 20 6f 62 6a 63 20 21 3d 20 6c 69 6e ..|| objc != lin
5140: 6b 50 74 72 2d 3e 62 79 74 65 73 2f 73 69 7a 65 kPtr->bytes/size
5150: 6f 66 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 of(unsigned long
5160: 29 29 20 7b 0a 2b 09 09 72 65 74 75 72 6e 20 22 )) {.+..return "
5170: 77 72 6f 6e 67 20 64 69 6d 65 6e 73 69 6f 6e 22 wrong dimension"
5180: 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 ;.+. }.+.
5190: 66 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 for (i=0; i < ob
51a0: 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09 69 66 jc; i++) {.+..if
51b0: 20 28 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 (Tcl_GetWideInt
51c0: 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 6f 62 6a FromObj(NULL,obj
51d0: 76 5b 69 5d 2c 26 76 61 6c 75 65 57 69 64 65 29 v[i],&valueWide)
51e0: 21 3d 20 54 43 4c 5f 4f 4b 0a 2b 09 09 09 7c 7c != TCL_OK.+...||
51f0: 20 76 61 6c 75 65 57 69 64 65 20 3c 20 30 20 7c valueWide < 0 |
5200: 7c 20 76 61 6c 75 65 57 69 64 65 20 3e 20 55 4c | valueWide > UL
5210: 4f 4e 47 5f 4d 41 58 29 20 7b 0a 2b 09 20 20 20 ONG_MAX) {.+.
5220: 20 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 Tcl_ObjSetV
5230: 61 72 32 28 69 6e 74 65 72 70 2c 20 6c 69 6e 6b ar2(interp, link
5240: 50 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e 55 Ptr->varName, NU
5250: 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e LL, ObjValue(lin
5260: 6b 50 74 72 29 2c 0a 2b 09 09 20 20 20 20 54 43 kPtr),.+.. TC
5270: 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a L_GLOBAL_ONLY);.
5280: 2b 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 +. re
5290: 74 75 72 6e 20 22 76 61 72 69 61 62 6c 65 20 61 turn "variable a
52a0: 72 72 61 79 20 6d 75 73 74 20 68 61 76 65 20 75 rray must have u
52b0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 76 61 6c nsigned long val
52c0: 75 65 22 3b 0a 2b 09 09 7d 0a 2b 09 09 6c 69 6e ue";.+..}.+..lin
52d0: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e kPtr->lastValue.
52e0: 70 75 6c 5b 69 5d 20 3d 20 28 75 6e 73 69 67 6e pul[i] = (unsign
52f0: 65 64 20 6c 6f 6e 67 29 76 61 6c 75 65 57 69 64 ed long)valueWid
5300: 65 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 e;.+. }.+.
5310: 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72 2d memcpy(linkPtr-
5320: 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72 2d 3e 6c >addr,linkPtr->l
5330: 61 73 74 56 61 6c 75 65 2e 70 63 2c 6c 69 6e 6b astValue.pc,link
5340: 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 20 Ptr->bytes);.+.
5350: 20 20 20 62 72 65 61 6b 3b 0a 2b 09 7d 0a 20 09 break;.+.}. .
5360: 69 66 20 28 54 63 6c 5f 47 65 74 57 69 64 65 49 if (Tcl_GetWideI
5370: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 ntFromObj(interp
5380: 2c 20 76 61 6c 75 65 4f 62 6a 2c 20 26 76 61 6c , valueObj, &val
5390: 75 65 57 69 64 65 29 20 21 3d 20 54 43 4c 5f 4f ueWide) != TCL_O
53a0: 4b 0a 20 09 09 7c 7c 20 76 61 6c 75 65 57 69 64 K. ..|| valueWid
53b0: 65 20 3c 20 30 20 7c 7c 20 28 54 63 6c 5f 57 69 e < 0 || (Tcl_Wi
53c0: 64 65 55 49 6e 74 29 20 76 61 6c 75 65 57 69 64 deUInt) valueWid
53d0: 65 20 3e 20 55 4c 4f 4e 47 5f 4d 41 58 29 20 7b e > ULONG_MAX) {
53e0: 0a 20 09 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 . . Tcl_ObjSe
53f0: 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6c 69 tVar2(interp, li
5400: 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 nkPtr->varName,
5410: 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c NULL, ObjValue(l
5420: 69 6e 6b 50 74 72 29 2c 0a 40 40 20 2d 34 39 38 inkPtr),.@@ -498
5430: 2c 37 20 2b 38 35 38 2c 32 35 20 40 40 0a 20 09 ,7 +858,25 @@. .
5440: 2f 2a 0a 20 09 20 2a 20 46 49 58 4d 45 3a 20 72 /*. . * FIXME: r
5450: 65 70 72 65 73 65 6e 74 20 61 73 20 61 20 62 69 epresent as a bi
5460: 67 6e 75 6d 2e 0a 20 09 20 2a 2f 0a 2d 09 69 66 gnum.. . */.-.if
5470: 20 28 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 (Tcl_GetWideInt
5480: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 FromObj(interp,
5490: 76 61 6c 75 65 4f 62 6a 2c 20 26 76 61 6c 75 65 valueObj, &value
54a0: 57 69 64 65 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 Wide) != TCL_OK)
54b0: 20 7b 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74 72 {.+.if (linkPtr
54c0: 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f 41 ->flags & LINK_A
54d0: 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 LLOC_LAST) {.+.
54e0: 20 20 20 69 66 20 28 54 63 6c 5f 4c 69 73 74 4f if (Tcl_ListO
54f0: 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e bjGetElements(in
5500: 74 65 72 70 2c 76 61 6c 75 65 4f 62 6a 2c 26 6f terp,valueObj,&o
5510: 62 6a 63 2c 26 6f 62 6a 76 29 3d 3d 54 43 4c 5f bjc,&objv)==TCL_
5520: 45 52 52 4f 52 0a 2b 09 09 7c 7c 20 6f 62 6a 63 ERROR.+..|| objc
5530: 20 21 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 != linkPtr->byt
5540: 65 73 2f 73 69 7a 65 6f 66 28 54 63 6c 5f 57 69 es/sizeof(Tcl_Wi
5550: 64 65 55 49 6e 74 29 29 20 7b 0a 2b 09 09 72 65 deUInt)) {.+..re
5560: 74 75 72 6e 20 22 77 72 6f 6e 67 20 64 69 6d 65 turn "wrong dime
5570: 6e 73 69 6f 6e 22 3b 0a 2b 09 20 20 20 20 7d 0a nsion";.+. }.
5580: 2b 09 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 +. for (i=0;
5590: 69 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b i < objc; i++) {
55a0: 0a 2b 09 09 69 66 20 28 54 63 6c 5f 47 65 74 57 .+..if (Tcl_GetW
55b0: 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55 ideIntFromObj(NU
55c0: 4c 4c 2c 6f 62 6a 76 5b 69 5d 2c 26 76 61 6c 75 LL,objv[i],&valu
55d0: 65 57 69 64 65 29 21 3d 20 54 43 4c 5f 4f 4b 0a eWide)!= TCL_OK.
55e0: 2b 09 09 09 7c 7c 20 76 61 6c 75 65 57 69 64 65 +...|| valueWide
55f0: 20 3c 20 30 29 20 7b 0a 2b 09 20 20 20 20 20 20 < 0) {.+.
5600: 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 Tcl_ObjSetVar2
5610: 28 69 6e 74 65 72 70 2c 20 6c 69 6e 6b 50 74 72 (interp, linkPtr
5620: 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c 2c ->varName, NULL,
5630: 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e 6b 50 74 ObjValue(linkPt
5640: 72 29 2c 0a 2b 09 09 20 20 20 20 54 43 4c 5f 47 r),.+.. TCL_G
5650: 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 2b 09 20 LOBAL_ONLY);.+.
5660: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
5670: 6e 20 22 76 61 72 69 61 62 6c 65 20 61 72 72 61 n "variable arra
5680: 79 20 6d 75 73 74 20 68 61 76 65 20 75 6e 73 69 y must have unsi
5690: 67 6e 65 64 20 77 69 64 65 20 69 6e 74 20 76 61 gned wide int va
56a0: 6c 75 65 22 3b 0a 2b 09 09 7d 0a 2b 09 09 6c 69 lue";.+..}.+..li
56b0: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 nkPtr->lastValue
56c0: 2e 70 75 77 5b 69 5d 20 3d 20 28 54 63 6c 5f 57 .puw[i] = (Tcl_W
56d0: 69 64 65 55 49 6e 74 29 76 61 6c 75 65 57 69 64 ideUInt)valueWid
56e0: 65 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 e;.+. }.+.
56f0: 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72 2d memcpy(linkPtr-
5700: 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72 2d 3e 6c >addr,linkPtr->l
5710: 61 73 74 56 61 6c 75 65 2e 70 63 2c 6c 69 6e 6b astValue.pc,link
5720: 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 20 Ptr->bytes);.+.
5730: 20 20 20 62 72 65 61 6b 3b 0a 2b 09 7d 0a 2b 09 break;.+.}.+.
5740: 69 66 20 28 54 63 6c 5f 47 65 74 57 69 64 65 49 if (Tcl_GetWideI
5750: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 ntFromObj(interp
5760: 2c 20 76 61 6c 75 65 4f 62 6a 2c 20 26 76 61 6c , valueObj, &val
5770: 75 65 57 69 64 65 29 20 21 3d 20 54 43 4c 5f 4f ueWide) != TCL_O
5780: 4b 0a 2b 09 09 7c 7c 20 76 61 6c 75 65 57 69 64 K.+..|| valueWid
5790: 65 20 3c 20 30 29 20 7b 0a 20 09 20 20 20 20 54 e < 0) {. . T
57a0: 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e cl_ObjSetVar2(in
57b0: 74 65 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 terp, linkPtr->v
57c0: 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62 arName, NULL, Ob
57d0: 6a 56 61 6c 75 65 28 6c 69 6e 6b 50 74 72 29 2c jValue(linkPtr),
57e0: 0a 20 09 09 20 20 20 20 54 43 4c 5f 47 4c 4f 42 . .. TCL_GLOB
57f0: 41 4c 5f 4f 4e 4c 59 29 3b 0a 20 09 20 20 20 20 AL_ONLY);. .
5800: 72 65 74 75 72 6e 20 22 76 61 72 69 61 62 6c 65 return "variable
5810: 20 6d 75 73 74 20 68 61 76 65 20 75 6e 73 69 67 must have unsig
5820: 6e 65 64 20 77 69 64 65 20 69 6e 74 20 76 61 6c ned wide int val
5830: 75 65 22 3b 0a 40 40 20 2d 35 30 38 2c 36 20 2b ue";.@@ -508,6 +
5840: 38 38 36 2c 32 33 20 40 40 0a 20 09 62 72 65 61 886,23 @@. .brea
5850: 6b 3b 0a 20 0a 20 20 20 20 20 63 61 73 65 20 54 k;. . case T
5860: 43 4c 5f 4c 49 4e 4b 5f 46 4c 4f 41 54 3a 0a 2b CL_LINK_FLOAT:.+
5870: 09 69 66 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c .if (linkPtr->fl
5880: 61 67 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 ags & LINK_ALLOC
5890: 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 20 20 20 69 _LAST) {.+. i
58a0: 66 20 28 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 f (Tcl_ListObjGe
58b0: 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74 65 72 70 tElements(interp
58c0: 2c 76 61 6c 75 65 4f 62 6a 2c 26 6f 62 6a 63 2c ,valueObj,&objc,
58d0: 26 6f 62 6a 76 29 3d 3d 54 43 4c 5f 45 52 52 4f &objv)==TCL_ERRO
58e0: 52 0a 2b 09 09 7c 7c 20 6f 62 6a 63 20 21 3d 20 R.+..|| objc !=
58f0: 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 2f 73 linkPtr->bytes/s
5900: 69 7a 65 6f 66 28 66 6c 6f 61 74 29 29 20 7b 0a izeof(float)) {.
5910: 2b 09 09 72 65 74 75 72 6e 20 22 77 72 6f 6e 67 +..return "wrong
5920: 20 64 69 6d 65 6e 73 69 6f 6e 22 3b 0a 2b 09 20 dimension";.+.
5930: 20 20 20 7d 0a 2b 09 20 20 20 20 66 6f 72 20 28 }.+. for (
5940: 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 69 i=0; i < objc; i
5950: 2b 2b 29 20 7b 0a 2b 09 09 69 66 20 28 54 63 6c ++) {.+..if (Tcl
5960: 5f 47 65 74 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 _GetDoubleFromOb
5970: 6a 28 69 6e 74 65 72 70 2c 6f 62 6a 76 5b 69 5d j(interp,objv[i]
5980: 2c 26 76 61 6c 75 65 44 6f 75 62 6c 65 29 21 3d ,&valueDouble)!=
5990: 20 54 43 4c 5f 4f 4b 0a 2b 09 09 09 7c 7c 20 76 TCL_OK.+...|| v
59a0: 61 6c 75 65 44 6f 75 62 6c 65 20 3c 20 46 4c 54 alueDouble < FLT
59b0: 5f 4d 49 4e 20 7c 7c 20 76 61 6c 75 65 44 6f 75 _MIN || valueDou
59c0: 62 6c 65 20 3e 20 46 4c 54 5f 4d 41 58 29 20 7b ble > FLT_MAX) {
59d0: 0a 2b 09 20 20 20 20 20 20 20 20 54 63 6c 5f 4f .+. Tcl_O
59e0: 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 bjSetVar2(interp
59f0: 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 , linkPtr->varNa
5a00: 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c me, NULL, ObjVal
5a10: 75 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b 09 09 ue(linkPtr),.+..
5a20: 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f TCL_GLOBAL_O
5a30: 4e 4c 59 29 3b 0a 2b 09 20 20 20 20 20 20 20 20 NLY);.+.
5a40: 20 20 20 20 72 65 74 75 72 6e 20 22 76 61 72 69 return "vari
5a50: 61 62 6c 65 20 61 72 72 61 79 20 6d 75 73 74 20 able array must
5a60: 68 61 76 65 20 66 6c 6f 61 74 20 76 61 6c 75 65 have float value
5a70: 22 3b 0a 2b 09 09 7d 0a 2b 09 09 6c 69 6e 6b 50 ";.+..}.+..linkP
5a80: 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 66 tr->lastValue.pf
5a90: 5b 69 5d 20 3d 20 28 66 6c 6f 61 74 29 76 61 6c [i] = (float)val
5aa0: 75 65 44 6f 75 62 6c 65 3b 0a 2b 09 20 20 20 20 ueDouble;.+.
5ab0: 7d 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 6c }.+. memcpy(l
5ac0: 69 6e 6b 50 74 72 2d 3e 61 64 64 72 2c 6c 69 6e inkPtr->addr,lin
5ad0: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e kPtr->lastValue.
5ae0: 70 63 2c 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 pc,linkPtr->byte
5af0: 73 29 3b 0a 2b 09 20 20 20 20 62 72 65 61 6b 3b s);.+. break;
5b00: 0a 2b 09 7d 0a 20 09 69 66 20 28 54 63 6c 5f 47 .+.}. .if (Tcl_G
5b10: 65 74 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28 etDoubleFromObj(
5b20: 69 6e 74 65 72 70 2c 20 76 61 6c 75 65 4f 62 6a interp, valueObj
5b30: 2c 20 26 76 61 6c 75 65 44 6f 75 62 6c 65 29 20 , &valueDouble)
5b40: 21 3d 20 54 43 4c 5f 4f 4b 0a 20 09 09 7c 7c 20 != TCL_OK. ..||
5b50: 76 61 6c 75 65 44 6f 75 62 6c 65 20 3c 20 2d 46 valueDouble < -F
5b60: 4c 54 5f 4d 41 58 20 7c 7c 20 76 61 6c 75 65 44 LT_MAX || valueD
5b70: 6f 75 62 6c 65 20 3e 20 46 4c 54 5f 4d 41 58 29 ouble > FLT_MAX)
5b80: 20 7b 0a 20 09 20 20 20 20 54 63 6c 5f 4f 62 6a {. . Tcl_Obj
5b90: 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 SetVar2(interp,
5ba0: 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 linkPtr->varName
5bb0: 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 , NULL, ObjValue
5bc0: 28 6c 69 6e 6b 50 74 72 29 2c 0a 40 40 20 2d 35 (linkPtr),.@@ -5
5bd0: 32 32 2c 31 31 20 2b 39 31 37 2c 33 39 20 40 40 22,11 +917,39 @@
5be0: 0a 20 09 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47 . .value = Tcl_G
5bf0: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 etStringFromObj(
5c00: 76 61 6c 75 65 4f 62 6a 2c 20 26 76 61 6c 75 65 valueObj, &value
5c10: 4c 65 6e 67 74 68 29 3b 0a 20 09 76 61 6c 75 65 Length);. .value
5c20: 4c 65 6e 67 74 68 2b 2b 3b 0a 20 09 70 70 20 3d Length++;. .pp =
5c30: 20 28 63 68 61 72 20 2a 2a 29 20 6c 69 6e 6b 50 (char **) linkP
5c40: 74 72 2d 3e 61 64 64 72 3b 0a 2d 0a 20 09 2a 70 tr->addr;.-. .*p
5c50: 70 20 3d 20 63 6b 72 65 61 6c 6c 6f 63 28 2a 70 p = ckrealloc(*p
5c60: 70 2c 20 76 61 6c 75 65 4c 65 6e 67 74 68 29 3b p, valueLength);
5c70: 0a 20 09 6d 65 6d 63 70 79 28 2a 70 70 2c 20 76 . .memcpy(*pp, v
5c80: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 29 alue, (unsigned)
5c90: 20 76 61 6c 75 65 4c 65 6e 67 74 68 29 3b 0a 20 valueLength);.
5ca0: 09 62 72 65 61 6b 3b 0a 20 0a 2b 20 20 20 20 63 .break;. .+ c
5cb0: 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 43 48 41 ase TCL_LINK_CHA
5cc0: 52 53 3a 0a 2b 09 76 61 6c 75 65 20 3d 20 28 63 RS:.+.value = (c
5cd0: 68 61 72 20 2a 29 54 63 6c 5f 47 65 74 53 74 72 har *)Tcl_GetStr
5ce0: 69 6e 67 46 72 6f 6d 4f 62 6a 28 76 61 6c 75 65 ingFromObj(value
5cf0: 4f 62 6a 2c 20 26 76 61 6c 75 65 4c 65 6e 67 74 Obj, &valueLengt
5d00: 68 29 3b 0a 2b 09 76 61 6c 75 65 4c 65 6e 67 74 h);.+.valueLengt
5d10: 68 2b 2b 3b 2f 2a 20 69 6e 63 6c 75 64 65 20 65 h++;/* include e
5d20: 6e 64 20 6f 66 20 73 74 72 69 6e 67 20 63 68 61 nd of string cha
5d30: 72 20 2a 2f 0a 2b 09 69 66 20 28 76 61 6c 75 65 r */.+.if (value
5d40: 4c 65 6e 67 74 68 20 3e 20 6c 69 6e 6b 50 74 72 Length > linkPtr
5d50: 2d 3e 62 79 74 65 73 29 20 7b 0a 2b 09 20 20 20 ->bytes) {.+.
5d60: 20 72 65 74 75 72 6e 20 22 77 72 6f 6e 67 20 73 return "wrong s
5d70: 69 7a 65 20 6f 66 20 63 68 61 72 2a 20 76 61 6c ize of char* val
5d80: 75 65 22 3b 0a 2b 09 7d 0a 2b 09 69 66 20 28 6c ue";.+.}.+.if (l
5d90: 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 inkPtr->flags &
5da0: 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 LINK_ALLOC_LAST)
5db0: 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 {.+. memcpy(
5dc0: 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c linkPtr->lastVal
5dd0: 75 65 2e 70 63 2c 20 76 61 6c 75 65 2c 20 28 75 ue.pc, value, (u
5de0: 6e 73 69 67 6e 65 64 29 20 76 61 6c 75 65 4c 65 nsigned) valueLe
5df0: 6e 67 74 68 29 3b 0a 2b 09 20 20 20 20 6d 65 6d ngth);.+. mem
5e00: 63 70 79 28 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 cpy(linkPtr->add
5e10: 72 2c 20 76 61 6c 75 65 2c 20 28 75 6e 73 69 67 r, value, (unsig
5e20: 6e 65 64 29 20 76 61 6c 75 65 4c 65 6e 67 74 68 ned) valueLength
5e30: 29 3b 0a 2b 09 7d 20 65 6c 73 65 20 7b 0a 2b 09 );.+.} else {.+.
5e40: 20 20 20 20 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 linkPtr->las
5e50: 74 56 61 6c 75 65 2e 63 20 3d 20 27 5c 30 27 3b tValue.c = '\0';
5e60: 0a 2b 09 20 20 20 20 4c 69 6e 6b 65 64 56 61 72 .+. LinkedVar
5e70: 28 63 68 61 72 29 20 3d 20 6c 69 6e 6b 50 74 72 (char) = linkPtr
5e80: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 63 3b 0a 2b ->lastValue.c;.+
5e90: 09 7d 0a 2b 09 62 72 65 61 6b 3b 0a 2b 0a 2b 20 .}.+.break;.+.+
5ea0: 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b case TCL_LINK
5eb0: 5f 42 49 4e 41 52 59 3a 0a 2b 09 76 61 6c 75 65 _BINARY:.+.value
5ec0: 20 3d 20 28 63 68 61 72 20 2a 29 54 63 6c 5f 47 = (char *)Tcl_G
5ed0: 65 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f etByteArrayFromO
5ee0: 62 6a 28 76 61 6c 75 65 4f 62 6a 2c 20 26 76 61 bj(valueObj, &va
5ef0: 6c 75 65 4c 65 6e 67 74 68 29 3b 0a 2b 09 69 66 lueLength);.+.if
5f00: 20 28 76 61 6c 75 65 4c 65 6e 67 74 68 20 21 3d (valueLength !=
5f10: 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 linkPtr->bytes)
5f20: 20 7b 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 {.+. return
5f30: 22 77 72 6f 6e 67 20 73 69 7a 65 20 6f 66 20 62 "wrong size of b
5f40: 69 6e 61 72 79 20 76 61 6c 75 65 22 3b 0a 2b 09 inary value";.+.
5f50: 7d 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74 72 2d }.+.if (linkPtr-
5f60: 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f 41 4c >flags & LINK_AL
5f70: 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 20 LOC_LAST) {.+.
5f80: 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72 memcpy(linkPtr
5f90: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c 20 ->lastValue.pc,
5fa0: 76 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 value, (unsigned
5fb0: 29 20 76 61 6c 75 65 4c 65 6e 67 74 68 29 3b 0a ) valueLength);.
5fc0: 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e +. memcpy(lin
5fd0: 6b 50 74 72 2d 3e 61 64 64 72 2c 20 76 61 6c 75 kPtr->addr, valu
5fe0: 65 2c 20 28 75 6e 73 69 67 6e 65 64 29 20 76 61 e, (unsigned) va
5ff0: 6c 75 65 4c 65 6e 67 74 68 29 3b 0a 2b 09 7d 20 lueLength);.+.}
6000: 65 6c 73 65 20 7b 0a 2b 09 20 20 20 20 6c 69 6e else {.+. lin
6010: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e kPtr->lastValue.
6020: 75 63 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 uc = (unsigned c
6030: 68 61 72 29 20 2a 76 61 6c 75 65 3b 0a 2b 09 20 har) *value;.+.
6040: 20 20 20 4c 69 6e 6b 65 64 56 61 72 28 75 6e 73 LinkedVar(uns
6050: 69 67 6e 65 64 20 63 68 61 72 29 20 3d 20 6c 69 igned char) = li
6060: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 nkPtr->lastValue
6070: 2e 75 63 3b 0a 2b 09 7d 0a 2b 09 62 72 65 61 6b .uc;.+.}.+.break
6080: 3b 0a 2b 0a 20 20 20 20 20 64 65 66 61 75 6c 74 ;.+. default
6090: 3a 0a 20 09 72 65 74 75 72 6e 20 22 69 6e 74 65 :. .return "inte
60a0: 72 6e 61 6c 20 65 72 72 6f 72 3a 20 62 61 64 20 rnal error: bad
60b0: 6c 69 6e 6b 65 64 20 76 61 72 69 61 62 6c 65 20 linked variable
60c0: 74 79 70 65 22 3b 0a 20 20 20 20 20 7d 0a 40 40 type";. }.@@
60d0: 20 2d 35 35 37 2c 34 39 20 2b 39 38 30 2c 31 36 -557,49 +980,16
60e0: 39 20 40 40 0a 20 7b 0a 20 20 20 20 20 63 68 61 9 @@. {. cha
60f0: 72 20 2a 70 3b 0a 20 20 20 20 20 54 63 6c 5f 4f r *p;. Tcl_O
6100: 62 6a 20 2a 72 65 73 75 6c 74 4f 62 6a 3b 0a 2b bj *resultObj;.+
6110: 20 20 20 20 69 6e 74 20 6f 62 6a 63 3b 0a 2b 20 int objc;.+
6120: 20 20 20 73 74 61 74 69 63 20 54 63 6c 5f 4f 62 static Tcl_Ob
6130: 6a 20 2a 2a 6f 62 6a 76 20 3d 20 4e 55 4c 4c 3b j **objv = NULL;
6140: 0a 2b 20 20 20 20 69 6e 74 20 69 3b 0a 20 0a 20 .+ int i;. .
6150: 20 20 20 20 73 77 69 74 63 68 20 28 6c 69 6e 6b switch (link
6160: 50 74 72 2d 3e 74 79 70 65 29 20 7b 0a 20 20 20 Ptr->type) {.
6170: 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f case TCL_LINK_
6180: 49 4e 54 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 INT:.+.if (linkP
6190: 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b tr->flags & LINK
61a0: 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b _ALLOC_LAST) {.+
61b0: 09 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b . memcpy(link
61c0: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 Ptr->lastValue.p
61d0: 63 2c 20 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 c, linkPtr->addr
61e0: 2c 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 , linkPtr->bytes
61f0: 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 63 20 3d 20 );.+. objc =
6200: 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 2f 73 linkPtr->bytes/s
6210: 69 7a 65 6f 66 28 69 6e 74 29 3b 0a 2b 09 20 20 izeof(int);.+.
6220: 20 20 6f 62 6a 76 20 3d 20 28 54 63 6c 5f 4f 62 objv = (Tcl_Ob
6230: 6a 20 2a 2a 29 20 63 6b 72 65 61 6c 6c 6f 63 28 j **) ckrealloc(
6240: 28 63 68 61 72 20 2a 29 6f 62 6a 76 2c 20 6f 62 (char *)objv, ob
6250: 6a 63 2a 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 jc*sizeof(Tcl_Ob
6260: 6a 2a 29 29 3b 0a 2b 09 20 20 20 20 66 6f 72 20 j*));.+. for
6270: 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 (i=0; i < objc;
6280: 69 2b 2b 29 20 7b 0a 2b 09 09 6f 62 6a 76 5b 69 i++) {.+..objv[i
6290: 5d 20 3d 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 ] = Tcl_NewIntOb
62a0: 6a 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 j(linkPtr->lastV
62b0: 61 6c 75 65 2e 70 69 5b 69 5d 29 3b 0a 2b 09 20 alue.pi[i]);.+.
62c0: 20 20 20 7d 0a 2b 09 20 20 20 20 72 65 74 75 72 }.+. retur
62d0: 6e 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a n Tcl_NewListObj
62e0: 28 6f 62 6a 63 2c 6f 62 6a 76 29 3b 0a 2b 09 7d (objc,objv);.+.}
62f0: 0a 20 09 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 . .linkPtr->last
6300: 56 61 6c 75 65 2e 69 20 3d 20 4c 69 6e 6b 65 64 Value.i = Linked
6310: 56 61 72 28 69 6e 74 29 3b 0a 20 09 72 65 74 75 Var(int);. .retu
6320: 72 6e 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a rn Tcl_NewIntObj
6330: 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 (linkPtr->lastVa
6340: 6c 75 65 2e 69 29 3b 0a 20 20 20 20 20 63 61 73 lue.i);. cas
6350: 65 20 54 43 4c 5f 4c 49 4e 4b 5f 57 49 44 45 5f e TCL_LINK_WIDE_
6360: 49 4e 54 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 INT:.+.if (linkP
6370: 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b tr->flags & LINK
6380: 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b _ALLOC_LAST) {.+
6390: 09 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b . memcpy(link
63a0: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 Ptr->lastValue.p
63b0: 63 2c 20 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 c, linkPtr->addr
63c0: 2c 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 , linkPtr->bytes
63d0: 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 63 20 3d 20 );.+. objc =
63e0: 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 2f 73 linkPtr->bytes/s
63f0: 69 7a 65 6f 66 28 54 63 6c 5f 57 69 64 65 49 6e izeof(Tcl_WideIn
6400: 74 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 76 20 3d t);.+. objv =
6410: 20 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20 63 6b (Tcl_Obj **) ck
6420: 72 65 61 6c 6c 6f 63 28 28 63 68 61 72 20 2a 29 realloc((char *)
6430: 6f 62 6a 76 2c 20 6f 62 6a 63 2a 73 69 7a 65 6f objv, objc*sizeo
6440: 66 28 54 63 6c 5f 4f 62 6a 2a 29 29 3b 0a 2b 09 f(Tcl_Obj*));.+.
6450: 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 20 for (i=0; i
6460: 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b < objc; i++) {.+
6470: 09 09 6f 62 6a 76 5b 69 5d 20 3d 20 54 63 6c 5f ..objv[i] = Tcl_
6480: 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 6c 69 NewWideIntObj(li
6490: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 nkPtr->lastValue
64a0: 2e 70 77 5b 69 5d 29 3b 0a 2b 09 20 20 20 20 7d .pw[i]);.+. }
64b0: 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54 63 .+. return Tc
64c0: 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a 28 6f 62 6a l_NewListObj(obj
64d0: 63 2c 6f 62 6a 76 29 3b 0a 2b 09 7d 0a 20 09 6c c,objv);.+.}. .l
64e0: 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 inkPtr->lastValu
64f0: 65 2e 77 20 3d 20 4c 69 6e 6b 65 64 56 61 72 28 e.w = LinkedVar(
6500: 54 63 6c 5f 57 69 64 65 49 6e 74 29 3b 0a 20 09 Tcl_WideInt);. .
6510: 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 57 69 return Tcl_NewWi
6520: 64 65 49 6e 74 4f 62 6a 28 6c 69 6e 6b 50 74 72 deIntObj(linkPtr
6530: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 77 29 3b 0a ->lastValue.w);.
6540: 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 case TCL_LI
6550: 4e 4b 5f 44 4f 55 42 4c 45 3a 0a 2b 09 69 66 20 NK_DOUBLE:.+.if
6560: 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 (linkPtr->flags
6570: 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 & LINK_ALLOC_LAS
6580: 54 29 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70 T) {.+. memcp
6590: 79 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 y(linkPtr->lastV
65a0: 61 6c 75 65 2e 70 63 2c 20 6c 69 6e 6b 50 74 72 alue.pc, linkPtr
65b0: 2d 3e 61 64 64 72 2c 20 6c 69 6e 6b 50 74 72 2d ->addr, linkPtr-
65c0: 3e 62 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 6f >bytes);.+. o
65d0: 62 6a 63 20 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 bjc = linkPtr->b
65e0: 79 74 65 73 2f 73 69 7a 65 6f 66 28 64 6f 75 62 ytes/sizeof(doub
65f0: 6c 65 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 76 20 le);.+. objv
6600: 3d 20 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20 63 = (Tcl_Obj **) c
6610: 6b 72 65 61 6c 6c 6f 63 28 28 63 68 61 72 20 2a krealloc((char *
6620: 29 6f 62 6a 76 2c 20 6f 62 6a 63 2a 73 69 7a 65 )objv, objc*size
6630: 6f 66 28 54 63 6c 5f 4f 62 6a 2a 29 29 3b 0a 2b of(Tcl_Obj*));.+
6640: 09 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 . for (i=0; i
6650: 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a < objc; i++) {.
6660: 2b 09 09 6f 62 6a 76 5b 69 5d 20 3d 20 54 63 6c +..objv[i] = Tcl
6670: 5f 4e 65 77 44 6f 75 62 6c 65 4f 62 6a 28 6c 69 _NewDoubleObj(li
6680: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 nkPtr->lastValue
6690: 2e 70 64 5b 69 5d 29 3b 0a 2b 09 20 20 20 20 7d .pd[i]);.+. }
66a0: 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54 63 .+. return Tc
66b0: 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a 28 6f 62 6a l_NewListObj(obj
66c0: 63 2c 6f 62 6a 76 29 3b 0a 2b 09 7d 0a 20 09 6c c,objv);.+.}. .l
66d0: 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 inkPtr->lastValu
66e0: 65 2e 64 20 3d 20 4c 69 6e 6b 65 64 56 61 72 28 e.d = LinkedVar(
66f0: 64 6f 75 62 6c 65 29 3b 0a 20 09 72 65 74 75 72 double);. .retur
6700: 6e 20 54 63 6c 5f 4e 65 77 44 6f 75 62 6c 65 4f n Tcl_NewDoubleO
6710: 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 bj(linkPtr->last
6720: 56 61 6c 75 65 2e 64 29 3b 0a 20 20 20 20 20 63 Value.d);. c
6730: 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 42 4f 4f ase TCL_LINK_BOO
6740: 4c 45 41 4e 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b LEAN:.+.if (link
6750: 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e Ptr->flags & LIN
6760: 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a K_ALLOC_LAST) {.
6770: 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e +. memcpy(lin
6780: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e kPtr->lastValue.
6790: 70 63 2c 20 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 pc, linkPtr->add
67a0: 72 2c 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 r, linkPtr->byte
67b0: 73 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 63 20 3d s);.+. objc =
67c0: 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 2f linkPtr->bytes/
67d0: 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0a 2b 09 20 sizeof(int);.+.
67e0: 20 20 20 6f 62 6a 76 20 3d 20 28 54 63 6c 5f 4f objv = (Tcl_O
67f0: 62 6a 20 2a 2a 29 20 63 6b 72 65 61 6c 6c 6f 63 bj **) ckrealloc
6800: 28 28 63 68 61 72 20 2a 29 6f 62 6a 76 2c 20 6f ((char *)objv, o
6810: 62 6a 63 2a 73 69 7a 65 6f 66 28 54 63 6c 5f 4f bjc*sizeof(Tcl_O
6820: 62 6a 2a 29 29 3b 0a 2b 09 20 20 20 20 66 6f 72 bj*));.+. for
6830: 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b (i=0; i < objc;
6840: 20 69 2b 2b 29 20 7b 0a 2b 09 09 6f 62 6a 76 5b i++) {.+..objv[
6850: 69 5d 20 3d 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c i] = Tcl_NewBool
6860: 65 61 6e 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e eanObj(linkPtr->
6870: 6c 61 73 74 56 61 6c 75 65 2e 70 69 5b 69 5d 20 lastValue.pi[i]
6880: 21 3d 20 30 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b != 0);.+. }.+
6890: 09 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c 5f . return Tcl_
68a0: 4e 65 77 4c 69 73 74 4f 62 6a 28 6f 62 6a 63 2c NewListObj(objc,
68b0: 6f 62 6a 76 29 3b 0a 2b 09 7d 0a 20 09 6c 69 6e objv);.+.}. .lin
68c0: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e kPtr->lastValue.
68d0: 69 20 3d 20 4c 69 6e 6b 65 64 56 61 72 28 69 6e i = LinkedVar(in
68e0: 74 29 3b 0a 20 09 72 65 74 75 72 6e 20 54 63 6c t);. .return Tcl
68f0: 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 6c _NewBooleanObj(l
6900: 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 inkPtr->lastValu
6910: 65 2e 69 20 21 3d 20 30 29 3b 0a 20 20 20 20 20 e.i != 0);.
6920: 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 43 48 case TCL_LINK_CH
6930: 41 52 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74 AR:.+.if (linkPt
6940: 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f r->flags & LINK_
6950: 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 ALLOC_LAST) {.+.
6960: 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 memcpy(linkP
6970: 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 tr->lastValue.pc
6980: 2c 20 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 2c , linkPtr->addr,
6990: 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 linkPtr->bytes)
69a0: 3b 0a 2b 09 20 20 20 20 6f 62 6a 63 20 3d 20 6c ;.+. objc = l
69b0: 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 2f 73 69 inkPtr->bytes/si
69c0: 7a 65 6f 66 28 63 68 61 72 29 3b 0a 2b 09 20 20 zeof(char);.+.
69d0: 20 20 6f 62 6a 76 20 3d 20 28 54 63 6c 5f 4f 62 objv = (Tcl_Ob
69e0: 6a 20 2a 2a 29 20 63 6b 72 65 61 6c 6c 6f 63 28 j **) ckrealloc(
69f0: 28 63 68 61 72 20 2a 29 6f 62 6a 76 2c 20 6f 62 (char *)objv, ob
6a00: 6a 63 2a 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 jc*sizeof(Tcl_Ob
6a10: 6a 2a 29 29 3b 0a 2b 09 20 20 20 20 66 6f 72 20 j*));.+. for
6a20: 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 (i=0; i < objc;
6a30: 69 2b 2b 29 20 7b 0a 2b 09 09 6f 62 6a 76 5b 69 i++) {.+..objv[i
6a40: 5d 20 3d 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 ] = Tcl_NewIntOb
6a50: 6a 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 j(linkPtr->lastV
6a60: 61 6c 75 65 2e 70 63 5b 69 5d 29 3b 0a 2b 09 20 alue.pc[i]);.+.
6a70: 20 20 20 7d 0a 2b 09 20 20 20 20 72 65 74 75 72 }.+. retur
6a80: 6e 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a n Tcl_NewListObj
6a90: 28 6f 62 6a 63 2c 6f 62 6a 76 29 3b 0a 2b 09 7d (objc,objv);.+.}
6aa0: 0a 20 09 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 . .linkPtr->last
6ab0: 56 61 6c 75 65 2e 63 20 3d 20 4c 69 6e 6b 65 64 Value.c = Linked
6ac0: 56 61 72 28 63 68 61 72 29 3b 0a 20 09 72 65 74 Var(char);. .ret
6ad0: 75 72 6e 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 urn Tcl_NewIntOb
6ae0: 6a 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 j(linkPtr->lastV
6af0: 61 6c 75 65 2e 63 29 3b 0a 20 20 20 20 20 63 61 alue.c);. ca
6b00: 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 55 43 48 41 se TCL_LINK_UCHA
6b10: 52 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74 72 R:.+.if (linkPtr
6b20: 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f 41 ->flags & LINK_A
6b30: 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 LLOC_LAST) {.+.
6b40: 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 memcpy(linkPt
6b50: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c r->lastValue.pc,
6b60: 20 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 2c 20 linkPtr->addr,
6b70: 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b linkPtr->bytes);
6b80: 0a 2b 09 20 20 20 20 6f 62 6a 63 20 3d 20 6c 69 .+. objc = li
6b90: 6e 6b 50 74 72 2d 3e 62 79 74 65 73 2f 73 69 7a nkPtr->bytes/siz
6ba0: 65 6f 66 28 75 6e 73 69 67 6e 65 64 20 63 68 61 eof(unsigned cha
6bb0: 72 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 76 20 3d r);.+. objv =
6bc0: 20 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20 63 6b (Tcl_Obj **) ck
6bd0: 72 65 61 6c 6c 6f 63 28 28 63 68 61 72 20 2a 29 realloc((char *)
6be0: 6f 62 6a 76 2c 20 6f 62 6a 63 2a 73 69 7a 65 6f objv, objc*sizeo
6bf0: 66 28 54 63 6c 5f 4f 62 6a 2a 29 29 3b 0a 2b 09 f(Tcl_Obj*));.+.
6c00: 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 20 for (i=0; i
6c10: 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b < objc; i++) {.+
6c20: 09 09 6f 62 6a 76 5b 69 5d 20 3d 20 54 63 6c 5f ..objv[i] = Tcl_
6c30: 4e 65 77 49 6e 74 4f 62 6a 28 6c 69 6e 6b 50 74 NewIntObj(linkPt
6c40: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 75 63 r->lastValue.puc
6c50: 5b 69 5d 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 [i]);.+. }.+.
6c60: 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c 5f 4e return Tcl_N
6c70: 65 77 4c 69 73 74 4f 62 6a 28 6f 62 6a 63 2c 6f ewListObj(objc,o
6c80: 62 6a 76 29 3b 0a 2b 09 7d 0a 20 09 6c 69 6e 6b bjv);.+.}. .link
6c90: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 75 Ptr->lastValue.u
6ca0: 63 20 3d 20 4c 69 6e 6b 65 64 56 61 72 28 75 6e c = LinkedVar(un
6cb0: 73 69 67 6e 65 64 20 63 68 61 72 29 3b 0a 20 09 signed char);. .
6cc0: 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 49 6e return Tcl_NewIn
6cd0: 74 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 tObj(linkPtr->la
6ce0: 73 74 56 61 6c 75 65 2e 75 63 29 3b 0a 20 20 20 stValue.uc);.
6cf0: 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f case TCL_LINK_
6d00: 53 48 4f 52 54 3a 0a 2b 09 69 66 20 28 6c 69 6e SHORT:.+.if (lin
6d10: 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 kPtr->flags & LI
6d20: 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b NK_ALLOC_LAST) {
6d30: 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 .+. memcpy(li
6d40: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 nkPtr->lastValue
6d50: 2e 70 63 2c 20 6c 69 6e 6b 50 74 72 2d 3e 61 64 .pc, linkPtr->ad
6d60: 64 72 2c 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 dr, linkPtr->byt
6d70: 65 73 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 63 20 es);.+. objc
6d80: 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 = linkPtr->bytes
6d90: 2f 73 69 7a 65 6f 66 28 73 68 6f 72 74 29 3b 0a /sizeof(short);.
6da0: 2b 09 20 20 20 20 6f 62 6a 76 20 3d 20 28 54 63 +. objv = (Tc
6db0: 6c 5f 4f 62 6a 20 2a 2a 29 20 63 6b 72 65 61 6c l_Obj **) ckreal
6dc0: 6c 6f 63 28 28 63 68 61 72 20 2a 29 6f 62 6a 76 loc((char *)objv
6dd0: 2c 20 6f 62 6a 63 2a 73 69 7a 65 6f 66 28 54 63 , objc*sizeof(Tc
6de0: 6c 5f 4f 62 6a 2a 29 29 3b 0a 2b 09 20 20 20 20 l_Obj*));.+.
6df0: 66 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 for (i=0; i < ob
6e00: 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09 6f 62 jc; i++) {.+..ob
6e10: 6a 76 5b 69 5d 20 3d 20 54 63 6c 5f 4e 65 77 49 jv[i] = Tcl_NewI
6e20: 6e 74 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e 6c ntObj(linkPtr->l
6e30: 61 73 74 56 61 6c 75 65 2e 70 73 5b 69 5d 29 3b astValue.ps[i]);
6e40: 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 72 .+. }.+. r
6e50: 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 4c 69 73 eturn Tcl_NewLis
6e60: 74 4f 62 6a 28 6f 62 6a 63 2c 6f 62 6a 76 29 3b tObj(objc,objv);
6e70: 0a 2b 09 7d 0a 20 09 6c 69 6e 6b 50 74 72 2d 3e .+.}. .linkPtr->
6e80: 6c 61 73 74 56 61 6c 75 65 2e 73 20 3d 20 4c 69 lastValue.s = Li
6e90: 6e 6b 65 64 56 61 72 28 73 68 6f 72 74 29 3b 0a nkedVar(short);.
6ea0: 20 09 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 .return Tcl_New
6eb0: 49 6e 74 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e IntObj(linkPtr->
6ec0: 6c 61 73 74 56 61 6c 75 65 2e 73 29 3b 0a 20 20 lastValue.s);.
6ed0: 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b case TCL_LINK
6ee0: 5f 55 53 48 4f 52 54 3a 0a 2b 09 69 66 20 28 6c _USHORT:.+.if (l
6ef0: 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 inkPtr->flags &
6f00: 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 LINK_ALLOC_LAST)
6f10: 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 {.+. memcpy(
6f20: 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c linkPtr->lastVal
6f30: 75 65 2e 70 63 2c 20 6c 69 6e 6b 50 74 72 2d 3e ue.pc, linkPtr->
6f40: 61 64 64 72 2c 20 6c 69 6e 6b 50 74 72 2d 3e 62 addr, linkPtr->b
6f50: 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 6f 62 6a ytes);.+. obj
6f60: 63 20 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 c = linkPtr->byt
6f70: 65 73 2f 73 69 7a 65 6f 66 28 75 6e 73 69 67 6e es/sizeof(unsign
6f80: 65 64 20 73 68 6f 72 74 29 3b 0a 2b 09 20 20 20 ed short);.+.
6f90: 20 6f 62 6a 76 20 3d 20 28 54 63 6c 5f 4f 62 6a objv = (Tcl_Obj
6fa0: 20 2a 2a 29 20 63 6b 72 65 61 6c 6c 6f 63 28 28 **) ckrealloc((
6fb0: 63 68 61 72 20 2a 29 6f 62 6a 76 2c 20 6f 62 6a char *)objv, obj
6fc0: 63 2a 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a c*sizeof(Tcl_Obj
6fd0: 2a 29 29 3b 0a 2b 09 20 20 20 20 66 6f 72 20 28 *));.+. for (
6fe0: 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 69 i=0; i < objc; i
6ff0: 2b 2b 29 20 7b 0a 2b 09 09 6f 62 6a 76 5b 69 5d ++) {.+..objv[i]
7000: 20 3d 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a = Tcl_NewIntObj
7010: 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 (linkPtr->lastVa
7020: 6c 75 65 2e 70 75 73 5b 69 5d 29 3b 0a 2b 09 20 lue.pus[i]);.+.
7030: 20 20 20 7d 0a 2b 09 20 20 20 20 72 65 74 75 72 }.+. retur
7040: 6e 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a n Tcl_NewListObj
7050: 28 6f 62 6a 63 2c 6f 62 6a 76 29 3b 0a 2b 09 7d (objc,objv);.+.}
7060: 0a 20 09 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 . .linkPtr->last
7070: 56 61 6c 75 65 2e 75 73 20 3d 20 4c 69 6e 6b 65 Value.us = Linke
7080: 64 56 61 72 28 75 6e 73 69 67 6e 65 64 20 73 68 dVar(unsigned sh
7090: 6f 72 74 29 3b 0a 20 09 72 65 74 75 72 6e 20 54 ort);. .return T
70a0: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6c 69 6e cl_NewIntObj(lin
70b0: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e kPtr->lastValue.
70c0: 75 73 29 3b 0a 20 20 20 20 20 63 61 73 65 20 54 us);. case T
70d0: 43 4c 5f 4c 49 4e 4b 5f 55 49 4e 54 3a 0a 2b 09 CL_LINK_UINT:.+.
70e0: 69 66 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 if (linkPtr->fla
70f0: 67 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f gs & LINK_ALLOC_
7100: 4c 41 53 54 29 20 7b 0a 2b 09 20 20 20 20 6d 65 LAST) {.+. me
7110: 6d 63 70 79 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 mcpy(linkPtr->la
7120: 73 74 56 61 6c 75 65 2e 70 63 2c 20 6c 69 6e 6b stValue.pc, link
7130: 50 74 72 2d 3e 61 64 64 72 2c 20 6c 69 6e 6b 50 Ptr->addr, linkP
7140: 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 20 20 tr->bytes);.+.
7150: 20 20 6f 62 6a 63 20 3d 20 6c 69 6e 6b 50 74 72 objc = linkPtr
7160: 2d 3e 62 79 74 65 73 2f 73 69 7a 65 6f 66 28 75 ->bytes/sizeof(u
7170: 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 2b 09 nsigned int);.+.
7180: 20 20 20 20 6f 62 6a 76 20 3d 20 28 54 63 6c 5f objv = (Tcl_
7190: 4f 62 6a 20 2a 2a 29 20 63 6b 72 65 61 6c 6c 6f Obj **) ckreallo
71a0: 63 28 28 63 68 61 72 20 2a 29 6f 62 6a 76 2c 20 c((char *)objv,
71b0: 6f 62 6a 63 2a 73 69 7a 65 6f 66 28 54 63 6c 5f objc*sizeof(Tcl_
71c0: 4f 62 6a 2a 29 29 3b 0a 2b 09 20 20 20 20 66 6f Obj*));.+. fo
71d0: 72 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 r (i=0; i < objc
71e0: 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09 6f 62 6a 76 ; i++) {.+..objv
71f0: 5b 69 5d 20 3d 20 54 63 6c 5f 4e 65 77 57 69 64 [i] = Tcl_NewWid
7200: 65 49 6e 74 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d eIntObj(linkPtr-
7210: 3e 6c 61 73 74 56 61 6c 75 65 2e 70 75 69 5b 69 >lastValue.pui[i
7220: 5d 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 ]);.+. }.+.
7230: 20 20 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 return Tcl_New
7240: 4c 69 73 74 4f 62 6a 28 6f 62 6a 63 2c 6f 62 6a ListObj(objc,obj
7250: 76 29 3b 0a 2b 09 7d 0a 20 09 6c 69 6e 6b 50 74 v);.+.}. .linkPt
7260: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 75 69 20 r->lastValue.ui
7270: 3d 20 4c 69 6e 6b 65 64 56 61 72 28 75 6e 73 69 = LinkedVar(unsi
7280: 67 6e 65 64 20 69 6e 74 29 3b 0a 20 09 72 65 74 gned int);. .ret
7290: 75 72 6e 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 urn Tcl_NewWideI
72a0: 6e 74 4f 62 6a 28 28 54 63 6c 5f 57 69 64 65 49 ntObj((Tcl_WideI
72b0: 6e 74 29 20 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 nt) linkPtr->las
72c0: 74 56 61 6c 75 65 2e 75 69 29 3b 0a 20 20 20 20 tValue.ui);.
72d0: 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 4c case TCL_LINK_L
72e0: 4f 4e 47 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 ONG:.+.if (linkP
72f0: 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b tr->flags & LINK
7300: 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b _ALLOC_LAST) {.+
7310: 09 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b . memcpy(link
7320: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 Ptr->lastValue.p
7330: 63 2c 20 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 c, linkPtr->addr
7340: 2c 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 , linkPtr->bytes
7350: 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 63 20 3d 20 );.+. objc =
7360: 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 2f 73 linkPtr->bytes/s
7370: 69 7a 65 6f 66 28 6c 6f 6e 67 29 3b 0a 2b 09 20 izeof(long);.+.
7380: 20 20 20 6f 62 6a 76 20 3d 20 28 54 63 6c 5f 4f objv = (Tcl_O
7390: 62 6a 20 2a 2a 29 20 63 6b 72 65 61 6c 6c 6f 63 bj **) ckrealloc
73a0: 28 28 63 68 61 72 20 2a 29 6f 62 6a 76 2c 20 6f ((char *)objv, o
73b0: 62 6a 63 2a 73 69 7a 65 6f 66 28 54 63 6c 5f 4f bjc*sizeof(Tcl_O
73c0: 62 6a 2a 29 29 3b 0a 2b 09 20 20 20 20 66 6f 72 bj*));.+. for
73d0: 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b (i=0; i < objc;
73e0: 20 69 2b 2b 29 20 7b 0a 2b 09 09 6f 62 6a 76 5b i++) {.+..objv[
73f0: 69 5d 20 3d 20 54 63 6c 5f 4e 65 77 57 69 64 65 i] = Tcl_NewWide
7400: 49 6e 74 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e IntObj(linkPtr->
7410: 6c 61 73 74 56 61 6c 75 65 2e 70 6c 5b 69 5d 29 lastValue.pl[i])
7420: 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 ;.+. }.+.
7430: 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 4c 69 return Tcl_NewLi
7440: 73 74 4f 62 6a 28 6f 62 6a 63 2c 6f 62 6a 76 29 stObj(objc,objv)
7450: 3b 0a 2b 09 7d 0a 20 09 6c 69 6e 6b 50 74 72 2d ;.+.}. .linkPtr-
7460: 3e 6c 61 73 74 56 61 6c 75 65 2e 6c 20 3d 20 4c >lastValue.l = L
7470: 69 6e 6b 65 64 56 61 72 28 6c 6f 6e 67 29 3b 0a inkedVar(long);.
7480: 20 09 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 .return Tcl_New
7490: 57 69 64 65 49 6e 74 4f 62 6a 28 28 54 63 6c 5f WideIntObj((Tcl_
74a0: 57 69 64 65 49 6e 74 29 20 6c 69 6e 6b 50 74 72 WideInt) linkPtr
74b0: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 6c 29 3b 0a ->lastValue.l);.
74c0: 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 case TCL_LI
74d0: 4e 4b 5f 55 4c 4f 4e 47 3a 0a 2b 09 69 66 20 28 NK_ULONG:.+.if (
74e0: 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 linkPtr->flags &
74f0: 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 LINK_ALLOC_LAST
7500: 29 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 ) {.+. memcpy
7510: 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 (linkPtr->lastVa
7520: 6c 75 65 2e 70 63 2c 20 6c 69 6e 6b 50 74 72 2d lue.pc, linkPtr-
7530: 3e 61 64 64 72 2c 20 6c 69 6e 6b 50 74 72 2d 3e >addr, linkPtr->
7540: 62 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 6f 62 bytes);.+. ob
7550: 6a 63 20 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 jc = linkPtr->by
7560: 74 65 73 2f 73 69 7a 65 6f 66 28 75 6e 73 69 67 tes/sizeof(unsig
7570: 6e 65 64 20 6c 6f 6e 67 29 3b 0a 2b 09 20 20 20 ned long);.+.
7580: 20 6f 62 6a 76 20 3d 20 28 54 63 6c 5f 4f 62 6a objv = (Tcl_Obj
7590: 20 2a 2a 29 20 63 6b 72 65 61 6c 6c 6f 63 28 28 **) ckrealloc((
75a0: 63 68 61 72 20 2a 29 6f 62 6a 76 2c 20 6f 62 6a char *)objv, obj
75b0: 63 2a 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a c*sizeof(Tcl_Obj
75c0: 2a 29 29 3b 0a 2b 09 20 20 20 20 66 6f 72 20 28 *));.+. for (
75d0: 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 69 i=0; i < objc; i
75e0: 2b 2b 29 20 7b 0a 2b 09 09 6f 62 6a 76 5b 69 5d ++) {.+..objv[i]
75f0: 20 3d 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e = Tcl_NewWideIn
7600: 74 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 tObj(linkPtr->la
7610: 73 74 56 61 6c 75 65 2e 70 75 6c 5b 69 5d 29 3b stValue.pul[i]);
7620: 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 72 .+. }.+. r
7630: 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 4c 69 73 eturn Tcl_NewLis
7640: 74 4f 62 6a 28 6f 62 6a 63 2c 6f 62 6a 76 29 3b tObj(objc,objv);
7650: 0a 2b 09 7d 0a 20 09 6c 69 6e 6b 50 74 72 2d 3e .+.}. .linkPtr->
7660: 6c 61 73 74 56 61 6c 75 65 2e 75 6c 20 3d 20 4c lastValue.ul = L
7670: 69 6e 6b 65 64 56 61 72 28 75 6e 73 69 67 6e 65 inkedVar(unsigne
7680: 64 20 6c 6f 6e 67 29 3b 0a 20 09 72 65 74 75 72 d long);. .retur
7690: 6e 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74 n Tcl_NewWideInt
76a0: 4f 62 6a 28 28 54 63 6c 5f 57 69 64 65 49 6e 74 Obj((Tcl_WideInt
76b0: 29 20 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 ) linkPtr->lastV
76c0: 61 6c 75 65 2e 75 6c 29 3b 0a 20 20 20 20 20 63 alue.ul);. c
76d0: 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 46 4c 4f ase TCL_LINK_FLO
76e0: 41 54 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74 AT:.+.if (linkPt
76f0: 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f r->flags & LINK_
7700: 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 ALLOC_LAST) {.+.
7710: 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 memcpy(linkP
7720: 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 tr->lastValue.pc
7730: 2c 20 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 2c , linkPtr->addr,
7740: 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 linkPtr->bytes)
7750: 3b 0a 2b 09 20 20 20 20 6f 62 6a 63 20 3d 20 6c ;.+. objc = l
7760: 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 2f 73 69 inkPtr->bytes/si
7770: 7a 65 6f 66 28 66 6c 6f 61 74 29 3b 0a 2b 09 20 zeof(float);.+.
7780: 20 20 20 6f 62 6a 76 20 3d 20 28 54 63 6c 5f 4f objv = (Tcl_O
7790: 62 6a 20 2a 2a 29 20 63 6b 72 65 61 6c 6c 6f 63 bj **) ckrealloc
77a0: 28 28 63 68 61 72 20 2a 29 6f 62 6a 76 2c 20 6f ((char *)objv, o
77b0: 62 6a 63 2a 73 69 7a 65 6f 66 28 54 63 6c 5f 4f bjc*sizeof(Tcl_O
77c0: 62 6a 2a 29 29 3b 0a 2b 09 20 20 20 20 66 6f 72 bj*));.+. for
77d0: 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b (i=0; i < objc;
77e0: 20 69 2b 2b 29 20 7b 0a 2b 09 09 6f 62 6a 76 5b i++) {.+..objv[
77f0: 69 5d 20 3d 20 54 63 6c 5f 4e 65 77 44 6f 75 62 i] = Tcl_NewDoub
7800: 6c 65 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e 6c leObj(linkPtr->l
7810: 61 73 74 56 61 6c 75 65 2e 70 66 5b 69 5d 29 3b astValue.pf[i]);
7820: 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 72 .+. }.+. r
7830: 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 4c 69 73 eturn Tcl_NewLis
7840: 74 4f 62 6a 28 6f 62 6a 63 2c 6f 62 6a 76 29 3b tObj(objc,objv);
7850: 0a 2b 09 7d 0a 20 09 6c 69 6e 6b 50 74 72 2d 3e .+.}. .linkPtr->
7860: 6c 61 73 74 56 61 6c 75 65 2e 66 20 3d 20 4c 69 lastValue.f = Li
7870: 6e 6b 65 64 56 61 72 28 66 6c 6f 61 74 29 3b 0a nkedVar(float);.
7880: 20 09 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 .return Tcl_New
7890: 44 6f 75 62 6c 65 4f 62 6a 28 6c 69 6e 6b 50 74 DoubleObj(linkPt
78a0: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 66 29 3b r->lastValue.f);
78b0: 0a 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c . case TCL_L
78c0: 49 4e 4b 5f 57 49 44 45 5f 55 49 4e 54 3a 0a 2d INK_WIDE_UINT:.-
78d0: 09 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 .linkPtr->lastVa
78e0: 6c 75 65 2e 75 77 20 3d 20 4c 69 6e 6b 65 64 56 lue.uw = LinkedV
78f0: 61 72 28 54 63 6c 5f 57 69 64 65 55 49 6e 74 29 ar(Tcl_WideUInt)
7900: 3b 0a 20 09 2f 2a 0a 20 09 20 2a 20 46 49 58 4d ;. ./*. . * FIXM
7910: 45 3a 20 72 65 70 72 65 73 65 6e 74 20 61 73 20 E: represent as
7920: 61 20 62 69 67 6e 75 6d 2e 0a 20 09 20 2a 2f 0a a bignum.. . */.
7930: 2b 09 69 66 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 +.if (linkPtr->f
7940: 6c 61 67 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f lags & LINK_ALLO
7950: 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 20 20 20 C_LAST) {.+.
7960: 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72 2d 3e memcpy(linkPtr->
7970: 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c 20 6c 69 lastValue.pc, li
7980: 6e 6b 50 74 72 2d 3e 61 64 64 72 2c 20 6c 69 6e nkPtr->addr, lin
7990: 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 kPtr->bytes);.+.
79a0: 20 20 20 20 6f 62 6a 63 20 3d 20 6c 69 6e 6b 50 objc = linkP
79b0: 74 72 2d 3e 62 79 74 65 73 2f 73 69 7a 65 6f 66 tr->bytes/sizeof
79c0: 28 54 63 6c 5f 57 69 64 65 55 49 6e 74 29 3b 0a (Tcl_WideUInt);.
79d0: 2b 09 20 20 20 20 6f 62 6a 76 20 3d 20 28 54 63 +. objv = (Tc
79e0: 6c 5f 4f 62 6a 20 2a 2a 29 20 63 6b 72 65 61 6c l_Obj **) ckreal
79f0: 6c 6f 63 28 28 63 68 61 72 20 2a 29 6f 62 6a 76 loc((char *)objv
7a00: 2c 20 6f 62 6a 63 2a 73 69 7a 65 6f 66 28 54 63 , objc*sizeof(Tc
7a10: 6c 5f 4f 62 6a 2a 29 29 3b 0a 2b 09 20 20 20 20 l_Obj*));.+.
7a20: 66 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 for (i=0; i < ob
7a30: 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09 6f 62 jc; i++) {.+..ob
7a40: 6a 76 5b 69 5d 20 3d 20 54 63 6c 5f 4e 65 77 57 jv[i] = Tcl_NewW
7a50: 69 64 65 49 6e 74 4f 62 6a 28 28 54 63 6c 5f 57 ideIntObj((Tcl_W
7a60: 69 64 65 49 6e 74 29 20 6c 69 6e 6b 50 74 72 2d ideInt) linkPtr-
7a70: 3e 6c 61 73 74 56 61 6c 75 65 2e 70 75 77 5b 69 >lastValue.puw[i
7a80: 5d 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 ]);.+. }.+.
7a90: 20 20 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 return Tcl_New
7aa0: 4c 69 73 74 4f 62 6a 28 6f 62 6a 63 2c 6f 62 6a ListObj(objc,obj
7ab0: 76 29 3b 0a 2b 09 7d 0a 2b 09 6c 69 6e 6b 50 74 v);.+.}.+.linkPt
7ac0: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 75 77 20 r->lastValue.uw
7ad0: 3d 20 4c 69 6e 6b 65 64 56 61 72 28 54 63 6c 5f = LinkedVar(Tcl_
7ae0: 57 69 64 65 55 49 6e 74 29 3b 0a 20 09 72 65 74 WideUInt);. .ret
7af0: 75 72 6e 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 urn Tcl_NewWideI
7b00: 6e 74 4f 62 6a 28 28 54 63 6c 5f 57 69 64 65 49 ntObj((Tcl_WideI
7b10: 6e 74 29 20 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 nt) linkPtr->las
7b20: 74 56 61 6c 75 65 2e 75 77 29 3b 0a 20 20 20 20 tValue.uw);.
7b30: 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 53 case TCL_LINK_S
7b40: 54 52 49 4e 47 3a 0a 20 09 70 20 3d 20 4c 69 6e TRING:. .p = Lin
7b50: 6b 65 64 56 61 72 28 63 68 61 72 20 2a 29 3b 0a kedVar(char *);.
7b60: 40 40 20 2d 36 30 39 2c 36 20 2b 31 31 35 32 2c @@ -609,6 +1152,
7b70: 32 33 20 40 40 0a 20 09 7d 0a 20 09 72 65 74 75 23 @@. .}. .retu
7b80: 72 6e 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 rn Tcl_NewString
7b90: 4f 62 6a 28 70 2c 20 2d 31 29 3b 0a 20 0a 2b 20 Obj(p, -1);. .+
7ba0: 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b case TCL_LINK
7bb0: 5f 43 48 41 52 53 3a 0a 2b 09 69 66 20 28 6c 69 _CHARS:.+.if (li
7bc0: 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c nkPtr->flags & L
7bd0: 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 INK_ALLOC_LAST)
7be0: 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 6c {.+. memcpy(l
7bf0: 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 inkPtr->lastValu
7c00: 65 2e 70 63 2c 20 6c 69 6e 6b 50 74 72 2d 3e 61 e.pc, linkPtr->a
7c10: 64 64 72 2c 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 ddr, linkPtr->by
7c20: 74 65 73 29 3b 0a 2b 09 20 20 20 20 6c 69 6e 6b tes);.+. link
7c30: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 Ptr->lastValue.p
7c40: 63 5b 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 c[linkPtr->bytes
7c50: 2d 31 5d 20 3d 20 27 5c 30 27 3b 2f 2a 20 74 61 -1] = '\0';/* ta
7c60: 6b 65 20 63 61 72 65 20 6f 66 20 70 72 6f 70 65 ke care of prope
7c70: 72 20 73 74 72 69 6e 67 20 65 6e 64 20 2a 2f 0a r string end */.
7c80: 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c +. return Tcl
7c90: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 6c 69 _NewStringObj(li
7ca0: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 nkPtr->lastValue
7cb0: 2e 70 63 2c 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 .pc,linkPtr->byt
7cc0: 65 73 29 3b 0a 2b 09 7d 0a 2b 09 6c 69 6e 6b 50 es);.+.}.+.linkP
7cd0: 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 63 20 tr->lastValue.c
7ce0: 3d 20 27 5c 30 27 3b 0a 2b 09 72 65 74 75 72 6e = '\0';.+.return
7cf0: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 Tcl_NewStringOb
7d00: 6a 28 26 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 j(&linkPtr->last
7d10: 56 61 6c 75 65 2e 63 2c 31 29 3b 0a 2b 0a 2b 20 Value.c,1);.+.+
7d20: 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b case TCL_LINK
7d30: 5f 42 49 4e 41 52 59 3a 0a 2b 09 69 66 20 28 6c _BINARY:.+.if (l
7d40: 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 inkPtr->flags &
7d50: 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 LINK_ALLOC_LAST)
7d60: 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 {.+. memcpy(
7d70: 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c linkPtr->lastVal
7d80: 75 65 2e 70 63 2c 20 6c 69 6e 6b 50 74 72 2d 3e ue.pc, linkPtr->
7d90: 61 64 64 72 2c 20 6c 69 6e 6b 50 74 72 2d 3e 62 addr, linkPtr->b
7da0: 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 72 65 74 ytes);.+. ret
7db0: 75 72 6e 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 urn Tcl_NewByteA
7dc0: 72 72 61 79 4f 62 6a 28 28 75 6e 73 69 67 6e 65 rrayObj((unsigne
7dd0: 64 20 63 68 61 72 20 2a 29 6c 69 6e 6b 50 74 72 d char *)linkPtr
7de0: 2d 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72 2d 3e ->addr,linkPtr->
7df0: 62 79 74 65 73 29 3b 0a 2b 09 7d 0a 2b 09 6c 69 bytes);.+.}.+.li
7e00: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 nkPtr->lastValue
7e10: 2e 75 63 20 3d 20 4c 69 6e 6b 65 64 56 61 72 28 .uc = LinkedVar(
7e20: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 3b 0a unsigned char);.
7e30: 2b 09 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 +.return Tcl_New
7e40: 42 79 74 65 41 72 72 61 79 4f 62 6a 28 26 6c 69 ByteArrayObj(&li
7e50: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 nkPtr->lastValue
7e60: 2e 75 63 2c 31 29 3b 0a 2b 0a 20 20 20 20 20 2f .uc,1);.+. /
7e70: 2a 0a 20 20 20 20 20 20 2a 20 54 68 69 73 20 63 *. * This c
7e80: 6f 64 65 20 6f 6e 6c 79 20 67 65 74 73 20 65 78 ode only gets ex
7e90: 65 63 75 74 65 64 20 69 66 20 74 68 65 20 6c 69 ecuted if the li
7ea0: 6e 6b 20 74 79 70 65 20 69 73 20 75 6e 6b 6e 6f nk type is unkno
7eb0: 77 6e 20 28 73 68 6f 75 6c 64 6e 27 74 0a 20 20 wn (shouldn't.
7ec0: 20 20 20 20 2a 20 65 76 65 72 20 68 61 70 70 65 * ever happe
7ed0: 6e 29 2e 0a 40 40 20 2d 36 32 31 2c 36 20 2b 31 n)..@@ -621,6 +1
7ee0: 31 38 31 2c 33 31 20 40 40 0a 20 7d 0a 20 0c 0a 181,31 @@. }. ..
7ef0: 20 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d /*.+ *---------
7f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 -------------.+
7f40: 2a 0a 2b 20 2a 20 4c 69 6e 6b 46 72 65 65 20 2d *.+ * LinkFree -
7f50: 2d 0a 2b 20 2a 0a 2b 20 2a 09 46 72 65 65 27 73 -.+ *.+ *.Free's
7f60: 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 allocated space
7f70: 20 6f 66 20 67 69 76 65 6e 20 6c 69 6e 6b 20 61 of given link a
7f80: 6e 64 20 6c 69 6e 6b 20 73 74 72 75 63 74 75 72 nd link structur
7f90: 65 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c e..+ *.+ * Resul
7fa0: 74 73 3a 0a 2b 20 2a 09 4e 6f 6e 65 2e 0a 2b 20 ts:.+ *.None..+
7fb0: 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63 *.+ * Side effec
7fc0: 74 73 3a 0a 2b 20 2a 09 4e 6f 6e 65 2e 0a 2b 20 ts:.+ *.None..+
7fd0: 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *.+ *-----------
7fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f -----------.+ */
8020: 0a 2b 0a 2b 73 74 61 74 69 63 20 76 6f 69 64 0a .+.+static void.
8030: 2b 4c 69 6e 6b 46 72 65 65 28 0a 2b 20 20 20 20 +LinkFree(.+
8040: 4c 69 6e 6b 20 2a 6c 69 6e 6b 50 74 72 29 09 09 Link *linkPtr)..
8050: 2f 2a 20 53 74 72 75 63 74 75 72 65 20 64 65 73 /* Structure des
8060: 63 72 69 62 69 6e 67 20 6c 69 6e 6b 65 64 20 76 cribing linked v
8070: 61 72 69 61 62 6c 65 2e 20 2a 2f 0a 2b 7b 0a 2b ariable. */.+{.+
8080: 20 20 20 20 69 66 20 28 6c 69 6e 6b 50 74 72 2d if (linkPtr-
8090: 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f 41 4c >flags & LINK_AL
80a0: 4c 4f 43 5f 41 44 44 52 29 20 63 6b 66 72 65 65 LOC_ADDR) ckfree
80b0: 28 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 29 3b (linkPtr->addr);
80c0: 0a 2b 20 20 20 20 69 66 20 28 6c 69 6e 6b 50 74 .+ if (linkPt
80d0: 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f r->flags & LINK_
80e0: 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 63 6b 66 72 ALLOC_LAST) ckfr
80f0: 65 65 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 ee(linkPtr->last
8100: 56 61 6c 75 65 2e 70 63 29 3b 0a 2b 20 20 20 20 Value.pc);.+
8110: 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a 29 20 ckfree((char *)
8120: 6c 69 6e 6b 50 74 72 29 3b 0a 2b 7d 0a 2b 0c 0a linkPtr);.+}.+..
8130: 2b 2f 2a 0a 20 20 2a 20 4c 6f 63 61 6c 20 56 61 +/*. * Local Va
8140: 72 69 61 62 6c 65 73 3a 0a 20 20 2a 20 6d 6f 64 riables:. * mod
8150: 65 3a 20 63 0a 20 20 2a 20 63 2d 62 61 73 69 63 e: c. * c-basic
8160: 2d 6f 66 66 73 65 74 3a 20 34 0a 49 6e 64 65 78 -offset: 4.Index
8170: 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 53 74 75 : generic/tclStu
8180: 62 49 6e 69 74 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d bInit.c.========
8190: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
81a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
81b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
81c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 ===========.RCS
81d0: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 file: /cvsroot/t
81e0: 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 cl/tcl/generic/t
81f0: 63 6c 53 74 75 62 49 6e 69 74 2e 63 2c 76 0a 72 clStubInit.c,v.r
8200: 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 etrieving revisi
8210: 6f 6e 20 31 2e 31 36 32 0a 64 69 66 66 20 2d 75 on 1.162.diff -u
8220: 20 2d 72 31 2e 31 36 32 20 74 63 6c 53 74 75 62 -r1.162 tclStub
8230: 49 6e 69 74 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72 Init.c.--- gener
8240: 69 63 2f 74 63 6c 53 74 75 62 49 6e 69 74 2e 63 ic/tclStubInit.c
8250: 09 32 39 20 4a 75 6c 20 32 30 30 38 20 30 35 3a .29 Jul 2008 05:
8260: 33 30 3a 33 38 20 2d 30 30 30 30 09 31 2e 31 36 30:38 -0000.1.16
8270: 32 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 2.+++ generic/tc
8280: 6c 53 74 75 62 49 6e 69 74 2e 63 09 31 37 20 53 lStubInit.c.17 S
8290: 65 70 20 32 30 30 38 20 31 36 3a 34 35 3a 35 39 ep 2008 16:45:59
82a0: 20 2d 30 30 30 30 0a 40 40 20 2d 31 31 31 34 2c -0000.@@ -1114,
82b0: 36 20 2b 31 31 31 34 2c 37 20 40 40 0a 20 20 20 6 +1114,7 @@.
82c0: 20 20 54 63 6c 5f 4e 52 43 6d 64 53 77 61 70 2c Tcl_NRCmdSwap,
82d0: 20 2f 2a 20 35 38 36 20 2a 2f 0a 20 20 20 20 20 /* 586 */.
82e0: 54 63 6c 5f 4e 52 41 64 64 43 61 6c 6c 62 61 63 Tcl_NRAddCallbac
82f0: 6b 2c 20 2f 2a 20 35 38 37 20 2a 2f 0a 20 20 20 k, /* 587 */.
8300: 20 20 54 63 6c 5f 4e 52 43 61 6c 6c 4f 62 6a 50 Tcl_NRCallObjP
8310: 72 6f 63 2c 20 2f 2a 20 35 38 38 20 2a 2f 0a 2b roc, /* 588 */.+
8320: 20 20 20 20 54 63 6c 5f 4c 69 6e 6b 41 72 72 61 Tcl_LinkArra
8330: 79 2c 20 2f 2a 20 35 38 39 20 2a 2f 0a 20 7d 3b y, /* 589 */. };
8340: 0a 20 0a 20 2f 2a 20 21 45 4e 44 21 3a 20 44 6f . . /* !END!: Do
8350: 20 6e 6f 74 20 65 64 69 74 20 61 62 6f 76 65 20 not edit above
8360: 74 68 69 73 20 6c 69 6e 65 2e 20 2a 2f 0a 49 6e this line. */.In
8370: 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c dex: generic/tcl
8380: 54 65 73 74 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d Test.c.=========
8390: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
83a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
83b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
83c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 ==========.RCS f
83d0: 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 ile: /cvsroot/tc
83e0: 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 l/tcl/generic/tc
83f0: 6c 54 65 73 74 2e 63 2c 76 0a 72 65 74 72 69 65 lTest.c,v.retrie
8400: 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e ving revision 1.
8410: 31 32 34 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 124.diff -u -r1.
8420: 31 32 34 20 74 63 6c 54 65 73 74 2e 63 0a 2d 2d 124 tclTest.c.--
8430: 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 54 65 73 - generic/tclTes
8440: 74 2e 63 09 32 30 20 41 75 67 20 32 30 30 38 20 t.c.20 Aug 2008
8450: 31 33 3a 31 34 3a 34 31 20 2d 30 30 30 30 09 31 13:14:41 -0000.1
8460: 2e 31 32 34 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 .124.+++ generic
8470: 2f 74 63 6c 54 65 73 74 2e 63 09 31 37 20 53 65 /tclTest.c.17 Se
8480: 70 20 32 30 30 38 20 31 36 3a 34 35 3a 35 39 20 p 2008 16:45:59
8490: 2d 30 30 30 30 0a 40 40 20 2d 32 37 33 2c 36 20 -0000.@@ -273,6
84a0: 2b 32 37 33 2c 39 20 40 40 0a 20 09 09 09 20 20 +273,9 @@. ...
84b0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e Tcl_Interp *in
84c0: 74 65 72 70 2c 20 69 6e 74 20 61 72 67 63 2c 20 terp, int argc,
84d0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 72 67 const char **arg
84e0: 76 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 v);. static int.
84f0: 09 54 65 73 74 6c 69 6e 6b 43 6d 64 28 43 6c 69 .TestlinkCmd(Cli
8500: 65 6e 74 44 61 74 61 20 64 75 6d 6d 79 2c 0a 20 entData dummy,.
8510: 09 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 ... Tcl_Inter
8520: 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 61 p *interp, int a
8530: 72 67 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 rgc, const char
8540: 2a 2a 61 72 67 76 29 3b 0a 2b 73 74 61 74 69 63 **argv);.+static
8550: 20 69 6e 74 09 09 54 65 73 74 6c 69 6e 6b 61 72 int..Testlinkar
8560: 72 61 79 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 rayCmd(ClientDat
8570: 61 20 64 75 6d 6d 79 2c 0a 2b 20 20 20 20 20 20 a dummy,.+
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8590: 20 20 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 Tcl_Interp
85a0: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 *interp, int ob
85b0: 6a 63 2c 0a 2b 20 20 20 20 20 20 20 20 20 20 20 jc,.+
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
85d0: 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 Tcl_Obj *const
85e0: 6f 62 6a 76 5b 5d 29 3b 0a 20 73 74 61 74 69 63 objv[]);. static
85f0: 20 69 6e 74 09 09 54 65 73 74 6c 6f 63 61 6c 65 int..Testlocale
8600: 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 20 64 Cmd(ClientData d
8610: 75 6d 6d 79 2c 0a 20 09 09 09 20 20 20 20 54 63 ummy,. ... Tc
8620: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 l_Interp *interp
8630: 2c 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 09 09 09 , int objc,. ...
8640: 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e Tcl_Obj *con
8650: 73 74 20 6f 62 6a 76 5b 5d 29 3b 0a 40 40 20 2d st objv[]);.@@ -
8660: 36 31 36 2c 36 20 2b 36 31 39 2c 38 20 40 40 0a 616,6 +619,8 @@.
8670: 20 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65 43 Tcl_CreateC
8680: 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 ommand(interp, "
8690: 74 65 73 74 69 6e 74 65 72 70 64 65 6c 65 74 65 testinterpdelete
86a0: 22 2c 20 54 65 73 74 69 6e 74 65 72 70 64 65 6c ", Testinterpdel
86b0: 65 74 65 43 6d 64 2c 0a 20 09 20 20 20 20 28 43 eteCmd,. . (C
86c0: 6c 69 65 6e 74 44 61 74 61 29 20 30 2c 20 4e 55 lientData) 0, NU
86d0: 4c 4c 29 3b 0a 20 20 20 20 20 54 63 6c 5f 43 72 LL);. Tcl_Cr
86e0: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 eateCommand(inte
86f0: 72 70 2c 20 22 74 65 73 74 6c 69 6e 6b 22 2c 20 rp, "testlink",
8700: 54 65 73 74 6c 69 6e 6b 43 6d 64 2c 20 28 43 6c TestlinkCmd, (Cl
8710: 69 65 6e 74 44 61 74 61 29 20 30 2c 20 4e 55 4c ientData) 0, NUL
8720: 4c 29 3b 0a 2b 20 20 20 20 54 63 6c 5f 43 72 65 L);.+ Tcl_Cre
8730: 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e ateObjCommand(in
8740: 74 65 72 70 2c 20 22 74 65 73 74 6c 69 6e 6b 61 terp, "testlinka
8750: 72 72 61 79 22 2c 20 54 65 73 74 6c 69 6e 6b 61 rray", Testlinka
8760: 72 72 61 79 43 6d 64 2c 0a 2b 20 20 20 20 20 20 rrayCmd,.+
8770: 20 20 20 20 20 20 28 43 6c 69 65 6e 74 44 61 74 (ClientDat
8780: 61 29 20 30 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 a) 0, NULL);.
8790: 20 20 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 Tcl_CreateObjC
87a0: 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 ommand(interp, "
87b0: 74 65 73 74 6c 6f 63 61 6c 65 22 2c 20 54 65 73 testlocale", Tes
87c0: 74 6c 6f 63 61 6c 65 43 6d 64 2c 20 28 43 6c 69 tlocaleCmd, (Cli
87d0: 65 6e 74 44 61 74 61 29 20 30 2c 0a 20 09 20 20 entData) 0,. .
87e0: 20 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 54 63 NULL);. Tc
87f0: 6c 5f 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 l_CreateCommand(
8800: 69 6e 74 65 72 70 2c 20 22 74 65 73 74 70 61 6e interp, "testpan
8810: 69 63 22 2c 20 54 65 73 74 70 61 6e 69 63 43 6d ic", TestpanicCm
8820: 64 2c 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20 d, (ClientData)
8830: 30 2c 20 4e 55 4c 4c 29 3b 0a 40 40 20 2d 33 30 0, NULL);.@@ -30
8840: 35 37 2c 36 20 2b 33 30 36 32 2c 31 31 38 20 40 57,6 +3062,118 @
8850: 40 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d @. /*. *-------
8860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
88a0: 20 20 2a 0a 2b 20 2a 20 54 65 73 74 6c 69 6e 6b *.+ * Testlink
88b0: 61 72 72 61 79 43 6d 64 20 2d 2d 0a 2b 20 2a 0a arrayCmd --.+ *.
88c0: 2b 20 2a 20 20 20 20 20 20 54 68 69 73 20 66 75 + * This fu
88d0: 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65 nction is invoke
88e0: 64 20 74 6f 20 70 72 6f 63 65 73 73 20 74 68 65 d to process the
88f0: 20 22 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 22 "testlinkarray"
8900: 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 2e 0a 2b 20 Tcl command..+
8910: 2a 20 20 20 20 20 20 49 74 20 69 73 20 75 73 65 * It is use
8920: 64 20 74 6f 20 74 65 73 74 20 74 68 65 20 27 54 d to test the 'T
8930: 63 6c 5f 4c 69 6e 6b 41 72 72 61 79 27 20 66 75 cl_LinkArray' fu
8940: 6e 63 74 69 6f 6e 2e 0a 2b 20 2a 0a 2b 20 2a 20 nction..+ *.+ *
8950: 52 65 73 75 6c 74 73 3a 0a 2b 20 2a 20 20 20 20 Results:.+ *
8960: 20 20 41 20 73 74 61 6e 64 61 72 64 20 54 63 6c A standard Tcl
8970: 20 72 65 73 75 6c 74 2e 0a 2b 20 2a 0a 2b 20 2a result..+ *.+ *
8980: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2b Side effects:.+
8990: 20 2a 09 43 72 65 61 74 65 73 2c 20 64 65 6c 65 *.Creates, dele
89a0: 74 65 73 2c 20 61 6e 64 20 69 6e 76 6f 6b 65 73 tes, and invokes
89b0: 20 76 61 72 69 61 62 6c 65 20 6c 69 6e 6b 73 2e variable links.
89c0: 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d .+ *.+ *--------
89d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
89e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
89f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b --------------.+
8a10: 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63 20 69 6e */.+.+static in
8a20: 74 0a 2b 54 65 73 74 6c 69 6e 6b 61 72 72 61 79 t.+Testlinkarray
8a30: 43 6d 64 28 0a 2b 20 20 20 20 43 6c 69 65 6e 74 Cmd(.+ Client
8a40: 44 61 74 61 20 64 75 6d 6d 79 2c 20 20 20 20 20 Data dummy,
8a50: 20 20 20 20 20 20 2f 2a 20 4e 6f 74 20 75 73 65 /* Not use
8a60: 64 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 49 d. */.+ Tcl_I
8a70: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 nterp *interp,
8a80: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e /* Curren
8a90: 74 20 69 6e 74 65 72 70 72 65 74 65 72 2e 20 2a t interpreter. *
8aa0: 2f 0a 2b 20 20 20 20 69 6e 74 20 6f 62 6a 63 2c /.+ int objc,
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8ac0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 /* Number of
8ad0: 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a 2b 20 arguments. */.+
8ae0: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 Tcl_Obj *cons
8af0: 74 20 6f 62 6a 76 5b 5d 29 20 20 20 20 20 20 2f t objv[]) /
8b00: 2a 20 41 72 67 75 6d 65 6e 74 20 6f 62 6a 65 63 * Argument objec
8b10: 74 73 2e 20 2a 2f 0a 2b 7b 0a 2b 20 20 20 20 73 ts. */.+{.+ s
8b20: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 tatic const char
8b30: 20 2a 4c 69 6e 6b 4f 70 74 69 6f 6e 5b 5d 20 3d *LinkOption[] =
8b40: 20 7b 0a 2b 20 20 20 20 22 75 70 64 61 74 65 22 {.+ "update"
8b50: 2c 20 22 72 65 6d 6f 76 65 22 2c 20 22 63 72 65 , "remove", "cre
8b60: 61 74 65 22 2c 20 4e 55 4c 4c 0a 2b 20 20 20 20 ate", NULL.+
8b70: 7d 3b 0a 2b 20 20 20 20 65 6e 75 6d 20 4c 69 6e };.+ enum Lin
8b80: 6b 4f 70 74 69 6f 6e 20 7b 20 4c 49 4e 4b 5f 55 kOption { LINK_U
8b90: 50 44 41 54 45 2c 20 4c 49 4e 4b 5f 52 45 4d 4f PDATE, LINK_REMO
8ba0: 56 45 2c 20 4c 49 4e 4b 5f 43 52 45 41 54 45 20 VE, LINK_CREATE
8bb0: 7d 3b 0a 2b 20 20 20 20 73 74 61 74 69 63 20 63 };.+ static c
8bc0: 6f 6e 73 74 20 63 68 61 72 20 2a 4c 69 6e 6b 54 onst char *LinkT
8bd0: 79 70 65 5b 5d 20 3d 20 7b 0a 2b 20 20 20 20 22 ype[] = {.+ "
8be0: 63 68 61 72 22 2c 20 22 75 63 68 61 72 22 2c 20 char", "uchar",
8bf0: 22 73 68 6f 72 74 22 2c 20 22 75 73 68 6f 72 74 "short", "ushort
8c00: 22 2c 20 22 69 6e 74 22 2c 20 22 75 69 6e 74 22 ", "int", "uint"
8c10: 2c 20 22 6c 6f 6e 67 22 2c 20 22 75 6c 6f 6e 67 , "long", "ulong
8c20: 22 2c 0a 2b 20 20 20 20 22 77 69 64 65 22 2c 20 ",.+ "wide",
8c30: 22 75 77 69 64 65 22 2c 20 22 66 6c 6f 61 74 22 "uwide", "float"
8c40: 2c 20 22 64 6f 75 62 6c 65 22 2c 20 22 73 74 72 , "double", "str
8c50: 69 6e 67 22 2c 20 22 63 68 61 72 2a 22 2c 20 22 ing", "char*", "
8c60: 62 69 6e 61 72 79 22 2c 20 4e 55 4c 4c 0a 2b 20 binary", NULL.+
8c70: 20 20 20 7d 3b 0a 2b 20 20 20 20 2f 2a 20 61 6c };.+ /* al
8c80: 6c 20 76 61 6c 75 65 73 20 61 66 74 65 72 20 54 l values after T
8c90: 43 4c 5f 4c 49 4e 4b 5f 43 48 41 52 53 5f 41 52 CL_LINK_CHARS_AR
8ca0: 52 41 59 20 61 72 65 20 75 73 65 64 20 61 73 20 RAY are used as
8cb0: 61 72 72 61 79 73 20 28 73 65 65 20 62 65 6c 6f arrays (see belo
8cc0: 77 29 20 2a 2f 0a 2b 20 20 20 20 73 74 61 74 69 w) */.+ stati
8cd0: 63 20 69 6e 74 20 4c 69 6e 6b 54 79 70 65 73 5b c int LinkTypes[
8ce0: 5d 20 3d 20 7b 20 54 43 4c 5f 4c 49 4e 4b 5f 43 ] = { TCL_LINK_C
8cf0: 48 41 52 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 55 43 HAR, TCL_LINK_UC
8d00: 48 41 52 2c 0a 2b 20 20 20 20 54 43 4c 5f 4c 49 HAR,.+ TCL_LI
8d10: 4e 4b 5f 53 48 4f 52 54 2c 20 54 43 4c 5f 4c 49 NK_SHORT, TCL_LI
8d20: 4e 4b 5f 55 53 48 4f 52 54 2c 20 54 43 4c 5f 4c NK_USHORT, TCL_L
8d30: 49 4e 4b 5f 49 4e 54 2c 20 54 43 4c 5f 4c 49 4e INK_INT, TCL_LIN
8d40: 4b 5f 55 49 4e 54 2c 0a 2b 20 20 20 20 54 43 4c K_UINT,.+ TCL
8d50: 5f 4c 49 4e 4b 5f 4c 4f 4e 47 2c 20 54 43 4c 5f _LINK_LONG, TCL_
8d60: 4c 49 4e 4b 5f 55 4c 4f 4e 47 2c 20 54 43 4c 5f LINK_ULONG, TCL_
8d70: 4c 49 4e 4b 5f 57 49 44 45 5f 49 4e 54 2c 20 54 LINK_WIDE_INT, T
8d80: 43 4c 5f 4c 49 4e 4b 5f 57 49 44 45 5f 55 49 4e CL_LINK_WIDE_UIN
8d90: 54 2c 0a 2b 20 20 20 20 54 43 4c 5f 4c 49 4e 4b T,.+ TCL_LINK
8da0: 5f 46 4c 4f 41 54 2c 20 54 43 4c 5f 4c 49 4e 4b _FLOAT, TCL_LINK
8db0: 5f 44 4f 55 42 4c 45 2c 20 54 43 4c 5f 4c 49 4e _DOUBLE, TCL_LIN
8dc0: 4b 5f 53 54 52 49 4e 47 2c 20 54 43 4c 5f 4c 49 K_STRING, TCL_LI
8dd0: 4e 4b 5f 43 48 41 52 53 2c 20 54 43 4c 5f 4c 49 NK_CHARS, TCL_LI
8de0: 4e 4b 5f 42 49 4e 41 52 59 0a 2b 20 20 20 20 7d NK_BINARY.+ }
8df0: 3b 0a 2b 20 20 20 20 69 6e 74 20 6f 70 74 69 6f ;.+ int optio
8e00: 6e 49 6e 64 65 78 3b 0a 2b 20 20 20 20 69 6e 74 nIndex;.+ int
8e10: 20 74 79 70 65 49 6e 64 65 78 3b 0a 2b 20 20 20 typeIndex;.+
8e20: 20 69 6e 74 20 72 65 61 64 6f 6e 6c 79 3b 0a 2b int readonly;.+
8e30: 20 20 20 20 69 6e 74 20 69 3b 0a 2b 20 20 20 20 int i;.+
8e40: 63 68 61 72 20 2a 6e 61 6d 65 3b 0a 2b 20 20 20 char *name;.+
8e50: 20 69 6e 74 20 61 64 64 72 3b 0a 2b 20 20 20 20 int addr;.+
8e60: 69 6e 74 20 73 69 7a 65 3b 0a 2b 20 20 20 20 63 int size;.+ c
8e70: 68 61 72 20 2a 61 72 67 3b 0a 2b 20 20 20 20 69 har *arg;.+ i
8e80: 6e 74 20 6c 65 6e 67 74 68 3b 0a 2b 0a 2b 20 20 nt length;.+.+
8e90: 20 20 69 66 20 28 6f 62 6a 63 20 3c 20 32 29 20 if (objc < 2)
8ea0: 7b 0a 2b 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d {.+.Tcl_WrongNum
8eb0: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 Args(interp, 1,
8ec0: 6f 62 6a 76 2c 20 22 6f 70 74 69 6f 6e 20 61 72 objv, "option ar
8ed0: 67 73 22 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 gs");.+.return T
8ee0: 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d CL_ERROR;.+ }
8ef0: 0a 2b 20 20 20 20 69 66 20 28 54 63 6c 5f 47 65 .+ if (Tcl_Ge
8f00: 74 49 6e 64 65 78 46 72 6f 6d 4f 62 6a 28 69 6e tIndexFromObj(in
8f10: 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 4c terp, objv[1], L
8f20: 69 6e 6b 4f 70 74 69 6f 6e 2c 20 22 6f 70 74 69 inkOption, "opti
8f30: 6f 6e 22 2c 20 30 2c 0a 2b 09 26 6f 70 74 69 6f on", 0,.+.&optio
8f40: 6e 49 6e 64 65 78 29 20 21 3d 20 54 43 4c 5f 4f nIndex) != TCL_O
8f50: 4b 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 54 43 K) {.+.return TC
8f60: 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a L_ERROR;.+ }.
8f70: 2b 20 20 20 20 73 77 69 74 63 68 20 28 28 65 6e + switch ((en
8f80: 75 6d 20 4c 69 6e 6b 4f 70 74 69 6f 6e 29 20 6f um LinkOption) o
8f90: 70 74 69 6f 6e 49 6e 64 65 78 29 20 7b 0a 2b 20 ptionIndex) {.+
8fa0: 20 20 20 63 61 73 65 20 4c 49 4e 4b 5f 55 50 44 case LINK_UPD
8fb0: 41 54 45 3a 0a 2b 09 66 6f 72 20 28 69 3d 32 3b ATE:.+.for (i=2;
8fc0: 69 3c 6f 62 6a 63 3b 69 2b 2b 29 20 7b 0a 2b 09 i<objc;i++) {.+.
8fd0: 20 20 20 20 54 63 6c 5f 55 70 64 61 74 65 4c 69 Tcl_UpdateLi
8fe0: 6e 6b 65 64 56 61 72 28 69 6e 74 65 72 70 2c 20 nkedVar(interp,
8ff0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 Tcl_GetString(ob
9000: 6a 76 5b 69 5d 29 29 3b 0a 2b 09 7d 0a 2b 09 72 jv[i]));.+.}.+.r
9010: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 20 eturn TCL_OK;.+
9020: 20 20 20 63 61 73 65 20 4c 49 4e 4b 5f 52 45 4d case LINK_REM
9030: 4f 56 45 3a 0a 2b 09 66 6f 72 20 28 69 3d 32 3b OVE:.+.for (i=2;
9040: 69 3c 6f 62 6a 63 3b 69 2b 2b 29 20 7b 0a 2b 09 i<objc;i++) {.+.
9050: 20 20 20 20 54 63 6c 5f 55 6e 6c 69 6e 6b 56 61 Tcl_UnlinkVa
9060: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 r(interp, Tcl_Ge
9070: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 69 5d 29 tString(objv[i])
9080: 29 3b 0a 2b 09 7d 0a 2b 09 72 65 74 75 72 6e 20 );.+.}.+.return
9090: 54 43 4c 5f 4f 4b 3b 0a 2b 20 20 20 20 63 61 73 TCL_OK;.+ cas
90a0: 65 20 4c 49 4e 4b 5f 43 52 45 41 54 45 3a 0a 2b e LINK_CREATE:.+
90b0: 09 69 66 20 28 6f 62 6a 63 20 3c 20 34 29 20 7b .if (objc < 4) {
90c0: 0a 2b 09 20 20 20 20 67 6f 74 6f 20 77 72 6f 6e .+. goto wron
90d0: 67 41 72 67 73 3b 0a 2b 09 7d 0a 2b 09 72 65 61 gArgs;.+.}.+.rea
90e0: 64 6f 6e 6c 79 20 3d 20 30 3b 0a 2b 09 69 20 3d donly = 0;.+.i =
90f0: 20 32 3b 0a 2b 09 2f 2a 20 74 65 73 74 20 6f 6e 2;.+./* test on
9100: 20 73 77 69 74 63 68 20 2d 72 2e 2e 2e 20 2a 2f switch -r... */
9110: 0a 2b 09 61 72 67 20 3d 20 54 63 6c 5f 47 65 74 .+.arg = Tcl_Get
9120: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 StringFromObj(ob
9130: 6a 76 5b 69 5d 2c 26 6c 65 6e 67 74 68 29 3b 0a jv[i],&length);.
9140: 2b 09 69 66 20 28 6c 65 6e 67 74 68 20 3c 20 32 +.if (length < 2
9150: 29 20 7b 0a 2b 09 20 20 20 20 67 6f 74 6f 20 77 ) {.+. goto w
9160: 72 6f 6e 67 41 72 67 73 3b 0a 2b 09 7d 0a 2b 09 rongArgs;.+.}.+.
9170: 69 66 20 28 61 72 67 5b 30 5d 20 3d 3d 20 27 2d if (arg[0] == '-
9180: 27 29 20 7b 0a 2b 09 20 20 20 20 69 66 20 28 61 ') {.+. if (a
9190: 72 67 5b 31 5d 20 21 3d 20 27 72 27 29 20 7b 0a rg[1] != 'r') {.
91a0: 2b 09 20 20 20 20 20 20 20 20 67 6f 74 6f 20 77 +. goto w
91b0: 72 6f 6e 67 41 72 67 73 3b 0a 2b 09 20 20 20 20 rongArgs;.+.
91c0: 7d 0a 2b 09 20 20 20 20 72 65 61 64 6f 6e 6c 79 }.+. readonly
91d0: 20 3d 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 = TCL_LINK_READ
91e0: 5f 4f 4e 4c 59 3b 0a 2b 09 20 20 20 20 69 2b 2b _ONLY;.+. i++
91f0: 3b 0a 2b 09 7d 0a 2b 09 69 66 20 28 54 63 6c 5f ;.+.}.+.if (Tcl_
9200: 47 65 74 49 6e 64 65 78 46 72 6f 6d 4f 62 6a 28 GetIndexFromObj(
9210: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 69 2b 2b interp, objv[i++
9220: 5d 2c 20 4c 69 6e 6b 54 79 70 65 2c 20 22 74 79 ], LinkType, "ty
9230: 70 65 22 2c 20 30 2c 0a 2b 09 20 20 20 20 26 74 pe", 0,.+. &t
9240: 79 70 65 49 6e 64 65 78 29 20 21 3d 20 54 43 4c ypeIndex) != TCL
9250: 5f 4f 4b 29 20 7b 0a 2b 09 20 20 20 20 72 65 74 _OK) {.+. ret
9260: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b urn TCL_ERROR;.+
9270: 09 7d 0a 2b 09 69 66 20 28 54 63 6c 5f 47 65 74 .}.+.if (Tcl_Get
9280: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 IntFromObj(inter
9290: 70 2c 20 6f 62 6a 76 5b 69 2b 2b 5d 2c 20 26 73 p, objv[i++], &s
92a0: 69 7a 65 29 20 3d 3d 20 54 43 4c 5f 45 52 52 4f ize) == TCL_ERRO
92b0: 52 29 20 7b 0a 2b 09 20 20 20 20 54 63 6c 5f 53 R) {.+. Tcl_S
92c0: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c etResult(interp,
92d0: 20 22 77 72 6f 6e 67 20 73 69 7a 65 20 76 61 6c "wrong size val
92e0: 75 65 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 20 20 ue", NULL);.+.
92f0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 return TCL_ERR
9300: 4f 52 3b 0a 2b 09 7d 0a 2b 09 6e 61 6d 65 20 3d OR;.+.}.+.name =
9310: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f Tcl_GetString(o
9320: 62 6a 76 5b 69 2b 2b 5d 29 3b 0a 2b 09 2f 2a 20 bjv[i++]);.+./*
9330: 69 66 20 6e 6f 20 61 64 64 72 65 73 73 20 69 73 if no address is
9340: 20 67 69 76 65 6e 20 72 65 71 75 65 73 74 20 6f given request o
9350: 6e 65 20 69 6e 20 74 68 65 20 75 6e 64 65 72 6c ne in the underl
9360: 79 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f ying function */
9370: 0a 2b 09 69 66 20 28 69 20 3c 6f 62 6a 63 29 20 .+.if (i <objc)
9380: 7b 0a 2b 09 20 20 20 20 69 66 20 28 54 63 6c 5f {.+. if (Tcl_
9390: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e GetIntFromObj(in
93a0: 74 65 72 70 2c 20 6f 62 6a 76 5b 69 5d 2c 20 26 terp, objv[i], &
93b0: 61 64 64 72 29 20 3d 3d 20 54 43 4c 5f 45 52 52 addr) == TCL_ERR
93c0: 4f 52 29 20 7b 0a 2b 09 20 20 20 20 20 20 20 20 OR) {.+.
93d0: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e Tcl_SetResult(in
93e0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 61 64 64 terp, "wrong add
93f0: 72 65 73 73 20 76 61 6c 75 65 22 2c 20 4e 55 4c ress value", NUL
9400: 4c 29 3b 0a 2b 09 20 20 20 20 20 20 20 20 72 65 L);.+. re
9410: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a turn TCL_ERROR;.
9420: 2b 09 20 20 20 20 7d 0a 2b 09 7d 20 65 6c 73 65 +. }.+.} else
9430: 20 7b 0a 2b 09 20 20 20 20 61 64 64 72 20 3d 20 {.+. addr =
9440: 30 3b 0a 2b 09 7d 0a 2b 09 72 65 74 75 72 6e 20 0;.+.}.+.return
9450: 54 63 6c 5f 4c 69 6e 6b 41 72 72 61 79 28 69 6e Tcl_LinkArray(in
9460: 74 65 72 70 2c 6e 61 6d 65 2c 28 63 68 61 72 20 terp,name,(char
9470: 2a 29 61 64 64 72 2c 4c 69 6e 6b 54 79 70 65 73 *)addr,LinkTypes
9480: 5b 74 79 70 65 49 6e 64 65 78 5d 20 7c 20 72 65 [typeIndex] | re
9490: 61 64 6f 6e 6c 79 2c 73 69 7a 65 29 3b 0a 2b 20 adonly,size);.+
94a0: 20 20 20 7d 0a 2b 20 20 20 20 72 65 74 75 72 6e }.+ return
94b0: 20 54 43 4c 5f 4f 4b 3b 0a 2b 0a 2b 20 20 77 72 TCL_OK;.+.+ wr
94c0: 6f 6e 67 41 72 67 73 3a 0a 2b 20 20 20 20 54 63 ongArgs:.+ Tc
94d0: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 l_WrongNumArgs(i
94e0: 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 20 nterp, 2, objv,
94f0: 22 3f 2d 72 65 61 64 6f 6e 6c 79 3f 20 74 79 70 "?-readonly? typ
9500: 65 20 73 69 7a 65 20 6e 61 6d 65 20 3f 61 64 64 e size name ?add
9510: 72 65 73 73 3f 22 29 3b 0a 2b 20 20 20 20 72 65 ress?");.+ re
9520: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a turn TCL_ERROR;.
9530: 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d +}.+..+/*.+ *---
9540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9580: 2d 2d 2d 0a 2b 20 2a 0a 20 20 2a 20 54 65 73 74 ---.+ *. * Test
9590: 6c 6f 63 61 6c 65 43 6d 64 20 2d 2d 0a 20 20 2a localeCmd --. *
95a0: 0a 20 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 . *.This proced
95b0: 75 72 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 ure implements t
95c0: 68 65 20 22 74 65 73 74 6c 6f 63 61 6c 65 22 20 he "testlocale"
95d0: 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73 20 command. It is
95e0: 75 73 65 64 0a 49 6e 64 65 78 3a 20 74 65 73 74 used.Index: test
95f0: 73 2f 6c 69 6e 6b 2e 74 65 73 74 0a 3d 3d 3d 3d s/link.test.====
9600: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9610: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9620: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9630: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
9640: 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f RCS file: /cvsro
9650: 6f 74 2f 74 63 6c 2f 74 63 6c 2f 74 65 73 74 73 ot/tcl/tcl/tests
9660: 2f 6c 69 6e 6b 2e 74 65 73 74 2c 76 0a 72 65 74 /link.test,v.ret
9670: 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e rieving revision
9680: 20 31 2e 31 37 0a 64 69 66 66 20 2d 75 20 2d 72 1.17.diff -u -r
9690: 31 2e 31 37 20 6c 69 6e 6b 2e 74 65 73 74 0a 2d 1.17 link.test.-
96a0: 2d 2d 20 74 65 73 74 73 2f 6c 69 6e 6b 2e 74 65 -- tests/link.te
96b0: 73 74 09 31 33 20 44 65 63 20 32 30 30 37 20 31 st.13 Dec 2007 1
96c0: 35 3a 32 36 3a 30 36 20 2d 30 30 30 30 09 31 2e 5:26:06 -0000.1.
96d0: 31 37 0a 2b 2b 2b 20 74 65 73 74 73 2f 6c 69 6e 17.+++ tests/lin
96e0: 6b 2e 74 65 73 74 09 31 37 20 53 65 70 20 32 30 k.test.17 Sep 20
96f0: 30 38 20 31 36 3a 34 36 3a 30 30 20 2d 30 30 30 08 16:46:00 -000
9700: 30 0a 40 40 20 2d 31 39 2c 36 20 2b 31 39 2c 37 0.@@ -19,6 +19,7
9710: 20 40 40 0a 20 7d 0a 20 0a 20 74 65 73 74 43 6f @@. }. . testCo
9720: 6e 73 74 72 61 69 6e 74 20 74 65 73 74 6c 69 6e nstraint testlin
9730: 6b 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f k [llength [info
9740: 20 63 6f 6d 6d 61 6e 64 73 20 74 65 73 74 6c 69 commands testli
9750: 6e 6b 5d 5d 0a 2b 74 65 73 74 43 6f 6e 73 74 72 nk]].+testConstr
9760: 61 69 6e 74 20 74 65 73 74 6c 69 6e 6b 61 72 72 aint testlinkarr
9770: 61 79 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 ay [llength [inf
9780: 6f 20 63 6f 6d 6d 61 6e 64 73 20 74 65 73 74 6c o commands testl
9790: 69 6e 6b 61 72 72 61 79 5d 5d 0a 20 0a 20 66 6f inkarray]]. . fo
97a0: 72 65 61 63 68 20 69 20 7b 69 6e 74 20 72 65 61 reach i {int rea
97b0: 6c 20 62 6f 6f 6c 20 73 74 72 69 6e 67 7d 20 7b l bool string} {
97c0: 0a 20 20 20 20 20 63 61 74 63 68 20 7b 75 6e 73 . catch {uns
97d0: 65 74 20 24 69 7d 0a 40 40 20 2d 37 39 2c 37 20 et $i}.@@ -79,7
97e0: 2b 38 30 2c 37 20 40 40 0a 20 20 20 20 20 74 65 +80,7 @@. te
97f0: 73 74 6c 69 6e 6b 20 73 65 74 20 34 33 20 31 2e stlink set 43 1.
9800: 32 33 20 34 20 2d 20 35 36 37 38 35 36 37 38 20 23 4 - 56785678
9810: 36 34 20 32 35 30 20 33 30 30 30 30 20 36 30 30 64 250 30000 600
9820: 30 30 20 30 78 62 65 65 66 62 61 62 65 20 31 32 00 0xbeefbabe 12
9830: 33 32 31 20 33 32 31 32 33 20 33 2e 32 35 20 31 321 32123 3.25 1
9840: 32 33 31 32 33 31 32 33 34 0a 20 20 20 20 20 74 231231234. t
9850: 65 73 74 6c 69 6e 6b 20 63 72 65 61 74 65 20 31 estlink create 1
9860: 20 31 20 31 20 31 20 31 20 31 20 31 20 31 20 31 1 1 1 1 1 1 1 1
9870: 20 31 20 31 20 31 20 31 20 31 0a 20 20 20 20 20 1 1 1 1 1.
9880: 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 73 65 74 list [catch {set
9890: 20 77 69 64 65 20 67 6f 72 70 7d 20 6d 73 67 5d wide gorp} msg]
98a0: 20 24 6d 73 67 20 24 62 6f 6f 6c 0a 2d 7d 20 7b $msg $bool.-} {
98b0: 31 20 7b 63 61 6e 27 74 20 73 65 74 20 22 77 69 1 {can't set "wi
98c0: 64 65 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 de": variable mu
98d0: 73 74 20 68 61 76 65 20 69 6e 74 65 67 65 72 20 st have integer
98e0: 76 61 6c 75 65 7d 20 31 7d 0a 2b 7d 20 7b 31 20 value} 1}.+} {1
98f0: 7b 63 61 6e 27 74 20 73 65 74 20 22 77 69 64 65 {can't set "wide
9900: 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74 ": variable must
9910: 20 68 61 76 65 20 77 69 64 65 20 69 6e 74 65 67 have wide integ
9920: 65 72 20 76 61 6c 75 65 7d 20 31 7d 0a 20 0a 20 er value} 1}. .
9930: 74 65 73 74 20 6c 69 6e 6b 2d 33 2e 31 20 7b 72 test link-3.1 {r
9940: 65 61 64 2d 6f 6e 6c 79 20 76 61 72 69 61 62 6c ead-only variabl
9950: 65 73 7d 20 7b 74 65 73 74 6c 69 6e 6b 7d 20 7b es} {testlink} {
9960: 0a 20 20 20 20 20 74 65 73 74 6c 69 6e 6b 20 64 . testlink d
9970: 65 6c 65 74 65 0a 40 40 20 2d 32 33 34 2c 37 20 elete.@@ -234,7
9980: 2b 32 33 35 2c 37 20 40 40 0a 20 20 20 20 20 74 +235,7 @@. t
9990: 65 73 74 6c 69 6e 6b 20 63 72 65 61 74 65 20 31 estlink create 1
99a0: 20 31 20 31 20 31 20 31 20 31 20 31 20 31 20 31 1 1 1 1 1 1 1 1
99b0: 20 31 20 31 20 31 20 31 20 31 0a 20 20 20 20 20 1 1 1 1 1.
99c0: 74 65 73 74 6c 69 6e 6b 20 73 65 74 20 2d 34 20 testlink set -4
99d0: 31 36 2e 33 20 31 20 7b 7d 20 37 37 38 38 39 39 16.3 1 {} 778899
99e0: 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 {} {} {} {} {}
99f0: 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 0a 20 20 20 20 {} {} {} {}.
9a00: 20 6c 69 73 74 20 5b 63 61 74 63 68 20 78 20 6d list [catch x m
9a10: 73 67 5d 20 24 6d 73 67 20 24 77 69 64 65 0a 2d sg] $msg $wide.-
9a20: 7d 20 7b 31 20 7b 63 61 6e 27 74 20 73 65 74 20 } {1 {can't set
9a30: 22 79 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 "y": variable mu
9a40: 73 74 20 68 61 76 65 20 69 6e 74 65 67 65 72 20 st have integer
9a50: 76 61 6c 75 65 7d 20 37 37 38 38 39 39 7d 0a 2b value} 778899}.+
9a60: 7d 20 7b 31 20 7b 63 61 6e 27 74 20 73 65 74 20 } {1 {can't set
9a70: 22 79 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 "y": variable mu
9a80: 73 74 20 68 61 76 65 20 77 69 64 65 20 69 6e 74 st have wide int
9a90: 65 67 65 72 20 76 61 6c 75 65 7d 20 37 37 38 38 eger value} 7788
9aa0: 39 39 7d 0a 20 0a 20 74 65 73 74 20 6c 69 6e 6b 99}. . test link
9ab0: 2d 38 2e 31 20 7b 54 63 6c 5f 55 70 64 61 74 65 -8.1 {Tcl_Update
9ac0: 4c 69 6e 6b 65 64 56 61 72 20 70 72 6f 63 65 64 LinkedVar proced
9ad0: 75 72 65 7d 20 7b 74 65 73 74 6c 69 6e 6b 7d 20 ure} {testlink}
9ae0: 7b 0a 20 20 20 20 20 70 72 6f 63 20 78 20 61 72 {. proc x ar
9af0: 67 73 20 7b 0a 40 40 20 2d 32 36 39 2c 36 20 2b gs {.@@ -269,6 +
9b00: 32 37 30 2c 32 39 36 20 40 40 0a 20 09 74 65 73 270,296 @@. .tes
9b10: 74 6c 69 6e 6b 20 75 70 64 61 74 65 20 34 37 20 tlink update 47
9b20: 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b {} {} {} {} {} {
9b30: 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d } {} {} {} {} {}
9b40: 20 7b 7d 20 7b 7d 0a 20 20 20 20 20 7d 20 6d 73 {} {}. } ms
9b50: 67 5d 20 24 6d 73 67 20 24 69 6e 74 0a 20 7d 20 g] $msg $int. }
9b60: 7b 30 20 7b 7d 20 34 37 7d 0a 2b 74 65 73 74 20 {0 {} 47}.+test
9b70: 6c 69 6e 6b 2d 39 2e 31 20 7b 6c 69 6e 6b 61 72 link-9.1 {linkar
9b80: 72 61 79 20 75 73 61 67 65 20 6d 65 73 73 61 67 ray usage messag
9b90: 65 73 7d 20 7b 0a 2b 20 20 73 65 74 20 6d 79 6c es} {.+ set myl
9ba0: 69 73 74 20 5b 6c 69 73 74 5d 0a 2b 20 20 63 61 ist [list].+ ca
9bb0: 74 63 68 20 7b 74 65 73 74 6c 69 6e 6b 61 72 72 tch {testlinkarr
9bc0: 61 79 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 ay} my(msg); lap
9bd0: 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 pend mylist $my(
9be0: 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 msg);unset my(ms
9bf0: 67 29 0a 2b 20 20 63 61 74 63 68 20 7b 74 65 73 g).+ catch {tes
9c00: 74 6c 69 6e 6b 61 72 72 61 79 20 78 7d 20 6d 79 tlinkarray x} my
9c10: 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d (msg); lappend m
9c20: 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 ylist $my(msg);u
9c30: 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 nset my(msg).+
9c40: 63 61 74 63 68 20 7b 74 65 73 74 6c 69 6e 6b 61 catch {testlinka
9c50: 72 72 61 79 20 75 70 64 61 74 65 7d 20 6d 79 28 rray update} my(
9c60: 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 msg); lappend my
9c70: 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e list $my(msg);un
9c80: 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 63 set my(msg).+ c
9c90: 61 74 63 68 20 7b 74 65 73 74 6c 69 6e 6b 61 72 atch {testlinkar
9ca0: 72 61 79 20 72 65 6d 6f 76 65 7d 20 6d 79 28 6d ray remove} my(m
9cb0: 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c sg); lappend myl
9cc0: 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 ist $my(msg);uns
9cd0: 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 63 61 et my(msg).+ ca
9ce0: 74 63 68 20 7b 74 65 73 74 6c 69 6e 6b 61 72 72 tch {testlinkarr
9cf0: 61 79 20 63 72 65 61 74 65 7d 20 6d 79 28 6d 73 ay create} my(ms
9d00: 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 g); lappend myli
9d10: 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 st $my(msg);unse
9d20: 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 63 61 74 t my(msg).+ cat
9d30: 63 68 20 7b 74 65 73 74 6c 69 6e 6b 61 72 72 61 ch {testlinkarra
9d40: 79 20 63 72 65 61 74 65 20 78 78 20 31 20 6d 79 y create xx 1 my
9d50: 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 } my(msg); lappe
9d60: 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 nd mylist $my(ms
9d70: 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 g);unset my(msg)
9d80: 0a 2b 20 20 63 61 74 63 68 20 7b 74 65 73 74 6c .+ catch {testl
9d90: 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 20 inkarray create
9da0: 63 68 61 72 2a 20 30 20 6d 79 7d 20 6d 79 28 6d char* 0 my} my(m
9db0: 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c sg); lappend myl
9dc0: 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 ist $my(msg);uns
9dd0: 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 6a 6f et my(msg).+ jo
9de0: 69 6e 20 24 6d 79 6c 69 73 74 20 22 5c 6e 22 0a in $mylist "\n".
9df0: 2b 7d 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 +} {wrong # args
9e00: 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 74 65 73 : should be "tes
9e10: 74 6c 69 6e 6b 61 72 72 61 79 20 6f 70 74 69 6f tlinkarray optio
9e20: 6e 20 61 72 67 73 22 0a 2b 62 61 64 20 6f 70 74 n args".+bad opt
9e30: 69 6f 6e 20 22 78 22 3a 20 6d 75 73 74 20 62 65 ion "x": must be
9e40: 20 75 70 64 61 74 65 2c 20 72 65 6d 6f 76 65 2c update, remove,
9e50: 20 6f 72 20 63 72 65 61 74 65 0a 2b 0a 2b 0a 2b or create.+.+.+
9e60: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 wrong # args: sh
9e70: 6f 75 6c 64 20 62 65 20 22 74 65 73 74 6c 69 6e ould be "testlin
9e80: 6b 61 72 72 61 79 20 63 72 65 61 74 65 20 3f 2d karray create ?-
9e90: 72 65 61 64 6f 6e 6c 79 3f 20 74 79 70 65 20 73 readonly? type s
9ea0: 69 7a 65 20 6e 61 6d 65 20 3f 61 64 64 72 65 73 ize name ?addres
9eb0: 73 3f 22 0a 2b 62 61 64 20 74 79 70 65 20 22 78 s?".+bad type "x
9ec0: 78 22 3a 20 6d 75 73 74 20 62 65 20 63 68 61 72 x": must be char
9ed0: 2c 20 75 63 68 61 72 2c 20 73 68 6f 72 74 2c 20 , uchar, short,
9ee0: 75 73 68 6f 72 74 2c 20 69 6e 74 2c 20 75 69 6e ushort, int, uin
9ef0: 74 2c 20 6c 6f 6e 67 2c 20 75 6c 6f 6e 67 2c 20 t, long, ulong,
9f00: 77 69 64 65 2c 20 75 77 69 64 65 2c 20 66 6c 6f wide, uwide, flo
9f10: 61 74 2c 20 64 6f 75 62 6c 65 2c 20 73 74 72 69 at, double, stri
9f20: 6e 67 2c 20 63 68 61 72 2a 2c 20 6f 72 20 62 69 ng, char*, or bi
9f30: 6e 61 72 79 0a 2b 77 72 6f 6e 67 20 61 72 72 61 nary.+wrong arra
9f40: 79 20 73 69 7a 65 20 67 69 76 65 6e 7d 0a 2b 74 y size given}.+t
9f50: 65 73 74 20 6c 69 6e 6b 2d 31 30 2e 31 20 7b 6c est link-10.1 {l
9f60: 69 6e 6b 61 72 72 61 79 20 63 68 61 72 2a 7d 20 inkarray char*}
9f70: 7b 0a 2b 20 20 73 65 74 20 6d 79 6c 69 73 74 20 {.+ set mylist
9f80: 5b 6c 69 73 74 5d 0a 2b 20 20 74 65 73 74 6c 69 [list].+ testli
9f90: 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 20 63 nkarray create c
9fa0: 68 61 72 2a 20 31 20 3a 3a 6d 79 28 76 61 72 29 har* 1 ::my(var)
9fb0: 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 .+ lappend myli
9fc0: 73 74 20 5b 73 65 74 20 3a 3a 6d 79 28 76 61 72 st [set ::my(var
9fd0: 29 20 22 22 5d 0a 2b 20 20 63 61 74 63 68 20 7b ) ""].+ catch {
9fe0: 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 78 7d set ::my(var) x}
9ff0: 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e my(msg); lappen
a000: 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 d mylist $my(msg
a010: 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a );unset my(msg).
a020: 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 + testlinkarray
a030: 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 remove ::my(var
a040: 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 ).+ testlinkarr
a050: 61 79 20 63 72 65 61 74 65 20 63 68 61 72 2a 20 ay create char*
a060: 34 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 73 4 ::my(var).+ s
a070: 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 78 0a 2b et ::my(var) x.+
a080: 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d catch {set ::m
a090: 79 28 76 61 72 29 20 78 79 7a 7a 7d 20 6d 79 28 y(var) xyzz} my(
a0a0: 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 msg); lappend my
a0b0: 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e list $my(msg);un
a0c0: 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74 set my(msg).+ t
a0d0: 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d estlinkarray rem
a0e0: 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 ove ::my(var).+
a0f0: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 testlinkarray c
a100: 72 65 61 74 65 20 2d 72 20 63 68 61 72 2a 20 34 reate -r char* 4
a110: 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 ::my(var).+ ca
a120: 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 tch {set ::my(va
a130: 72 29 20 78 7d 20 6d 79 28 6d 73 67 29 3b 20 6c r) x} my(msg); l
a140: 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d append mylist $m
a150: 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 y(msg);unset my(
a160: 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b msg).+ testlink
a170: 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d array remove ::m
a180: 79 28 76 61 72 29 3b 20 75 6e 73 65 74 20 6d 79 y(var); unset my
a190: 3b 20 6a 6f 69 6e 20 24 6d 79 6c 69 73 74 20 22 ; join $mylist "
a1a0: 5c 6e 22 0a 2b 7d 20 7b 0a 2b 63 61 6e 27 74 20 \n".+} {.+can't
a1b0: 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a set "::my(var)":
a1c0: 20 77 72 6f 6e 67 20 73 69 7a 65 20 6f 66 20 63 wrong size of c
a1d0: 68 61 72 2a 20 76 61 6c 75 65 0a 2b 63 61 6e 27 har* value.+can'
a1e0: 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 t set "::my(var)
a1f0: 22 3a 20 77 72 6f 6e 67 20 73 69 7a 65 20 6f 66 ": wrong size of
a200: 20 63 68 61 72 2a 20 76 61 6c 75 65 0a 2b 63 61 char* value.+ca
a210: 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 n't set "::my(va
a220: 72 29 22 3a 20 6c 69 6e 6b 65 64 20 76 61 72 69 r)": linked vari
a230: 61 62 6c 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c able is read-onl
a240: 79 7d 0a 2b 74 65 73 74 20 6c 69 6e 6b 2d 31 31 y}.+test link-11
a250: 2e 31 20 7b 6c 69 6e 6b 61 72 72 61 79 20 63 68 .1 {linkarray ch
a260: 61 72 7d 20 7b 0a 2b 20 20 73 65 74 20 6d 79 6c ar} {.+ set myl
a270: 69 73 74 20 5b 6c 69 73 74 5d 0a 2b 20 20 74 65 ist [list].+ te
a280: 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 61 stlinkarray crea
a290: 74 65 20 63 68 61 72 20 31 20 3a 3a 6d 79 28 76 te char 1 ::my(v
a2a0: 61 72 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 ar).+ catch {se
a2b0: 74 20 3a 3a 6d 79 28 76 61 72 29 20 78 7d 20 6d t ::my(var) x} m
a2c0: 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 y(msg); lappend
a2d0: 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b mylist $my(msg);
a2e0: 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 unset my(msg).+
a2f0: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 lappend mylist
a300: 5b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 [set ::my(var) 1
a310: 32 30 5d 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 20].+ catch {se
a320: 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 32 33 34 t ::my(var) 1234
a330: 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 } my(msg); lappe
a340: 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 nd mylist $my(ms
a350: 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 g);unset my(msg)
a360: 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 .+ testlinkarra
a370: 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 y remove ::my(va
a380: 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 r).+ testlinkar
a390: 72 61 79 20 63 72 65 61 74 65 20 63 68 61 72 20 ray create char
a3a0: 34 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 63 4 ::my(var).+ c
a3b0: 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 atch {set ::my(v
a3c0: 61 72 29 20 7b 31 20 32 20 33 7d 7d 20 6d 79 28 ar) {1 2 3}} my(
a3d0: 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 msg); lappend my
a3e0: 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e list $my(msg);un
a3f0: 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 73 set my(msg).+ s
a400: 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31 20 et ::my(var) {1
a410: 32 20 33 20 34 7d 0a 2b 20 20 6c 61 70 70 65 6e 2 3 4}.+ lappen
a420: 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 76 61 72 d mylist $my(var
a430: 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 ).+ testlinkarr
a440: 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 ay remove ::my(v
a450: 61 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 ar).+ testlinka
a460: 72 72 61 79 20 63 72 65 61 74 65 20 2d 72 20 63 rray create -r c
a470: 68 61 72 20 32 20 3a 3a 6d 79 28 76 61 72 29 0a har 2 ::my(var).
a480: 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a + catch {set ::
a490: 6d 79 28 76 61 72 29 20 7b 31 20 32 7d 7d 20 6d my(var) {1 2}} m
a4a0: 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 y(msg); lappend
a4b0: 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b mylist $my(msg);
a4c0: 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 unset my(msg).+
a4d0: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 testlinkarray r
a4e0: 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 3b emove ::my(var);
a4f0: 20 75 6e 73 65 74 20 6d 79 3b 20 6a 6f 69 6e 20 unset my; join
a500: 24 6d 79 6c 69 73 74 20 22 5c 6e 22 0a 2b 7d 20 $mylist "\n".+}
a510: 7b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 {can't set "::my
a520: 28 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c 65 (var)": variable
a530: 20 6d 75 73 74 20 68 61 76 65 20 63 68 61 72 20 must have char
a540: 76 61 6c 75 65 0a 2b 31 32 30 0a 2b 63 61 6e 27 value.+120.+can'
a550: 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 t set "::my(var)
a560: 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74 ": variable must
a570: 20 68 61 76 65 20 63 68 61 72 20 76 61 6c 75 65 have char value
a580: 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d .+can't set "::m
a590: 79 28 76 61 72 29 22 3a 20 77 72 6f 6e 67 20 64 y(var)": wrong d
a5a0: 69 6d 65 6e 73 69 6f 6e 0a 2b 31 20 32 20 33 20 imension.+1 2 3
a5b0: 34 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 4.+can't set "::
a5c0: 6d 79 28 76 61 72 29 22 3a 20 6c 69 6e 6b 65 64 my(var)": linked
a5d0: 20 76 61 72 69 61 62 6c 65 20 69 73 20 72 65 61 variable is rea
a5e0: 64 2d 6f 6e 6c 79 7d 0a 2b 74 65 73 74 20 6c 69 d-only}.+test li
a5f0: 6e 6b 2d 31 32 2e 31 20 7b 6c 69 6e 6b 61 72 72 nk-12.1 {linkarr
a600: 61 79 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 ay unsigned char
a610: 7d 20 7b 0a 2b 20 20 73 65 74 20 6d 79 6c 69 73 } {.+ set mylis
a620: 74 20 5b 6c 69 73 74 5d 0a 2b 20 20 74 65 73 74 t [list].+ test
a630: 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 linkarray create
a640: 20 75 63 68 61 72 20 31 20 3a 3a 6d 79 28 76 61 uchar 1 ::my(va
a650: 72 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 r).+ catch {set
a660: 20 3a 3a 6d 79 28 76 61 72 29 20 78 7d 20 6d 79 ::my(var) x} my
a670: 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d (msg); lappend m
a680: 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 ylist $my(msg);u
a690: 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 nset my(msg).+
a6a0: 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 5b lappend mylist [
a6b0: 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 32 set ::my(var) 12
a6c0: 30 5d 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 0].+ catch {set
a6d0: 20 3a 3a 6d 79 28 76 61 72 29 20 31 32 33 34 7d ::my(var) 1234}
a6e0: 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e my(msg); lappen
a6f0: 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 d mylist $my(msg
a700: 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a );unset my(msg).
a710: 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a + catch {set ::
a720: 6d 79 28 76 61 72 29 20 2d 31 7d 20 6d 79 28 6d my(var) -1} my(m
a730: 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c sg); lappend myl
a740: 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 ist $my(msg);uns
a750: 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65 et my(msg).+ te
a760: 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f stlinkarray remo
a770: 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 ve ::my(var).+
a780: 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 testlinkarray cr
a790: 65 61 74 65 20 75 63 68 61 72 20 34 20 3a 3a 6d eate uchar 4 ::m
a7a0: 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20 y(var).+ catch
a7b0: 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b {set ::my(var) {
a7c0: 31 20 32 20 33 7d 7d 20 6d 79 28 6d 73 67 29 3b 1 2 3}} my(msg);
a7d0: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 lappend mylist
a7e0: 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d $my(msg);unset m
a7f0: 79 28 6d 73 67 29 0a 2b 20 20 73 65 74 20 3a 3a y(msg).+ set ::
a800: 6d 79 28 76 61 72 29 20 7b 31 20 32 20 33 20 34 my(var) {1 2 3 4
a810: 7d 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c }.+ lappend myl
a820: 69 73 74 20 24 6d 79 28 76 61 72 29 0a 2b 20 20 ist $my(var).+
a830: 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 testlinkarray re
a840: 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b move ::my(var).+
a850: 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 testlinkarray
a860: 63 72 65 61 74 65 20 2d 72 20 75 63 68 61 72 20 create -r uchar
a870: 32 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 63 2 ::my(var).+ c
a880: 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 atch {set ::my(v
a890: 61 72 29 20 7b 31 20 32 7d 7d 20 6d 79 28 6d 73 ar) {1 2}} my(ms
a8a0: 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 g); lappend myli
a8b0: 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 st $my(msg);unse
a8c0: 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65 73 t my(msg).+ tes
a8d0: 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 tlinkarray remov
a8e0: 65 20 3a 3a 6d 79 28 76 61 72 29 3b 20 75 6e 73 e ::my(var); uns
a8f0: 65 74 20 6d 79 3b 20 6a 6f 69 6e 20 24 6d 79 6c et my; join $myl
a900: 69 73 74 20 22 5c 6e 22 0a 2b 7d 20 7b 63 61 6e ist "\n".+} {can
a910: 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 't set "::my(var
a920: 29 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 )": variable mus
a930: 74 20 68 61 76 65 20 75 6e 73 69 67 6e 65 64 20 t have unsigned
a940: 63 68 61 72 20 76 61 6c 75 65 0a 2b 31 32 30 0a char value.+120.
a950: 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 +can't set "::my
a960: 28 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c 65 (var)": variable
a970: 20 6d 75 73 74 20 68 61 76 65 20 75 6e 73 69 67 must have unsig
a980: 6e 65 64 20 63 68 61 72 20 76 61 6c 75 65 0a 2b ned char value.+
a990: 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 can't set "::my(
a9a0: 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c 65 20 var)": variable
a9b0: 6d 75 73 74 20 68 61 76 65 20 75 6e 73 69 67 6e must have unsign
a9c0: 65 64 20 63 68 61 72 20 76 61 6c 75 65 0a 2b 63 ed char value.+c
a9d0: 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 an't set "::my(v
a9e0: 61 72 29 22 3a 20 77 72 6f 6e 67 20 64 69 6d 65 ar)": wrong dime
a9f0: 6e 73 69 6f 6e 0a 2b 31 20 32 20 33 20 34 0a 2b nsion.+1 2 3 4.+
aa00: 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 can't set "::my(
aa10: 76 61 72 29 22 3a 20 6c 69 6e 6b 65 64 20 76 61 var)": linked va
aa20: 72 69 61 62 6c 65 20 69 73 20 72 65 61 64 2d 6f riable is read-o
aa30: 6e 6c 79 7d 0a 2b 74 65 73 74 20 6c 69 6e 6b 2d nly}.+test link-
aa40: 31 33 2e 31 20 7b 6c 69 6e 6b 61 72 72 61 79 20 13.1 {linkarray
aa50: 73 68 6f 72 74 7d 20 7b 0a 2b 20 20 73 65 74 20 short} {.+ set
aa60: 6d 79 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 2b 20 mylist [list].+
aa70: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 testlinkarray c
aa80: 72 65 61 74 65 20 73 68 6f 72 74 20 31 20 3a 3a reate short 1 ::
aa90: 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 my(var).+ catch
aaa0: 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 {set ::my(var)
aab0: 78 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 x} my(msg); lapp
aac0: 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d end mylist $my(m
aad0: 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 sg);unset my(msg
aae0: 29 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c ).+ lappend myl
aaf0: 69 73 74 20 5b 73 65 74 20 3a 3a 6d 79 28 76 61 ist [set ::my(va
ab00: 72 29 20 31 32 30 5d 0a 2b 20 20 63 61 74 63 68 r) 120].+ catch
ab10: 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 {set ::my(var)
ab20: 31 32 33 34 35 36 7d 20 6d 79 28 6d 73 67 29 3b 123456} my(msg);
ab30: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 lappend mylist
ab40: 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d $my(msg);unset m
ab50: 79 28 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c 69 y(msg).+ testli
ab60: 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a nkarray remove :
ab70: 3a 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 73 74 :my(var).+ test
ab80: 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 linkarray create
ab90: 20 73 68 6f 72 74 20 34 20 3a 3a 6d 79 28 76 61 short 4 ::my(va
aba0: 72 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 r).+ catch {set
abb0: 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31 20 32 20 ::my(var) {1 2
abc0: 33 7d 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 3}} my(msg); lap
abd0: 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 pend mylist $my(
abe0: 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 msg);unset my(ms
abf0: 67 29 0a 2b 20 20 73 65 74 20 3a 3a 6d 79 28 76 g).+ set ::my(v
ac00: 61 72 29 20 7b 31 20 32 20 33 20 34 7d 0a 2b 20 ar) {1 2 3 4}.+
ac10: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 lappend mylist
ac20: 24 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 73 74 $my(var).+ test
ac30: 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 linkarray remove
ac40: 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 ::my(var).+ te
ac50: 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 61 stlinkarray crea
ac60: 74 65 20 2d 72 20 73 68 6f 72 74 20 32 20 3a 3a te -r short 2 ::
ac70: 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 my(var).+ catch
ac80: 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 {set ::my(var)
ac90: 7b 31 20 32 7d 7d 20 6d 79 28 6d 73 67 29 3b 20 {1 2}} my(msg);
aca0: 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 lappend mylist $
acb0: 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 my(msg);unset my
acc0: 28 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c 69 6e (msg).+ testlin
acd0: 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a karray remove ::
ace0: 6d 79 28 76 61 72 29 3b 20 75 6e 73 65 74 20 6d my(var); unset m
acf0: 79 3b 20 6a 6f 69 6e 20 24 6d 79 6c 69 73 74 20 y; join $mylist
ad00: 22 5c 6e 22 0a 2b 7d 20 7b 63 61 6e 27 74 20 73 "\n".+} {can't s
ad10: 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 et "::my(var)":
ad20: 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20 68 61 variable must ha
ad30: 76 65 20 73 68 6f 72 74 20 76 61 6c 75 65 0a 2b ve short value.+
ad40: 31 32 30 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 120.+can't set "
ad50: 3a 3a 6d 79 28 76 61 72 29 22 3a 20 76 61 72 69 ::my(var)": vari
ad60: 61 62 6c 65 20 6d 75 73 74 20 68 61 76 65 20 73 able must have s
ad70: 68 6f 72 74 20 76 61 6c 75 65 0a 2b 63 61 6e 27 hort value.+can'
ad80: 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 t set "::my(var)
ad90: 22 3a 20 77 72 6f 6e 67 20 64 69 6d 65 6e 73 69 ": wrong dimensi
ada0: 6f 6e 0a 2b 31 20 32 20 33 20 34 0a 2b 63 61 6e on.+1 2 3 4.+can
adb0: 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 't set "::my(var
adc0: 29 22 3a 20 6c 69 6e 6b 65 64 20 76 61 72 69 61 )": linked varia
add0: 62 6c 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 ble is read-only
ade0: 7d 0a 2b 74 65 73 74 20 6c 69 6e 6b 2d 31 34 2e }.+test link-14.
adf0: 31 20 7b 6c 69 6e 6b 61 72 72 61 79 20 75 6e 73 1 {linkarray uns
ae00: 69 67 6e 65 64 20 73 68 6f 72 74 7d 20 7b 0a 2b igned short} {.+
ae10: 20 20 73 65 74 20 6d 79 6c 69 73 74 20 5b 6c 69 set mylist [li
ae20: 73 74 5d 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 st].+ testlinka
ae30: 72 72 61 79 20 63 72 65 61 74 65 20 75 73 68 6f rray create usho
ae40: 72 74 20 31 20 3a 3a 6d 79 28 76 61 72 29 0a 2b rt 1 ::my(var).+
ae50: 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d catch {set ::m
ae60: 79 28 76 61 72 29 20 78 7d 20 6d 79 28 6d 73 67 y(var) x} my(msg
ae70: 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 ); lappend mylis
ae80: 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 t $my(msg);unset
ae90: 20 6d 79 28 6d 73 67 29 0a 2b 20 20 6c 61 70 70 my(msg).+ lapp
aea0: 65 6e 64 20 6d 79 6c 69 73 74 20 5b 73 65 74 20 end mylist [set
aeb0: 3a 3a 6d 79 28 76 61 72 29 20 31 32 30 5d 0a 2b ::my(var) 120].+
aec0: 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d catch {set ::m
aed0: 79 28 76 61 72 29 20 31 32 33 34 35 36 7d 20 6d y(var) 123456} m
aee0: 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 y(msg); lappend
aef0: 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b mylist $my(msg);
af00: 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 unset my(msg).+
af10: 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 catch {set ::my
af20: 28 76 61 72 29 20 2d 31 7d 20 6d 79 28 6d 73 67 (var) -1} my(msg
af30: 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 ); lappend mylis
af40: 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 t $my(msg);unset
af50: 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65 73 74 my(msg).+ test
af60: 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 linkarray remove
af70: 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 ::my(var).+ te
af80: 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 61 stlinkarray crea
af90: 74 65 20 75 73 68 6f 72 74 20 34 20 3a 3a 6d 79 te ushort 4 ::my
afa0: 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20 7b (var).+ catch {
afb0: 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31 set ::my(var) {1
afc0: 20 32 20 33 7d 7d 20 6d 79 28 6d 73 67 29 3b 20 2 3}} my(msg);
afd0: 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 lappend mylist $
afe0: 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 my(msg);unset my
aff0: 28 6d 73 67 29 0a 2b 20 20 73 65 74 20 3a 3a 6d (msg).+ set ::m
b000: 79 28 76 61 72 29 20 7b 31 20 32 20 33 20 34 7d y(var) {1 2 3 4}
b010: 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 .+ lappend myli
b020: 73 74 20 24 6d 79 28 76 61 72 29 0a 2b 20 20 74 st $my(var).+ t
b030: 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d estlinkarray rem
b040: 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 ove ::my(var).+
b050: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 testlinkarray c
b060: 72 65 61 74 65 20 2d 72 20 75 73 68 6f 72 74 20 reate -r ushort
b070: 32 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 63 2 ::my(var).+ c
b080: 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 atch {set ::my(v
b090: 61 72 29 20 7b 31 20 32 7d 7d 20 6d 79 28 6d 73 ar) {1 2}} my(ms
b0a0: 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 g); lappend myli
b0b0: 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 st $my(msg);unse
b0c0: 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65 73 t my(msg).+ tes
b0d0: 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 tlinkarray remov
b0e0: 65 20 3a 3a 6d 79 28 76 61 72 29 3b 20 75 6e 73 e ::my(var); uns
b0f0: 65 74 20 6d 79 3b 20 6a 6f 69 6e 20 24 6d 79 6c et my; join $myl
b100: 69 73 74 20 22 5c 6e 22 0a 2b 7d 20 7b 63 61 6e ist "\n".+} {can
b110: 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 't set "::my(var
b120: 29 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 )": variable mus
b130: 74 20 68 61 76 65 20 75 6e 73 69 67 6e 65 64 20 t have unsigned
b140: 73 68 6f 72 74 20 76 61 6c 75 65 0a 2b 31 32 30 short value.+120
b150: 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d .+can't set "::m
b160: 79 28 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c y(var)": variabl
b170: 65 20 6d 75 73 74 20 68 61 76 65 20 75 6e 73 69 e must have unsi
b180: 67 6e 65 64 20 73 68 6f 72 74 20 76 61 6c 75 65 gned short value
b190: 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d .+can't set "::m
b1a0: 79 28 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c y(var)": variabl
b1b0: 65 20 6d 75 73 74 20 68 61 76 65 20 75 6e 73 69 e must have unsi
b1c0: 67 6e 65 64 20 73 68 6f 72 74 20 76 61 6c 75 65 gned short value
b1d0: 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d .+can't set "::m
b1e0: 79 28 76 61 72 29 22 3a 20 77 72 6f 6e 67 20 64 y(var)": wrong d
b1f0: 69 6d 65 6e 73 69 6f 6e 0a 2b 31 20 32 20 33 20 imension.+1 2 3
b200: 34 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 4.+can't set "::
b210: 6d 79 28 76 61 72 29 22 3a 20 6c 69 6e 6b 65 64 my(var)": linked
b220: 20 76 61 72 69 61 62 6c 65 20 69 73 20 72 65 61 variable is rea
b230: 64 2d 6f 6e 6c 79 7d 0a 2b 74 65 73 74 20 6c 69 d-only}.+test li
b240: 6e 6b 2d 31 35 2e 31 20 7b 6c 69 6e 6b 61 72 72 nk-15.1 {linkarr
b250: 61 79 20 69 6e 74 7d 20 7b 0a 2b 20 20 73 65 74 ay int} {.+ set
b260: 20 6d 79 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 2b mylist [list].+
b270: 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 testlinkarray
b280: 63 72 65 61 74 65 20 69 6e 74 20 31 20 3a 3a 6d create int 1 ::m
b290: 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20 y(var).+ catch
b2a0: 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 78 {set ::my(var) x
b2b0: 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 } my(msg); lappe
b2c0: 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 nd mylist $my(ms
b2d0: 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 g);unset my(msg)
b2e0: 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 .+ lappend myli
b2f0: 73 74 20 5b 73 65 74 20 3a 3a 6d 79 28 76 61 72 st [set ::my(var
b300: 29 20 31 32 30 5d 0a 2b 20 20 63 61 74 63 68 20 ) 120].+ catch
b310: 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 {set ::my(var) 1
b320: 65 33 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 e3} my(msg); lap
b330: 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 pend mylist $my(
b340: 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 msg);unset my(ms
b350: 67 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 g).+ testlinkar
b360: 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 ray remove ::my(
b370: 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b var).+ testlink
b380: 61 72 72 61 79 20 63 72 65 61 74 65 20 69 6e 74 array create int
b390: 20 34 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 4 ::my(var).+
b3a0: 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 catch {set ::my(
b3b0: 76 61 72 29 20 7b 31 20 32 20 33 7d 7d 20 6d 79 var) {1 2 3}} my
b3c0: 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d (msg); lappend m
b3d0: 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 ylist $my(msg);u
b3e0: 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 nset my(msg).+
b3f0: 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31 set ::my(var) {1
b400: 20 32 20 33 20 34 7d 0a 2b 20 20 6c 61 70 70 65 2 3 4}.+ lappe
b410: 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 76 61 nd mylist $my(va
b420: 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 r).+ testlinkar
b430: 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 ray remove ::my(
b440: 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b var).+ testlink
b450: 61 72 72 61 79 20 63 72 65 61 74 65 20 2d 72 20 array create -r
b460: 69 6e 74 20 32 20 3a 3a 6d 79 28 76 61 72 29 0a int 2 ::my(var).
b470: 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a + catch {set ::
b480: 6d 79 28 76 61 72 29 20 7b 31 20 32 7d 7d 20 6d my(var) {1 2}} m
b490: 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 y(msg); lappend
b4a0: 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b mylist $my(msg);
b4b0: 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 unset my(msg).+
b4c0: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 testlinkarray r
b4d0: 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 3b emove ::my(var);
b4e0: 20 75 6e 73 65 74 20 6d 79 3b 20 6a 6f 69 6e 20 unset my; join
b4f0: 24 6d 79 6c 69 73 74 20 22 5c 6e 22 0a 2b 7d 20 $mylist "\n".+}
b500: 7b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 {can't set "::my
b510: 28 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c 65 (var)": variable
b520: 20 6d 75 73 74 20 68 61 76 65 20 69 6e 74 65 67 must have integ
b530: 65 72 20 76 61 6c 75 65 0a 2b 31 32 30 0a 2b 63 er value.+120.+c
b540: 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 an't set "::my(v
b550: 61 72 29 22 3a 20 76 61 72 69 61 62 6c 65 20 6d ar)": variable m
b560: 75 73 74 20 68 61 76 65 20 69 6e 74 65 67 65 72 ust have integer
b570: 20 76 61 6c 75 65 0a 2b 63 61 6e 27 74 20 73 65 value.+can't se
b580: 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 77 t "::my(var)": w
b590: 72 6f 6e 67 20 64 69 6d 65 6e 73 69 6f 6e 0a 2b rong dimension.+
b5a0: 31 20 32 20 33 20 34 0a 2b 63 61 6e 27 74 20 73 1 2 3 4.+can't s
b5b0: 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 et "::my(var)":
b5c0: 6c 69 6e 6b 65 64 20 76 61 72 69 61 62 6c 65 20 linked variable
b5d0: 69 73 20 72 65 61 64 2d 6f 6e 6c 79 7d 0a 2b 74 is read-only}.+t
b5e0: 65 73 74 20 6c 69 6e 6b 2d 31 36 2e 31 20 7b 6c est link-16.1 {l
b5f0: 69 6e 6b 61 72 72 61 79 20 75 6e 73 69 67 6e 65 inkarray unsigne
b600: 64 20 69 6e 74 7d 20 7b 0a 2b 20 20 73 65 74 20 d int} {.+ set
b610: 6d 79 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 2b 20 mylist [list].+
b620: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 testlinkarray c
b630: 72 65 61 74 65 20 75 69 6e 74 20 31 20 3a 3a 6d reate uint 1 ::m
b640: 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20 y(var).+ catch
b650: 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 78 {set ::my(var) x
b660: 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 } my(msg); lappe
b670: 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 nd mylist $my(ms
b680: 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 g);unset my(msg)
b690: 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 .+ lappend myli
b6a0: 73 74 20 5b 73 65 74 20 3a 3a 6d 79 28 76 61 72 st [set ::my(var
b6b0: 29 20 31 32 30 5d 0a 2b 20 20 63 61 74 63 68 20 ) 120].+ catch
b6c0: 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 {set ::my(var) 1
b6d0: 65 33 33 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 e33} my(msg); la
b6e0: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 ppend mylist $my
b6f0: 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d (msg);unset my(m
b700: 73 67 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 sg).+ catch {se
b710: 74 20 3a 3a 6d 79 28 76 61 72 29 20 2d 31 7d 20 t ::my(var) -1}
b720: 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 my(msg); lappend
b730: 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 mylist $my(msg)
b740: 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b ;unset my(msg).+
b750: 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 testlinkarray
b760: 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 remove ::my(var)
b770: 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 .+ testlinkarra
b780: 79 20 63 72 65 61 74 65 20 75 69 6e 74 20 34 20 y create uint 4
b790: 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 74 ::my(var).+ cat
b7a0: 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 ch {set ::my(var
b7b0: 29 20 7b 31 20 32 20 33 7d 7d 20 6d 79 28 6d 73 ) {1 2 3}} my(ms
b7c0: 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 g); lappend myli
b7d0: 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 st $my(msg);unse
b7e0: 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 73 65 74 t my(msg).+ set
b7f0: 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31 20 32 20 ::my(var) {1 2
b800: 33 20 34 7d 0a 2b 20 20 6c 61 70 70 65 6e 64 20 3 4}.+ lappend
b810: 6d 79 6c 69 73 74 20 24 6d 79 28 76 61 72 29 0a mylist $my(var).
b820: 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 + testlinkarray
b830: 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 remove ::my(var
b840: 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 ).+ testlinkarr
b850: 61 79 20 63 72 65 61 74 65 20 2d 72 20 75 69 6e ay create -r uin
b860: 74 20 32 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 t 2 ::my(var).+
b870: 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 catch {set ::my
b880: 28 76 61 72 29 20 7b 31 20 32 7d 7d 20 6d 79 28 (var) {1 2}} my(
b890: 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 msg); lappend my
b8a0: 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e list $my(msg);un
b8b0: 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74 set my(msg).+ t
b8c0: 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d estlinkarray rem
b8d0: 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 3b 20 75 ove ::my(var); u
b8e0: 6e 73 65 74 20 6d 79 3b 20 6a 6f 69 6e 20 24 6d nset my; join $m
b8f0: 79 6c 69 73 74 20 22 5c 6e 22 0a 2b 7d 20 7b 63 ylist "\n".+} {c
b900: 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 an't set "::my(v
b910: 61 72 29 22 3a 20 76 61 72 69 61 62 6c 65 20 6d ar)": variable m
b920: 75 73 74 20 68 61 76 65 20 75 6e 73 69 67 6e 65 ust have unsigne
b930: 64 20 69 6e 74 20 76 61 6c 75 65 0a 2b 31 32 30 d int value.+120
b940: 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d .+can't set "::m
b950: 79 28 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c y(var)": variabl
b960: 65 20 6d 75 73 74 20 68 61 76 65 20 75 6e 73 69 e must have unsi
b970: 67 6e 65 64 20 69 6e 74 20 76 61 6c 75 65 0a 2b gned int value.+
b980: 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 can't set "::my(
b990: 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c 65 20 var)": variable
b9a0: 6d 75 73 74 20 68 61 76 65 20 75 6e 73 69 67 6e must have unsign
b9b0: 65 64 20 69 6e 74 20 76 61 6c 75 65 0a 2b 63 61 ed int value.+ca
b9c0: 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 n't set "::my(va
b9d0: 72 29 22 3a 20 77 72 6f 6e 67 20 64 69 6d 65 6e r)": wrong dimen
b9e0: 73 69 6f 6e 0a 2b 31 20 32 20 33 20 34 0a 2b 63 sion.+1 2 3 4.+c
b9f0: 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 an't set "::my(v
ba00: 61 72 29 22 3a 20 6c 69 6e 6b 65 64 20 76 61 72 ar)": linked var
ba10: 69 61 62 6c 65 20 69 73 20 72 65 61 64 2d 6f 6e iable is read-on
ba20: 6c 79 7d 0a 2b 74 65 73 74 20 6c 69 6e 6b 2d 31 ly}.+test link-1
ba30: 37 2e 31 20 7b 6c 69 6e 6b 61 72 72 61 79 20 6c 7.1 {linkarray l
ba40: 6f 6e 67 7d 20 7b 0a 2b 20 20 73 65 74 20 6d 79 ong} {.+ set my
ba50: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 2b 20 20 74 list [list].+ t
ba60: 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 estlinkarray cre
ba70: 61 74 65 20 6c 6f 6e 67 20 31 20 3a 3a 6d 79 28 ate long 1 ::my(
ba80: 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 var).+ catch {s
ba90: 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 78 7d 20 et ::my(var) x}
baa0: 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 my(msg); lappend
bab0: 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 mylist $my(msg)
bac0: 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b ;unset my(msg).+
bad0: 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 lappend mylist
bae0: 20 5b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 [set ::my(var)
baf0: 31 32 30 5d 0a 2b 20 20 63 61 74 63 68 20 7b 73 120].+ catch {s
bb00: 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 65 33 et ::my(var) 1e3
bb10: 33 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 3} my(msg); lapp
bb20: 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d end mylist $my(m
bb30: 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 sg);unset my(msg
bb40: 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 ).+ testlinkarr
bb50: 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 ay remove ::my(v
bb60: 61 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 ar).+ testlinka
bb70: 72 72 61 79 20 63 72 65 61 74 65 20 6c 6f 6e 67 rray create long
bb80: 20 34 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 4 ::my(var).+
bb90: 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 catch {set ::my(
bba0: 76 61 72 29 20 7b 31 20 32 20 33 7d 7d 20 6d 79 var) {1 2 3}} my
bbb0: 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d (msg); lappend m
bbc0: 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 ylist $my(msg);u
bbd0: 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 nset my(msg).+
bbe0: 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31 set ::my(var) {1
bbf0: 20 32 20 33 20 34 7d 0a 2b 20 20 6c 61 70 70 65 2 3 4}.+ lappe
bc00: 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 76 61 nd mylist $my(va
bc10: 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 r).+ testlinkar
bc20: 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 ray remove ::my(
bc30: 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b var).+ testlink
bc40: 61 72 72 61 79 20 63 72 65 61 74 65 20 2d 72 20 array create -r
bc50: 6c 6f 6e 67 20 32 20 3a 3a 6d 79 28 76 61 72 29 long 2 ::my(var)
bc60: 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a .+ catch {set :
bc70: 3a 6d 79 28 76 61 72 29 20 7b 31 20 32 7d 7d 20 :my(var) {1 2}}
bc80: 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 my(msg); lappend
bc90: 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 mylist $my(msg)
bca0: 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b ;unset my(msg).+
bcb0: 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 testlinkarray
bcc0: 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 remove ::my(var)
bcd0: 3b 20 75 6e 73 65 74 20 6d 79 3b 20 6a 6f 69 6e ; unset my; join
bce0: 20 24 6d 79 6c 69 73 74 20 22 5c 6e 22 0a 2b 7d $mylist "\n".+}
bcf0: 20 7b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d {can't set "::m
bd00: 79 28 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c y(var)": variabl
bd10: 65 20 6d 75 73 74 20 68 61 76 65 20 6c 6f 6e 67 e must have long
bd20: 20 76 61 6c 75 65 0a 2b 31 32 30 0a 2b 63 61 6e value.+120.+can
bd30: 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 't set "::my(var
bd40: 29 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 )": variable mus
bd50: 74 20 68 61 76 65 20 6c 6f 6e 67 20 76 61 6c 75 t have long valu
bd60: 65 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a e.+can't set "::
bd70: 6d 79 28 76 61 72 29 22 3a 20 77 72 6f 6e 67 20 my(var)": wrong
bd80: 64 69 6d 65 6e 73 69 6f 6e 0a 2b 31 20 32 20 33 dimension.+1 2 3
bd90: 20 34 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 4.+can't set ":
bda0: 3a 6d 79 28 76 61 72 29 22 3a 20 6c 69 6e 6b 65 :my(var)": linke
bdb0: 64 20 76 61 72 69 61 62 6c 65 20 69 73 20 72 65 d variable is re
bdc0: 61 64 2d 6f 6e 6c 79 7d 0a 2b 74 65 73 74 20 6c ad-only}.+test l
bdd0: 69 6e 6b 2d 31 38 2e 31 20 7b 6c 69 6e 6b 61 72 ink-18.1 {linkar
bde0: 72 61 79 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ray unsigned lon
bdf0: 67 7d 20 7b 0a 2b 20 20 73 65 74 20 6d 79 6c 69 g} {.+ set myli
be00: 73 74 20 5b 6c 69 73 74 5d 0a 2b 20 20 74 65 73 st [list].+ tes
be10: 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74 tlinkarray creat
be20: 65 20 75 6c 6f 6e 67 20 31 20 3a 3a 6d 79 28 76 e ulong 1 ::my(v
be30: 61 72 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 ar).+ catch {se
be40: 74 20 3a 3a 6d 79 28 76 61 72 29 20 78 7d 20 6d t ::my(var) x} m
be50: 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 y(msg); lappend
be60: 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b mylist $my(msg);
be70: 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 unset my(msg).+
be80: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 lappend mylist
be90: 5b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 [set ::my(var) 1
bea0: 32 30 5d 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 20].+ catch {se
beb0: 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 65 33 33 t ::my(var) 1e33
bec0: 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 } my(msg); lappe
bed0: 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 nd mylist $my(ms
bee0: 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 g);unset my(msg)
bef0: 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a .+ catch {set :
bf00: 3a 6d 79 28 76 61 72 29 20 2d 31 7d 20 6d 79 28 :my(var) -1} my(
bf10: 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 msg); lappend my
bf20: 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e list $my(msg);un
bf30: 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74 set my(msg).+ t
bf40: 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d estlinkarray rem
bf50: 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 ove ::my(var).+
bf60: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 testlinkarray c
bf70: 72 65 61 74 65 20 75 6c 6f 6e 67 20 34 20 3a 3a reate ulong 4 ::
bf80: 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 my(var).+ catch
bf90: 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 {set ::my(var)
bfa0: 7b 31 20 32 20 33 7d 7d 20 6d 79 28 6d 73 67 29 {1 2 3}} my(msg)
bfb0: 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 ; lappend mylist
bfc0: 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 $my(msg);unset
bfd0: 6d 79 28 6d 73 67 29 0a 2b 20 20 73 65 74 20 3a my(msg).+ set :
bfe0: 3a 6d 79 28 76 61 72 29 20 7b 31 20 32 20 33 20 :my(var) {1 2 3
bff0: 34 7d 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79 4}.+ lappend my
c000: 6c 69 73 74 20 24 6d 79 28 76 61 72 29 0a 2b 20 list $my(var).+
c010: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 testlinkarray r
c020: 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a emove ::my(var).
c030: 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 + testlinkarray
c040: 20 63 72 65 61 74 65 20 2d 72 20 75 6c 6f 6e 67 create -r ulong
c050: 20 32 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 2 ::my(var).+
c060: 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 catch {set ::my(
c070: 76 61 72 29 20 7b 31 20 32 7d 7d 20 6d 79 28 6d var) {1 2}} my(m
c080: 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c sg); lappend myl
c090: 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 ist $my(msg);uns
c0a0: 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65 et my(msg).+ te
c0b0: 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f stlinkarray remo
c0c0: 76 65 20 3a 3a 6d 79 28 76 61 72 29 3b 20 75 6e ve ::my(var); un
c0d0: 73 65 74 20 6d 79 3b 20 6a 6f 69 6e 20 24 6d 79 set my; join $my
c0e0: 6c 69 73 74 20 22 5c 6e 22 0a 2b 7d 20 7b 63 61 list "\n".+} {ca
c0f0: 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 n't set "::my(va
c100: 72 29 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 r)": variable mu
c110: 73 74 20 68 61 76 65 20 75 6e 73 69 67 6e 65 64 st have unsigned
c120: 20 6c 6f 6e 67 20 76 61 6c 75 65 0a 2b 31 32 30 long value.+120
c130: 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d .+can't set "::m
c140: 79 28 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c y(var)": variabl
c150: 65 20 6d 75 73 74 20 68 61 76 65 20 75 6e 73 69 e must have unsi
c160: 67 6e 65 64 20 6c 6f 6e 67 20 76 61 6c 75 65 0a gned long value.
c170: 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 +can't set "::my
c180: 28 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c 65 (var)": variable
c190: 20 6d 75 73 74 20 68 61 76 65 20 75 6e 73 69 67 must have unsig
c1a0: 6e 65 64 20 6c 6f 6e 67 20 76 61 6c 75 65 0a 2b ned long value.+
c1b0: 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 can't set "::my(
c1c0: 76 61 72 29 22 3a 20 77 72 6f 6e 67 20 64 69 6d var)": wrong dim
c1d0: 65 6e 73 69 6f 6e 0a 2b 31 20 32 20 33 20 34 0a ension.+1 2 3 4.
c1e0: 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 +can't set "::my
c1f0: 28 76 61 72 29 22 3a 20 6c 69 6e 6b 65 64 20 76 (var)": linked v
c200: 61 72 69 61 62 6c 65 20 69 73 20 72 65 61 64 2d ariable is read-
c210: 6f 6e 6c 79 7d 0a 2b 74 65 73 74 20 6c 69 6e 6b only}.+test link
c220: 2d 31 39 2e 31 20 7b 6c 69 6e 6b 61 72 72 61 79 -19.1 {linkarray
c230: 20 77 69 64 65 7d 20 7b 0a 2b 20 20 73 65 74 20 wide} {.+ set
c240: 6d 79 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 2b 20 mylist [list].+
c250: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 testlinkarray c
c260: 72 65 61 74 65 20 77 69 64 65 20 31 20 3a 3a 6d reate wide 1 ::m
c270: 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20 y(var).+ catch
c280: 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 78 {set ::my(var) x
c290: 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 } my(msg); lappe
c2a0: 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 nd mylist $my(ms
c2b0: 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 g);unset my(msg)
c2c0: 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 .+ lappend myli
c2d0: 73 74 20 5b 73 65 74 20 3a 3a 6d 79 28 76 61 72 st [set ::my(var
c2e0: 29 20 31 32 30 5d 0a 2b 20 20 63 61 74 63 68 20 ) 120].+ catch
c2f0: 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 {set ::my(var) 1
c300: 65 33 33 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 e33} my(msg); la
c310: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 ppend mylist $my
c320: 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d (msg);unset my(m
c330: 73 67 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 sg).+ testlinka
c340: 72 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 rray remove ::my
c350: 28 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e (var).+ testlin
c360: 6b 61 72 72 61 79 20 63 72 65 61 74 65 20 77 69 karray create wi
c370: 64 65 20 34 20 3a 3a 6d 79 28 76 61 72 29 0a 2b de 4 ::my(var).+
c380: 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d catch {set ::m
c390: 79 28 76 61 72 29 20 7b 31 20 32 20 33 7d 7d 20 y(var) {1 2 3}}
c3a0: 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 my(msg); lappend
c3b0: 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 mylist $my(msg)
c3c0: 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b ;unset my(msg).+
c3d0: 20 20 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 set ::my(var)
c3e0: 7b 31 20 32 20 33 20 34 7d 0a 2b 20 20 6c 61 70 {1 2 3 4}.+ lap
c3f0: 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 pend mylist $my(
c400: 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b var).+ testlink
c410: 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d array remove ::m
c420: 79 28 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69 y(var).+ testli
c430: 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 20 2d nkarray create -
c440: 72 20 77 69 64 65 20 32 20 3a 3a 6d 79 28 76 61 r wide 2 ::my(va
c450: 72 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 r).+ catch {set
c460: 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31 20 32 7d ::my(var) {1 2}
c470: 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 } my(msg); lappe
c480: 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 nd mylist $my(ms
c490: 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 g);unset my(msg)
c4a0: 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 .+ testlinkarra
c4b0: 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 y remove ::my(va
c4c0: 72 29 3b 20 75 6e 73 65 74 20 6d 79 3b 20 6a 6f r); unset my; jo
c4d0: 69 6e 20 24 6d 79 6c 69 73 74 20 22 5c 6e 22 0a in $mylist "\n".
c4e0: 2b 7d 20 7b 63 61 6e 27 74 20 73 65 74 20 22 3a +} {can't set ":
c4f0: 3a 6d 79 28 76 61 72 29 22 3a 20 76 61 72 69 61 :my(var)": varia
c500: 62 6c 65 20 6d 75 73 74 20 68 61 76 65 20 77 69 ble must have wi
c510: 64 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 de integer value
c520: 0a 2b 31 32 30 0a 2b 63 61 6e 27 74 20 73 65 74 .+120.+can't set
c530: 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 76 61 "::my(var)": va
c540: 72 69 61 62 6c 65 20 6d 75 73 74 20 68 61 76 65 riable must have
c550: 20 77 69 64 65 20 69 6e 74 65 67 65 72 20 76 61 wide integer va
c560: 6c 75 65 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 lue.+can't set "
c570: 3a 3a 6d 79 28 76 61 72 29 22 3a 20 77 72 6f 6e ::my(var)": wron
c580: 67 20 64 69 6d 65 6e 73 69 6f 6e 0a 2b 31 20 32 g dimension.+1 2
c590: 20 33 20 34 0a 2b 63 61 6e 27 74 20 73 65 74 20 3 4.+can't set
c5a0: 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 6c 69 6e "::my(var)": lin
c5b0: 6b 65 64 20 76 61 72 69 61 62 6c 65 20 69 73 20 ked variable is
c5c0: 72 65 61 64 2d 6f 6e 6c 79 7d 0a 2b 74 65 73 74 read-only}.+test
c5d0: 20 6c 69 6e 6b 2d 32 30 2e 31 20 7b 6c 69 6e 6b link-20.1 {link
c5e0: 61 72 72 61 79 20 75 6e 73 69 67 6e 65 64 20 77 array unsigned w
c5f0: 69 64 65 7d 20 7b 0a 2b 20 20 73 65 74 20 6d 79 ide} {.+ set my
c600: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 2b 20 20 74 list [list].+ t
c610: 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 estlinkarray cre
c620: 61 74 65 20 75 77 69 64 65 20 31 20 3a 3a 6d 79 ate uwide 1 ::my
c630: 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20 7b (var).+ catch {
c640: 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 78 7d set ::my(var) x}
c650: 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e my(msg); lappen
c660: 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 d mylist $my(msg
c670: 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a );unset my(msg).
c680: 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 + lappend mylis
c690: 74 20 5b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 t [set ::my(var)
c6a0: 20 31 32 30 5d 0a 2b 20 20 63 61 74 63 68 20 7b 120].+ catch {
c6b0: 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 65 set ::my(var) 1e
c6c0: 33 33 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 33} my(msg); lap
c6d0: 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 pend mylist $my(
c6e0: 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 msg);unset my(ms
c6f0: 67 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 g).+ catch {set
c700: 20 3a 3a 6d 79 28 76 61 72 29 20 2d 31 7d 20 6d ::my(var) -1} m
c710: 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 y(msg); lappend
c720: 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b mylist $my(msg);
c730: 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 unset my(msg).+
c740: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 testlinkarray r
c750: 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a emove ::my(var).
c760: 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 + testlinkarray
c770: 20 63 72 65 61 74 65 20 75 77 69 64 65 20 34 20 create uwide 4
c780: 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 74 ::my(var).+ cat
c790: 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 ch {set ::my(var
c7a0: 29 20 7b 31 20 32 20 33 7d 7d 20 6d 79 28 6d 73 ) {1 2 3}} my(ms
c7b0: 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 g); lappend myli
c7c0: 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 st $my(msg);unse
c7d0: 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 73 65 74 t my(msg).+ set
c7e0: 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31 20 32 20 ::my(var) {1 2
c7f0: 33 20 34 7d 0a 2b 20 20 6c 61 70 70 65 6e 64 20 3 4}.+ lappend
c800: 6d 79 6c 69 73 74 20 24 6d 79 28 76 61 72 29 0a mylist $my(var).
c810: 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 + testlinkarray
c820: 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 remove ::my(var
c830: 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 ).+ testlinkarr
c840: 61 79 20 63 72 65 61 74 65 20 2d 72 20 75 77 69 ay create -r uwi
c850: 64 65 20 32 20 3a 3a 6d 79 28 76 61 72 29 0a 2b de 2 ::my(var).+
c860: 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d catch {set ::m
c870: 79 28 76 61 72 29 20 7b 31 20 32 7d 7d 20 6d 79 y(var) {1 2}} my
c880: 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d (msg); lappend m
c890: 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 ylist $my(msg);u
c8a0: 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 nset my(msg).+
c8b0: 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 testlinkarray re
c8c0: 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 3b 20 move ::my(var);
c8d0: 75 6e 73 65 74 20 6d 79 3b 20 6a 6f 69 6e 20 24 unset my; join $
c8e0: 6d 79 6c 69 73 74 20 22 5c 6e 22 0a 2b 7d 20 7b mylist "\n".+} {
c8f0: 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 can't set "::my(
c900: 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c 65 20 var)": variable
c910: 6d 75 73 74 20 68 61 76 65 20 75 6e 73 69 67 6e must have unsign
c920: 65 64 20 77 69 64 65 20 69 6e 74 20 76 61 6c 75 ed wide int valu
c930: 65 0a 2b 31 32 30 0a 2b 63 61 6e 27 74 20 73 65 e.+120.+can't se
c940: 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 76 t "::my(var)": v
c950: 61 72 69 61 62 6c 65 20 6d 75 73 74 20 68 61 76 ariable must hav
c960: 65 20 75 6e 73 69 67 6e 65 64 20 77 69 64 65 20 e unsigned wide
c970: 69 6e 74 20 76 61 6c 75 65 0a 2b 63 61 6e 27 74 int value.+can't
c980: 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 set "::my(var)"
c990: 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20 : variable must
c9a0: 68 61 76 65 20 75 6e 73 69 67 6e 65 64 20 77 69 have unsigned wi
c9b0: 64 65 20 69 6e 74 20 76 61 6c 75 65 0a 2b 63 61 de int value.+ca
c9c0: 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 n't set "::my(va
c9d0: 72 29 22 3a 20 77 72 6f 6e 67 20 64 69 6d 65 6e r)": wrong dimen
c9e0: 73 69 6f 6e 0a 2b 31 20 32 20 33 20 34 0a 2b 63 sion.+1 2 3 4.+c
c9f0: 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 an't set "::my(v
ca00: 61 72 29 22 3a 20 6c 69 6e 6b 65 64 20 76 61 72 ar)": linked var
ca10: 69 61 62 6c 65 20 69 73 20 72 65 61 64 2d 6f 6e iable is read-on
ca20: 6c 79 7d 0a 2b 74 65 73 74 20 6c 69 6e 6b 2d 32 ly}.+test link-2
ca30: 31 2e 31 20 7b 6c 69 6e 6b 61 72 72 61 79 20 73 1.1 {linkarray s
ca40: 74 72 69 6e 67 7d 20 7b 0a 2b 20 20 73 65 74 20 tring} {.+ set
ca50: 6d 79 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 2b 20 mylist [list].+
ca60: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 testlinkarray c
ca70: 72 65 61 74 65 20 73 74 72 69 6e 67 20 31 20 3a reate string 1 :
ca80: 3a 6d 79 28 76 61 72 29 0a 2b 20 20 6c 61 70 70 :my(var).+ lapp
ca90: 65 6e 64 20 6d 79 6c 69 73 74 20 5b 73 65 74 20 end mylist [set
caa0: 3a 3a 6d 79 28 76 61 72 29 20 22 22 5d 0a 2b 20 ::my(var) ""].+
cab0: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 lappend mylist
cac0: 5b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 22 [set ::my(var) "
cad0: 78 79 7a 22 5d 0a 2b 20 20 6c 61 70 70 65 6e 64 xyz"].+ lappend
cae0: 20 6d 79 6c 69 73 74 20 24 3a 3a 6d 79 28 76 61 mylist $::my(va
caf0: 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 r).+ testlinkar
cb00: 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 ray remove ::my(
cb10: 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b var).+ testlink
cb20: 61 72 72 61 79 20 63 72 65 61 74 65 20 2d 72 20 array create -r
cb30: 73 74 72 69 6e 67 20 34 20 3a 3a 6d 79 28 76 61 string 4 ::my(va
cb40: 72 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 r).+ catch {set
cb50: 20 3a 3a 6d 79 28 76 61 72 29 20 78 7d 20 6d 79 ::my(var) x} my
cb60: 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d (msg); lappend m
cb70: 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 ylist $my(msg);u
cb80: 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 nset my(msg).+
cb90: 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 testlinkarray re
cba0: 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 3b 20 move ::my(var);
cbb0: 75 6e 73 65 74 20 6d 79 3b 20 6a 6f 69 6e 20 24 unset my; join $
cbc0: 6d 79 6c 69 73 74 20 22 5c 6e 22 0a 2b 7d 20 7b mylist "\n".+} {
cbd0: 0a 2b 78 79 7a 0a 2b 78 79 7a 0a 2b 63 61 6e 27 .+xyz.+xyz.+can'
cbe0: 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 t set "::my(var)
cbf0: 22 3a 20 6c 69 6e 6b 65 64 20 76 61 72 69 61 62 ": linked variab
cc00: 6c 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 7d le is read-only}
cc10: 0a 2b 74 65 73 74 20 6c 69 6e 6b 2d 32 32 2e 31 .+test link-22.1
cc20: 20 7b 6c 69 6e 6b 61 72 72 61 79 20 62 69 6e 61 {linkarray bina
cc30: 72 79 7d 20 7b 0a 2b 20 20 73 65 74 20 6d 79 6c ry} {.+ set myl
cc40: 69 73 74 20 5b 6c 69 73 74 5d 0a 2b 20 20 74 65 ist [list].+ te
cc50: 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 61 stlinkarray crea
cc60: 74 65 20 62 69 6e 61 72 79 20 31 20 3a 3a 6d 79 te binary 1 ::my
cc70: 28 76 61 72 29 0a 2b 20 20 73 65 74 20 3a 3a 6d (var).+ set ::m
cc80: 79 28 76 61 72 29 20 78 0a 2b 20 20 63 61 74 63 y(var) x.+ catc
cc90: 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 h {set ::my(var)
cca0: 20 78 79 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 xy} my(msg); la
ccb0: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 ppend mylist $my
ccc0: 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d (msg);unset my(m
ccd0: 73 67 29 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d sg).+ lappend m
cce0: 79 6c 69 73 74 20 24 3a 3a 6d 79 28 76 61 72 29 ylist $::my(var)
ccf0: 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 .+ testlinkarra
cd00: 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 y remove ::my(va
cd10: 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 r).+ testlinkar
cd20: 72 61 79 20 63 72 65 61 74 65 20 62 69 6e 61 72 ray create binar
cd30: 79 20 34 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 y 4 ::my(var).+
cd40: 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 catch {set ::my
cd50: 28 76 61 72 29 20 61 62 63 7d 20 6d 79 28 6d 73 (var) abc} my(ms
cd60: 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 g); lappend myli
cd70: 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 st $my(msg);unse
cd80: 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 63 61 74 t my(msg).+ cat
cd90: 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 ch {set ::my(var
cda0: 29 20 61 62 63 64 65 7d 20 6d 79 28 6d 73 67 29 ) abcde} my(msg)
cdb0: 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 ; lappend mylist
cdc0: 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 $my(msg);unset
cdd0: 6d 79 28 6d 73 67 29 0a 2b 20 20 73 65 74 20 3a my(msg).+ set :
cde0: 3a 6d 79 28 76 61 72 29 20 61 62 63 64 0a 2b 20 :my(var) abcd.+
cdf0: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 lappend mylist
ce00: 24 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 $::my(var).+ te
ce10: 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f stlinkarray remo
ce20: 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 ve ::my(var).+
ce30: 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 testlinkarray cr
ce40: 65 61 74 65 20 2d 72 20 62 69 6e 61 72 79 20 34 eate -r binary 4
ce50: 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 ::my(var).+ ca
ce60: 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 tch {set ::my(va
ce70: 72 29 20 78 79 7a 76 7d 20 6d 79 28 6d 73 67 29 r) xyzv} my(msg)
ce80: 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 ; lappend mylist
ce90: 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 $my(msg);unset
cea0: 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c my(msg).+ testl
ceb0: 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20 inkarray remove
cec0: 3a 3a 6d 79 28 76 61 72 29 3b 20 75 6e 73 65 74 ::my(var); unset
ced0: 20 6d 79 3b 20 6a 6f 69 6e 20 24 6d 79 6c 69 73 my; join $mylis
cee0: 74 20 22 5c 6e 22 0a 2b 7d 20 7b 63 61 6e 27 74 t "\n".+} {can't
cef0: 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 set "::my(var)"
cf00: 3a 20 77 72 6f 6e 67 20 73 69 7a 65 20 6f 66 20 : wrong size of
cf10: 62 69 6e 61 72 79 20 76 61 6c 75 65 0a 2b 78 0a binary value.+x.
cf20: 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 +can't set "::my
cf30: 28 76 61 72 29 22 3a 20 77 72 6f 6e 67 20 73 69 (var)": wrong si
cf40: 7a 65 20 6f 66 20 62 69 6e 61 72 79 20 76 61 6c ze of binary val
cf50: 75 65 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a ue.+can't set ":
cf60: 3a 6d 79 28 76 61 72 29 22 3a 20 77 72 6f 6e 67 :my(var)": wrong
cf70: 20 73 69 7a 65 20 6f 66 20 62 69 6e 61 72 79 20 size of binary
cf80: 76 61 6c 75 65 0a 2b 61 62 63 64 0a 2b 63 61 6e value.+abcd.+can
cf90: 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 't set "::my(var
cfa0: 29 22 3a 20 6c 69 6e 6b 65 64 20 76 61 72 69 61 )": linked varia
cfb0: 62 6c 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 ble is read-only
cfc0: 7d 0a 20 0a 20 63 61 74 63 68 20 7b 74 65 73 74 }. . catch {test
cfd0: 6c 69 6e 6b 20 73 65 74 20 30 20 30 20 30 20 2d link set 0 0 0 -
cfe0: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30 0 0 0 0 0 0 0 0
cff0: 20 30 20 30 7d 0a 20 63 61 74 63 68 20 7b 74 65 0 0}. catch {te
d000: 73 74 6c 69 6e 6b 20 64 65 6c 65 74 65 7d 0a stlink delete}.