Tcl Source Code

Hex Artifact Content
Login

Artifact 319d40d5458269697c5f0bb45669cb00effe755f:

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}.