Compare commits
736
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ebb646039f | ||
|
|
e175267bec | ||
|
|
65878c47af | ||
|
|
543cd3200b | ||
|
|
d75c345663 | ||
|
|
1172c3966d | ||
|
|
d0abfbe72a | ||
|
|
18aadfce45 | ||
|
|
c4047c81e6 | ||
|
|
216ade8493 | ||
|
|
383f020ee8 | ||
|
|
edbfaa468e | ||
|
|
9d1312440e | ||
|
|
3ad87b0a02 | ||
|
|
c83af8f8d4 | ||
|
|
7413854f34 | ||
|
|
73b02508fa | ||
|
|
5e1eaa44bc | ||
|
|
c5f68dde5c | ||
|
|
878c0cff52 | ||
|
|
ce9b84204c | ||
|
|
e929b91222 | ||
|
|
96fec1a88c | ||
|
|
c91c7b7cf1 | ||
|
|
bfcb6b40d2 | ||
|
|
2440231062 | ||
|
|
aed9fbb19c | ||
|
|
e4dfb0d689 | ||
|
|
7887926261 | ||
|
|
cb5d76ed2b | ||
|
|
657b49a9d1 | ||
|
|
1b0845930c | ||
|
|
ad07565ec0 | ||
|
|
a414da9341 | ||
|
|
134ada8ff9 | ||
|
|
7bc81bcbb0 | ||
|
|
6d44125712 | ||
|
|
08390e5c47 | ||
|
|
a52254cce9 | ||
|
|
bcb4faa32f | ||
|
|
fa65ef51ba | ||
|
|
a8bbc9486a | ||
|
|
bb55ca2e95 | ||
|
|
0288a572d8 | ||
|
|
1ecf461e41 | ||
|
|
97f9595151 | ||
|
|
30710a181c | ||
|
|
493b04cbc0 | ||
|
|
8938dbcc25 | ||
|
|
db738e7756 | ||
|
|
c6bb98e763 | ||
|
|
c938932757 | ||
|
|
9878106deb | ||
|
|
53dc4dcdee | ||
|
|
a313e78ffa | ||
|
|
2c3dbea378 | ||
|
|
8520e69f32 | ||
|
|
54223a5f7e | ||
|
|
22515fc47f | ||
|
|
6b45d21b4b | ||
|
|
3adc645802 | ||
|
|
743ced9da3 | ||
|
|
b9ef276505 | ||
|
|
ebd7e8a86b | ||
|
|
4096bf5d01 | ||
|
|
6dcfcb8be9 | ||
|
|
24cec35f7b | ||
|
|
367ade79ed | ||
|
|
e6af5d333b | ||
|
|
24be1383da | ||
|
|
28384139ba | ||
|
|
e5b2f21fe9 | ||
|
|
ccbbb5d288 | ||
|
|
2d27ea7088 | ||
|
|
a33a94ec85 | ||
|
|
f36f801d24 | ||
|
|
841e525556 | ||
|
|
55b0c17067 | ||
|
|
993b39c491 | ||
|
|
272b2008ad | ||
|
|
f7cf1b2bae | ||
|
|
8173bccfd9 | ||
|
|
a5b75dfa9a | ||
|
|
52b97dd00b | ||
|
|
987eb68977 | ||
|
|
f632850eb8 | ||
|
|
ed72e77b7d | ||
|
|
83d427e824 | ||
|
|
f18c1126d5 | ||
|
|
62e1b3723e | ||
|
|
4d6aaa2e8b | ||
|
|
4bf79aef9b | ||
|
|
066a4b7b35 | ||
|
|
a6f2dee7fb | ||
|
|
a7e397556b | ||
|
|
c084f0ea75 | ||
|
|
5cdaf0e05b | ||
|
|
200e0742b8 | ||
|
|
fe60431f53 | ||
|
|
160ba1cb95 | ||
|
|
058f0df44d | ||
|
|
ff926f2b01 | ||
|
|
bee5c35f44 | ||
|
|
8971b5cdea | ||
|
|
b2e3f2fa04 | ||
|
|
0c1e275cdf | ||
|
|
a2400fbe30 | ||
|
|
211f7d6466 | ||
|
|
6dee5b3e07 | ||
|
|
9d1f38c3e3 | ||
|
|
33647e79c8 | ||
|
|
f440a6ef41 | ||
|
|
c086de021c | ||
|
|
97eb71a629 | ||
|
|
e62b40c808 | ||
|
|
234fb04984 | ||
|
|
1b7d424507 | ||
|
|
5797625e42 | ||
|
|
987422a01f | ||
|
|
5f6b71f3f2 | ||
|
|
f6f0891fff | ||
|
|
27c5ada57e | ||
|
|
5f2f5b63c3 | ||
|
|
59f7320bdd | ||
|
|
00546e5e21 | ||
|
|
a63563bd9a | ||
|
|
1d99884b08 | ||
|
|
8bd533d76e | ||
|
|
23d61a10c2 | ||
|
|
0ee8df700b | ||
|
|
50a950f2b1 | ||
|
|
c74640849e | ||
|
|
861b34625c | ||
|
|
0958b92b37 | ||
|
|
6d9ae4aa16 | ||
|
|
965128fe34 | ||
|
|
ebc5b27c8c | ||
|
|
3916ce9d4c | ||
|
|
4bd227bc12 | ||
|
|
84e92af6dc | ||
|
|
15ca940ca7 | ||
|
|
525bc7c9b5 | ||
|
|
6adf3b8c6c | ||
|
|
3d14dd6bc9 | ||
|
|
41afeeec2b | ||
|
|
623c1cbe5b | ||
|
|
60ef39d24a | ||
|
|
889454ec06 | ||
|
|
752ab085d6 | ||
|
|
c019848148 | ||
|
|
fd1c7c2fb3 | ||
|
|
8f2d19b951 | ||
|
|
f2bea640bb | ||
|
|
d818803502 | ||
|
|
e0437fdf58 | ||
|
|
8163234efd | ||
|
|
f796ad762c | ||
|
|
0185dd6477 | ||
|
|
07d10b8a58 | ||
|
|
bc28cd1ac8 | ||
|
|
9350513d16 | ||
|
|
4fb5d04b2f | ||
|
|
f287d8cb0f | ||
|
|
0c2e553e8f | ||
|
|
915c6abe66 | ||
|
|
0070244914 | ||
|
|
17ebc3cd20 | ||
|
|
5e9e003379 | ||
|
|
2aed1acbd1 | ||
|
|
81a1a91361 | ||
|
|
9a19e4cba0 | ||
|
|
c2d6c48dd9 | ||
|
|
d383707870 | ||
|
|
c33f97005c | ||
|
|
3f126895fb | ||
|
|
d848f30c45 | ||
|
|
d860a2c3a4 | ||
|
|
009f2adf3d | ||
|
|
5684ad8d94 | ||
|
|
774c402365 | ||
|
|
740d1811bc | ||
|
|
451ab6927c | ||
|
|
f302557ad5 | ||
|
|
d061b31460 | ||
|
|
783aea7d3a | ||
|
|
34c17bad36 | ||
|
|
f0992177e4 | ||
|
|
6f4f296706 | ||
|
|
75bc23d59c | ||
|
|
9d91a3db0b | ||
|
|
1dc19d8370 | ||
|
|
458197828b | ||
|
|
c079ab076f | ||
|
|
d69c39d52e | ||
|
|
7a53c36e3a | ||
|
|
ee74db1cbf | ||
|
|
1e62f5ac76 | ||
|
|
afad6ffbb4 | ||
|
|
d72d5f8b7a | ||
|
|
c46c774126 | ||
|
|
ba3bf9b61f | ||
|
|
82bddf4dca | ||
|
|
e10479f3d7 | ||
|
|
7183692271 | ||
|
|
b7fbf3c433 | ||
|
|
c10c796a46 | ||
|
|
582824087d | ||
|
|
da4296c06f | ||
|
|
0dec640514 | ||
|
|
d2b490f552 | ||
|
|
4cfafc3002 | ||
|
|
fb3fc7d5d3 | ||
|
|
de31df63e7 | ||
|
|
a7bebaafdb | ||
|
|
bd6afa9af5 | ||
|
|
c8629fcad6 | ||
|
|
b52ba9ae90 | ||
|
|
a6fe3119b2 | ||
|
|
28bc2e5adf | ||
|
|
191c6d2137 | ||
|
|
7eab500306 | ||
|
|
421cc90918 | ||
|
|
e26d6e29c1 | ||
|
|
57f4decd9b | ||
|
|
e0373f12ec | ||
|
|
fa8b071f04 | ||
|
|
6f68b762d3 | ||
|
|
ade4e6d9bb | ||
|
|
a6b67f2ef2 | ||
|
|
88731d9d93 | ||
|
|
73faa3bbb6 | ||
|
|
89b2fc0982 | ||
|
|
7d8dff7c72 | ||
|
|
aec5846c12 | ||
|
|
05fb0c0810 | ||
|
|
a47b03577b | ||
|
|
fda71d6d4c | ||
|
|
7070acfea1 | ||
|
|
eec0dcb530 | ||
|
|
c0f408b9cd | ||
|
|
ddd130e532 | ||
|
|
e592a6c9d5 | ||
|
|
5ea3e8b570 | ||
|
|
324ca57f3d | ||
|
|
a9f49cd781 | ||
|
|
b3fea91162 | ||
|
|
ae7b32a706 | ||
|
|
eaf387ef13 | ||
|
|
78b0a4a13c | ||
|
|
f7fd65de47 | ||
|
|
d751f58f9d | ||
|
|
5eecd400b7 | ||
|
|
3f19b90244 | ||
|
|
11f1a88c12 | ||
|
|
c012287fc8 | ||
|
|
9fd3e86565 | ||
|
|
adb4b18477 | ||
|
|
dc4782f595 | ||
|
|
708da35f79 | ||
|
|
07bfe18a21 | ||
|
|
9497794406 | ||
|
|
8d8c38c7c7 | ||
|
|
dcb4da22fa | ||
|
|
130c6dd203 | ||
|
|
bbca4ec51b | ||
|
|
4a6f1d02be | ||
|
|
202a7c4db1 | ||
|
|
4d9fc81c0f | ||
|
|
cdd8467ca9 | ||
|
|
099345d98c | ||
|
|
76df95e6e4 | ||
|
|
7243b34d80 | ||
|
|
6a445a3fe6 | ||
|
|
d6ca452640 | ||
|
|
7b9871647a | ||
|
|
5f13065a33 | ||
|
|
e80db5fa35 | ||
|
|
3215339ef0 | ||
|
|
b7289f092d | ||
|
|
ded13430f9 | ||
|
|
6eb0e8555d | ||
|
|
c05b753e95 | ||
|
|
f332c17690 | ||
|
|
df6a99b1f7 | ||
|
|
07096327dc | ||
|
|
a831b299f7 | ||
|
|
b6b9185fa8 | ||
|
|
bd6f6a89c6 | ||
|
|
169288808b | ||
|
|
615ab1a0d4 | ||
|
|
c961880a26 | ||
|
|
f118d91a3d | ||
|
|
3c473ee0c4 | ||
|
|
67264f1e10 | ||
|
|
9cccd5fd91 | ||
|
|
470fc04dd0 | ||
|
|
46db2c3edd | ||
|
|
52ce2fdeb0 | ||
|
|
d8bed612b0 | ||
|
|
41da12e756 | ||
|
|
18fcba4c82 | ||
|
|
41462bf4fa | ||
|
|
4e13219dfb | ||
|
|
854eec9e0f | ||
|
|
849acd6e96 | ||
|
|
b5c0305e8b | ||
|
|
a8ee0b7831 | ||
|
|
a989f1616a | ||
|
|
af76b69dcd | ||
|
|
ab224ed8ee | ||
|
|
68dfdc609e | ||
|
|
10ccda4936 | ||
|
|
c718bb66ac | ||
|
|
5dad1c5205 | ||
|
|
270a615a09 | ||
|
|
4a21f51055 | ||
|
|
532b8988c1 | ||
|
|
b2423f72cf | ||
|
|
3903b017ec | ||
|
|
3c76eb88e8 | ||
|
|
544626ba84 | ||
|
|
b5f51d5007 | ||
|
|
a20873ddab | ||
|
|
68d7745b27 | ||
|
|
c8b0ad64d1 | ||
|
|
a097532afd | ||
|
|
7b43d03c2b | ||
|
|
fdf63d1e28 | ||
|
|
17f4b04d10 | ||
|
|
2a3000c25e | ||
|
|
546d781de9 | ||
|
|
e7d31b9449 | ||
|
|
d2b951b436 | ||
|
|
79f58ebfb3 | ||
|
|
2797b611e3 | ||
|
|
7da4d96216 | ||
|
|
15425ace0b | ||
|
|
7390940817 | ||
|
|
7484715183 | ||
|
|
bcc14fb740 | ||
|
|
90dba8327c | ||
|
|
db5a66dd2c | ||
|
|
82c027f092 | ||
|
|
e7da373e0c | ||
|
|
2a26edf602 | ||
|
|
c929650e2f | ||
|
|
b1a3a83b3d | ||
|
|
fb728f1f53 | ||
|
|
b3b9cb8d35 | ||
|
|
251b09c99a | ||
|
|
43cea24ef3 | ||
|
|
2debf51b24 | ||
|
|
f677af67e2 | ||
|
|
622cb44fa4 | ||
|
|
50c73b80d3 | ||
|
|
b24c54bed3 | ||
|
|
c74bb69040 | ||
|
|
4b5869de07 | ||
|
|
d421fc1bdf | ||
|
|
6c3b503dbd | ||
|
|
68afad0c67 | ||
|
|
7965559c05 | ||
|
|
18b0700dbe | ||
|
|
4ee4a959b9 | ||
|
|
0a18b6e286 | ||
|
|
5c0e6b295a | ||
|
|
45e4dfd471 | ||
|
|
89acc1c033 | ||
|
|
be69161b43 | ||
|
|
025d1997eb | ||
|
|
648841a413 | ||
|
|
276bcea418 | ||
|
|
1ac9419646 | ||
|
|
c0b55c5efd | ||
|
|
643a9ae4b0 | ||
|
|
6880761727 | ||
|
|
119cc47a41 | ||
|
|
72a0fab411 | ||
|
|
7f79d3446c | ||
|
|
c7e9f685b7 | ||
|
|
06cfc15d05 | ||
|
|
c52117cb0c | ||
|
|
143dd064c6 | ||
|
|
43d07e03c7 | ||
|
|
a425618034 | ||
|
|
b5f1bdb187 | ||
|
|
007c00ed28 | ||
|
|
13a2a82c81 | ||
|
|
b55a06a8a5 | ||
|
|
87d602d36b | ||
|
|
472c40ee51 | ||
|
|
06130c47bf | ||
|
|
bf048c0574 | ||
|
|
8654042602 | ||
|
|
11832ca791 | ||
|
|
e516af3ee3 | ||
|
|
27e4c0fd0a | ||
|
|
5f10b318a9 | ||
|
|
45f9ea1e07 | ||
|
|
37a7a15bca | ||
|
|
b3ef3c7cfa | ||
|
|
9cebbfe5c2 | ||
|
|
15f3cf55c9 | ||
|
|
609b6c70bb | ||
|
|
761c9d604a | ||
|
|
9ba818c1f1 | ||
|
|
063786234c | ||
|
|
bbf3672694 | ||
|
|
db5f6dd1cd | ||
|
|
f0b3ddae4d | ||
|
|
4c0c922a42 | ||
|
|
ef11e6258e | ||
|
|
aca7dea901 | ||
|
|
b12676f0d0 | ||
|
|
cac74426e8 | ||
|
|
41c4cbfb48 | ||
|
|
64e39b2d5a | ||
|
|
a15d02780a | ||
|
|
b1d48abeb3 | ||
|
|
8001283708 | ||
|
|
896f59c3a2 | ||
|
|
70044260ae | ||
|
|
1f2616960d | ||
|
|
e6565ad233 | ||
|
|
ddae63135f | ||
|
|
a034a4b99c | ||
|
|
5420285485 | ||
|
|
13c0e41521 | ||
|
|
2fb979594a | ||
|
|
a6ac841a5d | ||
|
|
6a412a3168 | ||
|
|
7554f7ffb1 | ||
|
|
2c6aa5c960 | ||
|
|
8474c20bc6 | ||
|
|
1197921203 | ||
|
|
911c3a02b5 | ||
|
|
1de5433c5d | ||
|
|
5cbeb42aff | ||
|
|
cc984c4e6e | ||
|
|
6b60065860 | ||
|
|
9b0ea3ca88 | ||
|
|
a0b6194b82 | ||
|
|
64bf3c8f4a | ||
|
|
064f7e5513 | ||
|
|
6597872335 | ||
|
|
5044035ec0 | ||
|
|
5c4737c8d8 | ||
|
|
b6b0d1b8dd | ||
|
|
1ddb66bfda | ||
|
|
f2aea5424e | ||
|
|
7bfc04bfbe | ||
|
|
f972f06872 | ||
|
|
71d2777cfd | ||
|
|
1ba9a90c6e | ||
|
|
55102c2b83 | ||
|
|
7ff52157ed | ||
|
|
2e7505ce3d | ||
|
|
6b17a1e25a | ||
|
|
93b8f2696a | ||
|
|
b6f570180b | ||
|
|
e6f4d201ce | ||
|
|
e0dbb5bd62 | ||
|
|
8b102ddebc | ||
|
|
ddfc3d80c5 | ||
|
|
2eed34dc23 | ||
|
|
b065abd46c | ||
|
|
bce112e425 | ||
|
|
5d03958f22 | ||
|
|
776001cd14 | ||
|
|
a76ebfc825 | ||
|
|
3105dcac7e | ||
|
|
79ad7f2edc | ||
|
|
de97184949 | ||
|
|
4c095a869b | ||
|
|
52cbdda306 | ||
|
|
88a893a388 | ||
|
|
453c878fa9 | ||
|
|
d9db7b2587 | ||
|
|
4c35f9a03a | ||
|
|
fc2ae2acaf | ||
|
|
09d7c9d217 | ||
|
|
c988bb3c5d | ||
|
|
06a824d706 | ||
|
|
39e89c1b69 | ||
|
|
dbafb5fcfc | ||
|
|
2d0dd29466 | ||
|
|
28d2c1e4cf | ||
|
|
b2c63a9461 | ||
|
|
aad97a767b | ||
|
|
3d4bb88f48 | ||
|
|
f8b482aafe | ||
|
|
84d3dc55fc | ||
|
|
a3d5ba530a | ||
|
|
852b1c4ad2 | ||
|
|
b2f133f23c | ||
|
|
21601a3a4a | ||
|
|
57fa6f9669 | ||
|
|
1355f9df46 | ||
|
|
31f7c64e7d | ||
|
|
1d6248a516 | ||
|
|
b9e95ae529 | ||
|
|
f233a71161 | ||
|
|
41cb679571 | ||
|
|
7b9e7f283b | ||
|
|
1a11145339 | ||
|
|
eb2860258b | ||
|
|
86eba6192a | ||
|
|
b96c6536cb | ||
|
|
48a03a59dc | ||
|
|
78af51451a | ||
|
|
64e9416261 | ||
|
|
3562bfb14b | ||
|
|
80b3ef95a8 | ||
|
|
d98d74151e | ||
|
|
bf38d5992f | ||
|
|
cd57fb7f7d | ||
|
|
87cfb6b250 | ||
|
|
22e4896294 | ||
|
|
05d33e0fe7 | ||
|
|
82b98d6ede | ||
|
|
38d26a919e | ||
|
|
ab629d99ba | ||
|
|
4b31536c4a | ||
|
|
a30cdc4ccf | ||
|
|
09ea3ba2ca | ||
|
|
0fa1988fb0 | ||
|
|
d3a0c83f09 | ||
|
|
5436b7c33b | ||
|
|
5efbf356ec | ||
|
|
172de00de5 | ||
|
|
4a2ab86325 | ||
|
|
6765f7766a | ||
|
|
d19847932e | ||
|
|
627504c503 | ||
|
|
19a639608f | ||
|
|
c04398e133 | ||
|
|
268394dbb5 | ||
|
|
5789086c24 | ||
|
|
db61e9a4be | ||
|
|
ba5b356435 | ||
|
|
71c78f086f | ||
|
|
482a2c710e | ||
|
|
39e3f11942 | ||
|
|
96417ebbb8 | ||
|
|
fc262ab6bb | ||
|
|
712b68cc80 | ||
|
|
b436f14398 | ||
|
|
e594dd2267 | ||
|
|
ef6c187c6e | ||
|
|
1a5673d6d1 | ||
|
|
4cc2a56649 | ||
|
|
cf93250674 | ||
|
|
e878a050b2 | ||
|
|
4144a690cb | ||
|
|
8c18c33bb8 | ||
|
|
1973e8e40f | ||
|
|
08bc505b41 | ||
|
|
76602aa738 | ||
|
|
339bf30461 | ||
|
|
c5687412d6 | ||
|
|
4396044600 | ||
|
|
882dc5449d | ||
|
|
54cce1ee0e | ||
|
|
3b9c3fb04e | ||
|
|
200b0db200 | ||
|
|
deb93dc75c | ||
|
|
a5a7ae5f47 | ||
|
|
9a43dd0c3b | ||
|
|
9ec95d17f8 | ||
|
|
995e26088f | ||
|
|
2015734692 | ||
|
|
9f0660744c | ||
|
|
52c2de3cb8 | ||
|
|
aee7d6fea4 | ||
|
|
1226e764ba | ||
|
|
bfab34ad8b | ||
|
|
57a9d5c7a9 | ||
|
|
e24489dcce | ||
|
|
9e6725acf0 | ||
|
|
9088907888 | ||
|
|
877a5f8149 | ||
|
|
8f72fe1eb9 | ||
|
|
9a5465ed60 | ||
|
|
16869d9a05 | ||
|
|
4eaaa750d1 | ||
|
|
6d259f9319 | ||
|
|
b9069b9577 | ||
|
|
c241c33749 | ||
|
|
3c9637c2fe | ||
|
|
a071678d02 | ||
|
|
7c1d7acf56 | ||
|
|
aee1b56cc2 | ||
|
|
7a00fde1d2 | ||
|
|
4e523443fe | ||
|
|
804b3bb41e | ||
|
|
1e68029cac | ||
|
|
e87a46437e | ||
|
|
1139530e78 | ||
|
|
5887924a63 | ||
|
|
5fea85e6d3 | ||
|
|
13dcbf7d2f | ||
|
|
28bc611c7b | ||
|
|
9177f9a41b | ||
|
|
6ec16f5f96 | ||
|
|
6abe764edc | ||
|
|
a0eb86a864 | ||
|
|
f028c958cc | ||
|
|
1a0cb53eec | ||
|
|
587cef5259 | ||
|
|
3a39b4007c | ||
|
|
6c54d4f137 | ||
|
|
9085296627 | ||
|
|
98a40cff2c | ||
|
|
581c5b94ab | ||
|
|
a6461e6b0d | ||
|
|
0a8b2b3150 | ||
|
|
d31e503f35 | ||
|
|
6949095cb4 | ||
|
|
de9162b578 | ||
|
|
f3fe26d49f | ||
|
|
423ee90c6a | ||
|
|
eebca1b422 | ||
|
|
0da09b361f | ||
|
|
d7bd3ea929 | ||
|
|
4a942632c1 | ||
|
|
19ba6d24b8 | ||
|
|
89971c7559 | ||
|
|
e267380dad | ||
|
|
0e4e7f881d | ||
|
|
89369231f5 | ||
|
|
a2021967ac | ||
|
|
9822c32dd0 | ||
|
|
25ab9d5408 | ||
|
|
7715309bee | ||
|
|
b4e2d9a5f7 | ||
|
|
e81a0740ec | ||
|
|
d81457480e | ||
|
|
eff3ee2c12 | ||
|
|
e5f2221983 | ||
|
|
216a40de66 | ||
|
|
793f8e5aba | ||
|
|
ee55e0197b | ||
|
|
43988caaa2 | ||
|
|
d562dc0f60 | ||
|
|
9f0eb68928 | ||
|
|
8f2f7117fc | ||
|
|
24b681cb7a | ||
|
|
f1b40ee639 | ||
|
|
ada7e74894 | ||
|
|
978558169e | ||
|
|
0d214a0a14 | ||
|
|
b2dabdc1eb | ||
|
|
4a7aba80a6 | ||
|
|
a8a9d42601 | ||
|
|
d223d51178 | ||
|
|
7fbeaf9528 | ||
|
|
2c5cd34ebe | ||
|
|
9b6ebeae02 | ||
|
|
5bce11a1c8 | ||
|
|
32cc5d8d3c | ||
|
|
e2e14fde2d | ||
|
|
679963704f | ||
|
|
32df42787e | ||
|
|
0cf062c388 | ||
|
|
207412c303 | ||
|
|
bf368d9079 | ||
|
|
45c7f36909 | ||
|
|
240695b9f5 | ||
|
|
3aba154e26 | ||
|
|
1bef171761 | ||
|
|
3ce1c8d98b | ||
|
|
ef5aee8d47 | ||
|
|
8d4878fee6 | ||
|
|
b0465ff0e8 | ||
|
|
f9651e0da6 | ||
|
|
18ab8f43a0 | ||
|
|
77014e3f62 | ||
|
|
c0845253a0 | ||
|
|
38ba6bd5d4 | ||
|
|
0c64074372 | ||
|
|
d12ee9da30 | ||
|
|
65013d771a | ||
|
|
74cca07e35 | ||
|
|
e2e451e2e5 | ||
|
|
ed156a09fa | ||
|
|
8f40b2b313 | ||
|
|
21bd9cf5ad | ||
|
|
f3a3f7b9e8 | ||
|
|
a2afb09b3c | ||
|
|
81a67b9cf4 | ||
|
|
569360bf40 | ||
|
|
59e42de547 | ||
|
|
fa7a06447d | ||
|
|
b13b1c6020 | ||
|
|
d67ebaffd4 | ||
|
|
8890130ab8 | ||
|
|
093fb49d43 | ||
|
|
0ccb6618bd | ||
|
|
af92fc0c28 | ||
|
|
1d29f93257 | ||
|
|
9918a06afa | ||
|
|
eace9319cb | ||
|
|
6428006e92 | ||
|
|
78a3c34ca2 | ||
|
|
c13ee047c8 | ||
|
|
c1784e6b4c | ||
|
|
498562a0e5 | ||
|
|
15f02f424c | ||
|
|
2fd9e3776b | ||
|
|
16df5aebc9 | ||
|
|
8a282bbf9e | ||
|
|
5e55e0d280 | ||
|
|
bd8d73a7d5 | ||
|
|
aa34213e75 | ||
|
|
b54c784f20 | ||
|
|
c46c79caa2 | ||
|
|
2adea0d04e | ||
|
|
7720b5d9df | ||
|
|
f894c98ebc | ||
|
|
1aa7610988 | ||
|
|
02929519ba | ||
|
|
22f216f372 | ||
|
|
5240308ed2 | ||
|
|
fcf174f284 | ||
|
|
52e06a03d8 | ||
|
|
6e2667d4d2 | ||
|
|
b670d49ae2 | ||
|
|
91d791cd85 | ||
|
|
275cdefdd7 | ||
|
|
f14b389544 | ||
|
|
b8076815be | ||
|
|
6734623337 | ||
|
|
ea58b7b66f | ||
|
|
7635c56e5d | ||
|
|
ec58b631ce | ||
|
|
49dd27a4ea |
+5921
File diff suppressed because it is too large
Load Diff
+1529
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,7 @@
|
||||
README: Tcl
|
||||
This is the Tcl 8.5.14 source distribution.
|
||||
http://tcl.sourceforge.net/
|
||||
You can get any source release of Tcl from the file distributions
|
||||
link at the above URL.
|
||||
This is the Tcl 8.5.15 source distribution.
|
||||
http://sourceforge.net/projects/tcl/files/Tcl/
|
||||
You can get any source release of Tcl from the URL above.
|
||||
|
||||
Contents
|
||||
--------
|
||||
@@ -27,9 +26,14 @@ Tcl can also be used for a variety of web-related tasks and for creating
|
||||
powerful command languages for applications.
|
||||
|
||||
Tcl is maintained, enhanced, and distributed freely by the Tcl community.
|
||||
The home for Tcl/Tk releases and bug/patch database is on SourceForge:
|
||||
Source code development and tracking of bug reports and feature requests
|
||||
takes place at:
|
||||
|
||||
http://tcl.sourceforge.net/
|
||||
http://core.tcl.tk/
|
||||
|
||||
Tcl/Tk release and mailing list services are hosted by SourceForge:
|
||||
|
||||
http://sourceforge.net/projects/tcl/
|
||||
|
||||
with the Tcl Developer Xchange hosted at:
|
||||
|
||||
@@ -49,7 +53,7 @@ The home page for this release, including new features, is
|
||||
|
||||
Detailed release notes can be found at the file distributions page
|
||||
by clicking on the relevant version.
|
||||
http://sourceforge.net/projects/tcl/files/
|
||||
http://sourceforge.net/projects/tcl/files/Tcl/
|
||||
|
||||
Information about Tcl itself can be found at
|
||||
http://www.tcl.tk/about/
|
||||
@@ -146,18 +150,13 @@ and go to the Mailing Lists page.
|
||||
------------------------
|
||||
|
||||
We are very interested in receiving bug reports, patches, and suggestions
|
||||
for improvements. We prefer that you send this information to us via the
|
||||
bug form at SourceForge, rather than emailing us directly. The bug
|
||||
database is at:
|
||||
for improvements. We prefer that you send this information to us as
|
||||
tickets entered into our tracker at:
|
||||
|
||||
http://tcl.sourceforge.net/
|
||||
|
||||
The bug form was designed to give uniform structure to bug reports as
|
||||
well as to solicit enough information to minimize followup questions.
|
||||
http://core.tcl.tk/tcl/reportlist
|
||||
|
||||
We will log and follow-up on each bug, although we cannot promise a
|
||||
specific turn-around time. Enhancements, reported via the Feature
|
||||
Requests form at the same web site, may take longer and may not happen
|
||||
specific turn-around time. Enhancements may take longer and may not happen
|
||||
at all unless there is widespread support for them (we're trying to
|
||||
slow the rate at which Tcl/Tk turns into a kitchen sink). It's very
|
||||
difficult to make incompatible changes to Tcl/Tk at this point, due to
|
||||
|
||||
@@ -7734,3 +7734,60 @@ Many revisions to better support a Cygwin environment (nijtmans)
|
||||
2013-03-22 tzdata updated to Olson's tzdata2013b (venkat)
|
||||
|
||||
--- Released 8.5.14, April 3, 2013 --- See ChangeLog for details ---
|
||||
|
||||
2013-04-03 (bug fix)[3205320] outsmart gcc on powerpc detect stack direction
|
||||
|
||||
2013-04-04 (bug fix) Support URLs with query but no path (max)
|
||||
=> http 2.7.12
|
||||
|
||||
2013-04-08 (bug fix)[3610026] regexp crash on color overflow (linnakangas)
|
||||
|
||||
2013-04-16 (bug fix)[3610404] crash in enter traces (found with TclOO) (porter)
|
||||
|
||||
2013-04-30 (enhancement) broaden glibc version detection (kupries)
|
||||
=> platform 1.0.12
|
||||
|
||||
2013-05-01 (bug fix)[2901998] inconsistent I/O buffering (ferrieux)
|
||||
|
||||
2013-05-06 (platform support) Cygwin64 (nijtmans)
|
||||
|
||||
2013-05-16 (platform support) mingw-4.0 (nijtmans)
|
||||
|
||||
2013-05-19 (platform support) FreeBSD updates (cerutti)
|
||||
|
||||
2013-05-22 (bug fix)[3613609] [lsort -nocase] failed on non-ASCII (fellows)
|
||||
|
||||
2013-05-28 (bug fix)[3036566] Use language packs (Vista+) locale (oehlmann)
|
||||
=> msgcat 1.5.2
|
||||
|
||||
2013-06-03 Restored lost performance appending to long strings (elby,porter)
|
||||
|
||||
2013-06-17 (bug fix)[a876646] [:cntrl:] includes \x00 to \x1f (nijtmans)
|
||||
|
||||
2013-06-17 [string is space \u180e] => 1 (nijtmans)
|
||||
|
||||
2013-06-27 (bug fix)[983509] missing encodings for config values (nijtmans)
|
||||
|
||||
2013-06-27 (bug fix)[34538b] apply DST in 2099 (lang)
|
||||
|
||||
2013-07-02 (bug fix)[32afa6] corrected dirent64 check (griffin)
|
||||
|
||||
2013-07-06 tzdata updated to Olson's tzdata2013d (kenny)
|
||||
|
||||
2013-07-26 (bug fix)[6585b2] regexp {(\w).*?\1} abb (lane)
|
||||
|
||||
2013-07-29 [string is space \u202f] => 1 (nijtmans)
|
||||
|
||||
2013-08-01 [a0bc85] Limited support for fork with threads (for Rivet) (nijtmans)
|
||||
|
||||
2013-08-14 (bug fix)[a16752] Missing command delete callbacks (porter)
|
||||
|
||||
2013-08-15 Errors from execution traces become errors of the command (porter)
|
||||
|
||||
2013-09-07 (bug fix) stop crashes in tclcompiler (kupries,porter)
|
||||
|
||||
2013-09-07 (bug fix)[86ceb4] have tm path favor first provider (neumann,porter)
|
||||
|
||||
2013-09-13 (bug fix)[bdd91c] crash in exec stack mem management (azazel)
|
||||
|
||||
--- Released 8.5.15, September 16, 2013 --- http://core.tcl.tk/tcl/ for details
|
||||
|
||||
+14
-2
@@ -9,7 +9,7 @@
|
||||
.TH Threads 3 "8.1" Tcl "Tcl Library Procedures"
|
||||
.BS
|
||||
.SH NAME
|
||||
Tcl_ConditionNotify, Tcl_ConditionWait, Tcl_ConditionFinalize, Tcl_GetThreadData, Tcl_MutexLock, Tcl_MutexUnlock, Tcl_MutexFinalize, Tcl_CreateThread, Tcl_JoinThread \- Tcl thread support
|
||||
Tcl_ConditionNotify, Tcl_ConditionWait, Tcl_ConditionFinalize, Tcl_GetThreadData, Tcl_UnsetThreadData, Tcl_MutexLock, Tcl_MutexUnlock, Tcl_MutexFinalize, Tcl_CreateThread, Tcl_JoinThread \- Tcl thread support
|
||||
.SH SYNOPSIS
|
||||
.nf
|
||||
\fB#include <tcl.h>\fR
|
||||
@@ -27,6 +27,9 @@ Void *
|
||||
\fBTcl_GetThreadData\fR(\fIkeyPtr, size\fR)
|
||||
.sp
|
||||
void
|
||||
\fBTcl_UnsetThreadData\fR(\fIkeyPtr, size, all\fR)
|
||||
.sp
|
||||
void
|
||||
\fBTcl_MutexLock\fR(\fImutexPtr\fR)
|
||||
.sp
|
||||
void
|
||||
@@ -53,10 +56,13 @@ Note that a polling value of 0 seconds does not make much sense.
|
||||
This identifies a block of thread local storage. The key should be
|
||||
static and process-wide, yet each thread will end up associating
|
||||
a different block of storage with this key.
|
||||
.AP int *size in
|
||||
.AP int size in
|
||||
The size of the thread local storage block. This amount of data
|
||||
is allocated and initialized to zero the first time each thread
|
||||
calls \fBTcl_GetThreadData\fR.
|
||||
.AP int all in
|
||||
Non-zero if the thread local storage block is to be unset for all
|
||||
threads.
|
||||
.AP Tcl_ThreadId *idPtr out
|
||||
The referred storage will contain the id of the newly created thread as
|
||||
returned by the operating system.
|
||||
@@ -129,6 +135,12 @@ thread-private data. Its argument is a key that is shared by all threads
|
||||
and a size for the block of storage. The storage is automatically
|
||||
allocated and initialized to all zeros the first time each thread asks for it.
|
||||
The storage is automatically deallocated by \fBTcl_FinalizeThread\fR.
|
||||
.PP
|
||||
The \fBTcl_UnsetThreadData\fR function is used to manually destroy
|
||||
and remove the block of thread local storage. Normally, calling this
|
||||
function is not necessary. However, if an individual thread local
|
||||
storage block needs to be manually removed, this function provides a
|
||||
means to do it.
|
||||
.SS "SYNCHRONIZATION AND COMMUNICATION"
|
||||
Tcl provides \fBTcl_ThreadQueueEvent\fR and \fBTcl_ThreadAlert\fR
|
||||
for handling event queuing in multithreaded applications. See
|
||||
|
||||
+4
-3
@@ -35,7 +35,7 @@ msgcat \- Tcl message catalog
|
||||
\fB::msgcat::mcflmset \fIsrc-trans-list\fR
|
||||
.VE "TIP 404"
|
||||
.sp
|
||||
\fB::msgcat::mcunknown \fIlocale src-string\fR
|
||||
\fB::msgcat::mcunknown \fIlocale src-string\fR ?\fIarg arg ...\fR?
|
||||
.BE
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
@@ -157,12 +157,13 @@ translate-string\fR ?\fIsrc-string translate-string ...\fR?}
|
||||
of \fB::msgcat::mcflset\fR. The function returns the number of translations set.
|
||||
.VE "TIP 404"
|
||||
.TP
|
||||
\fB::msgcat::mcunknown \fIlocale src-string\fR
|
||||
\fB::msgcat::mcunknown \fIlocale src-string\fR ?\fIarg arg ...\fR?
|
||||
.
|
||||
This routine is called by \fB::msgcat::mc\fR in the case when
|
||||
a translation for \fIsrc-string\fR is not defined in the
|
||||
current locale. The default action is to return
|
||||
\fIsrc-string\fR. This procedure can be redefined by the
|
||||
\fIsrc-string\fR passed by format if there are any arguments. This
|
||||
procedure can be redefined by the
|
||||
application, for example to log error messages for each unknown
|
||||
string. The \fB::msgcat::mcunknown\fR procedure is invoked at the
|
||||
same stack context as the call to \fB::msgcat::mc\fR. The return value
|
||||
|
||||
+2
-2
@@ -96,7 +96,7 @@ The input substring must be an octal integer. It is read in and the
|
||||
integer value is stored in the variable,
|
||||
truncated as required by the size modifier value.
|
||||
.TP 10
|
||||
\fBx\fR
|
||||
\fBx\fR or \fBX\fR
|
||||
The input substring must be a hexadecimal integer.
|
||||
It is read in and the integer value is stored in the variable,
|
||||
truncated as required by the size modifier value.
|
||||
@@ -126,7 +126,7 @@ substring may be a white-space character.
|
||||
The input substring consists of all the characters up to the next
|
||||
white-space character; the characters are copied to the variable.
|
||||
.TP 10
|
||||
\fBe\fR or \fBf\fR or \fBg\fR
|
||||
\fBe\fR or \fBf\fR or \fBg\fR or \fBE\fR or \fBG\fR
|
||||
The input substring must be a floating-point number consisting
|
||||
of an optional sign, a string of decimal digits possibly
|
||||
containing a decimal point, and an optional exponent consisting
|
||||
|
||||
@@ -254,7 +254,14 @@ newcolor(
|
||||
* Oops, must allocate more.
|
||||
*/
|
||||
|
||||
if (cm->max == MAX_COLOR) {
|
||||
CERR(REG_ECOLORS);
|
||||
return COLORLESS; /* too many colors */
|
||||
}
|
||||
n = cm->ncds * 2;
|
||||
if (n < MAX_COLOR + 1) {
|
||||
n = MAX_COLOR + 1;
|
||||
}
|
||||
if (cm->cd == cm->cdspace) {
|
||||
newCd = (struct colordesc *) MALLOC(n * sizeof(struct colordesc));
|
||||
if (newCd != NULL) {
|
||||
|
||||
+14
-11
@@ -118,7 +118,7 @@ static const struct cname {
|
||||
* Unicode character-class tables.
|
||||
*/
|
||||
|
||||
typedef struct crange {
|
||||
typedef struct {
|
||||
chr start;
|
||||
chr end;
|
||||
} crange;
|
||||
@@ -259,8 +259,9 @@ static const chr alphaCharTable[] = {
|
||||
*/
|
||||
|
||||
static const crange controlRangeTable[] = {
|
||||
{0x7f, 0x9f}, {0x600, 0x604}, {0x200b, 0x200f}, {0x202a, 0x202e},
|
||||
{0x2060, 0x2064}, {0x206a, 0x206f}, {0xe000, 0xf8ff}, {0xfff9, 0xfffb}
|
||||
{0x0, 0x1f}, {0x7f, 0x9f}, {0x600, 0x604}, {0x200b, 0x200f},
|
||||
{0x202a, 0x202e}, {0x2060, 0x2064}, {0x2066, 0x206f}, {0xe000, 0xf8ff},
|
||||
{0xfff9, 0xfffb}
|
||||
#if TCL_UTF_MAX > 4
|
||||
,{0x1d173, 0x1d17a}, {0xe0020, 0xe007f}, {0xf0000, 0xffffd}, {0x100000, 0x10fffd}
|
||||
#endif
|
||||
@@ -269,7 +270,7 @@ static const crange controlRangeTable[] = {
|
||||
#define NUM_CONTROL_RANGE (sizeof(controlRangeTable)/sizeof(crange))
|
||||
|
||||
static const chr controlCharTable[] = {
|
||||
0xad, 0x6dd, 0x70f, 0xfeff
|
||||
0xad, 0x61c, 0x6dd, 0x70f, 0x180e, 0xfeff
|
||||
#if TCL_UTF_MAX > 4
|
||||
,0x110bd, 0xe0001
|
||||
#endif
|
||||
@@ -315,12 +316,13 @@ static const crange punctRangeTable[] = {
|
||||
{0x17d8, 0x17da}, {0x1800, 0x180a}, {0x1aa0, 0x1aa6}, {0x1aa8, 0x1aad},
|
||||
{0x1b5a, 0x1b60}, {0x1bfc, 0x1bff}, {0x1c3b, 0x1c3f}, {0x1cc0, 0x1cc7},
|
||||
{0x2010, 0x2027}, {0x2030, 0x2043}, {0x2045, 0x2051}, {0x2053, 0x205e},
|
||||
{0x2768, 0x2775}, {0x27e6, 0x27ef}, {0x2983, 0x2998}, {0x29d8, 0x29db},
|
||||
{0x2cf9, 0x2cfc}, {0x2e00, 0x2e2e}, {0x2e30, 0x2e3b}, {0x3001, 0x3003},
|
||||
{0x3008, 0x3011}, {0x3014, 0x301f}, {0xa60d, 0xa60f}, {0xa6f2, 0xa6f7},
|
||||
{0xa874, 0xa877}, {0xa8f8, 0xa8fa}, {0xa9c1, 0xa9cd}, {0xaa5c, 0xaa5f},
|
||||
{0xfe10, 0xfe19}, {0xfe30, 0xfe52}, {0xfe54, 0xfe61}, {0xff01, 0xff03},
|
||||
{0xff05, 0xff0a}, {0xff0c, 0xff0f}, {0xff3b, 0xff3d}, {0xff5f, 0xff65}
|
||||
{0x2308, 0x230b}, {0x2768, 0x2775}, {0x27e6, 0x27ef}, {0x2983, 0x2998},
|
||||
{0x29d8, 0x29db}, {0x2cf9, 0x2cfc}, {0x2e00, 0x2e2e}, {0x2e30, 0x2e3b},
|
||||
{0x3001, 0x3003}, {0x3008, 0x3011}, {0x3014, 0x301f}, {0xa60d, 0xa60f},
|
||||
{0xa6f2, 0xa6f7}, {0xa874, 0xa877}, {0xa8f8, 0xa8fa}, {0xa9c1, 0xa9cd},
|
||||
{0xaa5c, 0xaa5f}, {0xfe10, 0xfe19}, {0xfe30, 0xfe52}, {0xfe54, 0xfe61},
|
||||
{0xff01, 0xff03}, {0xff05, 0xff0a}, {0xff0c, 0xff0f}, {0xff3b, 0xff3d},
|
||||
{0xff5f, 0xff65}
|
||||
#if TCL_UTF_MAX > 4
|
||||
,{0x10100, 0x10102}, {0x10a50, 0x10a58}, {0x10b39, 0x10b3f}, {0x11047, 0x1104d},
|
||||
{0x110be, 0x110c1}, {0x11140, 0x11143}, {0x111c5, 0x111c8}, {0x12470, 0x12473}
|
||||
@@ -360,7 +362,8 @@ static const crange spaceRangeTable[] = {
|
||||
#define NUM_SPACE_RANGE (sizeof(spaceRangeTable)/sizeof(crange))
|
||||
|
||||
static const chr spaceCharTable[] = {
|
||||
0x20, 0xa0, 0x1680, 0x180e, 0x2028, 0x2029, 0x202f, 0x205f, 0x3000
|
||||
0x20, 0xa0, 0x1680, 0x180e, 0x2028, 0x2029, 0x202f, 0x205f, 0x2060,
|
||||
0x3000, 0xfeff
|
||||
};
|
||||
|
||||
#define NUM_SPACE_CHAR (sizeof(spaceCharTable)/sizeof(chr))
|
||||
|
||||
@@ -17,3 +17,4 @@
|
||||
{ REG_MIXED, "REG_MIXED", "character widths of regex and string differ" },
|
||||
{ REG_BADOPT, "REG_BADOPT", "invalid embedded option" },
|
||||
{ REG_ETOOBIG, "REG_ETOOBIG", "nfa has too many states" },
|
||||
{ REG_ECOLORS, "REG_ECOLORS", "too many colors" },
|
||||
|
||||
@@ -278,6 +278,7 @@ typedef struct {
|
||||
#define REG_MIXED 17 /* character widths of regex and string differ */
|
||||
#define REG_BADOPT 18 /* invalid embedded option */
|
||||
#define REG_ETOOBIG 19 /* nfa has too many states */
|
||||
#define REG_ECOLORS 20 /* too many colors */
|
||||
/* two specials for debugging and testing */
|
||||
#define REG_ATOI 101 /* convert error-code name to number */
|
||||
#define REG_ITOA 102 /* convert error-code number to name */
|
||||
|
||||
+1
-6
@@ -512,12 +512,7 @@ cfindloop(
|
||||
return er;
|
||||
}
|
||||
if ((shorter) ? end == estop : end == begin) {
|
||||
/*
|
||||
* No point in trying again.
|
||||
*/
|
||||
|
||||
*coldp = cold;
|
||||
return REG_NOMATCH;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+4
-3
@@ -162,6 +162,7 @@
|
||||
|
||||
typedef short color; /* colors of characters */
|
||||
typedef int pcolor; /* what color promotes to */
|
||||
#define MAX_COLOR SHRT_MAX /* max color value */
|
||||
#define COLORLESS (-1) /* impossible color */
|
||||
#define WHITE 0 /* default color, parent of all others */
|
||||
|
||||
@@ -357,12 +358,12 @@ struct subre {
|
||||
#define CAP 010 /* capturing parens below */
|
||||
#define BACKR 020 /* back reference below */
|
||||
#define INUSE 0100 /* in use in final tree */
|
||||
#define LOCAL 03 /* bits which may not propagate up */
|
||||
#define NOPROP 03 /* bits which may not propagate up */
|
||||
#define LMIX(f) ((f)<<2) /* LONGER -> MIXED */
|
||||
#define SMIX(f) ((f)<<1) /* SHORTER -> MIXED */
|
||||
#define UP(f) (((f)&~LOCAL) | (LMIX(f) & SMIX(f) & MIXED))
|
||||
#define UP(f) (((f)&~NOPROP) | (LMIX(f) & SMIX(f) & MIXED))
|
||||
#define MESSY(f) ((f)&(MIXED|CAP|BACKR))
|
||||
#define PREF(f) ((f)&LOCAL)
|
||||
#define PREF(f) ((f)&NOPROP)
|
||||
#define PREF2(f1, f2) ((PREF(f1) != 0) ? PREF(f1) : PREF(f2))
|
||||
#define COMBINE(f1, f2) (UP((f1)|(f2)) | PREF2(f1, f2))
|
||||
short retry; /* index into retry memory */
|
||||
|
||||
@@ -2108,6 +2108,9 @@ declare 578 {
|
||||
declare 579 {
|
||||
void Tcl_AppendPrintfToObj(Tcl_Obj *objPtr, const char *format, ...)
|
||||
}
|
||||
declare 580 {
|
||||
void Tcl_UnsetThreadData(Tcl_ThreadDataKey *keyPtr, int size, int all)
|
||||
}
|
||||
declare 630 {
|
||||
void TclUnusedStubEntry(void)
|
||||
}
|
||||
|
||||
+8
-6
@@ -58,10 +58,10 @@ extern "C" {
|
||||
#define TCL_MAJOR_VERSION 8
|
||||
#define TCL_MINOR_VERSION 5
|
||||
#define TCL_RELEASE_LEVEL TCL_FINAL_RELEASE
|
||||
#define TCL_RELEASE_SERIAL 14
|
||||
#define TCL_RELEASE_SERIAL 15
|
||||
|
||||
#define TCL_VERSION "8.5"
|
||||
#define TCL_PATCH_LEVEL "8.5.14"
|
||||
#define TCL_PATCH_LEVEL "8.5.15"
|
||||
|
||||
/*
|
||||
* The following definitions set up the proper options for Windows compilers.
|
||||
@@ -293,10 +293,12 @@ typedef long LONG;
|
||||
* in ANSI C; maps them to type "char *" in non-ANSI systems.
|
||||
*/
|
||||
|
||||
#ifndef NO_VOID
|
||||
#define VOID void
|
||||
#else
|
||||
#define VOID char
|
||||
#ifndef __VXWORKS__
|
||||
# ifndef NO_VOID
|
||||
# define VOID void
|
||||
# else
|
||||
# define VOID char
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
+30
-15
@@ -410,6 +410,18 @@ Tcl_CreateInterp(void)
|
||||
Tcl_Panic("Tcl_CallFrame must not be smaller than CallFrame");
|
||||
}
|
||||
|
||||
#if defined(_WIN32) && !defined(_WIN64)
|
||||
if (sizeof(time_t) != 4) {
|
||||
/*NOTREACHED*/
|
||||
Tcl_Panic("<time.h> is not compatible with MSVC");
|
||||
}
|
||||
if ((TclOffset(Tcl_StatBuf,st_atime) != 32)
|
||||
|| (TclOffset(Tcl_StatBuf,st_ctime) != 40)) {
|
||||
/*NOTREACHED*/
|
||||
Tcl_Panic("<sys/stat.h> is not compatible with MSVC");
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Initialize support for namespaces and create the global namespace
|
||||
* (whose name is ""; an alias is "::"). This also initializes the Tcl
|
||||
@@ -1954,12 +1966,9 @@ Tcl_CreateCommand(
|
||||
* future calls to Tcl_GetCommandName.
|
||||
*
|
||||
* Side effects:
|
||||
* If no command named "cmdName" already exists for interp, one is
|
||||
* created. Otherwise, if a command does exist, then if the object-based
|
||||
* Tcl_ObjCmdProc is TclInvokeStringCommand, we assume Tcl_CreateCommand
|
||||
* was called previously for the same command and just set its
|
||||
* Tcl_ObjCmdProc to the argument "proc"; otherwise, we delete the old
|
||||
* command.
|
||||
* If a command named "cmdName" already exists for interp, it is
|
||||
* first deleted. Then the new command is created from the arguments.
|
||||
* [***] (See below for exception).
|
||||
*
|
||||
* In the future, during bytecode evaluation when "cmdName" is seen as
|
||||
* the name of a command by Tcl_EvalObj or Tcl_Eval, the object-based
|
||||
@@ -2026,17 +2035,22 @@ Tcl_CreateObjCommand(
|
||||
if (!isNew) {
|
||||
cmdPtr = Tcl_GetHashValue(hPtr);
|
||||
|
||||
/* Command already exists. */
|
||||
|
||||
/*
|
||||
* Command already exists. If its object-based Tcl_ObjCmdProc is
|
||||
* TclInvokeStringCommand, we just set its Tcl_ObjCmdProc to the
|
||||
* argument "proc". Otherwise, we delete the old command.
|
||||
* [***] This is wrong. See Tcl Bug a16752c252.
|
||||
* However, this buggy behavior is kept under particular
|
||||
* circumstances to accommodate deployed binaries of the
|
||||
* "tclcompiler" program. http://sourceforge.net/projects/tclpro/
|
||||
* that crash if the bug is fixed.
|
||||
*/
|
||||
|
||||
if (cmdPtr->objProc == TclInvokeStringCommand) {
|
||||
if (cmdPtr->objProc == TclInvokeStringCommand
|
||||
&& cmdPtr->clientData == clientData
|
||||
&& cmdPtr->deleteData == clientData
|
||||
&& cmdPtr->deleteProc == deleteProc) {
|
||||
cmdPtr->objProc = proc;
|
||||
cmdPtr->objClientData = clientData;
|
||||
cmdPtr->deleteProc = deleteProc;
|
||||
cmdPtr->deleteData = clientData;
|
||||
return (Tcl_Command) cmdPtr;
|
||||
}
|
||||
|
||||
@@ -2176,8 +2190,8 @@ TclInvokeStringCommand(
|
||||
* A standard Tcl string result value.
|
||||
*
|
||||
* Side effects:
|
||||
* Besides those side effects of the called Tcl_CmdProc,
|
||||
* TclInvokeStringCommand allocates and frees storage.
|
||||
* Besides those side effects of the called Tcl_ObjCmdProc,
|
||||
* TclInvokeObjectCommand allocates and frees storage.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -3648,10 +3662,11 @@ TclEvalObjvInternal(
|
||||
* implementation.
|
||||
*/
|
||||
|
||||
if (cmdEpoch != newEpoch) {
|
||||
if (traceCode == TCL_OK && cmdEpoch != newEpoch) {
|
||||
checkTraces = 0;
|
||||
if (commandPtr) {
|
||||
Tcl_DecrRefCount(commandPtr);
|
||||
commandPtr = NULL;
|
||||
}
|
||||
goto reparseBecauseOfTraces;
|
||||
}
|
||||
|
||||
+3
-4
@@ -130,8 +130,7 @@ Tcl_CaseObjCmd(
|
||||
for (i = 0; i < caseObjc; i += 2) {
|
||||
int patObjc, j;
|
||||
const char **patObjv;
|
||||
char *pat;
|
||||
unsigned char *p;
|
||||
char *pat, *p;
|
||||
|
||||
if (i == (caseObjc - 1)) {
|
||||
Tcl_ResetResult(interp);
|
||||
@@ -145,8 +144,8 @@ Tcl_CaseObjCmd(
|
||||
*/
|
||||
|
||||
pat = TclGetString(caseObjv[i]);
|
||||
for (p = (unsigned char *) pat; *p != '\0'; p++) {
|
||||
if (isspace(*p) || (*p == '\\')) { /* INTL: ISO space, UCHAR */
|
||||
for (p = pat; *p != '\0'; p++) {
|
||||
if (TclIsSpaceProc(*p) || (*p == '\\')) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-6
@@ -2807,7 +2807,7 @@ Tcl_LsearchObjCmd(
|
||||
dataType = INTEGER;
|
||||
break;
|
||||
case LSEARCH_NOCASE: /* -nocase */
|
||||
strCmpFn = strcasecmp;
|
||||
strCmpFn = TclUtfCasecmp;
|
||||
noCase = 1;
|
||||
break;
|
||||
case LSEARCH_NOT: /* -not */
|
||||
@@ -3209,7 +3209,7 @@ Tcl_LsearchObjCmd(
|
||||
*/
|
||||
|
||||
if (noCase) {
|
||||
match = (strcasecmp(bytes, patternBytes) == 0);
|
||||
match = (TclUtfCasecmp(bytes, patternBytes) == 0);
|
||||
} else {
|
||||
match = (memcmp(bytes, patternBytes,
|
||||
(size_t) length) == 0);
|
||||
@@ -3460,7 +3460,8 @@ Tcl_LsortObjCmd(
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument values. */
|
||||
{
|
||||
int i, j, index, indices, length, nocase = 0, sortMode, indexc;
|
||||
int i, j, index, indices, length, nocase = 0, indexc;
|
||||
int sortMode = SORTMODE_ASCII;
|
||||
Tcl_Obj *resultPtr, *cmdPtr, **listObjPtrs, *listObj, *indexPtr;
|
||||
SortElement *elementArray, *elementPtr;
|
||||
SortInfo sortInfo; /* Information about this sort that needs to
|
||||
@@ -3712,7 +3713,7 @@ Tcl_LsortObjCmd(
|
||||
goto done1;
|
||||
}
|
||||
elementArray[i].index.intValue = a;
|
||||
} else if (sortInfo.sortMode == SORTMODE_REAL) {
|
||||
} else if (sortMode == SORTMODE_REAL) {
|
||||
double a;
|
||||
if (Tcl_GetDoubleFromObj(sortInfo.interp, indexPtr, &a) != TCL_OK) {
|
||||
sortInfo.resultCode = TCL_ERROR;
|
||||
@@ -3790,7 +3791,7 @@ Tcl_LsortObjCmd(
|
||||
ckfree((char *)elementArray);
|
||||
|
||||
done:
|
||||
if (sortInfo.sortMode == SORTMODE_COMMAND) {
|
||||
if (sortMode == SORTMODE_COMMAND) {
|
||||
TclDecrRefCount(sortInfo.compareCmdPtr);
|
||||
TclDecrRefCount(listObj);
|
||||
sortInfo.compareCmdPtr = NULL;
|
||||
@@ -3932,7 +3933,7 @@ SortCompare(
|
||||
order = strcmp(elemPtr1->index.strValuePtr,
|
||||
elemPtr2->index.strValuePtr);
|
||||
} else if (infoPtr->sortMode == SORTMODE_ASCII_NC) {
|
||||
order = strcasecmp(elemPtr1->index.strValuePtr,
|
||||
order = TclUtfCasecmp(elemPtr1->index.strValuePtr,
|
||||
elemPtr2->index.strValuePtr);
|
||||
} else if (infoPtr->sortMode == SORTMODE_DICTIONARY) {
|
||||
order = DictionaryCompare(elemPtr1->index.strValuePtr,
|
||||
|
||||
+1
-1
@@ -3436,7 +3436,7 @@ Tcl_SwitchObjCmd(
|
||||
i++;
|
||||
goto finishedOptions;
|
||||
case OPT_NOCASE:
|
||||
strCmpFn = strcasecmp;
|
||||
strCmpFn = TclUtfCasecmp;
|
||||
noCase = 1;
|
||||
break;
|
||||
|
||||
|
||||
+44
-36
@@ -683,11 +683,10 @@ TclCompileDictSetCmd(
|
||||
CompileEnv *envPtr) /* Holds resulting instructions. */
|
||||
{
|
||||
Tcl_Token *tokenPtr;
|
||||
int numWords, i;
|
||||
Proc *procPtr = envPtr->procPtr;
|
||||
DefineLineInformation; /* TIP #280 */
|
||||
Tcl_Token *varTokenPtr;
|
||||
int dictVarIndex, nameChars;
|
||||
int i, dictVarIndex, nameChars;
|
||||
const char *name;
|
||||
|
||||
/*
|
||||
@@ -720,8 +719,7 @@ TclCompileDictSetCmd(
|
||||
*/
|
||||
|
||||
tokenPtr = TokenAfter(varTokenPtr);
|
||||
numWords = parsePtr->numWords-1;
|
||||
for (i=1 ; i<numWords ; i++) {
|
||||
for (i=2 ; i< parsePtr->numWords ; i++) {
|
||||
CompileWord(envPtr, tokenPtr, interp, i);
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
}
|
||||
@@ -730,7 +728,7 @@ TclCompileDictSetCmd(
|
||||
* Now emit the instruction to do the dict manipulation.
|
||||
*/
|
||||
|
||||
TclEmitInstInt4( INST_DICT_SET, numWords-2, envPtr);
|
||||
TclEmitInstInt4( INST_DICT_SET, parsePtr->numWords-3, envPtr);
|
||||
TclEmitInt4( dictVarIndex, envPtr);
|
||||
return TCL_OK;
|
||||
}
|
||||
@@ -808,7 +806,7 @@ TclCompileDictIncrCmd(
|
||||
* Emit the key and the code to actually do the increment.
|
||||
*/
|
||||
|
||||
CompileWord(envPtr, keyTokenPtr, interp, 3);
|
||||
CompileWord(envPtr, keyTokenPtr, interp, 2);
|
||||
TclEmitInstInt4( INST_DICT_INCR_IMM, incrAmount, envPtr);
|
||||
TclEmitInt4( dictVarIndex, envPtr);
|
||||
return TCL_OK;
|
||||
@@ -824,7 +822,7 @@ TclCompileDictGetCmd(
|
||||
CompileEnv *envPtr) /* Holds resulting instructions. */
|
||||
{
|
||||
Tcl_Token *tokenPtr;
|
||||
int numWords, i;
|
||||
int i;
|
||||
DefineLineInformation; /* TIP #280 */
|
||||
|
||||
/*
|
||||
@@ -836,17 +834,16 @@ TclCompileDictGetCmd(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
tokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
numWords = parsePtr->numWords-1;
|
||||
|
||||
/*
|
||||
* Only compile this because we need INST_DICT_GET anyway.
|
||||
*/
|
||||
|
||||
for (i=0 ; i<numWords ; i++) {
|
||||
for (i=1 ; i<parsePtr->numWords ; i++) {
|
||||
CompileWord(envPtr, tokenPtr, interp, i);
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
}
|
||||
TclEmitInstInt4(INST_DICT_GET, numWords-1, envPtr);
|
||||
TclEmitInstInt4(INST_DICT_GET, parsePtr->numWords-2, envPtr);
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
@@ -937,7 +934,7 @@ TclCompileDictForCmd(
|
||||
* errors at this point.
|
||||
*/
|
||||
|
||||
CompileWord(envPtr, dictTokenPtr, interp, 3);
|
||||
CompileWord(envPtr, dictTokenPtr, interp, 2);
|
||||
TclEmitInstInt4( INST_DICT_FIRST, infoIndex, envPtr);
|
||||
emptyTargetOffset = CurrentOffset(envPtr);
|
||||
TclEmitInstInt4( INST_JUMP_TRUE4, 0, envPtr);
|
||||
@@ -1162,7 +1159,7 @@ TclCompileDictUpdateCmd(
|
||||
infoIndex = TclCreateAuxData(duiPtr, &tclDictUpdateInfoType, envPtr);
|
||||
|
||||
for (i=0 ; i<numVars ; i++) {
|
||||
CompileWord(envPtr, keyTokenPtrs[i], interp, i);
|
||||
CompileWord(envPtr, keyTokenPtrs[i], interp, 2*i+2);
|
||||
}
|
||||
TclEmitInstInt4( INST_LIST, numVars, envPtr);
|
||||
TclEmitInstInt4( INST_DICT_UPDATE_START, dictIndex, envPtr);
|
||||
@@ -1313,8 +1310,8 @@ TclCompileDictLappendCmd(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
dictVarIndex = TclFindCompiledLocal(name, nameChars, 1, procPtr);
|
||||
CompileWord(envPtr, keyTokenPtr, interp, 3);
|
||||
CompileWord(envPtr, valueTokenPtr, interp, 4);
|
||||
CompileWord(envPtr, keyTokenPtr, interp, 2);
|
||||
CompileWord(envPtr, valueTokenPtr, interp, 3);
|
||||
TclEmitInstInt4( INST_DICT_LAPPEND, dictVarIndex, envPtr);
|
||||
return TCL_OK;
|
||||
}
|
||||
@@ -1628,7 +1625,7 @@ TclCompileForeachCmd(
|
||||
Tcl_Token *tokenPtr, *bodyTokenPtr;
|
||||
unsigned char *jumpPc;
|
||||
JumpFixup jumpFalseFixup;
|
||||
int jumpBackDist, jumpBackOffset, infoIndex, range, bodyIndex;
|
||||
int jumpBackDist, jumpBackOffset, infoIndex, range;
|
||||
int numWords, numLists, numVars, loopIndex, tempVar, i, j, code;
|
||||
int savedStackDepth = envPtr->currStackDepth;
|
||||
DefineLineInformation; /* TIP #280 */
|
||||
@@ -1669,8 +1666,6 @@ TclCompileForeachCmd(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
bodyIndex = i-1;
|
||||
|
||||
/*
|
||||
* Allocate storage for the varcList and varvList arrays if necessary.
|
||||
*/
|
||||
@@ -1837,7 +1832,7 @@ TclCompileForeachCmd(
|
||||
* Inline compile the loop body.
|
||||
*/
|
||||
|
||||
SetLineInformation (bodyIndex);
|
||||
SetLineInformation (numWords - 1);
|
||||
ExceptionRangeStarts(envPtr, range);
|
||||
CompileBody(envPtr, bodyTokenPtr, interp);
|
||||
ExceptionRangeEnds(envPtr, range);
|
||||
@@ -5786,16 +5781,14 @@ TclCompileUpvarCmd(
|
||||
Tcl_Token *tokenPtr, *otherTokenPtr, *localTokenPtr;
|
||||
int simpleVarName, isScalar, localIndex, numWords, i;
|
||||
DefineLineInformation; /* TIP #280 */
|
||||
Tcl_Obj *objPtr = Tcl_NewObj();
|
||||
Tcl_Obj *objPtr;
|
||||
|
||||
if (envPtr->procPtr == NULL) {
|
||||
Tcl_DecrRefCount(objPtr);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
numWords = parsePtr->numWords;
|
||||
if (numWords < 3) {
|
||||
Tcl_DecrRefCount(objPtr);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
@@ -5803,6 +5796,7 @@ TclCompileUpvarCmd(
|
||||
* Push the frame index if it is known at compile time
|
||||
*/
|
||||
|
||||
objPtr = Tcl_NewObj();
|
||||
tokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
if(TclWordKnownAtCompileTime(tokenPtr, objPtr)) {
|
||||
CallFrame *framePtr;
|
||||
@@ -5821,16 +5815,17 @@ TclCompileUpvarCmd(
|
||||
if(numWords%2) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
/* TODO: Push the known value instead? */
|
||||
CompileWord(envPtr, tokenPtr, interp, 1);
|
||||
otherTokenPtr = TokenAfter(tokenPtr);
|
||||
i = 4;
|
||||
i = 2;
|
||||
} else {
|
||||
if(!(numWords%2)) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
PushLiteral(envPtr, "1", 1);
|
||||
otherTokenPtr = tokenPtr;
|
||||
i = 3;
|
||||
i = 1;
|
||||
}
|
||||
} else {
|
||||
Tcl_DecrRefCount(objPtr);
|
||||
@@ -5843,12 +5838,12 @@ TclCompileUpvarCmd(
|
||||
* be called at runtime.
|
||||
*/
|
||||
|
||||
for(; i<=numWords; i+=2, otherTokenPtr = TokenAfter(localTokenPtr)) {
|
||||
for(; i<numWords; i+=2, otherTokenPtr = TokenAfter(localTokenPtr)) {
|
||||
localTokenPtr = TokenAfter(otherTokenPtr);
|
||||
|
||||
CompileWord(envPtr, otherTokenPtr, interp, 1);
|
||||
CompileWord(envPtr, otherTokenPtr, interp, i);
|
||||
PushVarNameWord(interp, localTokenPtr, envPtr, TCL_CREATE_VAR,
|
||||
&localIndex, &simpleVarName, &isScalar, 1);
|
||||
&localIndex, &simpleVarName, &isScalar, i+1);
|
||||
|
||||
if((localIndex < 0) || !isScalar) {
|
||||
return TCL_ERROR;
|
||||
@@ -5925,7 +5920,7 @@ TclCompileNamespaceCmd(
|
||||
*/
|
||||
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
CompileWord(envPtr, tokenPtr, interp, 1);
|
||||
CompileWord(envPtr, tokenPtr, interp, 2);
|
||||
|
||||
/*
|
||||
* Loop over the (otherVar, thisVar) pairs. If any of the thisVar is not a
|
||||
@@ -5934,13 +5929,13 @@ TclCompileNamespaceCmd(
|
||||
*/
|
||||
|
||||
localTokenPtr = tokenPtr;
|
||||
for(i=4; i<=numWords; i+=2) {
|
||||
for(i=3; i<numWords; i+=2) {
|
||||
otherTokenPtr = TokenAfter(localTokenPtr);
|
||||
localTokenPtr = TokenAfter(otherTokenPtr);
|
||||
|
||||
CompileWord(envPtr, otherTokenPtr, interp, 1);
|
||||
CompileWord(envPtr, otherTokenPtr, interp, i);
|
||||
PushVarNameWord(interp, localTokenPtr, envPtr, TCL_CREATE_VAR,
|
||||
&localIndex, &simpleVarName, &isScalar, 1);
|
||||
&localIndex, &simpleVarName, &isScalar, i+1);
|
||||
|
||||
if((localIndex < 0) || !isScalar) {
|
||||
return TCL_ERROR;
|
||||
@@ -6012,14 +6007,17 @@ TclCompileGlobalCmd(
|
||||
*/
|
||||
|
||||
varTokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
for(i=2; i<=numWords; varTokenPtr = TokenAfter(varTokenPtr),i++) {
|
||||
for(i=1; i<numWords; varTokenPtr = TokenAfter(varTokenPtr),i++) {
|
||||
localIndex = IndexTailVarIfKnown(interp, varTokenPtr, envPtr);
|
||||
|
||||
if(localIndex < 0) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
CompileWord(envPtr, varTokenPtr, interp, 1);
|
||||
/* TODO: Consider what values can pass through the
|
||||
* IndexTailVarIfKnown() screen. Full CompileWord()
|
||||
* likely does not apply here. Push known value instead. */
|
||||
CompileWord(envPtr, varTokenPtr, interp, i);
|
||||
TclEmitInstInt4(INST_NSUPVAR, localIndex, envPtr);
|
||||
}
|
||||
|
||||
@@ -6081,7 +6079,7 @@ TclCompileVariableCmd(
|
||||
*/
|
||||
|
||||
valueTokenPtr = parsePtr->tokenPtr;
|
||||
for(i=2; i<=numWords; i+=2) {
|
||||
for(i=1; i<numWords; i+=2) {
|
||||
varTokenPtr = TokenAfter(valueTokenPtr);
|
||||
valueTokenPtr = TokenAfter(varTokenPtr);
|
||||
|
||||
@@ -6091,15 +6089,18 @@ TclCompileVariableCmd(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
CompileWord(envPtr, varTokenPtr, interp, 1);
|
||||
/* TODO: Consider what values can pass through the
|
||||
* IndexTailVarIfKnown() screen. Full CompileWord()
|
||||
* likely does not apply here. Push known value instead. */
|
||||
CompileWord(envPtr, varTokenPtr, interp, i);
|
||||
TclEmitInstInt4(INST_VARIABLE, localIndex, envPtr);
|
||||
|
||||
if (i != numWords) {
|
||||
if (i != numWords-1) {
|
||||
/*
|
||||
* A value has been given: set the variable, pop the value
|
||||
*/
|
||||
|
||||
CompileWord(envPtr, valueTokenPtr, interp, 1);
|
||||
CompileWord(envPtr, valueTokenPtr, interp, i+1);
|
||||
TclEmitInstInt4(INST_STORE_SCALAR4, localIndex, envPtr);
|
||||
TclEmitOpcode(INST_POP, envPtr);
|
||||
}
|
||||
@@ -6149,6 +6150,7 @@ TclCompileEnsemble(
|
||||
Tcl_Parse synthetic;
|
||||
int len, numBytes, result, flags = 0, i;
|
||||
const char *word;
|
||||
DefineLineInformation;
|
||||
|
||||
if (parsePtr->numWords < 2) {
|
||||
return TCL_ERROR;
|
||||
@@ -6388,8 +6390,14 @@ TclCompileEnsemble(
|
||||
* Hand off compilation to the subcommand compiler. At last!
|
||||
*/
|
||||
|
||||
mapPtr->loc[eclIndex].line++;
|
||||
mapPtr->loc[eclIndex].next++;
|
||||
|
||||
result = cmdPtr->compileProc(interp, &synthetic, cmdPtr, envPtr);
|
||||
|
||||
mapPtr->loc[eclIndex].line--;
|
||||
mapPtr->loc[eclIndex].next--;
|
||||
|
||||
/*
|
||||
* Clean up if necessary.
|
||||
*/
|
||||
|
||||
@@ -1631,7 +1631,6 @@ TclCompileScript(
|
||||
TclEmitPush(TclAddLiteralObj(envPtr, Tcl_NewObj(), NULL), envPtr);
|
||||
}
|
||||
|
||||
envPtr->numSrcBytes = (p - script);
|
||||
TclStackFree(interp, parsePtr);
|
||||
Tcl_DStringFree(&ds);
|
||||
}
|
||||
|
||||
+65
-54
@@ -26,14 +26,15 @@
|
||||
#define ASSOC_KEY "tclPackageAboutDict"
|
||||
|
||||
/*
|
||||
* A ClientData struct for the QueryConfig command. Store the two bits
|
||||
* A ClientData struct for the QueryConfig command. Store the three bits
|
||||
* of data we need; the package name for which we store a config dict,
|
||||
* and the (Tcl_Interp *) in which it is stored.
|
||||
* the (Tcl_Interp *) in which it is stored, and the encoding.
|
||||
*/
|
||||
|
||||
typedef struct QCCD {
|
||||
Tcl_Obj *pkg;
|
||||
Tcl_Interp *interp;
|
||||
char *encoding;
|
||||
} QCCD;
|
||||
|
||||
/*
|
||||
@@ -78,20 +79,25 @@ Tcl_RegisterConfig(
|
||||
Tcl_Obj *pDB, *pkgDict;
|
||||
Tcl_DString cmdName;
|
||||
Tcl_Config *cfg;
|
||||
Tcl_Encoding venc = Tcl_GetEncoding(NULL, valEncoding);
|
||||
QCCD *cdPtr = (QCCD *)ckalloc(sizeof(QCCD));
|
||||
|
||||
cdPtr->interp = interp;
|
||||
if (valEncoding) {
|
||||
cdPtr->encoding = ckalloc(strlen(valEncoding)+1);
|
||||
strcpy(cdPtr->encoding, valEncoding);
|
||||
} else {
|
||||
cdPtr->encoding = NULL;
|
||||
}
|
||||
cdPtr->pkg = Tcl_NewStringObj(pkgName, -1);
|
||||
|
||||
/*
|
||||
* Phase I: Adding the provided information to the internal database of
|
||||
* package meta data. Only if we have an ok encoding.
|
||||
* package meta data.
|
||||
*
|
||||
* Phase II: Create a command for querying this database, specific to the
|
||||
* package registerting its configuration. This is the approved interface
|
||||
* package registering its configuration. This is the approved interface
|
||||
* in TIP 59. In the future a more general interface should be done, as
|
||||
* followup to TIP 59. Simply because our database is now general across
|
||||
* follow-up to TIP 59. Simply because our database is now general across
|
||||
* packages, and not a structure tied to one package.
|
||||
*
|
||||
* Note, the created command will have a reference through its clientdata.
|
||||
@@ -104,52 +110,36 @@ Tcl_RegisterConfig(
|
||||
* dictionaries visible at Tcl level. I.e. they are not filled
|
||||
*/
|
||||
|
||||
if (venc != NULL) {
|
||||
/*
|
||||
* Retrieve package specific configuration...
|
||||
*/
|
||||
pDB = GetConfigDict(interp);
|
||||
|
||||
pDB = GetConfigDict(interp);
|
||||
/*
|
||||
* Retrieve package specific configuration...
|
||||
*/
|
||||
|
||||
if (Tcl_DictObjGet(interp, pDB, cdPtr->pkg, &pkgDict) != TCL_OK
|
||||
if (Tcl_DictObjGet(interp, pDB, cdPtr->pkg, &pkgDict) != TCL_OK
|
||||
|| (pkgDict == NULL)) {
|
||||
pkgDict = Tcl_NewDictObj();
|
||||
} else if (Tcl_IsShared(pkgDict)) {
|
||||
pkgDict = Tcl_DuplicateObj(pkgDict);
|
||||
}
|
||||
|
||||
/*
|
||||
* Extend the package configuration...
|
||||
*/
|
||||
|
||||
for (cfg=configuration ; cfg->key!=NULL && cfg->key[0]!='\0' ; cfg++) {
|
||||
Tcl_DString conv;
|
||||
CONST char *convValue =
|
||||
Tcl_ExternalToUtfDString(venc, cfg->value, -1, &conv);
|
||||
|
||||
/*
|
||||
* We know that the keys are in ASCII/UTF-8, so for them is no
|
||||
* conversion required.
|
||||
*/
|
||||
|
||||
Tcl_DictObjPut(interp, pkgDict, Tcl_NewStringObj(cfg->key, -1),
|
||||
Tcl_NewStringObj(convValue, -1));
|
||||
Tcl_DStringFree(&conv);
|
||||
}
|
||||
|
||||
/*
|
||||
* We're now done with the encoding, so drop it.
|
||||
*/
|
||||
|
||||
Tcl_FreeEncoding(venc);
|
||||
|
||||
/*
|
||||
* Write the changes back into the overall database.
|
||||
*/
|
||||
|
||||
Tcl_DictObjPut(interp, pDB, cdPtr->pkg, pkgDict);
|
||||
pkgDict = Tcl_NewDictObj();
|
||||
} else if (Tcl_IsShared(pkgDict)) {
|
||||
pkgDict = Tcl_DuplicateObj(pkgDict);
|
||||
}
|
||||
|
||||
/*
|
||||
* Extend the package configuration...
|
||||
* We cannot assume that the encodings are initialized, therefore
|
||||
* store the value as-is in a byte array. See Bug [9b2e636361].
|
||||
*/
|
||||
|
||||
for (cfg=configuration ; cfg->key!=NULL && cfg->key[0]!='\0' ; cfg++) {
|
||||
Tcl_DictObjPut(interp, pkgDict, Tcl_NewStringObj(cfg->key, -1),
|
||||
Tcl_NewByteArrayObj((unsigned char *)cfg->value, strlen(cfg->value)));
|
||||
}
|
||||
|
||||
/*
|
||||
* Write the changes back into the overall database.
|
||||
*/
|
||||
|
||||
Tcl_DictObjPut(interp, pDB, cdPtr->pkg, pkgDict);
|
||||
|
||||
/*
|
||||
* Now create the interface command for retrieval of the package
|
||||
* information.
|
||||
@@ -178,7 +168,7 @@ Tcl_RegisterConfig(
|
||||
|
||||
if (Tcl_CreateObjCommand(interp, Tcl_DStringValue(&cmdName),
|
||||
QueryConfigObjCmd, (ClientData) cdPtr, QueryConfigDelete) == NULL) {
|
||||
Tcl_Panic("%s: %s", "Tcl_RegisterConfig",
|
||||
Tcl_Panic("%s: %s", "Tcl_RegisterConfig",
|
||||
"Unable to create query command for package configuration");
|
||||
}
|
||||
|
||||
@@ -213,12 +203,15 @@ QueryConfigObjCmd(
|
||||
Tcl_Obj *pkgName = cdPtr->pkg;
|
||||
Tcl_Obj *pDB, *pkgDict, *val, *listPtr;
|
||||
int n, index;
|
||||
static const char *subcmdStrings[] = {
|
||||
static CONST char *subcmdStrings[] = {
|
||||
"get", "list", NULL
|
||||
};
|
||||
enum subcmds {
|
||||
CFG_GET, CFG_LIST
|
||||
};
|
||||
Tcl_DString conv;
|
||||
Tcl_Encoding venc = NULL;
|
||||
CONST char *value;
|
||||
|
||||
if ((objc < 2) || (objc > 3)) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?argument?");
|
||||
@@ -232,12 +225,12 @@ QueryConfigObjCmd(
|
||||
pDB = GetConfigDict(interp);
|
||||
if (Tcl_DictObjGet(interp, pDB, pkgName, &pkgDict) != TCL_OK
|
||||
|| pkgDict == NULL) {
|
||||
/*
|
||||
/*
|
||||
* Maybe a Tcl_Panic is better, because the package data has to be
|
||||
* present.
|
||||
*/
|
||||
|
||||
Tcl_SetResult(interp, "package not known", TCL_STATIC);
|
||||
Tcl_SetResult(interp, "package not known", TCL_STATIC);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
@@ -248,13 +241,27 @@ QueryConfigObjCmd(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
if (Tcl_DictObjGet(interp, pkgDict, objv [2], &val) != TCL_OK
|
||||
if (Tcl_DictObjGet(interp, pkgDict, objv[2], &val) != TCL_OK
|
||||
|| val == NULL) {
|
||||
Tcl_SetResult(interp, "key not known", TCL_STATIC);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
Tcl_SetObjResult(interp, val);
|
||||
if (cdPtr->encoding) {
|
||||
venc = Tcl_GetEncoding(interp, cdPtr->encoding);
|
||||
if (!venc) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Value is stored as-is in a byte array, see Bug [9b2e636361],
|
||||
* so we have to decode it first.
|
||||
*/
|
||||
value = (const char *) Tcl_GetByteArrayFromObj(val, &n);
|
||||
value = Tcl_ExternalToUtfDString(venc, value, n, &conv);
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(value,
|
||||
Tcl_DStringLength(&conv)));
|
||||
Tcl_DStringFree(&conv);
|
||||
return TCL_OK;
|
||||
|
||||
case CFG_LIST:
|
||||
@@ -317,8 +324,12 @@ QueryConfigDelete(
|
||||
QCCD *cdPtr = (QCCD *) clientData;
|
||||
Tcl_Obj *pkgName = cdPtr->pkg;
|
||||
Tcl_Obj *pDB = GetConfigDict(cdPtr->interp);
|
||||
|
||||
Tcl_DictObjRemove(NULL, pDB, pkgName);
|
||||
Tcl_DecrRefCount(pkgName);
|
||||
if (cdPtr->encoding) {
|
||||
ckfree((char *)cdPtr->encoding);
|
||||
}
|
||||
ckfree((char *)cdPtr);
|
||||
}
|
||||
|
||||
@@ -361,7 +372,7 @@ GetConfigDict(
|
||||
*
|
||||
* This function is associated with the "Package About dict" assoc data
|
||||
* for an interpreter; it is invoked when the interpreter is deleted in
|
||||
* order to free the information assoicated with any pending error
|
||||
* order to free the information associated with any pending error
|
||||
* reports.
|
||||
*
|
||||
* Results:
|
||||
|
||||
+1
-1
@@ -2690,7 +2690,7 @@ TclDatelex(
|
||||
|
||||
location->first_column = yyInput - info->dateStart;
|
||||
for ( ; ; ) {
|
||||
while (isspace(UCHAR(*yyInput))) {
|
||||
while (TclIsSpaceProc(*yyInput)) {
|
||||
yyInput++;
|
||||
}
|
||||
|
||||
|
||||
+104
-4
@@ -3408,7 +3408,12 @@ EXTERN Tcl_Obj * Tcl_ObjPrintf(CONST char *format, ...);
|
||||
EXTERN void Tcl_AppendPrintfToObj(Tcl_Obj *objPtr,
|
||||
CONST char *format, ...);
|
||||
#endif
|
||||
/* Slot 580 is reserved */
|
||||
#ifndef Tcl_UnsetThreadData_TCL_DECLARED
|
||||
#define Tcl_UnsetThreadData_TCL_DECLARED
|
||||
/* 580 */
|
||||
EXTERN void Tcl_UnsetThreadData(Tcl_ThreadDataKey *keyPtr,
|
||||
int size, int all);
|
||||
#endif
|
||||
/* Slot 581 is reserved */
|
||||
/* Slot 582 is reserved */
|
||||
/* Slot 583 is reserved */
|
||||
@@ -4078,7 +4083,7 @@ typedef struct TclStubs {
|
||||
int (*tcl_AppendFormatToObj) (Tcl_Interp *interp, Tcl_Obj *objPtr, CONST char *format, int objc, Tcl_Obj *CONST objv[]); /* 577 */
|
||||
Tcl_Obj * (*tcl_ObjPrintf) (CONST char *format, ...); /* 578 */
|
||||
void (*tcl_AppendPrintfToObj) (Tcl_Obj *objPtr, CONST char *format, ...); /* 579 */
|
||||
VOID *reserved580;
|
||||
void (*tcl_UnsetThreadData) (Tcl_ThreadDataKey *keyPtr, int size, int all); /* 580 */
|
||||
VOID *reserved581;
|
||||
VOID *reserved582;
|
||||
VOID *reserved583;
|
||||
@@ -6483,7 +6488,10 @@ extern TclStubs *tclStubsPtr;
|
||||
#define Tcl_AppendPrintfToObj \
|
||||
(tclStubsPtr->tcl_AppendPrintfToObj) /* 579 */
|
||||
#endif
|
||||
/* Slot 580 is reserved */
|
||||
#ifndef Tcl_UnsetThreadData
|
||||
#define Tcl_UnsetThreadData \
|
||||
(tclStubsPtr->tcl_UnsetThreadData) /* 580 */
|
||||
#endif
|
||||
/* Slot 581 is reserved */
|
||||
/* Slot 582 is reserved */
|
||||
/* Slot 583 is reserved */
|
||||
@@ -6547,9 +6555,102 @@ extern TclStubs *tclStubsPtr;
|
||||
#undef TCL_STORAGE_CLASS
|
||||
#define TCL_STORAGE_CLASS DLLIMPORT
|
||||
|
||||
#undef Tcl_PkgPresent
|
||||
#define Tcl_PkgPresent(interp, name, version, exact) \
|
||||
Tcl_PkgPresentEx(interp, name, version, exact, NULL)
|
||||
#undef Tcl_PkgProvide
|
||||
#define Tcl_PkgProvide(interp, name, version) \
|
||||
Tcl_PkgProvideEx(interp, name, version, NULL)
|
||||
#undef Tcl_PkgRequire
|
||||
#define Tcl_PkgRequire(interp, name, version, exact) \
|
||||
Tcl_PkgRequireEx(interp, name, version, exact, NULL)
|
||||
#undef Tcl_GetIndexFromObj
|
||||
#define Tcl_GetIndexFromObj(interp, objPtr, tablePtr, msg, flags, indexPtr) \
|
||||
Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, \
|
||||
sizeof(char *), msg, flags, indexPtr)
|
||||
#undef Tcl_NewBooleanObj
|
||||
#define Tcl_NewBooleanObj(boolValue) \
|
||||
Tcl_NewIntObj((boolValue)!=0)
|
||||
#undef Tcl_DbNewBooleanObj
|
||||
#define Tcl_DbNewBooleanObj(boolValue, file, line) \
|
||||
Tcl_DbNewLongObj((boolValue)!=0, file, line)
|
||||
#undef Tcl_SetBooleanObj
|
||||
#define Tcl_SetBooleanObj(objPtr, boolValue) \
|
||||
Tcl_SetIntObj((objPtr), (boolValue)!=0)
|
||||
#undef Tcl_SetVar
|
||||
#define Tcl_SetVar(interp, varName, newValue, flags) \
|
||||
Tcl_SetVar2(interp, varName, NULL, newValue, flags)
|
||||
#undef Tcl_UnsetVar
|
||||
#define Tcl_UnsetVar(interp, varName, flags) \
|
||||
Tcl_UnsetVar2(interp, varName, NULL, flags)
|
||||
#undef Tcl_GetVar
|
||||
#define Tcl_GetVar(interp, varName, flags) \
|
||||
Tcl_GetVar2(interp, varName, NULL, flags)
|
||||
#undef Tcl_TraceVar
|
||||
#define Tcl_TraceVar(interp, varName, flags, proc, clientData) \
|
||||
Tcl_TraceVar2(interp, varName, NULL, flags, proc, clientData)
|
||||
#undef Tcl_UntraceVar
|
||||
#define Tcl_UntraceVar(interp, varName, flags, proc, clientData) \
|
||||
Tcl_UntraceVar2(interp, varName, NULL, flags, proc, clientData)
|
||||
#undef Tcl_VarTraceInfo
|
||||
#define Tcl_VarTraceInfo(interp, varName, flags, proc, prevClientData) \
|
||||
Tcl_VarTraceInfo2(interp, varName, NULL, flags, proc, prevClientData)
|
||||
#undef Tcl_UpVar
|
||||
#define Tcl_UpVar(interp, frameName, varName, localName, flags) \
|
||||
Tcl_UpVar2(interp, frameName, varName, NULL, localName, flags)
|
||||
|
||||
#if defined(USE_TCL_STUBS) && !defined(USE_TCL_STUB_PROCS)
|
||||
# if defined(__CYGWIN__) && defined(TCL_WIDE_INT_IS_LONG)
|
||||
/* On Cygwin64, long is 64-bit while on Win64 long is 32-bit. Therefore
|
||||
* we have to make sure that all stub entries on Cygwin64 follow the
|
||||
* Win64 signature. Cygwin64 stubbed extensions cannot use those stub
|
||||
* entries any more, they should use the 64-bit alternatives where
|
||||
* possible. Tcl 9 must find a better solution, but that cannot be done
|
||||
* without introducing a binary incompatibility.
|
||||
*/
|
||||
# undef Tcl_DbNewLongObj
|
||||
# undef Tcl_GetLongFromObj
|
||||
# undef Tcl_NewLongObj
|
||||
# undef Tcl_SetLongObj
|
||||
# undef Tcl_ExprLong
|
||||
# undef Tcl_ExprLongObj
|
||||
# undef Tcl_UniCharNcmp
|
||||
# undef Tcl_UtfNcmp
|
||||
# undef Tcl_UtfNcasecmp
|
||||
# undef Tcl_UniCharNcasecmp
|
||||
# define Tcl_DbNewLongObj ((Tcl_Obj*(*)(long,const char*,int))Tcl_DbNewWideIntObj)
|
||||
# define Tcl_GetLongFromObj ((int(*)(Tcl_Interp*,Tcl_Obj*,long*))Tcl_GetWideIntFromObj)
|
||||
# define Tcl_NewLongObj ((Tcl_Obj*(*)(long))Tcl_NewWideIntObj)
|
||||
# define Tcl_SetLongObj ((void(*)(Tcl_Obj*,long))Tcl_SetWideIntObj)
|
||||
# define Tcl_ExprLong TclExprLong
|
||||
static inline int TclExprLong(Tcl_Interp *interp, const char *string, long *ptr){
|
||||
int intValue;
|
||||
int result = tclStubsPtr->tcl_ExprLong(interp, string, (long *)&intValue);
|
||||
if (result == TCL_OK) *ptr = (long)intValue;
|
||||
return result;
|
||||
}
|
||||
# define Tcl_ExprLongObj TclExprLongObj
|
||||
static inline int TclExprLongObj(Tcl_Interp *interp, Tcl_Obj *obj, long *ptr){
|
||||
int intValue;
|
||||
int result = tclStubsPtr->tcl_ExprLongObj(interp, obj, (long *)&intValue);
|
||||
if (result == TCL_OK) *ptr = (long)intValue;
|
||||
return result;
|
||||
}
|
||||
# define Tcl_UniCharNcmp(ucs,uct,n) \
|
||||
((int(*)(const Tcl_UniChar*,const Tcl_UniChar*,unsigned int))tclStubsPtr->tcl_UniCharNcmp)(ucs,uct,(unsigned int)(n))
|
||||
# define Tcl_UtfNcmp(s1,s2,n) \
|
||||
((int(*)(const char*,const char*,unsigned int))tclStubsPtr->tcl_UtfNcmp)(s1,s2,(unsigned int)(n))
|
||||
# define Tcl_UtfNcasecmp(s1,s2,n) \
|
||||
((int(*)(const char*,const char*,unsigned int))tclStubsPtr->tcl_UtfNcasecmp)(s1,s2,(unsigned int)(n))
|
||||
# define Tcl_UniCharNcasecmp(ucs,uct,n) \
|
||||
((int(*)(const Tcl_UniChar*,const Tcl_UniChar*,unsigned int))tclStubsPtr->tcl_UniCharNcasecmp)(ucs,uct,(unsigned int)(n))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Deprecated Tcl procedures:
|
||||
*/
|
||||
|
||||
#undef Tcl_EvalObj
|
||||
#define Tcl_EvalObj(interp,objPtr) \
|
||||
Tcl_EvalObjEx((interp),(objPtr),0)
|
||||
@@ -6558,4 +6659,3 @@ extern TclStubs *tclStubsPtr;
|
||||
Tcl_EvalObjEx((interp),(objPtr),TCL_EVAL_GLOBAL)
|
||||
|
||||
#endif /* _TCLDECLS */
|
||||
|
||||
|
||||
+4
-9
@@ -949,14 +949,8 @@ TclInitSubsystems(void)
|
||||
|
||||
TclpInitLock();
|
||||
if (subsystemsInitialized == 0) {
|
||||
/*
|
||||
* Have to set this bit here to avoid deadlock with the routines
|
||||
* below us that call into TclInitSubsystems.
|
||||
*/
|
||||
|
||||
subsystemsInitialized = 1;
|
||||
|
||||
/*
|
||||
/*
|
||||
* Initialize locks used by the memory allocators before anything
|
||||
* interesting happens so we can use the allocators in the
|
||||
* implementation of self-initializing locks.
|
||||
@@ -974,12 +968,13 @@ TclInitSubsystems(void)
|
||||
TclpInitPlatform(); /* Creates signal handler(s) */
|
||||
TclInitDoubleConversion(); /* Initializes constants for
|
||||
* converting to/from double. */
|
||||
TclInitObjSubsystem(); /* Register obj types, create
|
||||
TclInitObjSubsystem(); /* Register obj types, create
|
||||
* mutexes. */
|
||||
TclInitIOSubsystem(); /* Inits a tsd key (noop). */
|
||||
TclInitEncodingSubsystem(); /* Process wide encoding init. */
|
||||
TclpSetInterfaces();
|
||||
TclInitNamespaceSubsystem();/* Register ns obj type (mutexed). */
|
||||
TclInitNamespaceSubsystem();/* Register ns obj type (mutexed). */
|
||||
subsystemsInitialized = 1;
|
||||
}
|
||||
TclpInitUnlock();
|
||||
}
|
||||
|
||||
+11
-9
@@ -836,13 +836,13 @@ TclFinalizeExecution(void)
|
||||
(TCL_ALLOCALIGN/sizeof(Tcl_Obj *))
|
||||
|
||||
/*
|
||||
* OFFSET computes how many words have to be skipped until the next aligned
|
||||
* wordSkip computes how many words have to be skipped until the next aligned
|
||||
* word. Note that we are only interested in the low order bits of ptr, so
|
||||
* that any possible information loss in PTR2INT is of no consequence.
|
||||
*/
|
||||
|
||||
static inline int
|
||||
OFFSET(
|
||||
wordSkip(
|
||||
void *ptr)
|
||||
{
|
||||
int mask = TCL_ALLOCALIGN-1;
|
||||
@@ -855,7 +855,7 @@ OFFSET(
|
||||
*/
|
||||
|
||||
#define MEMSTART(markerPtr) \
|
||||
((markerPtr) + OFFSET(markerPtr))
|
||||
((markerPtr) + wordSkip(markerPtr))
|
||||
|
||||
|
||||
/*
|
||||
@@ -900,7 +900,7 @@ GrowEvaluationStack(
|
||||
}
|
||||
} else {
|
||||
Tcl_Obj **tmpMarkerPtr = esPtr->tosPtr + 1;
|
||||
int offset = OFFSET(tmpMarkerPtr);
|
||||
int offset = wordSkip(tmpMarkerPtr);
|
||||
|
||||
if (needed + offset < 0) {
|
||||
/*
|
||||
@@ -2311,6 +2311,7 @@ TclExecuteByteCode(
|
||||
|
||||
initCatchTop += moved;
|
||||
catchTop += moved;
|
||||
bcFramePtr = (CmdFrame *) (initCatchTop + codePtr->maxExceptDepth + 1);
|
||||
initTosPtr += moved;
|
||||
tosPtr += moved;
|
||||
esPtr = iPtr->execEnvPtr->execStackPtr;
|
||||
@@ -2424,11 +2425,6 @@ TclExecuteByteCode(
|
||||
if (result == TCL_OK) {
|
||||
Tcl_Obj *objPtr;
|
||||
|
||||
#ifndef TCL_COMPILE_DEBUG
|
||||
if (*(pc+pcAdjustment) == INST_POP) {
|
||||
NEXT_INST_V((pcAdjustment+1), objc, 0);
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* Push the call's object result and continue execution with
|
||||
* the next instruction.
|
||||
@@ -2455,6 +2451,12 @@ TclExecuteByteCode(
|
||||
TclNewObj(objPtr);
|
||||
Tcl_IncrRefCount(objPtr);
|
||||
iPtr->objResultPtr = objPtr;
|
||||
#ifndef TCL_COMPILE_DEBUG
|
||||
if (*(pc+pcAdjustment) == INST_POP) {
|
||||
TclDecrRefCount(objResultPtr);
|
||||
NEXT_INST_V((pcAdjustment+1), objc, 0);
|
||||
}
|
||||
#endif
|
||||
NEXT_INST_V(pcAdjustment, objc, -1);
|
||||
} else {
|
||||
cleanup = objc;
|
||||
|
||||
+92
-8
@@ -229,6 +229,7 @@ static int WriteChars(Channel *chanPtr, const char *src,
|
||||
static Tcl_Obj * FixLevelCode(Tcl_Obj *msg);
|
||||
static void SpliceChannel(Tcl_Channel chan);
|
||||
static void CutChannel(Tcl_Channel chan);
|
||||
static int WillRead(Channel *chanPtr);
|
||||
|
||||
/*
|
||||
* Simplifying helper macros. All may use their argument(s) multiple times.
|
||||
@@ -342,6 +343,52 @@ static Tcl_ObjType tclChannelType = {
|
||||
(((st)->csPtrW) && ((fl) & TCL_WRITABLE)))
|
||||
|
||||
#define MAX_CHANNEL_BUFFER_SIZE (1024*1024)
|
||||
|
||||
/*
|
||||
* ChanRead, dropped here by a time traveler, see 8.6
|
||||
*/
|
||||
static inline int
|
||||
ChanRead(
|
||||
Channel *chanPtr,
|
||||
char *dst,
|
||||
int dstSize,
|
||||
int *errnoPtr)
|
||||
{
|
||||
if (WillRead(chanPtr) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return chanPtr->typePtr->inputProc(chanPtr->instanceData, dst, dstSize,
|
||||
errnoPtr);
|
||||
}
|
||||
|
||||
static inline Tcl_WideInt
|
||||
ChanSeek(
|
||||
Channel *chanPtr,
|
||||
Tcl_WideInt offset,
|
||||
int mode,
|
||||
int *errnoPtr)
|
||||
{
|
||||
/*
|
||||
* Note that we prefer the wideSeekProc if that field is available in the
|
||||
* type and non-NULL.
|
||||
*/
|
||||
|
||||
if (HaveVersion(chanPtr->typePtr, TCL_CHANNEL_VERSION_3) &&
|
||||
chanPtr->typePtr->wideSeekProc != NULL) {
|
||||
return chanPtr->typePtr->wideSeekProc(chanPtr->instanceData,
|
||||
offset, mode, errnoPtr);
|
||||
}
|
||||
|
||||
if (offset<Tcl_LongAsWide(LONG_MIN) || offset>Tcl_LongAsWide(LONG_MAX)) {
|
||||
*errnoPtr = EOVERFLOW;
|
||||
return Tcl_LongAsWide(-1);
|
||||
}
|
||||
|
||||
return Tcl_LongAsWide(chanPtr->typePtr->seekProc(chanPtr->instanceData,
|
||||
Tcl_WideAsLong(offset), mode, errnoPtr));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*---------------------------------------------------------------------------
|
||||
@@ -3548,6 +3595,33 @@ Tcl_WriteObj(
|
||||
}
|
||||
}
|
||||
|
||||
static void WillWrite(Channel *chanPtr)
|
||||
{
|
||||
int inputBuffered;
|
||||
|
||||
if ((chanPtr->typePtr->seekProc != NULL)
|
||||
&& ((inputBuffered = Tcl_InputBuffered((Tcl_Channel) chanPtr)) > 0)) {
|
||||
int ignore;
|
||||
DiscardInputQueued(chanPtr->state, 0);
|
||||
ChanSeek(chanPtr, - inputBuffered, SEEK_CUR, &ignore);
|
||||
}
|
||||
}
|
||||
|
||||
static int WillRead(Channel *chanPtr)
|
||||
{
|
||||
if ((chanPtr->typePtr->seekProc != NULL)
|
||||
&& (Tcl_OutputBuffered((Tcl_Channel) chanPtr) > 0)) {
|
||||
if ((chanPtr->state->curOutPtr != NULL)
|
||||
&& IsBufferReady(chanPtr->state->curOutPtr)) {
|
||||
SetFlag(chanPtr->state, BUFFER_READY);
|
||||
}
|
||||
if (FlushChannel(NULL, chanPtr, 0) != 0) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
@@ -3581,6 +3655,10 @@ WriteBytes(
|
||||
char *dst;
|
||||
int dstMax, sawLF, savedLF, total, dstLen, toWrite, translate;
|
||||
|
||||
if (srcLen) {
|
||||
WillWrite(chanPtr);
|
||||
}
|
||||
|
||||
total = 0;
|
||||
sawLF = 0;
|
||||
savedLF = 0;
|
||||
@@ -3682,6 +3760,10 @@ WriteChars(
|
||||
Tcl_Encoding encoding;
|
||||
char safe[BUFFER_PADDING];
|
||||
|
||||
if (srcLen) {
|
||||
WillWrite(chanPtr);
|
||||
}
|
||||
|
||||
total = 0;
|
||||
sawLF = 0;
|
||||
savedLF = 0;
|
||||
@@ -5187,8 +5269,8 @@ Tcl_ReadRaw(
|
||||
* The case of 'bytesToRead == 0' at this point cannot happen.
|
||||
*/
|
||||
|
||||
nread = (chanPtr->typePtr->inputProc)(chanPtr->instanceData,
|
||||
bufPtr + copied, bytesToRead - copied, &result);
|
||||
nread = ChanRead(chanPtr, bufPtr + copied,
|
||||
bytesToRead - copied, &result);
|
||||
|
||||
#ifdef TCL_IO_TRACK_OS_FOR_DRIVER_WITH_BAD_BLOCKING
|
||||
}
|
||||
@@ -6353,8 +6435,7 @@ GetInput(
|
||||
} else {
|
||||
#endif /* TCL_IO_TRACK_OS_FOR_DRIVER_WITH_BAD_BLOCKING */
|
||||
|
||||
nread = (chanPtr->typePtr->inputProc)(chanPtr->instanceData,
|
||||
InsertPoint(bufPtr), toRead, &result);
|
||||
nread = ChanRead(chanPtr, InsertPoint(bufPtr), toRead, &result);
|
||||
|
||||
#ifdef TCL_IO_TRACK_OS_FOR_DRIVER_WITH_BAD_BLOCKING
|
||||
}
|
||||
@@ -6657,8 +6738,8 @@ Tcl_Tell(
|
||||
outputBuffered = Tcl_OutputBuffered(chan);
|
||||
|
||||
if ((inputBuffered != 0) && (outputBuffered != 0)) {
|
||||
Tcl_SetErrno(EFAULT);
|
||||
return Tcl_LongAsWide(-1);
|
||||
/*Tcl_SetErrno(EFAULT);*/
|
||||
/*return Tcl_LongAsWide(-1);*/
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -6679,6 +6760,7 @@ Tcl_Tell(
|
||||
Tcl_SetErrno(result);
|
||||
return Tcl_LongAsWide(-1);
|
||||
}
|
||||
|
||||
if (inputBuffered != 0) {
|
||||
return curPos - inputBuffered;
|
||||
}
|
||||
@@ -6780,8 +6862,10 @@ Tcl_TruncateChannel(
|
||||
* pre-read input data.
|
||||
*/
|
||||
|
||||
if (Tcl_Seek(chan, (Tcl_WideInt)0, SEEK_CUR) == Tcl_LongAsWide(-1)) {
|
||||
return TCL_ERROR;
|
||||
WillWrite(chanPtr);
|
||||
|
||||
if (WillRead(chanPtr) < 0) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+17
-17
@@ -1823,24 +1823,24 @@ TclInitChanCmd(
|
||||
* function at the moment.
|
||||
*/
|
||||
static const EnsembleImplMap initMap[] = {
|
||||
{"blocked", Tcl_FblockedObjCmd},
|
||||
{"close", Tcl_CloseObjCmd},
|
||||
{"copy", Tcl_FcopyObjCmd},
|
||||
{"create", TclChanCreateObjCmd}, /* TIP #219 */
|
||||
{"eof", Tcl_EofObjCmd},
|
||||
{"event", Tcl_FileEventObjCmd},
|
||||
{"flush", Tcl_FlushObjCmd},
|
||||
{"gets", Tcl_GetsObjCmd},
|
||||
{"pending", ChanPendingObjCmd}, /* TIP #287 */
|
||||
{"postevent", TclChanPostEventObjCmd}, /* TIP #219 */
|
||||
{"puts", Tcl_PutsObjCmd},
|
||||
{"read", Tcl_ReadObjCmd},
|
||||
{"seek", Tcl_SeekObjCmd},
|
||||
{"tell", Tcl_TellObjCmd},
|
||||
{"truncate", ChanTruncateObjCmd}, /* TIP #208 */
|
||||
{NULL}
|
||||
{"blocked", Tcl_FblockedObjCmd, NULL},
|
||||
{"close", Tcl_CloseObjCmd, NULL},
|
||||
{"copy", Tcl_FcopyObjCmd, NULL},
|
||||
{"create", TclChanCreateObjCmd, NULL}, /* TIP #219 */
|
||||
{"eof", Tcl_EofObjCmd, NULL},
|
||||
{"event", Tcl_FileEventObjCmd, NULL},
|
||||
{"flush", Tcl_FlushObjCmd, NULL},
|
||||
{"gets", Tcl_GetsObjCmd, NULL},
|
||||
{"pending", ChanPendingObjCmd, NULL}, /* TIP #287 */
|
||||
{"postevent", TclChanPostEventObjCmd, NULL}, /* TIP #219 */
|
||||
{"puts", Tcl_PutsObjCmd, NULL},
|
||||
{"read", Tcl_ReadObjCmd, NULL},
|
||||
{"seek", Tcl_SeekObjCmd, NULL},
|
||||
{"tell", Tcl_TellObjCmd, NULL},
|
||||
{"truncate", ChanTruncateObjCmd, NULL}, /* TIP #208 */
|
||||
{NULL,NULL, NULL}
|
||||
};
|
||||
static const char *extras[] = {
|
||||
static const char *const extras[] = {
|
||||
"configure", "::fconfigure",
|
||||
"names", "::file channels",
|
||||
NULL
|
||||
|
||||
@@ -85,6 +85,7 @@ typedef struct {
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_GetIndexFromObj
|
||||
int
|
||||
Tcl_GetIndexFromObj(
|
||||
Tcl_Interp *interp, /* Used for error reporting if not NULL. */
|
||||
|
||||
+12
-2
@@ -1230,13 +1230,17 @@ typedef void **TclHandle;
|
||||
MODULE_SCOPE void * TclThreadDataKeyGet(Tcl_ThreadDataKey *keyPtr);
|
||||
MODULE_SCOPE void TclThreadDataKeySet(Tcl_ThreadDataKey *keyPtr,
|
||||
void *data);
|
||||
MODULE_SCOPE void TclThreadFreeData(void *blockPtr, int size);
|
||||
|
||||
/*
|
||||
* This is a convenience macro used to initialize a thread local storage ptr.
|
||||
*/
|
||||
|
||||
#define TCL_TSD_INIT(keyPtr) \
|
||||
(ThreadSpecificData *)Tcl_GetThreadData((keyPtr), sizeof(ThreadSpecificData))
|
||||
#define TCL_TSD_INIT(keyPtr) (ThreadSpecificData *) \
|
||||
Tcl_GetThreadData((keyPtr), sizeof(ThreadSpecificData))
|
||||
|
||||
#define TCL_TSD_TERM(keyPtr) (ThreadSpecificData *) \
|
||||
Tcl_UnsetThreadData((keyPtr), sizeof(ThreadSpecificData), 0)
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------
|
||||
@@ -2665,6 +2669,7 @@ MODULE_SCOPE int TclpThreadCreate(Tcl_ThreadId *idPtr,
|
||||
MODULE_SCOPE int TclpFindVariable(const char *name, int *lengthPtr);
|
||||
MODULE_SCOPE void TclpInitLibraryPath(char **valuePtr,
|
||||
int *lengthPtr, Tcl_Encoding *encodingPtr);
|
||||
MODULE_SCOPE void TclpResetLocks(void);
|
||||
MODULE_SCOPE void TclpInitLock(void);
|
||||
MODULE_SCOPE void TclpInitPlatform(void);
|
||||
MODULE_SCOPE void TclpInitUnlock(void);
|
||||
@@ -2705,6 +2710,10 @@ MODULE_SCOPE void TclpUnloadFile(Tcl_LoadHandle loadHandle);
|
||||
MODULE_SCOPE void * TclpThreadDataKeyGet(Tcl_ThreadDataKey *keyPtr);
|
||||
MODULE_SCOPE void TclpThreadDataKeySet(Tcl_ThreadDataKey *keyPtr,
|
||||
void *data);
|
||||
MODULE_SCOPE void TclpThreadDataKeyUnset(Tcl_ThreadDataKey *keyPtr,
|
||||
int freeValue);
|
||||
MODULE_SCOPE void TclpThreadDataKeyUnsetAll(Tcl_ThreadDataKey *keyPtr,
|
||||
int freeValue);
|
||||
MODULE_SCOPE void TclpThreadExit(int status);
|
||||
MODULE_SCOPE size_t TclpThreadGetStackSize(void);
|
||||
MODULE_SCOPE void TclRememberCondition(Tcl_Condition *mutex);
|
||||
@@ -2762,6 +2771,7 @@ MODULE_SCOPE Tcl_WideInt TclpGetWideClicks(void);
|
||||
MODULE_SCOPE double TclpWideClicksToNanoseconds(Tcl_WideInt clicks);
|
||||
#endif
|
||||
MODULE_SCOPE Tcl_Obj * TclDisassembleByteCodeObj(Tcl_Obj *objPtr);
|
||||
MODULE_SCOPE int TclUtfCasecmp(CONST char *cs, CONST char *ct);
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------
|
||||
|
||||
+3
-2
@@ -342,9 +342,10 @@ Tcl_Main(
|
||||
Tcl_Interp *interp;
|
||||
Tcl_DString appName;
|
||||
|
||||
Tcl_FindExecutable(argv[0]);
|
||||
|
||||
interp = Tcl_CreateInterp();
|
||||
TclpSetInitialEncodings();
|
||||
TclpFindExecutable(argv[0]);
|
||||
|
||||
Tcl_InitMemory(interp);
|
||||
|
||||
/*
|
||||
|
||||
+59
-24
@@ -737,6 +737,10 @@ Tcl_CreateNamespace(
|
||||
Tcl_DString *namePtr, *buffPtr;
|
||||
int newEntry, nameLen;
|
||||
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
|
||||
const char *nameStr;
|
||||
Tcl_DString tmpBuffer;
|
||||
|
||||
Tcl_DStringInit(&tmpBuffer);
|
||||
|
||||
/*
|
||||
* If there is no active namespace, the interpreter is being initialized.
|
||||
@@ -750,39 +754,68 @@ Tcl_CreateNamespace(
|
||||
|
||||
parentPtr = NULL;
|
||||
simpleName = "";
|
||||
} else if (*name == '\0') {
|
||||
goto doCreate;
|
||||
}
|
||||
|
||||
/*
|
||||
* Ensure that there are no trailing colons as that causes chaos when a
|
||||
* deleteProc is specified. [Bug d614d63989]
|
||||
*/
|
||||
|
||||
if (deleteProc != NULL) {
|
||||
nameStr = name + strlen(name) - 2;
|
||||
if (nameStr >= name && nameStr[1] == ':' && nameStr[0] == ':') {
|
||||
Tcl_DStringAppend(&tmpBuffer, name, -1);
|
||||
while ((nameLen = Tcl_DStringLength(&tmpBuffer)) > 0
|
||||
&& Tcl_DStringValue(&tmpBuffer)[nameLen-1] == ':') {
|
||||
Tcl_DStringSetLength(&tmpBuffer, nameLen-1);
|
||||
}
|
||||
name = Tcl_DStringValue(&tmpBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If we've ended up with an empty string now, we're attempting to create
|
||||
* the global namespace despite the global namespace existing. That's
|
||||
* naughty!
|
||||
*/
|
||||
|
||||
if (*name == '\0') {
|
||||
Tcl_ResetResult(interp);
|
||||
Tcl_AppendResult(interp, "can't create namespace \"\": "
|
||||
"only global namespace can have empty name", NULL);
|
||||
Tcl_DStringFree(&tmpBuffer);
|
||||
return NULL;
|
||||
} else {
|
||||
/*
|
||||
* Find the parent for the new namespace.
|
||||
*/
|
||||
}
|
||||
|
||||
TclGetNamespaceForQualName(interp, name, NULL, TCL_CREATE_NS_IF_UNKNOWN,
|
||||
&parentPtr, &dummy1Ptr, &dummy2Ptr, &simpleName);
|
||||
/*
|
||||
* Find the parent for the new namespace.
|
||||
*/
|
||||
|
||||
/*
|
||||
* If the unqualified name at the end is empty, there were trailing
|
||||
* "::"s after the namespace's name which we ignore. The new namespace
|
||||
* was already (recursively) created and is pointed to by parentPtr.
|
||||
*/
|
||||
TclGetNamespaceForQualName(interp, name, NULL, TCL_CREATE_NS_IF_UNKNOWN,
|
||||
&parentPtr, &dummy1Ptr, &dummy2Ptr, &simpleName);
|
||||
|
||||
if (*simpleName == '\0') {
|
||||
return (Tcl_Namespace *) parentPtr;
|
||||
}
|
||||
/*
|
||||
* If the unqualified name at the end is empty, there were trailing "::"s
|
||||
* after the namespace's name which we ignore. The new namespace was
|
||||
* already (recursively) created and is pointed to by parentPtr.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Check for a bad namespace name and make sure that the name does not
|
||||
* already exist in the parent namespace.
|
||||
*/
|
||||
if (*simpleName == '\0') {
|
||||
Tcl_DStringFree(&tmpBuffer);
|
||||
return (Tcl_Namespace *) parentPtr;
|
||||
}
|
||||
|
||||
if (Tcl_FindHashEntry(&parentPtr->childTable, simpleName) != NULL) {
|
||||
Tcl_AppendResult(interp, "can't create namespace \"", name,
|
||||
"\": already exists", NULL);
|
||||
return NULL;
|
||||
}
|
||||
/*
|
||||
* Check for a bad namespace name and make sure that the name does not
|
||||
* already exist in the parent namespace.
|
||||
*/
|
||||
|
||||
if (Tcl_FindHashEntry(&parentPtr->childTable, simpleName) != NULL) {
|
||||
Tcl_AppendResult(interp, "can't create namespace \"", name,
|
||||
"\": already exists", NULL);
|
||||
Tcl_DStringFree(&tmpBuffer);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -790,6 +823,7 @@ Tcl_CreateNamespace(
|
||||
* of namespaces created.
|
||||
*/
|
||||
|
||||
doCreate:
|
||||
nsPtr = (Namespace *) ckalloc(sizeof(Namespace));
|
||||
nsPtr->name = ckalloc((unsigned) (strlen(simpleName)+1));
|
||||
strcpy(nsPtr->name, simpleName);
|
||||
@@ -879,6 +913,7 @@ Tcl_CreateNamespace(
|
||||
|
||||
Tcl_DStringFree(&buffer1);
|
||||
Tcl_DStringFree(&buffer2);
|
||||
Tcl_DStringFree(&tmpBuffer);
|
||||
|
||||
/*
|
||||
* Return a pointer to the new namespace.
|
||||
|
||||
+6
-4
@@ -1700,14 +1700,14 @@ Tcl_InvalidateStringRep(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifdef TCL_MEM_DEBUG
|
||||
#undef Tcl_NewBooleanObj
|
||||
#ifdef TCL_MEM_DEBUG
|
||||
|
||||
Tcl_Obj *
|
||||
Tcl_NewBooleanObj(
|
||||
register int boolValue) /* Boolean used to initialize new object. */
|
||||
{
|
||||
return Tcl_DbNewBooleanObj(boolValue, "unknown", 0);
|
||||
return Tcl_DbNewLongObj(boolValue!=0, "unknown", 0);
|
||||
}
|
||||
|
||||
#else /* if not TCL_MEM_DEBUG */
|
||||
@@ -1718,7 +1718,7 @@ Tcl_NewBooleanObj(
|
||||
{
|
||||
register Tcl_Obj *objPtr;
|
||||
|
||||
TclNewBooleanObj(objPtr, boolValue);
|
||||
TclNewIntObj(objPtr, boolValue!=0);
|
||||
return objPtr;
|
||||
}
|
||||
#endif /* TCL_MEM_DEBUG */
|
||||
@@ -1749,6 +1749,7 @@ Tcl_NewBooleanObj(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_DbNewBooleanObj
|
||||
#ifdef TCL_MEM_DEBUG
|
||||
|
||||
Tcl_Obj *
|
||||
@@ -1801,6 +1802,7 @@ Tcl_DbNewBooleanObj(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_SetBooleanObj
|
||||
void
|
||||
Tcl_SetBooleanObj(
|
||||
register Tcl_Obj *objPtr, /* Object whose internal rep to init. */
|
||||
@@ -1810,7 +1812,7 @@ Tcl_SetBooleanObj(
|
||||
Tcl_Panic("%s called with shared object", "Tcl_SetBooleanObj");
|
||||
}
|
||||
|
||||
TclSetBooleanObj(objPtr, boolValue);
|
||||
TclSetIntObj(objPtr, boolValue!=0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1566,6 +1566,7 @@ Tcl_ParseVar(
|
||||
|
||||
code = TclSubstTokens(interp, parsePtr->tokenPtr, parsePtr->numTokens,
|
||||
NULL, 1, NULL, NULL);
|
||||
Tcl_FreeParse(parsePtr);
|
||||
TclStackFree(interp, parsePtr);
|
||||
if (code != TCL_OK) {
|
||||
return NULL;
|
||||
|
||||
+5
-2
@@ -106,6 +106,7 @@ static const char * PkgRequireCore(Tcl_Interp *interp, const char *name,
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_PkgProvide
|
||||
int
|
||||
Tcl_PkgProvide(
|
||||
Tcl_Interp *interp, /* Interpreter in which package is now
|
||||
@@ -186,6 +187,7 @@ Tcl_PkgProvideEx(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_PkgRequire
|
||||
const char *
|
||||
Tcl_PkgRequire(
|
||||
Tcl_Interp *interp, /* Interpreter in which package is now
|
||||
@@ -655,6 +657,7 @@ PkgRequireCore(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_PkgPresent
|
||||
const char *
|
||||
Tcl_PkgPresent(
|
||||
Tcl_Interp *interp, /* Interpreter in which package is now
|
||||
@@ -921,7 +924,7 @@ Tcl_PackageObjCmd(
|
||||
version = TclGetString(objv[3]);
|
||||
}
|
||||
}
|
||||
Tcl_PkgPresent(interp, name, version, exact);
|
||||
Tcl_PkgPresentEx(interp, name, version, exact, NULL);
|
||||
return TCL_ERROR;
|
||||
break;
|
||||
}
|
||||
@@ -945,7 +948,7 @@ Tcl_PackageObjCmd(
|
||||
if (CheckVersionAndConvert(interp, argv3, NULL, NULL) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
return Tcl_PkgProvide(interp, argv2, argv3);
|
||||
return Tcl_PkgProvideEx(interp, argv2, argv3, NULL);
|
||||
case PKG_REQUIRE:
|
||||
require:
|
||||
if (objc < 3) {
|
||||
|
||||
@@ -398,11 +398,14 @@ ValidateFormat(
|
||||
*/
|
||||
case 'd':
|
||||
case 'e':
|
||||
case 'E':
|
||||
case 'f':
|
||||
case 'g':
|
||||
case 'G':
|
||||
case 'i':
|
||||
case 'o':
|
||||
case 'x':
|
||||
case 'X':
|
||||
break;
|
||||
case 'u':
|
||||
if (flags & SCAN_BIG) {
|
||||
@@ -727,6 +730,7 @@ Tcl_ScanObjCmd(
|
||||
parseFlag |= TCL_PARSE_OCTAL_ONLY | TCL_PARSE_SCAN_PREFIXES;
|
||||
break;
|
||||
case 'x':
|
||||
case 'X':
|
||||
op = 'i';
|
||||
parseFlag |= TCL_PARSE_HEXADECIMAL_ONLY;
|
||||
break;
|
||||
@@ -738,7 +742,9 @@ Tcl_ScanObjCmd(
|
||||
|
||||
case 'f':
|
||||
case 'e':
|
||||
case 'E':
|
||||
case 'g':
|
||||
case 'G':
|
||||
op = 'f';
|
||||
break;
|
||||
|
||||
|
||||
Executable → Regular
+86
-1
@@ -191,6 +191,91 @@ Tcl_WinTCharToUtf(
|
||||
string, len, dsPtr);
|
||||
}
|
||||
|
||||
#if defined(TCL_WIDE_INT_IS_LONG)
|
||||
/* On Cygwin64, long is 64-bit while on Win64 long is 32-bit. Therefore
|
||||
* we have to make sure that all stub entries on Cygwin64 follow the Win64
|
||||
* signature. Tcl 9 must find a better solution, but that cannot be done
|
||||
* without introducing a binary incompatibility.
|
||||
*/
|
||||
#define Tcl_DbNewLongObj ((Tcl_Obj*(*)(long,const char*,int))dbNewLongObj)
|
||||
static Tcl_Obj *dbNewLongObj(
|
||||
int intValue,
|
||||
const char *file,
|
||||
int line
|
||||
) {
|
||||
#ifdef TCL_MEM_DEBUG
|
||||
register Tcl_Obj *objPtr;
|
||||
|
||||
TclDbNewObj(objPtr, file, line);
|
||||
objPtr->bytes = NULL;
|
||||
|
||||
objPtr->internalRep.longValue = (long) intValue;
|
||||
objPtr->typePtr = &tclIntType;
|
||||
return objPtr;
|
||||
#else
|
||||
return Tcl_NewIntObj(intValue);
|
||||
#endif
|
||||
}
|
||||
#define Tcl_GetLongFromObj (int(*)(Tcl_Interp*,Tcl_Obj*,long*))Tcl_GetIntFromObj
|
||||
#define Tcl_NewLongObj (Tcl_Obj*(*)(long))Tcl_NewIntObj
|
||||
#define Tcl_SetLongObj (void(*)(Tcl_Obj*,long))Tcl_SetIntObj
|
||||
static int exprInt(Tcl_Interp *interp, const char *expr, int *ptr){
|
||||
long longValue;
|
||||
int result = Tcl_ExprLong(interp, expr, &longValue);
|
||||
if (result == TCL_OK) {
|
||||
if ((longValue >= -(long)(UINT_MAX))
|
||||
&& (longValue <= (long)(UINT_MAX))) {
|
||||
*ptr = (int)longValue;
|
||||
} else {
|
||||
Tcl_SetResult(interp,
|
||||
"integer value too large to represent as non-long integer",
|
||||
TCL_STATIC);
|
||||
result = TCL_ERROR;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
#define Tcl_ExprLong (int(*)(Tcl_Interp*,const char*,long*))exprInt
|
||||
static int exprIntObj(Tcl_Interp *interp, Tcl_Obj*expr, int *ptr){
|
||||
long longValue;
|
||||
int result = Tcl_ExprLongObj(interp, expr, &longValue);
|
||||
if (result == TCL_OK) {
|
||||
if ((longValue >= -(long)(UINT_MAX))
|
||||
&& (longValue <= (long)(UINT_MAX))) {
|
||||
*ptr = (int)longValue;
|
||||
} else {
|
||||
Tcl_SetResult(interp,
|
||||
"integer value too large to represent as non-long integer",
|
||||
TCL_STATIC);
|
||||
result = TCL_ERROR;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
#define Tcl_ExprLongObj (int(*)(Tcl_Interp*,Tcl_Obj*,long*))exprIntObj
|
||||
static int uniCharNcmp(const Tcl_UniChar *ucs, const Tcl_UniChar *uct, unsigned int n){
|
||||
return Tcl_UniCharNcmp(ucs, uct, (unsigned long)n);
|
||||
}
|
||||
#define Tcl_UniCharNcmp (int(*)(const Tcl_UniChar*,const Tcl_UniChar*,unsigned long))uniCharNcmp
|
||||
static int utfNcmp(const char *s1, const char *s2, unsigned int n){
|
||||
return Tcl_UtfNcmp(s1, s2, (unsigned long)n);
|
||||
}
|
||||
#define Tcl_UtfNcmp (int(*)(const char*,const char*,unsigned long))utfNcmp
|
||||
static int utfNcasecmp(const char *s1, const char *s2, unsigned int n){
|
||||
return Tcl_UtfNcasecmp(s1, s2, (unsigned long)n);
|
||||
}
|
||||
#define Tcl_UtfNcasecmp (int(*)(const char*,const char*,unsigned long))utfNcasecmp
|
||||
static int uniCharNcasecmp(const Tcl_UniChar *ucs, const Tcl_UniChar *uct, unsigned int n){
|
||||
return Tcl_UniCharNcasecmp(ucs, uct, (unsigned long)n);
|
||||
}
|
||||
#define Tcl_UniCharNcasecmp (int(*)(const Tcl_UniChar*,const Tcl_UniChar*,unsigned long))uniCharNcasecmp
|
||||
static int formatInt(char *buffer, int n){
|
||||
return TclFormatInt(buffer, (long)n);
|
||||
}
|
||||
#define TclFormatInt (int(*)(char *, long))formatInt
|
||||
|
||||
#endif
|
||||
|
||||
#else /* UNIX and MAC */
|
||||
# define TclpLocaltime_unix TclpLocaltime
|
||||
# define TclpGmtime_unix TclpGmtime
|
||||
@@ -1255,7 +1340,7 @@ TclStubs tclStubs = {
|
||||
Tcl_AppendFormatToObj, /* 577 */
|
||||
Tcl_ObjPrintf, /* 578 */
|
||||
Tcl_AppendPrintfToObj, /* 579 */
|
||||
NULL, /* 580 */
|
||||
Tcl_UnsetThreadData, /* 580 */
|
||||
NULL, /* 581 */
|
||||
NULL, /* 582 */
|
||||
NULL, /* 583 */
|
||||
|
||||
+4
-4
@@ -1545,14 +1545,14 @@ DelCallbackProc(
|
||||
*
|
||||
* TestdelCmd --
|
||||
*
|
||||
* This procedure implements the "testdcall" command. It is used
|
||||
* to test Tcl_CallWhenDeleted.
|
||||
* This procedure implements the "testdel" command. It is used
|
||||
* to test calling of command deletion callbacks.
|
||||
*
|
||||
* Results:
|
||||
* A standard Tcl result.
|
||||
*
|
||||
* Side effects:
|
||||
* Creates and deletes interpreters.
|
||||
* Creates a command.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1848,7 +1848,7 @@ TestdstringCmd(
|
||||
if (Tcl_GetInt(interp, argv[2], &count) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
Tcl_DStringTrunc(&dstring, count);
|
||||
Tcl_DStringSetLength(&dstring, count);
|
||||
} else if (strcmp(argv[1], "start") == 0) {
|
||||
if (argc != 2) {
|
||||
goto wrongNumArgs;
|
||||
|
||||
@@ -101,6 +101,70 @@ Tcl_GetThreadData(
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tcl_UnsetThreadData --
|
||||
*
|
||||
* This function finalizes and deallocates a chunk of thread local
|
||||
* storage.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
Tcl_UnsetThreadData(
|
||||
Tcl_ThreadDataKey *keyPtr, /* Identifier for the data chunk */
|
||||
int size, /* Size of storage block */
|
||||
int all) /* Unset for all threads? */
|
||||
{
|
||||
#ifdef TCL_THREADS
|
||||
void *result = TclpThreadDataKeyGet(keyPtr);
|
||||
if (all) {
|
||||
TclpThreadDataKeyUnsetAll(keyPtr, 1 /* free */);
|
||||
} else {
|
||||
TclpThreadDataKeyUnset(keyPtr, 1 /* free */);
|
||||
}
|
||||
#else
|
||||
void *result = *keyPtr;
|
||||
TclThreadFreeData(result, size);
|
||||
ForgetSyncObject((char *) keyPtr, &keyRecord);
|
||||
#endif /* TCL_THREADS */
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclThreadFreeData --
|
||||
*
|
||||
* This function deallocates a chunk of thread local storage.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
TclThreadFreeData(
|
||||
void *blockPtr, /* Pointer to thread local data chunk */
|
||||
int size) /* Size of storage block */
|
||||
{
|
||||
if (blockPtr != NULL) {
|
||||
memset(blockPtr, 0, (size_t) size);
|
||||
ckfree((char *) blockPtr);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
|
||||
@@ -397,6 +397,96 @@ TclpThreadDataKeySet(
|
||||
Tcl_SetHashValue(hPtr, data);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclpThreadDataKeyUnset --
|
||||
*
|
||||
* This procedure removes the pointer to a block of thread local
|
||||
* storage.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
TclpThreadDataKeyUnset(
|
||||
Tcl_ThreadDataKey *keyPtr, /* Identifier for the data chunk, really
|
||||
* (pthread_key_t **) */
|
||||
int freeValue) /* Also free the value? */
|
||||
{
|
||||
Tcl_HashTable *hashTablePtr;
|
||||
Tcl_HashEntry *hPtr;
|
||||
|
||||
hashTablePtr = ThreadStorageGetHashTable(Tcl_GetCurrentThread());
|
||||
hPtr = Tcl_FindHashEntry(hashTablePtr, (char *) keyPtr);
|
||||
|
||||
if (hPtr != NULL) {
|
||||
if (freeValue) {
|
||||
void *blockPtr = Tcl_GetHashValue(hPtr);
|
||||
|
||||
if (blockPtr != NULL) {
|
||||
ckfree(blockPtr);
|
||||
}
|
||||
}
|
||||
Tcl_DeleteHashEntry(hPtr);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclpThreadDataKeyUnsetAll --
|
||||
*
|
||||
* This procedure removes the pointer to a block of thread local
|
||||
* storage from all threads.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
TclpThreadDataKeyUnsetAll(
|
||||
Tcl_ThreadDataKey *keyPtr, /* Identifier for the data chunk, really
|
||||
* (pthread_key_t **) */
|
||||
int freeValue) /* Also free the value? */
|
||||
{
|
||||
Tcl_HashEntry *hPtr;
|
||||
Tcl_HashSearch search;
|
||||
Tcl_MutexLock(&threadStorageLock);
|
||||
for (hPtr = Tcl_FirstHashEntry(&threadStorageHashTable, &search);
|
||||
hPtr != NULL; hPtr = Tcl_NextHashEntry(&search)) {
|
||||
Tcl_HashTable *hashTablePtr = Tcl_GetHashValue(hPtr);
|
||||
|
||||
if (hashTablePtr != NULL) {
|
||||
Tcl_HashEntry *hPtr2 = Tcl_FindHashEntry(hashTablePtr,
|
||||
(char *) keyPtr);
|
||||
|
||||
if (hPtr2 != NULL) {
|
||||
if (freeValue) {
|
||||
void *blockPtr = Tcl_GetHashValue(hPtr2);
|
||||
|
||||
if (blockPtr != NULL) {
|
||||
ckfree(blockPtr);
|
||||
}
|
||||
}
|
||||
Tcl_DeleteHashEntry(hPtr2);
|
||||
}
|
||||
}
|
||||
}
|
||||
Tcl_MutexUnlock(&threadStorageLock);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
|
||||
+11
-11
@@ -292,7 +292,7 @@ Tcl_ThreadObjCmd(
|
||||
return TCL_OK;
|
||||
case THREAD_ID:
|
||||
if (objc == 2) {
|
||||
Tcl_Obj *idObj = Tcl_NewLongObj((long) Tcl_GetCurrentThread());
|
||||
Tcl_Obj *idObj = Tcl_NewWideIntObj((Tcl_WideInt)(size_t) Tcl_GetCurrentThread());
|
||||
|
||||
Tcl_SetObjResult(interp, idObj);
|
||||
return TCL_OK;
|
||||
@@ -301,24 +301,24 @@ Tcl_ThreadObjCmd(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
case THREAD_JOIN: {
|
||||
long id;
|
||||
Tcl_WideInt id;
|
||||
int result, status;
|
||||
|
||||
if (objc != 3) {
|
||||
Tcl_WrongNumArgs(interp, 2, objv, "id");
|
||||
return TCL_ERROR;
|
||||
}
|
||||
if (Tcl_GetLongFromObj(interp, objv[2], &id) != TCL_OK) {
|
||||
if (Tcl_GetWideIntFromObj(interp, objv[2], &id) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
result = Tcl_JoinThread ((Tcl_ThreadId) id, &status);
|
||||
result = Tcl_JoinThread ((Tcl_ThreadId)(size_t)id, &status);
|
||||
if (result == TCL_OK) {
|
||||
Tcl_SetIntObj (Tcl_GetObjResult (interp), status);
|
||||
} else {
|
||||
char buf [20];
|
||||
|
||||
sprintf(buf, "%ld", id);
|
||||
sprintf(buf, "%" TCL_LL_MODIFIER "d", id);
|
||||
Tcl_AppendResult(interp, "cannot join thread ", buf, NULL);
|
||||
}
|
||||
return result;
|
||||
@@ -330,7 +330,7 @@ Tcl_ThreadObjCmd(
|
||||
}
|
||||
return TclThreadList(interp);
|
||||
case THREAD_SEND: {
|
||||
long id;
|
||||
Tcl_WideInt id;
|
||||
const char *script;
|
||||
int wait, arg;
|
||||
|
||||
@@ -349,12 +349,12 @@ Tcl_ThreadObjCmd(
|
||||
wait = 1;
|
||||
arg = 2;
|
||||
}
|
||||
if (Tcl_GetLongFromObj(interp, objv[arg], &id) != TCL_OK) {
|
||||
if (Tcl_GetWideIntFromObj(interp, objv[arg], &id) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
arg++;
|
||||
script = Tcl_GetString(objv[arg]);
|
||||
return TclThreadSend(interp, (Tcl_ThreadId) id, script, wait);
|
||||
return TclThreadSend(interp, (Tcl_ThreadId)(size_t)id, script, wait);
|
||||
}
|
||||
case THREAD_ERRORPROC: {
|
||||
/*
|
||||
@@ -434,7 +434,7 @@ TclCreateThread(
|
||||
Tcl_ConditionWait(&ctrl.condWait, &threadMutex, NULL);
|
||||
Tcl_MutexUnlock(&threadMutex);
|
||||
Tcl_ConditionFinalize(&ctrl.condWait);
|
||||
Tcl_SetObjResult(interp, Tcl_NewLongObj((long)id));
|
||||
Tcl_SetObjResult(interp, Tcl_NewWideIntObj((Tcl_WideInt)(size_t)id));
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
@@ -560,7 +560,7 @@ ThreadErrorProc(
|
||||
const char *errorInfo, *argv[3];
|
||||
char *script;
|
||||
char buf[TCL_DOUBLE_SPACE+1];
|
||||
sprintf(buf, "%ld", (long) Tcl_GetCurrentThread());
|
||||
sprintf(buf, "%" TCL_LL_MODIFIER "d", (Tcl_WideInt)(size_t)Tcl_GetCurrentThread());
|
||||
|
||||
errorInfo = Tcl_GetVar(interp, "errorInfo", TCL_GLOBAL_ONLY);
|
||||
if (errorProcString == NULL) {
|
||||
@@ -677,7 +677,7 @@ TclThreadList(
|
||||
Tcl_MutexLock(&threadMutex);
|
||||
for (tsdPtr = threadList ; tsdPtr ; tsdPtr = tsdPtr->nextPtr) {
|
||||
Tcl_ListObjAppendElement(interp, listPtr,
|
||||
Tcl_NewLongObj((long) tsdPtr->threadId));
|
||||
Tcl_NewWideIntObj((Tcl_WideInt)(size_t)tsdPtr->threadId));
|
||||
}
|
||||
Tcl_MutexUnlock(&threadMutex);
|
||||
Tcl_SetObjResult(interp, listPtr);
|
||||
|
||||
@@ -2801,6 +2801,7 @@ DisposeTraceResult(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_UntraceVar
|
||||
void
|
||||
Tcl_UntraceVar(
|
||||
Tcl_Interp *interp, /* Interpreter containing variable. */
|
||||
@@ -2970,6 +2971,7 @@ Tcl_UntraceVar2(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_VarTraceInfo
|
||||
ClientData
|
||||
Tcl_VarTraceInfo(
|
||||
Tcl_Interp *interp, /* Interpreter containing variable. */
|
||||
@@ -3080,6 +3082,7 @@ Tcl_VarTraceInfo2(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_TraceVar
|
||||
int
|
||||
Tcl_TraceVar(
|
||||
Tcl_Interp *interp, /* Interpreter in which variable is to be
|
||||
|
||||
+95
-95
@@ -624,7 +624,7 @@ static const unsigned char groupMap[] = {
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 15, 15, 15, 3, 3, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 0, 7, 7, 7, 3, 3,
|
||||
4, 3, 3, 14, 14, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 3, 0,
|
||||
4, 3, 3, 14, 14, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 3, 17,
|
||||
0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
85, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 86, 86, 86, 86, 86, 86,
|
||||
@@ -792,118 +792,118 @@ static const unsigned char groupMap[] = {
|
||||
116, 86, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 3, 3,
|
||||
3, 85, 3, 3, 3, 4, 15, 86, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
|
||||
0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0,
|
||||
0, 3, 3, 3, 3, 3, 3, 8, 3, 3, 3, 3, 86, 86, 86, 2, 0, 9, 9, 9, 9, 9,
|
||||
9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, 15, 15, 85, 15, 15, 15, 15, 15,
|
||||
0, 3, 3, 3, 3, 3, 3, 8, 3, 3, 3, 3, 86, 86, 86, 17, 0, 9, 9, 9, 9,
|
||||
9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, 15, 15, 85, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 86, 15, 0, 0, 0, 0, 0,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 86, 15, 0, 0, 0, 0,
|
||||
0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 86, 86, 86, 116, 116, 116, 116,
|
||||
86, 86, 116, 116, 116, 0, 0, 0, 0, 116, 116, 86, 116, 116, 116, 116,
|
||||
116, 116, 86, 86, 86, 0, 0, 0, 0, 14, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9,
|
||||
9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 0, 0, 0, 86, 86, 86, 116, 116, 116, 116, 86,
|
||||
86, 116, 116, 116, 0, 0, 0, 0, 116, 116, 86, 116, 116, 116, 116, 116,
|
||||
116, 86, 86, 86, 0, 0, 0, 0, 14, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9, 9, 9,
|
||||
9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15,
|
||||
15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 116, 116, 116, 116, 116, 116,
|
||||
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 15, 15, 15,
|
||||
15, 15, 15, 15, 116, 116, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||
9, 9, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
|
||||
0, 0, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 116, 116, 116,
|
||||
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
|
||||
15, 15, 15, 15, 15, 15, 15, 116, 116, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
|
||||
9, 9, 9, 9, 9, 9, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14,
|
||||
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
|
||||
14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 86, 86, 116, 116, 116,
|
||||
0, 0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 116, 86, 116, 86, 86, 86, 86, 86, 86, 86,
|
||||
0, 86, 116, 86, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86, 116, 116,
|
||||
116, 116, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 0, 0, 86,
|
||||
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9,
|
||||
9, 9, 9, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 85, 3, 3, 3, 3, 3,
|
||||
3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86,
|
||||
86, 116, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 86, 86, 116,
|
||||
116, 86, 0, 0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 116, 86, 116, 86, 86, 86, 86, 86,
|
||||
86, 86, 0, 86, 116, 86, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86, 116,
|
||||
116, 116, 116, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 0,
|
||||
0, 86, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
|
||||
9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 85, 3, 3,
|
||||
3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,
|
||||
86, 86, 86, 116, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 86, 116,
|
||||
86, 86, 86, 86, 86, 116, 86, 116, 116, 116, 116, 116, 86, 116, 116,
|
||||
15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||
9, 3, 3, 3, 3, 3, 3, 3, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 86,
|
||||
86, 86, 86, 86, 86, 86, 86, 86, 14, 14, 14, 14, 14, 14, 14, 14, 14,
|
||||
0, 0, 0, 86, 86, 116, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 116, 86, 86, 86, 86, 116, 116, 86, 86, 116, 86, 116, 116, 15, 15,
|
||||
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 86, 116, 86, 86, 116, 116, 116, 86, 116, 86, 86, 86, 116, 116,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 15, 15, 15, 15, 116, 116, 116,
|
||||
116, 116, 116, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86, 116, 116,
|
||||
86, 86, 0, 0, 0, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
|
||||
0, 15, 15, 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15,
|
||||
86, 116, 86, 86, 86, 86, 86, 116, 86, 116, 116, 116, 116, 116, 86,
|
||||
116, 116, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
|
||||
9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 14, 14, 14, 14, 14, 14, 14, 14, 14,
|
||||
14, 86, 86, 86, 86, 86, 86, 86, 86, 86, 14, 14, 14, 14, 14, 14, 14,
|
||||
14, 14, 0, 0, 0, 86, 86, 116, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 85, 85, 85, 85, 85, 85, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 3, 86, 86, 86, 86,
|
||||
86, 86, 86, 86, 86, 86, 86, 86, 86, 116, 86, 86, 86, 86, 86, 86, 86,
|
||||
15, 15, 15, 15, 86, 15, 15, 15, 15, 116, 116, 86, 15, 15, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
|
||||
15, 15, 15, 116, 86, 86, 86, 86, 116, 116, 86, 86, 116, 86, 116, 116,
|
||||
15, 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 86, 116, 86, 86, 116, 116, 116, 86, 116, 86, 86, 86,
|
||||
116, 116, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 15, 15, 15, 15, 116,
|
||||
116, 116, 116, 116, 116, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86,
|
||||
116, 116, 86, 86, 0, 0, 0, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||
9, 0, 0, 0, 15, 15, 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||
15, 15, 15, 15, 15, 15, 15, 15, 15, 85, 85, 85, 85, 85, 85, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 3, 86, 86,
|
||||
86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 116, 86, 86, 86, 86, 86,
|
||||
86, 86, 15, 15, 15, 15, 86, 15, 15, 15, 15, 116, 116, 86, 15, 15, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
|
||||
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
|
||||
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 85, 85, 85,
|
||||
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 85,
|
||||
85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
|
||||
85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
|
||||
85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
|
||||
85, 85, 85, 85, 85, 85, 85, 85, 85, 21, 21, 21, 21, 21, 21, 21, 21,
|
||||
21, 21, 21, 21, 21, 85, 119, 21, 21, 21, 120, 21, 21, 21, 21, 21, 21,
|
||||
85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 21, 21, 21, 21, 21, 21,
|
||||
21, 21, 21, 21, 21, 21, 21, 85, 119, 21, 21, 21, 120, 21, 21, 21, 21,
|
||||
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
|
||||
21, 21, 21, 21, 21, 21, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86,
|
||||
86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
86, 86, 86, 86, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23,
|
||||
24, 23, 24, 23, 24, 23, 24, 23, 24, 21, 21, 21, 21, 21, 121, 21, 21,
|
||||
122, 21, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124,
|
||||
124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 0, 0, 124, 124, 124,
|
||||
124, 124, 124, 0, 0, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124,
|
||||
124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123,
|
||||
124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123,
|
||||
0, 0, 124, 124, 124, 124, 124, 124, 0, 0, 21, 123, 21, 123, 21, 123,
|
||||
21, 123, 0, 124, 0, 124, 0, 124, 0, 124, 123, 123, 123, 123, 123, 123,
|
||||
123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 126, 126,
|
||||
126, 126, 127, 127, 128, 128, 129, 129, 130, 130, 0, 0, 123, 123, 123,
|
||||
123, 123, 123, 123, 123, 131, 131, 131, 131, 131, 131, 131, 131, 123,
|
||||
123, 123, 123, 123, 123, 123, 123, 131, 131, 131, 131, 131, 131, 131,
|
||||
131, 123, 123, 123, 123, 123, 123, 123, 123, 131, 131, 131, 131, 131,
|
||||
131, 131, 131, 123, 123, 21, 132, 21, 0, 21, 21, 124, 124, 133, 133,
|
||||
134, 11, 135, 11, 11, 11, 21, 132, 21, 0, 21, 21, 136, 136, 136, 136,
|
||||
134, 11, 11, 11, 123, 123, 21, 21, 0, 0, 21, 21, 124, 124, 137, 137,
|
||||
0, 11, 11, 11, 123, 123, 21, 21, 21, 106, 21, 21, 124, 124, 138, 138,
|
||||
109, 11, 11, 11, 0, 0, 21, 132, 21, 0, 21, 21, 139, 139, 140, 140,
|
||||
134, 11, 11, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 17, 17,
|
||||
8, 8, 8, 8, 8, 8, 3, 3, 16, 20, 5, 16, 16, 20, 5, 16, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 141, 142, 17, 17, 17, 17, 17, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
16, 20, 3, 3, 3, 3, 12, 12, 3, 3, 3, 7, 5, 6, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 7, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 17, 17, 17,
|
||||
17, 17, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 18, 85, 0, 0, 18, 18,
|
||||
18, 18, 18, 18, 7, 7, 7, 5, 6, 85, 18, 18, 18, 18, 18, 18, 18, 18,
|
||||
18, 18, 7, 7, 7, 5, 6, 0, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
|
||||
85, 85, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
||||
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
|
||||
86, 86, 111, 111, 111, 111, 86, 111, 111, 111, 86, 86, 86, 86, 86,
|
||||
86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 14, 14, 100, 14, 14, 14, 14, 100, 14, 14, 21, 100, 100, 100,
|
||||
21, 21, 100, 100, 100, 21, 14, 100, 14, 14, 7, 100, 100, 100, 100,
|
||||
100, 14, 14, 14, 14, 14, 14, 100, 14, 143, 14, 100, 14, 144, 145, 100,
|
||||
100, 14, 21, 100, 100, 146, 100, 21, 15, 15, 15, 15, 21, 14, 14, 21,
|
||||
21, 100, 100, 7, 7, 7, 7, 7, 100, 21, 21, 21, 21, 14, 7, 14, 14, 147,
|
||||
14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
|
||||
148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
|
||||
148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
|
||||
149, 149, 149, 149, 118, 118, 118, 23, 24, 118, 118, 118, 118, 18,
|
||||
0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 7, 7, 14, 14,
|
||||
14, 14, 7, 14, 14, 7, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 7, 14,
|
||||
21, 21, 21, 21, 21, 21, 21, 21, 85, 85, 85, 85, 85, 86, 86, 86, 86,
|
||||
86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 86, 86, 86, 86, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24,
|
||||
23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 21, 21, 21, 21, 21, 121, 21,
|
||||
21, 122, 21, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124,
|
||||
124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 0, 0, 124, 124,
|
||||
124, 124, 124, 124, 0, 0, 123, 123, 123, 123, 123, 123, 123, 123, 124,
|
||||
124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123,
|
||||
123, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123,
|
||||
123, 0, 0, 124, 124, 124, 124, 124, 124, 0, 0, 21, 123, 21, 123, 21,
|
||||
123, 21, 123, 0, 124, 0, 124, 0, 124, 0, 124, 123, 123, 123, 123, 123,
|
||||
123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 126,
|
||||
126, 126, 126, 127, 127, 128, 128, 129, 129, 130, 130, 0, 0, 123, 123,
|
||||
123, 123, 123, 123, 123, 123, 131, 131, 131, 131, 131, 131, 131, 131,
|
||||
123, 123, 123, 123, 123, 123, 123, 123, 131, 131, 131, 131, 131, 131,
|
||||
131, 131, 123, 123, 123, 123, 123, 123, 123, 123, 131, 131, 131, 131,
|
||||
131, 131, 131, 131, 123, 123, 21, 132, 21, 0, 21, 21, 124, 124, 133,
|
||||
133, 134, 11, 135, 11, 11, 11, 21, 132, 21, 0, 21, 21, 136, 136, 136,
|
||||
136, 134, 11, 11, 11, 123, 123, 21, 21, 0, 0, 21, 21, 124, 124, 137,
|
||||
137, 0, 11, 11, 11, 123, 123, 21, 21, 21, 106, 21, 21, 124, 124, 138,
|
||||
138, 109, 11, 11, 11, 0, 0, 21, 132, 21, 0, 21, 21, 139, 139, 140,
|
||||
140, 134, 11, 11, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 17,
|
||||
17, 8, 8, 8, 8, 8, 8, 3, 3, 16, 20, 5, 16, 16, 20, 5, 16, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 141, 142, 17, 17, 17, 17, 17, 2, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 16, 20, 3, 3, 3, 3, 12, 12, 3, 3, 3, 7, 5, 6, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 7, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 17, 17,
|
||||
17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 85, 0, 0,
|
||||
18, 18, 18, 18, 18, 18, 7, 7, 7, 5, 6, 85, 18, 18, 18, 18, 18, 18,
|
||||
18, 18, 18, 18, 7, 7, 7, 5, 6, 0, 85, 85, 85, 85, 85, 85, 85, 85, 85,
|
||||
85, 85, 85, 85, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
||||
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 86, 86, 86, 86, 86, 86,
|
||||
86, 86, 86, 86, 111, 111, 111, 111, 86, 111, 111, 111, 86, 86, 86,
|
||||
86, 86, 86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 14, 14, 100, 14, 14, 14, 14, 100, 14, 14, 21, 100, 100,
|
||||
100, 21, 21, 100, 100, 100, 21, 14, 100, 14, 14, 7, 100, 100, 100,
|
||||
100, 100, 14, 14, 14, 14, 14, 14, 100, 14, 143, 14, 100, 14, 144, 145,
|
||||
100, 100, 14, 21, 100, 100, 146, 100, 21, 15, 15, 15, 15, 21, 14, 14,
|
||||
21, 21, 100, 100, 7, 7, 7, 7, 7, 100, 21, 21, 21, 21, 14, 7, 14, 14,
|
||||
147, 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
|
||||
18, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
|
||||
148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
|
||||
149, 149, 149, 149, 149, 118, 118, 118, 23, 24, 118, 118, 118, 118,
|
||||
18, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 7, 7, 14,
|
||||
14, 14, 14, 7, 14, 14, 7, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 7,
|
||||
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
|
||||
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 14, 14, 7,
|
||||
14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
|
||||
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 14, 14,
|
||||
7, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
|
||||
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7,
|
||||
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14,
|
||||
14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14,
|
||||
14, 14, 14, 14, 14, 14, 5, 6, 5, 6, 14, 14, 14, 14, 14, 14, 14, 14,
|
||||
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 14, 14, 14, 14,
|
||||
14, 14, 14, 5, 6, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
|
||||
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
|
||||
|
||||
+43
-1
@@ -1101,6 +1101,46 @@ Tcl_UtfNcasecmp(
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tcl_UtfNcasecmp --
|
||||
*
|
||||
* Compare UTF chars of string cs to string ct case insensitively.
|
||||
* Replacement for strcasecmp in Tcl core, in places where UTF-8 should
|
||||
* be handled.
|
||||
*
|
||||
* Results:
|
||||
* Return <0 if cs < ct, 0 if cs == ct, or >0 if cs > ct.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
int
|
||||
TclUtfCasecmp(
|
||||
CONST char *cs, /* UTF string to compare to ct. */
|
||||
CONST char *ct) /* UTF string cs is compared to. */
|
||||
{
|
||||
while (*cs && *ct) {
|
||||
Tcl_UniChar ch1, ch2;
|
||||
|
||||
cs += TclUtfToUniChar(cs, &ch1);
|
||||
ct += TclUtfToUniChar(ct, &ch2);
|
||||
if (ch1 != ch2) {
|
||||
ch1 = Tcl_UniCharToLower(ch1);
|
||||
ch2 = Tcl_UniCharToLower(ch2);
|
||||
if (ch1 != ch2) {
|
||||
return ch1 - ch2;
|
||||
}
|
||||
}
|
||||
}
|
||||
return UCHAR(*cs) - UCHAR(*ct);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
@@ -1514,7 +1554,9 @@ Tcl_UniCharIsSpace(
|
||||
*/
|
||||
|
||||
if (((Tcl_UniChar) ch) < ((Tcl_UniChar) 0x80)) {
|
||||
return isspace(UCHAR(ch)); /* INTL: ISO space */
|
||||
return TclIsSpaceProc((char) ch);
|
||||
} else if ((Tcl_UniChar) ch == 0x180e || (Tcl_UniChar) ch == 0x202f) {
|
||||
return 1;
|
||||
} else {
|
||||
return ((SPACE_BITS >> GetCategory(ch)) & 1);
|
||||
}
|
||||
|
||||
@@ -1234,6 +1234,7 @@ TclLookupArrayElement(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_GetVar
|
||||
const char *
|
||||
Tcl_GetVar(
|
||||
Tcl_Interp *interp, /* Command interpreter in which varName is to
|
||||
@@ -1556,6 +1557,7 @@ Tcl_SetObjCmd(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_SetVar
|
||||
const char *
|
||||
Tcl_SetVar(
|
||||
Tcl_Interp *interp, /* Command interpreter in which varName is to
|
||||
@@ -2146,6 +2148,7 @@ TclPtrIncrObjVar(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_UnsetVar
|
||||
int
|
||||
Tcl_UnsetVar(
|
||||
Tcl_Interp *interp, /* Command interpreter in which varName is to
|
||||
@@ -3785,6 +3788,7 @@ TclPtrObjMakeUpvar(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_UpVar
|
||||
int
|
||||
Tcl_UpVar(
|
||||
Tcl_Interp *interp, /* Command interpreter in which varName is to
|
||||
|
||||
+2
-2
@@ -325,7 +325,7 @@ proc ::tcl::clock::Initialize {} {
|
||||
{-10800 0 3600 0 2 0 2 2 0 0 0 0 10 0 3 2 0 0 0} :America/Sao_Paulo
|
||||
{-10800 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Godthab
|
||||
{-10800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Buenos_Aires
|
||||
{-10800 0 3600 0 2 0 5 2 0 0 0 0 11 0 1 2 0 0 0} :America/Brasilia
|
||||
{-10800 0 3600 0 2 0 5 2 0 0 0 0 11 0 1 2 0 0 0} :America/Bahia
|
||||
{-10800 0 3600 0 3 0 2 2 0 0 0 0 10 0 1 2 0 0 0} :America/Montevideo
|
||||
{-7200 0 3600 0 9 0 5 2 0 0 0 0 3 0 5 2 0 0 0} :America/Noronha
|
||||
{-3600 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Atlantic/Azores
|
||||
@@ -3947,7 +3947,7 @@ proc ::tcl::clock::ProcessPosixTimeZone { z } {
|
||||
|
||||
# Put DST in effect in all years from 1916 to 2099.
|
||||
|
||||
for { set y 1916 } { $y < 2099 } { incr y } {
|
||||
for { set y 1916 } { $y < 2100 } { incr y } {
|
||||
set startTime [DeterminePosixDSTTime $z start $y]
|
||||
incr startTime [expr { - wide($stdOffset) }]
|
||||
set endTime [DeterminePosixDSTTime $z end $y]
|
||||
|
||||
Executable → Regular
+25
-13
@@ -11,7 +11,7 @@
|
||||
package require Tcl 8.4
|
||||
# Keep this in sync with pkgIndex.tcl and with the install directories in
|
||||
# Makefiles
|
||||
package provide http 2.7.11
|
||||
package provide http 2.7.13
|
||||
|
||||
namespace eval http {
|
||||
# Allow resourcing to not clobber existing data
|
||||
@@ -107,7 +107,7 @@ proc http::Log {args} {}
|
||||
|
||||
proc http::register {proto port command} {
|
||||
variable urlTypes
|
||||
set urlTypes($proto) [list $port $command]
|
||||
set urlTypes([string tolower $proto]) [list $port $command]
|
||||
}
|
||||
|
||||
# http::unregister --
|
||||
@@ -121,11 +121,12 @@ proc http::register {proto port command} {
|
||||
|
||||
proc http::unregister {proto} {
|
||||
variable urlTypes
|
||||
if {![info exists urlTypes($proto)]} {
|
||||
set lower [string tolower $proto]
|
||||
if {![info exists urlTypes($lower)]} {
|
||||
return -code error "unsupported url type \"$proto\""
|
||||
}
|
||||
set old $urlTypes($proto)
|
||||
unset urlTypes($proto)
|
||||
set old $urlTypes($lower)
|
||||
unset urlTypes($lower)
|
||||
return $old
|
||||
}
|
||||
|
||||
@@ -388,13 +389,16 @@ proc http::geturl {url args} {
|
||||
# First, before the colon, is the protocol scheme (e.g. http)
|
||||
# Second, for HTTP-like protocols, is the authority
|
||||
# The authority is preceded by // and lasts up to (but not including)
|
||||
# the following / and it identifies up to four parts, of which only one,
|
||||
# the host, is required (if an authority is present at all). All other
|
||||
# parts of the authority (user name, password, port number) are optional.
|
||||
# the following / or ? and it identifies up to four parts, of which
|
||||
# only one, the host, is required (if an authority is present at all).
|
||||
# All other parts of the authority (user name, password, port number)
|
||||
# are optional.
|
||||
# Third is the resource name, which is split into two parts at a ?
|
||||
# The first part (from the single "/" up to "?") is the path, and the
|
||||
# second part (from that "?" up to "#") is the query. *HOWEVER*, we do
|
||||
# not need to separate them; we send the whole lot to the server.
|
||||
# Both, path and query are allowed to be missing, including their
|
||||
# delimiting character.
|
||||
# Fourth is the fragment identifier, which is everything after the first
|
||||
# "#" in the URL. The fragment identifier MUST NOT be sent to the server
|
||||
# and indeed, we don't bother to validate it (it could be an error to
|
||||
@@ -429,7 +433,7 @@ proc http::geturl {url args} {
|
||||
( [^/:\#?]+ ) # <host part of authority>
|
||||
(?: : (\d+) )? # <port part of authority>
|
||||
)?
|
||||
( / [^\#]*)? # <path> (including query)
|
||||
( [/\?] [^\#]*)? # <path> (including query)
|
||||
(?: \# (.*) )? # <fragment>
|
||||
$
|
||||
}
|
||||
@@ -472,6 +476,12 @@ proc http::geturl {url args} {
|
||||
}
|
||||
}
|
||||
if {$srvurl ne ""} {
|
||||
# RFC 3986 allows empty paths (not even a /), but servers
|
||||
# return 400 if the path in the HTTP request doesn't start
|
||||
# with / , so add it here if needed.
|
||||
if {[string index $srvurl 0] ne "/"} {
|
||||
set srvurl /$srvurl
|
||||
}
|
||||
# Check for validity according to RFC 3986, Appendix A
|
||||
set validityRE {(?xi)
|
||||
^
|
||||
@@ -496,12 +506,13 @@ proc http::geturl {url args} {
|
||||
if {$proto eq ""} {
|
||||
set proto http
|
||||
}
|
||||
if {![info exists urlTypes($proto)]} {
|
||||
set lower [string tolower $proto]
|
||||
if {![info exists urlTypes($lower)]} {
|
||||
unset $token
|
||||
return -code error "Unsupported URL type \"$proto\""
|
||||
}
|
||||
set defport [lindex $urlTypes($proto) 0]
|
||||
set defcmd [lindex $urlTypes($proto) 1]
|
||||
set defport [lindex $urlTypes($lower) 0]
|
||||
set defcmd [lindex $urlTypes($lower) 1]
|
||||
|
||||
if {$port eq ""} {
|
||||
set port $defport
|
||||
@@ -632,7 +643,8 @@ proc http::Connected { token proto phost srvurl} {
|
||||
set host [lindex [split $state(socketinfo) :] 0]
|
||||
set port [lindex [split $state(socketinfo) :] 1]
|
||||
|
||||
set defport [lindex $urlTypes($proto) 0]
|
||||
set lower [string tolower $proto]
|
||||
set defport [lindex $urlTypes($lower) 0]
|
||||
|
||||
# Send data in cr-lf format, but accept any line terminators
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Tcl package index file, version 1.1
|
||||
|
||||
if {![package vsatisfies [package provide Tcl] 8.4]} {return}
|
||||
package ifneeded http 2.7.11 [list tclPkgSetup $dir http 2.7.11 {{http.tcl source {::http::config ::http::formatQuery ::http::geturl ::http::reset ::http::wait ::http::register ::http::unregister ::http::mapReply}}}]
|
||||
package ifneeded http 2.7.13 [list tclPkgSetup $dir http 2.7.13 {{http.tcl source {::http::config ::http::formatQuery ::http::geturl ::http::reset ::http::wait ::http::register ::http::unregister ::http::mapReply}}}]
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
if {[info commands package] == ""} {
|
||||
error "version mismatch: library\nscripts expect Tcl version 7.5b1 or later but the loaded version is\nonly [info patchlevel]"
|
||||
}
|
||||
package require -exact Tcl 8.5.14
|
||||
package require -exact Tcl 8.5.15
|
||||
|
||||
# Compute the auto path to use in this interpreter.
|
||||
# The values on the path come from several locations:
|
||||
|
||||
+22
-17
@@ -13,7 +13,7 @@
|
||||
package require Tcl 8.5
|
||||
# When the version number changes, be sure to update the pkgIndex.tcl file,
|
||||
# and the installation directory in the Makefiles.
|
||||
package provide msgcat 1.5.1
|
||||
package provide msgcat 1.5.2
|
||||
|
||||
namespace eval msgcat {
|
||||
namespace export mc mcload mclocale mcmax mcmset mcpreferences mcset \
|
||||
@@ -541,8 +541,11 @@ proc msgcat::Init {} {
|
||||
# settings, or fall back on locale of "C".
|
||||
#
|
||||
|
||||
# First check registry value LocalName present from Windows Vista
|
||||
# which contains the local string as RFC5646, composed of:
|
||||
# On Vista and later:
|
||||
# HCU/Control Panel/Desktop : PreferredUILanguages is for language packs,
|
||||
# HCU/Control Pannel/International : localName is the default locale.
|
||||
#
|
||||
# They contain the local string as RFC5646, composed of:
|
||||
# [a-z]{2,3} : language
|
||||
# -[a-z]{4} : script (optional, translated by table Latn->latin)
|
||||
# -[a-z]{2}|[0-9]{3} : territory (optional, numerical region codes not used)
|
||||
@@ -550,23 +553,25 @@ proc msgcat::Init {} {
|
||||
# Those are translated to local strings.
|
||||
# Examples: de-CH -> de_ch, sr-Latn-CS -> sr_cs@latin, es-419 -> es
|
||||
#
|
||||
set key {HKEY_CURRENT_USER\Control Panel\International}
|
||||
if {![catch {registry get $key LocaleName} localeName]
|
||||
&& [regexp {^([a-z]{2,3})(?:-([a-z]{4}))?(?:-([a-z]{2}))?(?:-.+)?$}\
|
||||
[string tolower $localeName] match locale script territory]} {
|
||||
if {"" ne $territory} {
|
||||
append locale _ $territory
|
||||
}
|
||||
set modifierDict [dict create latn latin cyrl cyrillic]
|
||||
if {[dict exists $modifierDict $script]} {
|
||||
append locale @ [dict get $modifierDict $script]
|
||||
}
|
||||
if {![catch {mclocale [ConvertLocale $locale]}]} {
|
||||
return
|
||||
foreach key {{HKEY_CURRENT_USER\Control Panel\Desktop} {HKEY_CURRENT_USER\Control Panel\International}}\
|
||||
value {PreferredUILanguages localeName} {
|
||||
if {![catch {registry get $key $value} localeName]
|
||||
&& [regexp {^([a-z]{2,3})(?:-([a-z]{4}))?(?:-([a-z]{2}))?(?:-.+)?$}\
|
||||
[string tolower $localeName] match locale script territory]} {
|
||||
if {"" ne $territory} {
|
||||
append locale _ $territory
|
||||
}
|
||||
set modifierDict [dict create latn latin cyrl cyrillic]
|
||||
if {[dict exists $modifierDict $script]} {
|
||||
append locale @ [dict get $modifierDict $script]
|
||||
}
|
||||
if {![catch {mclocale [ConvertLocale $locale]}]} {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# then check key locale which contains a numerical language ID
|
||||
# then check value locale which contains a numerical language ID
|
||||
if {[catch {
|
||||
set locale [registry get $key "locale"]
|
||||
}]} {
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
if {![package vsatisfies [package provide Tcl] 8.5]} {return}
|
||||
package ifneeded msgcat 1.5.1 [list source [file join $dir msgcat.tcl]]
|
||||
package ifneeded msgcat 1.5.2 [list source [file join $dir msgcat.tcl]]
|
||||
|
||||
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user