Artifact
a0194db1e3073dc3a44451c10ffe5303b81fc19830d942a93ce765e38d5272db:
Attachment "patch-a09031e288-quickfix.diff.1" to
ticket [a09031e288]
added by
leon
2018-12-02 19:30:09.
(unpublished)
0000: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 Index: generic/t
0010: 63 6c 4f 62 6a 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d clObj.c.========
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 2d 2d 2d 20 67 ==========.--- g
0060: 65 6e 65 72 69 63 2f 74 63 6c 4f 62 6a 2e 63 0a eneric/tclObj.c.
0070: 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 4f +++ generic/tclO
0080: 62 6a 2e 63 0a 40 40 20 2d 39 36 2c 31 31 20 2b bj.c.@@ -96,11 +
0090: 39 36 2c 31 31 20 40 40 0a 20 7d 20 54 68 72 65 96,11 @@. } Thre
00a0: 61 64 53 70 65 63 69 66 69 63 44 61 74 61 3b 0a adSpecificData;.
00b0: 20 0a 20 73 74 61 74 69 63 20 54 63 6c 5f 54 68 . static Tcl_Th
00c0: 72 65 61 64 44 61 74 61 4b 65 79 20 64 61 74 61 readDataKey data
00d0: 4b 65 79 3b 0a 20 0a 20 73 74 61 74 69 63 20 76 Key;. . static v
00e0: 6f 69 64 20 20 20 20 20 20 20 20 20 20 20 20 20 oid
00f0: 54 63 6c 54 68 72 65 61 64 46 69 6e 61 6c 69 7a TclThreadFinaliz
0100: 65 43 6f 6e 74 4c 69 6e 65 73 28 43 6c 69 65 6e eContLines(Clien
0110: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 tData clientData
0120: 29 3b 0a 2d 73 74 61 74 69 63 20 54 68 72 65 61 );.-static Threa
0130: 64 53 70 65 63 69 66 69 63 44 61 74 61 20 2a 54 dSpecificData *T
0140: 63 6c 47 65 74 43 6f 6e 74 4c 69 6e 65 54 61 62 clGetContLineTab
0150: 6c 65 28 76 6f 69 64 29 3b 0a 2b 73 74 61 74 69 le(void);.+stati
0160: 63 20 54 63 6c 5f 48 61 73 68 54 61 62 6c 65 20 c Tcl_HashTable
0170: 20 20 20 2a 54 63 6c 47 65 74 43 6f 6e 74 4c 69 *TclGetContLi
0180: 6e 65 54 61 62 6c 65 28 76 6f 69 64 29 3b 0a 20 neTable(void);.
0190: 0a 20 2f 2a 0a 20 20 2a 20 4e 65 73 74 65 64 20 . /*. * Nested
01a0: 54 63 6c 5f 4f 62 6a 20 64 65 6c 65 74 69 6f 6e Tcl_Obj deletion
01b0: 20 6d 61 6e 61 67 65 6d 65 6e 74 20 73 75 70 70 management supp
01c0: 6f 72 74 0a 20 20 2a 0a 20 20 2a 20 41 6c 6c 20 ort. *. * All
01d0: 63 6f 6e 74 65 78 74 20 72 65 66 65 72 65 6e 63 context referenc
01e0: 65 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 6f es used in the o
01f0: 62 6a 65 63 74 20 66 72 65 65 69 6e 67 20 63 6f bject freeing co
0200: 64 65 20 61 72 65 20 70 6f 69 6e 74 65 72 73 20 de are pointers
0210: 74 6f 20 74 68 69 73 0a 40 40 20 2d 34 39 36 2c to this.@@ -496,
0220: 31 33 20 2b 34 39 36 2c 31 34 20 40 40 0a 20 20 13 +496,14 @@.
0230: 2a 0a 20 20 2a 20 54 49 50 20 23 32 38 30 0a 20 *. * TIP #280.
0240: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
0250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0280: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2f 0a 20 0a --------. */. .
0290: 2d 73 74 61 74 69 63 20 54 68 72 65 61 64 53 70 -static ThreadSp
02a0: 65 63 69 66 69 63 44 61 74 61 20 2a 0a 2b 73 74 ecificData *.+st
02b0: 61 74 69 63 20 54 63 6c 5f 48 61 73 68 54 61 62 atic Tcl_HashTab
02c0: 6c 65 20 2a 0a 20 54 63 6c 47 65 74 43 6f 6e 74 le *. TclGetCont
02d0: 4c 69 6e 65 54 61 62 6c 65 28 76 6f 69 64 29 0a LineTable(void).
02e0: 20 7b 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 4e {.+ return N
02f0: 55 4c 4c 3b 0a 20 20 20 20 20 2f 2a 0a 20 20 20 ULL;. /*.
0300: 20 20 20 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 * Initialize
0310: 74 68 65 20 68 61 73 68 74 61 62 6c 65 20 74 72 the hashtable tr
0320: 61 63 6b 69 6e 67 20 69 6e 76 69 73 69 62 6c 65 acking invisible
0330: 20 63 6f 6e 74 69 6e 75 61 74 69 6f 6e 20 6c 69 continuation li
0340: 6e 65 73 2e 20 20 46 6f 72 0a 20 20 20 20 20 20 nes. For.
0350: 2a 20 74 68 65 20 72 65 6c 65 61 73 65 20 77 65 * the release we
0360: 20 75 73 65 20 61 20 74 68 72 65 61 64 20 65 78 use a thread ex
0370: 69 74 20 68 61 6e 64 6c 65 72 20 74 6f 20 65 6e it handler to en
0380: 73 75 72 65 20 74 68 61 74 20 74 68 69 73 20 69 sure that this i
0390: 73 20 64 6f 6e 65 0a 20 20 20 20 20 20 2a 20 62 s done. * b
03a0: 65 66 6f 72 65 20 54 53 44 20 62 6c 6f 63 6b 73 efore TSD blocks
03b0: 20 61 72 65 20 6d 61 64 65 20 69 6e 76 61 6c 69 are made invali
03c0: 64 2e 20 54 68 65 20 54 63 6c 46 69 6e 61 6c 69 d. The TclFinali
03d0: 7a 65 4f 62 6a 65 63 74 73 28 29 20 77 68 69 63 zeObjects() whic
03e0: 68 0a 20 20 20 20 20 20 2a 20 77 6f 75 6c 64 20 h. * would
03f0: 62 65 20 74 68 65 20 6e 61 74 75 72 61 6c 20 70 be the natural p
0400: 6c 61 63 65 20 66 6f 72 20 74 68 69 73 20 69 73 lace for this is
0410: 20 69 6e 76 6f 6b 65 64 20 61 66 74 65 72 77 61 invoked afterwa
0420: 72 64 73 2c 20 6d 65 61 6e 69 6e 67 20 74 68 61 rds, meaning tha
0430: 74 0a 40 40 20 2d 35 31 34 2c 31 31 20 2b 35 31 t.@@ -514,11 +51
0440: 35 2c 31 31 20 40 40 0a 20 20 20 20 20 69 66 20 5,11 @@. if
0450: 28 21 74 73 64 50 74 72 2d 3e 6c 69 6e 65 43 4c (!tsdPtr->lineCL
0460: 50 74 72 29 20 7b 0a 20 09 74 73 64 50 74 72 2d Ptr) {. .tsdPtr-
0470: 3e 6c 69 6e 65 43 4c 50 74 72 20 3d 20 54 63 6c >lineCLPtr = Tcl
0480: 5f 41 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 54 63 _Alloc(sizeof(Tc
0490: 6c 5f 48 61 73 68 54 61 62 6c 65 29 29 3b 0a 20 l_HashTable));.
04a0: 09 54 63 6c 5f 49 6e 69 74 48 61 73 68 54 61 62 .Tcl_InitHashTab
04b0: 6c 65 28 74 73 64 50 74 72 2d 3e 6c 69 6e 65 43 le(tsdPtr->lineC
04c0: 4c 50 74 72 2c 20 54 43 4c 5f 4f 4e 45 5f 57 4f LPtr, TCL_ONE_WO
04d0: 52 44 5f 4b 45 59 53 29 3b 0a 20 09 54 63 6c 5f RD_KEYS);. .Tcl_
04e0: 43 72 65 61 74 65 54 68 72 65 61 64 45 78 69 74 CreateThreadExit
04f0: 48 61 6e 64 6c 65 72 28 54 63 6c 54 68 72 65 61 Handler(TclThrea
0500: 64 46 69 6e 61 6c 69 7a 65 43 6f 6e 74 4c 69 6e dFinalizeContLin
0510: 65 73 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 7d es,NULL);. }
0520: 0a 2d 20 20 20 20 72 65 74 75 72 6e 20 74 73 64 .- return tsd
0530: 50 74 72 3b 0a 2b 20 20 20 20 72 65 74 75 72 6e Ptr;.+ return
0540: 20 74 73 64 50 74 72 2d 3e 6c 69 6e 65 43 4c 50 tsdPtr->lineCLP
0550: 74 72 3b 0a 20 7d 0a 20 0c 0a 20 2f 2a 0a 20 20 tr;. }. .. /*.
0560: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *---------------
0570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
05a0: 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a 40 40 20 2d -------. *.@@ -
05b0: 35 34 32 2c 31 33 20 2b 35 34 33 2c 31 36 20 40 542,13 +543,16 @
05c0: 40 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a @. Tcl_Obj *
05d0: 6f 62 6a 50 74 72 2c 0a 20 20 20 20 20 69 6e 74 objPtr,. int
05e0: 20 6e 75 6d 2c 0a 20 20 20 20 20 69 6e 74 20 2a num,. int *
05f0: 6c 6f 63 29 0a 20 7b 0a 20 20 20 20 20 69 6e 74 loc). {. int
0600: 20 6e 65 77 45 6e 74 72 79 3b 0a 2d 20 20 20 20 newEntry;.-
0610: 54 68 72 65 61 64 53 70 65 63 69 66 69 63 44 61 ThreadSpecificDa
0620: 74 61 20 2a 74 73 64 50 74 72 20 3d 20 54 63 6c ta *tsdPtr = Tcl
0630: 47 65 74 43 6f 6e 74 4c 69 6e 65 54 61 62 6c 65 GetContLineTable
0640: 28 29 3b 0a 2b 20 20 20 20 54 63 6c 5f 48 61 73 ();.+ Tcl_Has
0650: 68 54 61 62 6c 65 20 2a 63 6f 6e 74 4c 69 6e 65 hTable *contLine
0660: 54 61 62 6c 65 20 3d 20 54 63 6c 47 65 74 43 6f Table = TclGetCo
0670: 6e 74 4c 69 6e 65 54 61 62 6c 65 28 29 3b 0a 2b ntLineTable();.+
0680: 20 20 20 20 69 66 20 28 20 21 20 63 6f 6e 74 4c if ( ! contL
0690: 69 6e 65 54 61 62 6c 65 20 29 0a 2b 20 20 20 20 ineTable ).+
06a0: 20 20 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b return NULL;
06b0: 0a 2b 0a 20 20 20 20 20 54 63 6c 5f 48 61 73 68 .+. Tcl_Hash
06c0: 45 6e 74 72 79 20 2a 68 50 74 72 20 3d 0a 2d 09 Entry *hPtr =.-.
06d0: 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65 48 61 Tcl_CreateHa
06e0: 73 68 45 6e 74 72 79 28 74 73 64 50 74 72 2d 3e shEntry(tsdPtr->
06f0: 6c 69 6e 65 43 4c 50 74 72 2c 20 6f 62 6a 50 74 lineCLPtr, objPt
0700: 72 2c 20 26 6e 65 77 45 6e 74 72 79 29 3b 0a 2b r, &newEntry);.+
0710: 09 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65 48 . Tcl_CreateH
0720: 61 73 68 45 6e 74 72 79 28 63 6f 6e 74 4c 69 6e ashEntry(contLin
0730: 65 54 61 62 6c 65 2c 20 6f 62 6a 50 74 72 2c 20 eTable, objPtr,
0740: 26 6e 65 77 45 6e 74 72 79 29 3b 0a 20 20 20 20 &newEntry);.
0750: 20 43 6f 6e 74 4c 69 6e 65 4c 6f 63 20 2a 63 6c ContLineLoc *cl
0760: 4c 6f 63 50 74 72 20 3d 20 54 63 6c 5f 41 6c 6c LocPtr = Tcl_All
0770: 6f 63 28 73 69 7a 65 6f 66 28 43 6f 6e 74 4c 69 oc(sizeof(ContLi
0780: 6e 65 4c 6f 63 29 20 2b 20 6e 75 6d 2a 73 69 7a neLoc) + num*siz
0790: 65 6f 66 28 69 6e 74 29 29 3b 0a 20 0a 20 20 20 eof(int));. .
07a0: 20 20 69 66 20 28 21 6e 65 77 45 6e 74 72 79 29 if (!newEntry)
07b0: 20 7b 0a 20 09 2f 2a 0a 20 09 20 2a 20 57 65 27 {. ./*. . * We'
07c0: 72 65 20 65 6e 74 65 72 69 6e 67 20 43 6f 6e 74 re entering Cont
07d0: 4c 69 6e 65 4c 6f 63 20 64 61 74 61 20 66 6f 72 LineLoc data for
07e0: 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 the same value
07f0: 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 0a 40 40 more than one.@@
0800: 20 2d 36 39 38 2c 31 33 20 2b 37 30 32 2c 31 36 -698,13 +702,16
0810: 20 40 40 0a 20 76 6f 69 64 0a 20 54 63 6c 43 6f @@. void. TclCo
0820: 6e 74 69 6e 75 61 74 69 6f 6e 73 43 6f 70 79 28 ntinuationsCopy(
0830: 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f . Tcl_Obj *o
0840: 62 6a 50 74 72 2c 0a 20 20 20 20 20 54 63 6c 5f bjPtr,. Tcl_
0850: 4f 62 6a 20 2a 6f 72 69 67 69 6e 4f 62 6a 50 74 Obj *originObjPt
0860: 72 29 0a 20 7b 0a 2d 20 20 20 20 54 68 72 65 61 r). {.- Threa
0870: 64 53 70 65 63 69 66 69 63 44 61 74 61 20 2a 74 dSpecificData *t
0880: 73 64 50 74 72 20 3d 20 54 63 6c 47 65 74 43 6f sdPtr = TclGetCo
0890: 6e 74 4c 69 6e 65 54 61 62 6c 65 28 29 3b 0a 2b ntLineTable();.+
08a0: 20 20 20 20 54 63 6c 5f 48 61 73 68 54 61 62 6c Tcl_HashTabl
08b0: 65 20 2a 63 6f 6e 74 4c 69 6e 65 54 61 62 6c 65 e *contLineTable
08c0: 20 3d 20 54 63 6c 47 65 74 43 6f 6e 74 4c 69 6e = TclGetContLin
08d0: 65 54 61 62 6c 65 28 29 3b 0a 2b 20 20 20 20 69 eTable();.+ i
08e0: 66 20 28 20 21 20 63 6f 6e 74 4c 69 6e 65 54 61 f ( ! contLineTa
08f0: 62 6c 65 20 29 0a 2b 20 20 20 20 20 20 20 20 72 ble ).+ r
0900: 65 74 75 72 6e 3b 0a 2b 0a 20 20 20 20 20 54 63 eturn;.+. Tc
0910: 6c 5f 48 61 73 68 45 6e 74 72 79 20 2a 68 50 74 l_HashEntry *hPt
0920: 72 20 3d 0a 2d 20 20 20 20 20 20 20 20 20 20 20 r =.-
0930: 20 54 63 6c 5f 46 69 6e 64 48 61 73 68 45 6e 74 Tcl_FindHashEnt
0940: 72 79 28 74 73 64 50 74 72 2d 3e 6c 69 6e 65 43 ry(tsdPtr->lineC
0950: 4c 50 74 72 2c 20 6f 72 69 67 69 6e 4f 62 6a 50 LPtr, originObjP
0960: 74 72 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 tr);.+
0970: 20 20 54 63 6c 5f 46 69 6e 64 48 61 73 68 45 6e Tcl_FindHashEn
0980: 74 72 79 28 63 6f 6e 74 4c 69 6e 65 54 61 62 6c try(contLineTabl
0990: 65 2c 20 6f 72 69 67 69 6e 4f 62 6a 50 74 72 29 e, originObjPtr)
09a0: 3b 0a 20 0a 20 20 20 20 20 69 66 20 28 68 50 74 ;. . if (hPt
09b0: 72 29 20 7b 0a 20 09 43 6f 6e 74 4c 69 6e 65 4c r) {. .ContLineL
09c0: 6f 63 20 2a 63 6c 4c 6f 63 50 74 72 20 3d 20 54 oc *clLocPtr = T
09d0: 63 6c 5f 47 65 74 48 61 73 68 56 61 6c 75 65 28 cl_GetHashValue(
09e0: 68 50 74 72 29 3b 0a 20 0a 20 09 54 63 6c 43 6f hPtr);. . .TclCo
09f0: 6e 74 69 6e 75 61 74 69 6f 6e 73 45 6e 74 65 72 ntinuationsEnter
0a00: 28 6f 62 6a 50 74 72 2c 20 63 6c 4c 6f 63 50 74 (objPtr, clLocPt
0a10: 72 2d 3e 6e 75 6d 2c 20 63 6c 4c 6f 63 50 74 72 r->num, clLocPtr
0a20: 2d 3e 6c 6f 63 29 3b 0a 40 40 20 2d 37 33 32 2c ->loc);.@@ -732,
0a30: 31 33 20 2b 37 33 39 2c 31 36 20 40 40 0a 20 0a 13 +739,16 @@. .
0a40: 20 43 6f 6e 74 4c 69 6e 65 4c 6f 63 20 2a 0a 20 ContLineLoc *.
0a50: 54 63 6c 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 73 TclContinuations
0a60: 47 65 74 28 0a 20 20 20 20 20 54 63 6c 5f 4f 62 Get(. Tcl_Ob
0a70: 6a 20 2a 6f 62 6a 50 74 72 29 0a 20 7b 0a 2d 20 j *objPtr). {.-
0a80: 20 20 20 54 68 72 65 61 64 53 70 65 63 69 66 69 ThreadSpecifi
0a90: 63 44 61 74 61 20 2a 74 73 64 50 74 72 20 3d 20 cData *tsdPtr =
0aa0: 54 63 6c 47 65 74 43 6f 6e 74 4c 69 6e 65 54 61 TclGetContLineTa
0ab0: 62 6c 65 28 29 3b 0a 2b 20 20 20 20 54 63 6c 5f ble();.+ Tcl_
0ac0: 48 61 73 68 54 61 62 6c 65 20 2a 63 6f 6e 74 4c HashTable *contL
0ad0: 69 6e 65 54 61 62 6c 65 20 3d 20 54 63 6c 47 65 ineTable = TclGe
0ae0: 74 43 6f 6e 74 4c 69 6e 65 54 61 62 6c 65 28 29 tContLineTable()
0af0: 3b 0a 2b 20 20 20 20 69 66 20 28 20 21 20 63 6f ;.+ if ( ! co
0b00: 6e 74 4c 69 6e 65 54 61 62 6c 65 20 29 0a 2b 20 ntLineTable ).+
0b10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4e 55 return NU
0b20: 4c 4c 3b 0a 2b 0a 20 20 20 20 20 54 63 6c 5f 48 LL;.+. Tcl_H
0b30: 61 73 68 45 6e 74 72 79 20 2a 68 50 74 72 20 3d ashEntry *hPtr =
0b40: 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20 54 63 .- Tc
0b50: 6c 5f 46 69 6e 64 48 61 73 68 45 6e 74 72 79 28 l_FindHashEntry(
0b60: 74 73 64 50 74 72 2d 3e 6c 69 6e 65 43 4c 50 74 tsdPtr->lineCLPt
0b70: 72 2c 20 6f 62 6a 50 74 72 29 3b 0a 2b 20 20 20 r, objPtr);.+
0b80: 20 20 20 20 20 20 20 20 20 54 63 6c 5f 46 69 6e Tcl_Fin
0b90: 64 48 61 73 68 45 6e 74 72 79 28 63 6f 6e 74 4c dHashEntry(contL
0ba0: 69 6e 65 54 61 62 6c 65 2c 20 6f 62 6a 50 74 72 ineTable, objPtr
0bb0: 29 3b 0a 20 0a 20 20 20 20 20 69 66 20 28 21 68 );. . if (!h
0bc0: 50 74 72 29 20 7b 0a 20 20 20 20 20 20 20 20 20 Ptr) {.
0bd0: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 20 20 20 return NULL;.
0be0: 20 20 7d 0a 20 20 20 20 20 72 65 74 75 72 6e 20 }. return
0bf0: 54 63 6c 5f 47 65 74 48 61 73 68 56 61 6c 75 65 Tcl_GetHashValue
0c00: 28 68 50 74 72 29 3b 0a 40 40 20 2d 37 36 38 2c (hPtr);.@@ -768,
0c10: 32 32 20 2b 37 37 38 2c 32 38 20 40 40 0a 20 7b 22 +778,28 @@. {
0c20: 0a 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 2a . /*. *
0c30: 20 52 65 6c 65 61 73 65 20 74 68 65 20 68 61 73 Release the has
0c40: 68 74 61 62 6c 65 20 74 72 61 63 6b 69 6e 67 20 htable tracking
0c50: 69 6e 76 69 73 69 62 6c 65 20 63 6f 6e 74 69 6e invisible contin
0c60: 75 61 74 69 6f 6e 20 6c 69 6e 65 73 2e 0a 20 20 uation lines..
0c70: 20 20 20 20 2a 2f 0a 20 0a 2d 20 20 20 20 54 68 */. .- Th
0c80: 72 65 61 64 53 70 65 63 69 66 69 63 44 61 74 61 readSpecificData
0c90: 20 2a 74 73 64 50 74 72 20 3d 20 54 63 6c 47 65 *tsdPtr = TclGe
0ca0: 74 43 6f 6e 74 4c 69 6e 65 54 61 62 6c 65 28 29 tContLineTable()
0cb0: 3b 0a 2b 20 20 20 20 54 63 6c 5f 48 61 73 68 54 ;.+ Tcl_HashT
0cc0: 61 62 6c 65 20 2a 63 6f 6e 74 4c 69 6e 65 54 61 able *contLineTa
0cd0: 62 6c 65 20 3d 20 54 63 6c 47 65 74 43 6f 6e 74 ble = TclGetCont
0ce0: 4c 69 6e 65 54 61 62 6c 65 28 29 3b 0a 2b 20 20 LineTable();.+
0cf0: 20 20 69 66 20 28 20 21 20 63 6f 6e 74 4c 69 6e if ( ! contLin
0d00: 65 54 61 62 6c 65 20 29 0a 2b 20 20 20 20 20 20 eTable ).+
0d10: 20 20 72 65 74 75 72 6e 3b 0a 2b 0a 20 20 20 20 return;.+.
0d20: 20 54 63 6c 5f 48 61 73 68 45 6e 74 72 79 20 2a Tcl_HashEntry *
0d30: 68 50 74 72 3b 0a 20 20 20 20 20 54 63 6c 5f 48 hPtr;. Tcl_H
0d40: 61 73 68 53 65 61 72 63 68 20 68 53 65 61 72 63 ashSearch hSearc
0d50: 68 3b 0a 20 0a 2d 20 20 20 20 66 6f 72 20 28 68 h;. .- for (h
0d60: 50 74 72 20 3d 20 54 63 6c 5f 46 69 72 73 74 48 Ptr = Tcl_FirstH
0d70: 61 73 68 45 6e 74 72 79 28 74 73 64 50 74 72 2d ashEntry(tsdPtr-
0d80: 3e 6c 69 6e 65 43 4c 50 74 72 2c 20 26 68 53 65 >lineCLPtr, &hSe
0d90: 61 72 63 68 29 3b 0a 2b 20 20 20 20 66 6f 72 20 arch);.+ for
0da0: 28 68 50 74 72 20 3d 20 54 63 6c 5f 46 69 72 73 (hPtr = Tcl_Firs
0db0: 74 48 61 73 68 45 6e 74 72 79 28 63 6f 6e 74 4c tHashEntry(contL
0dc0: 69 6e 65 54 61 62 6c 65 2c 20 26 68 53 65 61 72 ineTable, &hSear
0dd0: 63 68 29 3b 0a 20 09 20 20 20 20 68 50 74 72 20 ch);. . hPtr
0de0: 21 3d 20 4e 55 4c 4c 3b 20 68 50 74 72 20 3d 20 != NULL; hPtr =
0df0: 54 63 6c 5f 4e 65 78 74 48 61 73 68 45 6e 74 72 Tcl_NextHashEntr
0e00: 79 28 26 68 53 65 61 72 63 68 29 29 20 7b 0a 20 y(&hSearch)) {.
0e10: 09 54 63 6c 5f 46 72 65 65 28 54 63 6c 5f 47 65 .Tcl_Free(Tcl_Ge
0e20: 74 48 61 73 68 56 61 6c 75 65 28 68 50 74 72 29 tHashValue(hPtr)
0e30: 29 3b 0a 20 09 54 63 6c 5f 44 65 6c 65 74 65 48 );. .Tcl_DeleteH
0e40: 61 73 68 45 6e 74 72 79 28 68 50 74 72 29 3b 0a ashEntry(hPtr);.
0e50: 20 20 20 20 20 7d 0a 2d 20 20 20 20 54 63 6c 5f }.- Tcl_
0e60: 44 65 6c 65 74 65 48 61 73 68 54 61 62 6c 65 28 DeleteHashTable(
0e70: 74 73 64 50 74 72 2d 3e 6c 69 6e 65 43 4c 50 74 tsdPtr->lineCLPt
0e80: 72 29 3b 0a 2d 20 20 20 20 54 63 6c 5f 46 72 65 r);.- Tcl_Fre
0e90: 65 28 74 73 64 50 74 72 2d 3e 6c 69 6e 65 43 4c e(tsdPtr->lineCL
0ea0: 50 74 72 29 3b 0a 2b 20 20 20 20 54 63 6c 5f 44 Ptr);.+ Tcl_D
0eb0: 65 6c 65 74 65 48 61 73 68 54 61 62 6c 65 28 63 eleteHashTable(c
0ec0: 6f 6e 74 4c 69 6e 65 54 61 62 6c 65 29 3b 0a 2b ontLineTable);.+
0ed0: 20 20 20 20 54 63 6c 5f 46 72 65 65 28 63 6f 6e Tcl_Free(con
0ee0: 74 4c 69 6e 65 54 61 62 6c 65 29 3b 0a 2b 20 20 tLineTable);.+
0ef0: 20 20 7b 0a 2b 20 20 20 20 54 68 72 65 61 64 53 {.+ ThreadS
0f00: 70 65 63 69 66 69 63 44 61 74 61 20 2a 74 73 64 pecificData *tsd
0f10: 50 74 72 20 3d 20 54 43 4c 5f 54 53 44 5f 49 4e Ptr = TCL_TSD_IN
0f20: 49 54 28 26 64 61 74 61 4b 65 79 29 3b 0a 20 20 IT(&dataKey);.
0f30: 20 20 20 74 73 64 50 74 72 2d 3e 6c 69 6e 65 43 tsdPtr->lineC
0f40: 4c 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 2b 20 20 LPtr = NULL;.+
0f50: 20 20 7d 0a 20 7d 0a 20 0c 0a 20 2f 2a 0a 20 20 }. }. .. /*.
0f60: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *---------------
0f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
0fa0: 20 20 2a 0a 40 40 20 2d 31 36 39 35 2c 31 39 20 *.@@ -1695,19
0fb0: 2b 31 37 31 31 2c 31 39 20 40 40 0a 20 20 2a 20 +1711,19 @@. *
0fc0: 54 63 6c 5f 49 6e 69 74 53 74 72 69 6e 67 52 65 Tcl_InitStringRe
0fd0: 70 20 2d 2d 0a 20 20 2a 0a 20 20 2a 09 54 68 69 p --. *. *.Thi
0fe0: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 s function is ca
0ff0: 6c 6c 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 lled in several
1000: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 74 configurations t
1010: 6f 20 70 72 6f 76 69 64 65 20 61 6c 6c 0a 20 20 o provide all.
1020: 2a 09 74 68 65 20 74 6f 6f 6c 73 20 6e 65 65 64 *.the tools need
1030: 65 64 20 74 6f 20 73 65 74 20 61 6e 20 6f 62 6a ed to set an obj
1040: 65 63 74 27 73 20 73 74 72 69 6e 67 20 72 65 70 ect's string rep
1050: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 54 68 65 resentation. The
1060: 0a 20 20 2a 09 66 75 6e 63 74 69 6f 6e 20 69 73 . *.function is
1070: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 determined by t
1080: 68 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2d 20 he arguments..-
1090: 2a 09 0a 2b 20 2a 0a 20 20 2a 09 28 6f 62 6a 50 *..+ *. *.(objP
10a0: 74 72 2d 3e 62 79 74 65 73 20 21 3d 20 4e 55 4c tr->bytes != NUL
10b0: 4c 20 26 26 20 62 79 74 65 73 20 21 3d 20 4e 55 L && bytes != NU
10c0: 4c 4c 29 20 7c 7c 20 28 6e 75 6d 42 79 74 65 73 LL) || (numBytes
10d0: 20 3d 3d 20 2d 31 29 0a 20 20 2a 09 20 20 20 20 == -1). *.
10e0: 49 6e 76 61 6c 69 64 20 63 61 6c 6c 20 2d 2d 20 Invalid call --
10f0: 70 61 6e 69 63 21 0a 2d 20 2a 09 0a 2b 20 2a 0a panic!.- *..+ *.
1100: 20 20 2a 09 6f 62 6a 50 74 72 2d 3e 62 79 74 65 *.objPtr->byte
1110: 73 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 62 79 74 s == NULL && byt
1120: 65 73 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 6e 75 es == NULL && nu
1130: 6d 42 79 74 65 73 20 3e 3d 20 30 0a 20 20 2a 09 mBytes >= 0. *.
1140: 20 20 20 20 41 6c 6c 6f 63 61 74 69 6f 6e 20 6f Allocation o
1150: 6e 6c 79 20 2d 20 61 6c 6c 6f 63 61 74 65 20 73 nly - allocate s
1160: 70 61 63 65 20 66 6f 72 20 28 6e 75 6d 42 79 74 pace for (numByt
1170: 65 73 2b 31 29 20 63 68 61 72 73 2e 0a 20 20 2a es+1) chars.. *
1180: 09 20 20 20 20 73 74 6f 72 65 20 69 6e 20 6f 62 . store in ob
1190: 6a 50 74 72 2d 3e 62 79 74 65 73 20 61 6e 64 20 jPtr->bytes and
11a0: 72 65 74 75 72 6e 2e 20 41 6c 73 6f 20 73 65 74 return. Also set
11b0: 73 0a 20 20 2a 09 20 20 20 20 6f 62 6a 50 74 72 s. *. objPtr
11c0: 2d 3e 6c 65 6e 67 74 68 20 74 6f 20 30 20 61 6e ->length to 0 an
11d0: 64 20 6f 62 6a 50 74 72 2d 3e 62 79 74 65 73 5b d objPtr->bytes[
11e0: 30 5d 20 74 6f 20 4e 55 4c 2e 0a 2d 20 2a 09 0a 0] to NUL..- *..
11f0: 2b 20 2a 0a 20 20 2a 09 6f 62 6a 50 74 72 2d 3e + *. *.objPtr->
1200: 62 79 74 65 73 20 3d 3d 20 4e 55 4c 4c 20 26 26 bytes == NULL &&
1210: 20 62 79 74 65 73 20 21 3d 20 4e 55 4c 4c 20 26 bytes != NULL &
1220: 26 20 6e 75 6d 42 79 74 65 73 20 3e 3d 20 30 0a & numBytes >= 0.
1230: 20 20 2a 09 20 20 20 20 41 6c 6c 6f 63 61 74 65 *. Allocate
1240: 20 61 6e 64 20 63 6f 70 79 2e 20 62 79 74 65 73 and copy. bytes
1250: 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 70 is assumed to p
1260: 6f 69 6e 74 20 74 6f 20 63 68 61 72 73 20 74 6f oint to chars to
1270: 0a 20 20 2a 09 20 20 20 20 63 6f 70 79 20 69 6e . *. copy in
1280: 74 6f 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 to the string re
1290: 70 2e 20 6f 62 6a 50 74 72 2d 3e 6c 65 6e 67 74 p. objPtr->lengt
12a0: 68 20 3d 20 6e 75 6d 42 79 74 65 73 2e 20 41 6c h = numBytes. Al
12b0: 6c 6f 63 61 74 65 0a 20 20 2a 09 20 20 20 20 61 locate. *. a
12c0: 72 72 61 79 20 6f 66 20 28 6e 75 6d 42 79 74 65 rray of (numByte
12d0: 73 20 2b 20 31 29 20 63 68 61 72 73 2e 20 73 74 s + 1) chars. st
12e0: 6f 72 65 20 69 6e 20 6f 62 6a 50 74 72 2d 3e 62 ore in objPtr->b
12f0: 79 74 65 73 2e 20 43 6f 70 79 0a 20 20 2a 09 20 ytes. Copy. *.
1300: 20 20 20 6e 75 6d 42 79 74 65 73 20 63 68 61 72 numBytes char
1310: 73 20 66 72 6f 6d 20 62 79 74 65 73 20 74 6f 20 s from bytes to
1320: 6f 62 6a 50 74 72 2d 3e 62 79 74 65 73 3b 20 53 objPtr->bytes; S
1330: 65 74 0a 0a et..