Compare commits
87
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
387e7034b9 | ||
|
|
bf46c5018d | ||
|
|
e577cd8cf8 | ||
|
|
f05e229780 | ||
|
|
ff29c56ea4 | ||
|
|
5cae882ff3 | ||
|
|
5207d2fe71 | ||
|
|
fab681eb11 | ||
|
|
01e94e53ed | ||
|
|
7f038e4db7 | ||
|
|
e5320ae0d5 | ||
|
|
8290f077d2 | ||
|
|
eccf18644f | ||
|
|
e4b872fc07 | ||
|
|
df9f4ed74f | ||
|
|
8445a00210 | ||
|
|
b300fecc27 | ||
|
|
482ab2e9dc | ||
|
|
751453253c | ||
|
|
7b7647f1ab | ||
|
|
fa88074963 | ||
|
|
d418226edb | ||
|
|
bdfafd3539 | ||
|
|
819b87f1df | ||
|
|
b36880503c | ||
|
|
3c2b67a4d3 | ||
|
|
08c3a9b76b | ||
|
|
dd519c7dac | ||
|
|
f67a341fce | ||
|
|
c755ef0815 | ||
|
|
be577d6027 | ||
|
|
99d3f3c9f3 | ||
|
|
0b3a8804eb | ||
|
|
92a9b04a12 | ||
|
|
a4532de5a0 | ||
|
|
710ec0ef20 | ||
|
|
b4024d86d1 | ||
|
|
0789d80b7a | ||
|
|
5aee84a3f3 | ||
|
|
e52789c557 | ||
|
|
c0e9c99a1c | ||
|
|
47115ff565 | ||
|
|
dca8fae05f | ||
|
|
5512629c55 | ||
|
|
cb6e9135f2 | ||
|
|
20619d8334 | ||
|
|
7e85a50a46 | ||
|
|
0e5bc322f1 | ||
|
|
1195cdbd77 | ||
|
|
5330c4e5d3 | ||
|
|
52799e58d6 | ||
|
|
c9bd1f3334 | ||
|
|
6d990b9c83 | ||
|
|
3a20c7912b | ||
|
|
008944a5c3 | ||
|
|
e0c7416333 | ||
|
|
7a4ad0872e | ||
|
|
7f12c0adfa | ||
|
|
885379e2cc | ||
|
|
5789574f89 | ||
|
|
f705798ed7 | ||
|
|
024bab4116 | ||
|
|
8e26969a34 | ||
|
|
ee742713d1 | ||
|
|
00f3aef9ac | ||
|
|
54a8b02774 | ||
|
|
d243959c21 | ||
|
|
dba0cd17dc | ||
|
|
adaa439cd5 | ||
|
|
c5d5fb5626 | ||
|
|
f816bb2a60 | ||
|
|
d00bac456f | ||
|
|
c4e90545de | ||
|
|
01a42a5484 | ||
|
|
7a9a7e743d | ||
|
|
5276138555 | ||
|
|
718cdaa0f5 | ||
|
|
8003ca9770 | ||
|
|
1b3ec5eb37 | ||
|
|
31a0db854a | ||
|
|
dd4ebbcbb0 | ||
|
|
fde22fc2f7 | ||
|
|
a41a8a2ff6 | ||
|
|
a0f8a86930 | ||
|
|
a81c67d383 | ||
|
|
db2d8e3510 | ||
|
|
ab1020e15c |
+12
-2
@@ -872,8 +872,8 @@ harness are doing.
|
||||
.
|
||||
Sets the type of output verbosity desired to \fIlevel\fR,
|
||||
a list of zero or more of the elements \fBbody\fR, \fBpass\fR,
|
||||
\fBskip\fR, \fBstart\fR, \fBerror\fR and \fBline\fR. Default value
|
||||
is
|
||||
\fBskip\fR, \fBstart\fR, \fBerror\fR, \fBline\fR, \fBmsec\fR and \fBusec\fR.
|
||||
Default value is
|
||||
.QW "\fBbody error\fR" .
|
||||
Levels are defined as:
|
||||
.RS
|
||||
@@ -890,6 +890,16 @@ Print errorInfo and errorCode, if they exist, when a test return code
|
||||
does not match its expected return code
|
||||
.IP "line (\fBl\fR)"
|
||||
Print source file line information of failed tests
|
||||
.IP "msec (\fBm\fR)"
|
||||
Print each test's execution time in milliseconds
|
||||
.IP "usec (\fBu\fR)"
|
||||
Print each test's execution time in microseconds
|
||||
.PP
|
||||
Note that the \fBmsec\fR and \fBusec\fR verbosity levels are provided as
|
||||
indicative measures only. They do not tackle the problem of repeatibility which
|
||||
should be considered in performance tests or benchmarks. To use these verbosity
|
||||
levels to thoroughly track performance degradations, consider wrapping your
|
||||
test bodies with \fBtime\fR commands.
|
||||
.PP
|
||||
The single letter abbreviations noted above are also recognized
|
||||
so that
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ tell \- Return current access position for an open channel
|
||||
.BE
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
Returns an integer string giving the current access position in
|
||||
Returns an integer giving the current access position in
|
||||
\fIchannelId\fR. This value returned is a byte offset that can be passed to
|
||||
\fBseek\fR in order to set the channel to a particular position. Note
|
||||
that this value is in terms of bytes, not characters like \fBread\fR.
|
||||
|
||||
+202
-191
@@ -140,35 +140,36 @@ static const crange alphaRangeTable[] = {
|
||||
{0x3f7, 0x481}, {0x48a, 0x52f}, {0x531, 0x556}, {0x561, 0x587},
|
||||
{0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x620, 0x64a}, {0x671, 0x6d3},
|
||||
{0x6fa, 0x6fc}, {0x712, 0x72f}, {0x74d, 0x7a5}, {0x7ca, 0x7ea},
|
||||
{0x800, 0x815}, {0x840, 0x858}, {0x8a0, 0x8b4}, {0x904, 0x939},
|
||||
{0x958, 0x961}, {0x971, 0x980}, {0x985, 0x98c}, {0x993, 0x9a8},
|
||||
{0x9aa, 0x9b0}, {0x9b6, 0x9b9}, {0x9df, 0x9e1}, {0xa05, 0xa0a},
|
||||
{0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa59, 0xa5c}, {0xa72, 0xa74},
|
||||
{0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0},
|
||||
{0xab5, 0xab9}, {0xb05, 0xb0c}, {0xb13, 0xb28}, {0xb2a, 0xb30},
|
||||
{0xb35, 0xb39}, {0xb5f, 0xb61}, {0xb85, 0xb8a}, {0xb8e, 0xb90},
|
||||
{0xb92, 0xb95}, {0xba8, 0xbaa}, {0xbae, 0xbb9}, {0xc05, 0xc0c},
|
||||
{0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc39}, {0xc58, 0xc5a},
|
||||
{0xc85, 0xc8c}, {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3},
|
||||
{0xcb5, 0xcb9}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd3a},
|
||||
{0xd5f, 0xd61}, {0xd7a, 0xd7f}, {0xd85, 0xd96}, {0xd9a, 0xdb1},
|
||||
{0xdb3, 0xdbb}, {0xdc0, 0xdc6}, {0xe01, 0xe30}, {0xe40, 0xe46},
|
||||
{0xe94, 0xe97}, {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xead, 0xeb0},
|
||||
{0xec0, 0xec4}, {0xedc, 0xedf}, {0xf40, 0xf47}, {0xf49, 0xf6c},
|
||||
{0xf88, 0xf8c}, {0x1000, 0x102a}, {0x1050, 0x1055}, {0x105a, 0x105d},
|
||||
{0x106e, 0x1070}, {0x1075, 0x1081}, {0x10a0, 0x10c5}, {0x10d0, 0x10fa},
|
||||
{0x10fc, 0x1248}, {0x124a, 0x124d}, {0x1250, 0x1256}, {0x125a, 0x125d},
|
||||
{0x1260, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12b0}, {0x12b2, 0x12b5},
|
||||
{0x12b8, 0x12be}, {0x12c2, 0x12c5}, {0x12c8, 0x12d6}, {0x12d8, 0x1310},
|
||||
{0x1312, 0x1315}, {0x1318, 0x135a}, {0x1380, 0x138f}, {0x13a0, 0x13f5},
|
||||
{0x13f8, 0x13fd}, {0x1401, 0x166c}, {0x166f, 0x167f}, {0x1681, 0x169a},
|
||||
{0x16a0, 0x16ea}, {0x16f1, 0x16f8}, {0x1700, 0x170c}, {0x170e, 0x1711},
|
||||
{0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770},
|
||||
{0x1780, 0x17b3}, {0x1820, 0x1877}, {0x1880, 0x18a8}, {0x18b0, 0x18f5},
|
||||
{0x1900, 0x191e}, {0x1950, 0x196d}, {0x1970, 0x1974}, {0x1980, 0x19ab},
|
||||
{0x19b0, 0x19c9}, {0x1a00, 0x1a16}, {0x1a20, 0x1a54}, {0x1b05, 0x1b33},
|
||||
{0x1b45, 0x1b4b}, {0x1b83, 0x1ba0}, {0x1bba, 0x1be5}, {0x1c00, 0x1c23},
|
||||
{0x1c4d, 0x1c4f}, {0x1c5a, 0x1c7d}, {0x1ce9, 0x1cec}, {0x1cee, 0x1cf1},
|
||||
{0x800, 0x815}, {0x840, 0x858}, {0x8a0, 0x8b4}, {0x8b6, 0x8bd},
|
||||
{0x904, 0x939}, {0x958, 0x961}, {0x971, 0x980}, {0x985, 0x98c},
|
||||
{0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b6, 0x9b9}, {0x9df, 0x9e1},
|
||||
{0xa05, 0xa0a}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa59, 0xa5c},
|
||||
{0xa72, 0xa74}, {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8},
|
||||
{0xaaa, 0xab0}, {0xab5, 0xab9}, {0xb05, 0xb0c}, {0xb13, 0xb28},
|
||||
{0xb2a, 0xb30}, {0xb35, 0xb39}, {0xb5f, 0xb61}, {0xb85, 0xb8a},
|
||||
{0xb8e, 0xb90}, {0xb92, 0xb95}, {0xba8, 0xbaa}, {0xbae, 0xbb9},
|
||||
{0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc39},
|
||||
{0xc58, 0xc5a}, {0xc85, 0xc8c}, {0xc8e, 0xc90}, {0xc92, 0xca8},
|
||||
{0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xd05, 0xd0c}, {0xd0e, 0xd10},
|
||||
{0xd12, 0xd3a}, {0xd54, 0xd56}, {0xd5f, 0xd61}, {0xd7a, 0xd7f},
|
||||
{0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, {0xdc0, 0xdc6},
|
||||
{0xe01, 0xe30}, {0xe40, 0xe46}, {0xe94, 0xe97}, {0xe99, 0xe9f},
|
||||
{0xea1, 0xea3}, {0xead, 0xeb0}, {0xec0, 0xec4}, {0xedc, 0xedf},
|
||||
{0xf40, 0xf47}, {0xf49, 0xf6c}, {0xf88, 0xf8c}, {0x1000, 0x102a},
|
||||
{0x1050, 0x1055}, {0x105a, 0x105d}, {0x106e, 0x1070}, {0x1075, 0x1081},
|
||||
{0x10a0, 0x10c5}, {0x10d0, 0x10fa}, {0x10fc, 0x1248}, {0x124a, 0x124d},
|
||||
{0x1250, 0x1256}, {0x125a, 0x125d}, {0x1260, 0x1288}, {0x128a, 0x128d},
|
||||
{0x1290, 0x12b0}, {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c2, 0x12c5},
|
||||
{0x12c8, 0x12d6}, {0x12d8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135a},
|
||||
{0x1380, 0x138f}, {0x13a0, 0x13f5}, {0x13f8, 0x13fd}, {0x1401, 0x166c},
|
||||
{0x166f, 0x167f}, {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x16f1, 0x16f8},
|
||||
{0x1700, 0x170c}, {0x170e, 0x1711}, {0x1720, 0x1731}, {0x1740, 0x1751},
|
||||
{0x1760, 0x176c}, {0x176e, 0x1770}, {0x1780, 0x17b3}, {0x1820, 0x1877},
|
||||
{0x1880, 0x1884}, {0x1887, 0x18a8}, {0x18b0, 0x18f5}, {0x1900, 0x191e},
|
||||
{0x1950, 0x196d}, {0x1970, 0x1974}, {0x1980, 0x19ab}, {0x19b0, 0x19c9},
|
||||
{0x1a00, 0x1a16}, {0x1a20, 0x1a54}, {0x1b05, 0x1b33}, {0x1b45, 0x1b4b},
|
||||
{0x1b83, 0x1ba0}, {0x1bba, 0x1be5}, {0x1c00, 0x1c23}, {0x1c4d, 0x1c4f},
|
||||
{0x1c5a, 0x1c7d}, {0x1c80, 0x1c88}, {0x1ce9, 0x1cec}, {0x1cee, 0x1cf1},
|
||||
{0x1d00, 0x1dbf}, {0x1e00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45},
|
||||
{0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4},
|
||||
{0x1fb6, 0x1fbc}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3},
|
||||
@@ -183,7 +184,7 @@ static const crange alphaRangeTable[] = {
|
||||
{0x3131, 0x318e}, {0x31a0, 0x31ba}, {0x31f0, 0x31ff}, {0x3400, 0x4db5},
|
||||
{0x4e00, 0x9fd5}, {0xa000, 0xa48c}, {0xa4d0, 0xa4fd}, {0xa500, 0xa60c},
|
||||
{0xa610, 0xa61f}, {0xa640, 0xa66e}, {0xa67f, 0xa69d}, {0xa6a0, 0xa6e5},
|
||||
{0xa717, 0xa71f}, {0xa722, 0xa788}, {0xa78b, 0xa7ad}, {0xa7b0, 0xa7b7},
|
||||
{0xa717, 0xa71f}, {0xa722, 0xa788}, {0xa78b, 0xa7ae}, {0xa7b0, 0xa7b7},
|
||||
{0xa7f7, 0xa801}, {0xa803, 0xa805}, {0xa807, 0xa80a}, {0xa80c, 0xa822},
|
||||
{0xa840, 0xa873}, {0xa882, 0xa8b3}, {0xa8f2, 0xa8f7}, {0xa90a, 0xa925},
|
||||
{0xa930, 0xa946}, {0xa960, 0xa97c}, {0xa984, 0xa9b2}, {0xa9e0, 0xa9e4},
|
||||
@@ -193,6 +194,8 @@ static const crange alphaRangeTable[] = {
|
||||
{0xab09, 0xab0e}, {0xab11, 0xab16}, {0xab20, 0xab26}, {0xab28, 0xab2e},
|
||||
{0xab30, 0xab5a}, {0xab5c, 0xab65}, {0xab70, 0xabe2}, {0xac00, 0xd7a3},
|
||||
{0xd7b0, 0xd7c6}, {0xd7cb, 0xd7fb}, {0xdc00, 0xdc3e}, {0xdc40, 0xdc7e},
|
||||
{0xdc80, 0xdcbe}, {0xdcc0, 0xdcfe}, {0xdd00, 0xdd3e}, {0xdd40, 0xdd7e},
|
||||
{0xdd80, 0xddbe}, {0xddc0, 0xddfe}, {0xde00, 0xde3e}, {0xde40, 0xde7e},
|
||||
{0xde80, 0xdebe}, {0xdec0, 0xdefe}, {0xdf00, 0xdf3e}, {0xdf40, 0xdf7e},
|
||||
{0xdf80, 0xdfbe}, {0xdfc0, 0xdffe}, {0xf900, 0xfa6d}, {0xfa70, 0xfad9},
|
||||
{0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36},
|
||||
@@ -205,36 +208,38 @@ static const crange alphaRangeTable[] = {
|
||||
{0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10280, 0x1029c}, {0x102a0, 0x102d0},
|
||||
{0x10300, 0x1031f}, {0x10330, 0x10340}, {0x10342, 0x10349}, {0x10350, 0x10375},
|
||||
{0x10380, 0x1039d}, {0x103a0, 0x103c3}, {0x103c8, 0x103cf}, {0x10400, 0x1049d},
|
||||
{0x10500, 0x10527}, {0x10530, 0x10563}, {0x10600, 0x10736}, {0x10740, 0x10755},
|
||||
{0x10760, 0x10767}, {0x10800, 0x10805}, {0x1080a, 0x10835}, {0x1083f, 0x10855},
|
||||
{0x10860, 0x10876}, {0x10880, 0x1089e}, {0x108e0, 0x108f2}, {0x10900, 0x10915},
|
||||
{0x10920, 0x10939}, {0x10980, 0x109b7}, {0x10a10, 0x10a13}, {0x10a15, 0x10a17},
|
||||
{0x10a19, 0x10a33}, {0x10a60, 0x10a7c}, {0x10a80, 0x10a9c}, {0x10ac0, 0x10ac7},
|
||||
{0x10ac9, 0x10ae4}, {0x10b00, 0x10b35}, {0x10b40, 0x10b55}, {0x10b60, 0x10b72},
|
||||
{0x10b80, 0x10b91}, {0x10c00, 0x10c48}, {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2},
|
||||
{0x11003, 0x11037}, {0x11083, 0x110af}, {0x110d0, 0x110e8}, {0x11103, 0x11126},
|
||||
{0x11150, 0x11172}, {0x11183, 0x111b2}, {0x111c1, 0x111c4}, {0x11200, 0x11211},
|
||||
{0x11213, 0x1122b}, {0x11280, 0x11286}, {0x1128a, 0x1128d}, {0x1128f, 0x1129d},
|
||||
{0x1129f, 0x112a8}, {0x112b0, 0x112de}, {0x11305, 0x1130c}, {0x11313, 0x11328},
|
||||
{0x1132a, 0x11330}, {0x11335, 0x11339}, {0x1135d, 0x11361}, {0x11480, 0x114af},
|
||||
{0x104b0, 0x104d3}, {0x104d8, 0x104fb}, {0x10500, 0x10527}, {0x10530, 0x10563},
|
||||
{0x10600, 0x10736}, {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10800, 0x10805},
|
||||
{0x1080a, 0x10835}, {0x1083f, 0x10855}, {0x10860, 0x10876}, {0x10880, 0x1089e},
|
||||
{0x108e0, 0x108f2}, {0x10900, 0x10915}, {0x10920, 0x10939}, {0x10980, 0x109b7},
|
||||
{0x10a10, 0x10a13}, {0x10a15, 0x10a17}, {0x10a19, 0x10a33}, {0x10a60, 0x10a7c},
|
||||
{0x10a80, 0x10a9c}, {0x10ac0, 0x10ac7}, {0x10ac9, 0x10ae4}, {0x10b00, 0x10b35},
|
||||
{0x10b40, 0x10b55}, {0x10b60, 0x10b72}, {0x10b80, 0x10b91}, {0x10c00, 0x10c48},
|
||||
{0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x11003, 0x11037}, {0x11083, 0x110af},
|
||||
{0x110d0, 0x110e8}, {0x11103, 0x11126}, {0x11150, 0x11172}, {0x11183, 0x111b2},
|
||||
{0x111c1, 0x111c4}, {0x11200, 0x11211}, {0x11213, 0x1122b}, {0x11280, 0x11286},
|
||||
{0x1128a, 0x1128d}, {0x1128f, 0x1129d}, {0x1129f, 0x112a8}, {0x112b0, 0x112de},
|
||||
{0x11305, 0x1130c}, {0x11313, 0x11328}, {0x1132a, 0x11330}, {0x11335, 0x11339},
|
||||
{0x1135d, 0x11361}, {0x11400, 0x11434}, {0x11447, 0x1144a}, {0x11480, 0x114af},
|
||||
{0x11580, 0x115ae}, {0x115d8, 0x115db}, {0x11600, 0x1162f}, {0x11680, 0x116aa},
|
||||
{0x11700, 0x11719}, {0x118a0, 0x118df}, {0x11ac0, 0x11af8}, {0x12000, 0x12399},
|
||||
{0x12480, 0x12543}, {0x13000, 0x1342e}, {0x14400, 0x14646}, {0x16800, 0x16a38},
|
||||
{0x16a40, 0x16a5e}, {0x16ad0, 0x16aed}, {0x16b00, 0x16b2f}, {0x16b40, 0x16b43},
|
||||
{0x16b63, 0x16b77}, {0x16b7d, 0x16b8f}, {0x16f00, 0x16f44}, {0x16f93, 0x16f9f},
|
||||
{0x1bc00, 0x1bc6a}, {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88}, {0x1bc90, 0x1bc99},
|
||||
{0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b9},
|
||||
{0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514},
|
||||
{0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e}, {0x1d540, 0x1d544},
|
||||
{0x1d54a, 0x1d550}, {0x1d552, 0x1d6a5}, {0x1d6a8, 0x1d6c0}, {0x1d6c2, 0x1d6da},
|
||||
{0x1d6dc, 0x1d6fa}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d734}, {0x1d736, 0x1d74e},
|
||||
{0x1d750, 0x1d76e}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d7a8}, {0x1d7aa, 0x1d7c2},
|
||||
{0x1d7c4, 0x1d7cb}, {0x1e800, 0x1e8c4}, {0x1ee00, 0x1ee03}, {0x1ee05, 0x1ee1f},
|
||||
{0x1ee29, 0x1ee32}, {0x1ee34, 0x1ee37}, {0x1ee4d, 0x1ee4f}, {0x1ee67, 0x1ee6a},
|
||||
{0x1ee6c, 0x1ee72}, {0x1ee74, 0x1ee77}, {0x1ee79, 0x1ee7c}, {0x1ee80, 0x1ee89},
|
||||
{0x1ee8b, 0x1ee9b}, {0x1eea1, 0x1eea3}, {0x1eea5, 0x1eea9}, {0x1eeab, 0x1eebb},
|
||||
{0x20000, 0x2a6d6}, {0x2a700, 0x2b734}, {0x2b740, 0x2b81d}, {0x2b820, 0x2cea1},
|
||||
{0x2f800, 0x2fa1d}
|
||||
{0x11700, 0x11719}, {0x118a0, 0x118df}, {0x11ac0, 0x11af8}, {0x11c00, 0x11c08},
|
||||
{0x11c0a, 0x11c2e}, {0x11c72, 0x11c8f}, {0x12000, 0x12399}, {0x12480, 0x12543},
|
||||
{0x13000, 0x1342e}, {0x14400, 0x14646}, {0x16800, 0x16a38}, {0x16a40, 0x16a5e},
|
||||
{0x16ad0, 0x16aed}, {0x16b00, 0x16b2f}, {0x16b40, 0x16b43}, {0x16b63, 0x16b77},
|
||||
{0x16b7d, 0x16b8f}, {0x16f00, 0x16f44}, {0x16f93, 0x16f9f}, {0x17000, 0x187ec},
|
||||
{0x18800, 0x18af2}, {0x1bc00, 0x1bc6a}, {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88},
|
||||
{0x1bc90, 0x1bc99}, {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d4a9, 0x1d4ac},
|
||||
{0x1d4ae, 0x1d4b9}, {0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a},
|
||||
{0x1d50d, 0x1d514}, {0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e},
|
||||
{0x1d540, 0x1d544}, {0x1d54a, 0x1d550}, {0x1d552, 0x1d6a5}, {0x1d6a8, 0x1d6c0},
|
||||
{0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6fa}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d734},
|
||||
{0x1d736, 0x1d74e}, {0x1d750, 0x1d76e}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d7a8},
|
||||
{0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7cb}, {0x1e800, 0x1e8c4}, {0x1e900, 0x1e943},
|
||||
{0x1ee00, 0x1ee03}, {0x1ee05, 0x1ee1f}, {0x1ee29, 0x1ee32}, {0x1ee34, 0x1ee37},
|
||||
{0x1ee4d, 0x1ee4f}, {0x1ee67, 0x1ee6a}, {0x1ee6c, 0x1ee72}, {0x1ee74, 0x1ee77},
|
||||
{0x1ee79, 0x1ee7c}, {0x1ee80, 0x1ee89}, {0x1ee8b, 0x1ee9b}, {0x1eea1, 0x1eea3},
|
||||
{0x1eea5, 0x1eea9}, {0x1eeab, 0x1eebb}, {0x20000, 0x2a6d6}, {0x2a700, 0x2b734},
|
||||
{0x2b740, 0x2b81d}, {0x2b820, 0x2cea1}, {0x2f800, 0x2fa1d}
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -249,24 +254,24 @@ static const chr alphaCharTable[] = {
|
||||
0xa39, 0xa5e, 0xab2, 0xab3, 0xabd, 0xad0, 0xae0, 0xae1, 0xaf9,
|
||||
0xb0f, 0xb10, 0xb32, 0xb33, 0xb3d, 0xb5c, 0xb5d, 0xb71, 0xb83,
|
||||
0xb99, 0xb9a, 0xb9c, 0xb9e, 0xb9f, 0xba3, 0xba4, 0xbd0, 0xc3d,
|
||||
0xc60, 0xc61, 0xcbd, 0xcde, 0xce0, 0xce1, 0xcf1, 0xcf2, 0xd3d,
|
||||
0xd4e, 0xdbd, 0xe32, 0xe33, 0xe81, 0xe82, 0xe84, 0xe87, 0xe88,
|
||||
0xe8a, 0xe8d, 0xea5, 0xea7, 0xeaa, 0xeab, 0xeb2, 0xeb3, 0xebd,
|
||||
0xec6, 0xf00, 0x103f, 0x1061, 0x1065, 0x1066, 0x108e, 0x10c7, 0x10cd,
|
||||
0x1258, 0x12c0, 0x17d7, 0x17dc, 0x18aa, 0x1aa7, 0x1bae, 0x1baf, 0x1cf5,
|
||||
0x1cf6, 0x1f59, 0x1f5b, 0x1f5d, 0x1fbe, 0x2071, 0x207f, 0x2102, 0x2107,
|
||||
0x2115, 0x2124, 0x2126, 0x2128, 0x214e, 0x2183, 0x2184, 0x2cf2, 0x2cf3,
|
||||
0x2d27, 0x2d2d, 0x2d6f, 0x2e2f, 0x3005, 0x3006, 0x303b, 0x303c, 0xa62a,
|
||||
0xa62b, 0xa8fb, 0xa8fd, 0xa9cf, 0xaa7a, 0xaab1, 0xaab5, 0xaab6, 0xaac0,
|
||||
0xaac2, 0xfb1d, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44
|
||||
0xc60, 0xc61, 0xc80, 0xcbd, 0xcde, 0xce0, 0xce1, 0xcf1, 0xcf2,
|
||||
0xd3d, 0xd4e, 0xdbd, 0xe32, 0xe33, 0xe81, 0xe82, 0xe84, 0xe87,
|
||||
0xe88, 0xe8a, 0xe8d, 0xea5, 0xea7, 0xeaa, 0xeab, 0xeb2, 0xeb3,
|
||||
0xebd, 0xec6, 0xf00, 0x103f, 0x1061, 0x1065, 0x1066, 0x108e, 0x10c7,
|
||||
0x10cd, 0x1258, 0x12c0, 0x17d7, 0x17dc, 0x18aa, 0x1aa7, 0x1bae, 0x1baf,
|
||||
0x1cf5, 0x1cf6, 0x1f59, 0x1f5b, 0x1f5d, 0x1fbe, 0x2071, 0x207f, 0x2102,
|
||||
0x2107, 0x2115, 0x2124, 0x2126, 0x2128, 0x214e, 0x2183, 0x2184, 0x2cf2,
|
||||
0x2cf3, 0x2d27, 0x2d2d, 0x2d6f, 0x2e2f, 0x3005, 0x3006, 0x303b, 0x303c,
|
||||
0xa62a, 0xa62b, 0xa8fb, 0xa8fd, 0xa9cf, 0xaa7a, 0xaab1, 0xaab5, 0xaab6,
|
||||
0xaac0, 0xaac2, 0xfb1d, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44
|
||||
#if TCL_UTF_MAX > 4
|
||||
,0x1003c, 0x1003d, 0x10808, 0x10837, 0x10838, 0x1083c, 0x108f4, 0x108f5, 0x109be,
|
||||
0x109bf, 0x10a00, 0x11176, 0x111da, 0x111dc, 0x11288, 0x1130f, 0x11310, 0x11332,
|
||||
0x11333, 0x1133d, 0x11350, 0x114c4, 0x114c5, 0x114c7, 0x11644, 0x118ff, 0x16f50,
|
||||
0x1b000, 0x1b001, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4bb, 0x1d546,
|
||||
0x1ee21, 0x1ee22, 0x1ee24, 0x1ee27, 0x1ee39, 0x1ee3b, 0x1ee42, 0x1ee47, 0x1ee49,
|
||||
0x1ee4b, 0x1ee51, 0x1ee52, 0x1ee54, 0x1ee57, 0x1ee59, 0x1ee5b, 0x1ee5d, 0x1ee5f,
|
||||
0x1ee61, 0x1ee62, 0x1ee64, 0x1ee7e
|
||||
0x11333, 0x1133d, 0x11350, 0x114c4, 0x114c5, 0x114c7, 0x11644, 0x118ff, 0x11c40,
|
||||
0x16f50, 0x16fe0, 0x1b000, 0x1b001, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a5, 0x1d4a6,
|
||||
0x1d4bb, 0x1d546, 0x1ee21, 0x1ee22, 0x1ee24, 0x1ee27, 0x1ee39, 0x1ee3b, 0x1ee42,
|
||||
0x1ee47, 0x1ee49, 0x1ee4b, 0x1ee51, 0x1ee52, 0x1ee54, 0x1ee57, 0x1ee59, 0x1ee5b,
|
||||
0x1ee5d, 0x1ee5f, 0x1ee61, 0x1ee62, 0x1ee64, 0x1ee7e
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -289,7 +294,7 @@ static const crange controlRangeTable[] = {
|
||||
#define NUM_CONTROL_RANGE (sizeof(controlRangeTable)/sizeof(crange))
|
||||
|
||||
static const chr controlCharTable[] = {
|
||||
0xad, 0x61c, 0x6dd, 0x70f, 0x180e, 0xfeff
|
||||
0xad, 0x61c, 0x6dd, 0x70f, 0x8e2, 0x180e, 0xfeff
|
||||
#if TCL_UTF_MAX > 4
|
||||
,0x110bd, 0xe0001
|
||||
#endif
|
||||
@@ -314,9 +319,10 @@ static const crange digitRangeTable[] = {
|
||||
{0xff10, 0xff19}
|
||||
#if TCL_UTF_MAX > 4
|
||||
,{0x104a0, 0x104a9}, {0x11066, 0x1106f}, {0x110f0, 0x110f9}, {0x11136, 0x1113f},
|
||||
{0x111d0, 0x111d9}, {0x112f0, 0x112f9}, {0x114d0, 0x114d9}, {0x11650, 0x11659},
|
||||
{0x116c0, 0x116c9}, {0x11730, 0x11739}, {0x118e0, 0x118e9}, {0x16a60, 0x16a69},
|
||||
{0x16b50, 0x16b59}, {0x1d7ce, 0x1d7ff}
|
||||
{0x111d0, 0x111d9}, {0x112f0, 0x112f9}, {0x11450, 0x11459}, {0x114d0, 0x114d9},
|
||||
{0x11650, 0x11659}, {0x116c0, 0x116c9}, {0x11730, 0x11739}, {0x118e0, 0x118e9},
|
||||
{0x11c50, 0x11c59}, {0x16a60, 0x16a69}, {0x16b50, 0x16b59}, {0x1d7ce, 0x1d7ff},
|
||||
{0x1e950, 0x1e959}
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -339,7 +345,7 @@ static const crange punctRangeTable[] = {
|
||||
{0x1b5a, 0x1b60}, {0x1bfc, 0x1bff}, {0x1c3b, 0x1c3f}, {0x1cc0, 0x1cc7},
|
||||
{0x2010, 0x2027}, {0x2030, 0x2043}, {0x2045, 0x2051}, {0x2053, 0x205e},
|
||||
{0x2308, 0x230b}, {0x2768, 0x2775}, {0x27e6, 0x27ef}, {0x2983, 0x2998},
|
||||
{0x29d8, 0x29db}, {0x2cf9, 0x2cfc}, {0x2e00, 0x2e2e}, {0x2e30, 0x2e42},
|
||||
{0x29d8, 0x29db}, {0x2cf9, 0x2cfc}, {0x2e00, 0x2e2e}, {0x2e30, 0x2e44},
|
||||
{0x3001, 0x3003}, {0x3008, 0x3011}, {0x3014, 0x301f}, {0xa60d, 0xa60f},
|
||||
{0xa6f2, 0xa6f7}, {0xa874, 0xa877}, {0xa8f8, 0xa8fa}, {0xa9c1, 0xa9cd},
|
||||
{0xaa5c, 0xaa5f}, {0xfe10, 0xfe19}, {0xfe30, 0xfe52}, {0xfe54, 0xfe61},
|
||||
@@ -348,9 +354,9 @@ static const crange punctRangeTable[] = {
|
||||
#if TCL_UTF_MAX > 4
|
||||
,{0x10100, 0x10102}, {0x10a50, 0x10a58}, {0x10af0, 0x10af6}, {0x10b39, 0x10b3f},
|
||||
{0x10b99, 0x10b9c}, {0x11047, 0x1104d}, {0x110be, 0x110c1}, {0x11140, 0x11143},
|
||||
{0x111c5, 0x111c9}, {0x111dd, 0x111df}, {0x11238, 0x1123d}, {0x115c1, 0x115d7},
|
||||
{0x11641, 0x11643}, {0x1173c, 0x1173e}, {0x12470, 0x12474}, {0x16b37, 0x16b3b},
|
||||
{0x1da87, 0x1da8b}
|
||||
{0x111c5, 0x111c9}, {0x111dd, 0x111df}, {0x11238, 0x1123d}, {0x1144b, 0x1144f},
|
||||
{0x115c1, 0x115d7}, {0x11641, 0x11643}, {0x11660, 0x1166c}, {0x1173c, 0x1173e},
|
||||
{0x11c41, 0x11c45}, {0x12470, 0x12474}, {0x16b37, 0x16b3b}, {0x1da87, 0x1da8b}
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -371,8 +377,8 @@ static const chr punctCharTable[] = {
|
||||
0xfe6b, 0xff1a, 0xff1b, 0xff1f, 0xff20, 0xff3f, 0xff5b, 0xff5d
|
||||
#if TCL_UTF_MAX > 4
|
||||
,0x1039f, 0x103d0, 0x1056f, 0x10857, 0x1091f, 0x1093f, 0x10a7f, 0x110bb, 0x110bc,
|
||||
0x11174, 0x11175, 0x111cd, 0x111db, 0x112a9, 0x114c6, 0x16a6e, 0x16a6f, 0x16af5,
|
||||
0x16b44, 0x1bc9f
|
||||
0x11174, 0x11175, 0x111cd, 0x111db, 0x112a9, 0x1145b, 0x1145d, 0x114c6, 0x11c70,
|
||||
0x11c71, 0x16a6e, 0x16a6f, 0x16af5, 0x16b44, 0x1bc9f, 0x1e95e, 0x1e95f
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -404,24 +410,24 @@ static const crange lowerRangeTable[] = {
|
||||
{0x199, 0x19b}, {0x1bd, 0x1bf}, {0x233, 0x239}, {0x24f, 0x293},
|
||||
{0x295, 0x2af}, {0x37b, 0x37d}, {0x3ac, 0x3ce}, {0x3d5, 0x3d7},
|
||||
{0x3ef, 0x3f3}, {0x430, 0x45f}, {0x561, 0x587}, {0x13f8, 0x13fd},
|
||||
{0x1d00, 0x1d2b}, {0x1d6b, 0x1d77}, {0x1d79, 0x1d9a}, {0x1e95, 0x1e9d},
|
||||
{0x1eff, 0x1f07}, {0x1f10, 0x1f15}, {0x1f20, 0x1f27}, {0x1f30, 0x1f37},
|
||||
{0x1f40, 0x1f45}, {0x1f50, 0x1f57}, {0x1f60, 0x1f67}, {0x1f70, 0x1f7d},
|
||||
{0x1f80, 0x1f87}, {0x1f90, 0x1f97}, {0x1fa0, 0x1fa7}, {0x1fb0, 0x1fb4},
|
||||
{0x1fc2, 0x1fc4}, {0x1fd0, 0x1fd3}, {0x1fe0, 0x1fe7}, {0x1ff2, 0x1ff4},
|
||||
{0x2146, 0x2149}, {0x2c30, 0x2c5e}, {0x2c76, 0x2c7b}, {0x2d00, 0x2d25},
|
||||
{0xa72f, 0xa731}, {0xa771, 0xa778}, {0xa793, 0xa795}, {0xab30, 0xab5a},
|
||||
{0xab60, 0xab65}, {0xab70, 0xabbf}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17},
|
||||
{0xff41, 0xff5a}
|
||||
{0x1c80, 0x1c88}, {0x1d00, 0x1d2b}, {0x1d6b, 0x1d77}, {0x1d79, 0x1d9a},
|
||||
{0x1e95, 0x1e9d}, {0x1eff, 0x1f07}, {0x1f10, 0x1f15}, {0x1f20, 0x1f27},
|
||||
{0x1f30, 0x1f37}, {0x1f40, 0x1f45}, {0x1f50, 0x1f57}, {0x1f60, 0x1f67},
|
||||
{0x1f70, 0x1f7d}, {0x1f80, 0x1f87}, {0x1f90, 0x1f97}, {0x1fa0, 0x1fa7},
|
||||
{0x1fb0, 0x1fb4}, {0x1fc2, 0x1fc4}, {0x1fd0, 0x1fd3}, {0x1fe0, 0x1fe7},
|
||||
{0x1ff2, 0x1ff4}, {0x2146, 0x2149}, {0x2c30, 0x2c5e}, {0x2c76, 0x2c7b},
|
||||
{0x2d00, 0x2d25}, {0xa72f, 0xa731}, {0xa771, 0xa778}, {0xa793, 0xa795},
|
||||
{0xab30, 0xab5a}, {0xab60, 0xab65}, {0xab70, 0xabbf}, {0xfb00, 0xfb06},
|
||||
{0xfb13, 0xfb17}, {0xff41, 0xff5a}
|
||||
#if TCL_UTF_MAX > 4
|
||||
,{0x10428, 0x1044f}, {0x10cc0, 0x10cf2}, {0x118c0, 0x118df}, {0x1d41a, 0x1d433},
|
||||
{0x1d44e, 0x1d454}, {0x1d456, 0x1d467}, {0x1d482, 0x1d49b}, {0x1d4b6, 0x1d4b9},
|
||||
{0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d4cf}, {0x1d4ea, 0x1d503}, {0x1d51e, 0x1d537},
|
||||
{0x1d552, 0x1d56b}, {0x1d586, 0x1d59f}, {0x1d5ba, 0x1d5d3}, {0x1d5ee, 0x1d607},
|
||||
{0x1d622, 0x1d63b}, {0x1d656, 0x1d66f}, {0x1d68a, 0x1d6a5}, {0x1d6c2, 0x1d6da},
|
||||
{0x1d6dc, 0x1d6e1}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d71b}, {0x1d736, 0x1d74e},
|
||||
{0x1d750, 0x1d755}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d78f}, {0x1d7aa, 0x1d7c2},
|
||||
{0x1d7c4, 0x1d7c9}
|
||||
,{0x10428, 0x1044f}, {0x104d8, 0x104fb}, {0x10cc0, 0x10cf2}, {0x118c0, 0x118df},
|
||||
{0x1d41a, 0x1d433}, {0x1d44e, 0x1d454}, {0x1d456, 0x1d467}, {0x1d482, 0x1d49b},
|
||||
{0x1d4b6, 0x1d4b9}, {0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d4cf}, {0x1d4ea, 0x1d503},
|
||||
{0x1d51e, 0x1d537}, {0x1d552, 0x1d56b}, {0x1d586, 0x1d59f}, {0x1d5ba, 0x1d5d3},
|
||||
{0x1d5ee, 0x1d607}, {0x1d622, 0x1d63b}, {0x1d656, 0x1d66f}, {0x1d68a, 0x1d6a5},
|
||||
{0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6e1}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d71b},
|
||||
{0x1d736, 0x1d74e}, {0x1d750, 0x1d755}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d78f},
|
||||
{0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9}, {0x1e922, 0x1e943}
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -513,15 +519,15 @@ static const crange upperRangeTable[] = {
|
||||
{0x1fc8, 0x1fcb}, {0x1fd8, 0x1fdb}, {0x1fe8, 0x1fec}, {0x1ff8, 0x1ffb},
|
||||
{0x210b, 0x210d}, {0x2110, 0x2112}, {0x2119, 0x211d}, {0x212a, 0x212d},
|
||||
{0x2130, 0x2133}, {0x2c00, 0x2c2e}, {0x2c62, 0x2c64}, {0x2c6d, 0x2c70},
|
||||
{0x2c7e, 0x2c80}, {0xa7aa, 0xa7ad}, {0xa7b0, 0xa7b4}, {0xff21, 0xff3a}
|
||||
{0x2c7e, 0x2c80}, {0xa7aa, 0xa7ae}, {0xa7b0, 0xa7b4}, {0xff21, 0xff3a}
|
||||
#if TCL_UTF_MAX > 4
|
||||
,{0x10400, 0x10427}, {0x10c80, 0x10cb2}, {0x118a0, 0x118bf}, {0x1d400, 0x1d419},
|
||||
{0x1d434, 0x1d44d}, {0x1d468, 0x1d481}, {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b5},
|
||||
{0x1d4d0, 0x1d4e9}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, {0x1d516, 0x1d51c},
|
||||
{0x1d53b, 0x1d53e}, {0x1d540, 0x1d544}, {0x1d54a, 0x1d550}, {0x1d56c, 0x1d585},
|
||||
{0x1d5a0, 0x1d5b9}, {0x1d5d4, 0x1d5ed}, {0x1d608, 0x1d621}, {0x1d63c, 0x1d655},
|
||||
{0x1d670, 0x1d689}, {0x1d6a8, 0x1d6c0}, {0x1d6e2, 0x1d6fa}, {0x1d71c, 0x1d734},
|
||||
{0x1d756, 0x1d76e}, {0x1d790, 0x1d7a8}
|
||||
,{0x10400, 0x10427}, {0x104b0, 0x104d3}, {0x10c80, 0x10cb2}, {0x118a0, 0x118bf},
|
||||
{0x1d400, 0x1d419}, {0x1d434, 0x1d44d}, {0x1d468, 0x1d481}, {0x1d4a9, 0x1d4ac},
|
||||
{0x1d4ae, 0x1d4b5}, {0x1d4d0, 0x1d4e9}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514},
|
||||
{0x1d516, 0x1d51c}, {0x1d53b, 0x1d53e}, {0x1d540, 0x1d544}, {0x1d54a, 0x1d550},
|
||||
{0x1d56c, 0x1d585}, {0x1d5a0, 0x1d5b9}, {0x1d5d4, 0x1d5ed}, {0x1d608, 0x1d621},
|
||||
{0x1d63c, 0x1d655}, {0x1d670, 0x1d689}, {0x1d6a8, 0x1d6c0}, {0x1d6e2, 0x1d6fa},
|
||||
{0x1d71c, 0x1d734}, {0x1d756, 0x1d76e}, {0x1d790, 0x1d7a8}, {0x1e900, 0x1e921}
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -610,26 +616,26 @@ static const crange graphRangeTable[] = {
|
||||
{0x5d0, 0x5ea}, {0x5f0, 0x5f4}, {0x606, 0x61b}, {0x61e, 0x6dc},
|
||||
{0x6de, 0x70d}, {0x710, 0x74a}, {0x74d, 0x7b1}, {0x7c0, 0x7fa},
|
||||
{0x800, 0x82d}, {0x830, 0x83e}, {0x840, 0x85b}, {0x8a0, 0x8b4},
|
||||
{0x8e3, 0x983}, {0x985, 0x98c}, {0x993, 0x9a8}, {0x9aa, 0x9b0},
|
||||
{0x9b6, 0x9b9}, {0x9bc, 0x9c4}, {0x9cb, 0x9ce}, {0x9df, 0x9e3},
|
||||
{0x9e6, 0x9fb}, {0xa01, 0xa03}, {0xa05, 0xa0a}, {0xa13, 0xa28},
|
||||
{0xa2a, 0xa30}, {0xa3e, 0xa42}, {0xa4b, 0xa4d}, {0xa59, 0xa5c},
|
||||
{0xa66, 0xa75}, {0xa81, 0xa83}, {0xa85, 0xa8d}, {0xa8f, 0xa91},
|
||||
{0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab5, 0xab9}, {0xabc, 0xac5},
|
||||
{0xac7, 0xac9}, {0xacb, 0xacd}, {0xae0, 0xae3}, {0xae6, 0xaf1},
|
||||
{0xb01, 0xb03}, {0xb05, 0xb0c}, {0xb13, 0xb28}, {0xb2a, 0xb30},
|
||||
{0xb35, 0xb39}, {0xb3c, 0xb44}, {0xb4b, 0xb4d}, {0xb5f, 0xb63},
|
||||
{0xb66, 0xb77}, {0xb85, 0xb8a}, {0xb8e, 0xb90}, {0xb92, 0xb95},
|
||||
{0xba8, 0xbaa}, {0xbae, 0xbb9}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8},
|
||||
{0xbca, 0xbcd}, {0xbe6, 0xbfa}, {0xc00, 0xc03}, {0xc05, 0xc0c},
|
||||
{0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc39}, {0xc3d, 0xc44},
|
||||
{0xc46, 0xc48}, {0xc4a, 0xc4d}, {0xc58, 0xc5a}, {0xc60, 0xc63},
|
||||
{0xc66, 0xc6f}, {0xc78, 0xc7f}, {0xc81, 0xc83}, {0xc85, 0xc8c},
|
||||
{0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9},
|
||||
{0xcbc, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xce0, 0xce3},
|
||||
{0xce6, 0xcef}, {0xd01, 0xd03}, {0xd05, 0xd0c}, {0xd0e, 0xd10},
|
||||
{0xd12, 0xd3a}, {0xd3d, 0xd44}, {0xd46, 0xd48}, {0xd4a, 0xd4e},
|
||||
{0xd5f, 0xd63}, {0xd66, 0xd75}, {0xd79, 0xd7f}, {0xd85, 0xd96},
|
||||
{0x8b6, 0x8bd}, {0x8d4, 0x8e1}, {0x8e3, 0x983}, {0x985, 0x98c},
|
||||
{0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b6, 0x9b9}, {0x9bc, 0x9c4},
|
||||
{0x9cb, 0x9ce}, {0x9df, 0x9e3}, {0x9e6, 0x9fb}, {0xa01, 0xa03},
|
||||
{0xa05, 0xa0a}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa3e, 0xa42},
|
||||
{0xa4b, 0xa4d}, {0xa59, 0xa5c}, {0xa66, 0xa75}, {0xa81, 0xa83},
|
||||
{0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0},
|
||||
{0xab5, 0xab9}, {0xabc, 0xac5}, {0xac7, 0xac9}, {0xacb, 0xacd},
|
||||
{0xae0, 0xae3}, {0xae6, 0xaf1}, {0xb01, 0xb03}, {0xb05, 0xb0c},
|
||||
{0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb35, 0xb39}, {0xb3c, 0xb44},
|
||||
{0xb4b, 0xb4d}, {0xb5f, 0xb63}, {0xb66, 0xb77}, {0xb85, 0xb8a},
|
||||
{0xb8e, 0xb90}, {0xb92, 0xb95}, {0xba8, 0xbaa}, {0xbae, 0xbb9},
|
||||
{0xbbe, 0xbc2}, {0xbc6, 0xbc8}, {0xbca, 0xbcd}, {0xbe6, 0xbfa},
|
||||
{0xc00, 0xc03}, {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28},
|
||||
{0xc2a, 0xc39}, {0xc3d, 0xc44}, {0xc46, 0xc48}, {0xc4a, 0xc4d},
|
||||
{0xc58, 0xc5a}, {0xc60, 0xc63}, {0xc66, 0xc6f}, {0xc78, 0xc83},
|
||||
{0xc85, 0xc8c}, {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3},
|
||||
{0xcb5, 0xcb9}, {0xcbc, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd},
|
||||
{0xce0, 0xce3}, {0xce6, 0xcef}, {0xd01, 0xd03}, {0xd05, 0xd0c},
|
||||
{0xd0e, 0xd10}, {0xd12, 0xd3a}, {0xd3d, 0xd44}, {0xd46, 0xd48},
|
||||
{0xd4a, 0xd4f}, {0xd54, 0xd63}, {0xd66, 0xd7f}, {0xd85, 0xd96},
|
||||
{0xd9a, 0xdb1}, {0xdb3, 0xdbb}, {0xdc0, 0xdc6}, {0xdcf, 0xdd4},
|
||||
{0xdd8, 0xddf}, {0xde6, 0xdef}, {0xdf2, 0xdf4}, {0xe01, 0xe3a},
|
||||
{0xe3f, 0xe5b}, {0xe94, 0xe97}, {0xe99, 0xe9f}, {0xea1, 0xea3},
|
||||
@@ -650,25 +656,25 @@ static const crange graphRangeTable[] = {
|
||||
{0x19de, 0x1a1b}, {0x1a1e, 0x1a5e}, {0x1a60, 0x1a7c}, {0x1a7f, 0x1a89},
|
||||
{0x1a90, 0x1a99}, {0x1aa0, 0x1aad}, {0x1ab0, 0x1abe}, {0x1b00, 0x1b4b},
|
||||
{0x1b50, 0x1b7c}, {0x1b80, 0x1bf3}, {0x1bfc, 0x1c37}, {0x1c3b, 0x1c49},
|
||||
{0x1c4d, 0x1c7f}, {0x1cc0, 0x1cc7}, {0x1cd0, 0x1cf6}, {0x1d00, 0x1df5},
|
||||
{0x1dfc, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d},
|
||||
{0x1c4d, 0x1c88}, {0x1cc0, 0x1cc7}, {0x1cd0, 0x1cf6}, {0x1d00, 0x1df5},
|
||||
{0x1dfb, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d},
|
||||
{0x1f50, 0x1f57}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fc4},
|
||||
{0x1fc6, 0x1fd3}, {0x1fd6, 0x1fdb}, {0x1fdd, 0x1fef}, {0x1ff2, 0x1ff4},
|
||||
{0x1ff6, 0x1ffe}, {0x2010, 0x2027}, {0x2030, 0x205e}, {0x2074, 0x208e},
|
||||
{0x2090, 0x209c}, {0x20a0, 0x20be}, {0x20d0, 0x20f0}, {0x2100, 0x218b},
|
||||
{0x2190, 0x23fa}, {0x2400, 0x2426}, {0x2440, 0x244a}, {0x2460, 0x2b73},
|
||||
{0x2190, 0x23fe}, {0x2400, 0x2426}, {0x2440, 0x244a}, {0x2460, 0x2b73},
|
||||
{0x2b76, 0x2b95}, {0x2b98, 0x2bb9}, {0x2bbd, 0x2bc8}, {0x2bca, 0x2bd1},
|
||||
{0x2bec, 0x2bef}, {0x2c00, 0x2c2e}, {0x2c30, 0x2c5e}, {0x2c60, 0x2cf3},
|
||||
{0x2cf9, 0x2d25}, {0x2d30, 0x2d67}, {0x2d7f, 0x2d96}, {0x2da0, 0x2da6},
|
||||
{0x2da8, 0x2dae}, {0x2db0, 0x2db6}, {0x2db8, 0x2dbe}, {0x2dc0, 0x2dc6},
|
||||
{0x2dc8, 0x2dce}, {0x2dd0, 0x2dd6}, {0x2dd8, 0x2dde}, {0x2de0, 0x2e42},
|
||||
{0x2dc8, 0x2dce}, {0x2dd0, 0x2dd6}, {0x2dd8, 0x2dde}, {0x2de0, 0x2e44},
|
||||
{0x2e80, 0x2e99}, {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb},
|
||||
{0x3001, 0x303f}, {0x3041, 0x3096}, {0x3099, 0x30ff}, {0x3105, 0x312d},
|
||||
{0x3131, 0x318e}, {0x3190, 0x31ba}, {0x31c0, 0x31e3}, {0x31f0, 0x321e},
|
||||
{0x3220, 0x32fe}, {0x3300, 0x4db5}, {0x4dc0, 0x9fd5}, {0xa000, 0xa48c},
|
||||
{0xa490, 0xa4c6}, {0xa4d0, 0xa62b}, {0xa640, 0xa6f7}, {0xa700, 0xa7ad},
|
||||
{0xa490, 0xa4c6}, {0xa4d0, 0xa62b}, {0xa640, 0xa6f7}, {0xa700, 0xa7ae},
|
||||
{0xa7b0, 0xa7b7}, {0xa7f7, 0xa82b}, {0xa830, 0xa839}, {0xa840, 0xa877},
|
||||
{0xa880, 0xa8c4}, {0xa8ce, 0xa8d9}, {0xa8e0, 0xa8fd}, {0xa900, 0xa953},
|
||||
{0xa880, 0xa8c5}, {0xa8ce, 0xa8d9}, {0xa8e0, 0xa8fd}, {0xa900, 0xa953},
|
||||
{0xa95f, 0xa97c}, {0xa980, 0xa9cd}, {0xa9cf, 0xa9d9}, {0xa9de, 0xa9fe},
|
||||
{0xaa00, 0xaa36}, {0xaa40, 0xaa4d}, {0xaa50, 0xaa59}, {0xaa5c, 0xaac2},
|
||||
{0xaadb, 0xaaf6}, {0xab01, 0xab06}, {0xab09, 0xab0e}, {0xab11, 0xab16},
|
||||
@@ -687,54 +693,59 @@ static const crange graphRangeTable[] = {
|
||||
#if TCL_UTF_MAX > 4
|
||||
,{0x10000, 0x1000b}, {0x1000d, 0x10026}, {0x10028, 0x1003a}, {0x1003f, 0x1004d},
|
||||
{0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10100, 0x10102}, {0x10107, 0x10133},
|
||||
{0x10137, 0x1018c}, {0x10190, 0x1019b}, {0x101d0, 0x101fd}, {0x10280, 0x1029c},
|
||||
{0x10137, 0x1018e}, {0x10190, 0x1019b}, {0x101d0, 0x101fd}, {0x10280, 0x1029c},
|
||||
{0x102a0, 0x102d0}, {0x102e0, 0x102fb}, {0x10300, 0x10323}, {0x10330, 0x1034a},
|
||||
{0x10350, 0x1037a}, {0x10380, 0x1039d}, {0x1039f, 0x103c3}, {0x103c8, 0x103d5},
|
||||
{0x10400, 0x1049d}, {0x104a0, 0x104a9}, {0x10500, 0x10527}, {0x10530, 0x10563},
|
||||
{0x10600, 0x10736}, {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10800, 0x10805},
|
||||
{0x1080a, 0x10835}, {0x1083f, 0x10855}, {0x10857, 0x1089e}, {0x108a7, 0x108af},
|
||||
{0x108e0, 0x108f2}, {0x108fb, 0x1091b}, {0x1091f, 0x10939}, {0x10980, 0x109b7},
|
||||
{0x109bc, 0x109cf}, {0x109d2, 0x10a03}, {0x10a0c, 0x10a13}, {0x10a15, 0x10a17},
|
||||
{0x10a19, 0x10a33}, {0x10a38, 0x10a3a}, {0x10a3f, 0x10a47}, {0x10a50, 0x10a58},
|
||||
{0x10a60, 0x10a9f}, {0x10ac0, 0x10ae6}, {0x10aeb, 0x10af6}, {0x10b00, 0x10b35},
|
||||
{0x10b39, 0x10b55}, {0x10b58, 0x10b72}, {0x10b78, 0x10b91}, {0x10b99, 0x10b9c},
|
||||
{0x10ba9, 0x10baf}, {0x10c00, 0x10c48}, {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2},
|
||||
{0x10cfa, 0x10cff}, {0x10e60, 0x10e7e}, {0x11000, 0x1104d}, {0x11052, 0x1106f},
|
||||
{0x1107f, 0x110bc}, {0x110be, 0x110c1}, {0x110d0, 0x110e8}, {0x110f0, 0x110f9},
|
||||
{0x11100, 0x11134}, {0x11136, 0x11143}, {0x11150, 0x11176}, {0x11180, 0x111cd},
|
||||
{0x111d0, 0x111df}, {0x111e1, 0x111f4}, {0x11200, 0x11211}, {0x11213, 0x1123d},
|
||||
{0x11280, 0x11286}, {0x1128a, 0x1128d}, {0x1128f, 0x1129d}, {0x1129f, 0x112a9},
|
||||
{0x112b0, 0x112ea}, {0x112f0, 0x112f9}, {0x11300, 0x11303}, {0x11305, 0x1130c},
|
||||
{0x11313, 0x11328}, {0x1132a, 0x11330}, {0x11335, 0x11339}, {0x1133c, 0x11344},
|
||||
{0x1134b, 0x1134d}, {0x1135d, 0x11363}, {0x11366, 0x1136c}, {0x11370, 0x11374},
|
||||
{0x11480, 0x114c7}, {0x114d0, 0x114d9}, {0x11580, 0x115b5}, {0x115b8, 0x115dd},
|
||||
{0x11600, 0x11644}, {0x11650, 0x11659}, {0x11680, 0x116b7}, {0x116c0, 0x116c9},
|
||||
{0x10400, 0x1049d}, {0x104a0, 0x104a9}, {0x104b0, 0x104d3}, {0x104d8, 0x104fb},
|
||||
{0x10500, 0x10527}, {0x10530, 0x10563}, {0x10600, 0x10736}, {0x10740, 0x10755},
|
||||
{0x10760, 0x10767}, {0x10800, 0x10805}, {0x1080a, 0x10835}, {0x1083f, 0x10855},
|
||||
{0x10857, 0x1089e}, {0x108a7, 0x108af}, {0x108e0, 0x108f2}, {0x108fb, 0x1091b},
|
||||
{0x1091f, 0x10939}, {0x10980, 0x109b7}, {0x109bc, 0x109cf}, {0x109d2, 0x10a03},
|
||||
{0x10a0c, 0x10a13}, {0x10a15, 0x10a17}, {0x10a19, 0x10a33}, {0x10a38, 0x10a3a},
|
||||
{0x10a3f, 0x10a47}, {0x10a50, 0x10a58}, {0x10a60, 0x10a9f}, {0x10ac0, 0x10ae6},
|
||||
{0x10aeb, 0x10af6}, {0x10b00, 0x10b35}, {0x10b39, 0x10b55}, {0x10b58, 0x10b72},
|
||||
{0x10b78, 0x10b91}, {0x10b99, 0x10b9c}, {0x10ba9, 0x10baf}, {0x10c00, 0x10c48},
|
||||
{0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x10cfa, 0x10cff}, {0x10e60, 0x10e7e},
|
||||
{0x11000, 0x1104d}, {0x11052, 0x1106f}, {0x1107f, 0x110bc}, {0x110be, 0x110c1},
|
||||
{0x110d0, 0x110e8}, {0x110f0, 0x110f9}, {0x11100, 0x11134}, {0x11136, 0x11143},
|
||||
{0x11150, 0x11176}, {0x11180, 0x111cd}, {0x111d0, 0x111df}, {0x111e1, 0x111f4},
|
||||
{0x11200, 0x11211}, {0x11213, 0x1123e}, {0x11280, 0x11286}, {0x1128a, 0x1128d},
|
||||
{0x1128f, 0x1129d}, {0x1129f, 0x112a9}, {0x112b0, 0x112ea}, {0x112f0, 0x112f9},
|
||||
{0x11300, 0x11303}, {0x11305, 0x1130c}, {0x11313, 0x11328}, {0x1132a, 0x11330},
|
||||
{0x11335, 0x11339}, {0x1133c, 0x11344}, {0x1134b, 0x1134d}, {0x1135d, 0x11363},
|
||||
{0x11366, 0x1136c}, {0x11370, 0x11374}, {0x11400, 0x11459}, {0x11480, 0x114c7},
|
||||
{0x114d0, 0x114d9}, {0x11580, 0x115b5}, {0x115b8, 0x115dd}, {0x11600, 0x11644},
|
||||
{0x11650, 0x11659}, {0x11660, 0x1166c}, {0x11680, 0x116b7}, {0x116c0, 0x116c9},
|
||||
{0x11700, 0x11719}, {0x1171d, 0x1172b}, {0x11730, 0x1173f}, {0x118a0, 0x118f2},
|
||||
{0x11ac0, 0x11af8}, {0x12000, 0x12399}, {0x12400, 0x1246e}, {0x12470, 0x12474},
|
||||
{0x12480, 0x12543}, {0x13000, 0x1342e}, {0x14400, 0x14646}, {0x16800, 0x16a38},
|
||||
{0x16a40, 0x16a5e}, {0x16a60, 0x16a69}, {0x16ad0, 0x16aed}, {0x16af0, 0x16af5},
|
||||
{0x16b00, 0x16b45}, {0x16b50, 0x16b59}, {0x16b5b, 0x16b61}, {0x16b63, 0x16b77},
|
||||
{0x16b7d, 0x16b8f}, {0x16f00, 0x16f44}, {0x16f50, 0x16f7e}, {0x16f8f, 0x16f9f},
|
||||
{0x1bc00, 0x1bc6a}, {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88}, {0x1bc90, 0x1bc99},
|
||||
{0x1bc9c, 0x1bc9f}, {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d129, 0x1d172},
|
||||
{0x1d17b, 0x1d1e8}, {0x1d200, 0x1d245}, {0x1d300, 0x1d356}, {0x1d360, 0x1d371},
|
||||
{0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b9},
|
||||
{0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514},
|
||||
{0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e}, {0x1d540, 0x1d544},
|
||||
{0x1d54a, 0x1d550}, {0x1d552, 0x1d6a5}, {0x1d6a8, 0x1d7cb}, {0x1d7ce, 0x1da8b},
|
||||
{0x1da9b, 0x1da9f}, {0x1daa1, 0x1daaf}, {0x1e800, 0x1e8c4}, {0x1e8c7, 0x1e8d6},
|
||||
{0x1ee00, 0x1ee03}, {0x1ee05, 0x1ee1f}, {0x1ee29, 0x1ee32}, {0x1ee34, 0x1ee37},
|
||||
{0x1ee4d, 0x1ee4f}, {0x1ee67, 0x1ee6a}, {0x1ee6c, 0x1ee72}, {0x1ee74, 0x1ee77},
|
||||
{0x1ee79, 0x1ee7c}, {0x1ee80, 0x1ee89}, {0x1ee8b, 0x1ee9b}, {0x1eea1, 0x1eea3},
|
||||
{0x1eea5, 0x1eea9}, {0x1eeab, 0x1eebb}, {0x1f000, 0x1f02b}, {0x1f030, 0x1f093},
|
||||
{0x1f0a0, 0x1f0ae}, {0x1f0b1, 0x1f0bf}, {0x1f0c1, 0x1f0cf}, {0x1f0d1, 0x1f0f5},
|
||||
{0x1f100, 0x1f10c}, {0x1f110, 0x1f12e}, {0x1f130, 0x1f16b}, {0x1f170, 0x1f19a},
|
||||
{0x1f1e6, 0x1f202}, {0x1f210, 0x1f23a}, {0x1f240, 0x1f248}, {0x1f300, 0x1f579},
|
||||
{0x1f57b, 0x1f5a3}, {0x1f5a5, 0x1f6d0}, {0x1f6e0, 0x1f6ec}, {0x1f6f0, 0x1f6f3},
|
||||
{0x1f700, 0x1f773}, {0x1f780, 0x1f7d4}, {0x1f800, 0x1f80b}, {0x1f810, 0x1f847},
|
||||
{0x1f850, 0x1f859}, {0x1f860, 0x1f887}, {0x1f890, 0x1f8ad}, {0x1f910, 0x1f918},
|
||||
{0x1f980, 0x1f984}, {0x20000, 0x2a6d6}, {0x2a700, 0x2b734}, {0x2b740, 0x2b81d},
|
||||
{0x2b820, 0x2cea1}, {0x2f800, 0x2fa1d}, {0xe0100, 0xe01ef}
|
||||
{0x11ac0, 0x11af8}, {0x11c00, 0x11c08}, {0x11c0a, 0x11c36}, {0x11c38, 0x11c45},
|
||||
{0x11c50, 0x11c6c}, {0x11c70, 0x11c8f}, {0x11c92, 0x11ca7}, {0x11ca9, 0x11cb6},
|
||||
{0x12000, 0x12399}, {0x12400, 0x1246e}, {0x12470, 0x12474}, {0x12480, 0x12543},
|
||||
{0x13000, 0x1342e}, {0x14400, 0x14646}, {0x16800, 0x16a38}, {0x16a40, 0x16a5e},
|
||||
{0x16a60, 0x16a69}, {0x16ad0, 0x16aed}, {0x16af0, 0x16af5}, {0x16b00, 0x16b45},
|
||||
{0x16b50, 0x16b59}, {0x16b5b, 0x16b61}, {0x16b63, 0x16b77}, {0x16b7d, 0x16b8f},
|
||||
{0x16f00, 0x16f44}, {0x16f50, 0x16f7e}, {0x16f8f, 0x16f9f}, {0x17000, 0x187ec},
|
||||
{0x18800, 0x18af2}, {0x1bc00, 0x1bc6a}, {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88},
|
||||
{0x1bc90, 0x1bc99}, {0x1bc9c, 0x1bc9f}, {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126},
|
||||
{0x1d129, 0x1d172}, {0x1d17b, 0x1d1e8}, {0x1d200, 0x1d245}, {0x1d300, 0x1d356},
|
||||
{0x1d360, 0x1d371}, {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d4a9, 0x1d4ac},
|
||||
{0x1d4ae, 0x1d4b9}, {0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a},
|
||||
{0x1d50d, 0x1d514}, {0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e},
|
||||
{0x1d540, 0x1d544}, {0x1d54a, 0x1d550}, {0x1d552, 0x1d6a5}, {0x1d6a8, 0x1d7cb},
|
||||
{0x1d7ce, 0x1da8b}, {0x1da9b, 0x1da9f}, {0x1daa1, 0x1daaf}, {0x1e000, 0x1e006},
|
||||
{0x1e008, 0x1e018}, {0x1e01b, 0x1e021}, {0x1e026, 0x1e02a}, {0x1e800, 0x1e8c4},
|
||||
{0x1e8c7, 0x1e8d6}, {0x1e900, 0x1e94a}, {0x1e950, 0x1e959}, {0x1ee00, 0x1ee03},
|
||||
{0x1ee05, 0x1ee1f}, {0x1ee29, 0x1ee32}, {0x1ee34, 0x1ee37}, {0x1ee4d, 0x1ee4f},
|
||||
{0x1ee67, 0x1ee6a}, {0x1ee6c, 0x1ee72}, {0x1ee74, 0x1ee77}, {0x1ee79, 0x1ee7c},
|
||||
{0x1ee80, 0x1ee89}, {0x1ee8b, 0x1ee9b}, {0x1eea1, 0x1eea3}, {0x1eea5, 0x1eea9},
|
||||
{0x1eeab, 0x1eebb}, {0x1f000, 0x1f02b}, {0x1f030, 0x1f093}, {0x1f0a0, 0x1f0ae},
|
||||
{0x1f0b1, 0x1f0bf}, {0x1f0c1, 0x1f0cf}, {0x1f0d1, 0x1f0f5}, {0x1f100, 0x1f10c},
|
||||
{0x1f110, 0x1f12e}, {0x1f130, 0x1f16b}, {0x1f170, 0x1f1ac}, {0x1f1e6, 0x1f202},
|
||||
{0x1f210, 0x1f23b}, {0x1f240, 0x1f248}, {0x1f300, 0x1f6d2}, {0x1f6e0, 0x1f6ec},
|
||||
{0x1f6f0, 0x1f6f6}, {0x1f700, 0x1f773}, {0x1f780, 0x1f7d4}, {0x1f800, 0x1f80b},
|
||||
{0x1f810, 0x1f847}, {0x1f850, 0x1f859}, {0x1f860, 0x1f887}, {0x1f890, 0x1f8ad},
|
||||
{0x1f910, 0x1f91e}, {0x1f920, 0x1f927}, {0x1f933, 0x1f93e}, {0x1f940, 0x1f94b},
|
||||
{0x1f950, 0x1f95e}, {0x1f980, 0x1f991}, {0x20000, 0x2a6d6}, {0x2a700, 0x2b734},
|
||||
{0x2b740, 0x2b81d}, {0x2b820, 0x2cea1}, {0x2f800, 0x2fa1d}, {0xe0100, 0xe01ef}
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -747,20 +758,20 @@ static const chr graphCharTable[] = {
|
||||
0xad0, 0xaf9, 0xb0f, 0xb10, 0xb32, 0xb33, 0xb47, 0xb48, 0xb56,
|
||||
0xb57, 0xb5c, 0xb5d, 0xb82, 0xb83, 0xb99, 0xb9a, 0xb9c, 0xb9e,
|
||||
0xb9f, 0xba3, 0xba4, 0xbd0, 0xbd7, 0xc55, 0xc56, 0xcd5, 0xcd6,
|
||||
0xcde, 0xcf1, 0xcf2, 0xd57, 0xd82, 0xd83, 0xdbd, 0xdca, 0xdd6,
|
||||
0xe81, 0xe82, 0xe84, 0xe87, 0xe88, 0xe8a, 0xe8d, 0xea5, 0xea7,
|
||||
0xeaa, 0xeab, 0xec6, 0x10c7, 0x10cd, 0x1258, 0x12c0, 0x1772, 0x1773,
|
||||
0x1940, 0x1cf8, 0x1cf9, 0x1f59, 0x1f5b, 0x1f5d, 0x2070, 0x2071, 0x2d27,
|
||||
0x2d2d, 0x2d6f, 0x2d70, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44, 0xfffc,
|
||||
0xfffd
|
||||
0xcde, 0xcf1, 0xcf2, 0xd82, 0xd83, 0xdbd, 0xdca, 0xdd6, 0xe81,
|
||||
0xe82, 0xe84, 0xe87, 0xe88, 0xe8a, 0xe8d, 0xea5, 0xea7, 0xeaa,
|
||||
0xeab, 0xec6, 0x10c7, 0x10cd, 0x1258, 0x12c0, 0x1772, 0x1773, 0x1940,
|
||||
0x1cf8, 0x1cf9, 0x1f59, 0x1f5b, 0x1f5d, 0x2070, 0x2071, 0x2d27, 0x2d2d,
|
||||
0x2d6f, 0x2d70, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44, 0xfffc, 0xfffd
|
||||
#if TCL_UTF_MAX > 4
|
||||
,0x1003c, 0x1003d, 0x101a0, 0x1056f, 0x10808, 0x10837, 0x10838, 0x1083c, 0x108f4,
|
||||
0x108f5, 0x1093f, 0x10a05, 0x10a06, 0x11288, 0x1130f, 0x11310, 0x11332, 0x11333,
|
||||
0x11347, 0x11348, 0x11350, 0x11357, 0x118ff, 0x16a6e, 0x16a6f, 0x1b000, 0x1b001,
|
||||
0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4bb, 0x1d546, 0x1ee21, 0x1ee22,
|
||||
0x1ee24, 0x1ee27, 0x1ee39, 0x1ee3b, 0x1ee42, 0x1ee47, 0x1ee49, 0x1ee4b, 0x1ee51,
|
||||
0x1ee52, 0x1ee54, 0x1ee57, 0x1ee59, 0x1ee5b, 0x1ee5d, 0x1ee5f, 0x1ee61, 0x1ee62,
|
||||
0x1ee64, 0x1ee7e, 0x1eef0, 0x1eef1, 0x1f250, 0x1f251, 0x1f9c0
|
||||
0x11347, 0x11348, 0x11350, 0x11357, 0x1145b, 0x1145d, 0x118ff, 0x16a6e, 0x16a6f,
|
||||
0x16fe0, 0x1b000, 0x1b001, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4bb,
|
||||
0x1d546, 0x1e023, 0x1e024, 0x1e95e, 0x1e95f, 0x1ee21, 0x1ee22, 0x1ee24, 0x1ee27,
|
||||
0x1ee39, 0x1ee3b, 0x1ee42, 0x1ee47, 0x1ee49, 0x1ee4b, 0x1ee51, 0x1ee52, 0x1ee54,
|
||||
0x1ee57, 0x1ee59, 0x1ee5b, 0x1ee5d, 0x1ee5f, 0x1ee61, 0x1ee62, 0x1ee64, 0x1ee7e,
|
||||
0x1eef0, 0x1eef1, 0x1f250, 0x1f251, 0x1f930, 0x1f9c0
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -144,6 +144,7 @@ extern "C" {
|
||||
#if defined(__GNUC__) && (__GNUC__ > 2)
|
||||
# define TCL_FORMAT_PRINTF(a,b) __attribute__ ((__format__ (__printf__, a, b)))
|
||||
# define TCL_NORETURN __attribute__ ((noreturn))
|
||||
# define TCL_NOINLINE __attribute__ ((noinline))
|
||||
# if defined(BUILD_tcl) || defined(BUILD_tk)
|
||||
# define TCL_NORETURN1 __attribute__ ((noreturn))
|
||||
# else
|
||||
@@ -153,8 +154,10 @@ extern "C" {
|
||||
# define TCL_FORMAT_PRINTF(a,b)
|
||||
# if defined(_MSC_VER) && (_MSC_VER >= 1310)
|
||||
# define TCL_NORETURN _declspec(noreturn)
|
||||
# define TCL_NOINLINE __declspec(noinline)
|
||||
# else
|
||||
# define TCL_NORETURN /* nothing */
|
||||
# define TCL_NOINLINE /* nothing */
|
||||
# endif
|
||||
# define TCL_NORETURN1 /* nothing */
|
||||
#endif
|
||||
|
||||
@@ -3982,10 +3982,12 @@ UnstackExpiredCatches(
|
||||
|
||||
while (catchDepth > bbPtr->catchDepth) {
|
||||
--catchDepth;
|
||||
range = envPtr->exceptArrayPtr + catchIndices[catchDepth];
|
||||
range->numCodeBytes = bbPtr->startOffset - range->codeOffset;
|
||||
catches[catchDepth] = NULL;
|
||||
catchIndices[catchDepth] = -1;
|
||||
if (catches[catchDepth] != NULL) {
|
||||
range = envPtr->exceptArrayPtr + catchIndices[catchDepth];
|
||||
range->numCodeBytes = bbPtr->startOffset - range->codeOffset;
|
||||
catches[catchDepth] = NULL;
|
||||
catchIndices[catchDepth] = -1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+2
-2
@@ -1203,7 +1203,7 @@ InfoFrameCmd(
|
||||
levelError:
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"bad level \"%s\"", TclGetString(objv[1])));
|
||||
Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "STACK_FRAME",
|
||||
Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "LEVEL",
|
||||
TclGetString(objv[1]), NULL);
|
||||
code = TCL_ERROR;
|
||||
goto done;
|
||||
@@ -1638,7 +1638,7 @@ InfoLevelCmd(
|
||||
levelError:
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"bad level \"%s\"", TclGetString(objv[1])));
|
||||
Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "STACK_LEVEL",
|
||||
Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "LEVEL",
|
||||
TclGetString(objv[1]), NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
@@ -993,7 +993,7 @@ FreeByteCodeInternalRep(
|
||||
|
||||
void
|
||||
TclPreserveByteCode(
|
||||
register ByteCode *codePtr)
|
||||
register ByteCode *codePtr)
|
||||
{
|
||||
codePtr->refCount++;
|
||||
}
|
||||
@@ -3276,8 +3276,10 @@ EnterCmdWordData(
|
||||
TclAdvanceLines(&wordLine, last, tokenPtr->start);
|
||||
TclAdvanceContinuations(&wordLine, &wordNext,
|
||||
tokenPtr->start - envPtr->source);
|
||||
/* See Ticket 4b61afd660 */
|
||||
wwlines[wordIdx] =
|
||||
(TclWordKnownAtCompileTime(tokenPtr, NULL) ? wordLine : -1);
|
||||
((wordIdx == 0) || TclWordKnownAtCompileTime(tokenPtr, NULL))
|
||||
? wordLine : -1;
|
||||
ePtr->line[wordIdx] = wordLine;
|
||||
ePtr->next[wordIdx] = wordNext;
|
||||
last = tokenPtr->start;
|
||||
|
||||
@@ -1504,6 +1504,37 @@ MODULE_SCOPE int TclPushProcCallFrame(ClientData clientData,
|
||||
(*((p)+2) << 8) | \
|
||||
(*((p)+3)))
|
||||
|
||||
/*
|
||||
* Override TclGetUInt4AtPtr or TclGetInt4AtPtr macros if
|
||||
* a known better version exists.
|
||||
*/
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
#define OVERRIDE_INT4(i) (i)
|
||||
#elif defined(__GNUC__) && (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3))
|
||||
#define OVERRIDE_INT4(i) __builtin_bswap32(i)
|
||||
#elif defined(_MSC_VER) && _MSC_VER>=1300
|
||||
#define OVERRIDE_INT4(i) _byteswap_ulong(i)
|
||||
#endif
|
||||
|
||||
#ifdef OVERRIDE_INT4
|
||||
#undef TclGetUInt4AtPtr
|
||||
static inline unsigned int
|
||||
TclGetUInt4AtPtr(const unsigned char *p)
|
||||
{
|
||||
uint32_t i;
|
||||
memcpy(&i,p,4);
|
||||
return OVERRIDE_INT4(i);
|
||||
}
|
||||
#undef TclGetInt4AtPtr
|
||||
static inline signed int
|
||||
TclGetInt4AtPtr(const unsigned char *p)
|
||||
{
|
||||
int32_t i;
|
||||
memcpy(&i,p,4);
|
||||
return OVERRIDE_INT4(i);
|
||||
}
|
||||
#endif /* OVERRIDE_INT4 */
|
||||
|
||||
/*
|
||||
* Macros used to compute the minimum and maximum of two integers. The ANSI C
|
||||
* "prototypes" for these macros are:
|
||||
|
||||
+1
-7
@@ -359,14 +359,8 @@ typedef short int yytype_int16;
|
||||
#ifndef YYSIZE_T
|
||||
# ifdef __SIZE_TYPE__
|
||||
# define YYSIZE_T __SIZE_TYPE__
|
||||
# elif defined size_t
|
||||
# define YYSIZE_T size_t
|
||||
# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
|
||||
|| defined __cplusplus || defined _MSC_VER)
|
||||
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
|
||||
# define YYSIZE_T size_t
|
||||
# else
|
||||
# define YYSIZE_T unsigned int
|
||||
# define YYSIZE_T size_t
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -355,6 +355,7 @@ DupEncodingIntRep(
|
||||
Tcl_Obj *dupPtr)
|
||||
{
|
||||
dupPtr->internalRep.twoPtrValue.ptr1 = Tcl_GetEncoding(NULL, srcPtr->bytes);
|
||||
dupPtr->typePtr = &encodingType;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1465,6 +1465,8 @@ VwaitVarProc(
|
||||
int *donePtr = clientData;
|
||||
|
||||
*donePtr = 1;
|
||||
Tcl_UntraceVar(interp, name1, TCL_TRACE_WRITES|TCL_TRACE_UNSETS,
|
||||
VwaitVarProc, clientData);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
+24
-12
@@ -3194,20 +3194,28 @@ TEBCresume(
|
||||
|
||||
case INST_LOAD_SCALAR1:
|
||||
instLoadScalar1:
|
||||
/*
|
||||
* micro-optimization by drh: eliminate a compare-and-jump on the
|
||||
* hottest path (no var link), at the cost of adding a few comparisons
|
||||
* in the less frequent cases (var links: upvar, global,
|
||||
* variable). We used to follow links first (causing a C&J in the
|
||||
* non-link case), now we check for direct-readability first
|
||||
*/
|
||||
|
||||
opnd = TclGetUInt1AtPtr(pc+1);
|
||||
varPtr = LOCAL(opnd);
|
||||
while (TclIsVarLink(varPtr)) {
|
||||
varPtr = varPtr->value.linkPtr;
|
||||
}
|
||||
TRACE(("%u => ", opnd));
|
||||
if (TclIsVarDirectReadable(varPtr)) {
|
||||
/*
|
||||
* No errors, no traces: just get the value.
|
||||
*/
|
||||
|
||||
objResultPtr = varPtr->value.objPtr;
|
||||
TRACE_APPEND(("%.30s\n", O2S(objResultPtr)));
|
||||
NEXT_INST_F(2, 0, 1);
|
||||
while (1) {
|
||||
if (TclIsVarDirectReadable(varPtr)) {
|
||||
TRACE(("%u => ", opnd));
|
||||
objResultPtr = varPtr->value.objPtr;
|
||||
TRACE_APPEND(("%.30s\n", O2S(objResultPtr)));
|
||||
NEXT_INST_F(2, 0, 1);
|
||||
}
|
||||
if (TclIsVarLink(varPtr)) {
|
||||
varPtr = varPtr->value.linkPtr;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
pcAdjustment = 2;
|
||||
cleanup = 0;
|
||||
@@ -7706,6 +7714,7 @@ TEBCresume(
|
||||
goto gotError;
|
||||
}
|
||||
}
|
||||
Tcl_IncrRefCount(dictPtr);
|
||||
if (TclListObjGetElements(interp, OBJ_AT_TOS, &length,
|
||||
&keyPtrPtr) != TCL_OK) {
|
||||
TRACE_ERROR(interp);
|
||||
@@ -7718,6 +7727,7 @@ TEBCresume(
|
||||
if (Tcl_DictObjGet(interp, dictPtr, keyPtrPtr[i],
|
||||
&valuePtr) != TCL_OK) {
|
||||
TRACE_ERROR(interp);
|
||||
Tcl_DecrRefCount(dictPtr);
|
||||
goto gotError;
|
||||
}
|
||||
varPtr = LOCAL(duiPtr->varIndices[i]);
|
||||
@@ -7734,10 +7744,12 @@ TEBCresume(
|
||||
duiPtr->varIndices[i]) == NULL) {
|
||||
CACHE_STACK_INFO();
|
||||
TRACE_ERROR(interp);
|
||||
Tcl_DecrRefCount(dictPtr);
|
||||
goto gotError;
|
||||
}
|
||||
CACHE_STACK_INFO();
|
||||
}
|
||||
TclDecrRefCount(dictPtr);
|
||||
TRACE_APPEND(("OK\n"));
|
||||
NEXT_INST_F(9, 0, 0);
|
||||
|
||||
|
||||
@@ -1595,8 +1595,9 @@ Tcl_GlobObjCmd(
|
||||
} else if (dir == PATH_GENERAL) {
|
||||
Tcl_DString str;
|
||||
|
||||
Tcl_DStringInit(&str);
|
||||
for (i = 0; i < objc; i++) {
|
||||
Tcl_DStringInit(&str);
|
||||
Tcl_DStringSetLength(&str, 0);
|
||||
if (dir == PATH_GENERAL) {
|
||||
TclDStringAppendDString(&str, &prefix);
|
||||
}
|
||||
|
||||
+9
-2
@@ -48,7 +48,8 @@
|
||||
#else
|
||||
#include <string.h>
|
||||
#endif
|
||||
#ifdef STDC_HEADERS
|
||||
#if defined(STDC_HEADERS) || defined(__STDC__) || defined(__C99__FUNC__) \
|
||||
|| defined(__cplusplus) || defined(_MSC_VER)
|
||||
#include <stddef.h>
|
||||
#else
|
||||
typedef int ptrdiff_t;
|
||||
@@ -4641,7 +4642,13 @@ MODULE_SCOPE Tcl_PackageInitProc Procbodytest_SafeInit;
|
||||
# ifdef NO_ISNAN
|
||||
# define TclIsNaN(d) ((d) != (d))
|
||||
# else
|
||||
# define TclIsNaN(d) (isnan(d))
|
||||
/*
|
||||
* This is called a lot for double-using code and isnan() is a noticable
|
||||
* slowdown, so we stay with the comparison operation here. It should only
|
||||
* make a difference for signalling NaN and those should not happen anyway.
|
||||
*/
|
||||
# define TclIsNaN(d) ((d) != (d))
|
||||
/*# define TclIsNaN(d) (isnan(d))*/
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
+64
-22
@@ -1105,8 +1105,6 @@ TclTeardownNamespace(
|
||||
Interp *iPtr = (Interp *) nsPtr->interp;
|
||||
register Tcl_HashEntry *entryPtr;
|
||||
Tcl_HashSearch search;
|
||||
Tcl_Namespace *childNsPtr;
|
||||
Tcl_Command cmd;
|
||||
int i;
|
||||
|
||||
/*
|
||||
@@ -1121,16 +1119,31 @@ TclTeardownNamespace(
|
||||
/*
|
||||
* Delete all commands in this namespace. Be careful when traversing the
|
||||
* hash table: when each command is deleted, it removes itself from the
|
||||
* command table.
|
||||
*
|
||||
* Don't optimize to Tcl_NextHashEntry() because of traces.
|
||||
* command table. Because of traces (and the desire to avoid the quadratic
|
||||
* problems of just using Tcl_FirstHashEntry over and over, [Bug
|
||||
* f97d4ee020]) we copy to a temporary array and then delete all those
|
||||
* commands.
|
||||
*/
|
||||
|
||||
for (entryPtr = Tcl_FirstHashEntry(&nsPtr->cmdTable, &search);
|
||||
entryPtr != NULL;
|
||||
entryPtr = Tcl_FirstHashEntry(&nsPtr->cmdTable, &search)) {
|
||||
cmd = Tcl_GetHashValue(entryPtr);
|
||||
Tcl_DeleteCommandFromToken((Tcl_Interp *) iPtr, cmd);
|
||||
while (nsPtr->cmdTable.numEntries > 0) {
|
||||
int length = nsPtr->cmdTable.numEntries;
|
||||
Command **cmds = TclStackAlloc((Tcl_Interp *) iPtr,
|
||||
sizeof(Command *) * length);
|
||||
|
||||
i = 0;
|
||||
for (entryPtr = Tcl_FirstHashEntry(&nsPtr->cmdTable, &search);
|
||||
entryPtr != NULL;
|
||||
entryPtr = Tcl_NextHashEntry(&search)) {
|
||||
cmds[i] = Tcl_GetHashValue(entryPtr);
|
||||
cmds[i]->refCount++;
|
||||
i++;
|
||||
}
|
||||
for (i = 0 ; i < length ; i++) {
|
||||
Tcl_DeleteCommandFromToken((Tcl_Interp *) iPtr,
|
||||
(Tcl_Command) cmds[i]);
|
||||
TclCleanupCommandMacro(cmds[i]);
|
||||
}
|
||||
TclStackFree((Tcl_Interp *) iPtr, cmds);
|
||||
}
|
||||
Tcl_DeleteHashTable(&nsPtr->cmdTable);
|
||||
Tcl_InitHashTable(&nsPtr->cmdTable, TCL_STRING_KEYS);
|
||||
@@ -1175,25 +1188,54 @@ TclTeardownNamespace(
|
||||
*
|
||||
* BE CAREFUL: When each child is deleted, it will divorce itself from its
|
||||
* parent. You can't traverse a hash table properly if its elements are
|
||||
* being deleted. We use only the Tcl_FirstHashEntry function to be safe.
|
||||
* being deleted. Because of traces (and the desire to avoid the
|
||||
* quadratic problems of just using Tcl_FirstHashEntry over and over, [Bug
|
||||
* f97d4ee020]) we copy to a temporary array and then delete all those
|
||||
* namespaces.
|
||||
*
|
||||
* Don't optimize to Tcl_NextHashEntry() because of traces.
|
||||
* Important: leave the hash table itself still live.
|
||||
*/
|
||||
|
||||
#ifndef BREAK_NAMESPACE_COMPAT
|
||||
for (entryPtr = Tcl_FirstHashEntry(&nsPtr->childTable, &search);
|
||||
entryPtr != NULL;
|
||||
entryPtr = Tcl_FirstHashEntry(&nsPtr->childTable, &search)) {
|
||||
childNsPtr = Tcl_GetHashValue(entryPtr);
|
||||
Tcl_DeleteNamespace(childNsPtr);
|
||||
while (nsPtr->childTable.numEntries > 0) {
|
||||
int length = nsPtr->childTable.numEntries;
|
||||
Namespace **children = TclStackAlloc((Tcl_Interp *) iPtr,
|
||||
sizeof(Namespace *) * length);
|
||||
|
||||
i = 0;
|
||||
for (entryPtr = Tcl_FirstHashEntry(&nsPtr->childTable, &search);
|
||||
entryPtr != NULL;
|
||||
entryPtr = Tcl_NextHashEntry(&search)) {
|
||||
children[i] = Tcl_GetHashValue(entryPtr);
|
||||
children[i]->refCount++;
|
||||
i++;
|
||||
}
|
||||
for (i = 0 ; i < length ; i++) {
|
||||
Tcl_DeleteNamespace((Tcl_Namespace *) children[i]);
|
||||
TclNsDecrRefCount(children[i]);
|
||||
}
|
||||
TclStackFree((Tcl_Interp *) iPtr, children);
|
||||
}
|
||||
#else
|
||||
if (nsPtr->childTablePtr != NULL) {
|
||||
for (entryPtr = Tcl_FirstHashEntry(nsPtr->childTablePtr, &search);
|
||||
entryPtr != NULL;
|
||||
entryPtr = Tcl_FirstHashEntry(nsPtr->childTablePtr,&search)) {
|
||||
childNsPtr = Tcl_GetHashValue(entryPtr);
|
||||
Tcl_DeleteNamespace(childNsPtr);
|
||||
while (nsPtr->childTablePtr->numEntries > 0) {
|
||||
int length = nsPtr->childTablePtr->numEntries;
|
||||
Namespace **children = TclStackAlloc((Tcl_Interp *) iPtr,
|
||||
sizeof(Namespace *) * length);
|
||||
|
||||
i = 0;
|
||||
for (entryPtr = Tcl_FirstHashEntry(nsPtr->childTablePtr, &search);
|
||||
entryPtr != NULL;
|
||||
entryPtr = Tcl_NextHashEntry(&search)) {
|
||||
children[i] = Tcl_GetHashValue(entryPtr);
|
||||
children[i]->refCount++;
|
||||
i++;
|
||||
}
|
||||
for (i = 0 ; i < length ; i++) {
|
||||
Tcl_DeleteNamespace((Tcl_Namespace *) children[i]);
|
||||
TclNsDecrRefCount(children[i]);
|
||||
}
|
||||
TclStackFree((Tcl_Interp *) iPtr, children);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
+37
-6
@@ -726,6 +726,14 @@ AddSimpleChainToCallContext(
|
||||
* ----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static TCL_NOINLINE void
|
||||
AddMethodToCallChainCore(
|
||||
Method *const mPtr,
|
||||
struct ChainBuilder *const cbPtr,
|
||||
Tcl_HashTable *const doneFilters,
|
||||
Class *const filterDecl,
|
||||
int flags);
|
||||
|
||||
static inline void
|
||||
AddMethodToCallChain(
|
||||
Method *const mPtr, /* Actual method implementation to add to call
|
||||
@@ -748,20 +756,43 @@ AddMethodToCallChain(
|
||||
* looking to add things from a mixin and have
|
||||
* not passed a mixin. */
|
||||
{
|
||||
register CallChain *callPtr = cbPtr->callChainPtr;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Return if this is just an entry used to record whether this is a public
|
||||
* Check if this is just an entry used to record whether this is a public
|
||||
* method. If so, there's nothing real to call and so nothing to add to
|
||||
* the call chain.
|
||||
*
|
||||
* This is also where we enforce mixin-consistency.
|
||||
*/
|
||||
|
||||
if (mPtr == NULL || mPtr->typePtr == NULL || !MIXIN_CONSISTENT(flags)) {
|
||||
return;
|
||||
if (mPtr && mPtr->typePtr && MIXIN_CONSISTENT(flags)) {
|
||||
AddMethodToCallChainCore(mPtr, cbPtr, doneFilters, filterDecl, flags);
|
||||
}
|
||||
}
|
||||
|
||||
static TCL_NOINLINE void
|
||||
AddMethodToCallChainCore(
|
||||
Method *const mPtr, /* Actual method implementation to add to call
|
||||
* chain (or NULL, a no-op). */
|
||||
struct ChainBuilder *const cbPtr,
|
||||
/* The call chain to add the method
|
||||
* implementation to. */
|
||||
Tcl_HashTable *const doneFilters,
|
||||
/* Where to record what filters have been
|
||||
* processed. If NULL, not processing filters.
|
||||
* Note that this function does not update
|
||||
* this hashtable. */
|
||||
Class *const filterDecl, /* The class that declared the filter. If
|
||||
* NULL, either the filter was declared by the
|
||||
* object or this isn't a filter. */
|
||||
int flags) /* Used to check if we're mixin-consistent
|
||||
* only. Mixin-consistent means that either
|
||||
* we're looking to add things from a mixin
|
||||
* and we have passed a mixin, or we're not
|
||||
* looking to add things from a mixin and have
|
||||
* not passed a mixin. */
|
||||
{
|
||||
register CallChain *callPtr = cbPtr->callChainPtr;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Enforce real private method handling here. We will skip adding this
|
||||
|
||||
+1
-1
@@ -870,7 +870,7 @@ TclObjGetFrame(
|
||||
}
|
||||
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf("bad level \"%s\"", name));
|
||||
Tcl_SetErrorCode(interp, "TCL", "VALUE", "STACKLEVEL", NULL);
|
||||
Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "LEVEL", name, NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
+934
-883
File diff suppressed because it is too large
Load Diff
@@ -2634,7 +2634,19 @@ Tcl_DStringAppend(
|
||||
memcpy(newString, dsPtr->string, (size_t) dsPtr->length);
|
||||
dsPtr->string = newString;
|
||||
} else {
|
||||
int offset = -1;
|
||||
|
||||
/* See [16896d49fd] */
|
||||
if (bytes >= dsPtr->string
|
||||
&& bytes <= dsPtr->string + dsPtr->length) {
|
||||
offset = bytes - dsPtr->string;
|
||||
}
|
||||
|
||||
dsPtr->string = ckrealloc(dsPtr->string, dsPtr->spaceAvl);
|
||||
|
||||
if (offset >= 0) {
|
||||
bytes = dsPtr->string + offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2725,7 +2737,19 @@ Tcl_DStringAppendElement(
|
||||
memcpy(newString, dsPtr->string, (size_t) dsPtr->length);
|
||||
dsPtr->string = newString;
|
||||
} else {
|
||||
int offset = -1;
|
||||
|
||||
/* See [16896d49fd] */
|
||||
if (element >= dsPtr->string
|
||||
&& element <= dsPtr->string + dsPtr->length) {
|
||||
offset = element - dsPtr->string;
|
||||
}
|
||||
|
||||
dsPtr->string = ckrealloc(dsPtr->string, dsPtr->spaceAvl);
|
||||
|
||||
if (offset >= 0) {
|
||||
element = dsPtr->string + offset;
|
||||
}
|
||||
}
|
||||
dst = dsPtr->string + dsPtr->length;
|
||||
}
|
||||
|
||||
+2
-1
@@ -4921,7 +4921,8 @@ Tcl_UpvarObjCmd(
|
||||
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"bad level \"%s\"", TclGetString(levelObj)));
|
||||
Tcl_SetErrorCode(interp, "TCL", "VALUE", "LEVEL", NULL);
|
||||
Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "LEVEL",
|
||||
TclGetString(levelObj), NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
|
||||
+172
-76
@@ -647,7 +647,7 @@ proc ::tcl::clock::Initialize {} {
|
||||
# that renders the given format
|
||||
}
|
||||
::tcl::clock::Initialize
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
#
|
||||
# clock format --
|
||||
@@ -696,7 +696,7 @@ proc ::tcl::clock::format { args } {
|
||||
return [$procName $clockval $timezone]
|
||||
|
||||
}
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
#
|
||||
# ParseClockFormatFormat --
|
||||
@@ -735,7 +735,7 @@ proc ::tcl::clock::ParseClockFormatFormat {procName format locale} {
|
||||
proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
set didLocaleEra 0
|
||||
set didLocaleNumerals 0
|
||||
set preFormatCode \
|
||||
set prefixCode \
|
||||
[string map [list @GREGORIAN_CHANGE_DATE@ \
|
||||
[mc GREGORIAN_CHANGE_DATE]] \
|
||||
{
|
||||
@@ -744,9 +744,11 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
$TZData($timezone) \
|
||||
@GREGORIAN_CHANGE_DATE@]
|
||||
}]
|
||||
set preFormatCode {}
|
||||
set formatString {}
|
||||
set substituents {}
|
||||
set state {}
|
||||
set fields {}
|
||||
|
||||
set format [LocalizeFormat $locale $format]
|
||||
|
||||
@@ -772,8 +774,10 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
[list @DAYS_OF_WEEK_ABBREV@ \
|
||||
[list [mc DAYS_OF_WEEK_ABBREV]]] \
|
||||
{ [lindex @DAYS_OF_WEEK_ABBREV@ \
|
||||
[expr {[dict get $date dayOfWeek] \
|
||||
% 7}]]}]
|
||||
[expr {$dayOfWeek % 7}]]}]
|
||||
dict set fields dayOfWeek {
|
||||
set dayOfWeek [dict get $date dayOfWeek]
|
||||
}
|
||||
}
|
||||
A { # Day of week, spelt out.
|
||||
append formatString %s
|
||||
@@ -782,8 +786,10 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
[list @DAYS_OF_WEEK_FULL@ \
|
||||
[list [mc DAYS_OF_WEEK_FULL]]] \
|
||||
{ [lindex @DAYS_OF_WEEK_FULL@ \
|
||||
[expr {[dict get $date dayOfWeek] \
|
||||
% 7}]]}]
|
||||
[expr {$dayOfWeek % 7}]]}]
|
||||
dict set fields dayOfWeek {
|
||||
set dayOfWeek [dict get $date dayOfWeek]
|
||||
}
|
||||
}
|
||||
b - h { # Name of month, abbreviated.
|
||||
append formatString %s
|
||||
@@ -792,7 +798,10 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
[list @MONTHS_ABBREV@ \
|
||||
[list [mc MONTHS_ABBREV]]] \
|
||||
{ [lindex @MONTHS_ABBREV@ \
|
||||
[expr {[dict get $date month]-1}]]}]
|
||||
[expr {$month-1}]]}]
|
||||
dict set fields month {
|
||||
set month [dict get $date month]
|
||||
}
|
||||
}
|
||||
B { # Name of month, spelt out
|
||||
append formatString %s
|
||||
@@ -801,20 +810,31 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
[list @MONTHS_FULL@ \
|
||||
[list [mc MONTHS_FULL]]] \
|
||||
{ [lindex @MONTHS_FULL@ \
|
||||
[expr {[dict get $date month]-1}]]}]
|
||||
[expr {$month-1}]]}]
|
||||
dict set fields month {
|
||||
set month [dict get $date month]
|
||||
}
|
||||
}
|
||||
C { # Century number
|
||||
append formatString %02d
|
||||
append substituents \
|
||||
{ [expr {[dict get $date year] / 100}]}
|
||||
append substituents { [expr {$year / 100}]}
|
||||
dict set fields year {
|
||||
set year [dict get $date year]
|
||||
}
|
||||
}
|
||||
d { # Day of month, with leading zero
|
||||
append formatString %02d
|
||||
append substituents { [dict get $date dayOfMonth]}
|
||||
append substituents { $dayOfMonth}
|
||||
dict set fields dayOfMonth {
|
||||
set dayOfMonth [dict get $date dayOfMonth]
|
||||
}
|
||||
}
|
||||
e { # Day of month, without leading zero
|
||||
append formatString %2d
|
||||
append substituents { [dict get $date dayOfMonth]}
|
||||
append substituents { $dayOfMonth}
|
||||
dict set fields dayOfMonth {
|
||||
set dayOfMonth [dict get $date dayOfMonth]
|
||||
}
|
||||
}
|
||||
E { # Format group in a locale-dependent
|
||||
# alternative era
|
||||
@@ -840,33 +860,45 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
g { # Two-digit year relative to ISO8601
|
||||
# week number
|
||||
append formatString %02d
|
||||
append substituents \
|
||||
{ [expr { [dict get $date iso8601Year] % 100 }]}
|
||||
append substituents { [expr { $iso8601Year % 100 }]}
|
||||
dict set fields iso8601Year {
|
||||
set iso8601Year [dict get $date iso8601Year]
|
||||
}
|
||||
}
|
||||
G { # Four-digit year relative to ISO8601
|
||||
# week number
|
||||
append formatString %02d
|
||||
append substituents { [dict get $date iso8601Year]}
|
||||
append substituents { $iso8601Year}
|
||||
dict set fields iso8601Year {
|
||||
set iso8601Year [dict get $date iso8601Year]
|
||||
}
|
||||
}
|
||||
H { # Hour in the 24-hour day, leading zero
|
||||
append formatString %02d
|
||||
append substituents \
|
||||
{ [expr { [dict get $date localSeconds] \
|
||||
/ 3600 % 24}]}
|
||||
{ [expr { $localSeconds / 3600 % 24}]}
|
||||
dict set fields localSeconds {
|
||||
set localSeconds [dict get $date localSeconds]
|
||||
}
|
||||
}
|
||||
I { # Hour AM/PM, with leading zero
|
||||
append formatString %02d
|
||||
append substituents \
|
||||
{ [expr { ( ( ( [dict get $date localSeconds] \
|
||||
% 86400 ) \
|
||||
{ [expr { ( ( ($localSeconds % 86400) \
|
||||
+ 86400 \
|
||||
- 3600 ) \
|
||||
/ 3600 ) \
|
||||
% 12 + 1 }] }
|
||||
dict set fields localSeconds {
|
||||
set localSeconds [dict get $date localSeconds]
|
||||
}
|
||||
}
|
||||
j { # Day of year (001-366)
|
||||
append formatString %03d
|
||||
append substituents { [dict get $date dayOfYear]}
|
||||
append substituents { $dayOfYear}
|
||||
dict set fields dayOfYear {
|
||||
set dayOfYear [dict get $date dayOfYear]
|
||||
}
|
||||
}
|
||||
J { # Julian Day Number
|
||||
append formatString %07ld
|
||||
@@ -875,37 +907,47 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
k { # Hour (0-23), no leading zero
|
||||
append formatString %2d
|
||||
append substituents \
|
||||
{ [expr { [dict get $date localSeconds]
|
||||
/ 3600
|
||||
% 24 }]}
|
||||
{ [expr { $localSeconds / 3600 % 24 }]}
|
||||
dict set fields localSeconds {
|
||||
set localSeconds [dict get $date localSeconds]
|
||||
}
|
||||
}
|
||||
l { # Hour (12-11), no leading zero
|
||||
append formatString %2d
|
||||
append substituents \
|
||||
{ [expr { ( ( ( [dict get $date localSeconds]
|
||||
% 86400 )
|
||||
{ [expr { ( ( ( $localSeconds % 86400 )
|
||||
+ 86400
|
||||
- 3600 )
|
||||
/ 3600 )
|
||||
% 12 + 1 }]}
|
||||
dict set fields localSeconds {
|
||||
set localSeconds [dict get $date localSeconds]
|
||||
}
|
||||
}
|
||||
m { # Month number, leading zero
|
||||
append formatString %02d
|
||||
append substituents { [dict get $date month]}
|
||||
append substituents { $month}
|
||||
dict set fields month {
|
||||
set month [dict get $date month]
|
||||
}
|
||||
}
|
||||
M { # Minute of the hour, leading zero
|
||||
append formatString %02d
|
||||
append substituents \
|
||||
{ [expr { [dict get $date localSeconds]
|
||||
/ 60
|
||||
% 60 }]}
|
||||
{ [expr { $localSeconds / 60 % 60 }]}
|
||||
dict set fields localSeconds {
|
||||
set localSeconds [dict get $date localSeconds]
|
||||
}
|
||||
}
|
||||
n { # A literal newline
|
||||
append formatString \n
|
||||
}
|
||||
N { # Month number, no leading zero
|
||||
append formatString %2d
|
||||
append substituents { [dict get $date month]}
|
||||
append substituents { $month}
|
||||
dict set fields month {
|
||||
set month [dict get $date month]
|
||||
}
|
||||
}
|
||||
O { # A format group in the locale's
|
||||
# alternative numerals
|
||||
@@ -924,9 +966,11 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
[list set AM [string toupper [mc AM]]] \n \
|
||||
[list set PM [string toupper [mc PM]]] \n
|
||||
append substituents \
|
||||
{ [expr {(([dict get $date localSeconds]
|
||||
% 86400) < 43200) ?
|
||||
{ [expr {(($localSeconds % 86400) < 43200) ?
|
||||
$AM : $PM}]}
|
||||
dict set fields localSeconds {
|
||||
set localSeconds [dict get $date localSeconds]
|
||||
}
|
||||
}
|
||||
P { # Localized 'AM' or 'PM' indicator
|
||||
append formatString %s
|
||||
@@ -934,10 +978,11 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
[list set am [mc AM]] \n \
|
||||
[list set pm [mc PM]] \n
|
||||
append substituents \
|
||||
{ [expr {(([dict get $date localSeconds]
|
||||
% 86400) < 43200) ?
|
||||
{ [expr {(($localSeconds % 86400) < 43200) ?
|
||||
$am : $pm}]}
|
||||
|
||||
dict set fields localSeconds {
|
||||
set localSeconds [dict get $date localSeconds]
|
||||
}
|
||||
}
|
||||
Q { # Hi, Jeff!
|
||||
append formatString %s
|
||||
@@ -945,70 +990,95 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
}
|
||||
s { # Seconds from the Posix Epoch
|
||||
append formatString %s
|
||||
append substituents { [dict get $date seconds]}
|
||||
append substituents { $seconds}
|
||||
dict set fields seconds {
|
||||
set seconds [dict get $date seconds]
|
||||
}
|
||||
}
|
||||
S { # Second of the minute, with
|
||||
# leading zero
|
||||
append formatString %02d
|
||||
append substituents \
|
||||
{ [expr { [dict get $date localSeconds]
|
||||
% 60 }]}
|
||||
append substituents { [expr { $localSeconds % 60 }]}
|
||||
dict set fields localSeconds {
|
||||
set localSeconds [dict get $date localSeconds]
|
||||
}
|
||||
}
|
||||
t { # A literal tab character
|
||||
append formatString \t
|
||||
}
|
||||
u { # Day of the week (1-Monday, 7-Sunday)
|
||||
append formatString %1d
|
||||
append substituents { [dict get $date dayOfWeek]}
|
||||
append substituents { $dayOfWeek }
|
||||
dict set fields dayOfWeek {
|
||||
set dayOfWeek [dict get $date dayOfWeek]
|
||||
}
|
||||
}
|
||||
U { # Week of the year (00-53). The
|
||||
# first Sunday of the year is the
|
||||
# first day of week 01
|
||||
append formatString %02d
|
||||
append preFormatCode {
|
||||
set dow [dict get $date dayOfWeek]
|
||||
set dow $dayOfWeek
|
||||
if { $dow == 7 } {
|
||||
set dow 0
|
||||
}
|
||||
incr dow
|
||||
set UweekNumber \
|
||||
[expr { ( [dict get $date dayOfYear]
|
||||
- $dow + 7 )
|
||||
/ 7 }]
|
||||
[expr { ( $dayOfYear - $dow + 7 ) / 7 }]
|
||||
}
|
||||
append substituents { $UweekNumber}
|
||||
dict set fields dayOfYear {
|
||||
set dayOfYear [dict get $date dayOfYear]
|
||||
}
|
||||
dict set fields dayOfWeek {
|
||||
set dayOfWeek [dict get $date dayOfWeek]
|
||||
}
|
||||
}
|
||||
V { # The ISO8601 week number
|
||||
append formatString %02d
|
||||
append substituents { [dict get $date iso8601Week]}
|
||||
append substituents { $iso8601Week}
|
||||
dict set fields iso8601Week {
|
||||
set iso8601Week [dict get $date iso8601Week]
|
||||
}
|
||||
}
|
||||
w { # Day of the week (0-Sunday,
|
||||
# 6-Saturday)
|
||||
append formatString %1d
|
||||
append substituents \
|
||||
{ [expr { [dict get $date dayOfWeek] % 7 }]}
|
||||
{ [expr { $dayOfWeek % 7 }]}
|
||||
dict set fields dayOfWeek {
|
||||
set dayOfWeek [dict get $date dayOfWeek]
|
||||
}
|
||||
}
|
||||
W { # Week of the year (00-53). The first
|
||||
# Monday of the year is the first day
|
||||
# of week 01.
|
||||
append preFormatCode {
|
||||
set WweekNumber \
|
||||
[expr { ( [dict get $date dayOfYear]
|
||||
- [dict get $date dayOfWeek]
|
||||
+ 7 )
|
||||
/ 7 }]
|
||||
[expr { ($dayOfYear - $dayOfWeek + 7) / 7 }]
|
||||
}
|
||||
append formatString %02d
|
||||
append substituents { $WweekNumber}
|
||||
dict set fields dayOfWeek {
|
||||
set dayOfWeek [dict get $date dayOfWeek]
|
||||
}
|
||||
dict set fields dayOfMonth {
|
||||
set dayOfMonth [dict get $date dayOfMonth]
|
||||
}
|
||||
}
|
||||
y { # The two-digit year of the century
|
||||
append formatString %02d
|
||||
append substituents \
|
||||
{ [expr { [dict get $date year] % 100 }]}
|
||||
append substituents { [expr { $year % 100 }]}
|
||||
dict set fields year {
|
||||
set year [dict get $date year]
|
||||
}
|
||||
}
|
||||
Y { # The four-digit year
|
||||
append formatString %04d
|
||||
append substituents { [dict get $date year]}
|
||||
append substituents { $year}
|
||||
dict set fields year {
|
||||
set year [dict get $date year]
|
||||
}
|
||||
}
|
||||
z { # The time zone as hours and minutes
|
||||
# east (+) or west (-) of Greenwich
|
||||
@@ -1018,7 +1088,10 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
}
|
||||
Z { # The name of the time zone
|
||||
append formatString %s
|
||||
append substituents { [dict get $date tzName]}
|
||||
append substituents { $tzName}
|
||||
dict set fields tzName {
|
||||
set tzName [dict get $date tzName]
|
||||
}
|
||||
}
|
||||
% { # A literal percent character
|
||||
append formatString %%
|
||||
@@ -1068,72 +1141,91 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
# numerals
|
||||
append formatString %s
|
||||
append substituents \
|
||||
{ [lindex $localeNumerals \
|
||||
[dict get $date dayOfMonth]]}
|
||||
{ [lindex $localeNumerals $dayOfMonth]}
|
||||
dict set fields dayOfMonth {
|
||||
set dayOfMonth [dict get $date dayOfMonth]
|
||||
}
|
||||
}
|
||||
H - k { # Hour of the day in alternative
|
||||
# numerals
|
||||
append formatString %s
|
||||
append substituents \
|
||||
{ [lindex $localeNumerals \
|
||||
[expr { [dict get $date localSeconds]
|
||||
/ 3600
|
||||
% 24 }]]}
|
||||
[expr { $localSeconds / 3600 % 24 }]]}
|
||||
dict set fields localSeconds {
|
||||
set localSeconds [dict get $date localSeconds]
|
||||
}
|
||||
}
|
||||
I - l { # Hour (12-11) AM/PM in alternative
|
||||
# numerals
|
||||
append formatString %s
|
||||
append substituents \
|
||||
{ [lindex $localeNumerals \
|
||||
[expr { ( ( ( [dict get $date localSeconds]
|
||||
% 86400 )
|
||||
[expr { ( ( ( $localSeconds % 86400 )
|
||||
+ 86400
|
||||
- 3600 )
|
||||
/ 3600 )
|
||||
% 12 + 1 }]]}
|
||||
dict set fields localSeconds {
|
||||
set localSeconds [dict get $date localSeconds]
|
||||
}
|
||||
}
|
||||
m { # Month number in alternative numerals
|
||||
append formatString %s
|
||||
append substituents \
|
||||
{ [lindex $localeNumerals [dict get $date month]]}
|
||||
{ [lindex $localeNumerals $month]}
|
||||
dict set fields month {
|
||||
set month [dict get $date month]
|
||||
}
|
||||
}
|
||||
M { # Minute of the hour in alternative
|
||||
# numerals
|
||||
append formatString %s
|
||||
append substituents \
|
||||
{ [lindex $localeNumerals \
|
||||
[expr { [dict get $date localSeconds]
|
||||
/ 60
|
||||
% 60 }]]}
|
||||
[expr { $localSeconds / 60 % 60 }]]}
|
||||
dict set fields localSeconds {
|
||||
set localSeconds [dict get $date localSeconds]
|
||||
}
|
||||
}
|
||||
S { # Second of the minute in alternative
|
||||
# numerals
|
||||
append formatString %s
|
||||
append substituents \
|
||||
{ [lindex $localeNumerals \
|
||||
[expr { [dict get $date localSeconds]
|
||||
% 60 }]]}
|
||||
[expr { $localSeconds % 60 }]]}
|
||||
dict set fields localSeconds {
|
||||
set localSeconds [dict get $date localSeconds]
|
||||
}
|
||||
}
|
||||
u { # Day of the week (Monday=1,Sunday=7)
|
||||
# in alternative numerals
|
||||
append formatString %s
|
||||
append substituents \
|
||||
{ [lindex $localeNumerals \
|
||||
[dict get $date dayOfWeek]]}
|
||||
{ [lindex $localeNumerals $dayOfWeek]}
|
||||
dict set fields dayOfWeek {
|
||||
set dayOfWeek [dict get $date dayOfWeek]
|
||||
}
|
||||
}
|
||||
w { # Day of the week (Sunday=0,Saturday=6)
|
||||
# in alternative numerals
|
||||
append formatString %s
|
||||
append substituents \
|
||||
{ [lindex $localeNumerals \
|
||||
[expr { [dict get $date dayOfWeek] % 7 }]]}
|
||||
[expr { $dayOfWeek % 7 }]]}
|
||||
dict set fields dayOfWeek {
|
||||
set dayOfWeek [dict get $date dayOfWeek]
|
||||
}
|
||||
}
|
||||
y { # Year of the century in alternative
|
||||
# numerals
|
||||
append formatString %s
|
||||
append substituents \
|
||||
{ [lindex $localeNumerals \
|
||||
[expr { [dict get $date year] % 100 }]]}
|
||||
[expr { $year % 100 }]]}
|
||||
dict set fields year {
|
||||
set year [dict get $date year]
|
||||
}
|
||||
}
|
||||
default { # Unknown format group
|
||||
append formatString %%O $char
|
||||
@@ -1157,7 +1249,11 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
}
|
||||
}
|
||||
|
||||
set extractCode [join [dict values $fields] ";"]
|
||||
|
||||
proc $procName {clockval timezone} "
|
||||
$prefixCode
|
||||
$extractCode
|
||||
$preFormatCode
|
||||
return \[::format [list $formatString] $substituents\]
|
||||
"
|
||||
@@ -1166,7 +1262,7 @@ proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
|
||||
|
||||
return $procName
|
||||
}
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
#
|
||||
# clock scan --
|
||||
@@ -1931,7 +2027,7 @@ proc ::tcl::clock::ParseClockScanFormat {formatString locale} {
|
||||
# Build the procedure
|
||||
|
||||
set procBody {}
|
||||
append procBody "variable ::tcl::clock::TZData" \n
|
||||
append procBody "variable TZData" \n
|
||||
append procBody "if \{ !\[ regexp -nocase [list $re] \$string ->"
|
||||
for { set i 1 } { $i <= $captureCount } { incr i } {
|
||||
append procBody " " field $i
|
||||
@@ -1958,7 +2054,7 @@ proc ::tcl::clock::ParseClockScanFormat {formatString locale} {
|
||||
}
|
||||
}
|
||||
append procBody {
|
||||
::tcl::clock::SetupTimeZone $timeZone
|
||||
SetupTimeZone $timeZone
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1991,7 +2087,7 @@ proc ::tcl::clock::ParseClockScanFormat {formatString locale} {
|
||||
# Finally, convert the date to local time
|
||||
|
||||
append procBody {
|
||||
set date [::tcl::clock::ConvertLocalToUTC $date[set date {}] \
|
||||
set date [ConvertLocalToUTC $date[set date {}] \
|
||||
$TZData($timeZone) $changeover]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
if {([info commands ::tcl::pkgconfig] eq "")
|
||||
|| ([info sharedlibextension] ne ".dll")} return
|
||||
if {[::tcl::pkgconfig get debug]} {
|
||||
package ifneeded registry 1.3.1 \
|
||||
package ifneeded registry 1.3.2 \
|
||||
[list load [file join $dir tclreg13g.dll] registry]
|
||||
} else {
|
||||
package ifneeded registry 1.3.1 \
|
||||
package ifneeded registry 1.3.2 \
|
||||
[list load [file join $dir tclreg13.dll] registry]
|
||||
}
|
||||
|
||||
@@ -9,4 +9,4 @@
|
||||
# full path name of this file's directory.
|
||||
|
||||
if {![package vsatisfies [package provide Tcl] 8.5]} {return}
|
||||
package ifneeded tcltest 2.3.8 [list source [file join $dir tcltest.tcl]]
|
||||
package ifneeded tcltest 2.4.0 [list source [file join $dir tcltest.tcl]]
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace eval tcltest {
|
||||
# When the version number changes, be sure to update the pkgIndex.tcl file,
|
||||
# and the install directory in the Makefiles. When the minor version
|
||||
# changes (new feature) be sure to update the man page as well.
|
||||
variable Version 2.3.8
|
||||
variable Version 2.4.0
|
||||
|
||||
# Compatibility support for dumb variables defined in tcltest 1
|
||||
# Do not use these. Call [package provide Tcl] and [info patchlevel]
|
||||
@@ -611,16 +611,27 @@ namespace eval tcltest {
|
||||
|
||||
proc AcceptVerbose { level } {
|
||||
set level [AcceptList $level]
|
||||
set levelMap {
|
||||
l list
|
||||
p pass
|
||||
b body
|
||||
s skip
|
||||
t start
|
||||
e error
|
||||
l line
|
||||
m msec
|
||||
u usec
|
||||
}
|
||||
set levelRegexp "^([join [dict values $levelMap] |])\$"
|
||||
if {[llength $level] == 1} {
|
||||
if {![regexp {^(pass|body|skip|start|error|line)$} $level]} {
|
||||
if {![regexp $levelRegexp $level]} {
|
||||
# translate single characters abbreviations to expanded list
|
||||
set level [string map {p pass b body s skip t start e error l line} \
|
||||
[split $level {}]]
|
||||
set level [string map $levelMap [split $level {}]]
|
||||
}
|
||||
}
|
||||
set valid [list]
|
||||
foreach v $level {
|
||||
if {[regexp {^(pass|body|skip|start|error|line)$} $v]} {
|
||||
if {[regexp $levelRegexp $v]} {
|
||||
lappend valid $v
|
||||
}
|
||||
}
|
||||
@@ -1972,6 +1983,11 @@ proc tcltest::test {name description args} {
|
||||
# Only run the test body if the setup was successful
|
||||
if {!$setupFailure} {
|
||||
|
||||
# Register startup time
|
||||
if {[IsVerbose msec] || [IsVerbose usec]} {
|
||||
set timeStart [clock microseconds]
|
||||
}
|
||||
|
||||
# Verbose notification of $body start
|
||||
if {[IsVerbose start]} {
|
||||
puts [outputChannel] "---- $name start"
|
||||
@@ -2076,6 +2092,16 @@ proc tcltest::test {name description args} {
|
||||
}
|
||||
}
|
||||
|
||||
if {[IsVerbose msec] || [IsVerbose usec]} {
|
||||
set t [expr {[clock microseconds] - $timeStart}]
|
||||
if {[IsVerbose usec]} {
|
||||
puts [outputChannel] "++++ $name took $t μs"
|
||||
}
|
||||
if {[IsVerbose msec]} {
|
||||
puts [outputChannel] "++++ $name took [expr {round($t/1000.)}] ms"
|
||||
}
|
||||
}
|
||||
|
||||
# if we didn't experience any failures, then we passed
|
||||
variable numTests
|
||||
if {!($setupFailure || $cleanupFailure || $coreFailure
|
||||
|
||||
@@ -3279,6 +3279,92 @@ test assemble-51.4 {memory leak testing} memory {
|
||||
}
|
||||
}
|
||||
} 0
|
||||
|
||||
test assemble-52.1 {Bug 3154ea2759} {
|
||||
apply {{} {
|
||||
# Needs six exception ranges to force the range allocations to use the
|
||||
# malloced store.
|
||||
::tcl::unsupported::assemble {
|
||||
beginCatch @badLabel
|
||||
push error
|
||||
push testing
|
||||
invokeStk 2
|
||||
pop
|
||||
push 0
|
||||
jump @okLabel
|
||||
label @badLabel
|
||||
push 1; # should be pushReturnCode
|
||||
label @okLabel
|
||||
endCatch
|
||||
pop
|
||||
|
||||
beginCatch @badLabel2
|
||||
push error
|
||||
push testing
|
||||
invokeStk 2
|
||||
pop
|
||||
push 0
|
||||
jump @okLabel2
|
||||
label @badLabel2
|
||||
push 1; # should be pushReturnCode
|
||||
label @okLabel2
|
||||
endCatch
|
||||
pop
|
||||
|
||||
beginCatch @badLabel3
|
||||
push error
|
||||
push testing
|
||||
invokeStk 2
|
||||
pop
|
||||
push 0
|
||||
jump @okLabel3
|
||||
label @badLabel3
|
||||
push 1; # should be pushReturnCode
|
||||
label @okLabel3
|
||||
endCatch
|
||||
pop
|
||||
|
||||
beginCatch @badLabel4
|
||||
push error
|
||||
push testing
|
||||
invokeStk 2
|
||||
pop
|
||||
push 0
|
||||
jump @okLabel4
|
||||
label @badLabel4
|
||||
push 1; # should be pushReturnCode
|
||||
label @okLabel4
|
||||
endCatch
|
||||
pop
|
||||
|
||||
beginCatch @badLabel5
|
||||
push error
|
||||
push testing
|
||||
invokeStk 2
|
||||
pop
|
||||
push 0
|
||||
jump @okLabel5
|
||||
label @badLabel5
|
||||
push 1; # should be pushReturnCode
|
||||
label @okLabel5
|
||||
endCatch
|
||||
pop
|
||||
|
||||
beginCatch @badLabel6
|
||||
push error
|
||||
push testing
|
||||
invokeStk 2
|
||||
pop
|
||||
push 0
|
||||
jump @okLabel6
|
||||
label @badLabel6
|
||||
push 1; # should be pushReturnCode
|
||||
label @okLabel6
|
||||
endCatch
|
||||
pop
|
||||
}
|
||||
}}
|
||||
} {}; # must not crash
|
||||
|
||||
rename fillTables {}
|
||||
rename assemble {}
|
||||
|
||||
@@ -2048,6 +2048,13 @@ test dict-24.25 {dict map with huge dict (compiled)} {
|
||||
}} 100000
|
||||
} 166666666600000
|
||||
|
||||
test dict-25.1 {compiled dict update with low-refcount values [Bug d553228d9f]} {
|
||||
# Test crashes on failure
|
||||
apply {{} {
|
||||
lassign {} item
|
||||
dict update item item item two two {}
|
||||
}}
|
||||
} {}
|
||||
|
||||
# cleanup
|
||||
::tcltest::cleanupTests
|
||||
|
||||
@@ -583,6 +583,34 @@ test event-11.6 {Tcl_VwaitCmd procedure: round robin scheduling, same source} {
|
||||
removeFile $test2file
|
||||
list $x $y $z
|
||||
} {3 3 done}
|
||||
test event-11.7 {Bug 16828b3744} {
|
||||
after idle {
|
||||
set ::t::v 1
|
||||
namespace delete ::t
|
||||
}
|
||||
namespace eval ::t {
|
||||
vwait ::t::v
|
||||
}
|
||||
} {}
|
||||
test event-11.8 {Bug 16828b3744} -setup {
|
||||
oo::class create A {
|
||||
variable continue
|
||||
|
||||
method start {} {
|
||||
after idle [self] destroy
|
||||
|
||||
set continue 0
|
||||
vwait [namespace current]::continue
|
||||
}
|
||||
destructor {
|
||||
set continue 1
|
||||
}
|
||||
}
|
||||
} -body {
|
||||
[A new] start
|
||||
} -cleanup {
|
||||
A destroy
|
||||
} -result {}
|
||||
|
||||
test event-12.1 {Tcl_UpdateCmd procedure} -returnCodes error -body {
|
||||
update a b
|
||||
|
||||
@@ -2398,6 +2398,23 @@ test info-33.35 {{*}, literal, simple, bytecompiled} -body {
|
||||
# -------------------------------------------------------------------------
|
||||
unset -nocomplain res
|
||||
|
||||
test info-39.0 {Bug 4b61afd660} -setup {
|
||||
proc probe {} {
|
||||
return [dict get [info frame -1] line]
|
||||
}
|
||||
set body {
|
||||
set cmd probe
|
||||
$cmd
|
||||
}
|
||||
proc demo {} $body
|
||||
} -body {
|
||||
demo
|
||||
} -cleanup {
|
||||
unset -nocomplain body
|
||||
rename demo {}
|
||||
rename probe {}
|
||||
} -result 3
|
||||
|
||||
# cleanup
|
||||
catch {namespace delete test_ns_info1 test_ns_info2}
|
||||
::tcltest::cleanupTests
|
||||
|
||||
@@ -2953,6 +2953,45 @@ test namespace-54.1 {leak on namespace deletion} -constraints {memory} \
|
||||
test namespace-55.1 {compiled ensembles inside compiled ensembles: Bug 6d2f249a01} {
|
||||
info class [format %s constructor] oo::object
|
||||
} ""
|
||||
|
||||
test namespace-56.1 {bug f97d4ee020: mutually-entangled deletion} {
|
||||
namespace eval ::testing {
|
||||
proc abc {} {}
|
||||
proc def {} {}
|
||||
trace add command abc delete "rename ::testing::def {}; #"
|
||||
trace add command def delete "rename ::testing::abc {}; #"
|
||||
}
|
||||
namespace delete ::testing
|
||||
} {}
|
||||
test namespace-56.2 {bug f97d4ee020: mutually-entangled deletion} {
|
||||
namespace eval ::testing {
|
||||
namespace eval abc {proc xyz {} {}}
|
||||
namespace eval def {proc xyz {} {}}
|
||||
trace add command abc::xyz delete "namespace delete ::testing::def {}; #"
|
||||
trace add command def::xyz delete "namespace delete ::testing::abc {}; #"
|
||||
}
|
||||
namespace delete ::testing
|
||||
} {}
|
||||
test namespace-56.3 {bug f97d4ee020: mutually-entangled deletion} {
|
||||
namespace eval ::testing {
|
||||
variable gone {}
|
||||
oo::class create CB {
|
||||
variable cmd
|
||||
constructor other {set cmd $other}
|
||||
destructor {rename $cmd {}; lappend ::testing::gone $cmd}
|
||||
}
|
||||
namespace eval abc {
|
||||
::testing::CB create def ::testing::abc::ghi
|
||||
::testing::CB create ghi ::testing::abc::def
|
||||
}
|
||||
namespace delete abc
|
||||
try {
|
||||
return [lsort $gone]
|
||||
} finally {
|
||||
namespace delete ::testing
|
||||
}
|
||||
}
|
||||
} {::testing::abc::def ::testing::abc::ghi}
|
||||
|
||||
# cleanup
|
||||
catch {rename cmd1 {}}
|
||||
|
||||
+2
-2
@@ -19,7 +19,7 @@ testConstraint reg 0
|
||||
if {[testConstraint win]} {
|
||||
if {![catch {
|
||||
::tcltest::loadTestedCommands
|
||||
set ::regver [package require registry 1.3.1]
|
||||
set ::regver [package require registry 1.3.2]
|
||||
}]} {
|
||||
testConstraint reg 1
|
||||
}
|
||||
@@ -33,7 +33,7 @@ testConstraint english [expr {
|
||||
|
||||
test registry-1.0 {check if we are testing the right dll} {win reg} {
|
||||
set ::regver
|
||||
} {1.3.1}
|
||||
} {1.3.2}
|
||||
test registry-1.1 {argument parsing for registry command} {win reg} {
|
||||
list [catch {registry} msg] $msg
|
||||
} {1 {wrong # args: should be "registry ?-32bit|-64bit? option ?arg ...?"}}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/tclsh
|
||||
#
|
||||
# A wrapper around cg_annotate that sets appropriate command-line options
|
||||
# and rearranges the output so that annotated files occur in a consistent
|
||||
# sorted order.
|
||||
#
|
||||
|
||||
set in [open |[list cg_annotate --show=Ir --auto=yes --context=40 {*}$argv] r]
|
||||
set dest !
|
||||
set out(!) {}
|
||||
while {![eof $in]} {
|
||||
set line [string map {\t { }} [gets $in]]
|
||||
if {[regexp {^-- Auto-annotated source: (.*)} $line all name]} {
|
||||
set dest $name
|
||||
} elseif {[regexp {^-- line \d+ ------} $line]} {
|
||||
set line [lreplace $line 2 2 {#}]
|
||||
} elseif {[regexp {^The following files chosen for } $line]} {
|
||||
set dest !
|
||||
}
|
||||
append out($dest) $line\n
|
||||
}
|
||||
foreach x [lsort [array names out]] {
|
||||
puts $out($x)
|
||||
}
|
||||
@@ -10,8 +10,6 @@
|
||||
# See the file "license.terms" for information on usage and redistribution
|
||||
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
|
||||
package require Tcl 8.4
|
||||
|
||||
namespace eval genStubs {
|
||||
# libraryName --
|
||||
#
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
# \
|
||||
exec tclsh "$0" ${1+"$@"}
|
||||
|
||||
package require Tcl 8.4
|
||||
|
||||
# man2html.tcl --
|
||||
#
|
||||
# This file contains procedures that work in conjunction with the
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
#
|
||||
# Copyright (c) 1996 by Sun Microsystems, Inc.
|
||||
|
||||
package require Tcl 8.4
|
||||
|
||||
# Global variables used by these scripts:
|
||||
#
|
||||
# state - state variable that controls action of text proc.
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
#
|
||||
# Copyright (c) 1996 by Sun Microsystems, Inc.
|
||||
|
||||
package require Tcl 8.4
|
||||
|
||||
# Global variables used by these scripts:
|
||||
#
|
||||
# NAME_file - array indexed by NAME and containing file names used for
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
apply {{{limit 5000}} {
|
||||
for {set i 0} {$i < $limit} {incr i} {
|
||||
clock scan [clock format $i -format %T] -format %T
|
||||
}
|
||||
}} {*}$argv
|
||||
@@ -0,0 +1,13 @@
|
||||
apply {{{limit1 100} {limit2 1000}} {
|
||||
for {set i 0} {$i < $limit1} {incr i} {
|
||||
apply {limit2 {
|
||||
set a {}
|
||||
set b {}
|
||||
for {set i 0} {$i < $limit2} {incr i} {
|
||||
lappend a $i
|
||||
dict set b $i [expr {$i*$i}]
|
||||
}
|
||||
return [string length $a],[string length $b]
|
||||
}} $limit2
|
||||
}
|
||||
}} {*}$argv
|
||||
@@ -0,0 +1,13 @@
|
||||
oo::class create foo {
|
||||
method bar {} {
|
||||
return abc
|
||||
}
|
||||
}
|
||||
apply {{{iter 10000}} {
|
||||
for {set i 0} {$i < $iter} {incr i} {
|
||||
set obj1 [foo new]
|
||||
set obj2 [foo create inst]
|
||||
$obj1 destroy
|
||||
$obj2 destroy
|
||||
}
|
||||
}} {*}$argv
|
||||
@@ -0,0 +1,11 @@
|
||||
oo::class create foo {
|
||||
method bar {} {
|
||||
return abc
|
||||
}
|
||||
}
|
||||
foo create inst
|
||||
apply {{{iter 100000}} {
|
||||
for {set i 0} {$i < $iter} {incr i} {
|
||||
inst bar
|
||||
}
|
||||
}} {*}$argv
|
||||
@@ -30,8 +30,6 @@
|
||||
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
package require Tcl 8.5
|
||||
|
||||
# Define the names of the Olson files that we need to load.
|
||||
# We avoid the solar time files and the leap seconds.
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env tclsh
|
||||
|
||||
if {[catch {package require Tcl 8.6} msg]} {
|
||||
if {[catch {package require Tcl 8.6-} msg]} {
|
||||
puts stderr "ERROR: $msg"
|
||||
puts stderr "If running this script from 'make html', set the\
|
||||
NATIVE_TCLSH environment\nvariable to point to an installed\
|
||||
|
||||
+2
-2
@@ -849,8 +849,8 @@ install-libraries: libraries
|
||||
done;
|
||||
@echo "Installing package msgcat 1.6.0 as a Tcl Module";
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/msgcat/msgcat.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/msgcat-1.6.0.tm;
|
||||
@echo "Installing package tcltest 2.3.8 as a Tcl Module";
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/tcltest/tcltest.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/tcltest-2.3.8.tm;
|
||||
@echo "Installing package tcltest 2.4.0 as a Tcl Module";
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/tcltest/tcltest.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/tcltest-2.4.0.tm;
|
||||
|
||||
@echo "Installing package platform 1.0.14 as a Tcl Module";
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/platform/platform.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.4/platform-1.0.14.tm;
|
||||
|
||||
+1
-1
@@ -106,7 +106,7 @@ for Target in $Names; do
|
||||
First=$Target
|
||||
sed -e "/man\.macros/r $SrcDir/man.macros" -e "/man\.macros/d" \
|
||||
$ManPage > $Dir/$First
|
||||
chmod 444 $Dir/$First
|
||||
chmod 644 $Dir/$First
|
||||
$Gzip $Dir/$First
|
||||
else
|
||||
ln $SymOrLoc$First$Gz $Dir/$Target$Gz
|
||||
|
||||
+4
-4
@@ -660,8 +660,8 @@ install-libraries: libraries install-tzdata install-msgs
|
||||
done;
|
||||
@echo "Installing package msgcat 1.6.0 as a Tcl Module";
|
||||
@$(COPY) $(ROOT_DIR)/library/msgcat/msgcat.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.5/msgcat-1.6.0.tm;
|
||||
@echo "Installing package tcltest 2.3.8 as a Tcl Module";
|
||||
@$(COPY) $(ROOT_DIR)/library/tcltest/tcltest.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.5/tcltest-2.3.8.tm;
|
||||
@echo "Installing package tcltest 2.4.0 as a Tcl Module";
|
||||
@$(COPY) $(ROOT_DIR)/library/tcltest/tcltest.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.5/tcltest-2.4.0.tm;
|
||||
@echo "Installing package platform 1.0.14 as a Tcl Module";
|
||||
@$(COPY) $(ROOT_DIR)/library/platform/platform.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.4/platform-1.0.14.tm;
|
||||
@echo "Installing package platform::shell 1.1.4 as a Tcl Module";
|
||||
@@ -713,14 +713,14 @@ test-tcl: binaries $(TCLSH) $(CAT32) $(TEST_DLL_FILE)
|
||||
./$(TCLSH) "$(ROOT_DIR_NATIVE)/tests/all.tcl" $(TESTFLAGS) \
|
||||
-load "package ifneeded Tcltest ${VERSION}@TCL_PATCH_LEVEL@ [list load [file normalize ${TEST_DLL_FILE}] Tcltest]; \
|
||||
package ifneeded dde 1.4.0 [list load [file normalize ${DDE_DLL_FILE}] dde]; \
|
||||
package ifneeded registry 1.3.1 [list load [file normalize ${REG_DLL_FILE}] registry]" | ./$(CAT32)
|
||||
package ifneeded registry 1.3.2 [list load [file normalize ${REG_DLL_FILE}] registry]" | ./$(CAT32)
|
||||
|
||||
# Useful target to launch a built tclsh with the proper path,...
|
||||
runtest: binaries $(TCLSH) $(TEST_DLL_FILE)
|
||||
@TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \
|
||||
./$(TCLSH) $(TESTFLAGS) -load "package ifneeded Tcltest ${VERSION}@TCL_PATCH_LEVEL@ [list load [file normalize ${TEST_DLL_FILE}] Tcltest]; \
|
||||
package ifneeded dde 1.4.0 [list load [file normalize ${DDE_DLL_FILE}] dde]; \
|
||||
package ifneeded registry 1.3.1 [list load [file normalize ${REG_DLL_FILE}] registry]" $(SCRIPT)
|
||||
package ifneeded registry 1.3.2 [list load [file normalize ${REG_DLL_FILE}] registry]" $(SCRIPT)
|
||||
|
||||
# This target can be used to run tclsh from the build directory via
|
||||
# `make shell SCRIPT=foo.tcl`
|
||||
|
||||
+2
-2
@@ -589,13 +589,13 @@ test-core: setup $(TCLTEST) dlls $(CAT32)
|
||||
!if "$(OS)" == "Windows_NT" || "$(MSVCDIR)" == "IDE"
|
||||
$(DEBUGGER) $(TCLTEST) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) -loadfile <<
|
||||
package ifneeded dde 1.4.0 [list load "$(TCLDDELIB:\=/)" dde]
|
||||
package ifneeded registry 1.3.1 [list load "$(TCLREGLIB:\=/)" registry]
|
||||
package ifneeded registry 1.3.2 [list load "$(TCLREGLIB:\=/)" registry]
|
||||
<<
|
||||
!else
|
||||
@echo Please wait while the tests are collected...
|
||||
$(TCLTEST) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) -loadfile << > tests.log
|
||||
package ifneeded dde 1.4.0 "$(TCLDDELIB:\=/)" dde]
|
||||
package ifneeded registry 1.3.1 "$(TCLREGLIB:\=/)" registry]
|
||||
package ifneeded registry 1.3.2 "$(TCLREGLIB:\=/)" registry]
|
||||
<<
|
||||
type tests.log | more
|
||||
!endif
|
||||
|
||||
@@ -92,6 +92,9 @@ typedef DWORD_PTR * PDWORD_PTR;
|
||||
#include <process.h>
|
||||
#include <signal.h>
|
||||
#include <limits.h>
|
||||
#if HAVE_STDINT_H
|
||||
# include <stdint.h>
|
||||
#endif
|
||||
|
||||
#ifndef __GNUC__
|
||||
# define strncasecmp _strnicmp
|
||||
|
||||
+18
-14
@@ -163,7 +163,7 @@ Registry_Init(
|
||||
cmd = Tcl_CreateObjCommand(interp, "registry", RegistryObjCmd,
|
||||
interp, DeleteCmd);
|
||||
Tcl_SetAssocData(interp, REGISTRY_ASSOC_KEY, NULL, cmd);
|
||||
return Tcl_PkgProvide(interp, "registry", "1.3.1");
|
||||
return Tcl_PkgProvide(interp, "registry", "1.3.2");
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -803,17 +803,17 @@ GetValue(
|
||||
* we get bogus data.
|
||||
*/
|
||||
|
||||
while ((p < end) && *((Tcl_UniChar *) p) != 0) {
|
||||
Tcl_UniChar *up;
|
||||
while ((p < end) && *((WCHAR *) p) != 0) {
|
||||
WCHAR *wp;
|
||||
|
||||
Tcl_WinTCharToUtf((TCHAR *) p, -1, &buf);
|
||||
Tcl_ListObjAppendElement(interp, resultPtr,
|
||||
Tcl_NewStringObj(Tcl_DStringValue(&buf),
|
||||
Tcl_DStringLength(&buf)));
|
||||
up = (Tcl_UniChar *) p;
|
||||
wp = (WCHAR *) p;
|
||||
|
||||
while (*up++ != 0) {/* empty body */}
|
||||
p = (char *) up;
|
||||
while (*wp++ != 0) {/* empty body */}
|
||||
p = (char *) wp;
|
||||
Tcl_DStringFree(&buf);
|
||||
}
|
||||
Tcl_SetObjResult(interp, resultPtr);
|
||||
@@ -1332,7 +1332,7 @@ SetValue(
|
||||
data = (char *) Tcl_WinUtfToTChar(data, length, &buf);
|
||||
|
||||
/*
|
||||
* Include the null in the length, padding if needed for Unicode.
|
||||
* Include the null in the length, padding if needed for WCHAR.
|
||||
*/
|
||||
|
||||
Tcl_DStringSetLength(&buf, Tcl_DStringLength(&buf)+1);
|
||||
@@ -1393,9 +1393,10 @@ BroadcastValue(
|
||||
DWORD_PTR sendResult;
|
||||
int timeout = 3000;
|
||||
size_t len;
|
||||
int unilen;
|
||||
const char *str;
|
||||
Tcl_Obj *objPtr;
|
||||
WCHAR *wstr;
|
||||
Tcl_DString ds;
|
||||
|
||||
if (objc == 3) {
|
||||
str = Tcl_GetString(objv[1]);
|
||||
@@ -1408,9 +1409,11 @@ BroadcastValue(
|
||||
}
|
||||
}
|
||||
|
||||
str = (char*)Tcl_GetUnicodeFromObj(objv[0], &unilen);
|
||||
if (unilen == 0) {
|
||||
str = NULL;
|
||||
str = Tcl_GetString(objv[0]);
|
||||
len = objv[0]->length;
|
||||
wstr = (WCHAR *) Tcl_WinUtfToTChar(str, len, &ds);
|
||||
if (Tcl_DStringLength(&ds) == 0) {
|
||||
wstr = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1418,11 +1421,12 @@ BroadcastValue(
|
||||
*/
|
||||
|
||||
result = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE,
|
||||
(WPARAM) 0, (LPARAM) str, SMTO_ABORTIFHUNG, (UINT) timeout, &sendResult);
|
||||
(WPARAM) 0, (LPARAM) wstr, SMTO_ABORTIFHUNG, (UINT) timeout, &sendResult);
|
||||
Tcl_DStringFree(&ds);
|
||||
|
||||
objPtr = Tcl_NewObj();
|
||||
Tcl_ListObjAppendElement(NULL, objPtr, Tcl_NewLongObj((long) result));
|
||||
Tcl_ListObjAppendElement(NULL, objPtr, Tcl_NewLongObj((long) sendResult));
|
||||
Tcl_ListObjAppendElement(NULL, objPtr, Tcl_NewWideIntObj((Tcl_WideInt) result));
|
||||
Tcl_ListObjAppendElement(NULL, objPtr, Tcl_NewWideIntObj((Tcl_WideInt) sendResult));
|
||||
Tcl_SetObjResult(interp, objPtr);
|
||||
|
||||
return TCL_OK;
|
||||
|
||||
+4
-7
@@ -164,7 +164,6 @@ TclWinThreadStart(
|
||||
* from TclpThreadCreate */
|
||||
{
|
||||
WinThread *winThreadPtr = (WinThread *) lpParameter;
|
||||
unsigned int fpmask;
|
||||
LPTHREAD_START_ROUTINE lpOrigStartAddress;
|
||||
LPVOID lpOrigParameter;
|
||||
|
||||
@@ -172,13 +171,11 @@ TclWinThreadStart(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
fpmask = _MCW_EM | _MCW_RC | _MCW_PC;
|
||||
|
||||
#if defined(_MSC_VER) && _MSC_VER >= 1200
|
||||
fpmask |= _MCW_DN;
|
||||
_controlfp(winThreadPtr->fpControl, _MCW_EM | _MCW_RC | 0x03000000 /* _MCW_DN */
|
||||
#if !defined(_WIN64)
|
||||
| _MCW_PC
|
||||
#endif
|
||||
|
||||
_controlfp(winThreadPtr->fpControl, fpmask);
|
||||
);
|
||||
|
||||
lpOrigStartAddress = winThreadPtr->lpStartAddress;
|
||||
lpOrigParameter = winThreadPtr->lpParameter;
|
||||
|
||||
Reference in New Issue
Block a user