Compare commits
99
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3102c74735 | ||
|
|
75a582f357 | ||
|
|
b28ae0fbb5 | ||
|
|
6c2c1397ff | ||
|
|
73124928ba | ||
|
|
cc2f6f6a7d | ||
|
|
bf285438a2 | ||
|
|
844c8c3016 | ||
|
|
16dc425318 | ||
|
|
7a41668df0 | ||
|
|
9c058fa5d4 | ||
|
|
6c2f2fec8a | ||
|
|
0cb6ad07c6 | ||
|
|
cb9a441bb9 | ||
|
|
bf46c5018d | ||
|
|
3619c13393 | ||
|
|
e577cd8cf8 | ||
|
|
f05e229780 | ||
|
|
ff29c56ea4 | ||
|
|
5cae882ff3 | ||
|
|
0592038cf9 | ||
|
|
5207d2fe71 | ||
|
|
fab681eb11 | ||
|
|
01e94e53ed | ||
|
|
7f038e4db7 | ||
|
|
e5320ae0d5 | ||
|
|
8290f077d2 | ||
|
|
eccf18644f | ||
|
|
e4b872fc07 | ||
|
|
df9f4ed74f | ||
|
|
8445a00210 | ||
|
|
345d7cf628 | ||
|
|
b300fecc27 | ||
|
|
482ab2e9dc | ||
|
|
751453253c | ||
|
|
7b7647f1ab | ||
|
|
fa88074963 | ||
|
|
d418226edb | ||
|
|
bdfafd3539 | ||
|
|
819b87f1df | ||
|
|
b36880503c | ||
|
|
3c2b67a4d3 | ||
|
|
08c3a9b76b | ||
|
|
dd519c7dac | ||
|
|
f67a341fce | ||
|
|
c755ef0815 | ||
|
|
be577d6027 | ||
|
|
99d3f3c9f3 | ||
|
|
0b3a8804eb | ||
|
|
92a9b04a12 | ||
|
|
a4532de5a0 | ||
|
|
710ec0ef20 | ||
|
|
b4024d86d1 | ||
|
|
58f5175075 | ||
|
|
0789d80b7a | ||
|
|
5aee84a3f3 | ||
|
|
e52789c557 | ||
|
|
c0e9c99a1c | ||
|
|
67cfc8e178 | ||
|
|
47115ff565 | ||
|
|
dca8fae05f | ||
|
|
5512629c55 | ||
|
|
cb6e9135f2 | ||
|
|
af7e16b8e4 | ||
|
|
63e94b434f | ||
|
|
41a668a515 | ||
|
|
20619d8334 | ||
|
|
d0a8ae5cf7 | ||
|
|
7f43feafd5 | ||
|
|
2b502a4b2b | ||
|
|
f95100b44a | ||
|
|
0d4e358f5e | ||
|
|
5f7157f3a2 | ||
|
|
7cde8a22a1 | ||
|
|
535895e577 | ||
|
|
366828918a | ||
|
|
7e85a50a46 | ||
|
|
0e5bc322f1 | ||
|
|
1195cdbd77 | ||
|
|
5330c4e5d3 | ||
|
|
52799e58d6 | ||
|
|
c9bd1f3334 | ||
|
|
6d990b9c83 | ||
|
|
3a20c7912b | ||
|
|
008944a5c3 | ||
|
|
e0c7416333 | ||
|
|
7a4ad0872e | ||
|
|
7f12c0adfa | ||
|
|
885379e2cc | ||
|
|
5789574f89 | ||
|
|
f705798ed7 | ||
|
|
024bab4116 | ||
|
|
8e26969a34 | ||
|
|
ee742713d1 | ||
|
|
00f3aef9ac | ||
|
|
54a8b02774 | ||
|
|
d243959c21 | ||
|
|
dba0cd17dc | ||
|
|
f816bb2a60 |
@@ -0,0 +1,16 @@
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# Unix-style newlines with a newline ending every file
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
|
||||
# Matches multiple files with brace expansion notation
|
||||
# Set default charset
|
||||
[*.{c,h}]
|
||||
charset = utf-8
|
||||
indent_style = tab
|
||||
indent_size = 4
|
||||
tab_width = 8
|
||||
trim_trailing_whitespace = true
|
||||
+23
-5
@@ -34,8 +34,9 @@ one or two fields. If there is only a single field in the specifier
|
||||
then it is the name of the argument; if there are two fields, then
|
||||
the first is the argument name and the second is its default value.
|
||||
Arguments with default values that are followed by non-defaulted
|
||||
arguments become required arguments. In 8.6 this will be considered an
|
||||
error.
|
||||
arguments become required arguments; enough actual arguments must be
|
||||
supplied to allow all arguments up to and including the last required
|
||||
formal argument.
|
||||
.PP
|
||||
When \fIname\fR is invoked a local variable
|
||||
will be created for each of the formal arguments to the procedure; its
|
||||
@@ -48,11 +49,14 @@ actual arguments for all the
|
||||
formal arguments that do not have defaults, and there must not be any extra
|
||||
actual arguments.
|
||||
Arguments with default values that are followed by non-defaulted
|
||||
arguments become required arguments (in 8.6 it will be considered an
|
||||
error).
|
||||
arguments become de-facto required arguments, though this may change
|
||||
in a future version of Tcl; portable code should ensure that all
|
||||
optional arguments come after all required arguments.
|
||||
.PP
|
||||
There is one special case to permit procedures with
|
||||
variable numbers of arguments. If the last formal argument has the name
|
||||
\fBargs\fR, then a call to the procedure may contain more actual arguments
|
||||
.QW \fBargs\fR ,
|
||||
then a call to the procedure may contain more actual arguments
|
||||
than the procedure has formal arguments. In this case, all of the actual arguments
|
||||
starting at the one that would be assigned to \fBargs\fR are combined into
|
||||
a list (as if the \fBlist\fR command had been used); this combined value
|
||||
@@ -80,6 +84,20 @@ If an error occurs while executing the procedure
|
||||
body, then the procedure-as-a-whole will return that same error.
|
||||
.SH EXAMPLES
|
||||
.PP
|
||||
This is a procedure that takes two arguments and prints both their sum
|
||||
and their product. It also returns the string
|
||||
.QW OK
|
||||
to the caller as an explicit result.
|
||||
.PP
|
||||
.CS
|
||||
\fBproc\fR printSumProduct {x y} {
|
||||
set sum [expr {$x + $y}]
|
||||
set prod [expr {$x * $y}]
|
||||
puts "sum is $sum, product is $prod"
|
||||
return "OK"
|
||||
}
|
||||
.CE
|
||||
.PP
|
||||
This is a procedure that accepts arbitrarily many arguments and prints
|
||||
them out, one by one.
|
||||
.PP
|
||||
|
||||
+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.
|
||||
|
||||
+12
-6
@@ -174,7 +174,11 @@ to the \fBzlib push\fR command:
|
||||
.VS "TIP 400"
|
||||
Sets the compression dictionary to use when working with compressing or
|
||||
decompressing the data to be \fIbinData\fR. Not valid for transformations that
|
||||
work with gzip-format data.
|
||||
work with gzip-format data. The dictionary should consist of strings (byte
|
||||
sequences) that are likely to be encountered later in the data to be compressed,
|
||||
with the most commonly used strings preferably put towards the end of the
|
||||
dictionary. Tcl provides no mechanism for choosing a good such dictionary for
|
||||
a particular data sequence.
|
||||
.VE
|
||||
.TP
|
||||
\fB\-header\fI dictionary\fR
|
||||
@@ -207,11 +211,13 @@ compression algorithm depends on what format is being produced or consumed.
|
||||
.TP
|
||||
\fB\-dictionary\fI binData\fR
|
||||
.VS "TIP 400"
|
||||
This read-write options gets or sets the compression dictionary to use when
|
||||
working with compressing or decompressing the data to be \fIbinData\fR. It is
|
||||
not valid for transformations that work with gzip-format data, and should not
|
||||
normally be set on compressing transformations other than at the point where
|
||||
the transformation is stacked.
|
||||
This read-write options gets or sets the initial compression dictionary to use
|
||||
when working with compressing or decompressing the data to be \fIbinData\fR.
|
||||
It is not valid for transformations that work with gzip-format data, and should
|
||||
not normally be set on compressing transformations other than at the point where
|
||||
the transformation is stacked. Note that this cannot be used to get the
|
||||
current active compression dictionary mid-stream, as that information is not
|
||||
exposed by the underlying library.
|
||||
.VE
|
||||
.TP
|
||||
\fB\-flush\fI type\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
|
||||
};
|
||||
|
||||
|
||||
+12
-10
@@ -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
|
||||
@@ -2374,9 +2377,6 @@ typedef int (Tcl_NRPostProc) (ClientData data[], Tcl_Interp *interp,
|
||||
*----------------------------------------------------------------------------
|
||||
* The following constant is used to test for older versions of Tcl in the
|
||||
* stubs tables.
|
||||
*
|
||||
* Jan Nijtman's plus patch uses 0xFCA1BACF, so we need to pick a different
|
||||
* value since the stubs tables don't match.
|
||||
*/
|
||||
|
||||
#define TCL_STUB_MAGIC ((int) 0xFCA3BACF)
|
||||
@@ -2389,17 +2389,19 @@ typedef int (Tcl_NRPostProc) (ClientData data[], Tcl_Interp *interp,
|
||||
*/
|
||||
|
||||
const char * Tcl_InitStubs(Tcl_Interp *interp, const char *version,
|
||||
int exact);
|
||||
int exact, int magic);
|
||||
const char * TclTomMathInitializeStubs(Tcl_Interp *interp,
|
||||
const char *version, int epoch, int revision);
|
||||
|
||||
/*
|
||||
* When not using stubs, make it a macro.
|
||||
*/
|
||||
|
||||
#ifndef USE_TCL_STUBS
|
||||
#ifdef USE_TCL_STUBS
|
||||
#define Tcl_InitStubs(interp, version, exact) \
|
||||
Tcl_PkgInitStubsCheck(interp, version, exact)
|
||||
(Tcl_InitStubs)(interp, version, \
|
||||
(exact)|(TCL_MAJOR_VERSION<<8)|(TCL_MINOR_VERSION<<16), \
|
||||
TCL_STUB_MAGIC)
|
||||
#else
|
||||
#define Tcl_InitStubs(interp, version, exact) \
|
||||
Tcl_PkgInitStubsCheck(interp, version, \
|
||||
(exact)|(TCL_MAJOR_VERSION<<8)|(TCL_MINOR_VERSION<<16))
|
||||
#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
-4
@@ -724,9 +724,7 @@ Tcl_CreateInterp(void)
|
||||
* Initialize the ensemble error message rewriting support.
|
||||
*/
|
||||
|
||||
iPtr->ensembleRewrite.sourceObjs = NULL;
|
||||
iPtr->ensembleRewrite.numRemovedObjs = 0;
|
||||
iPtr->ensembleRewrite.numInsertedObjs = 0;
|
||||
TclResetRewriteEnsemble(interp, 1);
|
||||
|
||||
/*
|
||||
* TIP#143: Initialise the resource limit support.
|
||||
@@ -4221,7 +4219,7 @@ EvalObjvCore(
|
||||
* TCL_EVAL_INVOKE was not set: clear rewrite rules
|
||||
*/
|
||||
|
||||
iPtr->ensembleRewrite.sourceObjs = NULL;
|
||||
TclResetRewriteEnsemble(interp, 1);
|
||||
|
||||
if (flags & TCL_EVAL_GLOBAL) {
|
||||
TEOV_SwitchVarFrame(interp);
|
||||
|
||||
+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;
|
||||
|
||||
+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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+3
-19
@@ -1832,7 +1832,6 @@ NsEnsembleImplementationCmdNR(
|
||||
Tcl_Obj *copyPtr; /* The actual list of words to dispatch to.
|
||||
* Will be freed by the dispatch engine. */
|
||||
int prefixObjc, copyObjc;
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
|
||||
/*
|
||||
* Get the prefix that we're rewriting to. To do this we need to
|
||||
@@ -1876,25 +1875,10 @@ NsEnsembleImplementationCmdNR(
|
||||
* count both as inserted and removed arguments.
|
||||
*/
|
||||
|
||||
if (iPtr->ensembleRewrite.sourceObjs == NULL) {
|
||||
iPtr->ensembleRewrite.sourceObjs = objv;
|
||||
iPtr->ensembleRewrite.numRemovedObjs =
|
||||
2 + ensemblePtr->numParameters;
|
||||
iPtr->ensembleRewrite.numInsertedObjs =
|
||||
prefixObjc + ensemblePtr->numParameters;
|
||||
if (TclInitRewriteEnsemble(interp, 2 + ensemblePtr->numParameters,
|
||||
prefixObjc + ensemblePtr->numParameters, objv)) {
|
||||
TclNRAddCallback(interp, TclClearRootEnsemble, NULL, NULL, NULL,
|
||||
NULL);
|
||||
} else {
|
||||
register int ni = 2 + ensemblePtr->numParameters
|
||||
- iPtr->ensembleRewrite.numInsertedObjs;
|
||||
/* Position in objv of new front of insertion
|
||||
* relative to old one. */
|
||||
if (ni > 0) {
|
||||
iPtr->ensembleRewrite.numRemovedObjs += ni;
|
||||
iPtr->ensembleRewrite.numInsertedObjs += prefixObjc-1;
|
||||
} else {
|
||||
iPtr->ensembleRewrite.numInsertedObjs += prefixObjc-2;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2013,7 +1997,7 @@ TclInitRewriteEnsemble(
|
||||
|
||||
if (numIns < numRemoved) {
|
||||
iPtr->ensembleRewrite.numRemovedObjs += numRemoved - numIns;
|
||||
iPtr->ensembleRewrite.numInsertedObjs += numInserted - 1;
|
||||
iPtr->ensembleRewrite.numInsertedObjs = numInserted;
|
||||
} else {
|
||||
iPtr->ensembleRewrite.numInsertedObjs += numInserted - numRemoved;
|
||||
}
|
||||
|
||||
@@ -1465,6 +1465,8 @@ VwaitVarProc(
|
||||
int *donePtr = clientData;
|
||||
|
||||
*donePtr = 1;
|
||||
Tcl_UntraceVar(interp, name1, TCL_TRACE_WRITES|TCL_TRACE_UNSETS,
|
||||
VwaitVarProc, clientData);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -2074,6 +2074,8 @@ TclNRExecuteByteCode(
|
||||
* Push the callback for bytecode execution
|
||||
*/
|
||||
|
||||
TclResetRewriteEnsemble(interp, 1);
|
||||
|
||||
TclNRAddCallback(interp, TEBCresume, TD, /* pc */ NULL,
|
||||
/* cleanup */ INT2PTR(0), NULL);
|
||||
return TCL_OK;
|
||||
@@ -3172,9 +3174,8 @@ TEBCresume(
|
||||
if (iPtr->flags & INTERP_DEBUG_FRAME) {
|
||||
ArgumentBCEnter(interp, codePtr, TD, pc, objc, objv);
|
||||
}
|
||||
iPtr->ensembleRewrite.sourceObjs = objv;
|
||||
iPtr->ensembleRewrite.numRemovedObjs = opnd;
|
||||
iPtr->ensembleRewrite.numInsertedObjs = 1;
|
||||
|
||||
TclInitRewriteEnsemble(interp, opnd, 1, objv);
|
||||
DECACHE_STACK_INFO();
|
||||
pc += 6;
|
||||
TEBC_YIELD();
|
||||
@@ -7706,6 +7707,7 @@ TEBCresume(
|
||||
goto gotError;
|
||||
}
|
||||
}
|
||||
Tcl_IncrRefCount(dictPtr);
|
||||
if (TclListObjGetElements(interp, OBJ_AT_TOS, &length,
|
||||
&keyPtrPtr) != TCL_OK) {
|
||||
TRACE_ERROR(interp);
|
||||
@@ -7718,6 +7720,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 +7737,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);
|
||||
}
|
||||
|
||||
+2
-1
@@ -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;
|
||||
|
||||
+4
-28
@@ -1795,11 +1795,9 @@ AliasNRCmd(
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument vector. */
|
||||
{
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
Alias *aliasPtr = clientData;
|
||||
int prefc, cmdc, i;
|
||||
Tcl_Obj **prefv, **cmdv;
|
||||
int isRootEnsemble = (iPtr->ensembleRewrite.sourceObjs == NULL);
|
||||
Tcl_Obj *listPtr;
|
||||
List *listRep;
|
||||
int flags = TCL_EVAL_INVOKE;
|
||||
@@ -1831,21 +1829,7 @@ AliasNRCmd(
|
||||
* only the source command should show, not the full target prefix.
|
||||
*/
|
||||
|
||||
if (isRootEnsemble) {
|
||||
iPtr->ensembleRewrite.sourceObjs = objv;
|
||||
iPtr->ensembleRewrite.numRemovedObjs = 1;
|
||||
iPtr->ensembleRewrite.numInsertedObjs = prefc;
|
||||
} else {
|
||||
iPtr->ensembleRewrite.numInsertedObjs += prefc - 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* We are sending a 0-refCount obj, do not need a callback: it will be
|
||||
* cleaned up automatically. But we may need to clear the rootEnsemble
|
||||
* stuff ...
|
||||
*/
|
||||
|
||||
if (isRootEnsemble) {
|
||||
if (TclInitRewriteEnsemble(interp, 1, prefc, objv)) {
|
||||
TclNRAddCallback(interp, TclClearRootEnsemble, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
TclSkipTailcall(interp);
|
||||
@@ -1866,7 +1850,7 @@ AliasObjCmd(
|
||||
Tcl_Obj **prefv, **cmdv;
|
||||
Tcl_Obj *cmdArr[ALIAS_CMDV_PREALLOC];
|
||||
Interp *tPtr = (Interp *) targetInterp;
|
||||
int isRootEnsemble = (tPtr->ensembleRewrite.sourceObjs == NULL);
|
||||
int isRootEnsemble;
|
||||
|
||||
/*
|
||||
* Append the arguments to the command prefix and invoke the command in
|
||||
@@ -1896,13 +1880,7 @@ AliasObjCmd(
|
||||
* only the source command should show, not the full target prefix.
|
||||
*/
|
||||
|
||||
if (isRootEnsemble) {
|
||||
tPtr->ensembleRewrite.sourceObjs = objv;
|
||||
tPtr->ensembleRewrite.numRemovedObjs = 1;
|
||||
tPtr->ensembleRewrite.numInsertedObjs = prefc;
|
||||
} else {
|
||||
tPtr->ensembleRewrite.numInsertedObjs += prefc - 1;
|
||||
}
|
||||
isRootEnsemble = TclInitRewriteEnsemble((Tcl_Interp *)tPtr, 1, prefc, objv);
|
||||
|
||||
/*
|
||||
* Protect the target interpreter if it isn't the same as the source
|
||||
@@ -1925,9 +1903,7 @@ AliasObjCmd(
|
||||
*/
|
||||
|
||||
if (isRootEnsemble) {
|
||||
tPtr->ensembleRewrite.sourceObjs = NULL;
|
||||
tPtr->ensembleRewrite.numRemovedObjs = 0;
|
||||
tPtr->ensembleRewrite.numInsertedObjs = 0;
|
||||
TclResetRewriteEnsemble((Tcl_Interp *)tPtr, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+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
|
||||
|
||||
+8
-8
@@ -1687,7 +1687,7 @@ Tcl_NewObjectInstance(
|
||||
TclOOGetCallContext(oPtr, NULL, CONSTRUCTOR, NULL);
|
||||
|
||||
if (contextPtr != NULL) {
|
||||
int result;
|
||||
int isRoot, result;
|
||||
Tcl_InterpState state;
|
||||
|
||||
state = Tcl_SaveInterpState(interp, TCL_OK);
|
||||
@@ -1698,13 +1698,14 @@ Tcl_NewObjectInstance(
|
||||
* Adjust the ensmble tracking record if necessary. [Bug 3514761]
|
||||
*/
|
||||
|
||||
if (((Interp*) interp)->ensembleRewrite.sourceObjs) {
|
||||
((Interp*) interp)->ensembleRewrite.numInsertedObjs += skip-1;
|
||||
((Interp*) interp)->ensembleRewrite.numRemovedObjs += skip-1;
|
||||
}
|
||||
isRoot = TclInitRewriteEnsemble(interp, skip, skip, objv);
|
||||
result = Tcl_NRCallObjProc(interp, TclOOInvokeContext, contextPtr,
|
||||
objc, objv);
|
||||
|
||||
if (isRoot) {
|
||||
TclResetRewriteEnsemble(interp, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* It's an error if the object was whacked in the constructor.
|
||||
* Force this if it isn't already an error (don't want to lose
|
||||
@@ -1827,9 +1828,8 @@ TclNRNewObjectInstance(
|
||||
* Adjust the ensmble tracking record if necessary. [Bug 3514761]
|
||||
*/
|
||||
|
||||
if (((Interp *) interp)->ensembleRewrite.sourceObjs) {
|
||||
((Interp *) interp)->ensembleRewrite.numInsertedObjs += skip - 1;
|
||||
((Interp *) interp)->ensembleRewrite.numRemovedObjs += skip - 1;
|
||||
if (TclInitRewriteEnsemble(interp, skip, skip, objv)) {
|
||||
TclNRAddCallback(interp, TclClearRootEnsemble, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+16
-42
@@ -847,9 +847,8 @@ TclOODefineObjCmd(
|
||||
TclDecrRefCount(objNameObj);
|
||||
} else {
|
||||
Tcl_Obj *objPtr, *obj2Ptr, **objs;
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
Tcl_Command cmd;
|
||||
int dummy;
|
||||
int isRoot, dummy;
|
||||
|
||||
/*
|
||||
* More than one argument: fire them through the ensemble processing
|
||||
@@ -861,18 +860,7 @@ TclOODefineObjCmd(
|
||||
* the moment. Ugly!
|
||||
*/
|
||||
|
||||
if (iPtr->ensembleRewrite.sourceObjs == NULL) {
|
||||
iPtr->ensembleRewrite.sourceObjs = objv;
|
||||
iPtr->ensembleRewrite.numRemovedObjs = 3;
|
||||
iPtr->ensembleRewrite.numInsertedObjs = 1;
|
||||
} else {
|
||||
int ni = iPtr->ensembleRewrite.numInsertedObjs;
|
||||
if (ni < 3) {
|
||||
iPtr->ensembleRewrite.numRemovedObjs += 3 - ni;
|
||||
} else {
|
||||
iPtr->ensembleRewrite.numInsertedObjs -= 2;
|
||||
}
|
||||
}
|
||||
isRoot = TclInitRewriteEnsemble(interp, 3, 1, objv);
|
||||
|
||||
/*
|
||||
* Build the list of arguments using a Tcl_Obj as a workspace. See
|
||||
@@ -894,6 +882,9 @@ TclOODefineObjCmd(
|
||||
Tcl_ListObjGetElements(NULL, objPtr, &dummy, &objs);
|
||||
|
||||
result = Tcl_EvalObjv(interp, objc-2, objs, TCL_EVAL_INVOKE);
|
||||
if (isRoot) {
|
||||
TclResetRewriteEnsemble(interp, 1);
|
||||
}
|
||||
Tcl_DecrRefCount(objPtr);
|
||||
}
|
||||
DelRef(oPtr);
|
||||
@@ -927,7 +918,7 @@ TclOOObjDefObjCmd(
|
||||
Tcl_Obj *const *objv)
|
||||
{
|
||||
Foundation *fPtr = TclOOGetFoundation(interp);
|
||||
int result;
|
||||
int isRoot, result;
|
||||
Object *oPtr;
|
||||
|
||||
if (objc < 3) {
|
||||
@@ -962,7 +953,6 @@ TclOOObjDefObjCmd(
|
||||
TclDecrRefCount(objNameObj);
|
||||
} else {
|
||||
Tcl_Obj *objPtr, *obj2Ptr, **objs;
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
Tcl_Command cmd;
|
||||
int dummy;
|
||||
|
||||
@@ -976,18 +966,7 @@ TclOOObjDefObjCmd(
|
||||
* the moment. Ugly!
|
||||
*/
|
||||
|
||||
if (iPtr->ensembleRewrite.sourceObjs == NULL) {
|
||||
iPtr->ensembleRewrite.sourceObjs = objv;
|
||||
iPtr->ensembleRewrite.numRemovedObjs = 3;
|
||||
iPtr->ensembleRewrite.numInsertedObjs = 1;
|
||||
} else {
|
||||
int ni = iPtr->ensembleRewrite.numInsertedObjs;
|
||||
if (ni < 3) {
|
||||
iPtr->ensembleRewrite.numRemovedObjs += 3 - ni;
|
||||
} else {
|
||||
iPtr->ensembleRewrite.numInsertedObjs -= 2;
|
||||
}
|
||||
}
|
||||
isRoot = TclInitRewriteEnsemble(interp, 3, 1, objv);
|
||||
|
||||
/*
|
||||
* Build the list of arguments using a Tcl_Obj as a workspace. See
|
||||
@@ -1009,6 +988,10 @@ TclOOObjDefObjCmd(
|
||||
Tcl_ListObjGetElements(NULL, objPtr, &dummy, &objs);
|
||||
|
||||
result = Tcl_EvalObjv(interp, objc-2, objs, TCL_EVAL_INVOKE);
|
||||
|
||||
if (isRoot) {
|
||||
TclResetRewriteEnsemble(interp, 1);
|
||||
}
|
||||
Tcl_DecrRefCount(objPtr);
|
||||
}
|
||||
DelRef(oPtr);
|
||||
@@ -1077,9 +1060,8 @@ TclOODefineSelfObjCmd(
|
||||
TclDecrRefCount(objNameObj);
|
||||
} else {
|
||||
Tcl_Obj *objPtr, *obj2Ptr, **objs;
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
Tcl_Command cmd;
|
||||
int dummy;
|
||||
int isRoot, dummy;
|
||||
|
||||
/*
|
||||
* More than one argument: fire them through the ensemble processing
|
||||
@@ -1091,18 +1073,7 @@ TclOODefineSelfObjCmd(
|
||||
* the moment. Ugly!
|
||||
*/
|
||||
|
||||
if (iPtr->ensembleRewrite.sourceObjs == NULL) {
|
||||
iPtr->ensembleRewrite.sourceObjs = objv;
|
||||
iPtr->ensembleRewrite.numRemovedObjs = 2;
|
||||
iPtr->ensembleRewrite.numInsertedObjs = 1;
|
||||
} else {
|
||||
int ni = iPtr->ensembleRewrite.numInsertedObjs;
|
||||
if (ni < 2) {
|
||||
iPtr->ensembleRewrite.numRemovedObjs += 2 - ni;
|
||||
} else {
|
||||
iPtr->ensembleRewrite.numInsertedObjs -= 1;
|
||||
}
|
||||
}
|
||||
isRoot = TclInitRewriteEnsemble(interp, 2, 1, objv);
|
||||
|
||||
/*
|
||||
* Build the list of arguments using a Tcl_Obj as a workspace. See
|
||||
@@ -1124,6 +1095,9 @@ TclOODefineSelfObjCmd(
|
||||
Tcl_ListObjGetElements(NULL, objPtr, &dummy, &objs);
|
||||
|
||||
result = Tcl_EvalObjv(interp, objc-1, objs, TCL_EVAL_INVOKE);
|
||||
if (isRoot) {
|
||||
TclResetRewriteEnsemble(interp, 1);
|
||||
}
|
||||
Tcl_DecrRefCount(objPtr);
|
||||
}
|
||||
DelRef(oPtr);
|
||||
|
||||
+8
-19
@@ -1458,6 +1458,11 @@ InvokeForwardMethod(
|
||||
argObjs = InitEnsembleRewrite(interp, objc, objv, skip,
|
||||
numPrefixes, prefixObjs, &len);
|
||||
Tcl_NRAddCallback(interp, FinalizeForwardCall, argObjs, NULL, NULL, NULL);
|
||||
/*
|
||||
* NOTE: The combination of direct set of iPtr->lookupNsPtr and the use
|
||||
* of the TCL_EVAL_NOERR flag results in an evaluation configuration
|
||||
* very much like TCL_EVAL_INVOKE.
|
||||
*/
|
||||
((Interp *)interp)->lookupNsPtr
|
||||
= (Namespace *) contextPtr->oPtr->namespacePtr;
|
||||
return TclNREvalObjv(interp, len, argObjs, TCL_EVAL_NOERR, NULL);
|
||||
@@ -1594,12 +1599,9 @@ InitEnsembleRewrite(
|
||||
int *lengthPtr) /* Where to write the resulting length of the
|
||||
* array of rewritten arguments. */
|
||||
{
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
int isRootEnsemble = (iPtr->ensembleRewrite.sourceObjs == NULL);
|
||||
Tcl_Obj **argObjs;
|
||||
unsigned len = rewriteLength + objc - toRewrite;
|
||||
Tcl_Obj **argObjs = TclStackAlloc(interp, sizeof(Tcl_Obj *) * len);
|
||||
|
||||
argObjs = TclStackAlloc(interp, sizeof(Tcl_Obj *) * len);
|
||||
memcpy(argObjs, rewriteObjs, rewriteLength * sizeof(Tcl_Obj *));
|
||||
memcpy(argObjs + rewriteLength, objv + toRewrite,
|
||||
sizeof(Tcl_Obj *) * (objc - toRewrite));
|
||||
@@ -1613,22 +1615,9 @@ InitEnsembleRewrite(
|
||||
* (and unavoidably).
|
||||
*/
|
||||
|
||||
if (isRootEnsemble) {
|
||||
iPtr->ensembleRewrite.sourceObjs = objv;
|
||||
iPtr->ensembleRewrite.numRemovedObjs = toRewrite;
|
||||
iPtr->ensembleRewrite.numInsertedObjs = rewriteLength;
|
||||
} else {
|
||||
int numIns = iPtr->ensembleRewrite.numInsertedObjs;
|
||||
|
||||
if (numIns < toRewrite) {
|
||||
iPtr->ensembleRewrite.numRemovedObjs += toRewrite - numIns;
|
||||
iPtr->ensembleRewrite.numInsertedObjs += rewriteLength - 1;
|
||||
} else {
|
||||
iPtr->ensembleRewrite.numInsertedObjs +=
|
||||
rewriteLength - toRewrite;
|
||||
}
|
||||
if (TclInitRewriteEnsemble(interp, toRewrite, rewriteLength, objv)) {
|
||||
TclNRAddCallback(interp, TclClearRootEnsemble, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
*lengthPtr = len;
|
||||
return argObjs;
|
||||
}
|
||||
|
||||
+76
-100
@@ -167,6 +167,8 @@ static int ParseTokens(const char *src, int numBytes, int mask,
|
||||
int flags, Tcl_Parse *parsePtr);
|
||||
static int ParseWhiteSpace(const char *src, int numBytes,
|
||||
int *incompletePtr, char *typePtr);
|
||||
static int ParseAllWhiteSpace(const char *src, int numBytes,
|
||||
int *incompletePtr);
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
@@ -298,9 +300,43 @@ Tcl_ParseCommand(
|
||||
*/
|
||||
|
||||
parsePtr->commandStart = src;
|
||||
type = CHAR_TYPE(*src);
|
||||
scanned = 1; /* Can't have missing whitepsace before first word. */
|
||||
while (1) {
|
||||
int expandWord = 0;
|
||||
|
||||
/* Are we at command termination? */
|
||||
|
||||
if ((numBytes == 0) || (type & terminators) != 0) {
|
||||
parsePtr->term = src;
|
||||
parsePtr->commandSize = src + (numBytes != 0)
|
||||
- parsePtr->commandStart;
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/* Are we missing white space after previous word? */
|
||||
|
||||
if (scanned == 0) {
|
||||
if (src[-1] == '"') {
|
||||
if (interp != NULL) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"extra characters after close-quote", -1));
|
||||
}
|
||||
parsePtr->errorType = TCL_PARSE_QUOTE_EXTRA;
|
||||
} else {
|
||||
if (interp != NULL) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"extra characters after close-brace", -1));
|
||||
}
|
||||
parsePtr->errorType = TCL_PARSE_BRACE_EXTRA;
|
||||
}
|
||||
parsePtr->term = src;
|
||||
error:
|
||||
Tcl_FreeParse(parsePtr);
|
||||
parsePtr->commandSize = parsePtr->end - parsePtr->commandStart;
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create the token for the word.
|
||||
*/
|
||||
@@ -310,23 +346,6 @@ Tcl_ParseCommand(
|
||||
tokenPtr = &parsePtr->tokenPtr[wordIndex];
|
||||
tokenPtr->type = TCL_TOKEN_WORD;
|
||||
|
||||
/*
|
||||
* Skip white space before the word. Also skip a backslash-newline
|
||||
* sequence: it should be treated just like white space.
|
||||
*/
|
||||
|
||||
scanned = ParseWhiteSpace(src,numBytes, &parsePtr->incomplete, &type);
|
||||
src += scanned;
|
||||
numBytes -= scanned;
|
||||
if (numBytes == 0) {
|
||||
parsePtr->term = src;
|
||||
break;
|
||||
}
|
||||
if ((type & terminators) != 0) {
|
||||
parsePtr->term = src;
|
||||
src++;
|
||||
break;
|
||||
}
|
||||
tokenPtr->start = src;
|
||||
parsePtr->numTokens++;
|
||||
parsePtr->numWords++;
|
||||
@@ -546,52 +565,12 @@ Tcl_ParseCommand(
|
||||
tokenPtr->type = TCL_TOKEN_SIMPLE_WORD;
|
||||
}
|
||||
|
||||
/*
|
||||
* Do two additional checks: (a) make sure we're really at the end of
|
||||
* a word (there might have been garbage left after a quoted or braced
|
||||
* word), and (b) check for the end of the command.
|
||||
*/
|
||||
/* Parse the whitespace between words. */
|
||||
|
||||
scanned = ParseWhiteSpace(src,numBytes, &parsePtr->incomplete, &type);
|
||||
if (scanned) {
|
||||
src += scanned;
|
||||
numBytes -= scanned;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (numBytes == 0) {
|
||||
parsePtr->term = src;
|
||||
break;
|
||||
}
|
||||
if ((type & terminators) != 0) {
|
||||
parsePtr->term = src;
|
||||
src++;
|
||||
break;
|
||||
}
|
||||
if (src[-1] == '"') {
|
||||
if (interp != NULL) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"extra characters after close-quote", -1));
|
||||
}
|
||||
parsePtr->errorType = TCL_PARSE_QUOTE_EXTRA;
|
||||
} else {
|
||||
if (interp != NULL) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"extra characters after close-brace", -1));
|
||||
}
|
||||
parsePtr->errorType = TCL_PARSE_BRACE_EXTRA;
|
||||
}
|
||||
parsePtr->term = src;
|
||||
goto error;
|
||||
src += scanned;
|
||||
numBytes -= scanned;
|
||||
}
|
||||
|
||||
parsePtr->commandSize = src - parsePtr->commandStart;
|
||||
return TCL_OK;
|
||||
|
||||
error:
|
||||
Tcl_FreeParse(parsePtr);
|
||||
parsePtr->commandSize = parsePtr->end - parsePtr->commandStart;
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -733,22 +712,31 @@ ParseWhiteSpace(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static int
|
||||
ParseAllWhiteSpace(
|
||||
const char *src, /* First character to parse. */
|
||||
int numBytes, /* Max number of byes to scan */
|
||||
int *incompletePtr) /* Set true if parse is incomplete. */
|
||||
{
|
||||
char type;
|
||||
const char *p = src;
|
||||
|
||||
do {
|
||||
int scanned = ParseWhiteSpace(p, numBytes, incompletePtr, &type);
|
||||
|
||||
p += scanned;
|
||||
numBytes -= scanned;
|
||||
} while (numBytes && (*p == '\n') && (p++, --numBytes));
|
||||
return (p-src);
|
||||
}
|
||||
|
||||
int
|
||||
TclParseAllWhiteSpace(
|
||||
const char *src, /* First character to parse. */
|
||||
int numBytes) /* Max number of byes to scan */
|
||||
{
|
||||
int dummy;
|
||||
char type;
|
||||
const char *p = src;
|
||||
|
||||
do {
|
||||
int scanned = ParseWhiteSpace(p, numBytes, &dummy, &type);
|
||||
|
||||
p += scanned;
|
||||
numBytes -= scanned;
|
||||
} while (numBytes && (*p == '\n') && (p++, --numBytes));
|
||||
return (p-src);
|
||||
return ParseAllWhiteSpace(src, numBytes, &dummy);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1021,17 +1009,12 @@ ParseComment(
|
||||
* command. */
|
||||
{
|
||||
register const char *p = src;
|
||||
int incomplete = parsePtr->incomplete;
|
||||
|
||||
while (numBytes) {
|
||||
char type;
|
||||
int scanned;
|
||||
|
||||
do {
|
||||
scanned = ParseWhiteSpace(p, numBytes,
|
||||
&parsePtr->incomplete, &type);
|
||||
p += scanned;
|
||||
numBytes -= scanned;
|
||||
} while (numBytes && (*p == '\n') && (p++,numBytes--));
|
||||
int scanned = ParseAllWhiteSpace(p, numBytes, &incomplete);
|
||||
p += scanned;
|
||||
numBytes -= scanned;
|
||||
|
||||
if ((numBytes == 0) || (*p != '#')) {
|
||||
break;
|
||||
@@ -1039,36 +1022,29 @@ ParseComment(
|
||||
if (parsePtr->commentStart == NULL) {
|
||||
parsePtr->commentStart = p;
|
||||
}
|
||||
|
||||
|
||||
p++;
|
||||
numBytes--;
|
||||
while (numBytes) {
|
||||
if (*p == '\\') {
|
||||
scanned = ParseWhiteSpace(p, numBytes, &parsePtr->incomplete,
|
||||
&type);
|
||||
if (scanned) {
|
||||
p += scanned;
|
||||
numBytes -= scanned;
|
||||
} else {
|
||||
/*
|
||||
* General backslash substitution in comments isn't part
|
||||
* of the formal spec, but test parse-15.47 and history
|
||||
* indicate that it has been the de facto rule. Don't
|
||||
* change it now.
|
||||
*/
|
||||
|
||||
TclParseBackslash(p, numBytes, &scanned, NULL);
|
||||
p += scanned;
|
||||
numBytes -= scanned;
|
||||
}
|
||||
} else {
|
||||
if (*p == '\n') {
|
||||
p++;
|
||||
numBytes--;
|
||||
if (p[-1] == '\n') {
|
||||
break;
|
||||
}
|
||||
if (*p == '\\') {
|
||||
p++;
|
||||
numBytes--;
|
||||
if (numBytes == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
incomplete = (*p == '\n');
|
||||
p++;
|
||||
numBytes--;
|
||||
}
|
||||
parsePtr->commentSize = p - parsePtr->commentStart;
|
||||
}
|
||||
parsePtr->incomplete = incomplete;
|
||||
return (p - src);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1895,7 +1895,7 @@ Tcl_PkgInitStubsCheck(
|
||||
{
|
||||
const char *actualVersion = Tcl_PkgPresent(interp, "Tcl", version, 0);
|
||||
|
||||
if (exact && actualVersion) {
|
||||
if ((exact&1) && actualVersion) {
|
||||
const char *p = version;
|
||||
int count = 0;
|
||||
|
||||
|
||||
+4
-15
@@ -22,7 +22,6 @@
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
int isRootEnsemble;
|
||||
Command cmd;
|
||||
ExtraFrameInfo efi;
|
||||
} ApplyExtraData;
|
||||
@@ -870,7 +869,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;
|
||||
}
|
||||
|
||||
@@ -2634,7 +2633,7 @@ TclNRApplyObjCmd(
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
Proc *procPtr = NULL;
|
||||
Tcl_Obj *lambdaPtr, *nsObjPtr;
|
||||
int result, isRootEnsemble;
|
||||
int result;
|
||||
Tcl_Namespace *nsPtr;
|
||||
ApplyExtraData *extraPtr;
|
||||
|
||||
@@ -2717,15 +2716,9 @@ TclNRApplyObjCmd(
|
||||
extraPtr->efi.fields[0].clientData = lambdaPtr;
|
||||
extraPtr->cmd.clientData = &extraPtr->efi;
|
||||
|
||||
isRootEnsemble = (iPtr->ensembleRewrite.sourceObjs == NULL);
|
||||
if (isRootEnsemble) {
|
||||
iPtr->ensembleRewrite.sourceObjs = objv;
|
||||
iPtr->ensembleRewrite.numRemovedObjs = 1;
|
||||
iPtr->ensembleRewrite.numInsertedObjs = 0;
|
||||
} else {
|
||||
iPtr->ensembleRewrite.numInsertedObjs -= 1;
|
||||
if (TclInitRewriteEnsemble(interp, 1, 0, objv)) {
|
||||
TclNRAddCallback(interp, TclClearRootEnsemble, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
extraPtr->isRootEnsemble = isRootEnsemble;
|
||||
|
||||
result = TclPushProcCallFrame(procPtr, interp, objc, objv, 1);
|
||||
if (result == TCL_OK) {
|
||||
@@ -2743,10 +2736,6 @@ ApplyNR2(
|
||||
{
|
||||
ApplyExtraData *extraPtr = data[0];
|
||||
|
||||
if (extraPtr->isRootEnsemble) {
|
||||
((Interp *) interp)->ensembleRewrite.sourceObjs = NULL;
|
||||
}
|
||||
|
||||
TclStackFree(interp, extraPtr);
|
||||
return result;
|
||||
}
|
||||
|
||||
+9
-11
@@ -24,13 +24,10 @@ const TclIntStubs *tclIntStubsPtr = NULL;
|
||||
const TclIntPlatStubs *tclIntPlatStubsPtr = NULL;
|
||||
|
||||
/*
|
||||
* Use our own isDigit to avoid linking to libc on windows
|
||||
* Use our own ISDIGIT to avoid linking to libc on windows
|
||||
*/
|
||||
|
||||
static int isDigit(const int c)
|
||||
{
|
||||
return (c >= '0' && c <= '9');
|
||||
}
|
||||
#define ISDIGIT(c) (((unsigned)((c)-'0')) <= 9)
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
@@ -54,7 +51,8 @@ MODULE_SCOPE const char *
|
||||
Tcl_InitStubs(
|
||||
Tcl_Interp *interp,
|
||||
const char *version,
|
||||
int exact)
|
||||
int exact,
|
||||
int magic)
|
||||
{
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
const char *actualVersion = NULL;
|
||||
@@ -67,8 +65,8 @@ Tcl_InitStubs(
|
||||
* times. [Bug 615304]
|
||||
*/
|
||||
|
||||
if (!stubsPtr || (stubsPtr->magic != TCL_STUB_MAGIC)) {
|
||||
iPtr->result = "interpreter uses an incompatible stubs mechanism";
|
||||
if (!stubsPtr || (stubsPtr->magic != (((exact&0xff00) >= 0x900) ? magic : TCL_STUB_MAGIC))) {
|
||||
iPtr->result = (char *)"interpreter uses an incompatible stubs mechanism";
|
||||
iPtr->freeProc = TCL_STATIC;
|
||||
return NULL;
|
||||
}
|
||||
@@ -77,12 +75,12 @@ Tcl_InitStubs(
|
||||
if (actualVersion == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
if (exact) {
|
||||
if (exact&1) {
|
||||
const char *p = version;
|
||||
int count = 0;
|
||||
|
||||
while (*p) {
|
||||
count += !isDigit(*p++);
|
||||
count += !ISDIGIT(*p++);
|
||||
}
|
||||
if (count == 1) {
|
||||
const char *q = actualVersion;
|
||||
@@ -91,7 +89,7 @@ Tcl_InitStubs(
|
||||
while (*p && (*p == *q)) {
|
||||
p++; q++;
|
||||
}
|
||||
if (*p || isDigit(*q)) {
|
||||
if (*p || ISDIGIT(*q)) {
|
||||
/* Construct error message */
|
||||
stubsPtr->tcl_PkgRequireEx(interp, "Tcl", version, 1, NULL);
|
||||
return NULL;
|
||||
|
||||
+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;
|
||||
}
|
||||
|
||||
|
||||
+15
-21
@@ -2906,9 +2906,9 @@ ZlibTransformClose(
|
||||
}
|
||||
}
|
||||
} while (e != Z_STREAM_END);
|
||||
e = deflateEnd(&cd->outStream);
|
||||
(void) deflateEnd(&cd->outStream);
|
||||
} else {
|
||||
e = inflateEnd(&cd->inStream);
|
||||
(void) inflateEnd(&cd->inStream);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3344,10 +3344,13 @@ ZlibTransformGetOption(
|
||||
Tcl_DStringAppendElement(dsPtr, "");
|
||||
}
|
||||
} else {
|
||||
int len;
|
||||
const char *str = Tcl_GetStringFromObj(cd->compDictObj, &len);
|
||||
if (cd->compDictObj) {
|
||||
int len;
|
||||
const char *str = Tcl_GetStringFromObj(cd->compDictObj, &len);
|
||||
|
||||
Tcl_DStringAppend(dsPtr, str, len);
|
||||
Tcl_DStringAppend(dsPtr, str, len);
|
||||
}
|
||||
return TCL_OK;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3549,7 +3552,6 @@ ZlibStackChannelTransform(
|
||||
ZlibChannelData *cd = ckalloc(sizeof(ZlibChannelData));
|
||||
Tcl_Channel chan;
|
||||
int wbits = 0;
|
||||
int e;
|
||||
|
||||
if (mode != TCL_ZLIB_STREAM_DEFLATE && mode != TCL_ZLIB_STREAM_INFLATE) {
|
||||
Tcl_Panic("unknown mode: %d", mode);
|
||||
@@ -3603,43 +3605,35 @@ ZlibStackChannelTransform(
|
||||
*/
|
||||
|
||||
if (mode == TCL_ZLIB_STREAM_INFLATE) {
|
||||
e = inflateInit2(&cd->inStream, wbits);
|
||||
if (e != Z_OK) {
|
||||
if (inflateInit2(&cd->inStream, wbits) != Z_OK) {
|
||||
goto error;
|
||||
}
|
||||
cd->inAllocated = DEFAULT_BUFFER_SIZE;
|
||||
cd->inBuffer = ckalloc(cd->inAllocated);
|
||||
if (cd->flags & IN_HEADER) {
|
||||
e = inflateGetHeader(&cd->inStream, &cd->inHeader.header);
|
||||
if (e != Z_OK) {
|
||||
if (inflateGetHeader(&cd->inStream, &cd->inHeader.header) != Z_OK) {
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
if (cd->format == TCL_ZLIB_FORMAT_RAW && cd->compDictObj) {
|
||||
e = SetInflateDictionary(&cd->inStream, cd->compDictObj);
|
||||
if (e != Z_OK) {
|
||||
if (SetInflateDictionary(&cd->inStream, cd->compDictObj) != Z_OK) {
|
||||
goto error;
|
||||
}
|
||||
TclDecrRefCount(cd->compDictObj);
|
||||
cd->compDictObj = NULL;
|
||||
}
|
||||
} else {
|
||||
e = deflateInit2(&cd->outStream, level, Z_DEFLATED, wbits,
|
||||
MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY);
|
||||
if (e != Z_OK) {
|
||||
if (deflateInit2(&cd->outStream, level, Z_DEFLATED, wbits,
|
||||
MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY) != Z_OK) {
|
||||
goto error;
|
||||
}
|
||||
cd->outAllocated = DEFAULT_BUFFER_SIZE;
|
||||
cd->outBuffer = ckalloc(cd->outAllocated);
|
||||
if (cd->flags & OUT_HEADER) {
|
||||
e = deflateSetHeader(&cd->outStream, &cd->outHeader.header);
|
||||
if (e != Z_OK) {
|
||||
if (deflateSetHeader(&cd->outStream, &cd->outHeader.header) != Z_OK) {
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
if (cd->compDictObj) {
|
||||
e = SetDeflateDictionary(&cd->outStream, cd->compDictObj);
|
||||
if (e != Z_OK) {
|
||||
if (SetDeflateDictionary(&cd->outStream, cd->compDictObj) != Z_OK) {
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2928,6 +2928,22 @@ test namespace-53.10 {ensembles: nested rewrite} -setup {
|
||||
0 {1 v}\
|
||||
1 {wrong # args: should be "ns v x z2 a2"}\
|
||||
0 {2 v v2}}
|
||||
test namespace-53.11 {ensembles: nested rewrite} -setup {
|
||||
namespace eval ns {
|
||||
namespace export x
|
||||
namespace eval x {
|
||||
proc z2 {a1 a2} {list 2 $a1 $a2}
|
||||
namespace export z*
|
||||
namespace ensemble create -parameter p
|
||||
}
|
||||
namespace ensemble create
|
||||
}
|
||||
} -body {
|
||||
list [catch {ns x 1 z2} msg] $msg
|
||||
} -cleanup {
|
||||
namespace delete ns
|
||||
unset -nocomplain msg
|
||||
} -result {1 {wrong # args: should be "ns x 1 z2 a2"}}
|
||||
|
||||
test namespace-54.1 {leak on namespace deletion} -constraints {memory} \
|
||||
-setup {
|
||||
@@ -2953,6 +2969,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 ...?"}}
|
||||
|
||||
@@ -401,6 +401,26 @@ test zlib-8.16 {Bug 3603553: buffer transfer with large writes} -setup {
|
||||
} -cleanup {
|
||||
removeFile $file
|
||||
} -result 57647
|
||||
test zlib-8.17 {Bug dd260aaf: fconfigure} -setup {
|
||||
lassign [chan pipe] inSide outSide
|
||||
} -constraints zlib -body {
|
||||
zlib push inflate $inSide
|
||||
zlib push deflate $outSide
|
||||
list [chan configure $inSide -dictionary] [chan configure $outSide -dictionary]
|
||||
} -cleanup {
|
||||
catch {close $inSide}
|
||||
catch {close $outSide}
|
||||
} -result {{} {}}
|
||||
test zlib-8.18 {Bug dd260aaf: fconfigure} -setup {
|
||||
lassign [chan pipe] inSide outSide
|
||||
} -constraints zlib -body {
|
||||
zlib push inflate $inSide -dictionary "one two"
|
||||
zlib push deflate $outSide -dictionary "one two"
|
||||
list [chan configure $inSide -dictionary] [chan configure $outSide -dictionary]
|
||||
} -cleanup {
|
||||
catch {close $inSide}
|
||||
catch {close $outSide}
|
||||
} -result {{one two} {one two}}
|
||||
|
||||
test zlib-9.1 "check fcopy with push" -constraints zlib -setup {
|
||||
set sfile [makeFile {} testsrc.gz]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
+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