Tcl Source Code

Hex Artifact Content
Login

Artifact f3edc8ff0f43770382f1e3f47dd8fd93fce51572:

Attachment "link.diff" to ticket [1992824fff] added by r_zaumseil 2008-06-13 18:08:59.
0000: 64 69 66 66 20 2d 4e 75 70 72 20 74 63 6c 2d 38  diff -Nupr tcl-8
0010: 2e 35 2f 67 65 6e 65 72 69 63 2f 74 63 6c 2e 64  .5/generic/tcl.d
0020: 65 63 6c 73 20 74 69 70 33 31 32 2f 67 65 6e 65  ecls tip312/gene
0030: 72 69 63 2f 74 63 6c 2e 64 65 63 6c 73 0a 2d 2d  ric/tcl.decls.--
0040: 2d 20 74 63 6c 2d 38 2e 35 2f 67 65 6e 65 72 69  - tcl-8.5/generi
0050: 63 2f 74 63 6c 2e 64 65 63 6c 73 09 32 30 30 38  c/tcl.decls.2008
0060: 2d 30 33 2d 31 39 20 31 37 3a 35 36 3a 31 33 2e  -03-19 17:56:13.
0070: 30 30 30 30 30 30 30 30 30 20 2b 30 31 30 30 0a  000000000 +0100.
0080: 2b 2b 2b 20 74 69 70 33 31 32 2f 67 65 6e 65 72  +++ tip312/gener
0090: 69 63 2f 74 63 6c 2e 64 65 63 6c 73 09 32 30 30  ic/tcl.decls.200
00a0: 38 2d 30 36 2d 31 33 20 31 31 3a 30 30 3a 34 33  8-06-13 11:00:43
00b0: 2e 30 30 30 30 30 30 30 30 30 20 2b 30 32 30 30  .000000000 +0200
00c0: 0a 40 40 20 2d 32 30 39 38 2c 36 20 2b 32 30 39  .@@ -2098,6 +209
00d0: 38 2c 31 32 20 40 40 20 64 65 63 6c 61 72 65 20  8,12 @@ declare 
00e0: 35 37 38 20 67 65 6e 65 72 69 63 20 7b 0a 20 64  578 generic {. d
00f0: 65 63 6c 61 72 65 20 35 37 39 20 67 65 6e 65 72  eclare 579 gener
0100: 69 63 20 7b 0a 20 20 20 20 20 76 6f 69 64 20 54  ic {.     void T
0110: 63 6c 5f 41 70 70 65 6e 64 50 72 69 6e 74 66 54  cl_AppendPrintfT
0120: 6f 4f 62 6a 28 54 63 6c 5f 4f 62 6a 20 2a 6f 62  oObj(Tcl_Obj *ob
0130: 6a 50 74 72 2c 20 43 4f 4e 53 54 20 63 68 61 72  jPtr, CONST char
0140: 20 2a 66 6f 72 6d 61 74 2c 20 2e 2e 2e 29 0a 20   *format, ...). 
0150: 7d 0a 2b 23 20 54 49 50 23 33 31 32 20 4e 65 77  }.+# TIP#312 New
0160: 20 54 63 6c 5f 4c 69 6e 6b 41 72 72 61 79 28 29   Tcl_LinkArray()
0170: 20 66 75 6e 63 74 69 6f 6e 0a 2b 64 65 63 6c 61   function.+decla
0180: 72 65 20 35 38 30 20 67 65 6e 65 72 69 63 20 7b  re 580 generic {
0190: 0a 2b 20 20 20 20 69 6e 74 20 54 63 6c 5f 4c 69  .+    int Tcl_Li
01a0: 6e 6b 41 72 72 61 79 28 54 63 6c 5f 49 6e 74 65  nkArray(Tcl_Inte
01b0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 43 4f 4e 53  rp *interp, CONS
01c0: 54 20 63 68 61 72 20 2a 76 61 72 4e 61 6d 65 2c  T char *varName,
01d0: 20 63 68 61 72 20 2a 61 64 64 72 2c 0a 2b 20 20   char *addr,.+  
01e0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 74 79            int ty
01f0: 70 65 2c 20 69 6e 74 20 73 69 7a 65 29 0a 2b 7d  pe, int size).+}
0200: 0a 2b 0a 20 0a 20 23 23 23 23 23 23 23 23 23 23  .+. . ##########
0210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0220: 23 23 23 23 23 23 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 0a 20 0a 64 69 66 66 20 2d 4e 75 70  ####. .diff -Nup
0260: 72 20 74 63 6c 2d 38 2e 35 2f 67 65 6e 65 72 69  r tcl-8.5/generi
0270: 63 2f 74 63 6c 44 65 63 6c 73 2e 68 20 74 69 70  c/tclDecls.h tip
0280: 33 31 32 2f 67 65 6e 65 72 69 63 2f 74 63 6c 44  312/generic/tclD
0290: 65 63 6c 73 2e 68 0a 2d 2d 2d 20 74 63 6c 2d 38  ecls.h.--- tcl-8
02a0: 2e 35 2f 67 65 6e 65 72 69 63 2f 74 63 6c 44 65  .5/generic/tclDe
02b0: 63 6c 73 2e 68 09 32 30 30 37 2d 31 32 2d 31 33  cls.h.2007-12-13
02c0: 20 31 36 3a 32 33 3a 31 36 2e 30 30 30 30 30 30   16:23:16.000000
02d0: 30 30 30 20 2b 30 31 30 30 0a 2b 2b 2b 20 74 69  000 +0100.+++ ti
02e0: 70 33 31 32 2f 67 65 6e 65 72 69 63 2f 74 63 6c  p312/generic/tcl
02f0: 44 65 63 6c 73 2e 68 09 32 30 30 38 2d 30 36 2d  Decls.h.2008-06-
0300: 31 33 20 31 31 3a 32 37 3a 32 33 2e 30 30 30 30  13 11:27:23.0000
0310: 30 30 30 30 30 20 2b 30 32 30 30 0a 40 40 20 2d  00000 +0200.@@ -
0320: 33 35 30 31 2c 36 20 2b 33 35 30 31 2c 31 33 20  3501,6 +3501,13 
0330: 40 40 20 45 58 54 45 52 4e 20 54 63 6c 5f 4f 62  @@ EXTERN Tcl_Ob
0340: 6a 20 2a 09 54 63 6c 5f 4f 62 6a 50 72 69 6e 74  j *.Tcl_ObjPrint
0350: 66 20 28 43 4f 4e 53 54 20 63 68 0a 20 45 58 54  f (CONST ch. EXT
0360: 45 52 4e 20 76 6f 69 64 09 09 54 63 6c 5f 41 70  ERN void..Tcl_Ap
0370: 70 65 6e 64 50 72 69 6e 74 66 54 6f 4f 62 6a 20  pendPrintfToObj 
0380: 28 54 63 6c 5f 4f 62 6a 20 2a 20 6f 62 6a 50 74  (Tcl_Obj * objPt
0390: 72 2c 20 0a 20 09 09 09 09 43 4f 4e 53 54 20 63  r, . ....CONST c
03a0: 68 61 72 20 2a 20 66 6f 72 6d 61 74 2c 20 2e 2e  har * format, ..
03b0: 2e 29 3b 0a 20 23 65 6e 64 69 66 0a 2b 23 69 66  .);. #endif.+#if
03c0: 6e 64 65 66 20 54 63 6c 5f 4c 69 6e 6b 41 72 72  ndef Tcl_LinkArr
03d0: 61 79 5f 54 43 4c 5f 44 45 43 4c 41 52 45 44 0a  ay_TCL_DECLARED.
03e0: 2b 23 64 65 66 69 6e 65 20 54 63 6c 5f 4c 69 6e  +#define Tcl_Lin
03f0: 6b 41 72 72 61 79 5f 54 43 4c 5f 44 45 43 4c 41  kArray_TCL_DECLA
0400: 52 45 44 0a 2b 2f 2a 20 35 38 30 20 2a 2f 0a 2b  RED.+/* 580 */.+
0410: 45 58 54 45 52 4e 20 69 6e 74 09 09 54 63 6c 5f  EXTERN int..Tcl_
0420: 4c 69 6e 6b 41 72 72 61 79 20 28 54 63 6c 5f 49  LinkArray (Tcl_I
0430: 6e 74 65 72 70 20 2a 20 69 6e 74 65 72 70 2c 20  nterp * interp, 
0440: 0a 2b 09 09 09 09 43 4f 4e 53 54 20 63 68 61 72  .+....CONST char
0450: 20 2a 20 76 61 72 4e 61 6d 65 2c 20 63 68 61 72   * varName, char
0460: 20 2a 20 61 64 64 72 2c 20 69 6e 74 20 74 79 70   * addr, int typ
0470: 65 2c 20 0a 2b 09 09 09 09 69 6e 74 20 73 69 7a  e, .+....int siz
0480: 65 29 3b 0a 2b 23 65 6e 64 69 66 0a 20 0a 20 74  e);.+#endif. . t
0490: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 63  ypedef struct Tc
04a0: 6c 53 74 75 62 48 6f 6f 6b 73 20 7b 0a 20 20 20  lStubHooks {.   
04b0: 20 20 73 74 72 75 63 74 20 54 63 6c 50 6c 61 74    struct TclPlat
04c0: 53 74 75 62 73 20 2a 74 63 6c 50 6c 61 74 53 74  Stubs *tclPlatSt
04d0: 75 62 73 3b 0a 40 40 20 2d 34 31 34 30 2c 36 20  ubs;.@@ -4140,6 
04e0: 2b 34 31 34 37 2c 37 20 40 40 20 74 79 70 65 64  +4147,7 @@ typed
04f0: 65 66 20 73 74 72 75 63 74 20 54 63 6c 53 74 75  ef struct TclStu
0500: 62 73 20 7b 0a 20 20 20 20 20 69 6e 74 20 28 2a  bs {.     int (*
0510: 74 63 6c 5f 41 70 70 65 6e 64 46 6f 72 6d 61 74  tcl_AppendFormat
0520: 54 6f 4f 62 6a 29 20 28 54 63 6c 5f 49 6e 74 65  ToObj) (Tcl_Inte
0530: 72 70 20 2a 20 69 6e 74 65 72 70 2c 20 54 63 6c  rp * interp, Tcl
0540: 5f 4f 62 6a 20 2a 20 6f 62 6a 50 74 72 2c 20 43  _Obj * objPtr, C
0550: 4f 4e 53 54 20 63 68 61 72 20 2a 20 66 6f 72 6d  ONST char * form
0560: 61 74 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63  at, int objc, Tc
0570: 6c 5f 4f 62 6a 20 2a 20 43 4f 4e 53 54 20 6f 62  l_Obj * CONST ob
0580: 6a 76 5b 5d 29 3b 20 2f 2a 20 35 37 37 20 2a 2f  jv[]); /* 577 */
0590: 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 20  .     Tcl_Obj * 
05a0: 28 2a 74 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 29  (*tcl_ObjPrintf)
05b0: 20 28 43 4f 4e 53 54 20 63 68 61 72 20 2a 20 66   (CONST char * f
05c0: 6f 72 6d 61 74 2c 20 2e 2e 2e 29 3b 20 2f 2a 20  ormat, ...); /* 
05d0: 35 37 38 20 2a 2f 0a 20 20 20 20 20 76 6f 69 64  578 */.     void
05e0: 20 28 2a 74 63 6c 5f 41 70 70 65 6e 64 50 72 69   (*tcl_AppendPri
05f0: 6e 74 66 54 6f 4f 62 6a 29 20 28 54 63 6c 5f 4f  ntfToObj) (Tcl_O
0600: 62 6a 20 2a 20 6f 62 6a 50 74 72 2c 20 43 4f 4e  bj * objPtr, CON
0610: 53 54 20 63 68 61 72 20 2a 20 66 6f 72 6d 61 74  ST char * format
0620: 2c 20 2e 2e 2e 29 3b 20 2f 2a 20 35 37 39 20 2a  , ...); /* 579 *
0630: 2f 0a 2b 20 20 20 20 69 6e 74 20 28 2a 74 63 6c  /.+    int (*tcl
0640: 5f 4c 69 6e 6b 41 72 72 61 79 29 20 28 54 63 6c  _LinkArray) (Tcl
0650: 5f 49 6e 74 65 72 70 20 2a 20 69 6e 74 65 72 70  _Interp * interp
0660: 2c 20 43 4f 4e 53 54 20 63 68 61 72 20 2a 20 76  , CONST char * v
0670: 61 72 4e 61 6d 65 2c 20 63 68 61 72 20 2a 20 61  arName, char * a
0680: 64 64 72 2c 20 69 6e 74 20 74 79 70 65 2c 20 69  ddr, int type, i
0690: 6e 74 20 73 69 7a 65 29 3b 20 2f 2a 20 35 38 30  nt size); /* 580
06a0: 20 2a 2f 0a 20 7d 20 54 63 6c 53 74 75 62 73 3b   */. } TclStubs;
06b0: 0a 20 0a 20 23 69 66 64 65 66 20 5f 5f 63 70 6c  . . #ifdef __cpl
06c0: 75 73 70 6c 75 73 0a 40 40 20 2d 36 35 33 36 2c  usplus.@@ -6536,
06d0: 36 20 2b 36 35 34 34 2c 31 30 20 40 40 20 65 78  6 +6544,10 @@ ex
06e0: 74 65 72 6e 20 54 63 6c 53 74 75 62 73 20 2a 74  tern TclStubs *t
06f0: 63 6c 53 74 75 62 73 50 74 72 3b 0a 20 23 64 65  clStubsPtr;. #de
0700: 66 69 6e 65 20 54 63 6c 5f 41 70 70 65 6e 64 50  fine Tcl_AppendP
0710: 72 69 6e 74 66 54 6f 4f 62 6a 20 5c 0a 20 09 28  rintfToObj \. .(
0720: 74 63 6c 53 74 75 62 73 50 74 72 2d 3e 74 63 6c  tclStubsPtr->tcl
0730: 5f 41 70 70 65 6e 64 50 72 69 6e 74 66 54 6f 4f  _AppendPrintfToO
0740: 62 6a 29 20 2f 2a 20 35 37 39 20 2a 2f 0a 20 23  bj) /* 579 */. #
0750: 65 6e 64 69 66 0a 2b 23 69 66 6e 64 65 66 20 54  endif.+#ifndef T
0760: 63 6c 5f 4c 69 6e 6b 41 72 72 61 79 0a 2b 23 64  cl_LinkArray.+#d
0770: 65 66 69 6e 65 20 54 63 6c 5f 4c 69 6e 6b 41 72  efine Tcl_LinkAr
0780: 72 61 79 20 5c 0a 2b 09 28 74 63 6c 53 74 75 62  ray \.+.(tclStub
0790: 73 50 74 72 2d 3e 74 63 6c 5f 4c 69 6e 6b 41 72  sPtr->tcl_LinkAr
07a0: 72 61 79 29 20 2f 2a 20 35 38 30 20 2a 2f 0a 2b  ray) /* 580 */.+
07b0: 23 65 6e 64 69 66 0a 20 0a 20 23 65 6e 64 69 66  #endif. . #endif
07c0: 20 2f 2a 20 64 65 66 69 6e 65 64 28 55 53 45 5f   /* defined(USE_
07d0: 54 43 4c 5f 53 54 55 42 53 29 20 26 26 20 21 64  TCL_STUBS) && !d
07e0: 65 66 69 6e 65 64 28 55 53 45 5f 54 43 4c 5f 53  efined(USE_TCL_S
07f0: 54 55 42 5f 50 52 4f 43 53 29 20 2a 2f 0a 20 0a  TUB_PROCS) */. .
0800: 64 69 66 66 20 2d 4e 75 70 72 20 74 63 6c 2d 38  diff -Nupr tcl-8
0810: 2e 35 2f 67 65 6e 65 72 69 63 2f 74 63 6c 2e 68  .5/generic/tcl.h
0820: 20 74 69 70 33 31 32 2f 67 65 6e 65 72 69 63 2f   tip312/generic/
0830: 74 63 6c 2e 68 0a 2d 2d 2d 20 74 63 6c 2d 38 2e  tcl.h.--- tcl-8.
0840: 35 2f 67 65 6e 65 72 69 63 2f 74 63 6c 2e 68 09  5/generic/tcl.h.
0850: 32 30 30 38 2d 30 33 2d 32 38 20 31 38 3a 33 31  2008-03-28 18:31
0860: 3a 34 34 2e 30 30 30 30 30 30 30 30 30 20 2b 30  :44.000000000 +0
0870: 31 30 30 0a 2b 2b 2b 20 74 69 70 33 31 32 2f 67  100.+++ tip312/g
0880: 65 6e 65 72 69 63 2f 74 63 6c 2e 68 09 32 30 30  eneric/tcl.h.200
0890: 38 2d 30 36 2d 31 33 20 31 30 3a 35 38 3a 33 31  8-06-13 10:58:31
08a0: 2e 30 30 30 30 30 30 30 30 30 20 2b 30 32 30 30  .000000000 +0200
08b0: 0a 40 40 20 2d 31 30 36 35 2c 36 20 2b 31 30 36  .@@ -1065,6 +106
08c0: 35 2c 38 20 40 40 20 74 79 70 65 64 65 66 20 73  5,8 @@ typedef s
08d0: 74 72 75 63 74 20 54 63 6c 5f 44 53 74 72 69 6e  truct Tcl_DStrin
08e0: 67 20 7b 0a 20 23 64 65 66 69 6e 65 20 54 43 4c  g {. #define TCL
08f0: 5f 4c 49 4e 4b 5f 55 4c 4f 4e 47 09 09 31 32 0a  _LINK_ULONG..12.
0900: 20 23 64 65 66 69 6e 65 20 54 43 4c 5f 4c 49 4e   #define TCL_LIN
0910: 4b 5f 46 4c 4f 41 54 09 09 31 33 0a 20 23 64 65  K_FLOAT..13. #de
0920: 66 69 6e 65 20 54 43 4c 5f 4c 49 4e 4b 5f 57 49  fine TCL_LINK_WI
0930: 44 45 5f 55 49 4e 54 09 31 34 0a 2b 23 64 65 66  DE_UINT.14.+#def
0940: 69 6e 65 20 54 43 4c 5f 4c 49 4e 4b 5f 43 48 41  ine TCL_LINK_CHA
0950: 52 53 20 20 20 20 20 20 20 20 20 20 31 35 0a 2b  RS          15.+
0960: 23 64 65 66 69 6e 65 20 54 43 4c 5f 4c 49 4e 4b  #define TCL_LINK
0970: 5f 42 49 4e 41 52 59 20 20 20 20 20 20 20 20 20  _BINARY         
0980: 31 36 0a 20 23 64 65 66 69 6e 65 20 54 43 4c 5f  16. #define TCL_
0990: 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 09 30  LINK_READ_ONLY.0
09a0: 78 38 30 0a 20 0a 20 2f 2a 0a 64 69 66 66 20 2d  x80. . /*.diff -
09b0: 4e 75 70 72 20 74 63 6c 2d 38 2e 35 2f 67 65 6e  Nupr tcl-8.5/gen
09c0: 65 72 69 63 2f 74 63 6c 4c 69 6e 6b 2e 63 20 74  eric/tclLink.c t
09d0: 69 70 33 31 32 2f 67 65 6e 65 72 69 63 2f 74 63  ip312/generic/tc
09e0: 6c 4c 69 6e 6b 2e 63 0a 2d 2d 2d 20 74 63 6c 2d  lLink.c.--- tcl-
09f0: 38 2e 35 2f 67 65 6e 65 72 69 63 2f 74 63 6c 4c  8.5/generic/tclL
0a00: 69 6e 6b 2e 63 09 32 30 30 37 2d 31 32 2d 31 33  ink.c.2007-12-13
0a10: 20 31 36 3a 32 33 3a 31 38 2e 30 30 30 30 30 30   16:23:18.000000
0a20: 30 30 30 20 2b 30 31 30 30 0a 2b 2b 2b 20 74 69  000 +0100.+++ ti
0a30: 70 33 31 32 2f 67 65 6e 65 72 69 63 2f 74 63 6c  p312/generic/tcl
0a40: 4c 69 6e 6b 2e 63 09 32 30 30 38 2d 30 36 2d 31  Link.c.2008-06-1
0a50: 33 20 31 31 3a 30 39 3a 35 37 2e 30 30 30 30 30  3 11:09:57.00000
0a60: 30 30 30 30 20 2b 30 32 30 30 0a 40 40 20 2d 33  0000 +0200.@@ -3
0a70: 30 2c 36 20 2b 33 30 2c 39 20 40 40 20 74 79 70  0,6 +30,9 @@ typ
0a80: 65 64 65 66 20 73 74 72 75 63 74 20 4c 69 6e 6b  edef struct Link
0a90: 20 7b 0a 20 09 09 09 09 20 2a 20 61 63 74 75 61   {. .... * actua
0aa0: 6c 20 76 61 72 69 61 62 6c 65 20 6d 61 79 20 62  l variable may b
0ab0: 65 20 61 6c 69 61 73 65 64 20 61 74 20 74 68 61  e aliased at tha
0ac0: 74 20 74 69 6d 65 0a 20 09 09 09 09 20 2a 20 76  t time. .... * v
0ad0: 69 61 20 75 70 76 61 72 2e 20 2a 2f 0a 20 20 20  ia upvar. */.   
0ae0: 20 20 63 68 61 72 20 2a 61 64 64 72 3b 09 09 09    char *addr;...
0af0: 2f 2a 20 4c 6f 63 61 74 69 6f 6e 20 6f 66 20 43  /* Location of C
0b00: 20 76 61 72 69 61 62 6c 65 2e 20 2a 2f 0a 2b 20   variable. */.+ 
0b10: 20 20 20 69 6e 74 20 62 79 74 65 73 3b 09 09 09     int bytes;...
0b20: 2f 2a 20 53 69 7a 65 20 6f 66 20 43 20 76 61 72  /* Size of C var
0b30: 69 61 62 6c 65 20 61 72 72 61 79 2e 0a 2b 09 09  iable array..+..
0b40: 09 09 20 2a 20 30 20 77 68 65 6e 20 73 69 6e 67  .. * 0 when sing
0b50: 6c 65 20 76 61 72 69 61 62 6c 65 73 0a 2b 09 09  le variables.+..
0b60: 09 09 20 2a 20 3e 30 20 75 73 65 64 20 66 6f 72  .. * >0 used for
0b70: 20 61 72 72 61 79 20 76 61 72 69 61 62 6c 65 73   array variables
0b80: 20 2a 2f 0a 20 20 20 20 20 69 6e 74 20 74 79 70   */.     int typ
0b90: 65 3b 09 09 09 2f 2a 20 54 79 70 65 20 6f 66 20  e;.../* Type of 
0ba0: 6c 69 6e 6b 20 28 54 43 4c 5f 4c 49 4e 4b 5f 49  link (TCL_LINK_I
0bb0: 4e 54 2c 20 65 74 63 2e 29 2e 20 2a 2f 0a 20 20  NT, etc.). */.  
0bc0: 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 09 63 68 61     union {. .cha
0bd0: 72 20 63 3b 0a 40 40 20 2d 34 34 2c 36 20 2b 34  r c;.@@ -44,6 +4
0be0: 37 2c 31 38 20 40 40 20 74 79 70 65 64 65 66 20  7,18 @@ typedef 
0bf0: 73 74 72 75 63 74 20 4c 69 6e 6b 20 7b 0a 20 09  struct Link {. .
0c00: 54 63 6c 5f 57 69 64 65 55 49 6e 74 20 75 77 3b  Tcl_WideUInt uw;
0c10: 0a 20 09 66 6c 6f 61 74 20 66 3b 0a 20 09 64 6f  . .float f;. .do
0c20: 75 62 6c 65 20 64 3b 0a 2b 09 63 68 61 72 20 2a  uble d;.+.char *
0c30: 70 63 3b 0a 2b 09 75 6e 73 69 67 6e 65 64 20 63  pc;.+.unsigned c
0c40: 68 61 72 20 2a 70 75 63 3b 0a 2b 09 69 6e 74 20  har *puc;.+.int 
0c50: 2a 70 69 3b 0a 2b 09 75 6e 73 69 67 6e 65 64 20  *pi;.+.unsigned 
0c60: 69 6e 74 20 2a 70 75 69 3b 0a 2b 09 73 68 6f 72  int *pui;.+.shor
0c70: 74 20 2a 70 73 3b 0a 2b 09 75 6e 73 69 67 6e 65  t *ps;.+.unsigne
0c80: 64 20 73 68 6f 72 74 20 2a 70 75 73 3b 0a 2b 09  d short *pus;.+.
0c90: 6c 6f 6e 67 20 2a 70 6c 3b 0a 2b 09 75 6e 73 69  long *pl;.+.unsi
0ca0: 67 6e 65 64 20 6c 6f 6e 67 20 2a 70 75 6c 3b 0a  gned long *pul;.
0cb0: 2b 09 54 63 6c 5f 57 69 64 65 49 6e 74 20 2a 70  +.Tcl_WideInt *p
0cc0: 77 3b 0a 2b 09 54 63 6c 5f 57 69 64 65 55 49 6e  w;.+.Tcl_WideUIn
0cd0: 74 20 2a 70 75 77 3b 0a 2b 09 66 6c 6f 61 74 20  t *puw;.+.float 
0ce0: 2a 70 66 3b 0a 2b 09 64 6f 75 62 6c 65 20 2a 70  *pf;.+.double *p
0cf0: 64 3b 0a 20 20 20 20 20 7d 20 6c 61 73 74 56 61  d;.     } lastVa
0d00: 6c 75 65 3b 09 09 2f 2a 20 4c 61 73 74 20 6b 6e  lue;../* Last kn
0d10: 6f 77 6e 20 76 61 6c 75 65 20 6f 66 20 43 20 76  own value of C v
0d20: 61 72 69 61 62 6c 65 3b 20 75 73 65 64 20 74 6f  ariable; used to
0d30: 0a 20 09 09 09 09 20 2a 20 61 76 6f 69 64 20 73  . .... * avoid s
0d40: 74 72 69 6e 67 20 63 6f 6e 76 65 72 73 69 6f 6e  tring conversion
0d50: 73 2e 20 2a 2f 0a 20 20 20 20 20 69 6e 74 20 66  s. */.     int f
0d60: 6c 61 67 73 3b 09 09 09 2f 2a 20 4d 69 73 63 65  lags;.../* Misce
0d70: 6c 6c 61 6e 65 6f 75 73 20 6f 6e 65 2d 62 69 74  llaneous one-bit
0d80: 20 76 61 6c 75 65 73 3b 20 73 65 65 20 62 65 6c   values; see bel
0d90: 6f 77 20 66 6f 72 0a 40 40 20 2d 35 37 2c 31 30  ow for.@@ -57,10
0da0: 20 2b 37 32 2c 31 34 20 40 40 20 74 79 70 65 64   +72,14 @@ typed
0db0: 65 66 20 73 74 72 75 63 74 20 4c 69 6e 6b 20 7b  ef struct Link {
0dc0: 0a 20 20 2a 20 4c 49 4e 4b 5f 42 45 49 4e 47 5f  .  * LINK_BEING_
0dd0: 55 50 44 41 54 45 44 20 2d 09 09 31 20 6d 65 61  UPDATED -..1 mea
0de0: 6e 73 20 74 68 61 74 20 61 20 63 61 6c 6c 20 74  ns that a call t
0df0: 6f 20 54 63 6c 5f 55 70 64 61 74 65 4c 69 6e 6b  o Tcl_UpdateLink
0e00: 65 64 56 61 72 20 69 73 0a 20 20 2a 09 09 09 09  edVar is.  *....
0e10: 69 6e 20 70 72 6f 67 72 65 73 73 20 66 6f 72 20  in progress for 
0e20: 74 68 69 73 20 76 61 72 69 61 62 6c 65 2c 20 73  this variable, s
0e30: 6f 20 74 72 61 63 65 0a 20 20 2a 09 09 09 09 63  o trace.  *....c
0e40: 61 6c 6c 62 61 63 6b 73 20 6f 6e 20 74 68 65 20  allbacks on the 
0e50: 76 61 72 69 61 62 6c 65 20 73 68 6f 75 6c 64 20  variable should 
0e60: 62 65 20 69 67 6e 6f 72 65 64 2e 0a 2b 20 2a 20  be ignored..+ * 
0e70: 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 41 44 44 52 20  LINK_ALLOC_ADDR 
0e80: 2d 09 09 31 20 6d 65 61 6e 73 20 6c 69 6e 6b 50  -..1 means linkP
0e90: 74 72 2d 3e 61 64 64 72 20 77 61 73 20 61 6c 6c  tr->addr was all
0ea0: 6f 63 61 74 65 64 20 6f 6e 20 74 68 65 20 68 65  ocated on the he
0eb0: 61 70 0a 2b 20 2a 20 4c 49 4e 4b 5f 41 4c 4c 4f  ap.+ * LINK_ALLO
0ec0: 43 5f 4c 41 53 54 20 2d 09 09 31 20 6d 65 61 6e  C_LAST -..1 mean
0ed0: 73 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 6c 75 65  s linkPtr->value
0ee0: 4c 61 73 74 2e 70 20 77 61 73 20 61 6c 6c 6f 63  Last.p was alloc
0ef0: 61 74 65 64 20 6f 6e 20 74 68 65 20 68 65 61 70  ated on the heap
0f00: 0a 20 20 2a 2f 0a 20 0a 20 23 64 65 66 69 6e 65  .  */. . #define
0f10: 20 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 09   LINK_READ_ONLY.
0f20: 09 31 0a 20 23 64 65 66 69 6e 65 20 4c 49 4e 4b  .1. #define LINK
0f30: 5f 42 45 49 4e 47 5f 55 50 44 41 54 45 44 09 32  _BEING_UPDATED.2
0f40: 0a 2b 23 64 65 66 69 6e 65 20 4c 49 4e 4b 5f 41  .+#define LINK_A
0f50: 4c 4c 4f 43 5f 41 44 44 52 09 09 34 0a 2b 23 64  LLOC_ADDR..4.+#d
0f60: 65 66 69 6e 65 20 4c 49 4e 4b 5f 41 4c 4c 4f 43  efine LINK_ALLOC
0f70: 5f 4c 41 53 54 09 09 38 0a 20 0a 20 2f 2a 0a 20  _LAST..8. . /*. 
0f80: 20 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72   * Forward refer
0f90: 65 6e 63 65 73 20 74 6f 20 66 75 6e 63 74 69 6f  ences to functio
0fa0: 6e 73 20 64 65 66 69 6e 65 64 20 6c 61 74 65 72  ns defined later
0fb0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 3a 0a 40   in this file:.@
0fc0: 40 20 2d 36 39 2c 36 20 2b 38 38 2c 37 20 40 40  @ -69,6 +88,7 @@
0fd0: 20 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20   typedef struct 
0fe0: 4c 69 6e 6b 20 7b 0a 20 73 74 61 74 69 63 20 63  Link {. static c
0ff0: 68 61 72 20 2a 09 09 4c 69 6e 6b 54 72 61 63 65  har *..LinkTrace
1000: 50 72 6f 63 28 43 6c 69 65 6e 74 44 61 74 61 20  Proc(ClientData 
1010: 63 6c 69 65 6e 74 44 61 74 61 2c 54 63 6c 5f 49  clientData,Tcl_I
1020: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
1030: 09 09 09 20 20 20 20 43 4f 4e 53 54 20 63 68 61  ...    CONST cha
1040: 72 20 2a 6e 61 6d 65 31 2c 20 43 4f 4e 53 54 20  r *name1, CONST 
1050: 63 68 61 72 20 2a 6e 61 6d 65 32 2c 20 69 6e 74  char *name2, int
1060: 20 66 6c 61 67 73 29 3b 0a 20 73 74 61 74 69 63   flags);. static
1070: 20 54 63 6c 5f 4f 62 6a 20 2a 09 4f 62 6a 56 61   Tcl_Obj *.ObjVa
1080: 6c 75 65 28 4c 69 6e 6b 20 2a 6c 69 6e 6b 50 74  lue(Link *linkPt
1090: 72 29 3b 0a 2b 73 74 61 74 69 63 20 76 6f 69 64  r);.+static void
10a0: 09 09 4c 69 6e 6b 46 72 65 65 28 4c 69 6e 6b 20  ..LinkFree(Link 
10b0: 2a 6c 69 6e 6b 50 74 72 29 3b 0a 20 0a 20 2f 2a  *linkPtr);. . /*
10c0: 0a 20 20 2a 20 43 6f 6e 76 65 6e 69 65 6e 63 65  .  * Convenience
10d0: 20 6d 61 63 72 6f 20 66 6f 72 20 61 63 63 65 73   macro for acces
10e0: 73 69 6e 67 20 74 68 65 20 76 61 6c 75 65 20 6f  sing the value o
10f0: 66 20 74 68 65 20 43 20 76 61 72 69 61 62 6c 65  f the C variable
1100: 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 61   pointed to by a
1110: 0a 40 40 20 2d 31 32 35 2c 31 31 20 2b 31 34 35  .@@ -125,11 +145
1120: 2c 31 32 20 40 40 20 54 63 6c 5f 4c 69 6e 6b 56  ,12 @@ Tcl_LinkV
1130: 61 72 28 0a 20 20 20 20 20 7d 20 65 6c 73 65 20  ar(.     } else 
1140: 7b 0a 20 09 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61  {. .linkPtr->fla
1150: 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 7d 0a 2b  gs = 0;.     }.+
1160: 20 20 20 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74      linkPtr->byt
1170: 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 6f 62 6a  es = 0;.     obj
1180: 50 74 72 20 3d 20 4f 62 6a 56 61 6c 75 65 28 6c  Ptr = ObjValue(l
1190: 69 6e 6b 50 74 72 29 3b 0a 20 20 20 20 20 69 66  inkPtr);.     if
11a0: 20 28 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32   (Tcl_ObjSetVar2
11b0: 28 69 6e 74 65 72 70 2c 20 6c 69 6e 6b 50 74 72  (interp, linkPtr
11c0: 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c 2c  ->varName, NULL,
11d0: 20 6f 62 6a 50 74 72 2c 0a 20 09 20 20 20 20 54   objPtr,. .    T
11e0: 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 7c 54  CL_GLOBAL_ONLY|T
11f0: 43 4c 5f 4c 45 41 56 45 5f 45 52 52 5f 4d 53 47  CL_LEAVE_ERR_MSG
1200: 29 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 20 09 54  ) == NULL) {. .T
1210: 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
1220: 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65  linkPtr->varName
1230: 29 3b 0a 2d 09 63 6b 66 72 65 65 28 28 63 68 61  );.-.ckfree((cha
1240: 72 20 2a 29 20 6c 69 6e 6b 50 74 72 29 3b 0a 2b  r *) linkPtr);.+
1250: 09 4c 69 6e 6b 46 72 65 65 28 6c 69 6e 6b 50 74  .LinkFree(linkPt
1260: 72 29 3b 0a 20 09 72 65 74 75 72 6e 20 54 43 4c  r);. .return TCL
1270: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 7d 0a 20  _ERROR;.     }. 
1280: 20 20 20 20 63 6f 64 65 20 3d 20 54 63 6c 5f 54      code = Tcl_T
1290: 72 61 63 65 56 61 72 28 69 6e 74 65 72 70 2c 20  raceVar(interp, 
12a0: 76 61 72 4e 61 6d 65 2c 20 54 43 4c 5f 47 4c 4f  varName, TCL_GLO
12b0: 42 41 4c 5f 4f 4e 4c 59 7c 54 43 4c 5f 54 52 41  BAL_ONLY|TCL_TRA
12c0: 43 45 5f 52 45 41 44 53 0a 40 40 20 2d 31 33 37  CE_READS.@@ -137
12d0: 2c 37 20 2b 31 35 38 2c 31 34 39 20 40 40 20 54  ,7 +158,149 @@ T
12e0: 63 6c 5f 4c 69 6e 6b 56 61 72 28 0a 20 09 20 20  cl_LinkVar(. .  
12f0: 20 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20 6c    (ClientData) l
1300: 69 6e 6b 50 74 72 29 3b 0a 20 20 20 20 20 69 66  inkPtr);.     if
1310: 20 28 63 6f 64 65 20 21 3d 20 54 43 4c 5f 4f 4b   (code != TCL_OK
1320: 29 20 7b 0a 20 09 54 63 6c 5f 44 65 63 72 52 65  ) {. .Tcl_DecrRe
1330: 66 43 6f 75 6e 74 28 6c 69 6e 6b 50 74 72 2d 3e  fCount(linkPtr->
1340: 76 61 72 4e 61 6d 65 29 3b 0a 2d 09 63 6b 66 72  varName);.-.ckfr
1350: 65 65 28 28 63 68 61 72 20 2a 29 20 6c 69 6e 6b  ee((char *) link
1360: 50 74 72 29 3b 0a 2b 09 4c 69 6e 6b 46 72 65 65  Ptr);.+.LinkFree
1370: 28 6c 69 6e 6b 50 74 72 29 3b 0a 2b 20 20 20 20  (linkPtr);.+    
1380: 7d 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 63 6f  }.+    return co
1390: 64 65 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b 20  de;.+}.+..+/*.+ 
13a0: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
13b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13e0: 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20  -------.+ *.+ * 
13f0: 54 63 6c 5f 4c 69 6e 6b 41 72 72 61 79 20 2d 2d  Tcl_LinkArray --
1400: 0a 2b 20 2a 0a 2b 20 2a 09 4c 69 6e 6b 20 61 20  .+ *.+ *.Link a 
1410: 43 20 76 61 72 69 61 62 6c 65 20 61 72 72 61 79  C variable array
1420: 20 74 6f 20 61 20 54 63 6c 20 76 61 72 69 61 62   to a Tcl variab
1430: 6c 65 20 73 6f 20 74 68 61 74 20 63 68 61 6e 67  le so that chang
1440: 65 73 20 74 6f 20 65 69 74 68 65 72 20 6f 6e 65  es to either one
1450: 0a 2b 20 2a 09 63 61 75 73 65 73 20 74 68 65 20  .+ *.causes the 
1460: 6f 74 68 65 72 20 74 6f 20 63 68 61 6e 67 65 2e  other to change.
1470: 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73  .+ *.+ * Results
1480: 3a 0a 2b 20 2a 09 54 68 65 20 72 65 74 75 72 6e  :.+ *.The return
1490: 20 76 61 6c 75 65 20 69 73 20 54 43 4c 5f 4f 4b   value is TCL_OK
14a0: 20 69 66 20 65 76 65 72 79 74 68 69 6e 67 20 77   if everything w
14b0: 65 6e 74 20 77 65 6c 6c 20 6f 72 20 54 43 4c 5f  ent well or TCL_
14c0: 45 52 52 4f 52 20 69 66 20 61 6e 0a 2b 20 2a 09  ERROR if an.+ *.
14d0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 28  error occurred (
14e0: 74 68 65 20 69 6e 74 65 72 70 27 73 20 72 65 73  the interp's res
14f0: 75 6c 74 20 69 73 20 61 6c 73 6f 20 73 65 74 20  ult is also set 
1500: 61 66 74 65 72 20 65 72 72 6f 72 73 29 2e 0a 2b  after errors)..+
1510: 20 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65   *.+ * Side effe
1520: 63 74 73 3a 0a 2b 20 2a 09 54 68 65 20 76 61 6c  cts:.+ *.The val
1530: 75 65 20 61 74 20 2a 61 64 64 72 20 69 73 20 6c  ue at *addr is l
1540: 69 6e 6b 65 64 20 74 6f 20 74 68 65 20 54 63 6c  inked to the Tcl
1550: 20 76 61 72 69 61 62 6c 65 20 22 76 61 72 4e 61   variable "varNa
1560: 6d 65 22 2c 20 75 73 69 6e 67 0a 2b 20 2a 09 22  me", using.+ *."
1570: 74 79 70 65 22 20 74 6f 20 63 6f 6e 76 65 72 74  type" to convert
1580: 20 62 65 74 77 65 65 6e 20 73 74 72 69 6e 67 20   between string 
1590: 76 61 6c 75 65 73 20 66 6f 72 20 54 63 6c 20 61  values for Tcl a
15a0: 6e 64 20 62 69 6e 61 72 79 20 76 61 6c 75 65 73  nd binary values
15b0: 20 66 6f 72 0a 2b 20 2a 09 2a 61 64 64 72 2e 0a   for.+ *.*addr..
15c0: 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  + *.+ *---------
15d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20  -------------.+ 
1610: 2a 2f 0a 2b 0a 2b 69 6e 74 0a 2b 54 63 6c 5f 4c  */.+.+int.+Tcl_L
1620: 69 6e 6b 41 72 72 61 79 28 0a 2b 20 20 20 20 54  inkArray(.+    T
1630: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1640: 70 2c 09 09 2f 2a 20 49 6e 74 65 72 70 72 65 74  p,../* Interpret
1650: 65 72 20 69 6e 20 77 68 69 63 68 20 76 61 72 4e  er in which varN
1660: 61 6d 65 20 65 78 69 73 74 73 2e 20 2a 2f 0a 2b  ame exists. */.+
1670: 20 20 20 20 43 4f 4e 53 54 20 63 68 61 72 20 2a      CONST char *
1680: 76 61 72 4e 61 6d 65 2c 09 2f 2a 20 4e 61 6d 65  varName,./* Name
1690: 20 6f 66 20 61 20 67 6c 6f 62 61 6c 20 76 61 72   of a global var
16a0: 69 61 62 6c 65 20 69 6e 20 69 6e 74 65 72 70 2e  iable in interp.
16b0: 20 2a 2f 0a 2b 20 20 20 20 63 68 61 72 20 2a 61   */.+    char *a
16c0: 64 64 72 2c 09 09 09 2f 2a 20 41 64 64 72 65 73  ddr,.../* Addres
16d0: 73 20 6f 66 20 61 20 43 20 76 61 72 69 61 62 6c  s of a C variabl
16e0: 65 20 74 6f 20 62 65 20 6c 69 6e 6b 65 64 20 74  e to be linked t
16f0: 6f 0a 2b 09 09 09 09 20 2a 20 76 61 72 4e 61 6d  o.+.... * varNam
1700: 65 2e 20 49 66 20 4e 55 4c 4c 20 74 68 65 6e 20  e. If NULL then 
1710: 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 73 70  the necessary sp
1720: 61 63 65 0a 2b 09 09 09 09 20 2a 20 77 69 6c 6c  ace.+.... * will
1730: 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e   be allocated an
1740: 64 20 72 65 74 75 72 6e 65 64 20 61 73 20 74 68  d returned as th
1750: 65 0a 2b 09 09 09 09 20 2a 20 69 6e 74 65 72 70  e.+.... * interp
1760: 72 65 74 65 72 20 72 65 73 75 6c 74 2e 20 2a 2f  reter result. */
1770: 0a 2b 20 20 20 20 69 6e 74 20 74 79 70 65 2c 09  .+    int type,.
1780: 09 09 2f 2a 20 54 79 70 65 20 6f 66 20 43 20 76  ../* Type of C v
1790: 61 72 69 61 62 6c 65 3a 20 54 43 4c 5f 4c 49 4e  ariable: TCL_LIN
17a0: 4b 5f 49 4e 54 2c 20 65 74 63 2e 20 41 6c 73 6f  K_INT, etc. Also
17b0: 0a 2b 09 09 09 09 20 2a 20 6d 61 79 20 68 61 76  .+.... * may hav
17c0: 65 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f  e TCL_LINK_READ_
17d0: 4f 4e 4c 59 20 61 6e 64 0a 2b 09 09 09 09 20 2a  ONLY and.+.... *
17e0: 20 54 43 4c 5f 4c 49 4e 4b 5f 41 4c 4c 4f 43 20   TCL_LINK_ALLOC 
17f0: 4f 52 27 65 64 20 69 6e 2e 20 2a 2f 0a 2b 20 20  OR'ed in. */.+  
1800: 20 20 69 6e 74 20 73 69 7a 65 29 09 09 09 2f 2a    int size).../*
1810: 20 53 69 7a 65 20 6f 66 20 43 20 76 61 72 69 61   Size of C varia
1820: 62 6c 65 20 61 72 72 61 79 2c 20 3e 31 20 69 66  ble array, >1 if
1830: 20 61 72 72 61 79 20 2a 2f 0a 2b 7b 0a 2b 20 20   array */.+{.+  
1840: 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74    Tcl_Obj *objPt
1850: 72 3b 0a 2b 20 20 20 20 4c 69 6e 6b 20 2a 6c 69  r;.+    Link *li
1860: 6e 6b 50 74 72 3b 0a 2b 20 20 20 20 69 6e 74 20  nkPtr;.+    int 
1870: 63 6f 64 65 3b 0a 2b 0a 2b 20 20 20 20 69 66 20  code;.+.+    if 
1880: 28 73 69 7a 65 20 3c 20 31 29 20 7b 0a 2b 09 54  (size < 1) {.+.T
1890: 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
18a0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 61 72 72 61  erp, "wrong arra
18b0: 79 20 73 69 7a 65 20 67 69 76 65 6e 22 2c 20 54  y size given", T
18c0: 43 4c 5f 53 54 41 54 49 43 29 3b 0a 2b 09 72 65  CL_STATIC);.+.re
18d0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
18e0: 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 6c 69  +    }.+.+    li
18f0: 6e 6b 50 74 72 20 3d 20 28 4c 69 6e 6b 20 2a 29  nkPtr = (Link *)
1900: 20 63 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28   ckalloc(sizeof(
1910: 4c 69 6e 6b 29 29 3b 0a 2b 20 20 20 20 6c 69 6e  Link));.+    lin
1920: 6b 50 74 72 2d 3e 74 79 70 65 20 3d 20 74 79 70  kPtr->type = typ
1930: 65 20 26 20 7e 54 43 4c 5f 4c 49 4e 4b 5f 52 45  e & ~TCL_LINK_RE
1940: 41 44 5f 4f 4e 4c 59 3b 0a 2b 20 20 20 20 69 66  AD_ONLY;.+    if
1950: 20 28 74 79 70 65 20 26 20 54 43 4c 5f 4c 49 4e   (type & TCL_LIN
1960: 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 20 7b 0a 2b  K_READ_ONLY) {.+
1970: 09 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20  .linkPtr->flags 
1980: 3d 20 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59  = LINK_READ_ONLY
1990: 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  ;.+    } else {.
19a0: 2b 09 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73  +.linkPtr->flags
19b0: 20 3d 20 30 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20   = 0;.+    }.+  
19c0: 20 20 73 77 69 74 63 68 20 28 6c 69 6e 6b 50 74    switch (linkPt
19d0: 72 2d 3e 74 79 70 65 29 20 7b 0a 2b 20 20 20 20  r->type) {.+    
19e0: 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  case TCL_LINK_IN
19f0: 54 3a 0a 2b 20 20 20 20 63 61 73 65 20 54 43 4c  T:.+    case TCL
1a00: 5f 4c 49 4e 4b 5f 42 4f 4f 4c 45 41 4e 3a 0a 2b  _LINK_BOOLEAN:.+
1a10: 09 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 20  .linkPtr->bytes 
1a20: 3d 20 73 69 7a 65 20 2a 20 73 69 7a 65 6f 66 28  = size * sizeof(
1a30: 69 6e 74 29 3b 0a 2b 09 62 72 65 61 6b 3b 0a 2b  int);.+.break;.+
1a40: 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e      case TCL_LIN
1a50: 4b 5f 44 4f 55 42 4c 45 3a 0a 2b 09 6c 69 6e 6b  K_DOUBLE:.+.link
1a60: 50 74 72 2d 3e 62 79 74 65 73 20 3d 20 73 69 7a  Ptr->bytes = siz
1a70: 65 20 2a 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c  e * sizeof(doubl
1a80: 65 29 3b 0a 2b 09 62 72 65 61 6b 3b 0a 2b 20 20  e);.+.break;.+  
1a90: 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f    case TCL_LINK_
1aa0: 57 49 44 45 5f 49 4e 54 3a 0a 2b 09 6c 69 6e 6b  WIDE_INT:.+.link
1ab0: 50 74 72 2d 3e 62 79 74 65 73 20 3d 20 73 69 7a  Ptr->bytes = siz
1ac0: 65 20 2a 20 73 69 7a 65 6f 66 28 54 63 6c 5f 57  e * sizeof(Tcl_W
1ad0: 69 64 65 49 6e 74 29 3b 0a 2b 09 62 72 65 61 6b  ideInt);.+.break
1ae0: 3b 0a 2b 20 20 20 20 63 61 73 65 20 54 43 4c 5f  ;.+    case TCL_
1af0: 4c 49 4e 4b 5f 57 49 44 45 5f 55 49 4e 54 3a 0a  LINK_WIDE_UINT:.
1b00: 2b 09 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73  +.linkPtr->bytes
1b10: 20 3d 20 73 69 7a 65 20 2a 20 73 69 7a 65 6f 66   = size * sizeof
1b20: 28 54 63 6c 5f 57 69 64 65 55 49 6e 74 29 3b 0a  (Tcl_WideUInt);.
1b30: 2b 09 62 72 65 61 6b 3b 0a 2b 20 20 20 20 63 61  +.break;.+    ca
1b40: 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 43 48 41 52  se TCL_LINK_CHAR
1b50: 3a 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e 62 79 74  :.+.linkPtr->byt
1b60: 65 73 20 3d 20 73 69 7a 65 20 2a 20 73 69 7a 65  es = size * size
1b70: 6f 66 28 63 68 61 72 29 3b 0a 2b 09 62 72 65 61  of(char);.+.brea
1b80: 6b 3b 0a 2b 20 20 20 20 63 61 73 65 20 54 43 4c  k;.+    case TCL
1b90: 5f 4c 49 4e 4b 5f 55 43 48 41 52 3a 0a 2b 09 6c  _LINK_UCHAR:.+.l
1ba0: 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 20 3d 20  inkPtr->bytes = 
1bb0: 73 69 7a 65 20 2a 20 73 69 7a 65 6f 66 28 75 6e  size * sizeof(un
1bc0: 73 69 67 6e 65 64 20 63 68 61 72 29 3b 0a 2b 09  signed char);.+.
1bd0: 62 72 65 61 6b 3b 0a 2b 20 20 20 20 63 61 73 65  break;.+    case
1be0: 20 54 43 4c 5f 4c 49 4e 4b 5f 53 48 4f 52 54 3a   TCL_LINK_SHORT:
1bf0: 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65  .+.linkPtr->byte
1c00: 73 20 3d 20 73 69 7a 65 20 2a 20 73 69 7a 65 6f  s = size * sizeo
1c10: 66 28 73 68 6f 72 74 29 3b 0a 2b 09 62 72 65 61  f(short);.+.brea
1c20: 6b 3b 0a 2b 20 20 20 20 63 61 73 65 20 54 43 4c  k;.+    case TCL
1c30: 5f 4c 49 4e 4b 5f 55 53 48 4f 52 54 3a 0a 2b 09  _LINK_USHORT:.+.
1c40: 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 20 3d  linkPtr->bytes =
1c50: 20 73 69 7a 65 20 2a 20 73 69 7a 65 6f 66 28 75   size * sizeof(u
1c60: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 29 3b 0a  nsigned short);.
1c70: 2b 09 62 72 65 61 6b 3b 0a 2b 20 20 20 20 63 61  +.break;.+    ca
1c80: 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 55 49 4e 54  se TCL_LINK_UINT
1c90: 3a 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e 62 79 74  :.+.linkPtr->byt
1ca0: 65 73 20 3d 20 73 69 7a 65 20 2a 20 73 69 7a 65  es = size * size
1cb0: 6f 66 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  of(unsigned int)
1cc0: 3b 0a 2b 09 62 72 65 61 6b 3b 0a 2b 20 20 20 20  ;.+.break;.+    
1cd0: 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 4c 4f  case TCL_LINK_LO
1ce0: 4e 47 3a 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e 62  NG:.+.linkPtr->b
1cf0: 79 74 65 73 20 3d 20 73 69 7a 65 20 2a 20 73 69  ytes = size * si
1d00: 7a 65 6f 66 28 6c 6f 6e 67 29 3b 0a 2b 09 62 72  zeof(long);.+.br
1d10: 65 61 6b 3b 0a 2b 20 20 20 20 63 61 73 65 20 54  eak;.+    case T
1d20: 43 4c 5f 4c 49 4e 4b 5f 55 4c 4f 4e 47 3a 0a 2b  CL_LINK_ULONG:.+
1d30: 09 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 20  .linkPtr->bytes 
1d40: 3d 20 73 69 7a 65 20 2a 20 73 69 7a 65 6f 66 28  = size * sizeof(
1d50: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 3b 0a  unsigned long);.
1d60: 2b 09 62 72 65 61 6b 3b 0a 2b 20 20 20 20 63 61  +.break;.+    ca
1d70: 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 46 4c 4f 41  se TCL_LINK_FLOA
1d80: 54 3a 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e 62 79  T:.+.linkPtr->by
1d90: 74 65 73 20 3d 20 73 69 7a 65 20 2a 20 73 69 7a  tes = size * siz
1da0: 65 6f 66 28 66 6c 6f 61 74 29 3b 0a 2b 09 62 72  eof(float);.+.br
1db0: 65 61 6b 3b 0a 2b 20 20 20 20 63 61 73 65 20 54  eak;.+    case T
1dc0: 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 3a 0a  CL_LINK_STRING:.
1dd0: 2b 09 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73  +.linkPtr->bytes
1de0: 20 3d 20 73 69 7a 65 20 2a 20 73 69 7a 65 6f 66   = size * sizeof
1df0: 28 63 68 61 72 29 3b 0a 2b 09 73 69 7a 65 20 3d  (char);.+.size =
1e00: 20 31 3b 2f 2a 20 74 68 69 73 20 69 73 20 61 20   1;/* this is a 
1e10: 76 61 72 69 61 62 6c 65 20 6c 65 6e 67 74 68 20  variable length 
1e20: 73 74 72 69 6e 67 2c 20 6e 6f 20 6e 65 65 64 20  string, no need 
1e30: 74 6f 20 63 68 65 63 6b 20 6c 61 73 74 20 76 61  to check last va
1e40: 6c 75 65 20 2a 2f 0a 2b 09 2f 2a 20 69 66 20 6e  lue */.+./* if n
1e50: 6f 20 61 64 64 72 65 73 73 20 69 73 20 67 69 76  o address is giv
1e60: 65 6e 20 63 72 65 61 74 65 20 6f 6e 65 20 61 6e  en create one an
1e70: 64 20 75 73 65 20 61 73 20 61 64 64 72 65 73 73  d use as address
1e80: 20 74 68 65 0a 2b 20 20 20 20 20 20 20 20 20 2a   the.+         *
1e90: 20 6e 6f 74 20 6e 65 65 64 65 64 20 6c 69 6e 6b   not needed link
1ea0: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 20 2a  Ptr->lastValue *
1eb0: 2f 0a 2b 09 69 66 20 28 61 64 64 72 20 3d 3d 20  /.+.if (addr == 
1ec0: 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 6c 69  NULL) {.+.    li
1ed0: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65  nkPtr->lastValue
1ee0: 2e 70 63 20 3d 20 63 6b 61 6c 6c 6f 63 28 6c 69  .pc = ckalloc(li
1ef0: 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b  nkPtr->bytes);.+
1f00: 09 20 20 20 20 6c 69 6e 6b 50 74 72 2d 3e 66 6c  .    linkPtr->fl
1f10: 61 67 73 20 7c 3d 20 4c 49 4e 4b 5f 41 4c 4c 4f  ags |= LINK_ALLO
1f20: 43 5f 4c 41 53 54 3b 0a 2b 09 20 20 20 20 61 64  C_LAST;.+.    ad
1f30: 64 72 20 3d 20 28 63 68 61 72 20 2a 29 26 6c 69  dr = (char *)&li
1f40: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65  nkPtr->lastValue
1f50: 2e 70 63 3b 0a 2b 09 7d 0a 2b 09 62 72 65 61 6b  .pc;.+.}.+.break
1f60: 3b 0a 2b 20 20 20 20 63 61 73 65 20 54 43 4c 5f  ;.+    case TCL_
1f70: 4c 49 4e 4b 5f 43 48 41 52 53 3a 0a 2b 20 20 20  LINK_CHARS:.+   
1f80: 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 42   case TCL_LINK_B
1f90: 49 4e 41 52 59 3a 0a 2b 09 6c 69 6e 6b 50 74 72  INARY:.+.linkPtr
1fa0: 2d 3e 62 79 74 65 73 20 3d 20 73 69 7a 65 20 2a  ->bytes = size *
1fb0: 20 73 69 7a 65 6f 66 28 63 68 61 72 29 3b 0a 2b   sizeof(char);.+
1fc0: 09 62 72 65 61 6b 3b 0a 2b 20 20 20 20 64 65 66  .break;.+    def
1fd0: 61 75 6c 74 3a 0a 2b 09 4c 69 6e 6b 46 72 65 65  ault:.+.LinkFree
1fe0: 28 6c 69 6e 6b 50 74 72 29 3b 0a 2b 09 54 63 6c  (linkPtr);.+.Tcl
1ff0: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
2000: 70 2c 20 22 62 61 64 20 6c 69 6e 6b 65 64 20 61  p, "bad linked a
2010: 72 72 61 79 20 76 61 72 69 61 62 6c 65 20 74 79  rray variable ty
2020: 70 65 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  pe", TCL_STATIC)
2030: 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45  ;.+.return TCL_E
2040: 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20  RROR;.+    }.+  
2050: 20 20 2f 2a 20 61 6c 6c 6f 63 61 74 65 20 43 20    /* allocate C 
2060: 76 61 72 69 61 62 6c 65 20 73 70 61 63 65 20 69  variable space i
2070: 6e 20 63 61 73 65 20 6e 6f 20 61 64 64 72 65 73  n case no addres
2080: 73 20 69 73 20 67 69 76 65 6e 20 2a 2f 0a 2b 20  s is given */.+ 
2090: 20 20 20 69 66 20 28 61 64 64 72 3d 3d 4e 55 4c     if (addr==NUL
20a0: 4c 29 20 7b 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e  L) {.+.linkPtr->
20b0: 61 64 64 72 20 3d 20 63 6b 61 6c 6c 6f 63 28 6c  addr = ckalloc(l
20c0: 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a  inkPtr->bytes);.
20d0: 2b 09 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73  +.linkPtr->flags
20e0: 20 7c 3d 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 41   |= LINK_ALLOC_A
20f0: 44 44 52 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65  DDR;.+    } else
2100: 20 7b 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e 61 64   {.+.linkPtr->ad
2110: 64 72 20 3d 20 61 64 64 72 3b 0a 2b 20 20 20 20  dr = addr;.+    
2120: 7d 0a 2b 20 20 20 20 2f 2a 20 69 66 20 6e 65 63  }.+    /* if nec
2130: 65 73 73 61 72 79 20 63 72 65 61 74 65 20 73 70  essary create sp
2140: 61 63 65 20 66 6f 72 20 6c 61 73 74 20 75 73 65  ace for last use
2150: 64 20 76 61 6c 75 65 20 2a 2f 0a 2b 20 20 20 20  d value */.+    
2160: 69 66 20 28 73 69 7a 65 20 3e 20 31 29 20 7b 0a  if (size > 1) {.
2170: 2b 09 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56  +.linkPtr->lastV
2180: 61 6c 75 65 2e 70 63 20 3d 20 63 6b 61 6c 6c 6f  alue.pc = ckallo
2190: 63 28 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73  c(linkPtr->bytes
21a0: 29 3b 0a 2b 09 6c 69 6e 6b 50 74 72 2d 3e 66 6c  );.+.linkPtr->fl
21b0: 61 67 73 20 7c 3d 20 4c 49 4e 4b 5f 41 4c 4c 4f  ags |= LINK_ALLO
21c0: 43 5f 4c 41 53 54 3b 0a 2b 20 20 20 20 7d 0a 2b  C_LAST;.+    }.+
21d0: 20 20 20 20 2f 2a 20 73 65 74 20 63 6f 6d 6d 6f      /* set commo
21e0: 6e 20 73 74 72 75 63 74 75 72 65 20 76 61 6c 75  n structure valu
21f0: 65 73 20 2a 2f 0a 2b 20 20 20 20 6c 69 6e 6b 50  es */.+    linkP
2200: 74 72 2d 3e 69 6e 74 65 72 70 20 3d 20 69 6e 74  tr->interp = int
2210: 65 72 70 3b 0a 2b 20 20 20 20 6c 69 6e 6b 50 74  erp;.+    linkPt
2220: 72 2d 3e 76 61 72 4e 61 6d 65 20 3d 20 54 63 6c  r->varName = Tcl
2230: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 76 61  _NewStringObj(va
2240: 72 4e 61 6d 65 2c 20 2d 31 29 3b 0a 2b 20 20 20  rName, -1);.+   
2250: 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e   Tcl_IncrRefCoun
2260: 74 28 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61  t(linkPtr->varNa
2270: 6d 65 29 3b 0a 2b 20 20 20 20 6f 62 6a 50 74 72  me);.+    objPtr
2280: 20 3d 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e 6b   = ObjValue(link
2290: 50 74 72 29 3b 0a 2b 20 20 20 20 69 66 20 28 54  Ptr);.+    if (T
22a0: 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e  cl_ObjSetVar2(in
22b0: 74 65 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76  terp, linkPtr->v
22c0: 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 6f 62  arName, NULL, ob
22d0: 6a 50 74 72 2c 0a 2b 09 20 20 20 20 54 43 4c 5f  jPtr,.+.    TCL_
22e0: 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 7c 54 43 4c 5f  GLOBAL_ONLY|TCL_
22f0: 4c 45 41 56 45 5f 45 52 52 5f 4d 53 47 29 20 3d  LEAVE_ERR_MSG) =
2300: 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 54 63 6c 5f  = NULL) {.+.Tcl_
2310: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 6c 69 6e  DecrRefCount(lin
2320: 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 29 3b 0a  kPtr->varName);.
2330: 2b 09 4c 69 6e 6b 46 72 65 65 28 6c 69 6e 6b 50  +.LinkFree(linkP
2340: 74 72 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43  tr);.+.return TC
2350: 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a  L_ERROR;.+    }.
2360: 2b 20 20 20 20 63 6f 64 65 20 3d 20 54 63 6c 5f  +    code = Tcl_
2370: 54 72 61 63 65 56 61 72 28 69 6e 74 65 72 70 2c  TraceVar(interp,
2380: 20 76 61 72 4e 61 6d 65 2c 20 54 43 4c 5f 47 4c   varName, TCL_GL
2390: 4f 42 41 4c 5f 4f 4e 4c 59 7c 54 43 4c 5f 54 52  OBAL_ONLY|TCL_TR
23a0: 41 43 45 5f 52 45 41 44 53 0a 2b 09 20 20 20 20  ACE_READS.+.    
23b0: 7c 54 43 4c 5f 54 52 41 43 45 5f 57 52 49 54 45  |TCL_TRACE_WRITE
23c0: 53 7c 54 43 4c 5f 54 52 41 43 45 5f 55 4e 53 45  S|TCL_TRACE_UNSE
23d0: 54 53 2c 20 4c 69 6e 6b 54 72 61 63 65 50 72 6f  TS, LinkTracePro
23e0: 63 2c 0a 2b 09 20 20 20 20 28 43 6c 69 65 6e 74  c,.+.    (Client
23f0: 44 61 74 61 29 20 6c 69 6e 6b 50 74 72 29 3b 0a  Data) linkPtr);.
2400: 2b 20 20 20 20 69 66 20 28 63 6f 64 65 20 21 3d  +    if (code !=
2410: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 54 63 6c   TCL_OK) {.+.Tcl
2420: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 6c 69  _DecrRefCount(li
2430: 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 29 3b  nkPtr->varName);
2440: 0a 2b 09 4c 69 6e 6b 46 72 65 65 28 6c 69 6e 6b  .+.LinkFree(link
2450: 50 74 72 29 3b 0a 2b 20 20 20 20 7d 20 65 6c 73  Ptr);.+    } els
2460: 65 20 7b 0a 2b 09 54 63 6c 5f 53 65 74 4f 62 6a  e {.+.Tcl_SetObj
2470: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 54 63  Result(interp,Tc
2480: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 28 69 6e 74  l_NewIntObj((int
2490: 29 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 29 29  )linkPtr->addr))
24a0: 3b 0a 20 20 20 20 20 7d 0a 20 20 20 20 20 72 65  ;.     }.     re
24b0: 74 75 72 6e 20 63 6f 64 65 3b 0a 20 7d 0a 40 40  turn code;. }.@@
24c0: 20 2d 31 37 36 2c 37 20 2b 33 33 39 2c 37 20 40   -176,7 +339,7 @
24d0: 40 20 54 63 6c 5f 55 6e 6c 69 6e 6b 56 61 72 28  @ Tcl_UnlinkVar(
24e0: 0a 20 09 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41  . .    TCL_GLOBA
24f0: 4c 5f 4f 4e 4c 59 7c 54 43 4c 5f 54 52 41 43 45  L_ONLY|TCL_TRACE
2500: 5f 52 45 41 44 53 7c 54 43 4c 5f 54 52 41 43 45  _READS|TCL_TRACE
2510: 5f 57 52 49 54 45 53 7c 54 43 4c 5f 54 52 41 43  _WRITES|TCL_TRAC
2520: 45 5f 55 4e 53 45 54 53 2c 0a 20 09 20 20 20 20  E_UNSETS,. .    
2530: 4c 69 6e 6b 54 72 61 63 65 50 72 6f 63 2c 20 28  LinkTraceProc, (
2540: 43 6c 69 65 6e 74 44 61 74 61 29 20 6c 69 6e 6b  ClientData) link
2550: 50 74 72 29 3b 0a 20 20 20 20 20 54 63 6c 5f 44  Ptr);.     Tcl_D
2560: 65 63 72 52 65 66 43 6f 75 6e 74 28 6c 69 6e 6b  ecrRefCount(link
2570: 50 74 72 2d 3e 76 61 72 4e 61 6d 65 29 3b 0a 2d  Ptr->varName);.-
2580: 20 20 20 20 63 6b 66 72 65 65 28 28 63 68 61 72      ckfree((char
2590: 20 2a 29 20 6c 69 6e 6b 50 74 72 29 3b 0a 2b 20   *) linkPtr);.+ 
25a0: 20 20 20 4c 69 6e 6b 46 72 65 65 28 6c 69 6e 6b     LinkFree(link
25b0: 50 74 72 29 3b 0a 20 7d 0a 20 0c 0a 20 2f 2a 0a  Ptr);. }. .. /*.
25c0: 40 40 20 2d 32 36 32 2c 36 20 2b 34 32 35 2c 39  @@ -262,6 +425,9
25d0: 20 40 40 20 4c 69 6e 6b 54 72 61 63 65 50 72 6f   @@ LinkTracePro
25e0: 63 28 0a 20 20 20 20 20 69 6e 74 20 76 61 6c 75  c(.     int valu
25f0: 65 49 6e 74 3b 0a 20 20 20 20 20 54 63 6c 5f 57  eInt;.     Tcl_W
2600: 69 64 65 49 6e 74 20 76 61 6c 75 65 57 69 64 65  ideInt valueWide
2610: 3b 0a 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61  ;.     double va
2620: 6c 75 65 44 6f 75 62 6c 65 3b 0a 2b 20 20 20 20  lueDouble;.+    
2630: 69 6e 74 20 6f 62 6a 63 3b 0a 2b 20 20 20 20 54  int objc;.+    T
2640: 63 6c 5f 4f 62 6a 20 2a 2a 6f 62 6a 76 3b 0a 2b  cl_Obj **objv;.+
2650: 20 20 20 20 69 6e 74 20 69 3b 0a 20 0a 20 20 20      int i;. .   
2660: 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20 49 66 20    /*.      * If 
2670: 74 68 65 20 76 61 72 69 61 62 6c 65 20 69 73 20  the variable is 
2680: 62 65 69 6e 67 20 75 6e 73 65 74 2c 20 74 68 65  being unset, the
2690: 6e 20 6a 75 73 74 20 72 65 2d 63 72 65 61 74 65  n just re-create
26a0: 20 69 74 20 28 77 69 74 68 20 61 20 74 72 61 63   it (with a trac
26b0: 65 29 0a 40 40 20 2d 32 37 31 2c 37 20 2b 34 33  e).@@ -271,7 +43
26c0: 37 2c 37 20 40 40 20 4c 69 6e 6b 54 72 61 63 65  7,7 @@ LinkTrace
26d0: 50 72 6f 63 28 0a 20 20 20 20 20 69 66 20 28 66  Proc(.     if (f
26e0: 6c 61 67 73 20 26 20 54 43 4c 5f 54 52 41 43 45  lags & TCL_TRACE
26f0: 5f 55 4e 53 45 54 53 29 20 7b 0a 20 09 69 66 20  _UNSETS) {. .if 
2700: 28 54 63 6c 5f 49 6e 74 65 72 70 44 65 6c 65 74  (Tcl_InterpDelet
2710: 65 64 28 69 6e 74 65 72 70 29 29 20 7b 0a 20 09  ed(interp)) {. .
2720: 20 20 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43      Tcl_DecrRefC
2730: 6f 75 6e 74 28 6c 69 6e 6b 50 74 72 2d 3e 76 61  ount(linkPtr->va
2740: 72 4e 61 6d 65 29 3b 0a 2d 09 20 20 20 20 63 6b  rName);.-.    ck
2750: 66 72 65 65 28 28 63 68 61 72 20 2a 29 20 6c 69  free((char *) li
2760: 6e 6b 50 74 72 29 3b 0a 2b 09 20 20 20 20 4c 69  nkPtr);.+.    Li
2770: 6e 6b 46 72 65 65 28 6c 69 6e 6b 50 74 72 29 3b  nkFree(linkPtr);
2780: 0a 20 09 7d 20 65 6c 73 65 20 69 66 20 28 66 6c  . .} else if (fl
2790: 61 67 73 20 26 20 54 43 4c 5f 54 52 41 43 45 5f  ags & TCL_TRACE_
27a0: 44 45 53 54 52 4f 59 45 44 29 20 7b 0a 20 09 20  DESTROYED) {. . 
27b0: 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72     Tcl_ObjSetVar
27c0: 32 28 69 6e 74 65 72 70 2c 20 6c 69 6e 6b 50 74  2(interp, linkPt
27d0: 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c  r->varName, NULL
27e0: 2c 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e 6b 50  , ObjValue(linkP
27f0: 74 72 29 2c 0a 20 09 09 20 20 20 20 54 43 4c 5f  tr),. ..    TCL_
2800: 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 40 40  GLOBAL_ONLY);.@@
2810: 20 2d 32 39 38 2c 36 20 2b 34 36 34 2c 31 31 20   -298,6 +464,11 
2820: 40 40 20 4c 69 6e 6b 54 72 61 63 65 50 72 6f 63  @@ LinkTraceProc
2830: 28 0a 20 20 20 20 20 20 2a 2f 0a 20 0a 20 20 20  (.      */. .   
2840: 20 20 69 66 20 28 66 6c 61 67 73 20 26 20 54 43    if (flags & TC
2850: 4c 5f 54 52 41 43 45 5f 52 45 41 44 53 29 20 7b  L_TRACE_READS) {
2860: 0a 2b 09 2f 2a 20 76 61 72 69 61 62 6c 65 20 61  .+./* variable a
2870: 72 72 61 79 73 20 2a 2f 0a 2b 09 69 66 20 28 6c  rrays */.+.if (l
2880: 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20  inkPtr->flags & 
2890: 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29  LINK_ALLOC_LAST)
28a0: 20 7b 0a 2b 09 20 20 20 20 63 68 61 6e 67 65 64   {.+.    changed
28b0: 20 3d 20 6d 65 6d 63 6d 70 28 6c 69 6e 6b 50 74   = memcmp(linkPt
28c0: 72 2d 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72 2d  r->addr,linkPtr-
28d0: 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c 6c 69  >lastValue.pc,li
28e0: 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b  nkPtr->bytes);.+
28f0: 09 2f 2a 20 73 69 6e 67 6c 65 20 76 61 72 69 61  ./* single varia
2900: 62 6c 65 73 20 2a 2f 0a 2b 09 7d 20 65 6c 73 65  bles */.+.} else
2910: 20 7b 0a 20 09 73 77 69 74 63 68 20 28 6c 69 6e   {. .switch (lin
2920: 6b 50 74 72 2d 3e 74 79 70 65 29 20 7b 0a 20 09  kPtr->type) {. .
2930: 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  case TCL_LINK_IN
2940: 54 3a 0a 20 09 63 61 73 65 20 54 43 4c 5f 4c 49  T:. .case TCL_LI
2950: 4e 4b 5f 42 4f 4f 4c 45 41 4e 3a 0a 40 40 20 2d  NK_BOOLEAN:.@@ -
2960: 33 33 37 2c 31 30 20 2b 35 30 38 2c 31 33 20 40  337,10 +508,13 @
2970: 40 20 4c 69 6e 6b 54 72 61 63 65 50 72 6f 63 28  @ LinkTraceProc(
2980: 0a 20 09 20 20 20 20 63 68 61 6e 67 65 64 20 3d  . .    changed =
2990: 20 28 4c 69 6e 6b 65 64 56 61 72 28 66 6c 6f 61   (LinkedVar(floa
29a0: 74 29 20 21 3d 20 6c 69 6e 6b 50 74 72 2d 3e 6c  t) != linkPtr->l
29b0: 61 73 74 56 61 6c 75 65 2e 66 29 3b 0a 20 09 20  astValue.f);. . 
29c0: 20 20 20 62 72 65 61 6b 3b 0a 20 09 63 61 73 65     break;. .case
29d0: 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47   TCL_LINK_STRING
29e0: 3a 0a 2b 09 63 61 73 65 20 54 43 4c 5f 4c 49 4e  :.+.case TCL_LIN
29f0: 4b 5f 43 48 41 52 53 3a 0a 2b 09 63 61 73 65 20  K_CHARS:.+.case 
2a00: 54 43 4c 5f 4c 49 4e 4b 5f 42 49 4e 41 52 59 3a  TCL_LINK_BINARY:
2a10: 0a 20 09 20 20 20 20 63 68 61 6e 67 65 64 20 3d  . .    changed =
2a20: 20 31 3b 0a 20 09 20 20 20 20 62 72 65 61 6b 3b   1;. .    break;
2a30: 0a 20 09 64 65 66 61 75 6c 74 3a 0a 2d 09 20 20  . .default:.-.  
2a40: 20 20 72 65 74 75 72 6e 20 22 69 6e 74 65 72 6e    return "intern
2a50: 61 6c 20 65 72 72 6f 72 3a 20 62 61 64 20 6c 69  al error: bad li
2a60: 6e 6b 65 64 20 76 61 72 69 61 62 6c 65 20 74 79  nked variable ty
2a70: 70 65 22 3b 0a 2b 09 20 20 20 20 63 68 61 6e 67  pe";.+.    chang
2a80: 65 64 20 3d 20 30 3b 0a 2b 09 7d 0a 20 09 7d 0a  ed = 0;.+.}. .}.
2a90: 20 09 69 66 20 28 63 68 61 6e 67 65 64 29 20 7b   .if (changed) {
2aa0: 0a 20 09 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65  . .    Tcl_ObjSe
2ab0: 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6c 69  tVar2(interp, li
2ac0: 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20  nkPtr->varName, 
2ad0: 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c  NULL, ObjValue(l
2ae0: 69 6e 6b 50 74 72 29 2c 0a 40 40 20 2d 33 35 32  inkPtr),.@@ -352
2af0: 2c 37 20 2b 35 32 36 2c 37 20 40 40 20 4c 69 6e  ,7 +526,7 @@ Lin
2b00: 6b 54 72 61 63 65 50 72 6f 63 28 0a 20 20 20 20  kTraceProc(.    
2b10: 20 2f 2a 0a 20 20 20 20 20 20 2a 20 46 6f 72 20   /*.      * For 
2b20: 77 72 69 74 65 73 2c 20 66 69 72 73 74 20 6d 61  writes, first ma
2b30: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
2b40: 20 76 61 72 69 61 62 6c 65 20 69 73 20 77 72 69   variable is wri
2b50: 74 61 62 6c 65 2e 20 54 68 65 6e 20 63 6f 6e 76  table. Then conv
2b60: 65 72 74 0a 20 20 20 20 20 20 2a 20 74 68 65 20  ert.      * the 
2b70: 54 63 6c 20 76 61 6c 75 65 20 74 6f 20 43 20 69  Tcl value to C i
2b80: 66 20 70 6f 73 73 69 62 6c 65 2e 20 49 66 20 74  f possible. If t
2b90: 68 65 20 76 61 72 69 61 62 6c 65 20 69 73 6e 27  he variable isn'
2ba0: 74 20 77 72 69 74 61 62 6c 65 20 6f 72 20 63 61  t writable or ca
2bb0: 6e 27 74 0a 2d 20 20 20 20 20 2a 20 62 65 20 63  n't.-     * be c
2bc0: 6f 6e 76 65 72 74 65 64 2c 20 74 68 65 6e 20 72  onverted, then r
2bd0: 65 73 74 6f 72 65 20 74 68 65 20 76 61 72 61 69  estore the varai
2be0: 62 6c 65 27 73 20 6f 6c 64 20 76 61 6c 75 65 20  ble's old value 
2bf0: 61 6e 64 20 72 65 74 75 72 6e 20 61 6e 0a 2b 20  and return an.+ 
2c00: 20 20 20 20 2a 20 62 65 20 63 6f 6e 76 65 72 74      * be convert
2c10: 65 64 2c 20 74 68 65 6e 20 72 65 73 74 6f 72 65  ed, then restore
2c20: 20 74 68 65 20 76 61 72 69 61 62 6c 65 27 73 20   the variable's 
2c30: 6f 6c 64 20 76 61 6c 75 65 20 61 6e 64 20 72 65  old value and re
2c40: 74 75 72 6e 20 61 6e 0a 20 20 20 20 20 20 2a 20  turn an.      * 
2c50: 65 72 72 6f 72 2e 20 41 6e 6f 74 68 65 72 20 74  error. Another t
2c60: 72 69 63 6b 79 20 74 68 69 6e 67 3a 20 77 65 20  ricky thing: we 
2c70: 68 61 76 65 20 74 6f 20 73 61 76 65 20 61 6e 64  have to save and
2c80: 20 72 65 73 74 6f 72 65 20 74 68 65 20 69 6e 74   restore the int
2c90: 65 72 70 27 73 0a 20 20 20 20 20 20 2a 20 72 65  erp's.      * re
2ca0: 73 75 6c 74 2c 20 73 69 6e 63 65 20 74 68 65 20  sult, since the 
2cb0: 76 61 72 69 61 62 6c 65 20 61 63 63 65 73 73 20  variable access 
2cc0: 63 6f 75 6c 64 20 6f 63 63 75 72 20 77 68 65 6e  could occur when
2cd0: 20 74 68 65 20 72 65 73 75 6c 74 20 68 61 73 20   the result has 
2ce0: 62 65 65 6e 0a 20 20 20 20 20 20 2a 20 70 61 72  been.      * par
2cf0: 74 69 61 6c 6c 79 20 73 65 74 2e 0a 40 40 20 2d  tially set..@@ -
2d00: 33 37 34 2c 36 20 2b 35 34 38 2c 32 31 20 40 40  374,6 +548,21 @@
2d10: 20 4c 69 6e 6b 54 72 61 63 65 50 72 6f 63 28 0a   LinkTraceProc(.
2d20: 20 0a 20 20 20 20 20 73 77 69 74 63 68 20 28 6c   .     switch (l
2d30: 69 6e 6b 50 74 72 2d 3e 74 79 70 65 29 20 7b 0a  inkPtr->type) {.
2d40: 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49       case TCL_LI
2d50: 4e 4b 5f 49 4e 54 3a 0a 2b 09 69 66 20 28 6c 69  NK_INT:.+.if (li
2d60: 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c  nkPtr->flags & L
2d70: 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20  INK_ALLOC_LAST) 
2d80: 7b 0a 2b 09 20 20 20 20 69 66 20 28 54 63 6c 5f  {.+.    if (Tcl_
2d90: 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e  ListObjGetElemen
2da0: 74 73 28 69 6e 74 65 72 70 2c 76 61 6c 75 65 4f  ts(interp,valueO
2db0: 62 6a 2c 26 6f 62 6a 63 2c 26 6f 62 6a 76 29 3d  bj,&objc,&objv)=
2dc0: 3d 54 43 4c 5f 45 52 52 4f 52 0a 2b 09 09 7c 7c  =TCL_ERROR.+..||
2dd0: 20 6f 62 6a 63 20 21 3d 20 6c 69 6e 6b 50 74 72   objc != linkPtr
2de0: 2d 3e 62 79 74 65 73 2f 73 69 7a 65 6f 66 28 69  ->bytes/sizeof(i
2df0: 6e 74 29 29 20 7b 0a 2b 09 09 72 65 74 75 72 6e  nt)) {.+..return
2e00: 20 22 77 72 6f 6e 67 20 64 69 6d 65 6e 73 69 6f   "wrong dimensio
2e10: 6e 22 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20  n";.+.    }.+.  
2e20: 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20    for (i=0; i < 
2e30: 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09  objc; i++) {.+..
2e40: 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 74 46 72  if (Tcl_GetIntFr
2e50: 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 6f 62 6a 76 5b  omObj(NULL,objv[
2e60: 69 5d 2c 26 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73  i],&linkPtr->las
2e70: 74 56 61 6c 75 65 2e 70 69 5b 69 5d 29 21 3d 20  tValue.pi[i])!= 
2e80: 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 20 20 20 20  TCL_OK) {.+.    
2e90: 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61      Tcl_ObjSetVa
2ea0: 72 32 28 69 6e 74 65 72 70 2c 20 6c 69 6e 6b 50  r2(interp, linkP
2eb0: 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e 55 4c  tr->varName, NUL
2ec0: 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e 6b  L, ObjValue(link
2ed0: 50 74 72 29 2c 0a 2b 09 09 20 20 20 20 54 43 4c  Ptr),.+..    TCL
2ee0: 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 2b  _GLOBAL_ONLY);.+
2ef0: 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2f00: 75 72 6e 20 22 76 61 72 69 61 62 6c 65 20 61 72  urn "variable ar
2f10: 72 61 79 20 6d 75 73 74 20 68 61 76 65 20 69 6e  ray must have in
2f20: 74 65 67 65 72 20 76 61 6c 75 65 22 3b 0a 2b 09  teger value";.+.
2f30: 09 7d 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20  .}.+.    }.+.   
2f40: 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72 2d   memcpy(linkPtr-
2f50: 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72 2d 3e 6c  >addr,linkPtr->l
2f60: 61 73 74 56 61 6c 75 65 2e 70 63 2c 6c 69 6e 6b  astValue.pc,link
2f70: 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 20  Ptr->bytes);.+. 
2f80: 20 20 20 62 72 65 61 6b 3b 0a 2b 09 7d 0a 20 09     break;.+.}. .
2f90: 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 74 46 72  if (Tcl_GetIntFr
2fa0: 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 76 61 6c 75  omObj(NULL, valu
2fb0: 65 4f 62 6a 2c 20 26 6c 69 6e 6b 50 74 72 2d 3e  eObj, &linkPtr->
2fc0: 6c 61 73 74 56 61 6c 75 65 2e 69 29 0a 20 09 09  lastValue.i). ..
2fd0: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 09 20  != TCL_OK) {. . 
2fe0: 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72     Tcl_ObjSetVar
2ff0: 32 28 69 6e 74 65 72 70 2c 20 6c 69 6e 6b 50 74  2(interp, linkPt
3000: 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c  r->varName, NULL
3010: 2c 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e 6b 50  , ObjValue(linkP
3020: 74 72 29 2c 0a 40 40 20 2d 33 38 34 2c 31 36 20  tr),.@@ -384,16 
3030: 2b 35 37 33 2c 35 33 20 40 40 20 4c 69 6e 6b 54  +573,53 @@ LinkT
3040: 72 61 63 65 50 72 6f 63 28 0a 20 09 62 72 65 61  raceProc(. .brea
3050: 6b 3b 0a 20 0a 20 20 20 20 20 63 61 73 65 20 54  k;. .     case T
3060: 43 4c 5f 4c 49 4e 4b 5f 57 49 44 45 5f 49 4e 54  CL_LINK_WIDE_INT
3070: 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74 72 2d  :.+.if (linkPtr-
3080: 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f 41 4c  >flags & LINK_AL
3090: 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 20  LOC_LAST) {.+.  
30a0: 20 20 69 66 20 28 54 63 6c 5f 4c 69 73 74 4f 62    if (Tcl_ListOb
30b0: 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74  jGetElements(int
30c0: 65 72 70 2c 76 61 6c 75 65 4f 62 6a 2c 26 6f 62  erp,valueObj,&ob
30d0: 6a 63 2c 26 6f 62 6a 76 29 3d 3d 54 43 4c 5f 45  jc,&objv)==TCL_E
30e0: 52 52 4f 52 0a 2b 09 09 7c 7c 20 6f 62 6a 63 20  RROR.+..|| objc 
30f0: 21 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65  != linkPtr->byte
3100: 73 2f 73 69 7a 65 6f 66 28 54 63 6c 5f 57 69 64  s/sizeof(Tcl_Wid
3110: 65 49 6e 74 29 29 20 7b 0a 2b 09 09 72 65 74 75  eInt)) {.+..retu
3120: 72 6e 20 22 77 72 6f 6e 67 20 64 69 6d 65 6e 73  rn "wrong dimens
3130: 69 6f 6e 22 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09  ion";.+.    }.+.
3140: 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 20      for (i=0; i 
3150: 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b  < objc; i++) {.+
3160: 09 09 69 66 20 28 54 63 6c 5f 47 65 74 57 69 64  ..if (Tcl_GetWid
3170: 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c  eIntFromObj(NULL
3180: 2c 6f 62 6a 76 5b 69 5d 2c 26 6c 69 6e 6b 50 74  ,objv[i],&linkPt
3190: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 77 5b  r->lastValue.pw[
31a0: 69 5d 29 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  i])!= TCL_OK) {.
31b0: 2b 09 20 20 20 20 20 20 20 20 54 63 6c 5f 4f 62  +.        Tcl_Ob
31c0: 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  jSetVar2(interp,
31d0: 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d   linkPtr->varNam
31e0: 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75  e, NULL, ObjValu
31f0: 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b 09 09 20  e(linkPtr),.+.. 
3200: 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e     TCL_GLOBAL_ON
3210: 4c 59 29 3b 0a 2b 09 20 20 20 20 20 20 20 20 20  LY);.+.         
3220: 20 20 20 72 65 74 75 72 6e 20 22 76 61 72 69 61     return "varia
3230: 62 6c 65 20 61 72 72 61 79 20 6d 75 73 74 20 68  ble array must h
3240: 61 76 65 20 77 69 64 65 20 69 6e 74 65 67 65 72  ave wide integer
3250: 20 76 61 6c 75 65 22 3b 0a 2b 09 09 7d 0a 2b 09   value";.+..}.+.
3260: 20 20 20 20 7d 0a 2b 09 20 20 20 20 6d 65 6d 63      }.+.    memc
3270: 70 79 28 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72  py(linkPtr->addr
3280: 2c 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61  ,linkPtr->lastVa
3290: 6c 75 65 2e 70 63 2c 6c 69 6e 6b 50 74 72 2d 3e  lue.pc,linkPtr->
32a0: 62 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 62 72  bytes);.+.    br
32b0: 65 61 6b 3b 0a 2b 09 7d 0a 20 09 69 66 20 28 54  eak;.+.}. .if (T
32c0: 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72 6f  cl_GetWideIntFro
32d0: 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 76 61 6c 75 65  mObj(NULL, value
32e0: 4f 62 6a 2c 20 26 6c 69 6e 6b 50 74 72 2d 3e 6c  Obj, &linkPtr->l
32f0: 61 73 74 56 61 6c 75 65 2e 77 29 0a 20 09 09 21  astValue.w). ..!
3300: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 09 20 20  = TCL_OK) {. .  
3310: 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32    Tcl_ObjSetVar2
3320: 28 69 6e 74 65 72 70 2c 20 6c 69 6e 6b 50 74 72  (interp, linkPtr
3330: 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c 2c  ->varName, NULL,
3340: 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e 6b 50 74   ObjValue(linkPt
3350: 72 29 2c 0a 20 09 09 20 20 20 20 54 43 4c 5f 47  r),. ..    TCL_G
3360: 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 2d 09 20  LOBAL_ONLY);.-. 
3370: 20 20 20 72 65 74 75 72 6e 20 22 76 61 72 69 61     return "varia
3380: 62 6c 65 20 6d 75 73 74 20 68 61 76 65 20 69 6e  ble must have in
3390: 74 65 67 65 72 20 76 61 6c 75 65 22 3b 0a 2b 09  teger value";.+.
33a0: 20 20 20 20 72 65 74 75 72 6e 20 22 76 61 72 69      return "vari
33b0: 61 62 6c 65 20 6d 75 73 74 20 68 61 76 65 20 77  able must have w
33c0: 69 64 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ide integer valu
33d0: 65 22 3b 0a 20 09 7d 0a 20 09 4c 69 6e 6b 65 64  e";. .}. .Linked
33e0: 56 61 72 28 54 63 6c 5f 57 69 64 65 49 6e 74 29  Var(Tcl_WideInt)
33f0: 20 3d 20 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74   = linkPtr->last
3400: 56 61 6c 75 65 2e 77 3b 0a 20 09 62 72 65 61 6b  Value.w;. .break
3410: 3b 0a 20 0a 20 20 20 20 20 63 61 73 65 20 54 43  ;. .     case TC
3420: 4c 5f 4c 49 4e 4b 5f 44 4f 55 42 4c 45 3a 0a 2b  L_LINK_DOUBLE:.+
3430: 09 69 66 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c  .if (linkPtr->fl
3440: 61 67 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43  ags & LINK_ALLOC
3450: 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 20 20 20 69  _LAST) {.+.    i
3460: 66 20 28 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65  f (Tcl_ListObjGe
3470: 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74 65 72 70  tElements(interp
3480: 2c 76 61 6c 75 65 4f 62 6a 2c 26 6f 62 6a 63 2c  ,valueObj,&objc,
3490: 26 6f 62 6a 76 29 3d 3d 54 43 4c 5f 45 52 52 4f  &objv)==TCL_ERRO
34a0: 52 0a 2b 09 09 7c 7c 20 6f 62 6a 63 20 21 3d 20  R.+..|| objc != 
34b0: 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 2f 73  linkPtr->bytes/s
34c0: 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 29 20 7b  izeof(double)) {
34d0: 0a 2b 09 09 72 65 74 75 72 6e 20 22 77 72 6f 6e  .+..return "wron
34e0: 67 20 64 69 6d 65 6e 73 69 6f 6e 22 3b 0a 2b 09  g dimension";.+.
34f0: 20 20 20 20 7d 0a 2b 09 20 20 20 20 66 6f 72 20      }.+.    for 
3500: 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20  (i=0; i < objc; 
3510: 69 2b 2b 29 20 7b 0a 2b 09 09 69 66 20 28 54 63  i++) {.+..if (Tc
3520: 6c 5f 47 65 74 44 6f 75 62 6c 65 46 72 6f 6d 4f  l_GetDoubleFromO
3530: 62 6a 28 4e 55 4c 4c 2c 6f 62 6a 76 5b 69 5d 2c  bj(NULL,objv[i],
3540: 26 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61  &linkPtr->lastVa
3550: 6c 75 65 2e 70 64 5b 69 5d 29 21 3d 20 54 43 4c  lue.pd[i])!= TCL
3560: 5f 4f 4b 29 20 7b 0a 2b 23 69 66 64 65 66 20 41  _OK) {.+#ifdef A
3570: 43 43 45 50 54 5f 4e 41 4e 0a 2b 09 20 20 20 20  CCEPT_NAN.+.    
3580: 69 66 20 28 76 61 6c 75 65 4f 62 6a 2d 3e 74 79  if (valueObj->ty
3590: 70 65 50 74 72 20 21 3d 20 26 74 63 6c 44 6f 75  pePtr != &tclDou
35a0: 62 6c 65 54 79 70 65 29 20 7b 0a 2b 23 65 6e 64  bleType) {.+#end
35b0: 69 66 0a 2b 09 20 20 20 20 20 20 20 20 54 63 6c  if.+.        Tcl
35c0: 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65  _ObjSetVar2(inte
35d0: 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72  rp, linkPtr->var
35e0: 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56  Name, NULL, ObjV
35f0: 61 6c 75 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b  alue(linkPtr),.+
3600: 09 09 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c  ..    TCL_GLOBAL
3610: 5f 4f 4e 4c 59 29 3b 0a 2b 09 20 20 20 20 20 20  _ONLY);.+.      
3620: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 76 61        return "va
3630: 72 69 61 62 6c 65 20 61 72 72 61 79 20 6d 75 73  riable array mus
3640: 74 20 68 61 76 65 20 72 65 61 6c 20 76 61 6c 75  t have real valu
3650: 65 22 3b 0a 2b 23 69 66 64 65 66 20 41 43 43 45  e";.+#ifdef ACCE
3660: 50 54 5f 4e 41 4e 0a 2b 09 20 20 20 20 7d 0a 2b  PT_NAN.+.    }.+
3670: 09 20 20 20 20 6c 69 6e 6b 50 74 72 2d 3e 6c 61  .    linkPtr->la
3680: 73 74 56 61 6c 75 65 2e 70 64 69 5b 69 5d 20 3d  stValue.pdi[i] =
3690: 20 76 61 6c 75 65 4f 62 6a 2d 3e 69 6e 74 65 72   valueObj->inter
36a0: 6e 61 6c 52 65 70 2e 64 6f 75 62 6c 65 56 61 6c  nalRep.doubleVal
36b0: 75 65 3b 0a 2b 23 65 6e 64 69 66 0a 2b 09 09 7d  ue;.+#endif.+..}
36c0: 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 6d  .+.    }.+.    m
36d0: 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72 2d 3e 61  emcpy(linkPtr->a
36e0: 64 64 72 2c 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73  ddr,linkPtr->las
36f0: 74 56 61 6c 75 65 2e 70 63 2c 6c 69 6e 6b 50 74  tValue.pc,linkPt
3700: 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 20 20 20  r->bytes);.+.   
3710: 20 62 72 65 61 6b 3b 0a 2b 09 7d 0a 20 09 69 66   break;.+.}. .if
3720: 20 28 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65 46   (Tcl_GetDoubleF
3730: 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 76 61 6c  romObj(NULL, val
3740: 75 65 4f 62 6a 2c 20 26 6c 69 6e 6b 50 74 72 2d  ueObj, &linkPtr-
3750: 3e 6c 61 73 74 56 61 6c 75 65 2e 64 29 0a 20 09  >lastValue.d). .
3760: 09 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 23  .!= TCL_OK) {. #
3770: 69 66 64 65 66 20 41 43 43 45 50 54 5f 4e 41 4e  ifdef ACCEPT_NAN
3780: 0a 40 40 20 2d 34 31 31 2c 36 20 2b 36 33 37 2c  .@@ -411,6 +637,
3790: 32 31 20 40 40 20 4c 69 6e 6b 54 72 61 63 65 50  21 @@ LinkTraceP
37a0: 72 6f 63 28 0a 20 09 62 72 65 61 6b 3b 0a 20 0a  roc(. .break;. .
37b0: 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49       case TCL_LI
37c0: 4e 4b 5f 42 4f 4f 4c 45 41 4e 3a 0a 2b 09 69 66  NK_BOOLEAN:.+.if
37d0: 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73   (linkPtr->flags
37e0: 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41   & LINK_ALLOC_LA
37f0: 53 54 29 20 7b 0a 2b 09 20 20 20 20 69 66 20 28  ST) {.+.    if (
3800: 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c  Tcl_ListObjGetEl
3810: 65 6d 65 6e 74 73 28 69 6e 74 65 72 70 2c 76 61  ements(interp,va
3820: 6c 75 65 4f 62 6a 2c 26 6f 62 6a 63 2c 26 6f 62  lueObj,&objc,&ob
3830: 6a 76 29 3d 3d 54 43 4c 5f 45 52 52 4f 52 0a 2b  jv)==TCL_ERROR.+
3840: 09 09 7c 7c 20 6f 62 6a 63 20 21 3d 20 6c 69 6e  ..|| objc != lin
3850: 6b 50 74 72 2d 3e 62 79 74 65 73 2f 73 69 7a 65  kPtr->bytes/size
3860: 6f 66 28 69 6e 74 29 29 20 7b 0a 2b 09 09 72 65  of(int)) {.+..re
3870: 74 75 72 6e 20 22 77 72 6f 6e 67 20 64 69 6d 65  turn "wrong dime
3880: 6e 73 69 6f 6e 22 3b 0a 2b 09 20 20 20 20 7d 0a  nsion";.+.    }.
3890: 2b 09 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20  +.    for (i=0; 
38a0: 69 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b  i < objc; i++) {
38b0: 0a 2b 09 09 69 66 20 28 54 63 6c 5f 47 65 74 42  .+..if (Tcl_GetB
38c0: 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 4e 55  ooleanFromObj(NU
38d0: 4c 4c 2c 6f 62 6a 76 5b 69 5d 2c 26 6c 69 6e 6b  LL,objv[i],&link
38e0: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70  Ptr->lastValue.p
38f0: 69 5b 69 5d 29 21 3d 20 54 43 4c 5f 4f 4b 29 20  i[i])!= TCL_OK) 
3900: 7b 0a 2b 09 20 20 20 20 20 20 20 20 54 63 6c 5f  {.+.        Tcl_
3910: 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72  ObjSetVar2(inter
3920: 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e  p, linkPtr->varN
3930: 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61  ame, NULL, ObjVa
3940: 6c 75 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b 09  lue(linkPtr),.+.
3950: 09 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  .    TCL_GLOBAL_
3960: 4f 4e 4c 59 29 3b 0a 2b 09 20 20 20 20 20 20 20  ONLY);.+.       
3970: 20 20 20 20 20 72 65 74 75 72 6e 20 22 76 61 72       return "var
3980: 69 61 62 6c 65 20 61 72 72 61 79 20 6d 75 73 74  iable array must
3990: 20 68 61 76 65 20 62 6f 6f 6c 65 61 6e 20 76 61   have boolean va
39a0: 6c 75 65 22 3b 0a 2b 09 09 7d 0a 2b 09 20 20 20  lue";.+..}.+.   
39b0: 20 7d 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28   }.+.    memcpy(
39c0: 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 2c 6c 69  linkPtr->addr,li
39d0: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65  nkPtr->lastValue
39e0: 2e 70 63 2c 6c 69 6e 6b 50 74 72 2d 3e 62 79 74  .pc,linkPtr->byt
39f0: 65 73 29 3b 0a 2b 09 20 20 20 20 62 72 65 61 6b  es);.+.    break
3a00: 3b 0a 2b 09 7d 0a 20 09 69 66 20 28 54 63 6c 5f  ;.+.}. .if (Tcl_
3a10: 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62  GetBooleanFromOb
3a20: 6a 28 4e 55 4c 4c 2c 20 76 61 6c 75 65 4f 62 6a  j(NULL, valueObj
3a30: 2c 20 26 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74  , &linkPtr->last
3a40: 56 61 6c 75 65 2e 69 29 0a 20 09 09 21 3d 20 54  Value.i). ..!= T
3a50: 43 4c 5f 4f 4b 29 20 7b 0a 20 09 20 20 20 20 54  CL_OK) {. .    T
3a60: 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e  cl_ObjSetVar2(in
3a70: 74 65 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76  terp, linkPtr->v
3a80: 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62  arName, NULL, Ob
3a90: 6a 56 61 6c 75 65 28 6c 69 6e 6b 50 74 72 29 2c  jValue(linkPtr),
3aa0: 0a 40 40 20 2d 34 32 31 2c 36 20 2b 36 36 32 2c  .@@ -421,6 +662,
3ab0: 32 33 20 40 40 20 4c 69 6e 6b 54 72 61 63 65 50  23 @@ LinkTraceP
3ac0: 72 6f 63 28 0a 20 09 62 72 65 61 6b 3b 0a 20 0a  roc(. .break;. .
3ad0: 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49       case TCL_LI
3ae0: 4e 4b 5f 43 48 41 52 3a 0a 2b 09 69 66 20 28 6c  NK_CHAR:.+.if (l
3af0: 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20  inkPtr->flags & 
3b00: 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29  LINK_ALLOC_LAST)
3b10: 20 7b 0a 2b 09 20 20 20 20 69 66 20 28 54 63 6c   {.+.    if (Tcl
3b20: 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65  _ListObjGetEleme
3b30: 6e 74 73 28 69 6e 74 65 72 70 2c 76 61 6c 75 65  nts(interp,value
3b40: 4f 62 6a 2c 26 6f 62 6a 63 2c 26 6f 62 6a 76 29  Obj,&objc,&objv)
3b50: 3d 3d 54 43 4c 5f 45 52 52 4f 52 0a 2b 09 09 7c  ==TCL_ERROR.+..|
3b60: 7c 20 6f 62 6a 63 20 21 3d 20 6c 69 6e 6b 50 74  | objc != linkPt
3b70: 72 2d 3e 62 79 74 65 73 2f 73 69 7a 65 6f 66 28  r->bytes/sizeof(
3b80: 63 68 61 72 29 29 20 7b 0a 2b 09 09 72 65 74 75  char)) {.+..retu
3b90: 72 6e 20 22 77 72 6f 6e 67 20 64 69 6d 65 6e 73  rn "wrong dimens
3ba0: 69 6f 6e 22 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09  ion";.+.    }.+.
3bb0: 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 20      for (i=0; i 
3bc0: 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b  < objc; i++) {.+
3bd0: 09 09 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 74  ..if (Tcl_GetInt
3be0: 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 6f 62 6a  FromObj(NULL,obj
3bf0: 76 5b 69 5d 2c 26 76 61 6c 75 65 49 6e 74 29 21  v[i],&valueInt)!
3c00: 3d 20 54 43 4c 5f 4f 4b 0a 2b 09 09 09 7c 7c 20  = TCL_OK.+...|| 
3c10: 76 61 6c 75 65 49 6e 74 20 3c 20 53 43 48 41 52  valueInt < SCHAR
3c20: 5f 4d 49 4e 20 7c 7c 20 76 61 6c 75 65 49 6e 74  _MIN || valueInt
3c30: 20 3e 20 53 43 48 41 52 5f 4d 41 58 29 20 7b 0a   > SCHAR_MAX) {.
3c40: 2b 09 20 20 20 20 20 20 20 20 54 63 6c 5f 4f 62  +.        Tcl_Ob
3c50: 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  jSetVar2(interp,
3c60: 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d   linkPtr->varNam
3c70: 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75  e, NULL, ObjValu
3c80: 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b 09 09 20  e(linkPtr),.+.. 
3c90: 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e     TCL_GLOBAL_ON
3ca0: 4c 59 29 3b 0a 2b 09 20 20 20 20 20 20 20 20 20  LY);.+.         
3cb0: 20 20 20 72 65 74 75 72 6e 20 22 76 61 72 69 61     return "varia
3cc0: 62 6c 65 20 61 72 72 61 79 20 6d 75 73 74 20 68  ble array must h
3cd0: 61 76 65 20 63 68 61 72 20 76 61 6c 75 65 22 3b  ave char value";
3ce0: 0a 2b 09 09 7d 0a 2b 09 09 6c 69 6e 6b 50 74 72  .+..}.+..linkPtr
3cf0: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 5b 69  ->lastValue.pc[i
3d00: 5d 20 3d 20 28 63 68 61 72 29 76 61 6c 75 65 49  ] = (char)valueI
3d10: 6e 74 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20  nt;.+.    }.+.  
3d20: 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72    memcpy(linkPtr
3d30: 2d 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72 2d 3e  ->addr,linkPtr->
3d40: 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c 6c 69 6e  lastValue.pc,lin
3d50: 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09  kPtr->bytes);.+.
3d60: 20 20 20 20 62 72 65 61 6b 3b 0a 2b 09 7d 0a 20      break;.+.}. 
3d70: 09 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 74 46  .if (Tcl_GetIntF
3d80: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 76  romObj(interp, v
3d90: 61 6c 75 65 4f 62 6a 2c 20 26 76 61 6c 75 65 49  alueObj, &valueI
3da0: 6e 74 29 20 21 3d 20 54 43 4c 5f 4f 4b 0a 20 09  nt) != TCL_OK. .
3db0: 09 7c 7c 20 76 61 6c 75 65 49 6e 74 20 3c 20 53  .|| valueInt < S
3dc0: 43 48 41 52 5f 4d 49 4e 20 7c 7c 20 76 61 6c 75  CHAR_MIN || valu
3dd0: 65 49 6e 74 20 3e 20 53 43 48 41 52 5f 4d 41 58  eInt > SCHAR_MAX
3de0: 29 20 7b 0a 20 09 20 20 20 20 54 63 6c 5f 4f 62  ) {. .    Tcl_Ob
3df0: 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  jSetVar2(interp,
3e00: 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d   linkPtr->varNam
3e10: 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75  e, NULL, ObjValu
3e20: 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 40 40 20 2d  e(linkPtr),.@@ -
3e30: 34 33 32 2c 36 20 2b 36 39 30 2c 32 33 20 40 40  432,6 +690,23 @@
3e40: 20 4c 69 6e 6b 54 72 61 63 65 50 72 6f 63 28 0a   LinkTraceProc(.
3e50: 20 09 62 72 65 61 6b 3b 0a 20 0a 20 20 20 20 20   .break;. .     
3e60: 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 55 43  case TCL_LINK_UC
3e70: 48 41 52 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50  HAR:.+.if (linkP
3e80: 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b  tr->flags & LINK
3e90: 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b  _ALLOC_LAST) {.+
3ea0: 09 20 20 20 20 69 66 20 28 54 63 6c 5f 4c 69 73  .    if (Tcl_Lis
3eb0: 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28  tObjGetElements(
3ec0: 69 6e 74 65 72 70 2c 76 61 6c 75 65 4f 62 6a 2c  interp,valueObj,
3ed0: 26 6f 62 6a 63 2c 26 6f 62 6a 76 29 3d 3d 54 43  &objc,&objv)==TC
3ee0: 4c 5f 45 52 52 4f 52 0a 2b 09 09 7c 7c 20 6f 62  L_ERROR.+..|| ob
3ef0: 6a 63 20 21 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62  jc != linkPtr->b
3f00: 79 74 65 73 2f 73 69 7a 65 6f 66 28 75 6e 73 69  ytes/sizeof(unsi
3f10: 67 6e 65 64 20 63 68 61 72 29 29 20 7b 0a 2b 09  gned char)) {.+.
3f20: 09 72 65 74 75 72 6e 20 22 77 72 6f 6e 67 20 64  .return "wrong d
3f30: 69 6d 65 6e 73 69 6f 6e 22 3b 0a 2b 09 20 20 20  imension";.+.   
3f40: 20 7d 0a 2b 09 20 20 20 20 66 6f 72 20 28 69 3d   }.+.    for (i=
3f50: 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b  0; i < objc; i++
3f60: 29 20 7b 0a 2b 09 09 69 66 20 28 54 63 6c 5f 47  ) {.+..if (Tcl_G
3f70: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55 4c  etIntFromObj(NUL
3f80: 4c 2c 6f 62 6a 76 5b 69 5d 2c 26 76 61 6c 75 65  L,objv[i],&value
3f90: 49 6e 74 29 21 3d 20 54 43 4c 5f 4f 4b 0a 2b 09  Int)!= TCL_OK.+.
3fa0: 09 09 7c 7c 20 76 61 6c 75 65 49 6e 74 20 3c 20  ..|| valueInt < 
3fb0: 30 20 7c 7c 20 76 61 6c 75 65 49 6e 74 20 3e 20  0 || valueInt > 
3fc0: 55 43 48 41 52 5f 4d 41 58 29 20 7b 0a 2b 09 20  UCHAR_MAX) {.+. 
3fd0: 20 20 20 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65         Tcl_ObjSe
3fe0: 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6c 69  tVar2(interp, li
3ff0: 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20  nkPtr->varName, 
4000: 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c  NULL, ObjValue(l
4010: 69 6e 6b 50 74 72 29 2c 0a 2b 09 09 20 20 20 20  inkPtr),.+..    
4020: 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
4030: 3b 0a 2b 09 20 20 20 20 20 20 20 20 20 20 20 20  ;.+.            
4040: 72 65 74 75 72 6e 20 22 76 61 72 69 61 62 6c 65  return "variable
4050: 20 61 72 72 61 79 20 6d 75 73 74 20 68 61 76 65   array must have
4060: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 76   unsigned char v
4070: 61 6c 75 65 22 3b 0a 2b 09 09 7d 0a 2b 09 09 6c  alue";.+..}.+..l
4080: 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75  inkPtr->lastValu
4090: 65 2e 70 75 63 5b 69 5d 20 3d 20 28 75 6e 73 69  e.puc[i] = (unsi
40a0: 67 6e 65 64 20 63 68 61 72 29 76 61 6c 75 65 49  gned char)valueI
40b0: 6e 74 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20  nt;.+.    }.+.  
40c0: 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72    memcpy(linkPtr
40d0: 2d 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72 2d 3e  ->addr,linkPtr->
40e0: 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c 6c 69 6e  lastValue.pc,lin
40f0: 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09  kPtr->bytes);.+.
4100: 20 20 20 20 62 72 65 61 6b 3b 0a 2b 09 7d 0a 20      break;.+.}. 
4110: 09 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 74 46  .if (Tcl_GetIntF
4120: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 76  romObj(interp, v
4130: 61 6c 75 65 4f 62 6a 2c 20 26 76 61 6c 75 65 49  alueObj, &valueI
4140: 6e 74 29 20 21 3d 20 54 43 4c 5f 4f 4b 0a 20 09  nt) != TCL_OK. .
4150: 09 7c 7c 20 76 61 6c 75 65 49 6e 74 20 3c 20 30  .|| valueInt < 0
4160: 20 7c 7c 20 76 61 6c 75 65 49 6e 74 20 3e 20 55   || valueInt > U
4170: 43 48 41 52 5f 4d 41 58 29 20 7b 0a 20 09 20 20  CHAR_MAX) {. .  
4180: 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32    Tcl_ObjSetVar2
4190: 28 69 6e 74 65 72 70 2c 20 6c 69 6e 6b 50 74 72  (interp, linkPtr
41a0: 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c 2c  ->varName, NULL,
41b0: 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e 6b 50 74   ObjValue(linkPt
41c0: 72 29 2c 0a 40 40 20 2d 34 34 33 2c 36 20 2b 37  r),.@@ -443,6 +7
41d0: 31 38 2c 32 33 20 40 40 20 4c 69 6e 6b 54 72 61  18,23 @@ LinkTra
41e0: 63 65 50 72 6f 63 28 0a 20 09 62 72 65 61 6b 3b  ceProc(. .break;
41f0: 0a 20 0a 20 20 20 20 20 63 61 73 65 20 54 43 4c  . .     case TCL
4200: 5f 4c 49 4e 4b 5f 53 48 4f 52 54 3a 0a 2b 09 69  _LINK_SHORT:.+.i
4210: 66 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67  f (linkPtr->flag
4220: 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c  s & LINK_ALLOC_L
4230: 41 53 54 29 20 7b 0a 2b 09 20 20 20 20 69 66 20  AST) {.+.    if 
4240: 28 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45  (Tcl_ListObjGetE
4250: 6c 65 6d 65 6e 74 73 28 69 6e 74 65 72 70 2c 76  lements(interp,v
4260: 61 6c 75 65 4f 62 6a 2c 26 6f 62 6a 63 2c 26 6f  alueObj,&objc,&o
4270: 62 6a 76 29 3d 3d 54 43 4c 5f 45 52 52 4f 52 0a  bjv)==TCL_ERROR.
4280: 2b 09 09 7c 7c 20 6f 62 6a 63 20 21 3d 20 6c 69  +..|| objc != li
4290: 6e 6b 50 74 72 2d 3e 62 79 74 65 73 2f 73 69 7a  nkPtr->bytes/siz
42a0: 65 6f 66 28 73 68 6f 72 74 29 29 20 7b 0a 2b 09  eof(short)) {.+.
42b0: 09 72 65 74 75 72 6e 20 22 77 72 6f 6e 67 20 64  .return "wrong d
42c0: 69 6d 65 6e 73 69 6f 6e 22 3b 0a 2b 09 20 20 20  imension";.+.   
42d0: 20 7d 0a 2b 09 20 20 20 20 66 6f 72 20 28 69 3d   }.+.    for (i=
42e0: 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b  0; i < objc; i++
42f0: 29 20 7b 0a 2b 09 09 69 66 20 28 54 63 6c 5f 47  ) {.+..if (Tcl_G
4300: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55 4c  etIntFromObj(NUL
4310: 4c 2c 6f 62 6a 76 5b 69 5d 2c 26 76 61 6c 75 65  L,objv[i],&value
4320: 49 6e 74 29 21 3d 20 54 43 4c 5f 4f 4b 0a 2b 09  Int)!= TCL_OK.+.
4330: 09 09 7c 7c 20 76 61 6c 75 65 49 6e 74 20 3c 20  ..|| valueInt < 
4340: 53 48 52 54 5f 4d 49 4e 20 7c 7c 20 76 61 6c 75  SHRT_MIN || valu
4350: 65 49 6e 74 20 3e 20 53 48 52 54 5f 4d 41 58 29  eInt > SHRT_MAX)
4360: 20 7b 0a 2b 09 20 20 20 20 20 20 20 20 54 63 6c   {.+.        Tcl
4370: 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65  _ObjSetVar2(inte
4380: 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72  rp, linkPtr->var
4390: 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56  Name, NULL, ObjV
43a0: 61 6c 75 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b  alue(linkPtr),.+
43b0: 09 09 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c  ..    TCL_GLOBAL
43c0: 5f 4f 4e 4c 59 29 3b 0a 2b 09 20 20 20 20 20 20  _ONLY);.+.      
43d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 76 61        return "va
43e0: 72 69 61 62 6c 65 20 61 72 72 61 79 20 6d 75 73  riable array mus
43f0: 74 20 68 61 76 65 20 73 68 6f 72 74 20 76 61 6c  t have short val
4400: 75 65 22 3b 0a 2b 09 09 7d 0a 2b 09 09 6c 69 6e  ue";.+..}.+..lin
4410: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e  kPtr->lastValue.
4420: 70 73 5b 69 5d 20 3d 20 28 73 68 6f 72 74 29 76  ps[i] = (short)v
4430: 61 6c 75 65 49 6e 74 3b 0a 2b 09 20 20 20 20 7d  alueInt;.+.    }
4440: 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 6c 69  .+.    memcpy(li
4450: 6e 6b 50 74 72 2d 3e 61 64 64 72 2c 6c 69 6e 6b  nkPtr->addr,link
4460: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70  Ptr->lastValue.p
4470: 63 2c 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73  c,linkPtr->bytes
4480: 29 3b 0a 2b 09 20 20 20 20 62 72 65 61 6b 3b 0a  );.+.    break;.
4490: 2b 09 7d 0a 20 09 69 66 20 28 54 63 6c 5f 47 65  +.}. .if (Tcl_Ge
44a0: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
44b0: 72 70 2c 20 76 61 6c 75 65 4f 62 6a 2c 20 26 76  rp, valueObj, &v
44c0: 61 6c 75 65 49 6e 74 29 20 21 3d 20 54 43 4c 5f  alueInt) != TCL_
44d0: 4f 4b 0a 20 09 09 7c 7c 20 76 61 6c 75 65 49 6e  OK. ..|| valueIn
44e0: 74 20 3c 20 53 48 52 54 5f 4d 49 4e 20 7c 7c 20  t < SHRT_MIN || 
44f0: 76 61 6c 75 65 49 6e 74 20 3e 20 53 48 52 54 5f  valueInt > SHRT_
4500: 4d 41 58 29 20 7b 0a 20 09 20 20 20 20 54 63 6c  MAX) {. .    Tcl
4510: 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65  _ObjSetVar2(inte
4520: 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72  rp, linkPtr->var
4530: 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56  Name, NULL, ObjV
4540: 61 6c 75 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 40  alue(linkPtr),.@
4550: 40 20 2d 34 35 34 2c 36 20 2b 37 34 36 2c 32 33  @ -454,6 +746,23
4560: 20 40 40 20 4c 69 6e 6b 54 72 61 63 65 50 72 6f   @@ LinkTracePro
4570: 63 28 0a 20 09 62 72 65 61 6b 3b 0a 20 0a 20 20  c(. .break;. .  
4580: 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b     case TCL_LINK
4590: 5f 55 53 48 4f 52 54 3a 0a 2b 09 69 66 20 28 6c  _USHORT:.+.if (l
45a0: 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20  inkPtr->flags & 
45b0: 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29  LINK_ALLOC_LAST)
45c0: 20 7b 0a 2b 09 20 20 20 20 69 66 20 28 54 63 6c   {.+.    if (Tcl
45d0: 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65  _ListObjGetEleme
45e0: 6e 74 73 28 69 6e 74 65 72 70 2c 76 61 6c 75 65  nts(interp,value
45f0: 4f 62 6a 2c 26 6f 62 6a 63 2c 26 6f 62 6a 76 29  Obj,&objc,&objv)
4600: 3d 3d 54 43 4c 5f 45 52 52 4f 52 0a 2b 09 09 7c  ==TCL_ERROR.+..|
4610: 7c 20 6f 62 6a 63 20 21 3d 20 6c 69 6e 6b 50 74  | objc != linkPt
4620: 72 2d 3e 62 79 74 65 73 2f 73 69 7a 65 6f 66 28  r->bytes/sizeof(
4630: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 29 29  unsigned short))
4640: 20 7b 0a 2b 09 09 72 65 74 75 72 6e 20 22 77 72   {.+..return "wr
4650: 6f 6e 67 20 64 69 6d 65 6e 73 69 6f 6e 22 3b 0a  ong dimension";.
4660: 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 66 6f  +.    }.+.    fo
4670: 72 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63  r (i=0; i < objc
4680: 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09 69 66 20 28  ; i++) {.+..if (
4690: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
46a0: 6a 28 4e 55 4c 4c 2c 6f 62 6a 76 5b 69 5d 2c 26  j(NULL,objv[i],&
46b0: 76 61 6c 75 65 49 6e 74 29 21 3d 20 54 43 4c 5f  valueInt)!= TCL_
46c0: 4f 4b 0a 2b 09 09 09 7c 7c 20 76 61 6c 75 65 49  OK.+...|| valueI
46d0: 6e 74 20 3c 20 30 20 7c 7c 20 76 61 6c 75 65 49  nt < 0 || valueI
46e0: 6e 74 20 3e 20 55 53 48 52 54 5f 4d 41 58 29 20  nt > USHRT_MAX) 
46f0: 7b 0a 2b 09 20 20 20 20 20 20 20 20 54 63 6c 5f  {.+.        Tcl_
4700: 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72  ObjSetVar2(inter
4710: 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e  p, linkPtr->varN
4720: 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61  ame, NULL, ObjVa
4730: 6c 75 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b 09  lue(linkPtr),.+.
4740: 09 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  .    TCL_GLOBAL_
4750: 4f 4e 4c 59 29 3b 0a 2b 09 20 20 20 20 20 20 20  ONLY);.+.       
4760: 20 20 20 20 20 72 65 74 75 72 6e 20 22 76 61 72       return "var
4770: 69 61 62 6c 65 20 61 72 72 61 79 20 6d 75 73 74  iable array must
4780: 20 68 61 76 65 20 75 6e 73 69 67 6e 65 64 20 73   have unsigned s
4790: 68 6f 72 74 20 76 61 6c 75 65 22 3b 0a 2b 09 09  hort value";.+..
47a0: 7d 0a 2b 09 09 6c 69 6e 6b 50 74 72 2d 3e 6c 61  }.+..linkPtr->la
47b0: 73 74 56 61 6c 75 65 2e 70 75 73 5b 69 5d 20 3d  stValue.pus[i] =
47c0: 20 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74   (unsigned short
47d0: 29 76 61 6c 75 65 49 6e 74 3b 0a 2b 09 20 20 20  )valueInt;.+.   
47e0: 20 7d 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28   }.+.    memcpy(
47f0: 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 2c 6c 69  linkPtr->addr,li
4800: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65  nkPtr->lastValue
4810: 2e 70 63 2c 6c 69 6e 6b 50 74 72 2d 3e 62 79 74  .pc,linkPtr->byt
4820: 65 73 29 3b 0a 2b 09 20 20 20 20 62 72 65 61 6b  es);.+.    break
4830: 3b 0a 2b 09 7d 0a 20 09 69 66 20 28 54 63 6c 5f  ;.+.}. .if (Tcl_
4840: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
4850: 74 65 72 70 2c 20 76 61 6c 75 65 4f 62 6a 2c 20  terp, valueObj, 
4860: 26 76 61 6c 75 65 49 6e 74 29 20 21 3d 20 54 43  &valueInt) != TC
4870: 4c 5f 4f 4b 0a 20 09 09 7c 7c 20 76 61 6c 75 65  L_OK. ..|| value
4880: 49 6e 74 20 3c 20 30 20 7c 7c 20 76 61 6c 75 65  Int < 0 || value
4890: 49 6e 74 20 3e 20 55 53 48 52 54 5f 4d 41 58 29  Int > USHRT_MAX)
48a0: 20 7b 0a 20 09 20 20 20 20 54 63 6c 5f 4f 62 6a   {. .    Tcl_Obj
48b0: 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
48c0: 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65  linkPtr->varName
48d0: 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65  , NULL, ObjValue
48e0: 28 6c 69 6e 6b 50 74 72 29 2c 0a 40 40 20 2d 34  (linkPtr),.@@ -4
48f0: 36 35 2c 36 20 2b 37 37 34 2c 32 33 20 40 40 20  65,6 +774,23 @@ 
4900: 4c 69 6e 6b 54 72 61 63 65 50 72 6f 63 28 0a 20  LinkTraceProc(. 
4910: 09 62 72 65 61 6b 3b 0a 20 0a 20 20 20 20 20 63  .break;. .     c
4920: 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 55 49 4e  ase TCL_LINK_UIN
4930: 54 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74 72  T:.+.if (linkPtr
4940: 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f 41  ->flags & LINK_A
4950: 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 20  LLOC_LAST) {.+. 
4960: 20 20 20 69 66 20 28 54 63 6c 5f 4c 69 73 74 4f     if (Tcl_ListO
4970: 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e  bjGetElements(in
4980: 74 65 72 70 2c 76 61 6c 75 65 4f 62 6a 2c 26 6f  terp,valueObj,&o
4990: 62 6a 63 2c 26 6f 62 6a 76 29 3d 3d 54 43 4c 5f  bjc,&objv)==TCL_
49a0: 45 52 52 4f 52 0a 2b 09 09 7c 7c 20 6f 62 6a 63  ERROR.+..|| objc
49b0: 20 21 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74   != linkPtr->byt
49c0: 65 73 2f 73 69 7a 65 6f 66 28 75 6e 73 69 67 6e  es/sizeof(unsign
49d0: 65 64 20 69 6e 74 29 29 20 7b 0a 2b 09 09 72 65  ed int)) {.+..re
49e0: 74 75 72 6e 20 22 77 72 6f 6e 67 20 64 69 6d 65  turn "wrong dime
49f0: 6e 73 69 6f 6e 22 3b 0a 2b 09 20 20 20 20 7d 0a  nsion";.+.    }.
4a00: 2b 09 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20  +.    for (i=0; 
4a10: 69 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b  i < objc; i++) {
4a20: 0a 2b 09 09 69 66 20 28 54 63 6c 5f 47 65 74 57  .+..if (Tcl_GetW
4a30: 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55  ideIntFromObj(NU
4a40: 4c 4c 2c 6f 62 6a 76 5b 69 5d 2c 26 76 61 6c 75  LL,objv[i],&valu
4a50: 65 57 69 64 65 29 21 3d 20 54 43 4c 5f 4f 4b 0a  eWide)!= TCL_OK.
4a60: 2b 09 09 09 7c 7c 20 76 61 6c 75 65 57 69 64 65  +...|| valueWide
4a70: 20 3c 20 30 20 7c 7c 20 76 61 6c 75 65 57 69 64   < 0 || valueWid
4a80: 65 20 3e 20 55 49 4e 54 5f 4d 41 58 29 20 7b 0a  e > UINT_MAX) {.
4a90: 2b 09 20 20 20 20 20 20 20 20 54 63 6c 5f 4f 62  +.        Tcl_Ob
4aa0: 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  jSetVar2(interp,
4ab0: 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d   linkPtr->varNam
4ac0: 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75  e, NULL, ObjValu
4ad0: 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b 09 09 20  e(linkPtr),.+.. 
4ae0: 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e     TCL_GLOBAL_ON
4af0: 4c 59 29 3b 0a 2b 09 20 20 20 20 20 20 20 20 20  LY);.+.         
4b00: 20 20 20 72 65 74 75 72 6e 20 22 76 61 72 69 61     return "varia
4b10: 62 6c 65 20 61 72 72 61 79 20 6d 75 73 74 20 68  ble array must h
4b20: 61 76 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  ave unsigned int
4b30: 20 76 61 6c 75 65 22 3b 0a 2b 09 09 7d 0a 2b 09   value";.+..}.+.
4b40: 09 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61  .linkPtr->lastVa
4b50: 6c 75 65 2e 70 75 69 5b 69 5d 20 3d 20 28 75 6e  lue.pui[i] = (un
4b60: 73 69 67 6e 65 64 20 69 6e 74 29 76 61 6c 75 65  signed int)value
4b70: 57 69 64 65 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09  Wide;.+.    }.+.
4b80: 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50      memcpy(linkP
4b90: 74 72 2d 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72  tr->addr,linkPtr
4ba0: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c 6c  ->lastValue.pc,l
4bb0: 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a  inkPtr->bytes);.
4bc0: 2b 09 20 20 20 20 62 72 65 61 6b 3b 0a 2b 09 7d  +.    break;.+.}
4bd0: 0a 20 09 69 66 20 28 54 63 6c 5f 47 65 74 57 69  . .if (Tcl_GetWi
4be0: 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  deIntFromObj(int
4bf0: 65 72 70 2c 20 76 61 6c 75 65 4f 62 6a 2c 20 26  erp, valueObj, &
4c00: 76 61 6c 75 65 57 69 64 65 29 20 21 3d 20 54 43  valueWide) != TC
4c10: 4c 5f 4f 4b 0a 20 09 09 7c 7c 20 76 61 6c 75 65  L_OK. ..|| value
4c20: 57 69 64 65 20 3c 20 30 20 7c 7c 20 76 61 6c 75  Wide < 0 || valu
4c30: 65 57 69 64 65 20 3e 20 55 49 4e 54 5f 4d 41 58  eWide > UINT_MAX
4c40: 29 20 7b 0a 20 09 20 20 20 20 54 63 6c 5f 4f 62  ) {. .    Tcl_Ob
4c50: 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  jSetVar2(interp,
4c60: 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d   linkPtr->varNam
4c70: 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75  e, NULL, ObjValu
4c80: 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 40 40 20 2d  e(linkPtr),.@@ -
4c90: 34 37 36 2c 36 20 2b 38 30 32 2c 32 33 20 40 40  476,6 +802,23 @@
4ca0: 20 4c 69 6e 6b 54 72 61 63 65 50 72 6f 63 28 0a   LinkTraceProc(.
4cb0: 20 09 62 72 65 61 6b 3b 0a 20 0a 20 20 20 20 20   .break;. .     
4cc0: 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 4c 4f  case TCL_LINK_LO
4cd0: 4e 47 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74  NG:.+.if (linkPt
4ce0: 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f  r->flags & LINK_
4cf0: 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09  ALLOC_LAST) {.+.
4d00: 20 20 20 20 69 66 20 28 54 63 6c 5f 4c 69 73 74      if (Tcl_List
4d10: 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69  ObjGetElements(i
4d20: 6e 74 65 72 70 2c 76 61 6c 75 65 4f 62 6a 2c 26  nterp,valueObj,&
4d30: 6f 62 6a 63 2c 26 6f 62 6a 76 29 3d 3d 54 43 4c  objc,&objv)==TCL
4d40: 5f 45 52 52 4f 52 0a 2b 09 09 7c 7c 20 6f 62 6a  _ERROR.+..|| obj
4d50: 63 20 21 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79  c != linkPtr->by
4d60: 74 65 73 2f 73 69 7a 65 6f 66 28 6c 6f 6e 67 29  tes/sizeof(long)
4d70: 29 20 7b 0a 2b 09 09 72 65 74 75 72 6e 20 22 77  ) {.+..return "w
4d80: 72 6f 6e 67 20 64 69 6d 65 6e 73 69 6f 6e 22 3b  rong dimension";
4d90: 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 66  .+.    }.+.    f
4da0: 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a  or (i=0; i < obj
4db0: 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09 69 66 20  c; i++) {.+..if 
4dc0: 28 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46  (Tcl_GetWideIntF
4dd0: 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 6f 62 6a 76  romObj(NULL,objv
4de0: 5b 69 5d 2c 26 76 61 6c 75 65 57 69 64 65 29 21  [i],&valueWide)!
4df0: 3d 20 54 43 4c 5f 4f 4b 0a 2b 09 09 09 7c 7c 20  = TCL_OK.+...|| 
4e00: 76 61 6c 75 65 57 69 64 65 20 3c 20 4c 4f 4e 47  valueWide < LONG
4e10: 5f 4d 49 4e 20 7c 7c 20 76 61 6c 75 65 57 69 64  _MIN || valueWid
4e20: 65 20 3e 20 4c 4f 4e 47 5f 4d 41 58 29 20 7b 0a  e > LONG_MAX) {.
4e30: 2b 09 20 20 20 20 20 20 20 20 54 63 6c 5f 4f 62  +.        Tcl_Ob
4e40: 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  jSetVar2(interp,
4e50: 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d   linkPtr->varNam
4e60: 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75  e, NULL, ObjValu
4e70: 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 2b 09 09 20  e(linkPtr),.+.. 
4e80: 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e     TCL_GLOBAL_ON
4e90: 4c 59 29 3b 0a 2b 09 20 20 20 20 20 20 20 20 20  LY);.+.         
4ea0: 20 20 20 72 65 74 75 72 6e 20 22 76 61 72 69 61     return "varia
4eb0: 62 6c 65 20 61 72 72 61 79 20 6d 75 73 74 20 68  ble array must h
4ec0: 61 76 65 20 6c 6f 6e 67 20 76 61 6c 75 65 22 3b  ave long value";
4ed0: 0a 2b 09 09 7d 0a 2b 09 09 6c 69 6e 6b 50 74 72  .+..}.+..linkPtr
4ee0: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 6c 5b 69  ->lastValue.pl[i
4ef0: 5d 20 3d 20 28 6c 6f 6e 67 29 76 61 6c 75 65 57  ] = (long)valueW
4f00: 69 64 65 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20  ide;.+.    }.+. 
4f10: 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74     memcpy(linkPt
4f20: 72 2d 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72 2d  r->addr,linkPtr-
4f30: 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c 6c 69  >lastValue.pc,li
4f40: 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b  nkPtr->bytes);.+
4f50: 09 20 20 20 20 62 72 65 61 6b 3b 0a 2b 09 7d 0a  .    break;.+.}.
4f60: 20 09 69 66 20 28 54 63 6c 5f 47 65 74 57 69 64   .if (Tcl_GetWid
4f70: 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  eIntFromObj(inte
4f80: 72 70 2c 20 76 61 6c 75 65 4f 62 6a 2c 20 26 76  rp, valueObj, &v
4f90: 61 6c 75 65 57 69 64 65 29 20 21 3d 20 54 43 4c  alueWide) != TCL
4fa0: 5f 4f 4b 0a 20 09 09 7c 7c 20 76 61 6c 75 65 57  _OK. ..|| valueW
4fb0: 69 64 65 20 3c 20 4c 4f 4e 47 5f 4d 49 4e 20 7c  ide < LONG_MIN |
4fc0: 7c 20 76 61 6c 75 65 57 69 64 65 20 3e 20 4c 4f  | valueWide > LO
4fd0: 4e 47 5f 4d 41 58 29 20 7b 0a 20 09 20 20 20 20  NG_MAX) {. .    
4fe0: 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69  Tcl_ObjSetVar2(i
4ff0: 6e 74 65 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e  nterp, linkPtr->
5000: 76 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f  varName, NULL, O
5010: 62 6a 56 61 6c 75 65 28 6c 69 6e 6b 50 74 72 29  bjValue(linkPtr)
5020: 2c 0a 40 40 20 2d 34 38 37 2c 36 20 2b 38 33 30  ,.@@ -487,6 +830
5030: 2c 32 33 20 40 40 20 4c 69 6e 6b 54 72 61 63 65  ,23 @@ LinkTrace
5040: 50 72 6f 63 28 0a 20 09 62 72 65 61 6b 3b 0a 20  Proc(. .break;. 
5050: 0a 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c  .     case TCL_L
5060: 49 4e 4b 5f 55 4c 4f 4e 47 3a 0a 2b 09 69 66 20  INK_ULONG:.+.if 
5070: 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20  (linkPtr->flags 
5080: 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53  & LINK_ALLOC_LAS
5090: 54 29 20 7b 0a 2b 09 20 20 20 20 69 66 20 28 54  T) {.+.    if (T
50a0: 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65  cl_ListObjGetEle
50b0: 6d 65 6e 74 73 28 69 6e 74 65 72 70 2c 76 61 6c  ments(interp,val
50c0: 75 65 4f 62 6a 2c 26 6f 62 6a 63 2c 26 6f 62 6a  ueObj,&objc,&obj
50d0: 76 29 3d 3d 54 43 4c 5f 45 52 52 4f 52 0a 2b 09  v)==TCL_ERROR.+.
50e0: 09 7c 7c 20 6f 62 6a 63 20 21 3d 20 6c 69 6e 6b  .|| objc != link
50f0: 50 74 72 2d 3e 62 79 74 65 73 2f 73 69 7a 65 6f  Ptr->bytes/sizeo
5100: 66 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29  f(unsigned long)
5110: 29 20 7b 0a 2b 09 09 72 65 74 75 72 6e 20 22 77  ) {.+..return "w
5120: 72 6f 6e 67 20 64 69 6d 65 6e 73 69 6f 6e 22 3b  rong dimension";
5130: 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 66  .+.    }.+.    f
5140: 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20 6f 62 6a  or (i=0; i < obj
5150: 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09 69 66 20  c; i++) {.+..if 
5160: 28 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46  (Tcl_GetWideIntF
5170: 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 6f 62 6a 76  romObj(NULL,objv
5180: 5b 69 5d 2c 26 76 61 6c 75 65 57 69 64 65 29 21  [i],&valueWide)!
5190: 3d 20 54 43 4c 5f 4f 4b 0a 2b 09 09 09 7c 7c 20  = TCL_OK.+...|| 
51a0: 76 61 6c 75 65 57 69 64 65 20 3c 20 30 20 7c 7c  valueWide < 0 ||
51b0: 20 76 61 6c 75 65 57 69 64 65 20 3e 20 55 4c 4f   valueWide > ULO
51c0: 4e 47 5f 4d 41 58 29 20 7b 0a 2b 09 20 20 20 20  NG_MAX) {.+.    
51d0: 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61      Tcl_ObjSetVa
51e0: 72 32 28 69 6e 74 65 72 70 2c 20 6c 69 6e 6b 50  r2(interp, linkP
51f0: 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e 55 4c  tr->varName, NUL
5200: 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c 69 6e 6b  L, ObjValue(link
5210: 50 74 72 29 2c 0a 2b 09 09 20 20 20 20 54 43 4c  Ptr),.+..    TCL
5220: 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 2b  _GLOBAL_ONLY);.+
5230: 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5240: 75 72 6e 20 22 76 61 72 69 61 62 6c 65 20 61 72  urn "variable ar
5250: 72 61 79 20 6d 75 73 74 20 68 61 76 65 20 75 6e  ray must have un
5260: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 76 61 6c 75  signed long valu
5270: 65 22 3b 0a 2b 09 09 7d 0a 2b 09 09 6c 69 6e 6b  e";.+..}.+..link
5280: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70  Ptr->lastValue.p
5290: 75 6c 5b 69 5d 20 3d 20 28 75 6e 73 69 67 6e 65  ul[i] = (unsigne
52a0: 64 20 6c 6f 6e 67 29 76 61 6c 75 65 57 69 64 65  d long)valueWide
52b0: 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20  ;.+.    }.+.    
52c0: 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72 2d 3e  memcpy(linkPtr->
52d0: 61 64 64 72 2c 6c 69 6e 6b 50 74 72 2d 3e 6c 61  addr,linkPtr->la
52e0: 73 74 56 61 6c 75 65 2e 70 63 2c 6c 69 6e 6b 50  stValue.pc,linkP
52f0: 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 20 20  tr->bytes);.+.  
5300: 20 20 62 72 65 61 6b 3b 0a 2b 09 7d 0a 20 09 69    break;.+.}. .i
5310: 66 20 28 54 63 6c 5f 47 65 74 57 69 64 65 49 6e  f (Tcl_GetWideIn
5320: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
5330: 20 76 61 6c 75 65 4f 62 6a 2c 20 26 76 61 6c 75   valueObj, &valu
5340: 65 57 69 64 65 29 20 21 3d 20 54 43 4c 5f 4f 4b  eWide) != TCL_OK
5350: 0a 20 09 09 7c 7c 20 76 61 6c 75 65 57 69 64 65  . ..|| valueWide
5360: 20 3c 20 30 20 7c 7c 20 28 54 63 6c 5f 57 69 64   < 0 || (Tcl_Wid
5370: 65 55 49 6e 74 29 20 76 61 6c 75 65 57 69 64 65  eUInt) valueWide
5380: 20 3e 20 55 4c 4f 4e 47 5f 4d 41 58 29 20 7b 0a   > ULONG_MAX) {.
5390: 20 09 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74   .    Tcl_ObjSet
53a0: 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6c 69 6e  Var2(interp, lin
53b0: 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e  kPtr->varName, N
53c0: 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c 69  ULL, ObjValue(li
53d0: 6e 6b 50 74 72 29 2c 0a 40 40 20 2d 35 30 31 2c  nkPtr),.@@ -501,
53e0: 37 20 2b 38 36 31 2c 32 35 20 40 40 20 4c 69 6e  7 +861,25 @@ Lin
53f0: 6b 54 72 61 63 65 50 72 6f 63 28 0a 20 09 2f 2a  kTraceProc(. ./*
5400: 0a 20 09 20 2a 20 46 49 58 4d 45 3a 20 72 65 70  . . * FIXME: rep
5410: 72 65 73 65 6e 74 20 61 73 20 61 20 62 69 67 6e  resent as a bign
5420: 75 6d 2e 0a 20 09 20 2a 2f 0a 2d 09 69 66 20 28  um.. . */.-.if (
5430: 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72  Tcl_GetWideIntFr
5440: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 76 61  omObj(interp, va
5450: 6c 75 65 4f 62 6a 2c 20 26 76 61 6c 75 65 57 69  lueObj, &valueWi
5460: 64 65 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  de) != TCL_OK) {
5470: 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74 72 2d 3e  .+.if (linkPtr->
5480: 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c  flags & LINK_ALL
5490: 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 20 20  OC_LAST) {.+.   
54a0: 20 69 66 20 28 54 63 6c 5f 4c 69 73 74 4f 62 6a   if (Tcl_ListObj
54b0: 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74 65  GetElements(inte
54c0: 72 70 2c 76 61 6c 75 65 4f 62 6a 2c 26 6f 62 6a  rp,valueObj,&obj
54d0: 63 2c 26 6f 62 6a 76 29 3d 3d 54 43 4c 5f 45 52  c,&objv)==TCL_ER
54e0: 52 4f 52 0a 2b 09 09 7c 7c 20 6f 62 6a 63 20 21  ROR.+..|| objc !
54f0: 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73  = linkPtr->bytes
5500: 2f 73 69 7a 65 6f 66 28 54 63 6c 5f 57 69 64 65  /sizeof(Tcl_Wide
5510: 55 49 6e 74 29 29 20 7b 0a 2b 09 09 72 65 74 75  UInt)) {.+..retu
5520: 72 6e 20 22 77 72 6f 6e 67 20 64 69 6d 65 6e 73  rn "wrong dimens
5530: 69 6f 6e 22 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09  ion";.+.    }.+.
5540: 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 20      for (i=0; i 
5550: 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b  < objc; i++) {.+
5560: 09 09 69 66 20 28 54 63 6c 5f 47 65 74 57 69 64  ..if (Tcl_GetWid
5570: 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c  eIntFromObj(NULL
5580: 2c 6f 62 6a 76 5b 69 5d 2c 26 76 61 6c 75 65 57  ,objv[i],&valueW
5590: 69 64 65 29 21 3d 20 54 43 4c 5f 4f 4b 0a 2b 09  ide)!= TCL_OK.+.
55a0: 09 09 7c 7c 20 76 61 6c 75 65 57 69 64 65 20 3c  ..|| valueWide <
55b0: 20 30 29 20 7b 0a 2b 09 20 20 20 20 20 20 20 20   0) {.+.        
55c0: 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69  Tcl_ObjSetVar2(i
55d0: 6e 74 65 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e  nterp, linkPtr->
55e0: 76 61 72 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f  varName, NULL, O
55f0: 62 6a 56 61 6c 75 65 28 6c 69 6e 6b 50 74 72 29  bjValue(linkPtr)
5600: 2c 0a 2b 09 09 20 20 20 20 54 43 4c 5f 47 4c 4f  ,.+..    TCL_GLO
5610: 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 2b 09 20 20 20  BAL_ONLY);.+.   
5620: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5630: 22 76 61 72 69 61 62 6c 65 20 61 72 72 61 79 20  "variable array 
5640: 6d 75 73 74 20 68 61 76 65 20 75 6e 73 69 67 6e  must have unsign
5650: 65 64 20 77 69 64 65 20 69 6e 74 20 76 61 6c 75  ed wide int valu
5660: 65 22 3b 0a 2b 09 09 7d 0a 2b 09 09 6c 69 6e 6b  e";.+..}.+..link
5670: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70  Ptr->lastValue.p
5680: 75 77 5b 69 5d 20 3d 20 28 54 63 6c 5f 57 69 64  uw[i] = (Tcl_Wid
5690: 65 55 49 6e 74 29 76 61 6c 75 65 57 69 64 65 3b  eUInt)valueWide;
56a0: 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 6d  .+.    }.+.    m
56b0: 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72 2d 3e 61  emcpy(linkPtr->a
56c0: 64 64 72 2c 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73  ddr,linkPtr->las
56d0: 74 56 61 6c 75 65 2e 70 63 2c 6c 69 6e 6b 50 74  tValue.pc,linkPt
56e0: 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 20 20 20  r->bytes);.+.   
56f0: 20 62 72 65 61 6b 3b 0a 2b 09 7d 0a 2b 09 69 66   break;.+.}.+.if
5700: 20 28 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74   (Tcl_GetWideInt
5710: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
5720: 76 61 6c 75 65 4f 62 6a 2c 20 26 76 61 6c 75 65  valueObj, &value
5730: 57 69 64 65 29 20 21 3d 20 54 43 4c 5f 4f 4b 0a  Wide) != TCL_OK.
5740: 2b 09 09 7c 7c 20 76 61 6c 75 65 57 69 64 65 20  +..|| valueWide 
5750: 3c 20 30 29 20 7b 0a 20 09 20 20 20 20 54 63 6c  < 0) {. .    Tcl
5760: 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65  _ObjSetVar2(inte
5770: 72 70 2c 20 6c 69 6e 6b 50 74 72 2d 3e 76 61 72  rp, linkPtr->var
5780: 4e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4f 62 6a 56  Name, NULL, ObjV
5790: 61 6c 75 65 28 6c 69 6e 6b 50 74 72 29 2c 0a 20  alue(linkPtr),. 
57a0: 09 09 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c  ..    TCL_GLOBAL
57b0: 5f 4f 4e 4c 59 29 3b 0a 20 09 20 20 20 20 72 65  _ONLY);. .    re
57c0: 74 75 72 6e 20 22 76 61 72 69 61 62 6c 65 20 6d  turn "variable m
57d0: 75 73 74 20 68 61 76 65 20 75 6e 73 69 67 6e 65  ust have unsigne
57e0: 64 20 77 69 64 65 20 69 6e 74 20 76 61 6c 75 65  d wide int value
57f0: 22 3b 0a 40 40 20 2d 35 31 31 2c 36 20 2b 38 38  ";.@@ -511,6 +88
5800: 39 2c 32 33 20 40 40 20 4c 69 6e 6b 54 72 61 63  9,23 @@ LinkTrac
5810: 65 50 72 6f 63 28 0a 20 09 62 72 65 61 6b 3b 0a  eProc(. .break;.
5820: 20 0a 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f   .     case TCL_
5830: 4c 49 4e 4b 5f 46 4c 4f 41 54 3a 0a 2b 09 69 66  LINK_FLOAT:.+.if
5840: 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73   (linkPtr->flags
5850: 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41   & LINK_ALLOC_LA
5860: 53 54 29 20 7b 0a 2b 09 20 20 20 20 69 66 20 28  ST) {.+.    if (
5870: 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c  Tcl_ListObjGetEl
5880: 65 6d 65 6e 74 73 28 69 6e 74 65 72 70 2c 76 61  ements(interp,va
5890: 6c 75 65 4f 62 6a 2c 26 6f 62 6a 63 2c 26 6f 62  lueObj,&objc,&ob
58a0: 6a 76 29 3d 3d 54 43 4c 5f 45 52 52 4f 52 0a 2b  jv)==TCL_ERROR.+
58b0: 09 09 7c 7c 20 6f 62 6a 63 20 21 3d 20 6c 69 6e  ..|| objc != lin
58c0: 6b 50 74 72 2d 3e 62 79 74 65 73 2f 73 69 7a 65  kPtr->bytes/size
58d0: 6f 66 28 66 6c 6f 61 74 29 29 20 7b 0a 2b 09 09  of(float)) {.+..
58e0: 72 65 74 75 72 6e 20 22 77 72 6f 6e 67 20 64 69  return "wrong di
58f0: 6d 65 6e 73 69 6f 6e 22 3b 0a 2b 09 20 20 20 20  mension";.+.    
5900: 7d 0a 2b 09 20 20 20 20 66 6f 72 20 28 69 3d 30  }.+.    for (i=0
5910: 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29  ; i < objc; i++)
5920: 20 7b 0a 2b 09 09 69 66 20 28 54 63 6c 5f 47 65   {.+..if (Tcl_Ge
5930: 74 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28 69  tDoubleFromObj(i
5940: 6e 74 65 72 70 2c 6f 62 6a 76 5b 69 5d 2c 26 76  nterp,objv[i],&v
5950: 61 6c 75 65 44 6f 75 62 6c 65 29 21 3d 20 54 43  alueDouble)!= TC
5960: 4c 5f 4f 4b 0a 2b 09 09 09 7c 7c 20 76 61 6c 75  L_OK.+...|| valu
5970: 65 44 6f 75 62 6c 65 20 3c 20 46 4c 54 5f 4d 49  eDouble < FLT_MI
5980: 4e 20 7c 7c 20 76 61 6c 75 65 44 6f 75 62 6c 65  N || valueDouble
5990: 20 3e 20 46 4c 54 5f 4d 41 58 29 20 7b 0a 2b 09   > FLT_MAX) {.+.
59a0: 20 20 20 20 20 20 20 20 54 63 6c 5f 4f 62 6a 53          Tcl_ObjS
59b0: 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6c  etVar2(interp, l
59c0: 69 6e 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 2c  inkPtr->varName,
59d0: 20 4e 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 28   NULL, ObjValue(
59e0: 6c 69 6e 6b 50 74 72 29 2c 0a 2b 09 09 20 20 20  linkPtr),.+..   
59f0: 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
5a00: 29 3b 0a 2b 09 20 20 20 20 20 20 20 20 20 20 20  );.+.           
5a10: 20 72 65 74 75 72 6e 20 22 76 61 72 69 61 62 6c   return "variabl
5a20: 65 20 61 72 72 61 79 20 6d 75 73 74 20 68 61 76  e array must hav
5a30: 65 20 66 6c 6f 61 74 20 76 61 6c 75 65 22 3b 0a  e float value";.
5a40: 2b 09 09 7d 0a 2b 09 09 6c 69 6e 6b 50 74 72 2d  +..}.+..linkPtr-
5a50: 3e 6c 61 73 74 56 61 6c 75 65 2e 70 66 5b 69 5d  >lastValue.pf[i]
5a60: 20 3d 20 28 66 6c 6f 61 74 29 76 61 6c 75 65 44   = (float)valueD
5a70: 6f 75 62 6c 65 3b 0a 2b 09 20 20 20 20 7d 0a 2b  ouble;.+.    }.+
5a80: 09 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b  .    memcpy(link
5a90: 50 74 72 2d 3e 61 64 64 72 2c 6c 69 6e 6b 50 74  Ptr->addr,linkPt
5aa0: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c  r->lastValue.pc,
5ab0: 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b  linkPtr->bytes);
5ac0: 0a 2b 09 20 20 20 20 62 72 65 61 6b 3b 0a 2b 09  .+.    break;.+.
5ad0: 7d 0a 20 09 69 66 20 28 54 63 6c 5f 47 65 74 44  }. .if (Tcl_GetD
5ae0: 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28 69 6e 74  oubleFromObj(int
5af0: 65 72 70 2c 20 76 61 6c 75 65 4f 62 6a 2c 20 26  erp, valueObj, &
5b00: 76 61 6c 75 65 44 6f 75 62 6c 65 29 20 21 3d 20  valueDouble) != 
5b10: 54 43 4c 5f 4f 4b 0a 20 09 09 7c 7c 20 76 61 6c  TCL_OK. ..|| val
5b20: 75 65 44 6f 75 62 6c 65 20 3c 20 2d 46 4c 54 5f  ueDouble < -FLT_
5b30: 4d 41 58 20 7c 7c 20 76 61 6c 75 65 44 6f 75 62  MAX || valueDoub
5b40: 6c 65 20 3e 20 46 4c 54 5f 4d 41 58 29 20 7b 0a  le > FLT_MAX) {.
5b50: 20 09 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74   .    Tcl_ObjSet
5b60: 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6c 69 6e  Var2(interp, lin
5b70: 6b 50 74 72 2d 3e 76 61 72 4e 61 6d 65 2c 20 4e  kPtr->varName, N
5b80: 55 4c 4c 2c 20 4f 62 6a 56 61 6c 75 65 28 6c 69  ULL, ObjValue(li
5b90: 6e 6b 50 74 72 29 2c 0a 40 40 20 2d 35 32 35 2c  nkPtr),.@@ -525,
5ba0: 31 31 20 2b 39 32 30 2c 33 39 20 40 40 20 4c 69  11 +920,39 @@ Li
5bb0: 6e 6b 54 72 61 63 65 50 72 6f 63 28 0a 20 09 76  nkTraceProc(. .v
5bc0: 61 6c 75 65 20 3d 20 54 63 6c 5f 47 65 74 53 74  alue = Tcl_GetSt
5bd0: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 76 61 6c 75  ringFromObj(valu
5be0: 65 4f 62 6a 2c 20 26 76 61 6c 75 65 4c 65 6e 67  eObj, &valueLeng
5bf0: 74 68 29 3b 0a 20 09 76 61 6c 75 65 4c 65 6e 67  th);. .valueLeng
5c00: 74 68 2b 2b 3b 0a 20 09 70 70 20 3d 20 28 63 68  th++;. .pp = (ch
5c10: 61 72 20 2a 2a 29 20 6c 69 6e 6b 50 74 72 2d 3e  ar **) linkPtr->
5c20: 61 64 64 72 3b 0a 2d 0a 20 09 2a 70 70 20 3d 20  addr;.-. .*pp = 
5c30: 63 6b 72 65 61 6c 6c 6f 63 28 2a 70 70 2c 20 76  ckrealloc(*pp, v
5c40: 61 6c 75 65 4c 65 6e 67 74 68 29 3b 0a 20 09 6d  alueLength);. .m
5c50: 65 6d 63 70 79 28 2a 70 70 2c 20 76 61 6c 75 65  emcpy(*pp, value
5c60: 2c 20 28 75 6e 73 69 67 6e 65 64 29 20 76 61 6c  , (unsigned) val
5c70: 75 65 4c 65 6e 67 74 68 29 3b 0a 20 09 62 72 65  ueLength);. .bre
5c80: 61 6b 3b 0a 20 0a 2b 20 20 20 20 63 61 73 65 20  ak;. .+    case 
5c90: 54 43 4c 5f 4c 49 4e 4b 5f 43 48 41 52 53 3a 0a  TCL_LINK_CHARS:.
5ca0: 2b 09 76 61 6c 75 65 20 3d 20 28 63 68 61 72 20  +.value = (char 
5cb0: 2a 29 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46  *)Tcl_GetStringF
5cc0: 72 6f 6d 4f 62 6a 28 76 61 6c 75 65 4f 62 6a 2c  romObj(valueObj,
5cd0: 20 26 76 61 6c 75 65 4c 65 6e 67 74 68 29 3b 0a   &valueLength);.
5ce0: 2b 09 76 61 6c 75 65 4c 65 6e 67 74 68 2b 2b 3b  +.valueLength++;
5cf0: 2f 2a 20 69 6e 63 6c 75 64 65 20 65 6e 64 20 6f  /* include end o
5d00: 66 20 73 74 72 69 6e 67 20 63 68 61 72 20 2a 2f  f string char */
5d10: 0a 2b 09 69 66 20 28 76 61 6c 75 65 4c 65 6e 67  .+.if (valueLeng
5d20: 74 68 20 3e 20 6c 69 6e 6b 50 74 72 2d 3e 62 79  th > linkPtr->by
5d30: 74 65 73 29 20 7b 0a 2b 09 20 20 20 20 72 65 74  tes) {.+.    ret
5d40: 75 72 6e 20 22 77 72 6f 6e 67 20 73 69 7a 65 20  urn "wrong size 
5d50: 6f 66 20 63 68 61 72 2a 20 76 61 6c 75 65 22 3b  of char* value";
5d60: 0a 2b 09 7d 0a 2b 09 69 66 20 28 6c 69 6e 6b 50  .+.}.+.if (linkP
5d70: 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b  tr->flags & LINK
5d80: 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b  _ALLOC_LAST) {.+
5d90: 09 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b  .    memcpy(link
5da0: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70  Ptr->lastValue.p
5db0: 63 2c 20 76 61 6c 75 65 2c 20 28 75 6e 73 69 67  c, value, (unsig
5dc0: 6e 65 64 29 20 76 61 6c 75 65 4c 65 6e 67 74 68  ned) valueLength
5dd0: 29 3b 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28  );.+.    memcpy(
5de0: 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 2c 20 76  linkPtr->addr, v
5df0: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 29  alue, (unsigned)
5e00: 20 76 61 6c 75 65 4c 65 6e 67 74 68 29 3b 0a 2b   valueLength);.+
5e10: 09 7d 20 65 6c 73 65 20 7b 0a 2b 09 20 20 20 20  .} else {.+.    
5e20: 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c  linkPtr->lastVal
5e30: 75 65 2e 63 20 3d 20 27 5c 30 27 3b 0a 2b 09 20  ue.c = '\0';.+. 
5e40: 20 20 20 4c 69 6e 6b 65 64 56 61 72 28 63 68 61     LinkedVar(cha
5e50: 72 29 20 3d 20 6c 69 6e 6b 50 74 72 2d 3e 6c 61  r) = linkPtr->la
5e60: 73 74 56 61 6c 75 65 2e 63 3b 0a 2b 09 7d 0a 2b  stValue.c;.+.}.+
5e70: 09 62 72 65 61 6b 3b 0a 2b 0a 2b 20 20 20 20 63  .break;.+.+    c
5e80: 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 42 49 4e  ase TCL_LINK_BIN
5e90: 41 52 59 3a 0a 2b 09 76 61 6c 75 65 20 3d 20 28  ARY:.+.value = (
5ea0: 63 68 61 72 20 2a 29 54 63 6c 5f 47 65 74 42 79  char *)Tcl_GetBy
5eb0: 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 76  teArrayFromObj(v
5ec0: 61 6c 75 65 4f 62 6a 2c 20 26 76 61 6c 75 65 4c  alueObj, &valueL
5ed0: 65 6e 67 74 68 29 3b 0a 2b 09 69 66 20 28 76 61  ength);.+.if (va
5ee0: 6c 75 65 4c 65 6e 67 74 68 20 21 3d 20 6c 69 6e  lueLength != lin
5ef0: 6b 50 74 72 2d 3e 62 79 74 65 73 29 20 7b 0a 2b  kPtr->bytes) {.+
5f00: 09 20 20 20 20 72 65 74 75 72 6e 20 22 77 72 6f  .    return "wro
5f10: 6e 67 20 73 69 7a 65 20 6f 66 20 62 69 6e 61 72  ng size of binar
5f20: 79 20 76 61 6c 75 65 22 3b 0a 2b 09 7d 0a 2b 09  y value";.+.}.+.
5f30: 69 66 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61  if (linkPtr->fla
5f40: 67 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f  gs & LINK_ALLOC_
5f50: 4c 41 53 54 29 20 7b 0a 2b 09 20 20 20 20 6d 65  LAST) {.+.    me
5f60: 6d 63 70 79 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61  mcpy(linkPtr->la
5f70: 73 74 56 61 6c 75 65 2e 70 63 2c 20 76 61 6c 75  stValue.pc, valu
5f80: 65 2c 20 28 75 6e 73 69 67 6e 65 64 29 20 76 61  e, (unsigned) va
5f90: 6c 75 65 4c 65 6e 67 74 68 29 3b 0a 2b 09 20 20  lueLength);.+.  
5fa0: 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72    memcpy(linkPtr
5fb0: 2d 3e 61 64 64 72 2c 20 76 61 6c 75 65 2c 20 28  ->addr, value, (
5fc0: 75 6e 73 69 67 6e 65 64 29 20 76 61 6c 75 65 4c  unsigned) valueL
5fd0: 65 6e 67 74 68 29 3b 0a 2b 09 7d 20 65 6c 73 65  ength);.+.} else
5fe0: 20 7b 0a 2b 09 20 20 20 20 6c 69 6e 6b 50 74 72   {.+.    linkPtr
5ff0: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 75 63 20 3d  ->lastValue.uc =
6000: 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29   (unsigned char)
6010: 20 2a 76 61 6c 75 65 3b 0a 2b 09 20 20 20 20 4c   *value;.+.    L
6020: 69 6e 6b 65 64 56 61 72 28 75 6e 73 69 67 6e 65  inkedVar(unsigne
6030: 64 20 63 68 61 72 29 20 3d 20 6c 69 6e 6b 50 74  d char) = linkPt
6040: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 75 63 3b  r->lastValue.uc;
6050: 0a 2b 09 7d 0a 2b 09 62 72 65 61 6b 3b 0a 2b 0a  .+.}.+.break;.+.
6060: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 09       default:. .
6070: 72 65 74 75 72 6e 20 22 69 6e 74 65 72 6e 61 6c  return "internal
6080: 20 65 72 72 6f 72 3a 20 62 61 64 20 6c 69 6e 6b   error: bad link
6090: 65 64 20 76 61 72 69 61 62 6c 65 20 74 79 70 65  ed variable type
60a0: 22 3b 0a 20 20 20 20 20 7d 0a 40 40 20 2d 35 36  ";.     }.@@ -56
60b0: 30 2c 34 39 20 2b 39 38 33 2c 31 36 39 20 40 40  0,49 +983,169 @@
60c0: 20 4f 62 6a 56 61 6c 75 65 28 0a 20 7b 0a 20 20   ObjValue(. {.  
60d0: 20 20 20 63 68 61 72 20 2a 70 3b 0a 20 20 20 20     char *p;.    
60e0: 20 54 63 6c 5f 4f 62 6a 20 2a 72 65 73 75 6c 74   Tcl_Obj *result
60f0: 4f 62 6a 3b 0a 2b 20 20 20 20 69 6e 74 20 6f 62  Obj;.+    int ob
6100: 6a 63 3b 0a 2b 20 20 20 20 73 74 61 74 69 63 20  jc;.+    static 
6110: 54 63 6c 5f 4f 62 6a 20 2a 2a 6f 62 6a 76 20 3d  Tcl_Obj **objv =
6120: 20 4e 55 4c 4c 3b 0a 2b 20 20 20 20 69 6e 74 20   NULL;.+    int 
6130: 69 3b 0a 20 0a 20 20 20 20 20 73 77 69 74 63 68  i;. .     switch
6140: 20 28 6c 69 6e 6b 50 74 72 2d 3e 74 79 70 65 29   (linkPtr->type)
6150: 20 7b 0a 20 20 20 20 20 63 61 73 65 20 54 43 4c   {.     case TCL
6160: 5f 4c 49 4e 4b 5f 49 4e 54 3a 0a 2b 09 69 66 20  _LINK_INT:.+.if 
6170: 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20  (linkPtr->flags 
6180: 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53  & LINK_ALLOC_LAS
6190: 54 29 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70  T) {.+.    memcp
61a0: 79 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56  y(linkPtr->lastV
61b0: 61 6c 75 65 2e 70 63 2c 20 6c 69 6e 6b 50 74 72  alue.pc, linkPtr
61c0: 2d 3e 61 64 64 72 2c 20 6c 69 6e 6b 50 74 72 2d  ->addr, linkPtr-
61d0: 3e 62 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 6f  >bytes);.+.    o
61e0: 62 6a 63 20 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62  bjc = linkPtr->b
61f0: 79 74 65 73 2f 73 69 7a 65 6f 66 28 69 6e 74 29  ytes/sizeof(int)
6200: 3b 0a 2b 09 20 20 20 20 6f 62 6a 76 20 3d 20 28  ;.+.    objv = (
6210: 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20 63 6b 72 65  Tcl_Obj **) ckre
6220: 61 6c 6c 6f 63 28 28 63 68 61 72 20 2a 29 6f 62  alloc((char *)ob
6230: 6a 76 2c 20 6f 62 6a 63 2a 73 69 7a 65 6f 66 28  jv, objc*sizeof(
6240: 54 63 6c 5f 4f 62 6a 2a 29 29 3b 0a 2b 09 20 20  Tcl_Obj*));.+.  
6250: 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20    for (i=0; i < 
6260: 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09  objc; i++) {.+..
6270: 6f 62 6a 76 5b 69 5d 20 3d 20 54 63 6c 5f 4e 65  objv[i] = Tcl_Ne
6280: 77 49 6e 74 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d  wIntObj(linkPtr-
6290: 3e 6c 61 73 74 56 61 6c 75 65 2e 70 69 5b 69 5d  >lastValue.pi[i]
62a0: 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20  );.+.    }.+.   
62b0: 20 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 4c   return Tcl_NewL
62c0: 69 73 74 4f 62 6a 28 6f 62 6a 63 2c 6f 62 6a 76  istObj(objc,objv
62d0: 29 3b 0a 2b 09 7d 0a 20 09 6c 69 6e 6b 50 74 72  );.+.}. .linkPtr
62e0: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 69 20 3d 20  ->lastValue.i = 
62f0: 4c 69 6e 6b 65 64 56 61 72 28 69 6e 74 29 3b 0a  LinkedVar(int);.
6300: 20 09 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77   .return Tcl_New
6310: 49 6e 74 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e  IntObj(linkPtr->
6320: 6c 61 73 74 56 61 6c 75 65 2e 69 29 3b 0a 20 20  lastValue.i);.  
6330: 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b     case TCL_LINK
6340: 5f 57 49 44 45 5f 49 4e 54 3a 0a 2b 09 69 66 20  _WIDE_INT:.+.if 
6350: 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20  (linkPtr->flags 
6360: 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53  & LINK_ALLOC_LAS
6370: 54 29 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70  T) {.+.    memcp
6380: 79 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56  y(linkPtr->lastV
6390: 61 6c 75 65 2e 70 63 2c 20 6c 69 6e 6b 50 74 72  alue.pc, linkPtr
63a0: 2d 3e 61 64 64 72 2c 20 6c 69 6e 6b 50 74 72 2d  ->addr, linkPtr-
63b0: 3e 62 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 6f  >bytes);.+.    o
63c0: 62 6a 63 20 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62  bjc = linkPtr->b
63d0: 79 74 65 73 2f 73 69 7a 65 6f 66 28 54 63 6c 5f  ytes/sizeof(Tcl_
63e0: 57 69 64 65 49 6e 74 29 3b 0a 2b 09 20 20 20 20  WideInt);.+.    
63f0: 6f 62 6a 76 20 3d 20 28 54 63 6c 5f 4f 62 6a 20  objv = (Tcl_Obj 
6400: 2a 2a 29 20 63 6b 72 65 61 6c 6c 6f 63 28 28 63  **) ckrealloc((c
6410: 68 61 72 20 2a 29 6f 62 6a 76 2c 20 6f 62 6a 63  har *)objv, objc
6420: 2a 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a 2a  *sizeof(Tcl_Obj*
6430: 29 29 3b 0a 2b 09 20 20 20 20 66 6f 72 20 28 69  ));.+.    for (i
6440: 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 69 2b  =0; i < objc; i+
6450: 2b 29 20 7b 0a 2b 09 09 6f 62 6a 76 5b 69 5d 20  +) {.+..objv[i] 
6460: 3d 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74  = Tcl_NewWideInt
6470: 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73  Obj(linkPtr->las
6480: 74 56 61 6c 75 65 2e 70 77 5b 69 5d 29 3b 0a 2b  tValue.pw[i]);.+
6490: 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 72 65 74  .    }.+.    ret
64a0: 75 72 6e 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f  urn Tcl_NewListO
64b0: 62 6a 28 6f 62 6a 63 2c 6f 62 6a 76 29 3b 0a 2b  bj(objc,objv);.+
64c0: 09 7d 0a 20 09 6c 69 6e 6b 50 74 72 2d 3e 6c 61  .}. .linkPtr->la
64d0: 73 74 56 61 6c 75 65 2e 77 20 3d 20 4c 69 6e 6b  stValue.w = Link
64e0: 65 64 56 61 72 28 54 63 6c 5f 57 69 64 65 49 6e  edVar(Tcl_WideIn
64f0: 74 29 3b 0a 20 09 72 65 74 75 72 6e 20 54 63 6c  t);. .return Tcl
6500: 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 6c  _NewWideIntObj(l
6510: 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75  inkPtr->lastValu
6520: 65 2e 77 29 3b 0a 20 20 20 20 20 63 61 73 65 20  e.w);.     case 
6530: 54 43 4c 5f 4c 49 4e 4b 5f 44 4f 55 42 4c 45 3a  TCL_LINK_DOUBLE:
6540: 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74 72 2d 3e  .+.if (linkPtr->
6550: 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c  flags & LINK_ALL
6560: 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 20 20  OC_LAST) {.+.   
6570: 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72 2d   memcpy(linkPtr-
6580: 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c 20 6c  >lastValue.pc, l
6590: 69 6e 6b 50 74 72 2d 3e 61 64 64 72 2c 20 6c 69  inkPtr->addr, li
65a0: 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b  nkPtr->bytes);.+
65b0: 09 20 20 20 20 6f 62 6a 63 20 3d 20 6c 69 6e 6b  .    objc = link
65c0: 50 74 72 2d 3e 62 79 74 65 73 2f 73 69 7a 65 6f  Ptr->bytes/sizeo
65d0: 66 28 64 6f 75 62 6c 65 29 3b 0a 2b 09 20 20 20  f(double);.+.   
65e0: 20 6f 62 6a 76 20 3d 20 28 54 63 6c 5f 4f 62 6a   objv = (Tcl_Obj
65f0: 20 2a 2a 29 20 63 6b 72 65 61 6c 6c 6f 63 28 28   **) ckrealloc((
6600: 63 68 61 72 20 2a 29 6f 62 6a 76 2c 20 6f 62 6a  char *)objv, obj
6610: 63 2a 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a  c*sizeof(Tcl_Obj
6620: 2a 29 29 3b 0a 2b 09 20 20 20 20 66 6f 72 20 28  *));.+.    for (
6630: 69 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 69  i=0; i < objc; i
6640: 2b 2b 29 20 7b 0a 2b 09 09 6f 62 6a 76 5b 69 5d  ++) {.+..objv[i]
6650: 20 3d 20 54 63 6c 5f 4e 65 77 44 6f 75 62 6c 65   = Tcl_NewDouble
6660: 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73  Obj(linkPtr->las
6670: 74 56 61 6c 75 65 2e 70 64 5b 69 5d 29 3b 0a 2b  tValue.pd[i]);.+
6680: 09 20 20 20 20 7d 0a 2b 09 20 20 20 20 72 65 74  .    }.+.    ret
6690: 75 72 6e 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f  urn Tcl_NewListO
66a0: 62 6a 28 6f 62 6a 63 2c 6f 62 6a 76 29 3b 0a 2b  bj(objc,objv);.+
66b0: 09 7d 0a 20 09 6c 69 6e 6b 50 74 72 2d 3e 6c 61  .}. .linkPtr->la
66c0: 73 74 56 61 6c 75 65 2e 64 20 3d 20 4c 69 6e 6b  stValue.d = Link
66d0: 65 64 56 61 72 28 64 6f 75 62 6c 65 29 3b 0a 20  edVar(double);. 
66e0: 09 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 44  .return Tcl_NewD
66f0: 6f 75 62 6c 65 4f 62 6a 28 6c 69 6e 6b 50 74 72  oubleObj(linkPtr
6700: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 64 29 3b 0a  ->lastValue.d);.
6710: 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49       case TCL_LI
6720: 4e 4b 5f 42 4f 4f 4c 45 41 4e 3a 0a 2b 09 69 66  NK_BOOLEAN:.+.if
6730: 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73   (linkPtr->flags
6740: 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41   & LINK_ALLOC_LA
6750: 53 54 29 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63  ST) {.+.    memc
6760: 70 79 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74  py(linkPtr->last
6770: 56 61 6c 75 65 2e 70 63 2c 20 6c 69 6e 6b 50 74  Value.pc, linkPt
6780: 72 2d 3e 61 64 64 72 2c 20 6c 69 6e 6b 50 74 72  r->addr, linkPtr
6790: 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 20 20 20 20  ->bytes);.+.    
67a0: 6f 62 6a 63 20 3d 20 6c 69 6e 6b 50 74 72 2d 3e  objc = linkPtr->
67b0: 62 79 74 65 73 2f 73 69 7a 65 6f 66 28 69 6e 74  bytes/sizeof(int
67c0: 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 76 20 3d 20  );.+.    objv = 
67d0: 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20 63 6b 72  (Tcl_Obj **) ckr
67e0: 65 61 6c 6c 6f 63 28 28 63 68 61 72 20 2a 29 6f  ealloc((char *)o
67f0: 62 6a 76 2c 20 6f 62 6a 63 2a 73 69 7a 65 6f 66  bjv, objc*sizeof
6800: 28 54 63 6c 5f 4f 62 6a 2a 29 29 3b 0a 2b 09 20  (Tcl_Obj*));.+. 
6810: 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 20 3c     for (i=0; i <
6820: 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09   objc; i++) {.+.
6830: 09 6f 62 6a 76 5b 69 5d 20 3d 20 54 63 6c 5f 4e  .objv[i] = Tcl_N
6840: 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 6c 69 6e  ewBooleanObj(lin
6850: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e  kPtr->lastValue.
6860: 70 69 5b 69 5d 20 21 3d 20 30 29 3b 0a 2b 09 20  pi[i] != 0);.+. 
6870: 20 20 20 7d 0a 2b 09 20 20 20 20 72 65 74 75 72     }.+.    retur
6880: 6e 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a  n Tcl_NewListObj
6890: 28 6f 62 6a 63 2c 6f 62 6a 76 29 3b 0a 2b 09 7d  (objc,objv);.+.}
68a0: 0a 20 09 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74  . .linkPtr->last
68b0: 56 61 6c 75 65 2e 69 20 3d 20 4c 69 6e 6b 65 64  Value.i = Linked
68c0: 56 61 72 28 69 6e 74 29 3b 0a 20 09 72 65 74 75  Var(int);. .retu
68d0: 72 6e 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61  rn Tcl_NewBoolea
68e0: 6e 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61  nObj(linkPtr->la
68f0: 73 74 56 61 6c 75 65 2e 69 20 21 3d 20 30 29 3b  stValue.i != 0);
6900: 0a 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c  .     case TCL_L
6910: 49 4e 4b 5f 43 48 41 52 3a 0a 2b 09 69 66 20 28  INK_CHAR:.+.if (
6920: 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26  linkPtr->flags &
6930: 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54   LINK_ALLOC_LAST
6940: 29 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79  ) {.+.    memcpy
6950: 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61  (linkPtr->lastVa
6960: 6c 75 65 2e 70 63 2c 20 6c 69 6e 6b 50 74 72 2d  lue.pc, linkPtr-
6970: 3e 61 64 64 72 2c 20 6c 69 6e 6b 50 74 72 2d 3e  >addr, linkPtr->
6980: 62 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 6f 62  bytes);.+.    ob
6990: 6a 63 20 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79  jc = linkPtr->by
69a0: 74 65 73 2f 73 69 7a 65 6f 66 28 63 68 61 72 29  tes/sizeof(char)
69b0: 3b 0a 2b 09 20 20 20 20 6f 62 6a 76 20 3d 20 28  ;.+.    objv = (
69c0: 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20 63 6b 72 65  Tcl_Obj **) ckre
69d0: 61 6c 6c 6f 63 28 28 63 68 61 72 20 2a 29 6f 62  alloc((char *)ob
69e0: 6a 76 2c 20 6f 62 6a 63 2a 73 69 7a 65 6f 66 28  jv, objc*sizeof(
69f0: 54 63 6c 5f 4f 62 6a 2a 29 29 3b 0a 2b 09 20 20  Tcl_Obj*));.+.  
6a00: 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20    for (i=0; i < 
6a10: 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09  objc; i++) {.+..
6a20: 6f 62 6a 76 5b 69 5d 20 3d 20 54 63 6c 5f 4e 65  objv[i] = Tcl_Ne
6a30: 77 49 6e 74 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d  wIntObj(linkPtr-
6a40: 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63 5b 69 5d  >lastValue.pc[i]
6a50: 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20  );.+.    }.+.   
6a60: 20 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 4c   return Tcl_NewL
6a70: 69 73 74 4f 62 6a 28 6f 62 6a 63 2c 6f 62 6a 76  istObj(objc,objv
6a80: 29 3b 0a 2b 09 7d 0a 20 09 6c 69 6e 6b 50 74 72  );.+.}. .linkPtr
6a90: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 63 20 3d 20  ->lastValue.c = 
6aa0: 4c 69 6e 6b 65 64 56 61 72 28 63 68 61 72 29 3b  LinkedVar(char);
6ab0: 0a 20 09 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65  . .return Tcl_Ne
6ac0: 77 49 6e 74 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d  wIntObj(linkPtr-
6ad0: 3e 6c 61 73 74 56 61 6c 75 65 2e 63 29 3b 0a 20  >lastValue.c);. 
6ae0: 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e      case TCL_LIN
6af0: 4b 5f 55 43 48 41 52 3a 0a 2b 09 69 66 20 28 6c  K_UCHAR:.+.if (l
6b00: 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20  inkPtr->flags & 
6b10: 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29  LINK_ALLOC_LAST)
6b20: 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28   {.+.    memcpy(
6b30: 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c  linkPtr->lastVal
6b40: 75 65 2e 70 63 2c 20 6c 69 6e 6b 50 74 72 2d 3e  ue.pc, linkPtr->
6b50: 61 64 64 72 2c 20 6c 69 6e 6b 50 74 72 2d 3e 62  addr, linkPtr->b
6b60: 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 6f 62 6a  ytes);.+.    obj
6b70: 63 20 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74  c = linkPtr->byt
6b80: 65 73 2f 73 69 7a 65 6f 66 28 75 6e 73 69 67 6e  es/sizeof(unsign
6b90: 65 64 20 63 68 61 72 29 3b 0a 2b 09 20 20 20 20  ed char);.+.    
6ba0: 6f 62 6a 76 20 3d 20 28 54 63 6c 5f 4f 62 6a 20  objv = (Tcl_Obj 
6bb0: 2a 2a 29 20 63 6b 72 65 61 6c 6c 6f 63 28 28 63  **) ckrealloc((c
6bc0: 68 61 72 20 2a 29 6f 62 6a 76 2c 20 6f 62 6a 63  har *)objv, objc
6bd0: 2a 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a 2a  *sizeof(Tcl_Obj*
6be0: 29 29 3b 0a 2b 09 20 20 20 20 66 6f 72 20 28 69  ));.+.    for (i
6bf0: 3d 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 69 2b  =0; i < objc; i+
6c00: 2b 29 20 7b 0a 2b 09 09 6f 62 6a 76 5b 69 5d 20  +) {.+..objv[i] 
6c10: 3d 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  = Tcl_NewIntObj(
6c20: 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c  linkPtr->lastVal
6c30: 75 65 2e 70 75 63 5b 69 5d 29 3b 0a 2b 09 20 20  ue.puc[i]);.+.  
6c40: 20 20 7d 0a 2b 09 20 20 20 20 72 65 74 75 72 6e    }.+.    return
6c50: 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a 28   Tcl_NewListObj(
6c60: 6f 62 6a 63 2c 6f 62 6a 76 29 3b 0a 2b 09 7d 0a  objc,objv);.+.}.
6c70: 20 09 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56   .linkPtr->lastV
6c80: 61 6c 75 65 2e 75 63 20 3d 20 4c 69 6e 6b 65 64  alue.uc = Linked
6c90: 56 61 72 28 75 6e 73 69 67 6e 65 64 20 63 68 61  Var(unsigned cha
6ca0: 72 29 3b 0a 20 09 72 65 74 75 72 6e 20 54 63 6c  r);. .return Tcl
6cb0: 5f 4e 65 77 49 6e 74 4f 62 6a 28 6c 69 6e 6b 50  _NewIntObj(linkP
6cc0: 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 75 63  tr->lastValue.uc
6cd0: 29 3b 0a 20 20 20 20 20 63 61 73 65 20 54 43 4c  );.     case TCL
6ce0: 5f 4c 49 4e 4b 5f 53 48 4f 52 54 3a 0a 2b 09 69  _LINK_SHORT:.+.i
6cf0: 66 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67  f (linkPtr->flag
6d00: 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c  s & LINK_ALLOC_L
6d10: 41 53 54 29 20 7b 0a 2b 09 20 20 20 20 6d 65 6d  AST) {.+.    mem
6d20: 63 70 79 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73  cpy(linkPtr->las
6d30: 74 56 61 6c 75 65 2e 70 63 2c 20 6c 69 6e 6b 50  tValue.pc, linkP
6d40: 74 72 2d 3e 61 64 64 72 2c 20 6c 69 6e 6b 50 74  tr->addr, linkPt
6d50: 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 20 20 20  r->bytes);.+.   
6d60: 20 6f 62 6a 63 20 3d 20 6c 69 6e 6b 50 74 72 2d   objc = linkPtr-
6d70: 3e 62 79 74 65 73 2f 73 69 7a 65 6f 66 28 73 68  >bytes/sizeof(sh
6d80: 6f 72 74 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 76  ort);.+.    objv
6d90: 20 3d 20 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20   = (Tcl_Obj **) 
6da0: 63 6b 72 65 61 6c 6c 6f 63 28 28 63 68 61 72 20  ckrealloc((char 
6db0: 2a 29 6f 62 6a 76 2c 20 6f 62 6a 63 2a 73 69 7a  *)objv, objc*siz
6dc0: 65 6f 66 28 54 63 6c 5f 4f 62 6a 2a 29 29 3b 0a  eof(Tcl_Obj*));.
6dd0: 2b 09 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20  +.    for (i=0; 
6de0: 69 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b  i < objc; i++) {
6df0: 0a 2b 09 09 6f 62 6a 76 5b 69 5d 20 3d 20 54 63  .+..objv[i] = Tc
6e00: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6c 69 6e 6b  l_NewIntObj(link
6e10: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70  Ptr->lastValue.p
6e20: 73 5b 69 5d 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b  s[i]);.+.    }.+
6e30: 09 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c 5f  .    return Tcl_
6e40: 4e 65 77 4c 69 73 74 4f 62 6a 28 6f 62 6a 63 2c  NewListObj(objc,
6e50: 6f 62 6a 76 29 3b 0a 2b 09 7d 0a 20 09 6c 69 6e  objv);.+.}. .lin
6e60: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e  kPtr->lastValue.
6e70: 73 20 3d 20 4c 69 6e 6b 65 64 56 61 72 28 73 68  s = LinkedVar(sh
6e80: 6f 72 74 29 3b 0a 20 09 72 65 74 75 72 6e 20 54  ort);. .return T
6e90: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6c 69 6e  cl_NewIntObj(lin
6ea0: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e  kPtr->lastValue.
6eb0: 73 29 3b 0a 20 20 20 20 20 63 61 73 65 20 54 43  s);.     case TC
6ec0: 4c 5f 4c 49 4e 4b 5f 55 53 48 4f 52 54 3a 0a 2b  L_LINK_USHORT:.+
6ed0: 09 69 66 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c  .if (linkPtr->fl
6ee0: 61 67 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43  ags & LINK_ALLOC
6ef0: 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 20 20 20 6d  _LAST) {.+.    m
6f00: 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72 2d 3e 6c  emcpy(linkPtr->l
6f10: 61 73 74 56 61 6c 75 65 2e 70 63 2c 20 6c 69 6e  astValue.pc, lin
6f20: 6b 50 74 72 2d 3e 61 64 64 72 2c 20 6c 69 6e 6b  kPtr->addr, link
6f30: 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09 20  Ptr->bytes);.+. 
6f40: 20 20 20 6f 62 6a 63 20 3d 20 6c 69 6e 6b 50 74     objc = linkPt
6f50: 72 2d 3e 62 79 74 65 73 2f 73 69 7a 65 6f 66 28  r->bytes/sizeof(
6f60: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 29 3b  unsigned short);
6f70: 0a 2b 09 20 20 20 20 6f 62 6a 76 20 3d 20 28 54  .+.    objv = (T
6f80: 63 6c 5f 4f 62 6a 20 2a 2a 29 20 63 6b 72 65 61  cl_Obj **) ckrea
6f90: 6c 6c 6f 63 28 28 63 68 61 72 20 2a 29 6f 62 6a  lloc((char *)obj
6fa0: 76 2c 20 6f 62 6a 63 2a 73 69 7a 65 6f 66 28 54  v, objc*sizeof(T
6fb0: 63 6c 5f 4f 62 6a 2a 29 29 3b 0a 2b 09 20 20 20  cl_Obj*));.+.   
6fc0: 20 66 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20 6f   for (i=0; i < o
6fd0: 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09 6f  bjc; i++) {.+..o
6fe0: 62 6a 76 5b 69 5d 20 3d 20 54 63 6c 5f 4e 65 77  bjv[i] = Tcl_New
6ff0: 49 6e 74 4f 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e  IntObj(linkPtr->
7000: 6c 61 73 74 56 61 6c 75 65 2e 70 75 73 5b 69 5d  lastValue.pus[i]
7010: 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20 20  );.+.    }.+.   
7020: 20 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 4c   return Tcl_NewL
7030: 69 73 74 4f 62 6a 28 6f 62 6a 63 2c 6f 62 6a 76  istObj(objc,objv
7040: 29 3b 0a 2b 09 7d 0a 20 09 6c 69 6e 6b 50 74 72  );.+.}. .linkPtr
7050: 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 75 73 20 3d  ->lastValue.us =
7060: 20 4c 69 6e 6b 65 64 56 61 72 28 75 6e 73 69 67   LinkedVar(unsig
7070: 6e 65 64 20 73 68 6f 72 74 29 3b 0a 20 09 72 65  ned short);. .re
7080: 74 75 72 6e 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  turn Tcl_NewIntO
7090: 62 6a 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74  bj(linkPtr->last
70a0: 56 61 6c 75 65 2e 75 73 29 3b 0a 20 20 20 20 20  Value.us);.     
70b0: 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b 5f 55 49  case TCL_LINK_UI
70c0: 4e 54 3a 0a 2b 09 69 66 20 28 6c 69 6e 6b 50 74  NT:.+.if (linkPt
70d0: 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e 4b 5f  r->flags & LINK_
70e0: 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a 2b 09  ALLOC_LAST) {.+.
70f0: 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e 6b 50      memcpy(linkP
7100: 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 63  tr->lastValue.pc
7110: 2c 20 6c 69 6e 6b 50 74 72 2d 3e 61 64 64 72 2c  , linkPtr->addr,
7120: 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 29   linkPtr->bytes)
7130: 3b 0a 2b 09 20 20 20 20 6f 62 6a 63 20 3d 20 6c  ;.+.    objc = l
7140: 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 2f 73 69  inkPtr->bytes/si
7150: 7a 65 6f 66 28 75 6e 73 69 67 6e 65 64 20 69 6e  zeof(unsigned in
7160: 74 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 76 20 3d  t);.+.    objv =
7170: 20 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20 63 6b   (Tcl_Obj **) ck
7180: 72 65 61 6c 6c 6f 63 28 28 63 68 61 72 20 2a 29  realloc((char *)
7190: 6f 62 6a 76 2c 20 6f 62 6a 63 2a 73 69 7a 65 6f  objv, objc*sizeo
71a0: 66 28 54 63 6c 5f 4f 62 6a 2a 29 29 3b 0a 2b 09  f(Tcl_Obj*));.+.
71b0: 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 20      for (i=0; i 
71c0: 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b  < objc; i++) {.+
71d0: 09 09 6f 62 6a 76 5b 69 5d 20 3d 20 54 63 6c 5f  ..objv[i] = Tcl_
71e0: 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 6c 69  NewWideIntObj(li
71f0: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65  nkPtr->lastValue
7200: 2e 70 75 69 5b 69 5d 29 3b 0a 2b 09 20 20 20 20  .pui[i]);.+.    
7210: 7d 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54  }.+.    return T
7220: 63 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a 28 6f 62  cl_NewListObj(ob
7230: 6a 63 2c 6f 62 6a 76 29 3b 0a 2b 09 7d 0a 20 09  jc,objv);.+.}. .
7240: 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c  linkPtr->lastVal
7250: 75 65 2e 75 69 20 3d 20 4c 69 6e 6b 65 64 56 61  ue.ui = LinkedVa
7260: 72 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  r(unsigned int);
7270: 0a 20 09 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65  . .return Tcl_Ne
7280: 77 57 69 64 65 49 6e 74 4f 62 6a 28 28 54 63 6c  wWideIntObj((Tcl
7290: 5f 57 69 64 65 49 6e 74 29 20 6c 69 6e 6b 50 74  _WideInt) linkPt
72a0: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 75 69 29  r->lastValue.ui)
72b0: 3b 0a 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f  ;.     case TCL_
72c0: 4c 49 4e 4b 5f 4c 4f 4e 47 3a 0a 2b 09 69 66 20  LINK_LONG:.+.if 
72d0: 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20  (linkPtr->flags 
72e0: 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53  & LINK_ALLOC_LAS
72f0: 54 29 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70  T) {.+.    memcp
7300: 79 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56  y(linkPtr->lastV
7310: 61 6c 75 65 2e 70 63 2c 20 6c 69 6e 6b 50 74 72  alue.pc, linkPtr
7320: 2d 3e 61 64 64 72 2c 20 6c 69 6e 6b 50 74 72 2d  ->addr, linkPtr-
7330: 3e 62 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 6f  >bytes);.+.    o
7340: 62 6a 63 20 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62  bjc = linkPtr->b
7350: 79 74 65 73 2f 73 69 7a 65 6f 66 28 6c 6f 6e 67  ytes/sizeof(long
7360: 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 76 20 3d 20  );.+.    objv = 
7370: 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20 63 6b 72  (Tcl_Obj **) ckr
7380: 65 61 6c 6c 6f 63 28 28 63 68 61 72 20 2a 29 6f  ealloc((char *)o
7390: 62 6a 76 2c 20 6f 62 6a 63 2a 73 69 7a 65 6f 66  bjv, objc*sizeof
73a0: 28 54 63 6c 5f 4f 62 6a 2a 29 29 3b 0a 2b 09 20  (Tcl_Obj*));.+. 
73b0: 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 20 3c     for (i=0; i <
73c0: 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09   objc; i++) {.+.
73d0: 09 6f 62 6a 76 5b 69 5d 20 3d 20 54 63 6c 5f 4e  .objv[i] = Tcl_N
73e0: 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 6c 69 6e  ewWideIntObj(lin
73f0: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e  kPtr->lastValue.
7400: 70 6c 5b 69 5d 29 3b 0a 2b 09 20 20 20 20 7d 0a  pl[i]);.+.    }.
7410: 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c  +.    return Tcl
7420: 5f 4e 65 77 4c 69 73 74 4f 62 6a 28 6f 62 6a 63  _NewListObj(objc
7430: 2c 6f 62 6a 76 29 3b 0a 2b 09 7d 0a 20 09 6c 69  ,objv);.+.}. .li
7440: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65  nkPtr->lastValue
7450: 2e 6c 20 3d 20 4c 69 6e 6b 65 64 56 61 72 28 6c  .l = LinkedVar(l
7460: 6f 6e 67 29 3b 0a 20 09 72 65 74 75 72 6e 20 54  ong);. .return T
7470: 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a  cl_NewWideIntObj
7480: 28 28 54 63 6c 5f 57 69 64 65 49 6e 74 29 20 6c  ((Tcl_WideInt) l
7490: 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75  inkPtr->lastValu
74a0: 65 2e 6c 29 3b 0a 20 20 20 20 20 63 61 73 65 20  e.l);.     case 
74b0: 54 43 4c 5f 4c 49 4e 4b 5f 55 4c 4f 4e 47 3a 0a  TCL_LINK_ULONG:.
74c0: 2b 09 69 66 20 28 6c 69 6e 6b 50 74 72 2d 3e 66  +.if (linkPtr->f
74d0: 6c 61 67 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f  lags & LINK_ALLO
74e0: 43 5f 4c 41 53 54 29 20 7b 0a 2b 09 20 20 20 20  C_LAST) {.+.    
74f0: 6d 65 6d 63 70 79 28 6c 69 6e 6b 50 74 72 2d 3e  memcpy(linkPtr->
7500: 6c 61 73 74 56 61 6c 75 65 2e 70 63 2c 20 6c 69  lastValue.pc, li
7510: 6e 6b 50 74 72 2d 3e 61 64 64 72 2c 20 6c 69 6e  nkPtr->addr, lin
7520: 6b 50 74 72 2d 3e 62 79 74 65 73 29 3b 0a 2b 09  kPtr->bytes);.+.
7530: 20 20 20 20 6f 62 6a 63 20 3d 20 6c 69 6e 6b 50      objc = linkP
7540: 74 72 2d 3e 62 79 74 65 73 2f 73 69 7a 65 6f 66  tr->bytes/sizeof
7550: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 3b  (unsigned long);
7560: 0a 2b 09 20 20 20 20 6f 62 6a 76 20 3d 20 28 54  .+.    objv = (T
7570: 63 6c 5f 4f 62 6a 20 2a 2a 29 20 63 6b 72 65 61  cl_Obj **) ckrea
7580: 6c 6c 6f 63 28 28 63 68 61 72 20 2a 29 6f 62 6a  lloc((char *)obj
7590: 76 2c 20 6f 62 6a 63 2a 73 69 7a 65 6f 66 28 54  v, objc*sizeof(T
75a0: 63 6c 5f 4f 62 6a 2a 29 29 3b 0a 2b 09 20 20 20  cl_Obj*));.+.   
75b0: 20 66 6f 72 20 28 69 3d 30 3b 20 69 20 3c 20 6f   for (i=0; i < o
75c0: 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09 09 6f  bjc; i++) {.+..o
75d0: 62 6a 76 5b 69 5d 20 3d 20 54 63 6c 5f 4e 65 77  bjv[i] = Tcl_New
75e0: 57 69 64 65 49 6e 74 4f 62 6a 28 6c 69 6e 6b 50  WideIntObj(linkP
75f0: 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70 75  tr->lastValue.pu
7600: 6c 5b 69 5d 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b  l[i]);.+.    }.+
7610: 09 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c 5f  .    return Tcl_
7620: 4e 65 77 4c 69 73 74 4f 62 6a 28 6f 62 6a 63 2c  NewListObj(objc,
7630: 6f 62 6a 76 29 3b 0a 2b 09 7d 0a 20 09 6c 69 6e  objv);.+.}. .lin
7640: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e  kPtr->lastValue.
7650: 75 6c 20 3d 20 4c 69 6e 6b 65 64 56 61 72 28 75  ul = LinkedVar(u
7660: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 3b 0a 20  nsigned long);. 
7670: 09 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 57  .return Tcl_NewW
7680: 69 64 65 49 6e 74 4f 62 6a 28 28 54 63 6c 5f 57  ideIntObj((Tcl_W
7690: 69 64 65 49 6e 74 29 20 6c 69 6e 6b 50 74 72 2d  ideInt) linkPtr-
76a0: 3e 6c 61 73 74 56 61 6c 75 65 2e 75 6c 29 3b 0a  >lastValue.ul);.
76b0: 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49       case TCL_LI
76c0: 4e 4b 5f 46 4c 4f 41 54 3a 0a 2b 09 69 66 20 28  NK_FLOAT:.+.if (
76d0: 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26  linkPtr->flags &
76e0: 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54   LINK_ALLOC_LAST
76f0: 29 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79  ) {.+.    memcpy
7700: 28 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61  (linkPtr->lastVa
7710: 6c 75 65 2e 70 63 2c 20 6c 69 6e 6b 50 74 72 2d  lue.pc, linkPtr-
7720: 3e 61 64 64 72 2c 20 6c 69 6e 6b 50 74 72 2d 3e  >addr, linkPtr->
7730: 62 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 6f 62  bytes);.+.    ob
7740: 6a 63 20 3d 20 6c 69 6e 6b 50 74 72 2d 3e 62 79  jc = linkPtr->by
7750: 74 65 73 2f 73 69 7a 65 6f 66 28 66 6c 6f 61 74  tes/sizeof(float
7760: 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 76 20 3d 20  );.+.    objv = 
7770: 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20 63 6b 72  (Tcl_Obj **) ckr
7780: 65 61 6c 6c 6f 63 28 28 63 68 61 72 20 2a 29 6f  ealloc((char *)o
7790: 62 6a 76 2c 20 6f 62 6a 63 2a 73 69 7a 65 6f 66  bjv, objc*sizeof
77a0: 28 54 63 6c 5f 4f 62 6a 2a 29 29 3b 0a 2b 09 20  (Tcl_Obj*));.+. 
77b0: 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 20 3c     for (i=0; i <
77c0: 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b 0a 2b 09   objc; i++) {.+.
77d0: 09 6f 62 6a 76 5b 69 5d 20 3d 20 54 63 6c 5f 4e  .objv[i] = Tcl_N
77e0: 65 77 44 6f 75 62 6c 65 4f 62 6a 28 6c 69 6e 6b  ewDoubleObj(link
77f0: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70  Ptr->lastValue.p
7800: 66 5b 69 5d 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b  f[i]);.+.    }.+
7810: 09 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c 5f  .    return Tcl_
7820: 4e 65 77 4c 69 73 74 4f 62 6a 28 6f 62 6a 63 2c  NewListObj(objc,
7830: 6f 62 6a 76 29 3b 0a 2b 09 7d 0a 20 09 6c 69 6e  objv);.+.}. .lin
7840: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e  kPtr->lastValue.
7850: 66 20 3d 20 4c 69 6e 6b 65 64 56 61 72 28 66 6c  f = LinkedVar(fl
7860: 6f 61 74 29 3b 0a 20 09 72 65 74 75 72 6e 20 54  oat);. .return T
7870: 63 6c 5f 4e 65 77 44 6f 75 62 6c 65 4f 62 6a 28  cl_NewDoubleObj(
7880: 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c  linkPtr->lastVal
7890: 75 65 2e 66 29 3b 0a 20 20 20 20 20 63 61 73 65  ue.f);.     case
78a0: 20 54 43 4c 5f 4c 49 4e 4b 5f 57 49 44 45 5f 55   TCL_LINK_WIDE_U
78b0: 49 4e 54 3a 0a 2d 09 6c 69 6e 6b 50 74 72 2d 3e  INT:.-.linkPtr->
78c0: 6c 61 73 74 56 61 6c 75 65 2e 75 77 20 3d 20 4c  lastValue.uw = L
78d0: 69 6e 6b 65 64 56 61 72 28 54 63 6c 5f 57 69 64  inkedVar(Tcl_Wid
78e0: 65 55 49 6e 74 29 3b 0a 20 09 2f 2a 0a 20 09 20  eUInt);. ./*. . 
78f0: 2a 20 46 49 58 4d 45 3a 20 72 65 70 72 65 73 65  * FIXME: represe
7900: 6e 74 20 61 73 20 61 20 62 69 67 6e 75 6d 2e 0a  nt as a bignum..
7910: 20 09 20 2a 2f 0a 2b 09 69 66 20 28 6c 69 6e 6b   . */.+.if (link
7920: 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c 49 4e  Ptr->flags & LIN
7930: 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20 7b 0a  K_ALLOC_LAST) {.
7940: 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 6c 69 6e  +.    memcpy(lin
7950: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e  kPtr->lastValue.
7960: 70 63 2c 20 6c 69 6e 6b 50 74 72 2d 3e 61 64 64  pc, linkPtr->add
7970: 72 2c 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65  r, linkPtr->byte
7980: 73 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 63 20 3d  s);.+.    objc =
7990: 20 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73 2f   linkPtr->bytes/
79a0: 73 69 7a 65 6f 66 28 54 63 6c 5f 57 69 64 65 55  sizeof(Tcl_WideU
79b0: 49 6e 74 29 3b 0a 2b 09 20 20 20 20 6f 62 6a 76  Int);.+.    objv
79c0: 20 3d 20 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20   = (Tcl_Obj **) 
79d0: 63 6b 72 65 61 6c 6c 6f 63 28 28 63 68 61 72 20  ckrealloc((char 
79e0: 2a 29 6f 62 6a 76 2c 20 6f 62 6a 63 2a 73 69 7a  *)objv, objc*siz
79f0: 65 6f 66 28 54 63 6c 5f 4f 62 6a 2a 29 29 3b 0a  eof(Tcl_Obj*));.
7a00: 2b 09 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20  +.    for (i=0; 
7a10: 69 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b  i < objc; i++) {
7a20: 0a 2b 09 09 6f 62 6a 76 5b 69 5d 20 3d 20 54 63  .+..objv[i] = Tc
7a30: 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28  l_NewWideIntObj(
7a40: 28 54 63 6c 5f 57 69 64 65 49 6e 74 29 20 6c 69  (Tcl_WideInt) li
7a50: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65  nkPtr->lastValue
7a60: 2e 70 75 77 5b 69 5d 29 3b 0a 2b 09 20 20 20 20  .puw[i]);.+.    
7a70: 7d 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54  }.+.    return T
7a80: 63 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a 28 6f 62  cl_NewListObj(ob
7a90: 6a 63 2c 6f 62 6a 76 29 3b 0a 2b 09 7d 0a 2b 09  jc,objv);.+.}.+.
7aa0: 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c  linkPtr->lastVal
7ab0: 75 65 2e 75 77 20 3d 20 4c 69 6e 6b 65 64 56 61  ue.uw = LinkedVa
7ac0: 72 28 54 63 6c 5f 57 69 64 65 55 49 6e 74 29 3b  r(Tcl_WideUInt);
7ad0: 0a 20 09 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65  . .return Tcl_Ne
7ae0: 77 57 69 64 65 49 6e 74 4f 62 6a 28 28 54 63 6c  wWideIntObj((Tcl
7af0: 5f 57 69 64 65 49 6e 74 29 20 6c 69 6e 6b 50 74  _WideInt) linkPt
7b00: 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 75 77 29  r->lastValue.uw)
7b10: 3b 0a 20 20 20 20 20 63 61 73 65 20 54 43 4c 5f  ;.     case TCL_
7b20: 4c 49 4e 4b 5f 53 54 52 49 4e 47 3a 0a 20 09 70  LINK_STRING:. .p
7b30: 20 3d 20 4c 69 6e 6b 65 64 56 61 72 28 63 68 61   = LinkedVar(cha
7b40: 72 20 2a 29 3b 0a 40 40 20 2d 36 31 32 2c 36 20  r *);.@@ -612,6 
7b50: 2b 31 31 35 35 2c 32 33 20 40 40 20 4f 62 6a 56  +1155,23 @@ ObjV
7b60: 61 6c 75 65 28 0a 20 09 7d 0a 20 09 72 65 74 75  alue(. .}. .retu
7b70: 72 6e 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  rn Tcl_NewString
7b80: 4f 62 6a 28 70 2c 20 2d 31 29 3b 0a 20 0a 2b 20  Obj(p, -1);. .+ 
7b90: 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b     case TCL_LINK
7ba0: 5f 43 48 41 52 53 3a 0a 2b 09 69 66 20 28 6c 69  _CHARS:.+.if (li
7bb0: 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 4c  nkPtr->flags & L
7bc0: 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29 20  INK_ALLOC_LAST) 
7bd0: 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28 6c  {.+.    memcpy(l
7be0: 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75  inkPtr->lastValu
7bf0: 65 2e 70 63 2c 20 6c 69 6e 6b 50 74 72 2d 3e 61  e.pc, linkPtr->a
7c00: 64 64 72 2c 20 6c 69 6e 6b 50 74 72 2d 3e 62 79  ddr, linkPtr->by
7c10: 74 65 73 29 3b 0a 2b 09 20 20 20 20 6c 69 6e 6b  tes);.+.    link
7c20: 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 70  Ptr->lastValue.p
7c30: 63 5b 6c 69 6e 6b 50 74 72 2d 3e 62 79 74 65 73  c[linkPtr->bytes
7c40: 2d 31 5d 20 3d 20 27 5c 30 27 3b 2f 2a 20 74 61  -1] = '\0';/* ta
7c50: 6b 65 20 63 61 72 65 20 6f 66 20 70 72 6f 70 65  ke care of prope
7c60: 72 20 73 74 72 69 6e 67 20 65 6e 64 20 2a 2f 0a  r string end */.
7c70: 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c  +.    return Tcl
7c80: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 6c 69  _NewStringObj(li
7c90: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65  nkPtr->lastValue
7ca0: 2e 70 63 2c 6c 69 6e 6b 50 74 72 2d 3e 62 79 74  .pc,linkPtr->byt
7cb0: 65 73 29 3b 0a 2b 09 7d 0a 2b 09 6c 69 6e 6b 50  es);.+.}.+.linkP
7cc0: 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e 63 20  tr->lastValue.c 
7cd0: 3d 20 27 5c 30 27 3b 0a 2b 09 72 65 74 75 72 6e  = '\0';.+.return
7ce0: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
7cf0: 6a 28 26 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74  j(&linkPtr->last
7d00: 56 61 6c 75 65 2e 63 2c 31 29 3b 0a 2b 0a 2b 20  Value.c,1);.+.+ 
7d10: 20 20 20 63 61 73 65 20 54 43 4c 5f 4c 49 4e 4b     case TCL_LINK
7d20: 5f 42 49 4e 41 52 59 3a 0a 2b 09 69 66 20 28 6c  _BINARY:.+.if (l
7d30: 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20  inkPtr->flags & 
7d40: 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 4c 41 53 54 29  LINK_ALLOC_LAST)
7d50: 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70 79 28   {.+.    memcpy(
7d60: 6c 69 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c  linkPtr->lastVal
7d70: 75 65 2e 70 63 2c 20 6c 69 6e 6b 50 74 72 2d 3e  ue.pc, linkPtr->
7d80: 61 64 64 72 2c 20 6c 69 6e 6b 50 74 72 2d 3e 62  addr, linkPtr->b
7d90: 79 74 65 73 29 3b 0a 2b 09 20 20 20 20 72 65 74  ytes);.+.    ret
7da0: 75 72 6e 20 54 63 6c 5f 4e 65 77 42 79 74 65 41  urn Tcl_NewByteA
7db0: 72 72 61 79 4f 62 6a 28 28 75 6e 73 69 67 6e 65  rrayObj((unsigne
7dc0: 64 20 63 68 61 72 20 2a 29 6c 69 6e 6b 50 74 72  d char *)linkPtr
7dd0: 2d 3e 61 64 64 72 2c 6c 69 6e 6b 50 74 72 2d 3e  ->addr,linkPtr->
7de0: 62 79 74 65 73 29 3b 0a 2b 09 7d 0a 2b 09 6c 69  bytes);.+.}.+.li
7df0: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65  nkPtr->lastValue
7e00: 2e 75 63 20 3d 20 4c 69 6e 6b 65 64 56 61 72 28  .uc = LinkedVar(
7e10: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 3b 0a  unsigned char);.
7e20: 2b 09 72 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77  +.return Tcl_New
7e30: 42 79 74 65 41 72 72 61 79 4f 62 6a 28 26 6c 69  ByteArrayObj(&li
7e40: 6e 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65  nkPtr->lastValue
7e50: 2e 75 63 2c 31 29 3b 0a 2b 0a 20 20 20 20 20 2f  .uc,1);.+.     /
7e60: 2a 0a 20 20 20 20 20 20 2a 20 54 68 69 73 20 63  *.      * This c
7e70: 6f 64 65 20 6f 6e 6c 79 20 67 65 74 73 20 65 78  ode only gets ex
7e80: 65 63 75 74 65 64 20 69 66 20 74 68 65 20 6c 69  ecuted if the li
7e90: 6e 6b 20 74 79 70 65 20 69 73 20 75 6e 6b 6e 6f  nk type is unkno
7ea0: 77 6e 20 28 73 68 6f 75 6c 64 6e 27 74 0a 20 20  wn (shouldn't.  
7eb0: 20 20 20 20 2a 20 65 76 65 72 20 68 61 70 70 65      * ever happe
7ec0: 6e 29 2e 0a 40 40 20 2d 36 32 34 2c 36 20 2b 31  n)..@@ -624,6 +1
7ed0: 31 38 34 2c 33 31 20 40 40 20 4f 62 6a 56 61 6c  184,31 @@ ObjVal
7ee0: 75 65 28 0a 20 7d 0a 20 0c 0a 20 2f 2a 0a 2b 20  ue(. }. .. /*.+ 
7ef0: 2a 2d 2d 2d 2d 2d 2d 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 0a 2b 20 2a 0a 2b 20 2a 20  -------.+ *.+ * 
7f40: 4c 69 6e 6b 46 72 65 65 20 2d 2d 0a 2b 20 2a 0a  LinkFree --.+ *.
7f50: 2b 20 2a 09 46 72 65 65 27 73 20 61 6c 6c 6f 63  + *.Free's alloc
7f60: 61 74 65 64 20 73 70 61 63 65 20 6f 66 20 67 69  ated space of gi
7f70: 76 65 6e 20 6c 69 6e 6b 20 61 6e 64 20 6c 69 6e  ven link and lin
7f80: 6b 20 73 74 72 75 63 74 75 72 65 2e 0a 2b 20 2a  k structure..+ *
7f90: 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20  .+ * Results:.+ 
7fa0: 2a 09 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b 20 2a 20  *.None..+ *.+ * 
7fb0: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2b 20  Side effects:.+ 
7fc0: 2a 09 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b 20 2a 2d  *.None..+ *.+ *-
7fd0: 2d 2d 2d 2d 2d 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 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74  -----.+ */.+.+st
8020: 61 74 69 63 20 76 6f 69 64 0a 2b 4c 69 6e 6b 46  atic void.+LinkF
8030: 72 65 65 28 0a 2b 20 20 20 20 4c 69 6e 6b 20 2a  ree(.+    Link *
8040: 6c 69 6e 6b 50 74 72 29 09 09 2f 2a 20 53 74 72  linkPtr)../* Str
8050: 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
8060: 67 20 6c 69 6e 6b 65 64 20 76 61 72 69 61 62 6c  g linked variabl
8070: 65 2e 20 2a 2f 0a 2b 7b 0a 2b 20 20 20 20 69 66  e. */.+{.+    if
8080: 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61 67 73   (linkPtr->flags
8090: 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f 41 44   & LINK_ALLOC_AD
80a0: 44 52 29 20 63 6b 66 72 65 65 28 6c 69 6e 6b 50  DR) ckfree(linkP
80b0: 74 72 2d 3e 61 64 64 72 29 3b 0a 2b 20 20 20 20  tr->addr);.+    
80c0: 69 66 20 28 6c 69 6e 6b 50 74 72 2d 3e 66 6c 61  if (linkPtr->fla
80d0: 67 73 20 26 20 4c 49 4e 4b 5f 41 4c 4c 4f 43 5f  gs & LINK_ALLOC_
80e0: 4c 41 53 54 29 20 63 6b 66 72 65 65 28 6c 69 6e  LAST) ckfree(lin
80f0: 6b 50 74 72 2d 3e 6c 61 73 74 56 61 6c 75 65 2e  kPtr->lastValue.
8100: 70 63 29 3b 0a 2b 20 20 20 20 63 6b 66 72 65 65  pc);.+    ckfree
8110: 28 28 63 68 61 72 20 2a 29 20 6c 69 6e 6b 50 74  ((char *) linkPt
8120: 72 29 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a 20 20  r);.+}.+..+/*.  
8130: 2a 20 4c 6f 63 61 6c 20 56 61 72 69 61 62 6c 65  * Local Variable
8140: 73 3a 0a 20 20 2a 20 6d 6f 64 65 3a 20 63 0a 20  s:.  * mode: c. 
8150: 20 2a 20 63 2d 62 61 73 69 63 2d 6f 66 66 73 65   * c-basic-offse
8160: 74 3a 20 34 0a 64 69 66 66 20 2d 4e 75 70 72 20  t: 4.diff -Nupr 
8170: 74 63 6c 2d 38 2e 35 2f 67 65 6e 65 72 69 63 2f  tcl-8.5/generic/
8180: 74 63 6c 53 74 75 62 49 6e 69 74 2e 63 20 74 69  tclStubInit.c ti
8190: 70 33 31 32 2f 67 65 6e 65 72 69 63 2f 74 63 6c  p312/generic/tcl
81a0: 53 74 75 62 49 6e 69 74 2e 63 0a 2d 2d 2d 20 74  StubInit.c.--- t
81b0: 63 6c 2d 38 2e 35 2f 67 65 6e 65 72 69 63 2f 74  cl-8.5/generic/t
81c0: 63 6c 53 74 75 62 49 6e 69 74 2e 63 09 32 30 30  clStubInit.c.200
81d0: 38 2d 30 31 2d 32 33 20 31 38 3a 33 31 3a 34 32  8-01-23 18:31:42
81e0: 2e 30 30 30 30 30 30 30 30 30 20 2b 30 31 30 30  .000000000 +0100
81f0: 0a 2b 2b 2b 20 74 69 70 33 31 32 2f 67 65 6e 65  .+++ tip312/gene
8200: 72 69 63 2f 74 63 6c 53 74 75 62 49 6e 69 74 2e  ric/tclStubInit.
8210: 63 09 32 30 30 38 2d 30 36 2d 31 33 20 31 31 3a  c.2008-06-13 11:
8220: 32 37 3a 32 33 2e 30 30 30 30 30 30 30 30 30 20  27:23.000000000 
8230: 2b 30 32 30 30 0a 40 40 20 2d 31 31 32 38 2c 36  +0200.@@ -1128,6
8240: 20 2b 31 31 32 38 2c 37 20 40 40 20 54 63 6c 53   +1128,7 @@ TclS
8250: 74 75 62 73 20 74 63 6c 53 74 75 62 73 20 3d 20  tubs tclStubs = 
8260: 7b 0a 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  {.     Tcl_Appen
8270: 64 46 6f 72 6d 61 74 54 6f 4f 62 6a 2c 20 2f 2a  dFormatToObj, /*
8280: 20 35 37 37 20 2a 2f 0a 20 20 20 20 20 54 63 6c   577 */.     Tcl
8290: 5f 4f 62 6a 50 72 69 6e 74 66 2c 20 2f 2a 20 35  _ObjPrintf, /* 5
82a0: 37 38 20 2a 2f 0a 20 20 20 20 20 54 63 6c 5f 41  78 */.     Tcl_A
82b0: 70 70 65 6e 64 50 72 69 6e 74 66 54 6f 4f 62 6a  ppendPrintfToObj
82c0: 2c 20 2f 2a 20 35 37 39 20 2a 2f 0a 2b 20 20 20  , /* 579 */.+   
82d0: 20 54 63 6c 5f 4c 69 6e 6b 41 72 72 61 79 2c 20   Tcl_LinkArray, 
82e0: 2f 2a 20 35 38 30 20 2a 2f 0a 20 7d 3b 0a 20 0a  /* 580 */. };. .
82f0: 20 2f 2a 20 21 45 4e 44 21 3a 20 44 6f 20 6e 6f   /* !END!: Do no
8300: 74 20 65 64 69 74 20 61 62 6f 76 65 20 74 68 69  t edit above thi
8310: 73 20 6c 69 6e 65 2e 20 2a 2f 0a 64 69 66 66 20  s line. */.diff 
8320: 2d 4e 75 70 72 20 74 63 6c 2d 38 2e 35 2f 67 65  -Nupr tcl-8.5/ge
8330: 6e 65 72 69 63 2f 74 63 6c 54 65 73 74 2e 63 20  neric/tclTest.c 
8340: 74 69 70 33 31 32 2f 67 65 6e 65 72 69 63 2f 74  tip312/generic/t
8350: 63 6c 54 65 73 74 2e 63 0a 2d 2d 2d 20 74 63 6c  clTest.c.--- tcl
8360: 2d 38 2e 35 2f 67 65 6e 65 72 69 63 2f 74 63 6c  -8.5/generic/tcl
8370: 54 65 73 74 2e 63 09 32 30 30 38 2d 30 33 2d 31  Test.c.2008-03-1
8380: 34 20 31 37 3a 33 32 3a 35 32 2e 30 30 30 30 30  4 17:32:52.00000
8390: 30 30 30 30 20 2b 30 31 30 30 0a 2b 2b 2b 20 74  0000 +0100.+++ t
83a0: 69 70 33 31 32 2f 67 65 6e 65 72 69 63 2f 74 63  ip312/generic/tc
83b0: 6c 54 65 73 74 2e 63 09 32 30 30 38 2d 30 36 2d  lTest.c.2008-06-
83c0: 31 33 20 31 31 3a 30 31 3a 35 39 2e 30 30 30 30  13 11:01:59.0000
83d0: 30 30 30 30 30 20 2b 30 32 30 30 0a 40 40 20 2d  00000 +0200.@@ -
83e0: 33 30 31 2c 36 20 2b 33 30 31 2c 39 20 40 40 20  301,6 +301,9 @@ 
83f0: 73 74 61 74 69 63 20 69 6e 74 09 09 54 65 73 74  static int..Test
8400: 69 6e 74 65 72 70 64 65 6c 65 74 65 43 6d 64 28  interpdeleteCmd(
8410: 43 6c 69 65 6e 74 44 61 0a 20 09 09 09 20 20 20  ClientDa. ...   
8420: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
8430: 65 72 70 2c 20 69 6e 74 20 61 72 67 63 2c 20 63  erp, int argc, c
8440: 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 72 67 76  onst char **argv
8450: 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09  );. static int..
8460: 54 65 73 74 6c 69 6e 6b 43 6d 64 28 43 6c 69 65  TestlinkCmd(Clie
8470: 6e 74 44 61 74 61 20 64 75 6d 6d 79 2c 0a 20 09  ntData dummy,. .
8480: 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  ..    Tcl_Interp
8490: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 61 72   *interp, int ar
84a0: 67 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  gc, const char *
84b0: 2a 61 72 67 76 29 3b 0a 2b 73 74 61 74 69 63 20  *argv);.+static 
84c0: 69 6e 74 09 09 54 65 73 74 6c 69 6e 6b 61 72 72  int..Testlinkarr
84d0: 61 79 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61  ayCmd(ClientData
84e0: 20 64 75 6d 6d 79 2c 0a 2b 20 20 20 20 20 20 20   dummy,.+       
84f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8500: 20 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20       Tcl_Interp 
8510: 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a  *interp, int obj
8520: 63 2c 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20  c,.+            
8530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8540: 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f  Tcl_Obj *const o
8550: 62 6a 76 5b 5d 29 3b 0a 20 73 74 61 74 69 63 20  bjv[]);. static 
8560: 69 6e 74 09 09 54 65 73 74 6c 6f 63 61 6c 65 43  int..TestlocaleC
8570: 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 20 64 75  md(ClientData du
8580: 6d 6d 79 2c 0a 20 09 09 09 20 20 20 20 54 63 6c  mmy,. ...    Tcl
8590: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
85a0: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 09 09 09 20   int objc,. ... 
85b0: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73     Tcl_Obj *cons
85c0: 74 20 6f 62 6a 76 5b 5d 29 3b 0a 40 40 20 2d 36  t objv[]);.@@ -6
85d0: 34 37 2c 36 20 2b 36 35 30 2c 38 20 40 40 20 54  47,6 +650,8 @@ T
85e0: 63 6c 74 65 73 74 5f 49 6e 69 74 28 0a 20 20 20  cltest_Init(.   
85f0: 20 20 54 63 6c 5f 43 72 65 61 74 65 43 6f 6d 6d    Tcl_CreateComm
8600: 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 74 65 73  and(interp, "tes
8610: 74 69 6e 74 65 72 70 64 65 6c 65 74 65 22 2c 20  tinterpdelete", 
8620: 54 65 73 74 69 6e 74 65 72 70 64 65 6c 65 74 65  Testinterpdelete
8630: 43 6d 64 2c 0a 20 09 20 20 20 20 28 43 6c 69 65  Cmd,. .    (Clie
8640: 6e 74 44 61 74 61 29 20 30 2c 20 4e 55 4c 4c 29  ntData) 0, NULL)
8650: 3b 0a 20 20 20 20 20 54 63 6c 5f 43 72 65 61 74  ;.     Tcl_Creat
8660: 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  eCommand(interp,
8670: 20 22 74 65 73 74 6c 69 6e 6b 22 2c 20 54 65 73   "testlink", Tes
8680: 74 6c 69 6e 6b 43 6d 64 2c 20 28 43 6c 69 65 6e  tlinkCmd, (Clien
8690: 74 44 61 74 61 29 20 30 2c 20 4e 55 4c 4c 29 3b  tData) 0, NULL);
86a0: 0a 2b 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65  .+    Tcl_Create
86b0: 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72  ObjCommand(inter
86c0: 70 2c 20 22 74 65 73 74 6c 69 6e 6b 61 72 72 61  p, "testlinkarra
86d0: 79 22 2c 20 54 65 73 74 6c 69 6e 6b 61 72 72 61  y", Testlinkarra
86e0: 79 43 6d 64 2c 0a 2b 20 20 20 20 20 20 20 20 20  yCmd,.+         
86f0: 20 20 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20     (ClientData) 
8700: 30 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 54  0, NULL);.     T
8710: 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d  cl_CreateObjComm
8720: 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 74 65 73  and(interp, "tes
8730: 74 6c 6f 63 61 6c 65 22 2c 20 54 65 73 74 6c 6f  tlocale", Testlo
8740: 63 61 6c 65 43 6d 64 2c 20 28 43 6c 69 65 6e 74  caleCmd, (Client
8750: 44 61 74 61 29 20 30 2c 0a 20 09 20 20 20 20 4e  Data) 0,. .    N
8760: 55 4c 4c 29 3b 0a 20 20 20 20 20 54 63 6c 5f 43  ULL);.     Tcl_C
8770: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 69 6e 74  reateCommand(int
8780: 65 72 70 2c 20 22 74 65 73 74 70 61 6e 69 63 22  erp, "testpanic"
8790: 2c 20 54 65 73 74 70 61 6e 69 63 43 6d 64 2c 20  , TestpanicCmd, 
87a0: 28 43 6c 69 65 6e 74 44 61 74 61 29 20 30 2c 20  (ClientData) 0, 
87b0: 4e 55 4c 4c 29 3b 0a 40 40 20 2d 33 30 38 34 2c  NULL);.@@ -3084,
87c0: 36 20 2b 33 30 38 39 2c 31 31 38 20 40 40 20 54  6 +3089,118 @@ T
87d0: 65 73 74 6c 69 6e 6b 43 6d 64 28 0a 20 2f 2a 0a  estlinkCmd(. /*.
87e0: 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    *-------------
87f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a 2b 20  ---------.  *.+ 
8830: 2a 20 54 65 73 74 6c 69 6e 6b 61 72 72 61 79 43  * TestlinkarrayC
8840: 6d 64 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20 20 20  md --.+ *.+ *   
8850: 20 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e     This function
8860: 20 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f 20 70   is invoked to p
8870: 72 6f 63 65 73 73 20 74 68 65 20 22 74 65 73 74  rocess the "test
8880: 6c 69 6e 6b 61 72 72 61 79 22 20 54 63 6c 20 63  linkarray" Tcl c
8890: 6f 6d 6d 61 6e 64 2e 0a 2b 20 2a 20 20 20 20 20  ommand..+ *     
88a0: 20 49 74 20 69 73 20 75 73 65 64 20 74 6f 20 74   It is used to t
88b0: 65 73 74 20 74 68 65 20 27 54 63 6c 5f 4c 69 6e  est the 'Tcl_Lin
88c0: 6b 41 72 72 61 79 27 20 66 75 6e 63 74 69 6f 6e  kArray' function
88d0: 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74  ..+ *.+ * Result
88e0: 73 3a 0a 2b 20 2a 20 20 20 20 20 20 41 20 73 74  s:.+ *      A st
88f0: 61 6e 64 61 72 64 20 54 63 6c 20 72 65 73 75 6c  andard Tcl resul
8900: 74 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69 64 65 20  t..+ *.+ * Side 
8910: 65 66 66 65 63 74 73 3a 0a 2b 20 2a 09 43 72 65  effects:.+ *.Cre
8920: 61 74 65 73 2c 20 64 65 6c 65 74 65 73 2c 20 61  ates, deletes, a
8930: 6e 64 20 69 6e 76 6f 6b 65 73 20 76 61 72 69 61  nd invokes varia
8940: 62 6c 65 20 6c 69 6e 6b 73 2e 0a 2b 20 2a 0a 2b  ble links..+ *.+
8950: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
8960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8990: 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a  --------.+ */.+.
89a0: 2b 73 74 61 74 69 63 20 69 6e 74 0a 2b 54 65 73  +static int.+Tes
89b0: 74 6c 69 6e 6b 61 72 72 61 79 43 6d 64 28 0a 2b  tlinkarrayCmd(.+
89c0: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 64      ClientData d
89d0: 75 6d 6d 79 2c 20 20 20 20 20 20 20 20 20 20 20  ummy,           
89e0: 2f 2a 20 4e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  /* Not used. */.
89f0: 2b 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  +    Tcl_Interp 
8a00: 2a 69 6e 74 65 72 70 2c 20 20 20 20 20 20 20 20  *interp,        
8a10: 20 2f 2a 20 43 75 72 72 65 6e 74 20 69 6e 74 65   /* Current inte
8a20: 72 70 72 65 74 65 72 2e 20 2a 2f 0a 2b 20 20 20  rpreter. */.+   
8a30: 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
8a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8a50: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
8a60: 6e 74 73 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c  nts. */.+    Tcl
8a70: 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a 76  _Obj *const objv
8a80: 5b 5d 29 20 20 20 20 20 20 2f 2a 20 41 72 67 75  [])      /* Argu
8a90: 6d 65 6e 74 20 6f 62 6a 65 63 74 73 2e 20 2a 2f  ment objects. */
8aa0: 0a 2b 7b 0a 2b 20 20 20 20 73 74 61 74 69 63 20  .+{.+    static 
8ab0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 4c 69 6e 6b  const char *Link
8ac0: 4f 70 74 69 6f 6e 5b 5d 20 3d 20 7b 0a 2b 20 20  Option[] = {.+  
8ad0: 20 20 22 75 70 64 61 74 65 22 2c 20 22 72 65 6d    "update", "rem
8ae0: 6f 76 65 22 2c 20 22 63 72 65 61 74 65 22 2c 20  ove", "create", 
8af0: 4e 55 4c 4c 0a 2b 20 20 20 20 7d 3b 0a 2b 20 20  NULL.+    };.+  
8b00: 20 20 65 6e 75 6d 20 4c 69 6e 6b 4f 70 74 69 6f    enum LinkOptio
8b10: 6e 20 7b 20 4c 49 4e 4b 5f 55 50 44 41 54 45 2c  n { LINK_UPDATE,
8b20: 20 4c 49 4e 4b 5f 52 45 4d 4f 56 45 2c 20 4c 49   LINK_REMOVE, LI
8b30: 4e 4b 5f 43 52 45 41 54 45 20 7d 3b 0a 2b 20 20  NK_CREATE };.+  
8b40: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
8b50: 68 61 72 20 2a 4c 69 6e 6b 54 79 70 65 5b 5d 20  har *LinkType[] 
8b60: 3d 20 7b 0a 2b 20 20 20 20 22 63 68 61 72 22 2c  = {.+    "char",
8b70: 20 22 75 63 68 61 72 22 2c 20 22 73 68 6f 72 74   "uchar", "short
8b80: 22 2c 20 22 75 73 68 6f 72 74 22 2c 20 22 69 6e  ", "ushort", "in
8b90: 74 22 2c 20 22 75 69 6e 74 22 2c 20 22 6c 6f 6e  t", "uint", "lon
8ba0: 67 22 2c 20 22 75 6c 6f 6e 67 22 2c 0a 2b 20 20  g", "ulong",.+  
8bb0: 20 20 22 77 69 64 65 22 2c 20 22 75 77 69 64 65    "wide", "uwide
8bc0: 22 2c 20 22 66 6c 6f 61 74 22 2c 20 22 64 6f 75  ", "float", "dou
8bd0: 62 6c 65 22 2c 20 22 73 74 72 69 6e 67 22 2c 20  ble", "string", 
8be0: 22 63 68 61 72 2a 22 2c 20 22 62 69 6e 61 72 79  "char*", "binary
8bf0: 22 2c 20 4e 55 4c 4c 0a 2b 20 20 20 20 7d 3b 0a  ", NULL.+    };.
8c00: 2b 20 20 20 20 2f 2a 20 61 6c 6c 20 76 61 6c 75  +    /* all valu
8c10: 65 73 20 61 66 74 65 72 20 54 43 4c 5f 4c 49 4e  es after TCL_LIN
8c20: 4b 5f 43 48 41 52 53 5f 41 52 52 41 59 20 61 72  K_CHARS_ARRAY ar
8c30: 65 20 75 73 65 64 20 61 73 20 61 72 72 61 79 73  e used as arrays
8c40: 20 28 73 65 65 20 62 65 6c 6f 77 29 20 2a 2f 0a   (see below) */.
8c50: 2b 20 20 20 20 73 74 61 74 69 63 20 69 6e 74 20  +    static int 
8c60: 4c 69 6e 6b 54 79 70 65 73 5b 5d 20 3d 20 7b 20  LinkTypes[] = { 
8c70: 54 43 4c 5f 4c 49 4e 4b 5f 43 48 41 52 2c 20 54  TCL_LINK_CHAR, T
8c80: 43 4c 5f 4c 49 4e 4b 5f 55 43 48 41 52 2c 0a 2b  CL_LINK_UCHAR,.+
8c90: 20 20 20 20 54 43 4c 5f 4c 49 4e 4b 5f 53 48 4f      TCL_LINK_SHO
8ca0: 52 54 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 55 53 48  RT, TCL_LINK_USH
8cb0: 4f 52 54 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  ORT, TCL_LINK_IN
8cc0: 54 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 55 49 4e 54  T, TCL_LINK_UINT
8cd0: 2c 0a 2b 20 20 20 20 54 43 4c 5f 4c 49 4e 4b 5f  ,.+    TCL_LINK_
8ce0: 4c 4f 4e 47 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 55  LONG, TCL_LINK_U
8cf0: 4c 4f 4e 47 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 57  LONG, TCL_LINK_W
8d00: 49 44 45 5f 49 4e 54 2c 20 54 43 4c 5f 4c 49 4e  IDE_INT, TCL_LIN
8d10: 4b 5f 57 49 44 45 5f 55 49 4e 54 2c 0a 2b 20 20  K_WIDE_UINT,.+  
8d20: 20 20 54 43 4c 5f 4c 49 4e 4b 5f 46 4c 4f 41 54    TCL_LINK_FLOAT
8d30: 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 44 4f 55 42 4c  , TCL_LINK_DOUBL
8d40: 45 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49  E, TCL_LINK_STRI
8d50: 4e 47 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 43 48 41  NG, TCL_LINK_CHA
8d60: 52 53 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 42 49 4e  RS, TCL_LINK_BIN
8d70: 41 52 59 0a 2b 20 20 20 20 7d 3b 0a 2b 20 20 20  ARY.+    };.+   
8d80: 20 69 6e 74 20 6f 70 74 69 6f 6e 49 6e 64 65 78   int optionIndex
8d90: 3b 0a 2b 20 20 20 20 69 6e 74 20 74 79 70 65 49  ;.+    int typeI
8da0: 6e 64 65 78 3b 0a 2b 20 20 20 20 69 6e 74 20 72  ndex;.+    int r
8db0: 65 61 64 6f 6e 6c 79 3b 0a 2b 20 20 20 20 69 6e  eadonly;.+    in
8dc0: 74 20 69 3b 0a 2b 20 20 20 20 63 68 61 72 20 2a  t i;.+    char *
8dd0: 6e 61 6d 65 3b 0a 2b 20 20 20 20 69 6e 74 20 61  name;.+    int a
8de0: 64 64 72 3b 0a 2b 20 20 20 20 69 6e 74 20 73 69  ddr;.+    int si
8df0: 7a 65 3b 0a 2b 20 20 20 20 63 68 61 72 20 2a 61  ze;.+    char *a
8e00: 72 67 3b 0a 2b 20 20 20 20 69 6e 74 20 6c 65 6e  rg;.+    int len
8e10: 67 74 68 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28  gth;.+.+    if (
8e20: 6f 62 6a 63 20 3c 20 32 29 20 7b 0a 2b 09 54 63  objc < 2) {.+.Tc
8e30: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
8e40: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
8e50: 22 6f 70 74 69 6f 6e 20 61 72 67 73 22 29 3b 0a  "option args");.
8e60: 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  +.return TCL_ERR
8e70: 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20  OR;.+    }.+    
8e80: 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 64 65 78  if (Tcl_GetIndex
8e90: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
8ea0: 6f 62 6a 76 5b 31 5d 2c 20 4c 69 6e 6b 4f 70 74  objv[1], LinkOpt
8eb0: 69 6f 6e 2c 20 22 6f 70 74 69 6f 6e 22 2c 20 30  ion, "option", 0
8ec0: 2c 0a 2b 09 26 6f 70 74 69 6f 6e 49 6e 64 65 78  ,.+.&optionIndex
8ed0: 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b  ) != TCL_OK) {.+
8ee0: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f  .return TCL_ERRO
8ef0: 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 73  R;.+    }.+    s
8f00: 77 69 74 63 68 20 28 28 65 6e 75 6d 20 4c 69 6e  witch ((enum Lin
8f10: 6b 4f 70 74 69 6f 6e 29 20 6f 70 74 69 6f 6e 49  kOption) optionI
8f20: 6e 64 65 78 29 20 7b 0a 2b 20 20 20 20 63 61 73  ndex) {.+    cas
8f30: 65 20 4c 49 4e 4b 5f 55 50 44 41 54 45 3a 0a 2b  e LINK_UPDATE:.+
8f40: 09 66 6f 72 20 28 69 3d 32 3b 69 3c 6f 62 6a 63  .for (i=2;i<objc
8f50: 3b 69 2b 2b 29 20 7b 0a 2b 09 20 20 20 20 54 63  ;i++) {.+.    Tc
8f60: 6c 5f 55 70 64 61 74 65 4c 69 6e 6b 65 64 56 61  l_UpdateLinkedVa
8f70: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
8f80: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 69 5d 29  tString(objv[i])
8f90: 29 3b 0a 2b 09 7d 0a 2b 09 72 65 74 75 72 6e 20  );.+.}.+.return 
8fa0: 54 43 4c 5f 4f 4b 3b 0a 2b 20 20 20 20 63 61 73  TCL_OK;.+    cas
8fb0: 65 20 4c 49 4e 4b 5f 52 45 4d 4f 56 45 3a 0a 2b  e LINK_REMOVE:.+
8fc0: 09 66 6f 72 20 28 69 3d 32 3b 69 3c 6f 62 6a 63  .for (i=2;i<objc
8fd0: 3b 69 2b 2b 29 20 7b 0a 2b 09 20 20 20 20 54 63  ;i++) {.+.    Tc
8fe0: 6c 5f 55 6e 6c 69 6e 6b 56 61 72 28 69 6e 74 65  l_UnlinkVar(inte
8ff0: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
9000: 67 28 6f 62 6a 76 5b 69 5d 29 29 3b 0a 2b 09 7d  g(objv[i]));.+.}
9010: 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .+.return TCL_OK
9020: 3b 0a 2b 20 20 20 20 63 61 73 65 20 4c 49 4e 4b  ;.+    case LINK
9030: 5f 43 52 45 41 54 45 3a 0a 2b 09 69 66 20 28 6f  _CREATE:.+.if (o
9040: 62 6a 63 20 3c 20 34 29 20 7b 0a 2b 09 20 20 20  bjc < 4) {.+.   
9050: 20 67 6f 74 6f 20 77 72 6f 6e 67 41 72 67 73 3b   goto wrongArgs;
9060: 0a 2b 09 7d 0a 2b 09 72 65 61 64 6f 6e 6c 79 20  .+.}.+.readonly 
9070: 3d 20 30 3b 0a 2b 09 69 20 3d 20 32 3b 0a 2b 09  = 0;.+.i = 2;.+.
9080: 2f 2a 20 74 65 73 74 20 6f 6e 20 73 77 69 74 63  /* test on switc
9090: 68 20 2d 72 2e 2e 2e 20 2a 2f 0a 2b 09 61 72 67  h -r... */.+.arg
90a0: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
90b0: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 69 5d 2c  FromObj(objv[i],
90c0: 26 6c 65 6e 67 74 68 29 3b 0a 2b 09 69 66 20 28  &length);.+.if (
90d0: 6c 65 6e 67 74 68 20 3c 20 32 29 20 7b 0a 2b 09  length < 2) {.+.
90e0: 20 20 20 20 67 6f 74 6f 20 77 72 6f 6e 67 41 72      goto wrongAr
90f0: 67 73 3b 0a 2b 09 7d 0a 2b 09 69 66 20 28 61 72  gs;.+.}.+.if (ar
9100: 67 5b 30 5d 20 3d 3d 20 27 2d 27 29 20 7b 0a 2b  g[0] == '-') {.+
9110: 09 20 20 20 20 69 66 20 28 61 72 67 5b 31 5d 20  .    if (arg[1] 
9120: 21 3d 20 27 72 27 29 20 7b 0a 2b 09 20 20 20 20  != 'r') {.+.    
9130: 20 20 20 20 67 6f 74 6f 20 77 72 6f 6e 67 41 72      goto wrongAr
9140: 67 73 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 20  gs;.+.    }.+.  
9150: 20 20 72 65 61 64 6f 6e 6c 79 20 3d 20 54 43 4c    readonly = TCL
9160: 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 3b  _LINK_READ_ONLY;
9170: 0a 2b 09 20 20 20 20 69 2b 2b 3b 0a 2b 09 7d 0a  .+.    i++;.+.}.
9180: 2b 09 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 64  +.if (Tcl_GetInd
9190: 65 78 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  exFromObj(interp
91a0: 2c 20 6f 62 6a 76 5b 69 2b 2b 5d 2c 20 4c 69 6e  , objv[i++], Lin
91b0: 6b 54 79 70 65 2c 20 22 74 79 70 65 22 2c 20 30  kType, "type", 0
91c0: 2c 0a 2b 09 20 20 20 20 26 74 79 70 65 49 6e 64  ,.+.    &typeInd
91d0: 65 78 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  ex) != TCL_OK) {
91e0: 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54 43  .+.    return TC
91f0: 4c 5f 45 52 52 4f 52 3b 0a 2b 09 7d 0a 2b 09 69  L_ERROR;.+.}.+.i
9200: 66 20 28 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f (Tcl_GetIntFro
9210: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
9220: 76 5b 69 2b 2b 5d 2c 20 26 73 69 7a 65 29 20 3d  v[i++], &size) =
9230: 3d 20 54 43 4c 5f 45 52 52 4f 52 29 20 7b 0a 2b  = TCL_ERROR) {.+
9240: 09 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75  .    Tcl_SetResu
9250: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
9260: 67 20 73 69 7a 65 20 76 61 6c 75 65 22 2c 20 4e  g size value", N
9270: 55 4c 4c 29 3b 0a 2b 09 20 20 20 20 72 65 74 75  ULL);.+.    retu
9280: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09  rn TCL_ERROR;.+.
9290: 7d 0a 2b 09 6e 61 6d 65 20 3d 20 54 63 6c 5f 47  }.+.name = Tcl_G
92a0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 69 2b  etString(objv[i+
92b0: 2b 5d 29 3b 0a 2b 09 2f 2a 20 69 66 20 6e 6f 20  +]);.+./* if no 
92c0: 61 64 64 72 65 73 73 20 69 73 20 67 69 76 65 6e  address is given
92d0: 20 72 65 71 75 65 73 74 20 6f 6e 65 20 69 6e 20   request one in 
92e0: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 66  the underlying f
92f0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 2b 09 69 66 20  unction */.+.if 
9300: 28 69 20 3c 6f 62 6a 63 29 20 7b 0a 2b 09 20 20  (i <objc) {.+.  
9310: 20 20 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 74    if (Tcl_GetInt
9320: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
9330: 6f 62 6a 76 5b 69 5d 2c 20 26 61 64 64 72 29 20  objv[i], &addr) 
9340: 3d 3d 20 54 43 4c 5f 45 52 52 4f 52 29 20 7b 0a  == TCL_ERROR) {.
9350: 2b 09 20 20 20 20 20 20 20 20 54 63 6c 5f 53 65  +.        Tcl_Se
9360: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
9370: 22 77 72 6f 6e 67 20 61 64 64 72 65 73 73 20 76  "wrong address v
9380: 61 6c 75 65 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 09  alue", NULL);.+.
9390: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
93a0: 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 20 20 20 20  CL_ERROR;.+.    
93b0: 7d 0a 2b 09 7d 20 65 6c 73 65 20 7b 0a 2b 09 20  }.+.} else {.+. 
93c0: 20 20 20 61 64 64 72 20 3d 20 30 3b 0a 2b 09 7d     addr = 0;.+.}
93d0: 0a 2b 09 72 65 74 75 72 6e 20 54 63 6c 5f 4c 69  .+.return Tcl_Li
93e0: 6e 6b 41 72 72 61 79 28 69 6e 74 65 72 70 2c 6e  nkArray(interp,n
93f0: 61 6d 65 2c 28 63 68 61 72 20 2a 29 61 64 64 72  ame,(char *)addr
9400: 2c 4c 69 6e 6b 54 79 70 65 73 5b 74 79 70 65 49  ,LinkTypes[typeI
9410: 6e 64 65 78 5d 20 7c 20 72 65 61 64 6f 6e 6c 79  ndex] | readonly
9420: 2c 73 69 7a 65 29 3b 0a 2b 20 20 20 20 7d 0a 2b  ,size);.+    }.+
9430: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f      return TCL_O
9440: 4b 3b 0a 2b 0a 2b 20 20 77 72 6f 6e 67 41 72 67  K;.+.+  wrongArg
9450: 73 3a 0a 2b 20 20 20 20 54 63 6c 5f 57 72 6f 6e  s:.+    Tcl_Wron
9460: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
9470: 20 32 2c 20 6f 62 6a 76 2c 20 22 3f 2d 72 65 61   2, objv, "?-rea
9480: 64 6f 6e 6c 79 3f 20 74 79 70 65 20 73 69 7a 65  donly? type size
9490: 20 6e 61 6d 65 20 3f 61 64 64 72 65 73 73 3f 22   name ?address?"
94a0: 29 3b 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 54  );.+    return T
94b0: 43 4c 5f 45 52 52 4f 52 3b 0a 2b 7d 0a 2b 0c 0a  CL_ERROR;.+}.+..
94c0: 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  +/*.+ *---------
94d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
94e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
94f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20  -------------.+ 
9510: 2a 0a 20 20 2a 20 54 65 73 74 6c 6f 63 61 6c 65  *.  * Testlocale
9520: 43 6d 64 20 2d 2d 0a 20 20 2a 0a 20 20 2a 09 54  Cmd --.  *.  *.T
9530: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 6d  his procedure im
9540: 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 22 74 65  plements the "te
9550: 73 74 6c 6f 63 61 6c 65 22 20 63 6f 6d 6d 61 6e  stlocale" comman
9560: 64 2e 20 20 49 74 20 69 73 20 75 73 65 64 0a 64  d.  It is used.d
9570: 69 66 66 20 2d 4e 75 70 72 20 74 63 6c 2d 38 2e  iff -Nupr tcl-8.
9580: 35 2f 74 65 73 74 73 2f 6c 69 6e 6b 2e 74 65 73  5/tests/link.tes
9590: 74 20 74 69 70 33 31 32 2f 74 65 73 74 73 2f 6c  t tip312/tests/l
95a0: 69 6e 6b 2e 74 65 73 74 0a 2d 2d 2d 20 74 63 6c  ink.test.--- tcl
95b0: 2d 38 2e 35 2f 74 65 73 74 73 2f 6c 69 6e 6b 2e  -8.5/tests/link.
95c0: 74 65 73 74 09 32 30 30 37 2d 31 32 2d 31 33 20  test.2007-12-13 
95d0: 31 36 3a 32 36 3a 30 36 2e 30 30 30 30 30 30 30  16:26:06.0000000
95e0: 30 30 20 2b 30 31 30 30 0a 2b 2b 2b 20 74 69 70  00 +0100.+++ tip
95f0: 33 31 32 2f 74 65 73 74 73 2f 6c 69 6e 6b 2e 74  312/tests/link.t
9600: 65 73 74 09 32 30 30 38 2d 30 36 2d 31 33 20 31  est.2008-06-13 1
9610: 31 3a 33 32 3a 34 39 2e 30 30 30 30 30 30 30 30  1:32:49.00000000
9620: 30 20 2b 30 32 30 30 0a 40 40 20 2d 31 39 2c 36  0 +0200.@@ -19,6
9630: 20 2b 31 39 2c 37 20 40 40 20 69 66 20 7b 5b 6c   +19,7 @@ if {[l
9640: 73 65 61 72 63 68 20 5b 6e 61 6d 65 73 70 61 63  search [namespac
9650: 65 20 63 68 69 6c 64 72 65 6e 5d 20 3a 3a 74 63  e children] ::tc
9660: 6c 74 0a 20 7d 0a 20 0a 20 74 65 73 74 43 6f 6e  lt. }. . testCon
9670: 73 74 72 61 69 6e 74 20 74 65 73 74 6c 69 6e 6b  straint testlink
9680: 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20   [llength [info 
9690: 63 6f 6d 6d 61 6e 64 73 20 74 65 73 74 6c 69 6e  commands testlin
96a0: 6b 5d 5d 0a 2b 74 65 73 74 43 6f 6e 73 74 72 61  k]].+testConstra
96b0: 69 6e 74 20 74 65 73 74 6c 69 6e 6b 61 72 72 61  int testlinkarra
96c0: 79 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f  y [llength [info
96d0: 20 63 6f 6d 6d 61 6e 64 73 20 74 65 73 74 6c 69   commands testli
96e0: 6e 6b 61 72 72 61 79 5d 5d 0a 20 0a 20 66 6f 72  nkarray]]. . for
96f0: 65 61 63 68 20 69 20 7b 69 6e 74 20 72 65 61 6c  each i {int real
9700: 20 62 6f 6f 6c 20 73 74 72 69 6e 67 7d 20 7b 0a   bool string} {.
9710: 20 20 20 20 20 63 61 74 63 68 20 7b 75 6e 73 65       catch {unse
9720: 74 20 24 69 7d 0a 40 40 20 2d 37 39 2c 37 20 2b  t $i}.@@ -79,7 +
9730: 38 30 2c 37 20 40 40 20 74 65 73 74 20 6c 69 6e  80,7 @@ test lin
9740: 6b 2d 32 2e 35 20 7b 77 72 69 74 69 6e 67 20 62  k-2.5 {writing b
9750: 61 64 20 76 61 6c 75 65 73 20 69 6e 74 6f 20 76  ad values into v
9760: 0a 20 20 20 20 20 74 65 73 74 6c 69 6e 6b 20 73  .     testlink s
9770: 65 74 20 34 33 20 31 2e 32 33 20 34 20 2d 20 35  et 43 1.23 4 - 5
9780: 36 37 38 35 36 37 38 20 36 34 20 32 35 30 20 33  6785678 64 250 3
9790: 30 30 30 30 20 36 30 30 30 30 20 30 78 62 65 65  0000 60000 0xbee
97a0: 66 62 61 62 65 20 31 32 33 32 31 20 33 32 31 32  fbabe 12321 3212
97b0: 33 20 33 2e 32 35 20 31 32 33 31 32 33 31 32 33  3 3.25 123123123
97c0: 34 0a 20 20 20 20 20 74 65 73 74 6c 69 6e 6b 20  4.     testlink 
97d0: 63 72 65 61 74 65 20 31 20 31 20 31 20 31 20 31  create 1 1 1 1 1
97e0: 20 31 20 31 20 31 20 31 20 31 20 31 20 31 20 31   1 1 1 1 1 1 1 1
97f0: 20 31 0a 20 20 20 20 20 6c 69 73 74 20 5b 63 61   1.     list [ca
9800: 74 63 68 20 7b 73 65 74 20 77 69 64 65 20 67 6f  tch {set wide go
9810: 72 70 7d 20 6d 73 67 5d 20 24 6d 73 67 20 24 62  rp} msg] $msg $b
9820: 6f 6f 6c 0a 2d 7d 20 7b 31 20 7b 63 61 6e 27 74  ool.-} {1 {can't
9830: 20 73 65 74 20 22 77 69 64 65 22 3a 20 76 61 72   set "wide": var
9840: 69 61 62 6c 65 20 6d 75 73 74 20 68 61 76 65 20  iable must have 
9850: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 7d 20 31  integer value} 1
9860: 7d 0a 2b 7d 20 7b 31 20 7b 63 61 6e 27 74 20 73  }.+} {1 {can't s
9870: 65 74 20 22 77 69 64 65 22 3a 20 76 61 72 69 61  et "wide": varia
9880: 62 6c 65 20 6d 75 73 74 20 68 61 76 65 20 77 69  ble must have wi
9890: 64 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  de integer value
98a0: 7d 20 31 7d 0a 20 0a 20 74 65 73 74 20 6c 69 6e  } 1}. . test lin
98b0: 6b 2d 33 2e 31 20 7b 72 65 61 64 2d 6f 6e 6c 79  k-3.1 {read-only
98c0: 20 76 61 72 69 61 62 6c 65 73 7d 20 7b 74 65 73   variables} {tes
98d0: 74 6c 69 6e 6b 7d 20 7b 0a 20 20 20 20 20 74 65  tlink} {.     te
98e0: 73 74 6c 69 6e 6b 20 64 65 6c 65 74 65 0a 40 40  stlink delete.@@
98f0: 20 2d 32 33 34 2c 37 20 2b 32 33 35 2c 37 20 40   -234,7 +235,7 @
9900: 40 20 74 65 73 74 20 6c 69 6e 6b 2d 37 2e 37 20  @ test link-7.7 
9910: 7b 61 63 63 65 73 73 20 74 6f 20 6c 69 6e 6b 65  {access to linke
9920: 64 20 76 61 72 69 61 62 6c 65 0a 20 20 20 20 20  d variable.     
9930: 74 65 73 74 6c 69 6e 6b 20 63 72 65 61 74 65 20  testlink create 
9940: 31 20 31 20 31 20 31 20 31 20 31 20 31 20 31 20  1 1 1 1 1 1 1 1 
9950: 31 20 31 20 31 20 31 20 31 20 31 0a 20 20 20 20  1 1 1 1 1 1.    
9960: 20 74 65 73 74 6c 69 6e 6b 20 73 65 74 20 2d 34   testlink set -4
9970: 20 31 36 2e 33 20 31 20 7b 7d 20 37 37 38 38 39   16.3 1 {} 77889
9980: 39 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d  9 {} {} {} {} {}
9990: 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 0a 20 20 20   {} {} {} {}.   
99a0: 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 78 20    list [catch x 
99b0: 6d 73 67 5d 20 24 6d 73 67 20 24 77 69 64 65 0a  msg] $msg $wide.
99c0: 2d 7d 20 7b 31 20 7b 63 61 6e 27 74 20 73 65 74  -} {1 {can't set
99d0: 20 22 79 22 3a 20 76 61 72 69 61 62 6c 65 20 6d   "y": variable m
99e0: 75 73 74 20 68 61 76 65 20 69 6e 74 65 67 65 72  ust have integer
99f0: 20 76 61 6c 75 65 7d 20 37 37 38 38 39 39 7d 0a   value} 778899}.
9a00: 2b 7d 20 7b 31 20 7b 63 61 6e 27 74 20 73 65 74  +} {1 {can't set
9a10: 20 22 79 22 3a 20 76 61 72 69 61 62 6c 65 20 6d   "y": variable m
9a20: 75 73 74 20 68 61 76 65 20 77 69 64 65 20 69 6e  ust have wide in
9a30: 74 65 67 65 72 20 76 61 6c 75 65 7d 20 37 37 38  teger value} 778
9a40: 38 39 39 7d 0a 20 0a 20 74 65 73 74 20 6c 69 6e  899}. . test lin
9a50: 6b 2d 38 2e 31 20 7b 54 63 6c 5f 55 70 64 61 74  k-8.1 {Tcl_Updat
9a60: 65 4c 69 6e 6b 65 64 56 61 72 20 70 72 6f 63 65  eLinkedVar proce
9a70: 64 75 72 65 7d 20 7b 74 65 73 74 6c 69 6e 6b 7d  dure} {testlink}
9a80: 20 7b 0a 20 20 20 20 20 70 72 6f 63 20 78 20 61   {.     proc x a
9a90: 72 67 73 20 7b 0a 40 40 20 2d 32 36 39 2c 36 20  rgs {.@@ -269,6 
9aa0: 2b 32 37 30 2c 32 39 36 20 40 40 20 74 65 73 74  +270,296 @@ test
9ab0: 20 6c 69 6e 6b 2d 38 2e 33 20 7b 54 63 6c 5f 55   link-8.3 {Tcl_U
9ac0: 70 64 61 74 65 4c 69 6e 6b 65 64 56 61 72 20 70  pdateLinkedVar p
9ad0: 72 6f 63 65 0a 20 09 74 65 73 74 6c 69 6e 6b 20  roce. .testlink 
9ae0: 75 70 64 61 74 65 20 34 37 20 7b 7d 20 7b 7d 20  update 47 {} {} 
9af0: 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b  {} {} {} {} {} {
9b00: 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d  } {} {} {} {} {}
9b10: 0a 20 20 20 20 20 7d 20 6d 73 67 5d 20 24 6d 73  .     } msg] $ms
9b20: 67 20 24 69 6e 74 0a 20 7d 20 7b 30 20 7b 7d 20  g $int. } {0 {} 
9b30: 34 37 7d 0a 2b 74 65 73 74 20 6c 69 6e 6b 2d 39  47}.+test link-9
9b40: 2e 31 20 7b 6c 69 6e 6b 61 72 72 61 79 20 75 73  .1 {linkarray us
9b50: 61 67 65 20 6d 65 73 73 61 67 65 73 7d 20 7b 0a  age messages} {.
9b60: 2b 20 20 73 65 74 20 6d 79 6c 69 73 74 20 5b 6c  +  set mylist [l
9b70: 69 73 74 5d 0a 2b 20 20 63 61 74 63 68 20 7b 74  ist].+  catch {t
9b80: 65 73 74 6c 69 6e 6b 61 72 72 61 79 7d 20 6d 79  estlinkarray} my
9b90: 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d  (msg); lappend m
9ba0: 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75  ylist $my(msg);u
9bb0: 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20  nset my(msg).+  
9bc0: 63 61 74 63 68 20 7b 74 65 73 74 6c 69 6e 6b 61  catch {testlinka
9bd0: 72 72 61 79 20 78 7d 20 6d 79 28 6d 73 67 29 3b  rray x} my(msg);
9be0: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20   lappend mylist 
9bf0: 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d  $my(msg);unset m
9c00: 79 28 6d 73 67 29 0a 2b 20 20 63 61 74 63 68 20  y(msg).+  catch 
9c10: 7b 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 75  {testlinkarray u
9c20: 70 64 61 74 65 7d 20 6d 79 28 6d 73 67 29 3b 20  pdate} my(msg); 
9c30: 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24  lappend mylist $
9c40: 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79  my(msg);unset my
9c50: 28 6d 73 67 29 0a 2b 20 20 63 61 74 63 68 20 7b  (msg).+  catch {
9c60: 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65  testlinkarray re
9c70: 6d 6f 76 65 7d 20 6d 79 28 6d 73 67 29 3b 20 6c  move} my(msg); l
9c80: 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d  append mylist $m
9c90: 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28  y(msg);unset my(
9ca0: 6d 73 67 29 0a 2b 20 20 63 61 74 63 68 20 7b 74  msg).+  catch {t
9cb0: 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65  estlinkarray cre
9cc0: 61 74 65 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61  ate} my(msg); la
9cd0: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79  ppend mylist $my
9ce0: 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d  (msg);unset my(m
9cf0: 73 67 29 0a 2b 20 20 63 61 74 63 68 20 7b 74 65  sg).+  catch {te
9d00: 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 61  stlinkarray crea
9d10: 74 65 20 78 78 20 31 20 6d 79 7d 20 6d 79 28 6d  te xx 1 my} my(m
9d20: 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c  sg); lappend myl
9d30: 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73  ist $my(msg);uns
9d40: 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 63 61  et my(msg).+  ca
9d50: 74 63 68 20 7b 74 65 73 74 6c 69 6e 6b 61 72 72  tch {testlinkarr
9d60: 61 79 20 63 72 65 61 74 65 20 63 68 61 72 2a 20  ay create char* 
9d70: 30 20 6d 79 7d 20 6d 79 28 6d 73 67 29 3b 20 6c  0 my} my(msg); l
9d80: 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d  append mylist $m
9d90: 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28  y(msg);unset my(
9da0: 6d 73 67 29 0a 2b 20 20 6a 6f 69 6e 20 24 6d 79  msg).+  join $my
9db0: 6c 69 73 74 20 22 5c 6e 22 0a 2b 7d 20 7b 77 72  list "\n".+} {wr
9dc0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
9dd0: 6c 64 20 62 65 20 22 74 65 73 74 6c 69 6e 6b 61  ld be "testlinka
9de0: 72 72 61 79 20 6f 70 74 69 6f 6e 20 61 72 67 73  rray option args
9df0: 22 0a 2b 62 61 64 20 6f 70 74 69 6f 6e 20 22 78  ".+bad option "x
9e00: 22 3a 20 6d 75 73 74 20 62 65 20 75 70 64 61 74  ": must be updat
9e10: 65 2c 20 72 65 6d 6f 76 65 2c 20 6f 72 20 63 72  e, remove, or cr
9e20: 65 61 74 65 0a 2b 0a 2b 0a 2b 77 72 6f 6e 67 20  eate.+.+.+wrong 
9e30: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
9e40: 65 20 22 74 65 73 74 6c 69 6e 6b 61 72 72 61 79  e "testlinkarray
9e50: 20 63 72 65 61 74 65 20 3f 2d 72 65 61 64 6f 6e   create ?-readon
9e60: 6c 79 3f 20 74 79 70 65 20 73 69 7a 65 20 6e 61  ly? type size na
9e70: 6d 65 20 3f 61 64 64 72 65 73 73 3f 22 0a 2b 62  me ?address?".+b
9e80: 61 64 20 74 79 70 65 20 22 78 78 22 3a 20 6d 75  ad type "xx": mu
9e90: 73 74 20 62 65 20 63 68 61 72 2c 20 75 63 68 61  st be char, ucha
9ea0: 72 2c 20 73 68 6f 72 74 2c 20 75 73 68 6f 72 74  r, short, ushort
9eb0: 2c 20 69 6e 74 2c 20 75 69 6e 74 2c 20 6c 6f 6e  , int, uint, lon
9ec0: 67 2c 20 75 6c 6f 6e 67 2c 20 77 69 64 65 2c 20  g, ulong, wide, 
9ed0: 75 77 69 64 65 2c 20 66 6c 6f 61 74 2c 20 64 6f  uwide, float, do
9ee0: 75 62 6c 65 2c 20 73 74 72 69 6e 67 2c 20 63 68  uble, string, ch
9ef0: 61 72 2a 2c 20 6f 72 20 62 69 6e 61 72 79 0a 2b  ar*, or binary.+
9f00: 77 72 6f 6e 67 20 61 72 72 61 79 20 73 69 7a 65  wrong array size
9f10: 20 67 69 76 65 6e 7d 0a 2b 74 65 73 74 20 6c 69   given}.+test li
9f20: 6e 6b 2d 31 30 2e 31 20 7b 6c 69 6e 6b 61 72 72  nk-10.1 {linkarr
9f30: 61 79 20 63 68 61 72 2a 7d 20 7b 0a 2b 20 20 73  ay char*} {.+  s
9f40: 65 74 20 6d 79 6c 69 73 74 20 5b 6c 69 73 74 5d  et mylist [list]
9f50: 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61  .+  testlinkarra
9f60: 79 20 63 72 65 61 74 65 20 63 68 61 72 2a 20 31  y create char* 1
9f70: 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 6c 61   ::my(var).+  la
9f80: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 5b 73 65  ppend mylist [se
9f90: 74 20 3a 3a 6d 79 28 76 61 72 29 20 22 22 5d 0a  t ::my(var) ""].
9fa0: 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a  +  catch {set ::
9fb0: 6d 79 28 76 61 72 29 20 78 7d 20 6d 79 28 6d 73  my(var) x} my(ms
9fc0: 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69  g); lappend myli
9fd0: 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65  st $my(msg);unse
9fe0: 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65 73  t my(msg).+  tes
9ff0: 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76  tlinkarray remov
a000: 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 74  e ::my(var).+  t
a010: 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65  estlinkarray cre
a020: 61 74 65 20 63 68 61 72 2a 20 34 20 3a 3a 6d 79  ate char* 4 ::my
a030: 28 76 61 72 29 0a 2b 20 20 73 65 74 20 3a 3a 6d  (var).+  set ::m
a040: 79 28 76 61 72 29 20 78 0a 2b 20 20 63 61 74 63  y(var) x.+  catc
a050: 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29  h {set ::my(var)
a060: 20 78 79 7a 7a 7d 20 6d 79 28 6d 73 67 29 3b 20   xyzz} my(msg); 
a070: 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24  lappend mylist $
a080: 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79  my(msg);unset my
a090: 28 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c 69 6e  (msg).+  testlin
a0a0: 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a  karray remove ::
a0b0: 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 73 74 6c  my(var).+  testl
a0c0: 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 20  inkarray create 
a0d0: 2d 72 20 63 68 61 72 2a 20 34 20 3a 3a 6d 79 28  -r char* 4 ::my(
a0e0: 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20 7b 73  var).+  catch {s
a0f0: 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 78 7d 20  et ::my(var) x} 
a100: 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64  my(msg); lappend
a110: 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29   mylist $my(msg)
a120: 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b  ;unset my(msg).+
a130: 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20    testlinkarray 
a140: 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29  remove ::my(var)
a150: 3b 20 75 6e 73 65 74 20 6d 79 3b 20 6a 6f 69 6e  ; unset my; join
a160: 20 24 6d 79 6c 69 73 74 20 22 5c 6e 22 0a 2b 7d   $mylist "\n".+}
a170: 20 7b 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a   {.+can't set ":
a180: 3a 6d 79 28 76 61 72 29 22 3a 20 77 72 6f 6e 67  :my(var)": wrong
a190: 20 73 69 7a 65 20 6f 66 20 63 68 61 72 2a 20 76   size of char* v
a1a0: 61 6c 75 65 0a 2b 63 61 6e 27 74 20 73 65 74 20  alue.+can't set 
a1b0: 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 77 72 6f  "::my(var)": wro
a1c0: 6e 67 20 73 69 7a 65 20 6f 66 20 63 68 61 72 2a  ng size of char*
a1d0: 20 76 61 6c 75 65 0a 2b 63 61 6e 27 74 20 73 65   value.+can't se
a1e0: 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 6c  t "::my(var)": l
a1f0: 69 6e 6b 65 64 20 76 61 72 69 61 62 6c 65 20 69  inked variable i
a200: 73 20 72 65 61 64 2d 6f 6e 6c 79 7d 0a 2b 74 65  s read-only}.+te
a210: 73 74 20 6c 69 6e 6b 2d 31 31 2e 31 20 7b 6c 69  st link-11.1 {li
a220: 6e 6b 61 72 72 61 79 20 63 68 61 72 7d 20 7b 0a  nkarray char} {.
a230: 2b 20 20 73 65 74 20 6d 79 6c 69 73 74 20 5b 6c  +  set mylist [l
a240: 69 73 74 5d 0a 2b 20 20 74 65 73 74 6c 69 6e 6b  ist].+  testlink
a250: 61 72 72 61 79 20 63 72 65 61 74 65 20 63 68 61  array create cha
a260: 72 20 31 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20  r 1 ::my(var).+ 
a270: 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79   catch {set ::my
a280: 28 76 61 72 29 20 78 7d 20 6d 79 28 6d 73 67 29  (var) x} my(msg)
a290: 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74  ; lappend mylist
a2a0: 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20   $my(msg);unset 
a2b0: 6d 79 28 6d 73 67 29 0a 2b 20 20 6c 61 70 70 65  my(msg).+  lappe
a2c0: 6e 64 20 6d 79 6c 69 73 74 20 5b 73 65 74 20 3a  nd mylist [set :
a2d0: 3a 6d 79 28 76 61 72 29 20 31 32 30 5d 0a 2b 20  :my(var) 120].+ 
a2e0: 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79   catch {set ::my
a2f0: 28 76 61 72 29 20 31 32 33 34 7d 20 6d 79 28 6d  (var) 1234} my(m
a300: 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c  sg); lappend myl
a310: 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73  ist $my(msg);uns
a320: 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65  et my(msg).+  te
a330: 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f  stlinkarray remo
a340: 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20  ve ::my(var).+  
a350: 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72  testlinkarray cr
a360: 65 61 74 65 20 63 68 61 72 20 34 20 3a 3a 6d 79  eate char 4 ::my
a370: 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20 7b  (var).+  catch {
a380: 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31  set ::my(var) {1
a390: 20 32 20 33 7d 7d 20 6d 79 28 6d 73 67 29 3b 20   2 3}} my(msg); 
a3a0: 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24  lappend mylist $
a3b0: 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79  my(msg);unset my
a3c0: 28 6d 73 67 29 0a 2b 20 20 73 65 74 20 3a 3a 6d  (msg).+  set ::m
a3d0: 79 28 76 61 72 29 20 7b 31 20 32 20 33 20 34 7d  y(var) {1 2 3 4}
a3e0: 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69  .+  lappend myli
a3f0: 73 74 20 24 6d 79 28 76 61 72 29 0a 2b 20 20 74  st $my(var).+  t
a400: 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d  estlinkarray rem
a410: 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20  ove ::my(var).+ 
a420: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63   testlinkarray c
a430: 72 65 61 74 65 20 2d 72 20 63 68 61 72 20 32 20  reate -r char 2 
a440: 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 74  ::my(var).+  cat
a450: 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72  ch {set ::my(var
a460: 29 20 7b 31 20 32 7d 7d 20 6d 79 28 6d 73 67 29  ) {1 2}} my(msg)
a470: 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74  ; lappend mylist
a480: 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20   $my(msg);unset 
a490: 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c  my(msg).+  testl
a4a0: 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20  inkarray remove 
a4b0: 3a 3a 6d 79 28 76 61 72 29 3b 20 75 6e 73 65 74  ::my(var); unset
a4c0: 20 6d 79 3b 20 6a 6f 69 6e 20 24 6d 79 6c 69 73   my; join $mylis
a4d0: 74 20 22 5c 6e 22 0a 2b 7d 20 7b 63 61 6e 27 74  t "\n".+} {can't
a4e0: 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22   set "::my(var)"
a4f0: 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20  : variable must 
a500: 68 61 76 65 20 63 68 61 72 20 76 61 6c 75 65 0a  have char value.
a510: 2b 31 32 30 0a 2b 63 61 6e 27 74 20 73 65 74 20  +120.+can't set 
a520: 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 76 61 72  "::my(var)": var
a530: 69 61 62 6c 65 20 6d 75 73 74 20 68 61 76 65 20  iable must have 
a540: 63 68 61 72 20 76 61 6c 75 65 0a 2b 63 61 6e 27  char value.+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 77 72 6f 6e 67 20 64 69 6d 65 6e 73 69  ": wrong dimensi
a570: 6f 6e 0a 2b 31 20 32 20 33 20 34 0a 2b 63 61 6e  on.+1 2 3 4.+can
a580: 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72  't set "::my(var
a590: 29 22 3a 20 6c 69 6e 6b 65 64 20 76 61 72 69 61  )": linked varia
a5a0: 62 6c 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79  ble is read-only
a5b0: 7d 0a 2b 74 65 73 74 20 6c 69 6e 6b 2d 31 32 2e  }.+test link-12.
a5c0: 31 20 7b 6c 69 6e 6b 61 72 72 61 79 20 75 6e 73  1 {linkarray uns
a5d0: 69 67 6e 65 64 20 63 68 61 72 7d 20 7b 0a 2b 20  igned char} {.+ 
a5e0: 20 73 65 74 20 6d 79 6c 69 73 74 20 5b 6c 69 73   set mylist [lis
a5f0: 74 5d 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72  t].+  testlinkar
a600: 72 61 79 20 63 72 65 61 74 65 20 75 63 68 61 72  ray create uchar
a610: 20 31 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20   1 ::my(var).+  
a620: 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28  catch {set ::my(
a630: 76 61 72 29 20 78 7d 20 6d 79 28 6d 73 67 29 3b  var) x} my(msg);
a640: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20   lappend mylist 
a650: 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d  $my(msg);unset m
a660: 79 28 6d 73 67 29 0a 2b 20 20 6c 61 70 70 65 6e  y(msg).+  lappen
a670: 64 20 6d 79 6c 69 73 74 20 5b 73 65 74 20 3a 3a  d mylist [set ::
a680: 6d 79 28 76 61 72 29 20 31 32 30 5d 0a 2b 20 20  my(var) 120].+  
a690: 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28  catch {set ::my(
a6a0: 76 61 72 29 20 31 32 33 34 7d 20 6d 79 28 6d 73  var) 1234} my(ms
a6b0: 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69  g); lappend myli
a6c0: 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65  st $my(msg);unse
a6d0: 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 63 61 74  t my(msg).+  cat
a6e0: 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72  ch {set ::my(var
a6f0: 29 20 2d 31 7d 20 6d 79 28 6d 73 67 29 3b 20 6c  ) -1} my(msg); l
a700: 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d  append mylist $m
a710: 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28  y(msg);unset my(
a720: 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b  msg).+  testlink
a730: 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d  array remove ::m
a740: 79 28 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69  y(var).+  testli
a750: 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 20 75  nkarray create u
a760: 63 68 61 72 20 34 20 3a 3a 6d 79 28 76 61 72 29  char 4 ::my(var)
a770: 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a  .+  catch {set :
a780: 3a 6d 79 28 76 61 72 29 20 7b 31 20 32 20 33 7d  :my(var) {1 2 3}
a790: 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65  } my(msg); lappe
a7a0: 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73  nd mylist $my(ms
a7b0: 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29  g);unset my(msg)
a7c0: 0a 2b 20 20 73 65 74 20 3a 3a 6d 79 28 76 61 72  .+  set ::my(var
a7d0: 29 20 7b 31 20 32 20 33 20 34 7d 0a 2b 20 20 6c  ) {1 2 3 4}.+  l
a7e0: 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d  append mylist $m
a7f0: 79 28 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69  y(var).+  testli
a800: 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a  nkarray remove :
a810: 3a 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 73 74  :my(var).+  test
a820: 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65  linkarray create
a830: 20 2d 72 20 75 63 68 61 72 20 32 20 3a 3a 6d 79   -r uchar 2 ::my
a840: 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20 7b  (var).+  catch {
a850: 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31  set ::my(var) {1
a860: 20 32 7d 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61   2}} my(msg); la
a870: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79  ppend mylist $my
a880: 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d  (msg);unset my(m
a890: 73 67 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61  sg).+  testlinka
a8a0: 72 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79  rray remove ::my
a8b0: 28 76 61 72 29 3b 20 75 6e 73 65 74 20 6d 79 3b  (var); unset my;
a8c0: 20 6a 6f 69 6e 20 24 6d 79 6c 69 73 74 20 22 5c   join $mylist "\
a8d0: 6e 22 0a 2b 7d 20 7b 63 61 6e 27 74 20 73 65 74  n".+} {can't set
a8e0: 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 76 61   "::my(var)": va
a8f0: 72 69 61 62 6c 65 20 6d 75 73 74 20 68 61 76 65  riable must have
a900: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 76   unsigned char v
a910: 61 6c 75 65 0a 2b 31 32 30 0a 2b 63 61 6e 27 74  alue.+120.+can't
a920: 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22   set "::my(var)"
a930: 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20  : variable must 
a940: 68 61 76 65 20 75 6e 73 69 67 6e 65 64 20 63 68  have unsigned ch
a950: 61 72 20 76 61 6c 75 65 0a 2b 63 61 6e 27 74 20  ar value.+can't 
a960: 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a  set "::my(var)":
a970: 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20 68   variable must h
a980: 61 76 65 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ave unsigned cha
a990: 72 20 76 61 6c 75 65 0a 2b 63 61 6e 27 74 20 73  r value.+can't s
a9a0: 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20  et "::my(var)": 
a9b0: 77 72 6f 6e 67 20 64 69 6d 65 6e 73 69 6f 6e 0a  wrong dimension.
a9c0: 2b 31 20 32 20 33 20 34 0a 2b 63 61 6e 27 74 20  +1 2 3 4.+can't 
a9d0: 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a  set "::my(var)":
a9e0: 20 6c 69 6e 6b 65 64 20 76 61 72 69 61 62 6c 65   linked variable
a9f0: 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 7d 0a 2b   is read-only}.+
aa00: 74 65 73 74 20 6c 69 6e 6b 2d 31 33 2e 31 20 7b  test link-13.1 {
aa10: 6c 69 6e 6b 61 72 72 61 79 20 73 68 6f 72 74 7d  linkarray short}
aa20: 20 7b 0a 2b 20 20 73 65 74 20 6d 79 6c 69 73 74   {.+  set mylist
aa30: 20 5b 6c 69 73 74 5d 0a 2b 20 20 74 65 73 74 6c   [list].+  testl
aa40: 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 20  inkarray create 
aa50: 73 68 6f 72 74 20 31 20 3a 3a 6d 79 28 76 61 72  short 1 ::my(var
aa60: 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20  ).+  catch {set 
aa70: 3a 3a 6d 79 28 76 61 72 29 20 78 7d 20 6d 79 28  ::my(var) x} my(
aa80: 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79  msg); lappend my
aa90: 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e  list $my(msg);un
aaa0: 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 6c  set my(msg).+  l
aab0: 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 5b 73  append mylist [s
aac0: 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 32 30  et ::my(var) 120
aad0: 5d 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20  ].+  catch {set 
aae0: 3a 3a 6d 79 28 76 61 72 29 20 31 32 33 34 35 36  ::my(var) 123456
aaf0: 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65  } my(msg); lappe
ab00: 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73  nd mylist $my(ms
ab10: 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29  g);unset my(msg)
ab20: 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61  .+  testlinkarra
ab30: 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61  y remove ::my(va
ab40: 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72  r).+  testlinkar
ab50: 72 61 79 20 63 72 65 61 74 65 20 73 68 6f 72 74  ray create short
ab60: 20 34 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20   4 ::my(var).+  
ab70: 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28  catch {set ::my(
ab80: 76 61 72 29 20 7b 31 20 32 20 33 7d 7d 20 6d 79  var) {1 2 3}} my
ab90: 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d  (msg); lappend m
aba0: 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75  ylist $my(msg);u
abb0: 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20  nset my(msg).+  
abc0: 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31  set ::my(var) {1
abd0: 20 32 20 33 20 34 7d 0a 2b 20 20 6c 61 70 70 65   2 3 4}.+  lappe
abe0: 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 76 61  nd mylist $my(va
abf0: 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72  r).+  testlinkar
ac00: 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28  ray remove ::my(
ac10: 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b  var).+  testlink
ac20: 61 72 72 61 79 20 63 72 65 61 74 65 20 2d 72 20  array create -r 
ac30: 73 68 6f 72 74 20 32 20 3a 3a 6d 79 28 76 61 72  short 2 ::my(var
ac40: 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20  ).+  catch {set 
ac50: 3a 3a 6d 79 28 76 61 72 29 20 7b 31 20 32 7d 7d  ::my(var) {1 2}}
ac60: 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e   my(msg); lappen
ac70: 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67  d mylist $my(msg
ac80: 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a  );unset my(msg).
ac90: 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79  +  testlinkarray
aca0: 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72   remove ::my(var
acb0: 29 3b 20 75 6e 73 65 74 20 6d 79 3b 20 6a 6f 69  ); unset my; joi
acc0: 6e 20 24 6d 79 6c 69 73 74 20 22 5c 6e 22 0a 2b  n $mylist "\n".+
acd0: 7d 20 7b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a  } {can't set "::
ace0: 6d 79 28 76 61 72 29 22 3a 20 76 61 72 69 61 62  my(var)": variab
acf0: 6c 65 20 6d 75 73 74 20 68 61 76 65 20 73 68 6f  le must have sho
ad00: 72 74 20 76 61 6c 75 65 0a 2b 31 32 30 0a 2b 63  rt value.+120.+c
ad10: 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76  an't set "::my(v
ad20: 61 72 29 22 3a 20 76 61 72 69 61 62 6c 65 20 6d  ar)": variable m
ad30: 75 73 74 20 68 61 76 65 20 73 68 6f 72 74 20 76  ust have short v
ad40: 61 6c 75 65 0a 2b 63 61 6e 27 74 20 73 65 74 20  alue.+can't set 
ad50: 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 77 72 6f  "::my(var)": wro
ad60: 6e 67 20 64 69 6d 65 6e 73 69 6f 6e 0a 2b 31 20  ng dimension.+1 
ad70: 32 20 33 20 34 0a 2b 63 61 6e 27 74 20 73 65 74  2 3 4.+can't set
ad80: 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 6c 69   "::my(var)": li
ad90: 6e 6b 65 64 20 76 61 72 69 61 62 6c 65 20 69 73  nked variable is
ada0: 20 72 65 61 64 2d 6f 6e 6c 79 7d 0a 2b 74 65 73   read-only}.+tes
adb0: 74 20 6c 69 6e 6b 2d 31 34 2e 31 20 7b 6c 69 6e  t link-14.1 {lin
adc0: 6b 61 72 72 61 79 20 75 6e 73 69 67 6e 65 64 20  karray unsigned 
add0: 73 68 6f 72 74 7d 20 7b 0a 2b 20 20 73 65 74 20  short} {.+  set 
ade0: 6d 79 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 2b 20  mylist [list].+ 
adf0: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63   testlinkarray c
ae00: 72 65 61 74 65 20 75 73 68 6f 72 74 20 31 20 3a  reate ushort 1 :
ae10: 3a 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63  :my(var).+  catc
ae20: 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29  h {set ::my(var)
ae30: 20 78 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70   x} my(msg); lap
ae40: 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28  pend mylist $my(
ae50: 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73  msg);unset my(ms
ae60: 67 29 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79  g).+  lappend my
ae70: 6c 69 73 74 20 5b 73 65 74 20 3a 3a 6d 79 28 76  list [set ::my(v
ae80: 61 72 29 20 31 32 30 5d 0a 2b 20 20 63 61 74 63  ar) 120].+  catc
ae90: 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29  h {set ::my(var)
aea0: 20 31 32 33 34 35 36 7d 20 6d 79 28 6d 73 67 29   123456} my(msg)
aeb0: 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74  ; lappend mylist
aec0: 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20   $my(msg);unset 
aed0: 6d 79 28 6d 73 67 29 0a 2b 20 20 63 61 74 63 68  my(msg).+  catch
aee0: 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20   {set ::my(var) 
aef0: 2d 31 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70  -1} my(msg); lap
af00: 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28  pend mylist $my(
af10: 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73  msg);unset my(ms
af20: 67 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72  g).+  testlinkar
af30: 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28  ray remove ::my(
af40: 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b  var).+  testlink
af50: 61 72 72 61 79 20 63 72 65 61 74 65 20 75 73 68  array create ush
af60: 6f 72 74 20 34 20 3a 3a 6d 79 28 76 61 72 29 0a  ort 4 ::my(var).
af70: 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a  +  catch {set ::
af80: 6d 79 28 76 61 72 29 20 7b 31 20 32 20 33 7d 7d  my(var) {1 2 3}}
af90: 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e   my(msg); lappen
afa0: 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67  d mylist $my(msg
afb0: 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a  );unset my(msg).
afc0: 2b 20 20 73 65 74 20 3a 3a 6d 79 28 76 61 72 29  +  set ::my(var)
afd0: 20 7b 31 20 32 20 33 20 34 7d 0a 2b 20 20 6c 61   {1 2 3 4}.+  la
afe0: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79  ppend mylist $my
aff0: 28 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e  (var).+  testlin
b000: 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a  karray remove ::
b010: 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 73 74 6c  my(var).+  testl
b020: 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 20  inkarray create 
b030: 2d 72 20 75 73 68 6f 72 74 20 32 20 3a 3a 6d 79  -r ushort 2 ::my
b040: 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20 7b  (var).+  catch {
b050: 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31  set ::my(var) {1
b060: 20 32 7d 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61   2}} my(msg); la
b070: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79  ppend mylist $my
b080: 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d  (msg);unset my(m
b090: 73 67 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61  sg).+  testlinka
b0a0: 72 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79  rray remove ::my
b0b0: 28 76 61 72 29 3b 20 75 6e 73 65 74 20 6d 79 3b  (var); unset my;
b0c0: 20 6a 6f 69 6e 20 24 6d 79 6c 69 73 74 20 22 5c   join $mylist "\
b0d0: 6e 22 0a 2b 7d 20 7b 63 61 6e 27 74 20 73 65 74  n".+} {can't set
b0e0: 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 76 61   "::my(var)": va
b0f0: 72 69 61 62 6c 65 20 6d 75 73 74 20 68 61 76 65  riable must have
b100: 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20   unsigned short 
b110: 76 61 6c 75 65 0a 2b 31 32 30 0a 2b 63 61 6e 27  value.+120.+can'
b120: 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29  t set "::my(var)
b130: 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74  ": variable must
b140: 20 68 61 76 65 20 75 6e 73 69 67 6e 65 64 20 73   have unsigned s
b150: 68 6f 72 74 20 76 61 6c 75 65 0a 2b 63 61 6e 27  hort value.+can'
b160: 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29  t set "::my(var)
b170: 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74  ": variable must
b180: 20 68 61 76 65 20 75 6e 73 69 67 6e 65 64 20 73   have unsigned s
b190: 68 6f 72 74 20 76 61 6c 75 65 0a 2b 63 61 6e 27  hort value.+can'
b1a0: 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29  t set "::my(var)
b1b0: 22 3a 20 77 72 6f 6e 67 20 64 69 6d 65 6e 73 69  ": wrong dimensi
b1c0: 6f 6e 0a 2b 31 20 32 20 33 20 34 0a 2b 63 61 6e  on.+1 2 3 4.+can
b1d0: 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72  't set "::my(var
b1e0: 29 22 3a 20 6c 69 6e 6b 65 64 20 76 61 72 69 61  )": linked varia
b1f0: 62 6c 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79  ble is read-only
b200: 7d 0a 2b 74 65 73 74 20 6c 69 6e 6b 2d 31 35 2e  }.+test link-15.
b210: 31 20 7b 6c 69 6e 6b 61 72 72 61 79 20 69 6e 74  1 {linkarray int
b220: 7d 20 7b 0a 2b 20 20 73 65 74 20 6d 79 6c 69 73  } {.+  set mylis
b230: 74 20 5b 6c 69 73 74 5d 0a 2b 20 20 74 65 73 74  t [list].+  test
b240: 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65  linkarray create
b250: 20 69 6e 74 20 31 20 3a 3a 6d 79 28 76 61 72 29   int 1 ::my(var)
b260: 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a  .+  catch {set :
b270: 3a 6d 79 28 76 61 72 29 20 78 7d 20 6d 79 28 6d  :my(var) x} my(m
b280: 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c  sg); lappend myl
b290: 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73  ist $my(msg);uns
b2a0: 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 6c 61  et my(msg).+  la
b2b0: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 5b 73 65  ppend mylist [se
b2c0: 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 32 30 5d  t ::my(var) 120]
b2d0: 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a  .+  catch {set :
b2e0: 3a 6d 79 28 76 61 72 29 20 31 65 33 7d 20 6d 79  :my(var) 1e3} my
b2f0: 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d  (msg); lappend m
b300: 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75  ylist $my(msg);u
b310: 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20  nset my(msg).+  
b320: 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65  testlinkarray re
b330: 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b  move ::my(var).+
b340: 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20    testlinkarray 
b350: 63 72 65 61 74 65 20 69 6e 74 20 34 20 3a 3a 6d  create int 4 ::m
b360: 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20  y(var).+  catch 
b370: 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b  {set ::my(var) {
b380: 31 20 32 20 33 7d 7d 20 6d 79 28 6d 73 67 29 3b  1 2 3}} my(msg);
b390: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20   lappend mylist 
b3a0: 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d  $my(msg);unset m
b3b0: 79 28 6d 73 67 29 0a 2b 20 20 73 65 74 20 3a 3a  y(msg).+  set ::
b3c0: 6d 79 28 76 61 72 29 20 7b 31 20 32 20 33 20 34  my(var) {1 2 3 4
b3d0: 7d 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c  }.+  lappend myl
b3e0: 69 73 74 20 24 6d 79 28 76 61 72 29 0a 2b 20 20  ist $my(var).+  
b3f0: 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65  testlinkarray re
b400: 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b  move ::my(var).+
b410: 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20    testlinkarray 
b420: 63 72 65 61 74 65 20 2d 72 20 69 6e 74 20 32 20  create -r int 2 
b430: 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 74  ::my(var).+  cat
b440: 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72  ch {set ::my(var
b450: 29 20 7b 31 20 32 7d 7d 20 6d 79 28 6d 73 67 29  ) {1 2}} my(msg)
b460: 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74  ; lappend mylist
b470: 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20   $my(msg);unset 
b480: 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c  my(msg).+  testl
b490: 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20  inkarray remove 
b4a0: 3a 3a 6d 79 28 76 61 72 29 3b 20 75 6e 73 65 74  ::my(var); unset
b4b0: 20 6d 79 3b 20 6a 6f 69 6e 20 24 6d 79 6c 69 73   my; join $mylis
b4c0: 74 20 22 5c 6e 22 0a 2b 7d 20 7b 63 61 6e 27 74  t "\n".+} {can't
b4d0: 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22   set "::my(var)"
b4e0: 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20  : variable must 
b4f0: 68 61 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  have integer val
b500: 75 65 0a 2b 31 32 30 0a 2b 63 61 6e 27 74 20 73  ue.+120.+can't s
b510: 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20  et "::my(var)": 
b520: 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20 68 61  variable must ha
b530: 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ve integer value
b540: 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d  .+can't set "::m
b550: 79 28 76 61 72 29 22 3a 20 77 72 6f 6e 67 20 64  y(var)": wrong d
b560: 69 6d 65 6e 73 69 6f 6e 0a 2b 31 20 32 20 33 20  imension.+1 2 3 
b570: 34 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a  4.+can't set "::
b580: 6d 79 28 76 61 72 29 22 3a 20 6c 69 6e 6b 65 64  my(var)": linked
b590: 20 76 61 72 69 61 62 6c 65 20 69 73 20 72 65 61   variable is rea
b5a0: 64 2d 6f 6e 6c 79 7d 0a 2b 74 65 73 74 20 6c 69  d-only}.+test li
b5b0: 6e 6b 2d 31 36 2e 31 20 7b 6c 69 6e 6b 61 72 72  nk-16.1 {linkarr
b5c0: 61 79 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 7d  ay unsigned int}
b5d0: 20 7b 0a 2b 20 20 73 65 74 20 6d 79 6c 69 73 74   {.+  set mylist
b5e0: 20 5b 6c 69 73 74 5d 0a 2b 20 20 74 65 73 74 6c   [list].+  testl
b5f0: 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 20  inkarray create 
b600: 75 69 6e 74 20 31 20 3a 3a 6d 79 28 76 61 72 29  uint 1 ::my(var)
b610: 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a  .+  catch {set :
b620: 3a 6d 79 28 76 61 72 29 20 78 7d 20 6d 79 28 6d  :my(var) x} my(m
b630: 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c  sg); lappend myl
b640: 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73  ist $my(msg);uns
b650: 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 6c 61  et my(msg).+  la
b660: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 5b 73 65  ppend mylist [se
b670: 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 32 30 5d  t ::my(var) 120]
b680: 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a  .+  catch {set :
b690: 3a 6d 79 28 76 61 72 29 20 31 65 33 33 7d 20 6d  :my(var) 1e33} m
b6a0: 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20  y(msg); lappend 
b6b0: 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b  mylist $my(msg);
b6c0: 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20  unset my(msg).+ 
b6d0: 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79   catch {set ::my
b6e0: 28 76 61 72 29 20 2d 31 7d 20 6d 79 28 6d 73 67  (var) -1} my(msg
b6f0: 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73  ); lappend mylis
b700: 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74  t $my(msg);unset
b710: 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65 73 74   my(msg).+  test
b720: 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 65  linkarray remove
b730: 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 74 65   ::my(var).+  te
b740: 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 61  stlinkarray crea
b750: 74 65 20 75 69 6e 74 20 34 20 3a 3a 6d 79 28 76  te uint 4 ::my(v
b760: 61 72 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65  ar).+  catch {se
b770: 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31 20 32  t ::my(var) {1 2
b780: 20 33 7d 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61   3}} my(msg); la
b790: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79  ppend mylist $my
b7a0: 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d  (msg);unset my(m
b7b0: 73 67 29 0a 2b 20 20 73 65 74 20 3a 3a 6d 79 28  sg).+  set ::my(
b7c0: 76 61 72 29 20 7b 31 20 32 20 33 20 34 7d 0a 2b  var) {1 2 3 4}.+
b7d0: 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74    lappend mylist
b7e0: 20 24 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 73   $my(var).+  tes
b7f0: 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76  tlinkarray remov
b800: 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 74  e ::my(var).+  t
b810: 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65  estlinkarray cre
b820: 61 74 65 20 2d 72 20 75 69 6e 74 20 32 20 3a 3a  ate -r uint 2 ::
b830: 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68  my(var).+  catch
b840: 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20   {set ::my(var) 
b850: 7b 31 20 32 7d 7d 20 6d 79 28 6d 73 67 29 3b 20  {1 2}} my(msg); 
b860: 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24  lappend mylist $
b870: 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79  my(msg);unset my
b880: 28 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c 69 6e  (msg).+  testlin
b890: 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a  karray remove ::
b8a0: 6d 79 28 76 61 72 29 3b 20 75 6e 73 65 74 20 6d  my(var); unset m
b8b0: 79 3b 20 6a 6f 69 6e 20 24 6d 79 6c 69 73 74 20  y; join $mylist 
b8c0: 22 5c 6e 22 0a 2b 7d 20 7b 63 61 6e 27 74 20 73  "\n".+} {can't s
b8d0: 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20  et "::my(var)": 
b8e0: 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20 68 61  variable must ha
b8f0: 76 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ve unsigned int 
b900: 76 61 6c 75 65 0a 2b 31 32 30 0a 2b 63 61 6e 27  value.+120.+can'
b910: 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29  t set "::my(var)
b920: 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74  ": variable must
b930: 20 68 61 76 65 20 75 6e 73 69 67 6e 65 64 20 69   have unsigned i
b940: 6e 74 20 76 61 6c 75 65 0a 2b 63 61 6e 27 74 20  nt value.+can't 
b950: 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a  set "::my(var)":
b960: 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20 68   variable must h
b970: 61 76 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  ave unsigned int
b980: 20 76 61 6c 75 65 0a 2b 63 61 6e 27 74 20 73 65   value.+can't se
b990: 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 77  t "::my(var)": w
b9a0: 72 6f 6e 67 20 64 69 6d 65 6e 73 69 6f 6e 0a 2b  rong dimension.+
b9b0: 31 20 32 20 33 20 34 0a 2b 63 61 6e 27 74 20 73  1 2 3 4.+can't s
b9c0: 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20  et "::my(var)": 
b9d0: 6c 69 6e 6b 65 64 20 76 61 72 69 61 62 6c 65 20  linked variable 
b9e0: 69 73 20 72 65 61 64 2d 6f 6e 6c 79 7d 0a 2b 74  is read-only}.+t
b9f0: 65 73 74 20 6c 69 6e 6b 2d 31 37 2e 31 20 7b 6c  est link-17.1 {l
ba00: 69 6e 6b 61 72 72 61 79 20 6c 6f 6e 67 7d 20 7b  inkarray long} {
ba10: 0a 2b 20 20 73 65 74 20 6d 79 6c 69 73 74 20 5b  .+  set mylist [
ba20: 6c 69 73 74 5d 0a 2b 20 20 74 65 73 74 6c 69 6e  list].+  testlin
ba30: 6b 61 72 72 61 79 20 63 72 65 61 74 65 20 6c 6f  karray create lo
ba40: 6e 67 20 31 20 3a 3a 6d 79 28 76 61 72 29 0a 2b  ng 1 ::my(var).+
ba50: 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d    catch {set ::m
ba60: 79 28 76 61 72 29 20 78 7d 20 6d 79 28 6d 73 67  y(var) x} my(msg
ba70: 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73  ); lappend mylis
ba80: 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74  t $my(msg);unset
ba90: 20 6d 79 28 6d 73 67 29 0a 2b 20 20 6c 61 70 70   my(msg).+  lapp
baa0: 65 6e 64 20 6d 79 6c 69 73 74 20 5b 73 65 74 20  end mylist [set 
bab0: 3a 3a 6d 79 28 76 61 72 29 20 31 32 30 5d 0a 2b  ::my(var) 120].+
bac0: 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d    catch {set ::m
bad0: 79 28 76 61 72 29 20 31 65 33 33 7d 20 6d 79 28  y(var) 1e33} my(
bae0: 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79  msg); lappend my
baf0: 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e  list $my(msg);un
bb00: 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74  set my(msg).+  t
bb10: 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d  estlinkarray rem
bb20: 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20  ove ::my(var).+ 
bb30: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63   testlinkarray c
bb40: 72 65 61 74 65 20 6c 6f 6e 67 20 34 20 3a 3a 6d  reate long 4 ::m
bb50: 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20  y(var).+  catch 
bb60: 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b  {set ::my(var) {
bb70: 31 20 32 20 33 7d 7d 20 6d 79 28 6d 73 67 29 3b  1 2 3}} my(msg);
bb80: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20   lappend mylist 
bb90: 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d  $my(msg);unset m
bba0: 79 28 6d 73 67 29 0a 2b 20 20 73 65 74 20 3a 3a  y(msg).+  set ::
bbb0: 6d 79 28 76 61 72 29 20 7b 31 20 32 20 33 20 34  my(var) {1 2 3 4
bbc0: 7d 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c  }.+  lappend myl
bbd0: 69 73 74 20 24 6d 79 28 76 61 72 29 0a 2b 20 20  ist $my(var).+  
bbe0: 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65  testlinkarray re
bbf0: 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b  move ::my(var).+
bc00: 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20    testlinkarray 
bc10: 63 72 65 61 74 65 20 2d 72 20 6c 6f 6e 67 20 32  create -r long 2
bc20: 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 63 61   ::my(var).+  ca
bc30: 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61  tch {set ::my(va
bc40: 72 29 20 7b 31 20 32 7d 7d 20 6d 79 28 6d 73 67  r) {1 2}} my(msg
bc50: 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73  ); lappend mylis
bc60: 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74  t $my(msg);unset
bc70: 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65 73 74   my(msg).+  test
bc80: 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 65  linkarray remove
bc90: 20 3a 3a 6d 79 28 76 61 72 29 3b 20 75 6e 73 65   ::my(var); unse
bca0: 74 20 6d 79 3b 20 6a 6f 69 6e 20 24 6d 79 6c 69  t my; join $myli
bcb0: 73 74 20 22 5c 6e 22 0a 2b 7d 20 7b 63 61 6e 27  st "\n".+} {can'
bcc0: 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29  t set "::my(var)
bcd0: 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74  ": variable must
bce0: 20 68 61 76 65 20 6c 6f 6e 67 20 76 61 6c 75 65   have long value
bcf0: 0a 2b 31 32 30 0a 2b 63 61 6e 27 74 20 73 65 74  .+120.+can't set
bd00: 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 76 61   "::my(var)": va
bd10: 72 69 61 62 6c 65 20 6d 75 73 74 20 68 61 76 65  riable must have
bd20: 20 6c 6f 6e 67 20 76 61 6c 75 65 0a 2b 63 61 6e   long value.+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 77 72 6f 6e 67 20 64 69 6d 65 6e 73  )": wrong dimens
bd50: 69 6f 6e 0a 2b 31 20 32 20 33 20 34 0a 2b 63 61  ion.+1 2 3 4.+ca
bd60: 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61  n't set "::my(va
bd70: 72 29 22 3a 20 6c 69 6e 6b 65 64 20 76 61 72 69  r)": linked vari
bd80: 61 62 6c 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  able is read-onl
bd90: 79 7d 0a 2b 74 65 73 74 20 6c 69 6e 6b 2d 31 38  y}.+test link-18
bda0: 2e 31 20 7b 6c 69 6e 6b 61 72 72 61 79 20 75 6e  .1 {linkarray un
bdb0: 73 69 67 6e 65 64 20 6c 6f 6e 67 7d 20 7b 0a 2b  signed long} {.+
bdc0: 20 20 73 65 74 20 6d 79 6c 69 73 74 20 5b 6c 69    set mylist [li
bdd0: 73 74 5d 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61  st].+  testlinka
bde0: 72 72 61 79 20 63 72 65 61 74 65 20 75 6c 6f 6e  rray create ulon
bdf0: 67 20 31 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20  g 1 ::my(var).+ 
be00: 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79   catch {set ::my
be10: 28 76 61 72 29 20 78 7d 20 6d 79 28 6d 73 67 29  (var) x} my(msg)
be20: 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74  ; lappend mylist
be30: 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20   $my(msg);unset 
be40: 6d 79 28 6d 73 67 29 0a 2b 20 20 6c 61 70 70 65  my(msg).+  lappe
be50: 6e 64 20 6d 79 6c 69 73 74 20 5b 73 65 74 20 3a  nd mylist [set :
be60: 3a 6d 79 28 76 61 72 29 20 31 32 30 5d 0a 2b 20  :my(var) 120].+ 
be70: 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79   catch {set ::my
be80: 28 76 61 72 29 20 31 65 33 33 7d 20 6d 79 28 6d  (var) 1e33} my(m
be90: 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c  sg); lappend myl
bea0: 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73  ist $my(msg);uns
beb0: 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 63 61  et my(msg).+  ca
bec0: 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61  tch {set ::my(va
bed0: 72 29 20 2d 31 7d 20 6d 79 28 6d 73 67 29 3b 20  r) -1} my(msg); 
bee0: 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24  lappend mylist $
bef0: 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79  my(msg);unset my
bf00: 28 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c 69 6e  (msg).+  testlin
bf10: 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a  karray remove ::
bf20: 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 73 74 6c  my(var).+  testl
bf30: 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 20  inkarray create 
bf40: 75 6c 6f 6e 67 20 34 20 3a 3a 6d 79 28 76 61 72  ulong 4 ::my(var
bf50: 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20  ).+  catch {set 
bf60: 3a 3a 6d 79 28 76 61 72 29 20 7b 31 20 32 20 33  ::my(var) {1 2 3
bf70: 7d 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70  }} my(msg); lapp
bf80: 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d  end mylist $my(m
bf90: 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67  sg);unset my(msg
bfa0: 29 0a 2b 20 20 73 65 74 20 3a 3a 6d 79 28 76 61  ).+  set ::my(va
bfb0: 72 29 20 7b 31 20 32 20 33 20 34 7d 0a 2b 20 20  r) {1 2 3 4}.+  
bfc0: 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24  lappend mylist $
bfd0: 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 73 74 6c  my(var).+  testl
bfe0: 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20  inkarray remove 
bff0: 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 73  ::my(var).+  tes
c000: 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74  tlinkarray creat
c010: 65 20 2d 72 20 75 6c 6f 6e 67 20 32 20 3a 3a 6d  e -r ulong 2 ::m
c020: 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20  y(var).+  catch 
c030: 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b  {set ::my(var) {
c040: 31 20 32 7d 7d 20 6d 79 28 6d 73 67 29 3b 20 6c  1 2}} my(msg); l
c050: 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d  append mylist $m
c060: 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28  y(msg);unset my(
c070: 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b  msg).+  testlink
c080: 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d  array remove ::m
c090: 79 28 76 61 72 29 3b 20 75 6e 73 65 74 20 6d 79  y(var); unset my
c0a0: 3b 20 6a 6f 69 6e 20 24 6d 79 6c 69 73 74 20 22  ; join $mylist "
c0b0: 5c 6e 22 0a 2b 7d 20 7b 63 61 6e 27 74 20 73 65  \n".+} {can't se
c0c0: 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 76  t "::my(var)": v
c0d0: 61 72 69 61 62 6c 65 20 6d 75 73 74 20 68 61 76  ariable must hav
c0e0: 65 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20  e unsigned long 
c0f0: 76 61 6c 75 65 0a 2b 31 32 30 0a 2b 63 61 6e 27  value.+120.+can'
c100: 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29  t set "::my(var)
c110: 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74  ": variable must
c120: 20 68 61 76 65 20 75 6e 73 69 67 6e 65 64 20 6c   have unsigned l
c130: 6f 6e 67 20 76 61 6c 75 65 0a 2b 63 61 6e 27 74  ong value.+can't
c140: 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22   set "::my(var)"
c150: 3a 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20  : variable must 
c160: 68 61 76 65 20 75 6e 73 69 67 6e 65 64 20 6c 6f  have unsigned lo
c170: 6e 67 20 76 61 6c 75 65 0a 2b 63 61 6e 27 74 20  ng value.+can't 
c180: 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a  set "::my(var)":
c190: 20 77 72 6f 6e 67 20 64 69 6d 65 6e 73 69 6f 6e   wrong dimension
c1a0: 0a 2b 31 20 32 20 33 20 34 0a 2b 63 61 6e 27 74  .+1 2 3 4.+can't
c1b0: 20 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22   set "::my(var)"
c1c0: 3a 20 6c 69 6e 6b 65 64 20 76 61 72 69 61 62 6c  : linked variabl
c1d0: 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 7d 0a  e is read-only}.
c1e0: 2b 74 65 73 74 20 6c 69 6e 6b 2d 31 39 2e 31 20  +test link-19.1 
c1f0: 7b 6c 69 6e 6b 61 72 72 61 79 20 77 69 64 65 7d  {linkarray wide}
c200: 20 7b 0a 2b 20 20 73 65 74 20 6d 79 6c 69 73 74   {.+  set mylist
c210: 20 5b 6c 69 73 74 5d 0a 2b 20 20 74 65 73 74 6c   [list].+  testl
c220: 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 20  inkarray create 
c230: 77 69 64 65 20 31 20 3a 3a 6d 79 28 76 61 72 29  wide 1 ::my(var)
c240: 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a  .+  catch {set :
c250: 3a 6d 79 28 76 61 72 29 20 78 7d 20 6d 79 28 6d  :my(var) x} my(m
c260: 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c  sg); lappend myl
c270: 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73  ist $my(msg);uns
c280: 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 6c 61  et my(msg).+  la
c290: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 5b 73 65  ppend mylist [se
c2a0: 74 20 3a 3a 6d 79 28 76 61 72 29 20 31 32 30 5d  t ::my(var) 120]
c2b0: 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a  .+  catch {set :
c2c0: 3a 6d 79 28 76 61 72 29 20 31 65 33 33 7d 20 6d  :my(var) 1e33} m
c2d0: 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20  y(msg); lappend 
c2e0: 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b  mylist $my(msg);
c2f0: 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20  unset my(msg).+ 
c300: 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72   testlinkarray r
c310: 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a  emove ::my(var).
c320: 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79  +  testlinkarray
c330: 20 63 72 65 61 74 65 20 77 69 64 65 20 34 20 3a   create wide 4 :
c340: 3a 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63  :my(var).+  catc
c350: 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29  h {set ::my(var)
c360: 20 7b 31 20 32 20 33 7d 7d 20 6d 79 28 6d 73 67   {1 2 3}} my(msg
c370: 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73  ); lappend mylis
c380: 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74  t $my(msg);unset
c390: 20 6d 79 28 6d 73 67 29 0a 2b 20 20 73 65 74 20   my(msg).+  set 
c3a0: 3a 3a 6d 79 28 76 61 72 29 20 7b 31 20 32 20 33  ::my(var) {1 2 3
c3b0: 20 34 7d 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d   4}.+  lappend m
c3c0: 79 6c 69 73 74 20 24 6d 79 28 76 61 72 29 0a 2b  ylist $my(var).+
c3d0: 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20    testlinkarray 
c3e0: 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29  remove ::my(var)
c3f0: 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61  .+  testlinkarra
c400: 79 20 63 72 65 61 74 65 20 2d 72 20 77 69 64 65  y create -r wide
c410: 20 32 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20   2 ::my(var).+  
c420: 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28  catch {set ::my(
c430: 76 61 72 29 20 7b 31 20 32 7d 7d 20 6d 79 28 6d  var) {1 2}} my(m
c440: 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c  sg); lappend myl
c450: 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73  ist $my(msg);uns
c460: 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65  et my(msg).+  te
c470: 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f  stlinkarray remo
c480: 76 65 20 3a 3a 6d 79 28 76 61 72 29 3b 20 75 6e  ve ::my(var); un
c490: 73 65 74 20 6d 79 3b 20 6a 6f 69 6e 20 24 6d 79  set my; join $my
c4a0: 6c 69 73 74 20 22 5c 6e 22 0a 2b 7d 20 7b 63 61  list "\n".+} {ca
c4b0: 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61  n't set "::my(va
c4c0: 72 29 22 3a 20 76 61 72 69 61 62 6c 65 20 6d 75  r)": variable mu
c4d0: 73 74 20 68 61 76 65 20 77 69 64 65 20 69 6e 74  st have wide int
c4e0: 65 67 65 72 20 76 61 6c 75 65 0a 2b 31 32 30 0a  eger value.+120.
c4f0: 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79  +can't set "::my
c500: 28 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c 65  (var)": variable
c510: 20 6d 75 73 74 20 68 61 76 65 20 77 69 64 65 20   must have wide 
c520: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 0a 2b 63  integer value.+c
c530: 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76  an't set "::my(v
c540: 61 72 29 22 3a 20 77 72 6f 6e 67 20 64 69 6d 65  ar)": wrong dime
c550: 6e 73 69 6f 6e 0a 2b 31 20 32 20 33 20 34 0a 2b  nsion.+1 2 3 4.+
c560: 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28  can't set "::my(
c570: 76 61 72 29 22 3a 20 6c 69 6e 6b 65 64 20 76 61  var)": linked va
c580: 72 69 61 62 6c 65 20 69 73 20 72 65 61 64 2d 6f  riable is read-o
c590: 6e 6c 79 7d 0a 2b 74 65 73 74 20 6c 69 6e 6b 2d  nly}.+test link-
c5a0: 32 30 2e 31 20 7b 6c 69 6e 6b 61 72 72 61 79 20  20.1 {linkarray 
c5b0: 75 6e 73 69 67 6e 65 64 20 77 69 64 65 7d 20 7b  unsigned wide} {
c5c0: 0a 2b 20 20 73 65 74 20 6d 79 6c 69 73 74 20 5b  .+  set mylist [
c5d0: 6c 69 73 74 5d 0a 2b 20 20 74 65 73 74 6c 69 6e  list].+  testlin
c5e0: 6b 61 72 72 61 79 20 63 72 65 61 74 65 20 75 77  karray create uw
c5f0: 69 64 65 20 31 20 3a 3a 6d 79 28 76 61 72 29 0a  ide 1 ::my(var).
c600: 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a  +  catch {set ::
c610: 6d 79 28 76 61 72 29 20 78 7d 20 6d 79 28 6d 73  my(var) x} my(ms
c620: 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69  g); lappend myli
c630: 73 74 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65  st $my(msg);unse
c640: 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20 6c 61 70  t my(msg).+  lap
c650: 70 65 6e 64 20 6d 79 6c 69 73 74 20 5b 73 65 74  pend mylist [set
c660: 20 3a 3a 6d 79 28 76 61 72 29 20 31 32 30 5d 0a   ::my(var) 120].
c670: 2b 20 20 63 61 74 63 68 20 7b 73 65 74 20 3a 3a  +  catch {set ::
c680: 6d 79 28 76 61 72 29 20 31 65 33 33 7d 20 6d 79  my(var) 1e33} my
c690: 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20 6d  (msg); lappend m
c6a0: 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b 75  ylist $my(msg);u
c6b0: 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20 20  nset my(msg).+  
c6c0: 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28  catch {set ::my(
c6d0: 76 61 72 29 20 2d 31 7d 20 6d 79 28 6d 73 67 29  var) -1} my(msg)
c6e0: 3b 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74  ; lappend mylist
c6f0: 20 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20   $my(msg);unset 
c700: 6d 79 28 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c  my(msg).+  testl
c710: 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20  inkarray remove 
c720: 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 73  ::my(var).+  tes
c730: 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74  tlinkarray creat
c740: 65 20 75 77 69 64 65 20 34 20 3a 3a 6d 79 28 76  e uwide 4 ::my(v
c750: 61 72 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65  ar).+  catch {se
c760: 74 20 3a 3a 6d 79 28 76 61 72 29 20 7b 31 20 32  t ::my(var) {1 2
c770: 20 33 7d 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61   3}} my(msg); la
c780: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79  ppend mylist $my
c790: 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d  (msg);unset my(m
c7a0: 73 67 29 0a 2b 20 20 73 65 74 20 3a 3a 6d 79 28  sg).+  set ::my(
c7b0: 76 61 72 29 20 7b 31 20 32 20 33 20 34 7d 0a 2b  var) {1 2 3 4}.+
c7c0: 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74    lappend mylist
c7d0: 20 24 6d 79 28 76 61 72 29 0a 2b 20 20 74 65 73   $my(var).+  tes
c7e0: 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76  tlinkarray remov
c7f0: 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 74  e ::my(var).+  t
c800: 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72 65  estlinkarray cre
c810: 61 74 65 20 2d 72 20 75 77 69 64 65 20 32 20 3a  ate -r uwide 2 :
c820: 3a 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63  :my(var).+  catc
c830: 68 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29  h {set ::my(var)
c840: 20 7b 31 20 32 7d 7d 20 6d 79 28 6d 73 67 29 3b   {1 2}} my(msg);
c850: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20   lappend mylist 
c860: 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d  $my(msg);unset m
c870: 79 28 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c 69  y(msg).+  testli
c880: 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a  nkarray remove :
c890: 3a 6d 79 28 76 61 72 29 3b 20 75 6e 73 65 74 20  :my(var); unset 
c8a0: 6d 79 3b 20 6a 6f 69 6e 20 24 6d 79 6c 69 73 74  my; join $mylist
c8b0: 20 22 5c 6e 22 0a 2b 7d 20 7b 63 61 6e 27 74 20   "\n".+} {can't 
c8c0: 73 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a  set "::my(var)":
c8d0: 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20 68   variable must h
c8e0: 61 76 65 20 75 6e 73 69 67 6e 65 64 20 77 69 64  ave unsigned wid
c8f0: 65 20 69 6e 74 20 76 61 6c 75 65 0a 2b 31 32 30  e int value.+120
c900: 0a 2b 63 61 6e 27 74 20 73 65 74 20 22 3a 3a 6d  .+can't set "::m
c910: 79 28 76 61 72 29 22 3a 20 76 61 72 69 61 62 6c  y(var)": variabl
c920: 65 20 6d 75 73 74 20 68 61 76 65 20 75 6e 73 69  e must have unsi
c930: 67 6e 65 64 20 77 69 64 65 20 69 6e 74 20 76 61  gned wide int va
c940: 6c 75 65 0a 2b 63 61 6e 27 74 20 73 65 74 20 22  lue.+can't set "
c950: 3a 3a 6d 79 28 76 61 72 29 22 3a 20 76 61 72 69  ::my(var)": vari
c960: 61 62 6c 65 20 6d 75 73 74 20 68 61 76 65 20 75  able must have u
c970: 6e 73 69 67 6e 65 64 20 77 69 64 65 20 69 6e 74  nsigned wide int
c980: 20 76 61 6c 75 65 0a 2b 63 61 6e 27 74 20 73 65   value.+can't se
c990: 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 77  t "::my(var)": w
c9a0: 72 6f 6e 67 20 64 69 6d 65 6e 73 69 6f 6e 0a 2b  rong dimension.+
c9b0: 31 20 32 20 33 20 34 0a 2b 63 61 6e 27 74 20 73  1 2 3 4.+can't s
c9c0: 65 74 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20  et "::my(var)": 
c9d0: 6c 69 6e 6b 65 64 20 76 61 72 69 61 62 6c 65 20  linked variable 
c9e0: 69 73 20 72 65 61 64 2d 6f 6e 6c 79 7d 0a 2b 74  is read-only}.+t
c9f0: 65 73 74 20 6c 69 6e 6b 2d 32 31 2e 31 20 7b 6c  est link-21.1 {l
ca00: 69 6e 6b 61 72 72 61 79 20 73 74 72 69 6e 67 7d  inkarray string}
ca10: 20 7b 0a 2b 20 20 73 65 74 20 6d 79 6c 69 73 74   {.+  set mylist
ca20: 20 5b 6c 69 73 74 5d 0a 2b 20 20 74 65 73 74 6c   [list].+  testl
ca30: 69 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 20  inkarray create 
ca40: 73 74 72 69 6e 67 20 31 20 3a 3a 6d 79 28 76 61  string 1 ::my(va
ca50: 72 29 0a 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79  r).+  lappend my
ca60: 6c 69 73 74 20 5b 73 65 74 20 3a 3a 6d 79 28 76  list [set ::my(v
ca70: 61 72 29 20 22 22 5d 0a 2b 20 20 6c 61 70 70 65  ar) ""].+  lappe
ca80: 6e 64 20 6d 79 6c 69 73 74 20 5b 73 65 74 20 3a  nd mylist [set :
ca90: 3a 6d 79 28 76 61 72 29 20 22 78 79 7a 22 5d 0a  :my(var) "xyz"].
caa0: 2b 20 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73  +  lappend mylis
cab0: 74 20 24 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20  t $::my(var).+  
cac0: 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65  testlinkarray re
cad0: 6d 6f 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b  move ::my(var).+
cae0: 20 20 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20    testlinkarray 
caf0: 63 72 65 61 74 65 20 2d 72 20 73 74 72 69 6e 67  create -r string
cb00: 20 34 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20   4 ::my(var).+  
cb10: 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 6d 79 28  catch {set ::my(
cb20: 76 61 72 29 20 78 7d 20 6d 79 28 6d 73 67 29 3b  var) x} my(msg);
cb30: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20   lappend mylist 
cb40: 24 6d 79 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d  $my(msg);unset m
cb50: 79 28 6d 73 67 29 0a 2b 20 20 74 65 73 74 6c 69  y(msg).+  testli
cb60: 6e 6b 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a  nkarray remove :
cb70: 3a 6d 79 28 76 61 72 29 3b 20 75 6e 73 65 74 20  :my(var); unset 
cb80: 6d 79 3b 20 6a 6f 69 6e 20 24 6d 79 6c 69 73 74  my; join $mylist
cb90: 20 22 5c 6e 22 0a 2b 7d 20 7b 0a 2b 78 79 7a 0a   "\n".+} {.+xyz.
cba0: 2b 78 79 7a 0a 2b 63 61 6e 27 74 20 73 65 74 20  +xyz.+can't set 
cbb0: 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 6c 69 6e  "::my(var)": lin
cbc0: 6b 65 64 20 76 61 72 69 61 62 6c 65 20 69 73 20  ked variable is 
cbd0: 72 65 61 64 2d 6f 6e 6c 79 7d 0a 2b 74 65 73 74  read-only}.+test
cbe0: 20 6c 69 6e 6b 2d 32 32 2e 31 20 7b 6c 69 6e 6b   link-22.1 {link
cbf0: 61 72 72 61 79 20 62 69 6e 61 72 79 7d 20 7b 0a  array binary} {.
cc00: 2b 20 20 73 65 74 20 6d 79 6c 69 73 74 20 5b 6c  +  set mylist [l
cc10: 69 73 74 5d 0a 2b 20 20 74 65 73 74 6c 69 6e 6b  ist].+  testlink
cc20: 61 72 72 61 79 20 63 72 65 61 74 65 20 62 69 6e  array create bin
cc30: 61 72 79 20 31 20 3a 3a 6d 79 28 76 61 72 29 0a  ary 1 ::my(var).
cc40: 2b 20 20 73 65 74 20 3a 3a 6d 79 28 76 61 72 29  +  set ::my(var)
cc50: 20 78 0a 2b 20 20 63 61 74 63 68 20 7b 73 65 74   x.+  catch {set
cc60: 20 3a 3a 6d 79 28 76 61 72 29 20 78 79 7d 20 6d   ::my(var) xy} m
cc70: 79 28 6d 73 67 29 3b 20 6c 61 70 70 65 6e 64 20  y(msg); lappend 
cc80: 6d 79 6c 69 73 74 20 24 6d 79 28 6d 73 67 29 3b  mylist $my(msg);
cc90: 75 6e 73 65 74 20 6d 79 28 6d 73 67 29 0a 2b 20  unset my(msg).+ 
cca0: 20 6c 61 70 70 65 6e 64 20 6d 79 6c 69 73 74 20   lappend mylist 
ccb0: 24 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20 74 65  $::my(var).+  te
ccc0: 73 74 6c 69 6e 6b 61 72 72 61 79 20 72 65 6d 6f  stlinkarray remo
ccd0: 76 65 20 3a 3a 6d 79 28 76 61 72 29 0a 2b 20 20  ve ::my(var).+  
cce0: 74 65 73 74 6c 69 6e 6b 61 72 72 61 79 20 63 72  testlinkarray cr
ccf0: 65 61 74 65 20 62 69 6e 61 72 79 20 34 20 3a 3a  eate binary 4 ::
cd00: 6d 79 28 76 61 72 29 0a 2b 20 20 63 61 74 63 68  my(var).+  catch
cd10: 20 7b 73 65 74 20 3a 3a 6d 79 28 76 61 72 29 20   {set ::my(var) 
cd20: 61 62 63 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61  abc} my(msg); la
cd30: 70 70 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79  ppend mylist $my
cd40: 28 6d 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d  (msg);unset my(m
cd50: 73 67 29 0a 2b 20 20 63 61 74 63 68 20 7b 73 65  sg).+  catch {se
cd60: 74 20 3a 3a 6d 79 28 76 61 72 29 20 61 62 63 64  t ::my(var) abcd
cd70: 65 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70  e} my(msg); lapp
cd80: 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d  end mylist $my(m
cd90: 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67  sg);unset my(msg
cda0: 29 0a 2b 20 20 73 65 74 20 3a 3a 6d 79 28 76 61  ).+  set ::my(va
cdb0: 72 29 20 61 62 63 64 0a 2b 20 20 6c 61 70 70 65  r) abcd.+  lappe
cdc0: 6e 64 20 6d 79 6c 69 73 74 20 24 3a 3a 6d 79 28  nd mylist $::my(
cdd0: 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b  var).+  testlink
cde0: 61 72 72 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d  array remove ::m
cdf0: 79 28 76 61 72 29 0a 2b 20 20 74 65 73 74 6c 69  y(var).+  testli
ce00: 6e 6b 61 72 72 61 79 20 63 72 65 61 74 65 20 2d  nkarray create -
ce10: 72 20 62 69 6e 61 72 79 20 34 20 3a 3a 6d 79 28  r binary 4 ::my(
ce20: 76 61 72 29 0a 2b 20 20 63 61 74 63 68 20 7b 73  var).+  catch {s
ce30: 65 74 20 3a 3a 6d 79 28 76 61 72 29 20 78 79 7a  et ::my(var) xyz
ce40: 76 7d 20 6d 79 28 6d 73 67 29 3b 20 6c 61 70 70  v} my(msg); lapp
ce50: 65 6e 64 20 6d 79 6c 69 73 74 20 24 6d 79 28 6d  end mylist $my(m
ce60: 73 67 29 3b 75 6e 73 65 74 20 6d 79 28 6d 73 67  sg);unset my(msg
ce70: 29 0a 2b 20 20 74 65 73 74 6c 69 6e 6b 61 72 72  ).+  testlinkarr
ce80: 61 79 20 72 65 6d 6f 76 65 20 3a 3a 6d 79 28 76  ay remove ::my(v
ce90: 61 72 29 3b 20 75 6e 73 65 74 20 6d 79 3b 20 6a  ar); unset my; j
cea0: 6f 69 6e 20 24 6d 79 6c 69 73 74 20 22 5c 6e 22  oin $mylist "\n"
ceb0: 0a 2b 7d 20 7b 63 61 6e 27 74 20 73 65 74 20 22  .+} {can't set "
cec0: 3a 3a 6d 79 28 76 61 72 29 22 3a 20 77 72 6f 6e  ::my(var)": wron
ced0: 67 20 73 69 7a 65 20 6f 66 20 62 69 6e 61 72 79  g size of binary
cee0: 20 76 61 6c 75 65 0a 2b 78 0a 2b 63 61 6e 27 74   value.+x.+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 63 61  binary value.+ca
cf20: 6e 27 74 20 73 65 74 20 22 3a 3a 6d 79 28 76 61  n't set "::my(va
cf30: 72 29 22 3a 20 77 72 6f 6e 67 20 73 69 7a 65 20  r)": wrong size 
cf40: 6f 66 20 62 69 6e 61 72 79 20 76 61 6c 75 65 0a  of binary value.
cf50: 2b 61 62 63 64 0a 2b 63 61 6e 27 74 20 73 65 74  +abcd.+can't set
cf60: 20 22 3a 3a 6d 79 28 76 61 72 29 22 3a 20 6c 69   "::my(var)": li
cf70: 6e 6b 65 64 20 76 61 72 69 61 62 6c 65 20 69 73  nked variable is
cf80: 20 72 65 61 64 2d 6f 6e 6c 79 7d 0a 20 0a 20 63   read-only}. . c
cf90: 61 74 63 68 20 7b 74 65 73 74 6c 69 6e 6b 20 73  atch {testlink s
cfa0: 65 74 20 30 20 30 20 30 20 2d 20 30 20 30 20 30  et 0 0 0 - 0 0 0
cfb0: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 7d 0a   0 0 0 0 0 0 0}.
cfc0: 20 63 61 74 63 68 20 7b 74 65 73 74 6c 69 6e 6b   catch {testlink
cfd0: 20 64 65 6c 65 74 65 7d 0a                        delete}.