Compare commits
159
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ea11870f5b | ||
|
|
27696b490b | ||
|
|
d0af5aa92c | ||
|
|
9faead9d18 | ||
|
|
404eadfdaf | ||
|
|
722ba1aa44 | ||
|
|
4cead413c9 | ||
|
|
2501dbb8d0 | ||
|
|
acb9c613f1 | ||
|
|
ad4538af95 | ||
|
|
c2e7b1ce36 | ||
|
|
f846b3f965 | ||
|
|
a22b8736ec | ||
|
|
f5bf1de995 | ||
|
|
6f9ac81ae9 | ||
|
|
c947326c4a | ||
|
|
9b1a5dc878 | ||
|
|
4bc50a0a12 | ||
|
|
26532df53f | ||
|
|
0b8d92332a | ||
|
|
67a6300cc4 | ||
|
|
fd72878261 | ||
|
|
2edc274601 | ||
|
|
89796adf9c | ||
|
|
11b61660d2 | ||
|
|
d214692a28 | ||
|
|
eec270dc08 | ||
|
|
34d3a97939 | ||
|
|
c3c52cf7b0 | ||
|
|
96d7deb99b | ||
|
|
0ceae7a885 | ||
|
|
e19d125606 | ||
|
|
68432b7ed1 | ||
|
|
f1f3820560 | ||
|
|
363cf0a6f1 | ||
|
|
508b6fc60d | ||
|
|
75f3cb9d07 | ||
|
|
31ec149e21 | ||
|
|
6076256c3f | ||
|
|
25f7d3b86e | ||
|
|
464153fecd | ||
|
|
139a16f600 | ||
|
|
600487a9d6 | ||
|
|
a2962cc586 | ||
|
|
d6ae741f7f | ||
|
|
48e3873f19 | ||
|
|
57a42f683c | ||
|
|
b2e1bb03b1 | ||
|
|
47620e4ba8 | ||
|
|
f290d19b27 | ||
|
|
1446838d71 | ||
|
|
8c8c1a6415 | ||
|
|
07f3d3e393 | ||
|
|
85d1666247 | ||
|
|
bf0a1dc6c5 | ||
|
|
31e1e2a8c4 | ||
|
|
8f4ed81159 | ||
|
|
966906b7ae | ||
|
|
20e8eaedc8 | ||
|
|
7b6eaf23e9 | ||
|
|
bf33e5524b | ||
|
|
23c3438aee | ||
|
|
21124cf6ab | ||
|
|
1694cf05a6 | ||
|
|
65bd912b77 | ||
|
|
dd879c794d | ||
|
|
1481e6f3da | ||
|
|
42c2792287 | ||
|
|
08826b79fe | ||
|
|
d5617720bb | ||
|
|
e95143affd | ||
|
|
ced0d271ff | ||
|
|
38e85a2dbe | ||
|
|
221b47806c | ||
|
|
286034431c | ||
|
|
04633c731b | ||
|
|
b28ae0fbb5 | ||
|
|
6c2c1397ff | ||
|
|
16dc425318 | ||
|
|
7a41668df0 | ||
|
|
ef99853da4 | ||
|
|
cb9a441bb9 | ||
|
|
3619c13393 | ||
|
|
f05e229780 | ||
|
|
5cae882ff3 | ||
|
|
0592038cf9 | ||
|
|
fab681eb11 | ||
|
|
01e94e53ed | ||
|
|
e5320ae0d5 | ||
|
|
eccf18644f | ||
|
|
e4b872fc07 | ||
|
|
8445a00210 | ||
|
|
345d7cf628 | ||
|
|
482ab2e9dc | ||
|
|
751453253c | ||
|
|
fa88074963 | ||
|
|
d418226edb | ||
|
|
bdfafd3539 | ||
|
|
819b87f1df | ||
|
|
b36880503c | ||
|
|
3c2b67a4d3 | ||
|
|
08c3a9b76b | ||
|
|
dd519c7dac | ||
|
|
f67a341fce | ||
|
|
c755ef0815 | ||
|
|
99d3f3c9f3 | ||
|
|
0b3a8804eb | ||
|
|
92a9b04a12 | ||
|
|
a4532de5a0 | ||
|
|
b4024d86d1 | ||
|
|
58f5175075 | ||
|
|
5aee84a3f3 | ||
|
|
e52789c557 | ||
|
|
67cfc8e178 | ||
|
|
dca8fae05f | ||
|
|
5512629c55 | ||
|
|
af7e16b8e4 | ||
|
|
63e94b434f | ||
|
|
41a668a515 | ||
|
|
d0a8ae5cf7 | ||
|
|
7f43feafd5 | ||
|
|
2b502a4b2b | ||
|
|
f95100b44a | ||
|
|
0d4e358f5e | ||
|
|
5f7157f3a2 | ||
|
|
7cde8a22a1 | ||
|
|
535895e577 | ||
|
|
366828918a | ||
|
|
1195cdbd77 | ||
|
|
5330c4e5d3 | ||
|
|
52799e58d6 | ||
|
|
46d0e89d6e | ||
|
|
c9bd1f3334 | ||
|
|
6d990b9c83 | ||
|
|
84f95a3ef4 | ||
|
|
008944a5c3 | ||
|
|
7a4ad0872e | ||
|
|
885379e2cc | ||
|
|
76d0eb32fc | ||
|
|
76f6131b81 | ||
|
|
1438a1b7f7 | ||
|
|
024bab4116 | ||
|
|
8e5a574ac0 | ||
|
|
42eab451a6 | ||
|
|
dcf6957535 | ||
|
|
ac974ca777 | ||
|
|
820909f2f1 | ||
|
|
6a82cdfc6a | ||
|
|
c8ff1de738 | ||
|
|
73c4c7d5e5 | ||
|
|
496861c695 | ||
|
|
8597e498b4 | ||
|
|
f44a15f93f | ||
|
|
8920f52cc1 | ||
|
|
8451552b85 | ||
|
|
62147747fc | ||
|
|
abb02f83eb | ||
|
|
b6397860f2 | ||
|
|
516ade7155 |
@@ -1,5 +1,5 @@
|
||||
README: Tcl
|
||||
This is the Tcl 8.6.5 source distribution.
|
||||
This is the Tcl 8.6.6 source distribution.
|
||||
http://sourceforge.net/projects/tcl/files/Tcl/
|
||||
You can get any source release of Tcl from the URL above.
|
||||
|
||||
|
||||
@@ -8624,3 +8624,77 @@ improvements to regexp engine from Postgres (lane,porter,fellows,seltenreich)
|
||||
2016-02-22 (bug)[9b4702] [info exists env(missing)] kills trace (nijtmans)
|
||||
|
||||
--- Released 8.6.5, February 29, 2016 --- http://core.tcl.tk/tcl/ for details
|
||||
|
||||
2016-03-01 (bug)[803042] mem leak due to reference cycle (porter)
|
||||
|
||||
2016-03-08 (bug)[bbc304] reflected watch race condition (porter)
|
||||
|
||||
2016-03-17 (bug)[fadc99] compile-5.3 (rodriguez,porter)
|
||||
|
||||
2016-03-17 (enhancement)[1a25fd] compile [variable ${ns}::v] (porter)
|
||||
|
||||
2016-03-20 (bug)[1af8de] crash in compiled [string replace] (harder,fellows)
|
||||
|
||||
2016-03-21 (bug)[d30718] segv in notifier finalize (hirofumi,nijtmans)
|
||||
|
||||
2016-03-23 (enhancement)[7d0db7] parallel make (yarda,nijtmans)
|
||||
|
||||
2016-03-23 [f12535] enable test bindings customization (vogel,nijtmans)
|
||||
|
||||
2016-04-04 (bug)[47ac84] compiled [lreplace] fixes (aspect,ferrieux,fellows)
|
||||
*** POTENTIAL INCOMPATIBILITY ***
|
||||
|
||||
2016-04-08 (bug)[866368] RE \w includes 'Punctuation Connector' (nijtmans)
|
||||
|
||||
2016-04-08 (bug)[2538f3] Win crash Tcl_OpenTcpServer() (griffin)
|
||||
|
||||
2016-04-10 [07d13d] Restore TclBlend support lost in 8.6.1 (buratti)
|
||||
|
||||
2016-05-13 (bug)[3154ea] Mem corruption in assembler exceptions (tkob,kenny)
|
||||
|
||||
2016-05-13 (bug) registry package support any Unicode env (nijtmans)
|
||||
=> registry 1.3.2
|
||||
|
||||
2016-05-21 (bug)[f7d4e] [namespace delete] performance (fellows)
|
||||
|
||||
2016-06-02 (TIP 447) execution time verbosity option (cerutti)
|
||||
=> tcltest 2.4.0
|
||||
|
||||
2016-06-16 (bug)[16828b] crash due to [vwait] trace undo fail (dah,porter)
|
||||
|
||||
2016-06-16 (enhancement)[4b61af] good [info frame] from more cases (beric)
|
||||
|
||||
2016-06-21 (bug)[c383eb] crash in [glob -path a] (oehlmann,porter)
|
||||
|
||||
2016-06-21 (update) Update Unicode data to 9.0 (nijtmans)
|
||||
*** POTENTIAL INCOMPATIBILITY ***
|
||||
|
||||
2016-06-22 (bug)[16896d] Tcl_DString tolerate append to self. (dah,porter)
|
||||
|
||||
2016-06-23 (bug)[d55322] crash in [dict update] (yorick,fellows)
|
||||
|
||||
2016-06-27 (bug)[dd260a] crash in [chan configure -dictionary] (madden,aspect)
|
||||
|
||||
2016-07-02 (bug)[f961d7] usage message with parameters with spaces (porter)
|
||||
*** POTENTIAL INCOMPATIBILITY ***
|
||||
|
||||
2016-07-02 (enhancement)[09fabc] Sort order of -relateddir (lanam)
|
||||
|
||||
2016-07-07 (bug)[5d7ca0] Win: [file executable] for .cmd and .ps1 (nadkarni)
|
||||
*** POTENTIAL INCOMPATIBILITY ***
|
||||
|
||||
2016-07-08 (bug)[a47641] [file normalize] & Windows junctions (nadkarni)
|
||||
|
||||
2016-07-09 [ae61a6] [file] handling of Win hardcoded names (CON) (nadkarni)
|
||||
*** POTENTIAL INCOMPATIBILITY ***
|
||||
|
||||
2016-07-09 [3613671] [file owned] (more) useful on Win (nadkarni)
|
||||
|
||||
2016-07-09 (bug)[1493a4] [namespace upvar] use of resolvers (beric,fellows)
|
||||
*** POTENTIAL INCOMPATIBILITY ***
|
||||
|
||||
2016-07-10 (bug)[da340d] integer division in clock math (nadkarni)
|
||||
|
||||
2016-07-20 tzdata updated to Olson's tzdata2016f (venkat)
|
||||
|
||||
--- Released 8.6.6, July 27, 2016 --- http://core.tcl.tk/tcl/ for details
|
||||
|
||||
+1
-1
@@ -164,7 +164,7 @@ The source interpreter will have its result reset by this operation.
|
||||
.SH "DEPRECATED INTERFACES"
|
||||
.SS "OLD STRING PROCEDURES"
|
||||
.PP
|
||||
Use of the following procedures (is deprecated
|
||||
Use of the following procedures is deprecated
|
||||
since they manipulate the Tcl result as a string.
|
||||
Procedures such as \fBTcl_SetObjResult\fR
|
||||
that manipulate the result as a value
|
||||
|
||||
+20
-6
@@ -287,12 +287,14 @@ slow destinations like network sockets.
|
||||
.RS
|
||||
.PP
|
||||
The \fBchan copy\fR command transfers data from \fIinputChan\fR until
|
||||
end of file or \fIsize\fR bytes have been transferred. If no
|
||||
\fB\-size\fR argument is given, then the copy goes until end of file.
|
||||
All the data read from \fIinputChan\fR is copied to \fIoutputChan\fR.
|
||||
Without the \fB\-command\fR option, \fBchan copy\fR blocks until the
|
||||
copy is complete and returns the number of bytes written to
|
||||
\fIoutputChan\fR.
|
||||
end of file or \fIsize\fR bytes or characters have been transferred;
|
||||
\fIsize\fR is in bytes if the two channels are using the same encoding,
|
||||
and is in characters otherwise. If no \fB\-size\fR argument is given,
|
||||
then the copy goes until end of file. All the data read from
|
||||
\fIinputChan\fR is copied to \fIoutputChan\fR. Without the
|
||||
\fB\-command\fR option, \fBchan copy\fR blocks until the copy is
|
||||
complete and returns the number of bytes or characters (using the same
|
||||
rules as for the \fB\-size\fR option) written to \fIoutputChan\fR.
|
||||
.PP
|
||||
The \fB\-command\fR argument makes \fBchan copy\fR work in the
|
||||
background. In this case it returns immediately and the
|
||||
@@ -547,6 +549,18 @@ this, spawn with "2>@" or
|
||||
">@" redirection operators onto the write side of a pipe, and then
|
||||
immediately close it in the parent. This is necessary to get an EOF on
|
||||
the read side once the child has exited or otherwise closed its output.
|
||||
.RS
|
||||
.PP
|
||||
Note that the pipe buffering semantics can vary at the operating system level
|
||||
substantially; it is not safe to assume that a write performed on the output
|
||||
side of the pipe will appear instantly to the input side. This is a
|
||||
fundamental difference and Tcl cannot conceal it. The overall stream semantics
|
||||
\fIare\fR compatible, so blocking reads and writes will not see most of the
|
||||
differences, but the details of what exactly gets written when are not. This
|
||||
is most likely to show up when using pipelines for testing; care should be
|
||||
taken to ensure that deadlocks do not occur and that potential short reads are
|
||||
allowed for.
|
||||
.RE
|
||||
.VE 8.6
|
||||
.TP
|
||||
\fBchan pop \fIchannelId\fR
|
||||
|
||||
+3
-2
@@ -271,8 +271,9 @@ limitation as \fBexec\fR wants to communicate over pipes. The Expect
|
||||
extension addresses this issue when communicating with a TUI application.
|
||||
.PP
|
||||
When attempting to execute an application, \fBexec\fR first searches for
|
||||
the name as it was specified. Then, in order, \fB.com\fR, \fB.exe\fR, and
|
||||
\fB.bat\fR are appended to the end of the specified name and it searches
|
||||
the name as it was specified. Then, in order,
|
||||
\fB.com\fR, \fB.exe\fR, \fB.bat\fR and \fB.cmd\fR
|
||||
are appended to the end of the specified name and it searches
|
||||
for the longer name. If a directory name was not specified as part of the
|
||||
application name, the following directories are automatically searched in
|
||||
order when attempting to locate the application:
|
||||
|
||||
+9
-3
@@ -25,12 +25,15 @@ network sockets.
|
||||
.PP
|
||||
The \fBfcopy\fR
|
||||
command transfers data from \fIinchan\fR until end of file
|
||||
or \fIsize\fR bytes have been
|
||||
transferred. If no \fB\-size\fR argument is given,
|
||||
or \fIsize\fR bytes or characters have been
|
||||
transferred; \fIsize\fR is in bytes if the two channels are using the
|
||||
same encoding, and is in characters otherwise.
|
||||
If no \fB\-size\fR argument is given,
|
||||
then the copy goes until end of file.
|
||||
All the data read from \fIinchan\fR is copied to \fIoutchan\fR.
|
||||
Without the \fB\-command\fR option, \fBfcopy\fR blocks until the copy is complete
|
||||
and returns the number of bytes written to \fIoutchan\fR.
|
||||
and returns the number of bytes or characters (using the same rules as
|
||||
for the \fB\-size\fR option) written to \fIoutchan\fR.
|
||||
.PP
|
||||
The \fB\-command\fR argument makes \fBfcopy\fR work in the background.
|
||||
In this case it returns immediately and the \fIcallback\fR is invoked
|
||||
@@ -174,3 +177,6 @@ vwait done
|
||||
eof(n), fblocked(n), fconfigure(n), file(n)
|
||||
.SH KEYWORDS
|
||||
blocking, channel, end of line, end of file, nonblocking, read, translation
|
||||
'\" Local Variables:
|
||||
'\" mode: nroff
|
||||
'\" End:
|
||||
|
||||
+6
-5
@@ -162,7 +162,9 @@ returns \fB/home\fR (or something similar).
|
||||
\fBfile executable \fIname\fR
|
||||
.
|
||||
Returns \fB1\fR if file \fIname\fR is executable by the current user,
|
||||
\fB0\fR otherwise.
|
||||
\fB0\fR otherwise. On Windows, which does not have an executable attribute,
|
||||
the command treats all directories and any files with extensions
|
||||
\fBexe\fR, \fBcom\fR, \fBcmd\fR or \fBbat\fR as executable.
|
||||
.TP
|
||||
\fBfile exists \fIname\fR
|
||||
.
|
||||
@@ -482,10 +484,9 @@ not the effective ones.
|
||||
.TP
|
||||
\fBWindows\fR\0\0\0\0
|
||||
.
|
||||
The \fBfile owned\fR subcommand currently always reports that the current user
|
||||
is the owner of the file, without regard for what the operating system
|
||||
believes to be true, making an ownership test useless. This issue (#3613671)
|
||||
may be fixed in a future release of Tcl.
|
||||
The \fBfile owned\fR subcommand uses the user identifier (SID) of
|
||||
the process token, not the thread token which may be impersonating
|
||||
some other user.
|
||||
.SH EXAMPLES
|
||||
.PP
|
||||
This procedure shows how to search for C files in a given directory
|
||||
|
||||
+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
|
||||
|
||||
+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
|
||||
|
||||
+16
-3
@@ -256,20 +256,33 @@ static const chr brbacks[] = { /* \s within brackets */
|
||||
CHR('s'), CHR('p'), CHR('a'), CHR('c'), CHR('e'),
|
||||
CHR(':'), CHR(']')
|
||||
};
|
||||
|
||||
#define PUNCT_CONN \
|
||||
CHR('_'), \
|
||||
0x203f /* UNDERTIE */, \
|
||||
0x2040 /* CHARACTER TIE */,\
|
||||
0x2054 /* INVERTED UNDERTIE */,\
|
||||
0xfe33 /* PRESENTATION FORM FOR VERTICAL LOW LINE */, \
|
||||
0xfe34 /* PRESENTATION FORM FOR VERTICAL WAVY LOW LINE */, \
|
||||
0xfe4d /* DASHED LOW LINE */, \
|
||||
0xfe4e /* CENTRELINE LOW LINE */, \
|
||||
0xfe4f /* WAVY LOW LINE */, \
|
||||
0xff3f /* FULLWIDTH LOW LINE */
|
||||
|
||||
static const chr backw[] = { /* \w */
|
||||
CHR('['), CHR('['), CHR(':'),
|
||||
CHR('a'), CHR('l'), CHR('n'), CHR('u'), CHR('m'),
|
||||
CHR(':'), CHR(']'), CHR('_'), CHR(']')
|
||||
CHR(':'), CHR(']'), PUNCT_CONN, CHR(']')
|
||||
};
|
||||
static const chr backW[] = { /* \W */
|
||||
CHR('['), CHR('^'), CHR('['), CHR(':'),
|
||||
CHR('a'), CHR('l'), CHR('n'), CHR('u'), CHR('m'),
|
||||
CHR(':'), CHR(']'), CHR('_'), CHR(']')
|
||||
CHR(':'), CHR(']'), PUNCT_CONN, CHR(']')
|
||||
};
|
||||
static const chr brbackw[] = { /* \w within brackets */
|
||||
CHR('['), CHR(':'),
|
||||
CHR('a'), CHR('l'), CHR('n'), CHR('u'), CHR('m'),
|
||||
CHR(':'), CHR(']'), CHR('_')
|
||||
CHR(':'), CHR(']'), PUNCT_CONN
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
+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
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -56,10 +56,10 @@ extern "C" {
|
||||
#define TCL_MAJOR_VERSION 8
|
||||
#define TCL_MINOR_VERSION 6
|
||||
#define TCL_RELEASE_LEVEL TCL_FINAL_RELEASE
|
||||
#define TCL_RELEASE_SERIAL 5
|
||||
#define TCL_RELEASE_SERIAL 6
|
||||
|
||||
#define TCL_VERSION "8.6"
|
||||
#define TCL_PATCH_LEVEL "8.6.5"
|
||||
#define TCL_PATCH_LEVEL "8.6.6"
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------------
|
||||
|
||||
@@ -3984,10 +3984,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;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+16
-11
@@ -128,7 +128,7 @@ static void MathFuncWrongNumArgs(Tcl_Interp *interp, int expected,
|
||||
int actual, Tcl_Obj *const *objv);
|
||||
static Tcl_NRPostProc NRCoroutineCallerCallback;
|
||||
static Tcl_NRPostProc NRCoroutineExitCallback;
|
||||
static int NRCommand(ClientData data[], Tcl_Interp *interp, int result);
|
||||
static Tcl_NRPostProc NRCommand;
|
||||
|
||||
static Tcl_ObjCmdProc OldMathFuncProc;
|
||||
static void OldMathFuncDeleteProc(ClientData clientData);
|
||||
@@ -146,7 +146,6 @@ static int TEOV_RunEnterTraces(Tcl_Interp *interp,
|
||||
Command **cmdPtrPtr, Tcl_Obj *commandPtr, int objc,
|
||||
Tcl_Obj *const objv[]);
|
||||
static Tcl_NRPostProc RewindCoroutineCallback;
|
||||
static Tcl_NRPostProc TailcallCleanup;
|
||||
static Tcl_NRPostProc TEOEx_ByteCodeCallback;
|
||||
static Tcl_NRPostProc TEOEx_ListCallback;
|
||||
static Tcl_NRPostProc TEOV_Error;
|
||||
@@ -723,9 +722,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.
|
||||
@@ -4220,7 +4217,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);
|
||||
@@ -8373,7 +8370,7 @@ TclNRTailcallEval(
|
||||
* a now-gone namespace: cleanup and return.
|
||||
*/
|
||||
|
||||
TailcallCleanup(data, interp, result);
|
||||
Tcl_DecrRefCount(listPtr);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -8382,18 +8379,26 @@ TclNRTailcallEval(
|
||||
*/
|
||||
|
||||
TclMarkTailcall(interp);
|
||||
TclNRAddCallback(interp, TailcallCleanup, listPtr, NULL, NULL,NULL);
|
||||
TclNRAddCallback(interp, TclNRReleaseValues, listPtr, NULL, NULL,NULL);
|
||||
iPtr->lookupNsPtr = (Namespace *) nsPtr;
|
||||
return TclNREvalObjv(interp, objc-1, objv+1, 0, NULL);
|
||||
}
|
||||
|
||||
static int
|
||||
TailcallCleanup(
|
||||
int
|
||||
TclNRReleaseValues(
|
||||
ClientData data[],
|
||||
Tcl_Interp *interp,
|
||||
int result)
|
||||
{
|
||||
Tcl_DecrRefCount((Tcl_Obj *) data[0]);
|
||||
int i = 0;
|
||||
while (i < 4) {
|
||||
if (data[i]) {
|
||||
Tcl_DecrRefCount((Tcl_Obj *) data[i]);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -1499,7 +1499,19 @@ GetJulianDayFromEraYearMonthDay(
|
||||
* Try an initial conversion in the Gregorian calendar.
|
||||
*/
|
||||
|
||||
#if 0 /* BUG http://core.tcl.tk/tcl/tktview?name=da340d4f32 */
|
||||
ym1o4 = ym1 / 4;
|
||||
#else
|
||||
/*
|
||||
* Have to make sure quotient is truncated towards 0 when negative.
|
||||
* See above bug for details. The casts are necessary.
|
||||
*/
|
||||
if (ym1 >= 0)
|
||||
ym1o4 = ym1 / 4;
|
||||
else {
|
||||
ym1o4 = - (int) (((unsigned int) -ym1) / 4);
|
||||
}
|
||||
#endif
|
||||
if (ym1 % 4 < 0) {
|
||||
ym1o4--;
|
||||
}
|
||||
|
||||
+31
-12
@@ -12,6 +12,9 @@
|
||||
*/
|
||||
|
||||
#include "tclInt.h"
|
||||
#ifdef _WIN32
|
||||
# include "tclWinInt.h"
|
||||
#endif
|
||||
#include <locale.h>
|
||||
|
||||
/*
|
||||
@@ -1157,6 +1160,16 @@ FileAttrAccessTimeCmd(
|
||||
if (GetStatBuf(interp, objv[1], Tcl_FSStat, &buf) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
#if defined(_WIN32)
|
||||
/* We use a value of 0 to indicate the access time not available */
|
||||
if (buf.st_atime == 0) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"could not get access time for file \"%s\"",
|
||||
TclGetString(objv[1])));
|
||||
return TCL_ERROR;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (objc == 3) {
|
||||
/*
|
||||
* Need separate variable for reading longs from an object on 64-bit
|
||||
@@ -1229,6 +1242,15 @@ FileAttrModifyTimeCmd(
|
||||
if (GetStatBuf(interp, objv[1], Tcl_FSStat, &buf) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
#if defined(_WIN32)
|
||||
/* We use a value of 0 to indicate the modification time not available */
|
||||
if (buf.st_mtime == 0) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"could not get modification time for file \"%s\"",
|
||||
TclGetString(objv[1])));
|
||||
return TCL_ERROR;
|
||||
}
|
||||
#endif
|
||||
if (objc == 3) {
|
||||
/*
|
||||
* Need separate variable for reading longs from an object on 64-bit
|
||||
@@ -1574,28 +1596,25 @@ FileAttrIsOwnedCmd(
|
||||
int objc,
|
||||
Tcl_Obj *const objv[])
|
||||
{
|
||||
#ifdef __CYGWIN__
|
||||
#define geteuid() (short)(geteuid)()
|
||||
#endif
|
||||
#if !defined(_WIN32)
|
||||
Tcl_StatBuf buf;
|
||||
#endif
|
||||
int value = 0;
|
||||
|
||||
if (objc != 2) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "name");
|
||||
return TCL_ERROR;
|
||||
}
|
||||
if (GetStatBuf(NULL, objv[1], Tcl_FSStat, &buf) == TCL_OK) {
|
||||
/*
|
||||
* For Windows, there are no user ids associated with a file, so we
|
||||
* always return 1.
|
||||
*
|
||||
* TODO: use GetSecurityInfo to get the real owner of the file and
|
||||
* test for equivalence to the current user.
|
||||
*/
|
||||
|
||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
||||
value = 1;
|
||||
#if defined(_WIN32)
|
||||
value = TclWinFileOwned(objv[1]);
|
||||
#else
|
||||
if (GetStatBuf(NULL, objv[1], Tcl_FSStat, &buf) == TCL_OK) {
|
||||
value = (geteuid() == buf.st_uid);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
Tcl_SetObjResult(interp, Tcl_NewBooleanObj(value));
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
+4
-5
@@ -105,8 +105,7 @@ typedef struct SortInfo {
|
||||
*/
|
||||
|
||||
static int DictionaryCompare(const char *left, const char *right);
|
||||
static int IfConditionCallback(ClientData data[],
|
||||
Tcl_Interp *interp, int result);
|
||||
static Tcl_NRPostProc IfConditionCallback;
|
||||
static int InfoArgsCmd(ClientData dummy, Tcl_Interp *interp,
|
||||
int objc, Tcl_Obj *const objv[]);
|
||||
static int InfoBodyCmd(ClientData dummy, Tcl_Interp *interp,
|
||||
@@ -1203,7 +1202,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 +1637,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;
|
||||
}
|
||||
@@ -2755,7 +2754,7 @@ Tcl_LreplaceObjCmd(
|
||||
* (to allow for replacing the last elem).
|
||||
*/
|
||||
|
||||
if ((first >= listLen) && (listLen > 0)) {
|
||||
if ((first > listLen) && (listLen > 0)) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"list doesn't contain element %s", TclGetString(objv[2])));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "LREPLACE", "BADIDX",
|
||||
|
||||
+4
-8
@@ -22,14 +22,10 @@
|
||||
|
||||
static inline Tcl_Obj * During(Tcl_Interp *interp, int resultCode,
|
||||
Tcl_Obj *oldOptions, Tcl_Obj *errorInfo);
|
||||
static int SwitchPostProc(ClientData data[], Tcl_Interp *interp,
|
||||
int result);
|
||||
static int TryPostBody(ClientData data[], Tcl_Interp *interp,
|
||||
int result);
|
||||
static int TryPostFinal(ClientData data[], Tcl_Interp *interp,
|
||||
int result);
|
||||
static int TryPostHandler(ClientData data[], Tcl_Interp *interp,
|
||||
int result);
|
||||
static Tcl_NRPostProc SwitchPostProc;
|
||||
static Tcl_NRPostProc TryPostBody;
|
||||
static Tcl_NRPostProc TryPostFinal;
|
||||
static Tcl_NRPostProc TryPostHandler;
|
||||
static int UniCharIsAscii(int character);
|
||||
static int UniCharIsHexDigit(int character);
|
||||
|
||||
|
||||
+40
-7
@@ -1488,6 +1488,15 @@ TclCompileLreplaceCmd(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* idx1, idx2 are now in canonical form:
|
||||
*
|
||||
* - integer: [0,len+1]
|
||||
* - end index: INDEX_END
|
||||
* - -ive offset: INDEX_END-[len-1,0]
|
||||
* - +ive offset: INDEX_END+1
|
||||
*/
|
||||
|
||||
/*
|
||||
* Compilation fails when one index is end-based but the other isn't.
|
||||
* Fixing this will require more bytecodes, but this is a workaround for
|
||||
@@ -1521,6 +1530,9 @@ TclCompileLreplaceCmd(
|
||||
idx1 = 0;
|
||||
goto dropEnd;
|
||||
} else {
|
||||
if (idx2 < idx1) {
|
||||
idx2 = idx1 - 1;
|
||||
}
|
||||
if (idx1 > 0) {
|
||||
tmpObj = Tcl_NewIntObj(idx1);
|
||||
Tcl_IncrRefCount(tmpObj);
|
||||
@@ -1548,9 +1560,7 @@ TclCompileLreplaceCmd(
|
||||
idx1 = 0;
|
||||
goto replaceTail;
|
||||
} else {
|
||||
if (idx1 > 0 && idx2 > 0 && idx2 < idx1) {
|
||||
idx2 = idx1 - 1;
|
||||
} else if (idx1 < 0 && idx2 < 0 && idx2 < idx1) {
|
||||
if (idx2 < idx1) {
|
||||
idx2 = idx1 - 1;
|
||||
}
|
||||
if (idx1 > 0) {
|
||||
@@ -1566,7 +1576,7 @@ TclCompileLreplaceCmd(
|
||||
* operate on.
|
||||
*/
|
||||
|
||||
dropAll:
|
||||
dropAll: /* This just ensures the arg is a list. */
|
||||
TclEmitOpcode( INST_LIST_LENGTH, envPtr);
|
||||
TclEmitOpcode( INST_POP, envPtr);
|
||||
PushStringLiteral(envPtr, "");
|
||||
@@ -1579,12 +1589,21 @@ TclCompileLreplaceCmd(
|
||||
|
||||
dropRange:
|
||||
if (tmpObj != NULL) {
|
||||
/*
|
||||
* Emit bytecode to check the list length.
|
||||
*/
|
||||
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
TclEmitOpcode( INST_LIST_LENGTH, envPtr);
|
||||
TclEmitPush(TclAddLiteralObj(envPtr, tmpObj, NULL), envPtr);
|
||||
TclEmitOpcode( INST_GT, envPtr);
|
||||
TclEmitOpcode( INST_GE, envPtr);
|
||||
offset = CurrentOffset(envPtr);
|
||||
TclEmitInstInt1( INST_JUMP_TRUE1, 0, envPtr);
|
||||
|
||||
/*
|
||||
* Emit an error if we've been given an empty list.
|
||||
*/
|
||||
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
TclEmitOpcode( INST_LIST_LENGTH, envPtr);
|
||||
offset2 = CurrentOffset(envPtr);
|
||||
@@ -1635,16 +1654,30 @@ TclCompileLreplaceCmd(
|
||||
|
||||
replaceRange:
|
||||
if (tmpObj != NULL) {
|
||||
/*
|
||||
* Emit bytecode to check the list length.
|
||||
*/
|
||||
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
TclEmitOpcode( INST_LIST_LENGTH, envPtr);
|
||||
|
||||
/*
|
||||
* Check the list length vs idx1.
|
||||
*/
|
||||
|
||||
TclEmitPush(TclAddLiteralObj(envPtr, tmpObj, NULL), envPtr);
|
||||
TclEmitOpcode( INST_GT, envPtr);
|
||||
TclEmitOpcode( INST_GE, envPtr);
|
||||
offset = CurrentOffset(envPtr);
|
||||
TclEmitInstInt1( INST_JUMP_TRUE1, 0, envPtr);
|
||||
|
||||
/*
|
||||
* Emit an error if we've been given an empty list.
|
||||
*/
|
||||
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
TclEmitOpcode( INST_LIST_LENGTH, envPtr);
|
||||
offset2 = CurrentOffset(envPtr);
|
||||
TclEmitInstInt1( INST_JUMP_TRUE1, 0, envPtr);
|
||||
TclEmitInstInt1( INST_JUMP_FALSE1, 0, envPtr);
|
||||
TclEmitPush(TclAddLiteralObj(envPtr, Tcl_ObjPrintf(
|
||||
"list doesn't contain element %d", idx1), NULL), envPtr);
|
||||
CompileReturnInternal(envPtr, INST_RETURN_IMM, TCL_ERROR, 0,
|
||||
|
||||
@@ -3239,8 +3239,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
|
||||
|
||||
|
||||
+6
-12
@@ -70,18 +70,12 @@ static inline void DeleteChainTable(struct Dict *dict);
|
||||
static inline Tcl_HashEntry *CreateChainEntry(struct Dict *dict,
|
||||
Tcl_Obj *keyPtr, int *newPtr);
|
||||
static inline int DeleteChainEntry(struct Dict *dict, Tcl_Obj *keyPtr);
|
||||
static int FinalizeDictUpdate(ClientData data[],
|
||||
Tcl_Interp *interp, int result);
|
||||
static int FinalizeDictWith(ClientData data[],
|
||||
Tcl_Interp *interp, int result);
|
||||
static int DictForNRCmd(ClientData dummy, Tcl_Interp *interp,
|
||||
int objc, Tcl_Obj *const *objv);
|
||||
static int DictMapNRCmd(ClientData dummy, Tcl_Interp *interp,
|
||||
int objc, Tcl_Obj *const *objv);
|
||||
static int DictForLoopCallback(ClientData data[],
|
||||
Tcl_Interp *interp, int result);
|
||||
static int DictMapLoopCallback(ClientData data[],
|
||||
Tcl_Interp *interp, int result);
|
||||
static Tcl_NRPostProc FinalizeDictUpdate;
|
||||
static Tcl_NRPostProc FinalizeDictWith;
|
||||
static Tcl_ObjCmdProc DictForNRCmd;
|
||||
static Tcl_ObjCmdProc DictMapNRCmd;
|
||||
static Tcl_NRPostProc DictForLoopCallback;
|
||||
static Tcl_NRPostProc DictMapLoopCallback;
|
||||
|
||||
/*
|
||||
* Table of dict subcommand names and implementations.
|
||||
|
||||
+134
-1
@@ -6,7 +6,7 @@
|
||||
*
|
||||
* Copyright (c) 1996-1998 Sun Microsystems, Inc.
|
||||
* Copyright (c) 2001 by Kevin B. Kenny. All rights reserved.
|
||||
* Copyright (c) 2013 Donal K. Fellows.
|
||||
* Copyright (c) 2013-2016 Donal K. Fellows.
|
||||
*
|
||||
* See the file "license.terms" for information on usage and redistribution of
|
||||
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
@@ -1279,9 +1279,11 @@ Tcl_DisassembleObjCmd(
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
static const char *const types[] = {
|
||||
"constructor", "destructor",
|
||||
"lambda", "method", "objmethod", "proc", "script", NULL
|
||||
};
|
||||
enum Types {
|
||||
DISAS_CLASS_CONSTRUCTOR, DISAS_CLASS_DESTRUCTOR,
|
||||
DISAS_LAMBDA, DISAS_CLASS_METHOD, DISAS_OBJECT_METHOD, DISAS_PROC,
|
||||
DISAS_SCRIPT
|
||||
};
|
||||
@@ -1290,6 +1292,7 @@ Tcl_DisassembleObjCmd(
|
||||
Proc *procPtr = NULL;
|
||||
Tcl_HashEntry *hPtr;
|
||||
Object *oPtr;
|
||||
Method *methodPtr;
|
||||
|
||||
if (objc < 2) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "type ...");
|
||||
@@ -1384,6 +1387,136 @@ Tcl_DisassembleObjCmd(
|
||||
codeObjPtr = objv[2];
|
||||
break;
|
||||
|
||||
case DISAS_CLASS_CONSTRUCTOR:
|
||||
if (objc != 3) {
|
||||
Tcl_WrongNumArgs(interp, 2, objv, "className");
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Look up the body of a constructor.
|
||||
*/
|
||||
|
||||
oPtr = (Object *) Tcl_GetObjectFromObj(interp, objv[2]);
|
||||
if (oPtr == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
if (oPtr->classPtr == NULL) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"\"%s\" is not a class", TclGetString(objv[2])));
|
||||
Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "CLASS",
|
||||
TclGetString(objv[2]), NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
methodPtr = oPtr->classPtr->constructorPtr;
|
||||
if (methodPtr == NULL) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"\"%s\" has no defined constructor",
|
||||
TclGetString(objv[2])));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "DISASSEMBLE",
|
||||
"CONSRUCTOR", NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
procPtr = TclOOGetProcFromMethod(methodPtr);
|
||||
if (procPtr == NULL) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"body not available for this kind of constructor", -1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "DISASSEMBLE",
|
||||
"METHODTYPE", NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Compile if necessary.
|
||||
*/
|
||||
|
||||
if (procPtr->bodyPtr->typePtr != &tclByteCodeType) {
|
||||
Command cmd;
|
||||
|
||||
/*
|
||||
* Yes, this is ugly, but we need to pass the namespace in to the
|
||||
* compiler in two places.
|
||||
*/
|
||||
|
||||
cmd.nsPtr = (Namespace *) oPtr->namespacePtr;
|
||||
procPtr->cmdPtr = &cmd;
|
||||
result = TclProcCompileProc(interp, procPtr, procPtr->bodyPtr,
|
||||
(Namespace *) oPtr->namespacePtr, "body of constructor",
|
||||
TclGetString(objv[2]));
|
||||
procPtr->cmdPtr = NULL;
|
||||
if (result != TCL_OK) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
codeObjPtr = procPtr->bodyPtr;
|
||||
break;
|
||||
|
||||
case DISAS_CLASS_DESTRUCTOR:
|
||||
if (objc != 3) {
|
||||
Tcl_WrongNumArgs(interp, 2, objv, "className");
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Look up the body of a destructor.
|
||||
*/
|
||||
|
||||
oPtr = (Object *) Tcl_GetObjectFromObj(interp, objv[2]);
|
||||
if (oPtr == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
if (oPtr->classPtr == NULL) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"\"%s\" is not a class", TclGetString(objv[2])));
|
||||
Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "CLASS",
|
||||
TclGetString(objv[2]), NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
methodPtr = oPtr->classPtr->destructorPtr;
|
||||
if (methodPtr == NULL) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"\"%s\" has no defined destructor",
|
||||
TclGetString(objv[2])));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "DISASSEMBLE",
|
||||
"DESRUCTOR", NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
procPtr = TclOOGetProcFromMethod(methodPtr);
|
||||
if (procPtr == NULL) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"body not available for this kind of destructor", -1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "DISASSEMBLE",
|
||||
"METHODTYPE", NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Compile if necessary.
|
||||
*/
|
||||
|
||||
if (procPtr->bodyPtr->typePtr != &tclByteCodeType) {
|
||||
Command cmd;
|
||||
|
||||
/*
|
||||
* Yes, this is ugly, but we need to pass the namespace in to the
|
||||
* compiler in two places.
|
||||
*/
|
||||
|
||||
cmd.nsPtr = (Namespace *) oPtr->namespacePtr;
|
||||
procPtr->cmdPtr = &cmd;
|
||||
result = TclProcCompileProc(interp, procPtr, procPtr->bodyPtr,
|
||||
(Namespace *) oPtr->namespacePtr, "body of destructor",
|
||||
TclGetString(objv[2]));
|
||||
procPtr->cmdPtr = NULL;
|
||||
if (result != TCL_OK) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
codeObjPtr = procPtr->bodyPtr;
|
||||
break;
|
||||
|
||||
case DISAS_CLASS_METHOD:
|
||||
if (objc != 4) {
|
||||
Tcl_WrongNumArgs(interp, 2, objv, "className methodName");
|
||||
|
||||
+244
-152
@@ -30,11 +30,10 @@ static int NsEnsembleStringOrder(const void *strPtr1,
|
||||
const void *strPtr2);
|
||||
static void DeleteEnsembleConfig(ClientData clientData);
|
||||
static void MakeCachedEnsembleCommand(Tcl_Obj *objPtr,
|
||||
EnsembleConfig *ensemblePtr,
|
||||
const char *subcmdName, Tcl_Obj *prefixObjPtr);
|
||||
EnsembleConfig *ensemblePtr, Tcl_HashEntry *hPtr,
|
||||
Tcl_Obj *fix);
|
||||
static void FreeEnsembleCmdRep(Tcl_Obj *objPtr);
|
||||
static void DupEnsembleCmdRep(Tcl_Obj *objPtr, Tcl_Obj *copyPtr);
|
||||
static void StringOfEnsembleCmdRep(Tcl_Obj *objPtr);
|
||||
static void CompileToInvokedCommand(Tcl_Interp *interp,
|
||||
Tcl_Parse *parsePtr, Tcl_Obj *replacements,
|
||||
Command *cmdPtr, CompileEnv *envPtr);
|
||||
@@ -42,6 +41,8 @@ static int CompileBasicNArgCommand(Tcl_Interp *interp,
|
||||
Tcl_Parse *parsePtr, Command *cmdPtr,
|
||||
CompileEnv *envPtr);
|
||||
|
||||
static Tcl_NRPostProc FreeER;
|
||||
|
||||
/*
|
||||
* The lists of subcommands and options for the [namespace ensemble] command.
|
||||
*/
|
||||
@@ -77,14 +78,30 @@ enum EnsConfigOpts {
|
||||
* that implements it.
|
||||
*/
|
||||
|
||||
const Tcl_ObjType tclEnsembleCmdType = {
|
||||
static const Tcl_ObjType ensembleCmdType = {
|
||||
"ensembleCommand", /* the type's name */
|
||||
FreeEnsembleCmdRep, /* freeIntRepProc */
|
||||
DupEnsembleCmdRep, /* dupIntRepProc */
|
||||
StringOfEnsembleCmdRep, /* updateStringProc */
|
||||
NULL, /* updateStringProc */
|
||||
NULL /* setFromAnyProc */
|
||||
};
|
||||
|
||||
/*
|
||||
* The internal rep for caching ensemble subcommand lookups and
|
||||
* spell corrections.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
int epoch; /* Used to confirm when the data in this
|
||||
* really structure matches up with the
|
||||
* ensemble. */
|
||||
Command *token; /* Reference to the command for which this
|
||||
* structure is a cache of the resolution. */
|
||||
Tcl_Obj *fix; /* Corrected spelling, if needed. */
|
||||
Tcl_HashEntry *hPtr; /* Direct link to entry in the subcommand
|
||||
* hash table. */
|
||||
} EnsembleCmdRep;
|
||||
|
||||
|
||||
static inline Tcl_Obj *
|
||||
NewNsObj(
|
||||
@@ -1643,6 +1660,8 @@ NsEnsembleImplementationCmdNR(
|
||||
* names. */
|
||||
int reparseCount = 0; /* Number of reparses. */
|
||||
Tcl_Obj *errorObj; /* Used for building error messages. */
|
||||
Tcl_Obj *subObj;
|
||||
int subIdx;
|
||||
|
||||
/*
|
||||
* Must recheck objc, since numParameters might have changed. Cf. test
|
||||
@@ -1650,24 +1669,18 @@ NsEnsembleImplementationCmdNR(
|
||||
*/
|
||||
|
||||
restartEnsembleParse:
|
||||
if (objc < 2 + ensemblePtr->numParameters) {
|
||||
subIdx = 1 + ensemblePtr->numParameters;
|
||||
if (objc < subIdx + 1) {
|
||||
/*
|
||||
* We don't have a subcommand argument. Make error message.
|
||||
*/
|
||||
|
||||
Tcl_DString buf; /* Message being built */
|
||||
Tcl_Obj **elemPtrs; /* Parameter names */
|
||||
int len; /* Number of parameters to append */
|
||||
|
||||
Tcl_DStringInit(&buf);
|
||||
if (ensemblePtr->parameterList == NULL) {
|
||||
len = 0;
|
||||
} else if (TclListObjGetElements(NULL, ensemblePtr->parameterList,
|
||||
&len, &elemPtrs) != TCL_OK) {
|
||||
Tcl_Panic("List of ensemble parameters is not a list");
|
||||
}
|
||||
for (; len>0; len--,elemPtrs++) {
|
||||
TclDStringAppendObj(&buf, *elemPtrs);
|
||||
if (ensemblePtr->parameterList) {
|
||||
Tcl_DStringAppend(&buf,
|
||||
TclGetString(ensemblePtr->parameterList), -1);
|
||||
TclDStringAppendLiteral(&buf, " ");
|
||||
}
|
||||
TclDStringAppendLiteral(&buf, "subcommand ?arg ...?");
|
||||
@@ -1695,6 +1708,8 @@ NsEnsembleImplementationCmdNR(
|
||||
* up in there and go straight to dispatch.
|
||||
*/
|
||||
|
||||
subObj = objv[subIdx];
|
||||
|
||||
if (ensemblePtr->epoch == ensemblePtr->nsPtr->exportLookupEpoch) {
|
||||
/*
|
||||
* Table of subcommands is still valid; therefore there might be a
|
||||
@@ -1703,15 +1718,16 @@ NsEnsembleImplementationCmdNR(
|
||||
* part where we do the invocation of the subcommand.
|
||||
*/
|
||||
|
||||
if (objv[1+ensemblePtr->numParameters]->typePtr==&tclEnsembleCmdType){
|
||||
EnsembleCmdRep *ensembleCmd = objv[1+ensemblePtr->numParameters]
|
||||
->internalRep.twoPtrValue.ptr1;
|
||||
if (subObj->typePtr==&ensembleCmdType){
|
||||
EnsembleCmdRep *ensembleCmd = subObj->internalRep.twoPtrValue.ptr1;
|
||||
|
||||
if (ensembleCmd->nsPtr == ensemblePtr->nsPtr &&
|
||||
ensembleCmd->epoch == ensemblePtr->epoch &&
|
||||
ensembleCmd->token == ensemblePtr->token) {
|
||||
prefixObj = ensembleCmd->realPrefixObj;
|
||||
if (ensembleCmd->epoch == ensemblePtr->epoch &&
|
||||
ensembleCmd->token == (Command *)ensemblePtr->token) {
|
||||
prefixObj = Tcl_GetHashValue(ensembleCmd->hPtr);
|
||||
Tcl_IncrRefCount(prefixObj);
|
||||
if (ensembleCmd->fix) {
|
||||
TclSpellFix(interp, objv, objc, subIdx, subObj, ensembleCmd->fix);
|
||||
}
|
||||
goto runResultingSubcommand;
|
||||
}
|
||||
}
|
||||
@@ -1726,18 +1742,14 @@ NsEnsembleImplementationCmdNR(
|
||||
*/
|
||||
|
||||
hPtr = Tcl_FindHashEntry(&ensemblePtr->subcommandTable,
|
||||
TclGetString(objv[1 + ensemblePtr->numParameters]));
|
||||
TclGetString(subObj));
|
||||
if (hPtr != NULL) {
|
||||
char *fullName = Tcl_GetHashKey(&ensemblePtr->subcommandTable, hPtr);
|
||||
|
||||
prefixObj = Tcl_GetHashValue(hPtr);
|
||||
|
||||
/*
|
||||
* Cache for later in the subcommand object.
|
||||
*/
|
||||
|
||||
MakeCachedEnsembleCommand(objv[1 + ensemblePtr->numParameters],
|
||||
ensemblePtr, fullName, prefixObj);
|
||||
MakeCachedEnsembleCommand(subObj, ensemblePtr, hPtr, NULL);
|
||||
} else if (!(ensemblePtr->flags & TCL_ENSEMBLE_PREFIX)) {
|
||||
/*
|
||||
* Could not map, no prefixing, go to unknown/error handling.
|
||||
@@ -1757,9 +1769,9 @@ NsEnsembleImplementationCmdNR(
|
||||
char *fullName = NULL; /* Full name of the subcommand. */
|
||||
int stringLength, i;
|
||||
int tableLength = ensemblePtr->subcommandTable.numEntries;
|
||||
Tcl_Obj *fix;
|
||||
|
||||
subcmdName = TclGetString(objv[1 + ensemblePtr->numParameters]);
|
||||
stringLength = objv[1 + ensemblePtr->numParameters]->length;
|
||||
subcmdName = Tcl_GetStringFromObj(subObj, &stringLength);
|
||||
for (i=0 ; i<tableLength ; i++) {
|
||||
register int cmp = strncmp(subcmdName,
|
||||
ensemblePtr->subcommandArrayPtr[i],
|
||||
@@ -1799,16 +1811,22 @@ NsEnsembleImplementationCmdNR(
|
||||
Tcl_Panic("full name %s not found in supposedly synchronized hash",
|
||||
fullName);
|
||||
}
|
||||
prefixObj = Tcl_GetHashValue(hPtr);
|
||||
|
||||
/*
|
||||
* Record the spelling correction for usage message.
|
||||
*/
|
||||
|
||||
fix = Tcl_NewStringObj(fullName, -1);
|
||||
|
||||
/*
|
||||
* Cache for later in the subcommand object.
|
||||
*/
|
||||
|
||||
MakeCachedEnsembleCommand(objv[1 + ensemblePtr->numParameters],
|
||||
ensemblePtr, fullName, prefixObj);
|
||||
MakeCachedEnsembleCommand(subObj, ensemblePtr, hPtr, fix);
|
||||
TclSpellFix(interp, objv, objc, subIdx, subObj, fix);
|
||||
}
|
||||
|
||||
prefixObj = Tcl_GetHashValue(hPtr);
|
||||
Tcl_IncrRefCount(prefixObj);
|
||||
runResultingSubcommand:
|
||||
|
||||
@@ -1827,47 +1845,26 @@ NsEnsembleImplementationCmdNR(
|
||||
*/
|
||||
|
||||
{
|
||||
Tcl_Obj **prefixObjv; /* The list of objects to substitute in as the
|
||||
* target command prefix. */
|
||||
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;
|
||||
Tcl_Obj **copyObjv;
|
||||
int copyObjc, prefixObjc;
|
||||
|
||||
/*
|
||||
* Get the prefix that we're rewriting to. To do this we need to
|
||||
* ensure that the internal representation of the list does not change
|
||||
* so that we can safely keep the internal representations of the
|
||||
* elements in the list.
|
||||
*
|
||||
* TODO: Use conventional list operations to make this code sane!
|
||||
*/
|
||||
Tcl_ListObjLength(NULL, prefixObj, &prefixObjc);
|
||||
|
||||
TclListObjGetElements(NULL, prefixObj, &prefixObjc, &prefixObjv);
|
||||
|
||||
copyObjc = objc - 2 + prefixObjc;
|
||||
copyPtr = Tcl_NewListObj(copyObjc, NULL);
|
||||
if (copyObjc > 0) {
|
||||
register Tcl_Obj **copyObjv;
|
||||
/* Space used to construct the list of
|
||||
* arguments to pass to the command that
|
||||
* implements the ensemble subcommand. */
|
||||
register List *listRepPtr = copyPtr->internalRep.twoPtrValue.ptr1;
|
||||
register int i;
|
||||
|
||||
listRepPtr->elemCount = copyObjc;
|
||||
copyObjv = &listRepPtr->elements;
|
||||
memcpy(copyObjv, prefixObjv, sizeof(Tcl_Obj *) * prefixObjc);
|
||||
memcpy(copyObjv+prefixObjc, objv+1,
|
||||
sizeof(Tcl_Obj *) * ensemblePtr->numParameters);
|
||||
memcpy(copyObjv+prefixObjc+ensemblePtr->numParameters,
|
||||
objv+ensemblePtr->numParameters+2,
|
||||
sizeof(Tcl_Obj *) * (objc-ensemblePtr->numParameters-2));
|
||||
|
||||
for (i=0; i < copyObjc; i++) {
|
||||
Tcl_IncrRefCount(copyObjv[i]);
|
||||
}
|
||||
if (objc == 2) {
|
||||
copyPtr = TclListObjCopy(NULL, prefixObj);
|
||||
} else {
|
||||
copyPtr = Tcl_NewListObj(objc - 2 + prefixObjc, NULL);
|
||||
Tcl_ListObjAppendList(NULL, copyPtr, prefixObj);
|
||||
Tcl_ListObjReplace(NULL, copyPtr, LIST_MAX, 0,
|
||||
ensemblePtr->numParameters, objv + 1);
|
||||
Tcl_ListObjReplace(NULL, copyPtr, LIST_MAX, 0,
|
||||
objc - 2 - ensemblePtr->numParameters,
|
||||
objv + 2 + ensemblePtr->numParameters);
|
||||
}
|
||||
Tcl_IncrRefCount(copyPtr);
|
||||
TclNRAddCallback(interp, TclNRReleaseValues, copyPtr, NULL, NULL, NULL);
|
||||
TclDecrRefCount(prefixObj);
|
||||
|
||||
/*
|
||||
@@ -1876,25 +1873,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;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1902,7 +1884,8 @@ NsEnsembleImplementationCmdNR(
|
||||
*/
|
||||
|
||||
TclSkipTailcall(interp);
|
||||
return TclNREvalObjEx(interp, copyPtr, TCL_EVAL_INVOKE, NULL,INT_MIN);
|
||||
Tcl_ListObjGetElements(NULL, copyPtr, ©Objc, ©Objv);
|
||||
return TclNREvalObjv(interp, copyObjc, copyObjv, TCL_EVAL_INVOKE, NULL);
|
||||
}
|
||||
|
||||
unknownOrAmbiguousSubcommand:
|
||||
@@ -1934,20 +1917,17 @@ NsEnsembleImplementationCmdNR(
|
||||
|
||||
Tcl_ResetResult(interp);
|
||||
Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "SUBCOMMAND",
|
||||
TclGetString(objv[1+ensemblePtr->numParameters]), NULL);
|
||||
TclGetString(subObj), NULL);
|
||||
if (ensemblePtr->subcommandTable.numEntries == 0) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"unknown subcommand \"%s\": namespace %s does not"
|
||||
" export any commands",
|
||||
TclGetString(objv[1+ensemblePtr->numParameters]),
|
||||
" export any commands", TclGetString(subObj),
|
||||
ensemblePtr->nsPtr->fullName));
|
||||
Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "SUBCOMMAND",
|
||||
TclGetString(objv[1+ensemblePtr->numParameters]), NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
errorObj = Tcl_ObjPrintf("unknown%s subcommand \"%s\": must be ",
|
||||
(ensemblePtr->flags & TCL_ENSEMBLE_PREFIX ? " or ambiguous" : ""),
|
||||
TclGetString(objv[1+ensemblePtr->numParameters]));
|
||||
TclGetString(subObj));
|
||||
if (ensemblePtr->subcommandTable.numEntries == 1) {
|
||||
Tcl_AppendToObj(errorObj, ensemblePtr->subcommandArrayPtr[0], -1);
|
||||
} else {
|
||||
@@ -2013,7 +1993,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;
|
||||
}
|
||||
@@ -2053,6 +2033,149 @@ TclResetRewriteEnsemble(
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclSpellFix --
|
||||
*
|
||||
* Record a spelling correction that needs making in the
|
||||
* generation of the WrongNumArgs usage message.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* Can create an alternative ensemble rewrite structure.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static int
|
||||
FreeER(
|
||||
ClientData data[],
|
||||
Tcl_Interp *interp,
|
||||
int result)
|
||||
{
|
||||
Tcl_Obj **tmp = (Tcl_Obj **)data[0];
|
||||
|
||||
ckfree(tmp[2]);
|
||||
ckfree(tmp);
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
TclSpellFix(
|
||||
Tcl_Interp *interp,
|
||||
Tcl_Obj *const *objv,
|
||||
int objc,
|
||||
int badIdx,
|
||||
Tcl_Obj *bad,
|
||||
Tcl_Obj *fix)
|
||||
{
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
Tcl_Obj *const *search;
|
||||
Tcl_Obj **store;
|
||||
int idx;
|
||||
int size;
|
||||
|
||||
if (iPtr->ensembleRewrite.sourceObjs == NULL) {
|
||||
iPtr->ensembleRewrite.sourceObjs = objv;
|
||||
iPtr->ensembleRewrite.numRemovedObjs = 0;
|
||||
iPtr->ensembleRewrite.numInsertedObjs = 0;
|
||||
}
|
||||
|
||||
/* Compute the valid length of the ensemble root */
|
||||
|
||||
size = iPtr->ensembleRewrite.numRemovedObjs + objc
|
||||
- iPtr->ensembleRewrite.numInsertedObjs;
|
||||
|
||||
search = iPtr->ensembleRewrite.sourceObjs;
|
||||
if (search[0] == NULL) {
|
||||
/* Awful casting abuse here */
|
||||
search = (Tcl_Obj *const *) search[1];
|
||||
}
|
||||
|
||||
if (badIdx < iPtr->ensembleRewrite.numInsertedObjs) {
|
||||
/*
|
||||
* Misspelled value was inserted. We cannot directly jump
|
||||
* to the bad value, but have to search.
|
||||
*/
|
||||
idx = 1;
|
||||
while (idx < size) {
|
||||
if (search[idx] == bad) {
|
||||
break;
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
if (idx == size) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
/* Jump to the misspelled value. */
|
||||
idx = iPtr->ensembleRewrite.numRemovedObjs + badIdx
|
||||
- iPtr->ensembleRewrite.numInsertedObjs;
|
||||
|
||||
/* Verify */
|
||||
if (search[idx] != bad) {
|
||||
Tcl_Panic("SpellFix: programming error");
|
||||
}
|
||||
}
|
||||
|
||||
search = iPtr->ensembleRewrite.sourceObjs;
|
||||
if (search[0] == NULL) {
|
||||
store = (Tcl_Obj **)search[2];
|
||||
} else {
|
||||
Tcl_Obj **tmp = ckalloc(3 * sizeof(Tcl_Obj *));
|
||||
tmp[0] = NULL;
|
||||
tmp[1] = (Tcl_Obj *)iPtr->ensembleRewrite.sourceObjs;
|
||||
tmp[2] = (Tcl_Obj *)ckalloc(size * sizeof(Tcl_Obj *));
|
||||
memcpy(tmp[2], tmp[1], size*sizeof(Tcl_Obj *));
|
||||
|
||||
iPtr->ensembleRewrite.sourceObjs = (Tcl_Obj *const *) tmp;
|
||||
TclNRAddCallback(interp, FreeER, tmp, NULL, NULL, NULL);
|
||||
store = (Tcl_Obj **)tmp[2];
|
||||
}
|
||||
|
||||
store[idx] = fix;
|
||||
Tcl_IncrRefCount(fix);
|
||||
TclNRAddCallback(interp, TclNRReleaseValues, fix, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclFetchEnsembleRoot --
|
||||
*
|
||||
* Returns the root of ensemble rewriting, if any.
|
||||
* If no root exists, returns objv instead.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
Tcl_Obj *const *
|
||||
TclFetchEnsembleRoot(
|
||||
Tcl_Interp *interp,
|
||||
Tcl_Obj *const *objv,
|
||||
int objc,
|
||||
int *objcPtr)
|
||||
{
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
|
||||
if (iPtr->ensembleRewrite.sourceObjs) {
|
||||
*objcPtr = objc + iPtr->ensembleRewrite.numRemovedObjs
|
||||
- iPtr->ensembleRewrite.numInsertedObjs;
|
||||
return iPtr->ensembleRewrite.sourceObjs;
|
||||
}
|
||||
*objcPtr = objc;
|
||||
return objv;
|
||||
}
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------
|
||||
*
|
||||
@@ -2218,17 +2341,17 @@ static void
|
||||
MakeCachedEnsembleCommand(
|
||||
Tcl_Obj *objPtr,
|
||||
EnsembleConfig *ensemblePtr,
|
||||
const char *subcommandName,
|
||||
Tcl_Obj *prefixObjPtr)
|
||||
Tcl_HashEntry *hPtr,
|
||||
Tcl_Obj *fix)
|
||||
{
|
||||
register EnsembleCmdRep *ensembleCmd;
|
||||
int length;
|
||||
|
||||
if (objPtr->typePtr == &tclEnsembleCmdType) {
|
||||
if (objPtr->typePtr == &ensembleCmdType) {
|
||||
ensembleCmd = objPtr->internalRep.twoPtrValue.ptr1;
|
||||
Tcl_DecrRefCount(ensembleCmd->realPrefixObj);
|
||||
TclNsDecrRefCount(ensembleCmd->nsPtr);
|
||||
ckfree(ensembleCmd->fullSubcmdName);
|
||||
TclCleanupCommandMacro(ensembleCmd->token);
|
||||
if (ensembleCmd->fix) {
|
||||
Tcl_DecrRefCount(ensembleCmd->fix);
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* Kill the old internal rep, and replace it with a brand new one of
|
||||
@@ -2238,22 +2361,21 @@ MakeCachedEnsembleCommand(
|
||||
TclFreeIntRep(objPtr);
|
||||
ensembleCmd = ckalloc(sizeof(EnsembleCmdRep));
|
||||
objPtr->internalRep.twoPtrValue.ptr1 = ensembleCmd;
|
||||
objPtr->typePtr = &tclEnsembleCmdType;
|
||||
objPtr->typePtr = &ensembleCmdType;
|
||||
}
|
||||
|
||||
/*
|
||||
* Populate the internal rep.
|
||||
*/
|
||||
|
||||
ensembleCmd->nsPtr = ensemblePtr->nsPtr;
|
||||
ensembleCmd->epoch = ensemblePtr->epoch;
|
||||
ensembleCmd->token = ensemblePtr->token;
|
||||
ensemblePtr->nsPtr->refCount++;
|
||||
ensembleCmd->realPrefixObj = prefixObjPtr;
|
||||
length = strlen(subcommandName)+1;
|
||||
ensembleCmd->fullSubcmdName = ckalloc(length);
|
||||
memcpy(ensembleCmd->fullSubcmdName, subcommandName, (unsigned) length);
|
||||
Tcl_IncrRefCount(ensembleCmd->realPrefixObj);
|
||||
ensembleCmd->token = (Command *) ensemblePtr->token;
|
||||
ensembleCmd->token->refCount++;
|
||||
if (fix) {
|
||||
Tcl_IncrRefCount(fix);
|
||||
}
|
||||
ensembleCmd->fix = fix;
|
||||
ensembleCmd->hPtr = hPtr;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2634,9 +2756,10 @@ FreeEnsembleCmdRep(
|
||||
{
|
||||
EnsembleCmdRep *ensembleCmd = objPtr->internalRep.twoPtrValue.ptr1;
|
||||
|
||||
Tcl_DecrRefCount(ensembleCmd->realPrefixObj);
|
||||
ckfree(ensembleCmd->fullSubcmdName);
|
||||
TclNsDecrRefCount(ensembleCmd->nsPtr);
|
||||
TclCleanupCommandMacro(ensembleCmd->token);
|
||||
if (ensembleCmd->fix) {
|
||||
Tcl_DecrRefCount(ensembleCmd->fix);
|
||||
}
|
||||
ckfree(ensembleCmd);
|
||||
objPtr->typePtr = NULL;
|
||||
}
|
||||
@@ -2666,48 +2789,17 @@ DupEnsembleCmdRep(
|
||||
{
|
||||
EnsembleCmdRep *ensembleCmd = objPtr->internalRep.twoPtrValue.ptr1;
|
||||
EnsembleCmdRep *ensembleCopy = ckalloc(sizeof(EnsembleCmdRep));
|
||||
int length = strlen(ensembleCmd->fullSubcmdName);
|
||||
|
||||
copyPtr->typePtr = &tclEnsembleCmdType;
|
||||
copyPtr->typePtr = &ensembleCmdType;
|
||||
copyPtr->internalRep.twoPtrValue.ptr1 = ensembleCopy;
|
||||
ensembleCopy->nsPtr = ensembleCmd->nsPtr;
|
||||
ensembleCopy->epoch = ensembleCmd->epoch;
|
||||
ensembleCopy->token = ensembleCmd->token;
|
||||
ensembleCopy->nsPtr->refCount++;
|
||||
ensembleCopy->realPrefixObj = ensembleCmd->realPrefixObj;
|
||||
Tcl_IncrRefCount(ensembleCopy->realPrefixObj);
|
||||
ensembleCopy->fullSubcmdName = ckalloc(length + 1);
|
||||
memcpy(ensembleCopy->fullSubcmdName, ensembleCmd->fullSubcmdName,
|
||||
(unsigned) length+1);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* StringOfEnsembleCmdRep --
|
||||
*
|
||||
* Creates a string representation of a Tcl_Obj that holds a subcommand
|
||||
* of an ensemble.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* The object gains a string (UTF-8) representation.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static void
|
||||
StringOfEnsembleCmdRep(
|
||||
Tcl_Obj *objPtr)
|
||||
{
|
||||
EnsembleCmdRep *ensembleCmd = objPtr->internalRep.twoPtrValue.ptr1;
|
||||
int length = strlen(ensembleCmd->fullSubcmdName);
|
||||
|
||||
objPtr->length = length;
|
||||
objPtr->bytes = ckalloc(length + 1);
|
||||
memcpy(objPtr->bytes, ensembleCmd->fullSubcmdName, (unsigned) length+1);
|
||||
ensembleCopy->token->refCount++;
|
||||
ensembleCopy->fix = ensembleCmd->fix;
|
||||
if (ensembleCopy->fix) {
|
||||
Tcl_IncrRefCount(ensembleCopy->fix);
|
||||
}
|
||||
ensembleCopy->hPtr = ensembleCmd->hPtr;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1462,6 +1462,8 @@ VwaitVarProc(
|
||||
int *donePtr = clientData;
|
||||
|
||||
*donePtr = 1;
|
||||
Tcl_UntraceVar(interp, name1, TCL_TRACE_WRITES|TCL_TRACE_UNSETS,
|
||||
VwaitVarProc, clientData);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
+30
-20
@@ -2077,6 +2077,13 @@ TclNRExecuteByteCode(
|
||||
iPtr->stats.numExecutions++;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Test namespace-50.9 demonstrates the need for this call.
|
||||
* Use a --enable-symbols=mem bug to see.
|
||||
*/
|
||||
|
||||
TclResetRewriteEnsemble(interp, 1);
|
||||
|
||||
/*
|
||||
* Push the callback for bytecode execution
|
||||
*/
|
||||
@@ -3153,35 +3160,34 @@ TEBCresume(
|
||||
fflush(stdout);
|
||||
}
|
||||
#endif /*TCL_COMPILE_DEBUG*/
|
||||
{
|
||||
Tcl_Obj *copyPtr = Tcl_NewListObj(objc - opnd + 1, NULL);
|
||||
register List *listRepPtr = copyPtr->internalRep.twoPtrValue.ptr1;
|
||||
Tcl_Obj **copyObjv = &listRepPtr->elements;
|
||||
int i;
|
||||
|
||||
listRepPtr->elemCount = objc - opnd + 1;
|
||||
copyObjv[0] = objPtr;
|
||||
memcpy(copyObjv+1, objv+opnd, sizeof(Tcl_Obj *) * (objc - opnd));
|
||||
for (i=1 ; i<objc-opnd+1 ; i++) {
|
||||
Tcl_IncrRefCount(copyObjv[i]);
|
||||
}
|
||||
objPtr = copyPtr;
|
||||
}
|
||||
bcFramePtr->data.tebc.pc = (char *) pc;
|
||||
iPtr->cmdFramePtr = bcFramePtr;
|
||||
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);
|
||||
|
||||
{
|
||||
Tcl_Obj *copyPtr = Tcl_NewListObj(objc - opnd + 1, NULL);
|
||||
|
||||
Tcl_ListObjAppendElement(NULL, copyPtr, objPtr);
|
||||
Tcl_ListObjReplace(NULL, copyPtr, LIST_MAX, 0,
|
||||
objc - opnd, objv + opnd);
|
||||
Tcl_DecrRefCount(objPtr);
|
||||
objPtr = copyPtr;
|
||||
}
|
||||
|
||||
DECACHE_STACK_INFO();
|
||||
pc += 6;
|
||||
TEBC_YIELD();
|
||||
|
||||
TclMarkTailcall(interp);
|
||||
TclNRAddCallback(interp, TclClearRootEnsemble, NULL,NULL,NULL,NULL);
|
||||
return TclNREvalObjEx(interp, objPtr, TCL_EVAL_INVOKE, NULL, INT_MIN);
|
||||
TclNRAddCallback(interp, TclClearRootEnsemble, NULL, NULL, NULL, NULL);
|
||||
Tcl_ListObjGetElements(NULL, objPtr, &objc, &objv);
|
||||
TclNRAddCallback(interp, TclNRReleaseValues, objPtr, NULL, NULL, NULL);
|
||||
return TclNREvalObjv(interp, objc, objv, TCL_EVAL_INVOKE, NULL);
|
||||
|
||||
/*
|
||||
* -----------------------------------------------------------------
|
||||
@@ -4414,8 +4420,8 @@ TEBCresume(
|
||||
savedNsPtr = iPtr->varFramePtr->nsPtr;
|
||||
iPtr->varFramePtr->nsPtr = (Namespace *) nsPtr;
|
||||
otherPtr = TclObjLookupVarEx(interp, OBJ_AT_TOS, NULL,
|
||||
(TCL_NAMESPACE_ONLY | TCL_LEAVE_ERR_MSG), "access",
|
||||
/*createPart1*/ 1, /*createPart2*/ 1, &varPtr);
|
||||
(TCL_NAMESPACE_ONLY|TCL_LEAVE_ERR_MSG|TCL_AVOID_RESOLVERS),
|
||||
"access", /*createPart1*/ 1, /*createPart2*/ 1, &varPtr);
|
||||
iPtr->varFramePtr->nsPtr = savedNsPtr;
|
||||
if (!otherPtr) {
|
||||
TRACE_ERROR(interp);
|
||||
@@ -7706,6 +7712,7 @@ TEBCresume(
|
||||
goto gotError;
|
||||
}
|
||||
}
|
||||
Tcl_IncrRefCount(dictPtr);
|
||||
if (TclListObjGetElements(interp, OBJ_AT_TOS, &length,
|
||||
&keyPtrPtr) != TCL_OK) {
|
||||
TRACE_ERROR(interp);
|
||||
@@ -7718,6 +7725,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 +7742,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);
|
||||
}
|
||||
|
||||
+73
-86
@@ -313,15 +313,20 @@ static int WillRead(Channel *chanPtr);
|
||||
&& (strncmp(optionName, (nameString), len) == 0))
|
||||
|
||||
/*
|
||||
* The ChannelObjType type. We actually store the ChannelState structure
|
||||
* as that lives longest and we want to return the bottomChanPtr when
|
||||
* requested (consistent with Tcl_GetChannel). The setFromAny and
|
||||
* updateString can be NULL as they should not be called.
|
||||
* The ChannelObjType type. Used to store the result of looking up
|
||||
* a channel name in the context of an interp. Saves the lookup
|
||||
* result and values needed to check its continued validity.
|
||||
*/
|
||||
|
||||
typedef struct ResolvedChanName {
|
||||
ChannelState *statePtr; /* The saved lookup result */
|
||||
Tcl_Interp *interp; /* The interp in which the lookup was done. */
|
||||
int epoch; /* The epoch of the channel when the lookup
|
||||
* was done. Use to verify validity. */
|
||||
int refCount; /* Share this struct among many Tcl_Obj. */
|
||||
} ResolvedChanName;
|
||||
|
||||
static void DupChannelIntRep(Tcl_Obj *objPtr, Tcl_Obj *copyPtr);
|
||||
static int SetChannelFromAny(Tcl_Interp *interp,
|
||||
Tcl_Obj *objPtr);
|
||||
static void FreeChannelIntRep(Tcl_Obj *objPtr);
|
||||
|
||||
static const Tcl_ObjType chanObjType = {
|
||||
@@ -329,18 +334,9 @@ static const Tcl_ObjType chanObjType = {
|
||||
FreeChannelIntRep, /* freeIntRepProc */
|
||||
DupChannelIntRep, /* dupIntRepProc */
|
||||
NULL, /* updateStringProc */
|
||||
NULL /* setFromAnyProc SetChannelFromAny */
|
||||
NULL /* setFromAnyProc */
|
||||
};
|
||||
|
||||
#define GET_CHANNELSTATE(objPtr) \
|
||||
((ChannelState *) (objPtr)->internalRep.twoPtrValue.ptr1)
|
||||
#define SET_CHANNELSTATE(objPtr, storePtr) \
|
||||
((objPtr)->internalRep.twoPtrValue.ptr1 = (void *) (storePtr))
|
||||
#define GET_CHANNELINTERP(objPtr) \
|
||||
((Tcl_Interp *) (objPtr)->internalRep.twoPtrValue.ptr2)
|
||||
#define SET_CHANNELINTERP(objPtr, storePtr) \
|
||||
((objPtr)->internalRep.twoPtrValue.ptr2 = (void *) (storePtr))
|
||||
|
||||
#define BUSY_STATE(st, fl) \
|
||||
((((st)->csPtrR) && ((fl) & TCL_READABLE)) || \
|
||||
(((st)->csPtrW) && ((fl) & TCL_WRITABLE)))
|
||||
@@ -1021,7 +1017,7 @@ DeleteChannelTable(
|
||||
*/
|
||||
|
||||
Tcl_DeleteHashEntry(hPtr);
|
||||
SetFlag(statePtr, CHANNEL_TAINTED);
|
||||
statePtr->epoch++;
|
||||
if (statePtr->refCount-- <= 1) {
|
||||
if (!GotFlag(statePtr, BG_FLUSH_SCHEDULED)) {
|
||||
(void) Tcl_Close(interp, (Tcl_Channel) chanPtr);
|
||||
@@ -1365,7 +1361,7 @@ DetachChannel(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
Tcl_DeleteHashEntry(hPtr);
|
||||
SetFlag(statePtr, CHANNEL_TAINTED);
|
||||
statePtr->epoch++;
|
||||
|
||||
/*
|
||||
* Remove channel handlers that refer to this interpreter, so that
|
||||
@@ -1498,12 +1494,57 @@ TclGetChannelFromObj(
|
||||
int flags)
|
||||
{
|
||||
ChannelState *statePtr;
|
||||
ResolvedChanName *resPtr = NULL;
|
||||
Tcl_Channel chan;
|
||||
|
||||
if (SetChannelFromAny(interp, objPtr) != TCL_OK) {
|
||||
if (interp == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
statePtr = GET_CHANNELSTATE(objPtr);
|
||||
if (objPtr->typePtr == &chanObjType) {
|
||||
/*
|
||||
* Confirm validity of saved lookup results.
|
||||
*/
|
||||
|
||||
resPtr = (ResolvedChanName *) objPtr->internalRep.twoPtrValue.ptr1;
|
||||
statePtr = resPtr->statePtr;
|
||||
if ((resPtr->interp == interp) /* Same interp context */
|
||||
/* No epoch change in channel since lookup */
|
||||
&& (resPtr->epoch == statePtr->epoch)) {
|
||||
|
||||
/* Have a valid saved lookup. Jump to end to return it. */
|
||||
goto valid;
|
||||
}
|
||||
}
|
||||
|
||||
chan = Tcl_GetChannel(interp, TclGetString(objPtr), NULL);
|
||||
|
||||
if (chan == NULL) {
|
||||
if (resPtr) {
|
||||
FreeChannelIntRep(objPtr);
|
||||
}
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
if (resPtr && resPtr->refCount == 1) {
|
||||
/* Re-use the ResolvedCmdName struct */
|
||||
Tcl_Release((ClientData) resPtr->statePtr);
|
||||
|
||||
} else {
|
||||
TclFreeIntRep(objPtr);
|
||||
|
||||
resPtr = (ResolvedChanName *) ckalloc(sizeof(ResolvedChanName));
|
||||
resPtr->refCount = 1;
|
||||
objPtr->internalRep.twoPtrValue.ptr1 = (ClientData) resPtr;
|
||||
objPtr->typePtr = &chanObjType;
|
||||
}
|
||||
statePtr = ((Channel *)chan)->state;
|
||||
resPtr->statePtr = statePtr;
|
||||
Tcl_Preserve((ClientData) statePtr);
|
||||
resPtr->interp = interp;
|
||||
resPtr->epoch = statePtr->epoch;
|
||||
|
||||
valid:
|
||||
*channelPtr = (Tcl_Channel) statePtr->bottomChanPtr;
|
||||
|
||||
if (modePtr != NULL) {
|
||||
@@ -1676,6 +1717,8 @@ Tcl_CreateChannel(
|
||||
statePtr->chanMsg = NULL;
|
||||
statePtr->unreportedMsg = NULL;
|
||||
|
||||
statePtr->epoch = 0;
|
||||
|
||||
/*
|
||||
* Link the channel into the list of all channels; create an on-exit
|
||||
* handler if there is not one already, to close off all the channels in
|
||||
@@ -11121,75 +11164,13 @@ DupChannelIntRep(
|
||||
register Tcl_Obj *copyPtr) /* Object with internal rep to set. Must not
|
||||
* currently have an internal rep.*/
|
||||
{
|
||||
ChannelState *statePtr = GET_CHANNELSTATE(srcPtr);
|
||||
ResolvedChanName *resPtr = srcPtr->internalRep.twoPtrValue.ptr1;
|
||||
|
||||
SET_CHANNELSTATE(copyPtr, statePtr);
|
||||
SET_CHANNELINTERP(copyPtr, GET_CHANNELINTERP(srcPtr));
|
||||
Tcl_Preserve(statePtr);
|
||||
resPtr->refCount++;
|
||||
copyPtr->internalRep.twoPtrValue.ptr1 = resPtr;
|
||||
copyPtr->typePtr = srcPtr->typePtr;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* SetChannelFromAny --
|
||||
*
|
||||
* Create an internal representation of type "Channel" for an object.
|
||||
*
|
||||
* Results:
|
||||
* This operation always succeeds and returns TCL_OK.
|
||||
*
|
||||
* Side effects:
|
||||
* Any old internal reputation for objPtr is freed and the internal
|
||||
* representation is set to "Channel".
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static int
|
||||
SetChannelFromAny(
|
||||
Tcl_Interp *interp, /* Used for error reporting if not NULL. */
|
||||
register Tcl_Obj *objPtr) /* The object to convert. */
|
||||
{
|
||||
ChannelState *statePtr;
|
||||
|
||||
if (interp == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
if (objPtr->typePtr == &chanObjType) {
|
||||
/*
|
||||
* TODO: TAINT Flag and dup'd channel values?
|
||||
* The channel is valid until any call to DetachChannel occurs.
|
||||
* Ensure consistency checks are done.
|
||||
*/
|
||||
|
||||
statePtr = GET_CHANNELSTATE(objPtr);
|
||||
if (GotFlag(statePtr, CHANNEL_TAINTED|CHANNEL_CLOSED)) {
|
||||
ResetFlag(statePtr, CHANNEL_TAINTED);
|
||||
Tcl_Release(statePtr);
|
||||
objPtr->typePtr = NULL;
|
||||
} else if (interp != GET_CHANNELINTERP(objPtr)) {
|
||||
Tcl_Release(statePtr);
|
||||
objPtr->typePtr = NULL;
|
||||
}
|
||||
}
|
||||
if (objPtr->typePtr != &chanObjType) {
|
||||
Tcl_Channel chan = Tcl_GetChannel(interp, TclGetString(objPtr), NULL);
|
||||
|
||||
if (chan == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
TclFreeIntRep(objPtr);
|
||||
statePtr = ((Channel *) chan)->state;
|
||||
Tcl_Preserve(statePtr);
|
||||
SET_CHANNELSTATE(objPtr, statePtr);
|
||||
SET_CHANNELINTERP(objPtr, interp);
|
||||
objPtr->typePtr = &chanObjType;
|
||||
}
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
@@ -11210,8 +11191,14 @@ static void
|
||||
FreeChannelIntRep(
|
||||
Tcl_Obj *objPtr) /* Object with internal rep to free. */
|
||||
{
|
||||
Tcl_Release(GET_CHANNELSTATE(objPtr));
|
||||
ResolvedChanName *resPtr = objPtr->internalRep.twoPtrValue.ptr1;
|
||||
|
||||
objPtr->typePtr = NULL;
|
||||
if (--resPtr->refCount) {
|
||||
return;
|
||||
}
|
||||
Tcl_Release(resPtr->statePtr);
|
||||
ckfree(resPtr);
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
+2
-4
@@ -214,6 +214,8 @@ typedef struct ChannelState {
|
||||
* because it happened in the background. The
|
||||
* value is the chanMg, if any. #219's
|
||||
* companion to 'unreportedError'. */
|
||||
int epoch; /* Used to test validity of stored channelname
|
||||
* lookup results. */
|
||||
} ChannelState;
|
||||
|
||||
/*
|
||||
@@ -275,10 +277,6 @@ typedef struct ChannelState {
|
||||
* usable, but it may not be closed
|
||||
* again from within the close
|
||||
* handler. */
|
||||
#define CHANNEL_TAINTED (1<<20) /* Channel stack structure has changed.
|
||||
* Used by Channel Tcl_Obj type to
|
||||
* determine if we have to revalidate
|
||||
* the channel. */
|
||||
#define CHANNEL_CLOSEDWRITE (1<<21) /* Channel write side has been closed.
|
||||
* No further Tcl-level write IO on
|
||||
* the channel is allowed. */
|
||||
|
||||
+1
-2
@@ -71,8 +71,7 @@ typedef struct ThreadSpecificData {
|
||||
* Prototypes for functions defined later in this file.
|
||||
*/
|
||||
|
||||
static int EvalFileCallback(ClientData data[],
|
||||
Tcl_Interp *interp, int result);
|
||||
static Tcl_NRPostProc EvalFileCallback;
|
||||
static FilesystemRecord*FsGetFirstFilesystem(void);
|
||||
static void FsThrExitProc(ClientData cd);
|
||||
static Tcl_Obj * FsListMounts(Tcl_Obj *pathPtr, const char *pattern);
|
||||
|
||||
+8
-11
@@ -924,6 +924,14 @@ Tcl_WrongNumArgs(
|
||||
int toPrint = iPtr->ensembleRewrite.numRemovedObjs;
|
||||
Tcl_Obj *const *origObjv = iPtr->ensembleRewrite.sourceObjs;
|
||||
|
||||
/*
|
||||
* Check for spelling fixes, and substitute the fixed values.
|
||||
*/
|
||||
|
||||
if (origObjv[0] == NULL) {
|
||||
origObjv = (Tcl_Obj *const *)origObjv[2];
|
||||
}
|
||||
|
||||
/*
|
||||
* We only know how to do rewriting if all the replaced objects are
|
||||
* actually arguments (in objv) to this function. Otherwise it just
|
||||
@@ -957,12 +965,6 @@ Tcl_WrongNumArgs(
|
||||
|
||||
elementStr = EXPAND_OF(indexRep);
|
||||
elemLen = strlen(elementStr);
|
||||
} else if (origObjv[i]->typePtr == &tclEnsembleCmdType) {
|
||||
register EnsembleCmdRep *ecrPtr =
|
||||
origObjv[i]->internalRep.twoPtrValue.ptr1;
|
||||
|
||||
elementStr = ecrPtr->fullSubcmdName;
|
||||
elemLen = strlen(elementStr);
|
||||
} else {
|
||||
elementStr = TclGetStringFromObj(origObjv[i], &elemLen);
|
||||
}
|
||||
@@ -1011,11 +1013,6 @@ Tcl_WrongNumArgs(
|
||||
register IndexRep *indexRep = objv[i]->internalRep.twoPtrValue.ptr1;
|
||||
|
||||
Tcl_AppendStringsToObj(objPtr, EXPAND_OF(indexRep), NULL);
|
||||
} else if (objv[i]->typePtr == &tclEnsembleCmdType) {
|
||||
register EnsembleCmdRep *ecrPtr =
|
||||
objv[i]->internalRep.twoPtrValue.ptr1;
|
||||
|
||||
Tcl_AppendStringsToObj(objPtr, ecrPtr->fullSubcmdName, NULL);
|
||||
} else {
|
||||
/*
|
||||
* Quote the argument if it contains spaces (Bug 942757).
|
||||
|
||||
+24
-24
@@ -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;
|
||||
@@ -168,6 +169,21 @@ typedef struct Tcl_ResolverInfo {
|
||||
* at compile time. */
|
||||
} Tcl_ResolverInfo;
|
||||
|
||||
/*
|
||||
* This flag bit should not interfere with TCL_GLOBAL_ONLY,
|
||||
* TCL_NAMESPACE_ONLY, or TCL_LEAVE_ERR_MSG; it signals that the variable
|
||||
* lookup is performed for upvar (or similar) purposes, with slightly
|
||||
* different rules:
|
||||
* - Bug #696893 - variable is either proc-local or in the current
|
||||
* namespace; never follow the second (global) resolution path
|
||||
* - Bug #631741 - do not use special namespace or interp resolvers
|
||||
*
|
||||
* It should also not collide with the (deprecated) TCL_PARSE_PART1 flag
|
||||
* (Bug #835020)
|
||||
*/
|
||||
|
||||
#define TCL_AVOID_RESOLVERS 0x40000
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------
|
||||
* Data structures related to namespaces.
|
||||
@@ -388,27 +404,6 @@ struct NamespacePathEntry {
|
||||
#define TCL_CREATE_NS_IF_UNKNOWN 0x800
|
||||
#define TCL_FIND_ONLY_NS 0x1000
|
||||
|
||||
/*
|
||||
* The data cached in an ensemble subcommand's Tcl_Obj rep (reference in
|
||||
* twoPtrValue.ptr1 field). This structure is not shared between Tcl_Objs
|
||||
* referring to the same subcommand, even where one is a duplicate of another.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
Namespace *nsPtr; /* The namespace backing the ensemble which
|
||||
* this is a subcommand of. */
|
||||
int epoch; /* Used to confirm when the data in this
|
||||
* really structure matches up with the
|
||||
* ensemble. */
|
||||
Tcl_Command token; /* Reference to the comamnd for which this
|
||||
* structure is a cache of the resolution. */
|
||||
char *fullSubcmdName; /* The full (local) name of the subcommand,
|
||||
* allocated with ckalloc(). */
|
||||
Tcl_Obj *realPrefixObj; /* Object containing the prefix words of the
|
||||
* command that implements this ensemble
|
||||
* subcommand. */
|
||||
} EnsembleCmdRep;
|
||||
|
||||
/*
|
||||
* The client data for an ensemble command. This consists of the table of
|
||||
* commands that are actually exported by the namespace, and an epoch counter
|
||||
@@ -2761,6 +2756,7 @@ MODULE_SCOPE Tcl_ObjCmdProc TclNRYieldObjCmd;
|
||||
MODULE_SCOPE Tcl_ObjCmdProc TclNRYieldmObjCmd;
|
||||
MODULE_SCOPE Tcl_ObjCmdProc TclNRYieldToObjCmd;
|
||||
MODULE_SCOPE Tcl_ObjCmdProc TclNRInvoke;
|
||||
MODULE_SCOPE Tcl_NRPostProc TclNRReleaseValues;
|
||||
|
||||
MODULE_SCOPE void TclSetTailcall(Tcl_Interp *interp, Tcl_Obj *tailcallPtr);
|
||||
MODULE_SCOPE void TclPushTailcallPoint(Tcl_Interp *interp);
|
||||
@@ -2871,8 +2867,7 @@ MODULE_SCOPE int TclCheckBadOctal(Tcl_Interp *interp,
|
||||
MODULE_SCOPE int TclChanCaughtErrorBypass(Tcl_Interp *interp,
|
||||
Tcl_Channel chan);
|
||||
MODULE_SCOPE Tcl_ObjCmdProc TclChannelNamesCmd;
|
||||
MODULE_SCOPE int TclClearRootEnsemble(ClientData data[],
|
||||
Tcl_Interp *interp, int result);
|
||||
MODULE_SCOPE Tcl_NRPostProc TclClearRootEnsemble;
|
||||
MODULE_SCOPE ContLineLoc *TclContinuationsEnter(Tcl_Obj *objPtr, int num,
|
||||
int *loc);
|
||||
MODULE_SCOPE void TclContinuationsEnterDerived(Tcl_Obj *objPtr,
|
||||
@@ -2908,6 +2903,8 @@ MODULE_SCOPE char * TclDStringAppendObj(Tcl_DString *dsPtr,
|
||||
MODULE_SCOPE char * TclDStringAppendDString(Tcl_DString *dsPtr,
|
||||
Tcl_DString *toAppendPtr);
|
||||
MODULE_SCOPE Tcl_Obj * TclDStringToObj(Tcl_DString *dsPtr);
|
||||
MODULE_SCOPE Tcl_Obj *const * TclFetchEnsembleRoot(Tcl_Interp *interp,
|
||||
Tcl_Obj *const *objv, int objc, int *objcPtr);
|
||||
MODULE_SCOPE void TclFinalizeAllocSubsystem(void);
|
||||
MODULE_SCOPE void TclFinalizeAsync(void);
|
||||
MODULE_SCOPE void TclFinalizeDoubleConversion(void);
|
||||
@@ -3110,6 +3107,9 @@ MODULE_SCOPE void TclSetDuplicateObj(Tcl_Obj *dupPtr, Tcl_Obj *objPtr);
|
||||
MODULE_SCOPE void TclSetProcessGlobalValue(ProcessGlobalValue *pgvPtr,
|
||||
Tcl_Obj *newValue, Tcl_Encoding encoding);
|
||||
MODULE_SCOPE void TclSignalExitThread(Tcl_ThreadId id, int result);
|
||||
MODULE_SCOPE void TclSpellFix(Tcl_Interp *interp,
|
||||
Tcl_Obj *const *objv, int objc, int subIdx,
|
||||
Tcl_Obj *bad, Tcl_Obj *fix);
|
||||
MODULE_SCOPE void * TclStackRealloc(Tcl_Interp *interp, void *ptr,
|
||||
int numBytes);
|
||||
MODULE_SCOPE int TclStringMatch(const char *str, int strLen,
|
||||
|
||||
+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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+68
-41
@@ -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
|
||||
@@ -3312,14 +3354,7 @@ NRNamespaceEvalCmd(
|
||||
(void) TclPushStackFrame(interp, (Tcl_CallFrame **) framePtrPtr,
|
||||
namespacePtr, /*isProcCallFrame*/ 0);
|
||||
|
||||
if (iPtr->ensembleRewrite.sourceObjs == NULL) {
|
||||
framePtr->objc = objc;
|
||||
framePtr->objv = objv;
|
||||
} else {
|
||||
framePtr->objc = objc + iPtr->ensembleRewrite.numRemovedObjs
|
||||
- iPtr->ensembleRewrite.numInsertedObjs;
|
||||
framePtr->objv = iPtr->ensembleRewrite.sourceObjs;
|
||||
}
|
||||
framePtr->objv = TclFetchEnsembleRoot(interp, objv, objc, &framePtr->objc);
|
||||
|
||||
if (objc == 3) {
|
||||
/*
|
||||
@@ -3726,7 +3761,6 @@ NRNamespaceInscopeCmd(
|
||||
{
|
||||
Tcl_Namespace *namespacePtr;
|
||||
CallFrame *framePtr, **framePtrPtr;
|
||||
register Interp *iPtr = (Interp *) interp;
|
||||
int i;
|
||||
Tcl_Obj *cmdObjPtr;
|
||||
|
||||
@@ -3752,14 +3786,7 @@ NRNamespaceInscopeCmd(
|
||||
(void) TclPushStackFrame(interp, (Tcl_CallFrame **) framePtrPtr,
|
||||
namespacePtr, /*isProcCallFrame*/ 0);
|
||||
|
||||
if (iPtr->ensembleRewrite.sourceObjs == NULL) {
|
||||
framePtr->objc = objc;
|
||||
framePtr->objv = objv;
|
||||
} else {
|
||||
framePtr->objc = objc + iPtr->ensembleRewrite.numRemovedObjs
|
||||
- iPtr->ensembleRewrite.numInsertedObjs;
|
||||
framePtr->objv = iPtr->ensembleRewrite.sourceObjs;
|
||||
}
|
||||
framePtr->objv = TclFetchEnsembleRoot(interp, objv, objc, &framePtr->objc);
|
||||
|
||||
/*
|
||||
* Execute the command. If there is just one argument, just treat it as a
|
||||
@@ -4511,8 +4538,8 @@ NamespaceUpvarCmd(
|
||||
savedNsPtr = (Tcl_Namespace *) iPtr->varFramePtr->nsPtr;
|
||||
iPtr->varFramePtr->nsPtr = (Namespace *) nsPtr;
|
||||
otherPtr = TclObjLookupVarEx(interp, objv[0], NULL,
|
||||
(TCL_NAMESPACE_ONLY | TCL_LEAVE_ERR_MSG), "access",
|
||||
/*createPart1*/ 1, /*createPart2*/ 1, &arrayPtr);
|
||||
(TCL_NAMESPACE_ONLY|TCL_LEAVE_ERR_MSG|TCL_AVOID_RESOLVERS),
|
||||
"access", /*createPart1*/ 1, /*createPart2*/ 1, &arrayPtr);
|
||||
iPtr->varFramePtr->nsPtr = (Namespace *) savedNsPtr;
|
||||
if (otherPtr == NULL) {
|
||||
return TCL_ERROR;
|
||||
|
||||
+11
-14
@@ -68,12 +68,9 @@ static int CloneObjectMethod(Tcl_Interp *interp, Object *oPtr,
|
||||
static void DeletedDefineNamespace(ClientData clientData);
|
||||
static void DeletedObjdefNamespace(ClientData clientData);
|
||||
static void DeletedHelpersNamespace(ClientData clientData);
|
||||
static int FinalizeAlloc(ClientData data[],
|
||||
Tcl_Interp *interp, int result);
|
||||
static int FinalizeNext(ClientData data[],
|
||||
Tcl_Interp *interp, int result);
|
||||
static int FinalizeObjectCall(ClientData data[],
|
||||
Tcl_Interp *interp, int result);
|
||||
static Tcl_NRPostProc FinalizeAlloc;
|
||||
static Tcl_NRPostProc FinalizeNext;
|
||||
static Tcl_NRPostProc FinalizeObjectCall;
|
||||
static int InitFoundation(Tcl_Interp *interp);
|
||||
static void KillFoundation(ClientData clientData,
|
||||
Tcl_Interp *interp);
|
||||
@@ -1687,7 +1684,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 +1695,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 +1825,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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@
|
||||
* win/tclooConfig.sh
|
||||
*/
|
||||
|
||||
#define TCLOO_VERSION "1.0.4"
|
||||
#define TCLOO_VERSION "1.0.5"
|
||||
#define TCLOO_PATCHLEVEL TCLOO_VERSION
|
||||
|
||||
#include "tcl.h"
|
||||
|
||||
+3
-6
@@ -70,15 +70,12 @@ static void AddSimpleClassChainToCallContext(Class *classPtr,
|
||||
Class *const filterDecl);
|
||||
static int CmpStr(const void *ptr1, const void *ptr2);
|
||||
static void DupMethodNameRep(Tcl_Obj *srcPtr, Tcl_Obj *dstPtr);
|
||||
static int FinalizeMethodRefs(ClientData data[],
|
||||
Tcl_Interp *interp, int result);
|
||||
static Tcl_NRPostProc FinalizeMethodRefs;
|
||||
static void FreeMethodNameRep(Tcl_Obj *objPtr);
|
||||
static inline int IsStillValid(CallChain *callPtr, Object *oPtr,
|
||||
int flags, int reuseMask);
|
||||
static int ResetFilterFlags(ClientData data[],
|
||||
Tcl_Interp *interp, int result);
|
||||
static int SetFilterFlags(ClientData data[],
|
||||
Tcl_Interp *interp, int result);
|
||||
static Tcl_NRPostProc ResetFilterFlags;
|
||||
static Tcl_NRPostProc SetFilterFlags;
|
||||
static inline void StashCallChain(Tcl_Obj *objPtr, CallChain *callPtr);
|
||||
|
||||
/*
|
||||
|
||||
+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);
|
||||
|
||||
+10
-23
@@ -70,10 +70,8 @@ static Tcl_Obj ** InitEnsembleRewrite(Tcl_Interp *interp, int objc,
|
||||
static int InvokeProcedureMethod(ClientData clientData,
|
||||
Tcl_Interp *interp, Tcl_ObjectContext context,
|
||||
int objc, Tcl_Obj *const *objv);
|
||||
static int FinalizeForwardCall(ClientData data[], Tcl_Interp *interp,
|
||||
int result);
|
||||
static int FinalizePMCall(ClientData data[], Tcl_Interp *interp,
|
||||
int result);
|
||||
static Tcl_NRPostProc FinalizeForwardCall;
|
||||
static Tcl_NRPostProc FinalizePMCall;
|
||||
static int PushMethodCallFrame(Tcl_Interp *interp,
|
||||
CallContext *contextPtr, ProcedureMethod *pmPtr,
|
||||
int objc, Tcl_Obj *const *objv,
|
||||
@@ -1458,6 +1456,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 +1597,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 +1613,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;
|
||||
}
|
||||
|
||||
+3
-2
@@ -320,7 +320,7 @@ const Tcl_HashKeyType tclObjHashKeyType = {
|
||||
* does allow them to delete a command when references to it are gone, which
|
||||
* is fragile but useful given their somewhat-OO style. Because of this, this
|
||||
* structure MUST NOT be const so that the C compiler puts the data in
|
||||
* writable memory. [Bug 2558422]
|
||||
* writable memory. [Bug 2558422] [Bug 07d13d99b0a9]
|
||||
* TODO: Provide a better API for those extensions so that they can coexist...
|
||||
*/
|
||||
|
||||
@@ -4176,7 +4176,8 @@ Tcl_GetCommandFromObj(
|
||||
* had is invalid one way or another.
|
||||
*/
|
||||
|
||||
if (SetCmdNameFromAny(interp, objPtr) != TCL_OK) {
|
||||
/* See [] why we cannot call SetCmdNameFromAny() directly here. */
|
||||
if (tclCmdNameType.setFromAnyProc(interp, objPtr) != TCL_OK) {
|
||||
return NULL;
|
||||
}
|
||||
resPtr = objPtr->internalRep.twoPtrValue.ptr1;
|
||||
|
||||
@@ -869,12 +869,16 @@ TclJoinPath(
|
||||
* object which can be normalized more efficiently. Currently we only
|
||||
* use the special case when we have exactly two elements, but we
|
||||
* could expand that in the future.
|
||||
*
|
||||
* Bugfix [a47641a0]. TclNewFSPathObj requires first argument
|
||||
* to be an absolute path. Added a check for that elt is absolute.
|
||||
*/
|
||||
|
||||
if ((i == (elements-2)) && (i == 0)
|
||||
&& (elt->typePtr == &tclFsPathType)
|
||||
&& !((elt->bytes != NULL) && (elt->bytes[0] == '\0'))) {
|
||||
Tcl_Obj *tailObj = objv[i+1];
|
||||
&& (elt->typePtr == &tclFsPathType)
|
||||
&& !((elt->bytes != NULL) && (elt->bytes[0] == '\0'))
|
||||
&& TclGetPathType(elt, NULL, NULL, NULL) == TCL_PATH_ABSOLUTE) {
|
||||
Tcl_Obj *tailObj = objv[i+1];
|
||||
|
||||
type = TclGetPathType(tailObj, NULL, NULL, NULL);
|
||||
if (type == TCL_PATH_RELATIVE) {
|
||||
|
||||
+60
-100
@@ -22,7 +22,6 @@
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
int isRootEnsemble;
|
||||
Command cmd;
|
||||
ExtraFrameInfo efi;
|
||||
} ApplyExtraData;
|
||||
@@ -69,9 +68,8 @@ const Tcl_ObjType tclProcBodyType = {
|
||||
};
|
||||
|
||||
/*
|
||||
* The [upvar]/[uplevel] level reference type. Uses the twoPtrValue field,
|
||||
* encoding the type of level reference in ptr and the actual parsed out
|
||||
* offset in ptr2.
|
||||
* The [upvar]/[uplevel] level reference type. Uses the longValue field
|
||||
* to remember the integer value of a parsed #<integer> format.
|
||||
*
|
||||
* Uses the default behaviour throughout, and never disposes of the string
|
||||
* rep; it's just a cache type.
|
||||
@@ -785,7 +783,7 @@ TclGetFrame(
|
||||
* Results:
|
||||
* The return value is -1 if an error occurred in finding the frame (in
|
||||
* this case an error message is left in the interp's result). 1 is
|
||||
* returned if objPtr was either a number or a number preceded by "#" and
|
||||
* returned if objPtr was either an int or an int preceded by "#" and
|
||||
* it specified a valid frame. 0 is returned if objPtr isn't one of the
|
||||
* two things above (in this case, the lookup acts as if objPtr were
|
||||
* "1"). The variable pointed to by framePtrPtr is filled in with the
|
||||
@@ -807,97 +805,71 @@ TclObjGetFrame(
|
||||
{
|
||||
register Interp *iPtr = (Interp *) interp;
|
||||
int curLevel, level, result;
|
||||
CallFrame *framePtr;
|
||||
const char *name;
|
||||
const char *name = NULL;
|
||||
|
||||
/*
|
||||
* Parse object to figure out which level number to go to.
|
||||
*/
|
||||
|
||||
result = 1;
|
||||
result = 0;
|
||||
curLevel = iPtr->varFramePtr->level;
|
||||
if (objPtr == NULL) {
|
||||
name = "1";
|
||||
goto haveLevel1;
|
||||
}
|
||||
|
||||
name = TclGetString(objPtr);
|
||||
if (objPtr->typePtr == &levelReferenceType) {
|
||||
if (objPtr->internalRep.twoPtrValue.ptr1) {
|
||||
level = curLevel - PTR2INT(objPtr->internalRep.twoPtrValue.ptr2);
|
||||
} else {
|
||||
level = PTR2INT(objPtr->internalRep.twoPtrValue.ptr2);
|
||||
}
|
||||
if (level < 0) {
|
||||
goto levelError;
|
||||
}
|
||||
/* TODO: Consider skipping the typePtr checks */
|
||||
} else if (objPtr->typePtr == &tclIntType
|
||||
#ifndef TCL_WIDE_INT_IS_LONG
|
||||
|| objPtr->typePtr == &tclWideIntType
|
||||
#endif
|
||||
) {
|
||||
if (TclGetIntFromObj(NULL, objPtr, &level) != TCL_OK || level < 0) {
|
||||
goto levelError;
|
||||
}
|
||||
level = curLevel - level;
|
||||
} else if (*name == '#') {
|
||||
if (Tcl_GetInt(interp, name+1, &level) != TCL_OK || level < 0) {
|
||||
goto levelError;
|
||||
}
|
||||
|
||||
/*
|
||||
* Cache for future reference.
|
||||
*/
|
||||
|
||||
TclFreeIntRep(objPtr);
|
||||
objPtr->typePtr = &levelReferenceType;
|
||||
objPtr->internalRep.twoPtrValue.ptr1 = (void *) 0;
|
||||
objPtr->internalRep.twoPtrValue.ptr2 = INT2PTR(level);
|
||||
} else if (isdigit(UCHAR(*name))) { /* INTL: digit */
|
||||
if (Tcl_GetInt(interp, name, &level) != TCL_OK) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Cache for future reference.
|
||||
*/
|
||||
|
||||
TclFreeIntRep(objPtr);
|
||||
objPtr->typePtr = &levelReferenceType;
|
||||
objPtr->internalRep.twoPtrValue.ptr1 = (void *) 1;
|
||||
objPtr->internalRep.twoPtrValue.ptr2 = INT2PTR(level);
|
||||
level = curLevel - level;
|
||||
} else {
|
||||
/*
|
||||
* Don't cache as the object *isn't* a level reference (might even be
|
||||
* NULL...)
|
||||
*/
|
||||
|
||||
haveLevel1:
|
||||
level = curLevel - 1;
|
||||
result = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Figure out which frame to use, and return it to the caller.
|
||||
* Check for integer first, since that has potential to spare us
|
||||
* a generation of a stringrep.
|
||||
*/
|
||||
|
||||
for (framePtr = iPtr->varFramePtr; framePtr != NULL;
|
||||
framePtr = framePtr->callerVarPtr) {
|
||||
if (framePtr->level == level) {
|
||||
break;
|
||||
if (objPtr == NULL) {
|
||||
/* Do nothing */
|
||||
} else if (TCL_OK == Tcl_GetIntFromObj(NULL, objPtr, &level)
|
||||
&& (level >= 0)) {
|
||||
level = curLevel - level;
|
||||
result = 1;
|
||||
} else if (objPtr->typePtr == &levelReferenceType) {
|
||||
level = (int) objPtr->internalRep.longValue;
|
||||
result = 1;
|
||||
} else {
|
||||
name = TclGetString(objPtr);
|
||||
if (name[0] == '#') {
|
||||
if (TCL_OK == Tcl_GetInt(NULL, name+1, &level) && level >= 0) {
|
||||
TclFreeIntRep(objPtr);
|
||||
objPtr->typePtr = &levelReferenceType;
|
||||
objPtr->internalRep.longValue = level;
|
||||
result = 1;
|
||||
} else {
|
||||
result = -1;
|
||||
}
|
||||
} else if (isdigit(UCHAR(name[0]))) { /* INTL: digit */
|
||||
/*
|
||||
* If this were an integer, we'd have succeeded already.
|
||||
* Docs say we have to treat this as a 'bad level' error.
|
||||
*/
|
||||
result = -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (result == 0) {
|
||||
level = curLevel - 1;
|
||||
name = "1";
|
||||
}
|
||||
if (result != -1) {
|
||||
if (level >= 0) {
|
||||
CallFrame *framePtr;
|
||||
for (framePtr = iPtr->varFramePtr; framePtr != NULL;
|
||||
framePtr = framePtr->callerVarPtr) {
|
||||
if (framePtr->level == level) {
|
||||
*framePtrPtr = framePtr;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (name == NULL) {
|
||||
name = TclGetString(objPtr);
|
||||
}
|
||||
}
|
||||
if (framePtr == NULL) {
|
||||
goto levelError;
|
||||
}
|
||||
*framePtrPtr = framePtr;
|
||||
return result;
|
||||
|
||||
levelError:
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1115,12 +1087,10 @@ ProcWrongNumArgs(
|
||||
if (framePtr->isProcCallFrame & FRAME_IS_LAMBDA) {
|
||||
desiredObjs[0] = Tcl_NewStringObj("lambdaExpr", -1);
|
||||
} else {
|
||||
((Interp *) interp)->ensembleRewrite.numInsertedObjs -= skip - 1;
|
||||
|
||||
#ifdef AVOID_HACKS_FOR_ITCL
|
||||
desiredObjs[0] = framePtr->objv[skip-1];
|
||||
#else
|
||||
desiredObjs[0] = Tcl_NewListObj(skip, framePtr->objv);
|
||||
desiredObjs[0] = Tcl_NewListObj(1, framePtr->objv + skip - 1);
|
||||
#endif /* AVOID_HACKS_FOR_ITCL */
|
||||
}
|
||||
Tcl_IncrRefCount(desiredObjs[0]);
|
||||
@@ -1555,6 +1525,10 @@ InitArgsAndLocals(
|
||||
*/
|
||||
|
||||
incorrectArgs:
|
||||
if ((skip != 1) &&
|
||||
TclInitRewriteEnsemble(interp, skip-1, 0, framePtr->objv)) {
|
||||
TclNRAddCallback(interp, TclClearRootEnsemble, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
memset(varPtr, 0,
|
||||
((framePtr->compiledLocals + localCt)-varPtr) * sizeof(Var));
|
||||
return ProcWrongNumArgs(interp, skip);
|
||||
@@ -2661,7 +2635,7 @@ TclNRApplyObjCmd(
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
Proc *procPtr = NULL;
|
||||
Tcl_Obj *lambdaPtr, *nsObjPtr;
|
||||
int result, isRootEnsemble;
|
||||
int result;
|
||||
Tcl_Namespace *nsPtr;
|
||||
ApplyExtraData *extraPtr;
|
||||
|
||||
@@ -2744,16 +2718,6 @@ 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;
|
||||
}
|
||||
extraPtr->isRootEnsemble = isRootEnsemble;
|
||||
|
||||
result = TclPushProcCallFrame(procPtr, interp, objc, objv, 1);
|
||||
if (result == TCL_OK) {
|
||||
TclNRAddCallback(interp, ApplyNR2, extraPtr, NULL, NULL, NULL);
|
||||
@@ -2770,10 +2734,6 @@ ApplyNR2(
|
||||
{
|
||||
ApplyExtraData *extraPtr = data[0];
|
||||
|
||||
if (extraPtr->isRootEnsemble) {
|
||||
((Interp *) interp)->ensembleRewrite.sourceObjs = NULL;
|
||||
}
|
||||
|
||||
TclStackFree(interp, extraPtr);
|
||||
return result;
|
||||
}
|
||||
|
||||
+1
-2
@@ -413,8 +413,7 @@ static int TestHashSystemHashCmd(ClientData clientData,
|
||||
Tcl_Interp *interp, int objc,
|
||||
Tcl_Obj *const objv[]);
|
||||
|
||||
static int NREUnwind_callback(ClientData data[], Tcl_Interp *interp,
|
||||
int result);
|
||||
static Tcl_NRPostProc NREUnwind_callback;
|
||||
static int TestNREUnwind(ClientData clientData,
|
||||
Tcl_Interp *interp, int objc,
|
||||
Tcl_Obj *const objv[]);
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#endif
|
||||
#include "tclInt.h"
|
||||
#include "tommath.h"
|
||||
#include "tclStringRep.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -46,13 +47,6 @@ static int TestobjCmd(ClientData dummy, Tcl_Interp *interp,
|
||||
int objc, Tcl_Obj *const objv[]);
|
||||
static int TeststringobjCmd(ClientData dummy, Tcl_Interp *interp,
|
||||
int objc, Tcl_Obj *const objv[]);
|
||||
|
||||
typedef struct TestString {
|
||||
int numChars;
|
||||
int allocated;
|
||||
int maxChars;
|
||||
Tcl_UniChar unicode[2];
|
||||
} TestString;
|
||||
|
||||
#define VARPTR_KEY "TCLOBJTEST_VARPTR"
|
||||
#define NUMBER_OF_OBJECT_VARS 20
|
||||
@@ -1141,7 +1135,7 @@ TeststringobjCmd(
|
||||
int varIndex, option, i, length;
|
||||
#define MAX_STRINGS 11
|
||||
const char *index, *string, *strings[MAX_STRINGS+1];
|
||||
TestString *strPtr;
|
||||
String *strPtr;
|
||||
Tcl_Obj **varPtr;
|
||||
static const char *const options[] = {
|
||||
"append", "appendstrings", "get", "get2", "length", "length2",
|
||||
|
||||
+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;
|
||||
}
|
||||
|
||||
+23
-39
@@ -219,10 +219,6 @@ static Tcl_SetFromAnyProc PanicOnSetVarName;
|
||||
* or NULL if it is this same obj
|
||||
* twoPtrValue.ptr2: index into locals table
|
||||
*
|
||||
* nsVarName - INTERNALREP DEFINITION:
|
||||
* twoPtrValue.ptr1: pointer to the namespace containing the reference
|
||||
* twoPtrValue.ptr2: pointer to the corresponding Var
|
||||
*
|
||||
* parsedVarName - INTERNALREP DEFINITION:
|
||||
* twoPtrValue.ptr1: pointer to the array name Tcl_Obj, or NULL if it is a
|
||||
* scalar variable
|
||||
@@ -741,21 +737,6 @@ TclObjLookupVarEx(
|
||||
return varPtr;
|
||||
}
|
||||
|
||||
/*
|
||||
* This flag bit should not interfere with TCL_GLOBAL_ONLY,
|
||||
* TCL_NAMESPACE_ONLY, or TCL_LEAVE_ERR_MSG; it signals that the variable
|
||||
* lookup is performed for upvar (or similar) purposes, with slightly
|
||||
* different rules:
|
||||
* - Bug #696893 - variable is either proc-local or in the current
|
||||
* namespace; never follow the second (global) resolution path
|
||||
* - Bug #631741 - do not use special namespace or interp resolvers
|
||||
*
|
||||
* It should also not collide with the (deprecated) TCL_PARSE_PART1 flag
|
||||
* (Bug #835020)
|
||||
*/
|
||||
|
||||
#define AVOID_RESOLVERS 0x40000
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
@@ -805,8 +786,8 @@ TclLookupSimpleVar(
|
||||
Tcl_Obj *varNamePtr, /* This is a simple variable name that could
|
||||
* represent a scalar or an array. */
|
||||
int flags, /* Only TCL_GLOBAL_ONLY, TCL_NAMESPACE_ONLY,
|
||||
* AVOID_RESOLVERS and TCL_LEAVE_ERR_MSG bits
|
||||
* matter. */
|
||||
* TCL_AVOID_RESOLVERS and TCL_LEAVE_ERR_MSG
|
||||
* bits matter. */
|
||||
const int create, /* If 1, create hash table entry for varname,
|
||||
* if it doesn't already exist. If 0, return
|
||||
* error if it doesn't exist. */
|
||||
@@ -846,7 +827,7 @@ TclLookupSimpleVar(
|
||||
*/
|
||||
|
||||
if ((cxtNsPtr->varResProc != NULL || iPtr->resolverPtr != NULL)
|
||||
&& !(flags & AVOID_RESOLVERS)) {
|
||||
&& !(flags & TCL_AVOID_RESOLVERS)) {
|
||||
resPtr = iPtr->resolverPtr;
|
||||
if (cxtNsPtr->varResProc) {
|
||||
result = cxtNsPtr->varResProc(interp, varName,
|
||||
@@ -899,7 +880,7 @@ TclLookupSimpleVar(
|
||||
*indexPtr = -1;
|
||||
flags = (flags | TCL_GLOBAL_ONLY) & ~TCL_NAMESPACE_ONLY;
|
||||
} else {
|
||||
if (flags & AVOID_RESOLVERS) {
|
||||
if (flags & TCL_AVOID_RESOLVERS) {
|
||||
flags = (flags | TCL_NAMESPACE_ONLY);
|
||||
}
|
||||
if (flags & TCL_NAMESPACE_ONLY) {
|
||||
@@ -914,7 +895,7 @@ TclLookupSimpleVar(
|
||||
|
||||
varPtr = (Var *) ObjFindNamespaceVar(interp, varNamePtr,
|
||||
(Tcl_Namespace *) cxtNsPtr,
|
||||
(flags | AVOID_RESOLVERS) & ~TCL_LEAVE_ERR_MSG);
|
||||
(flags | TCL_AVOID_RESOLVERS) & ~TCL_LEAVE_ERR_MSG);
|
||||
if (varPtr == NULL) {
|
||||
Tcl_Obj *tailPtr;
|
||||
|
||||
@@ -4396,15 +4377,15 @@ TclPtrObjMakeUpvar(
|
||||
|
||||
/*
|
||||
* Lookup and eventually create the new variable. Set the flag bit
|
||||
* AVOID_RESOLVERS to indicate the special resolution rules for upvar
|
||||
* purposes:
|
||||
* TCL_AVOID_RESOLVERS to indicate the special resolution rules for
|
||||
* upvar purposes:
|
||||
* - Bug #696893 - variable is either proc-local or in the current
|
||||
* namespace; never follow the second (global) resolution path.
|
||||
* - Bug #631741 - do not use special namespace or interp resolvers.
|
||||
*/
|
||||
|
||||
varPtr = TclLookupSimpleVar(interp, myNamePtr,
|
||||
myFlags|AVOID_RESOLVERS, /* create */ 1, &errMsg, &index);
|
||||
myFlags|TCL_AVOID_RESOLVERS, /* create */ 1, &errMsg, &index);
|
||||
if (varPtr == NULL) {
|
||||
TclObjVarErrMsg(interp, myNamePtr, NULL, "create", errMsg, -1);
|
||||
Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "VARNAME",
|
||||
@@ -4938,7 +4919,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;
|
||||
}
|
||||
|
||||
@@ -5694,11 +5676,12 @@ Tcl_FindNamespaceVar(
|
||||
* Otherwise, points to namespace in which to
|
||||
* resolve name. If NULL, look up name in the
|
||||
* current namespace. */
|
||||
int flags) /* An OR'd combination of: AVOID_RESOLVERS,
|
||||
* TCL_GLOBAL_ONLY (look up name only in
|
||||
* global namespace), TCL_NAMESPACE_ONLY (look
|
||||
* up only in contextNsPtr, or the current
|
||||
* namespace if contextNsPtr is NULL), and
|
||||
int flags) /* An OR'd combination of:
|
||||
* TCL_AVOID_RESOLVERS, TCL_GLOBAL_ONLY (look
|
||||
* up name only in global namespace),
|
||||
* TCL_NAMESPACE_ONLY (look up only in
|
||||
* contextNsPtr, or the current namespace if
|
||||
* contextNsPtr is NULL), and
|
||||
* TCL_LEAVE_ERR_MSG. If both TCL_GLOBAL_ONLY
|
||||
* and TCL_NAMESPACE_ONLY are given,
|
||||
* TCL_GLOBAL_ONLY is ignored. */
|
||||
@@ -5724,11 +5707,12 @@ ObjFindNamespaceVar(
|
||||
* Otherwise, points to namespace in which to
|
||||
* resolve name. If NULL, look up name in the
|
||||
* current namespace. */
|
||||
int flags) /* An OR'd combination of: AVOID_RESOLVERS,
|
||||
* TCL_GLOBAL_ONLY (look up name only in
|
||||
* global namespace), TCL_NAMESPACE_ONLY (look
|
||||
* up only in contextNsPtr, or the current
|
||||
* namespace if contextNsPtr is NULL), and
|
||||
int flags) /* An OR'd combination of:
|
||||
* TCL_AVOID_RESOLVERS, TCL_GLOBAL_ONLY (look
|
||||
* up name only in global namespace),
|
||||
* TCL_NAMESPACE_ONLY (look up only in
|
||||
* contextNsPtr, or the current namespace if
|
||||
* contextNsPtr is NULL), and
|
||||
* TCL_LEAVE_ERR_MSG. If both TCL_GLOBAL_ONLY
|
||||
* and TCL_NAMESPACE_ONLY are given,
|
||||
* TCL_GLOBAL_ONLY is ignored. */
|
||||
@@ -5758,7 +5742,7 @@ ObjFindNamespaceVar(
|
||||
cxtNsPtr = (Namespace *) TclGetCurrentNamespace(interp);
|
||||
}
|
||||
|
||||
if (!(flags & AVOID_RESOLVERS) &&
|
||||
if (!(flags & TCL_AVOID_RESOLVERS) &&
|
||||
(cxtNsPtr->varResProc != NULL || iPtr->resolverPtr != NULL)) {
|
||||
resPtr = iPtr->resolverPtr;
|
||||
|
||||
|
||||
+20
-25
@@ -1194,11 +1194,12 @@ Tcl_ZlibStreamPut(
|
||||
zshPtr->stream.next_out = (Bytef *) dataTmp;
|
||||
|
||||
e = deflate(&zshPtr->stream, flush);
|
||||
while (e == Z_BUF_ERROR) {
|
||||
while (e == Z_BUF_ERROR || (flush == Z_FINISH && e == Z_OK)) {
|
||||
/*
|
||||
* Output buffer too small to hold the data being generated; so
|
||||
* put a new buffer into place after saving the old generated
|
||||
* data to the outData list.
|
||||
* Output buffer too small to hold the data being generated or we
|
||||
* are doing the end-of-stream flush (which can spit out masses of
|
||||
* data). This means we need to put a new buffer into place after
|
||||
* saving the old generated data to the outData list.
|
||||
*/
|
||||
|
||||
obj = Tcl_NewByteArrayObj((unsigned char *) dataTmp, outSize);
|
||||
@@ -2905,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);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3343,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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3548,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);
|
||||
@@ -3602,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
-1
@@ -16,7 +16,7 @@
|
||||
if {[info commands package] == ""} {
|
||||
error "version mismatch: library\nscripts expect Tcl version 7.5b1 or later but the loaded version is\nonly [info patchlevel]"
|
||||
}
|
||||
package require -exact Tcl 8.6.5
|
||||
package require -exact Tcl 8.6.6
|
||||
|
||||
# Compute the auto path to use in this interpreter.
|
||||
# The values on the path come from several locations:
|
||||
|
||||
@@ -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
|
||||
@@ -2683,7 +2709,7 @@ proc tcltest::GetMatchingDirectories {rootdir} {
|
||||
DebugPuts 1 "No test directories remain after applying match\
|
||||
and skip patterns!"
|
||||
}
|
||||
return $matchDirs
|
||||
return [lsort $matchDirs]
|
||||
}
|
||||
|
||||
# tcltest::runAllTests --
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Cambridge_Bay) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-1577923200 -25200 0 MST}
|
||||
{-880210800 -21600 1 MWT}
|
||||
{-769395600 -21600 1 MPT}
|
||||
|
||||
@@ -6,4 +6,5 @@ set TZData(:America/Caracas) {
|
||||
{-1826739140 -16200 0 VET}
|
||||
{-157750200 -14400 0 VET}
|
||||
{1197183600 -16200 0 VET}
|
||||
{1462086000 -14400 0 VET}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Inuvik) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-536457600 -28800 0 PST}
|
||||
{-147888000 -21600 1 PDDT}
|
||||
{-131558400 -28800 0 PST}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Iqaluit) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-865296000 -14400 0 EWT}
|
||||
{-769395600 -14400 1 EPT}
|
||||
{-765396000 -18000 0 EST}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Pangnirtung) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-1546300800 -14400 0 AST}
|
||||
{-880221600 -10800 1 AWT}
|
||||
{-769395600 -10800 1 APT}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Rankin_Inlet) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-410227200 -21600 0 CST}
|
||||
{-147895200 -14400 1 CDDT}
|
||||
{-131565600 -21600 0 CST}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Resolute) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-704937600 -21600 0 CST}
|
||||
{-147895200 -14400 1 CDDT}
|
||||
{-131565600 -21600 0 CST}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Yellowknife) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-1104537600 -25200 0 MST}
|
||||
{-880210800 -21600 1 MWT}
|
||||
{-769395600 -21600 1 MPT}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Antarctica/Casey) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-31536000 28800 0 AWST}
|
||||
{1255802400 39600 0 CAST}
|
||||
{1267714800 28800 0 AWST}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Antarctica/Davis) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-409190400 25200 0 DAVT}
|
||||
{-163062000 0 0 zzz}
|
||||
{-163062000 0 0 -00}
|
||||
{-28857600 25200 0 DAVT}
|
||||
{1255806000 18000 0 DAVT}
|
||||
{1268251200 25200 0 DAVT}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Antarctica/DumontDUrville) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-725846400 36000 0 PMT}
|
||||
{-566992800 0 0 zzz}
|
||||
{-566992800 0 0 -00}
|
||||
{-415497600 36000 0 DDUT}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Antarctica/Macquarie) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-2214259200 36000 0 AEST}
|
||||
{-1680508800 39600 1 AEDT}
|
||||
{-1669892400 39600 0 AEDT}
|
||||
{-1665392400 36000 0 AEST}
|
||||
{-1601719200 0 0 zzz}
|
||||
{-1601719200 0 0 -00}
|
||||
{-94730400 36000 0 AEST}
|
||||
{-71136000 39600 1 AEDT}
|
||||
{-55411200 36000 0 AEST}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Antarctica/Mawson) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-501206400 21600 0 MAWT}
|
||||
{1255809600 18000 0 MAWT}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Antarctica/Palmer) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-157766400 -14400 0 ART}
|
||||
{-152654400 -14400 0 ART}
|
||||
{-132955200 -10800 1 ARST}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Antarctica/Rothera) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{218246400 -10800 0 ROTT}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Antarctica/Syowa) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-407808000 10800 0 SYOT}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Antarctica/Troll) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{1108166400 0 0 UTC}
|
||||
{1111885200 7200 1 CEST}
|
||||
{1130634000 0 0 UTC}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Antarctica/Vostok) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-9223372036854775808 0 0 -00}
|
||||
{-380073600 21600 0 VOST}
|
||||
}
|
||||
|
||||
+52
-51
@@ -2,55 +2,56 @@
|
||||
|
||||
set TZData(:Asia/Almaty) {
|
||||
{-9223372036854775808 18468 0 LMT}
|
||||
{-1441170468 18000 0 ALMT}
|
||||
{-1247547600 21600 0 ALMT}
|
||||
{354909600 25200 1 ALMST}
|
||||
{370717200 21600 0 ALMT}
|
||||
{386445600 25200 1 ALMST}
|
||||
{402253200 21600 0 ALMT}
|
||||
{417981600 25200 1 ALMST}
|
||||
{433789200 21600 0 ALMT}
|
||||
{449604000 25200 1 ALMST}
|
||||
{465336000 21600 0 ALMT}
|
||||
{481060800 25200 1 ALMST}
|
||||
{496785600 21600 0 ALMT}
|
||||
{512510400 25200 1 ALMST}
|
||||
{528235200 21600 0 ALMT}
|
||||
{543960000 25200 1 ALMST}
|
||||
{559684800 21600 0 ALMT}
|
||||
{575409600 25200 1 ALMST}
|
||||
{591134400 21600 0 ALMT}
|
||||
{606859200 25200 1 ALMST}
|
||||
{622584000 21600 0 ALMT}
|
||||
{638308800 25200 1 ALMST}
|
||||
{654638400 21600 0 ALMT}
|
||||
{662666400 21600 0 ALMT}
|
||||
{694202400 21600 0 ALMT}
|
||||
{701802000 25200 1 ALMST}
|
||||
{717523200 21600 0 ALMT}
|
||||
{733262400 25200 1 ALMST}
|
||||
{748987200 21600 0 ALMT}
|
||||
{764712000 25200 1 ALMST}
|
||||
{780436800 21600 0 ALMT}
|
||||
{796161600 25200 1 ALMST}
|
||||
{811886400 21600 0 ALMT}
|
||||
{828216000 25200 1 ALMST}
|
||||
{846360000 21600 0 ALMT}
|
||||
{859665600 25200 1 ALMST}
|
||||
{877809600 21600 0 ALMT}
|
||||
{891115200 25200 1 ALMST}
|
||||
{909259200 21600 0 ALMT}
|
||||
{922564800 25200 1 ALMST}
|
||||
{941313600 21600 0 ALMT}
|
||||
{954014400 25200 1 ALMST}
|
||||
{972763200 21600 0 ALMT}
|
||||
{985464000 25200 1 ALMST}
|
||||
{1004212800 21600 0 ALMT}
|
||||
{1017518400 25200 1 ALMST}
|
||||
{1035662400 21600 0 ALMT}
|
||||
{1048968000 25200 1 ALMST}
|
||||
{1067112000 21600 0 ALMT}
|
||||
{1080417600 25200 1 ALMST}
|
||||
{1099166400 21600 0 ALMT}
|
||||
{1110823200 21600 0 ALMT}
|
||||
{-1441170468 18000 0 +05}
|
||||
{-1247547600 21600 0 +06}
|
||||
{354909600 25200 1 +07}
|
||||
{370717200 21600 0 +06}
|
||||
{386445600 25200 1 +07}
|
||||
{402253200 21600 0 +06}
|
||||
{417981600 25200 1 +07}
|
||||
{433789200 21600 0 +06}
|
||||
{449604000 25200 1 +07}
|
||||
{465336000 21600 0 +06}
|
||||
{481060800 25200 1 +07}
|
||||
{496785600 21600 0 +06}
|
||||
{512510400 25200 1 +07}
|
||||
{528235200 21600 0 +06}
|
||||
{543960000 25200 1 +07}
|
||||
{559684800 21600 0 +06}
|
||||
{575409600 25200 1 +07}
|
||||
{591134400 21600 0 +06}
|
||||
{606859200 25200 1 +07}
|
||||
{622584000 21600 0 +06}
|
||||
{638308800 25200 1 +07}
|
||||
{654638400 21600 0 +06}
|
||||
{670363200 18000 0 +05}
|
||||
{670366800 21600 1 +06}
|
||||
{686091600 18000 0 +05}
|
||||
{695768400 21600 0 +06}
|
||||
{701812800 25200 1 +07}
|
||||
{717537600 21600 0 +06}
|
||||
{733262400 25200 1 +07}
|
||||
{748987200 21600 0 +06}
|
||||
{764712000 25200 1 +07}
|
||||
{780436800 21600 0 +06}
|
||||
{796161600 25200 1 +07}
|
||||
{811886400 21600 0 +06}
|
||||
{828216000 25200 1 +07}
|
||||
{846360000 21600 0 +06}
|
||||
{859665600 25200 1 +07}
|
||||
{877809600 21600 0 +06}
|
||||
{891115200 25200 1 +07}
|
||||
{909259200 21600 0 +06}
|
||||
{922564800 25200 1 +07}
|
||||
{941313600 21600 0 +06}
|
||||
{954014400 25200 1 +07}
|
||||
{972763200 21600 0 +06}
|
||||
{985464000 25200 1 +07}
|
||||
{1004212800 21600 0 +06}
|
||||
{1017518400 25200 1 +07}
|
||||
{1035662400 21600 0 +06}
|
||||
{1048968000 25200 1 +07}
|
||||
{1067112000 21600 0 +06}
|
||||
{1080417600 25200 1 +07}
|
||||
{1099166400 21600 0 +06}
|
||||
}
|
||||
|
||||
@@ -29,8 +29,8 @@ set TZData(:Asia/Anadyr) {
|
||||
{670345200 43200 1 ANAST}
|
||||
{686070000 39600 0 ANAT}
|
||||
{695746800 43200 0 ANAMMTT}
|
||||
{701780400 46800 1 ANAST}
|
||||
{717501600 43200 0 ANAT}
|
||||
{701791200 46800 1 ANAST}
|
||||
{717516000 43200 0 ANAT}
|
||||
{733240800 46800 1 ANAST}
|
||||
{748965600 43200 0 ANAT}
|
||||
{764690400 46800 1 ANAST}
|
||||
|
||||
+54
-53
@@ -2,57 +2,58 @@
|
||||
|
||||
set TZData(:Asia/Aqtau) {
|
||||
{-9223372036854775808 12064 0 LMT}
|
||||
{-1441164064 14400 0 FORT}
|
||||
{-1247544000 18000 0 FORT}
|
||||
{-220942800 18000 0 SHET}
|
||||
{370724400 21600 0 SHET}
|
||||
{386445600 18000 0 SHET}
|
||||
{386449200 21600 1 SHEST}
|
||||
{402256800 18000 0 SHET}
|
||||
{417985200 21600 1 SHEST}
|
||||
{433792800 18000 0 SHET}
|
||||
{449607600 21600 1 SHEST}
|
||||
{465339600 18000 0 SHET}
|
||||
{481064400 21600 1 SHEST}
|
||||
{496789200 18000 0 SHET}
|
||||
{512514000 21600 1 SHEST}
|
||||
{528238800 18000 0 SHET}
|
||||
{543963600 21600 1 SHEST}
|
||||
{559688400 18000 0 SHET}
|
||||
{575413200 21600 1 SHEST}
|
||||
{591138000 18000 0 SHET}
|
||||
{606862800 21600 1 SHEST}
|
||||
{622587600 18000 0 SHET}
|
||||
{638312400 21600 1 SHEST}
|
||||
{654642000 18000 0 SHET}
|
||||
{662670000 18000 0 SHET}
|
||||
{692823600 18000 0 AQTT}
|
||||
{701805600 21600 1 AQTST}
|
||||
{717526800 18000 0 AQTT}
|
||||
{733266000 21600 1 AQTST}
|
||||
{748990800 18000 0 AQTT}
|
||||
{764715600 21600 1 AQTST}
|
||||
{780440400 18000 0 AQTT}
|
||||
{796165200 14400 0 AQTT}
|
||||
{796168800 18000 1 AQTST}
|
||||
{811893600 14400 0 AQTT}
|
||||
{828223200 18000 1 AQTST}
|
||||
{846367200 14400 0 AQTT}
|
||||
{859672800 18000 1 AQTST}
|
||||
{877816800 14400 0 AQTT}
|
||||
{891122400 18000 1 AQTST}
|
||||
{909266400 14400 0 AQTT}
|
||||
{922572000 18000 1 AQTST}
|
||||
{941320800 14400 0 AQTT}
|
||||
{954021600 18000 1 AQTST}
|
||||
{972770400 14400 0 AQTT}
|
||||
{985471200 18000 1 AQTST}
|
||||
{1004220000 14400 0 AQTT}
|
||||
{1017525600 18000 1 AQTST}
|
||||
{1035669600 14400 0 AQTT}
|
||||
{1048975200 18000 1 AQTST}
|
||||
{1067119200 14400 0 AQTT}
|
||||
{1080424800 18000 1 AQTST}
|
||||
{1099173600 14400 0 AQTT}
|
||||
{1110830400 18000 0 AQTT}
|
||||
{-1441164064 14400 0 +04}
|
||||
{-1247544000 18000 0 +05}
|
||||
{-220942800 18000 0 +05}
|
||||
{370724400 21600 0 +06}
|
||||
{386445600 18000 0 +05}
|
||||
{386449200 21600 1 +06}
|
||||
{402256800 18000 0 +05}
|
||||
{417985200 21600 1 +06}
|
||||
{433792800 18000 0 +05}
|
||||
{449607600 21600 1 +06}
|
||||
{465339600 18000 0 +05}
|
||||
{481064400 21600 1 +06}
|
||||
{496789200 18000 0 +05}
|
||||
{512514000 21600 1 +06}
|
||||
{528238800 18000 0 +05}
|
||||
{543963600 21600 1 +06}
|
||||
{559688400 18000 0 +05}
|
||||
{575413200 21600 1 +06}
|
||||
{591138000 18000 0 +05}
|
||||
{606862800 21600 1 +06}
|
||||
{622587600 18000 0 +05}
|
||||
{638312400 21600 1 +06}
|
||||
{654642000 18000 0 +05}
|
||||
{670366800 14400 0 +04}
|
||||
{670370400 18000 1 +05}
|
||||
{686095200 14400 0 +04}
|
||||
{695772000 18000 0 +05}
|
||||
{701816400 21600 1 +06}
|
||||
{717541200 18000 0 +05}
|
||||
{733266000 21600 1 +06}
|
||||
{748990800 18000 0 +05}
|
||||
{764715600 21600 1 +06}
|
||||
{780440400 18000 0 +05}
|
||||
{780444000 14400 0 +04}
|
||||
{796168800 18000 1 +05}
|
||||
{811893600 14400 0 +04}
|
||||
{828223200 18000 1 +05}
|
||||
{846367200 14400 0 +04}
|
||||
{859672800 18000 1 +05}
|
||||
{877816800 14400 0 +04}
|
||||
{891122400 18000 1 +05}
|
||||
{909266400 14400 0 +04}
|
||||
{922572000 18000 1 +05}
|
||||
{941320800 14400 0 +04}
|
||||
{954021600 18000 1 +05}
|
||||
{972770400 14400 0 +04}
|
||||
{985471200 18000 1 +05}
|
||||
{1004220000 14400 0 +04}
|
||||
{1017525600 18000 1 +05}
|
||||
{1035669600 14400 0 +04}
|
||||
{1048975200 18000 1 +05}
|
||||
{1067119200 14400 0 +04}
|
||||
{1080424800 18000 1 +05}
|
||||
{1099173600 18000 0 +05}
|
||||
}
|
||||
|
||||
+53
-52
@@ -2,56 +2,57 @@
|
||||
|
||||
set TZData(:Asia/Aqtobe) {
|
||||
{-9223372036854775808 13720 0 LMT}
|
||||
{-1441165720 14400 0 AKTT}
|
||||
{-1247544000 18000 0 AKTT}
|
||||
{354913200 21600 1 AKTST}
|
||||
{370720800 21600 0 AKTT}
|
||||
{386445600 18000 0 AKTT}
|
||||
{386449200 21600 1 AKTST}
|
||||
{402256800 18000 0 AKTT}
|
||||
{417985200 21600 1 AKTST}
|
||||
{433792800 18000 0 AKTT}
|
||||
{449607600 21600 1 AKTST}
|
||||
{465339600 18000 0 AKTT}
|
||||
{481064400 21600 1 AKTST}
|
||||
{496789200 18000 0 AKTT}
|
||||
{512514000 21600 1 AKTST}
|
||||
{528238800 18000 0 AKTT}
|
||||
{543963600 21600 1 AKTST}
|
||||
{559688400 18000 0 AKTT}
|
||||
{575413200 21600 1 AKTST}
|
||||
{591138000 18000 0 AKTT}
|
||||
{606862800 21600 1 AKTST}
|
||||
{622587600 18000 0 AKTT}
|
||||
{638312400 21600 1 AKTST}
|
||||
{654642000 18000 0 AKTT}
|
||||
{662670000 18000 0 AKTT}
|
||||
{692823600 18000 0 AQTT}
|
||||
{701805600 21600 1 AQTST}
|
||||
{717526800 18000 0 AQTT}
|
||||
{733266000 21600 1 AQTST}
|
||||
{748990800 18000 0 AQTT}
|
||||
{764715600 21600 1 AQTST}
|
||||
{780440400 18000 0 AQTT}
|
||||
{796165200 21600 1 AQTST}
|
||||
{811890000 18000 0 AQTT}
|
||||
{828219600 21600 1 AQTST}
|
||||
{846363600 18000 0 AQTT}
|
||||
{859669200 21600 1 AQTST}
|
||||
{877813200 18000 0 AQTT}
|
||||
{891118800 21600 1 AQTST}
|
||||
{909262800 18000 0 AQTT}
|
||||
{922568400 21600 1 AQTST}
|
||||
{941317200 18000 0 AQTT}
|
||||
{954018000 21600 1 AQTST}
|
||||
{972766800 18000 0 AQTT}
|
||||
{985467600 21600 1 AQTST}
|
||||
{1004216400 18000 0 AQTT}
|
||||
{1017522000 21600 1 AQTST}
|
||||
{1035666000 18000 0 AQTT}
|
||||
{1048971600 21600 1 AQTST}
|
||||
{1067115600 18000 0 AQTT}
|
||||
{1080421200 21600 1 AQTST}
|
||||
{1099170000 18000 0 AQTT}
|
||||
{1110826800 18000 0 AQTT}
|
||||
{-1441165720 14400 0 +04}
|
||||
{-1247544000 18000 0 +05}
|
||||
{354913200 21600 1 +06}
|
||||
{370720800 21600 0 +06}
|
||||
{386445600 18000 0 +05}
|
||||
{386449200 21600 1 +06}
|
||||
{402256800 18000 0 +05}
|
||||
{417985200 21600 1 +06}
|
||||
{433792800 18000 0 +05}
|
||||
{449607600 21600 1 +06}
|
||||
{465339600 18000 0 +05}
|
||||
{481064400 21600 1 +06}
|
||||
{496789200 18000 0 +05}
|
||||
{512514000 21600 1 +06}
|
||||
{528238800 18000 0 +05}
|
||||
{543963600 21600 1 +06}
|
||||
{559688400 18000 0 +05}
|
||||
{575413200 21600 1 +06}
|
||||
{591138000 18000 0 +05}
|
||||
{606862800 21600 1 +06}
|
||||
{622587600 18000 0 +05}
|
||||
{638312400 21600 1 +06}
|
||||
{654642000 18000 0 +05}
|
||||
{670366800 14400 0 +04}
|
||||
{670370400 18000 1 +05}
|
||||
{686095200 14400 0 +04}
|
||||
{695772000 18000 0 +05}
|
||||
{701816400 21600 1 +06}
|
||||
{717541200 18000 0 +05}
|
||||
{733266000 21600 1 +06}
|
||||
{748990800 18000 0 +05}
|
||||
{764715600 21600 1 +06}
|
||||
{780440400 18000 0 +05}
|
||||
{796165200 21600 1 +06}
|
||||
{811890000 18000 0 +05}
|
||||
{828219600 21600 1 +06}
|
||||
{846363600 18000 0 +05}
|
||||
{859669200 21600 1 +06}
|
||||
{877813200 18000 0 +05}
|
||||
{891118800 21600 1 +06}
|
||||
{909262800 18000 0 +05}
|
||||
{922568400 21600 1 +06}
|
||||
{941317200 18000 0 +05}
|
||||
{954018000 21600 1 +06}
|
||||
{972766800 18000 0 +05}
|
||||
{985467600 21600 1 +06}
|
||||
{1004216400 18000 0 +05}
|
||||
{1017522000 21600 1 +06}
|
||||
{1035666000 18000 0 +05}
|
||||
{1048971600 21600 1 +06}
|
||||
{1067115600 18000 0 +05}
|
||||
{1080421200 21600 1 +06}
|
||||
{1099170000 18000 0 +05}
|
||||
}
|
||||
|
||||
@@ -27,8 +27,8 @@ set TZData(:Asia/Baku) {
|
||||
{670370400 14400 1 BAKST}
|
||||
{683496000 14400 0 AZST}
|
||||
{686098800 10800 0 AZT}
|
||||
{701812800 14400 1 AZST}
|
||||
{717537600 14400 0 AZT}
|
||||
{701823600 14400 1 AZST}
|
||||
{717548400 14400 0 AZT}
|
||||
{820440000 14400 0 AZT}
|
||||
{828234000 18000 1 AZST}
|
||||
{846378000 14400 0 AZT}
|
||||
|
||||
@@ -28,8 +28,8 @@ set TZData(:Asia/Barnaul) {
|
||||
{670363200 25200 1 +07}
|
||||
{686088000 21600 0 +06}
|
||||
{695764800 25200 0 +08}
|
||||
{701798400 28800 1 +08}
|
||||
{717519600 25200 0 +07}
|
||||
{701809200 28800 1 +08}
|
||||
{717534000 25200 0 +07}
|
||||
{733258800 28800 1 +08}
|
||||
{748983600 25200 0 +07}
|
||||
{764708400 28800 1 +08}
|
||||
|
||||
@@ -28,8 +28,8 @@ set TZData(:Asia/Chita) {
|
||||
{670356000 32400 1 YAKST}
|
||||
{686080800 28800 0 YAKT}
|
||||
{695757600 32400 0 YAKMMTT}
|
||||
{701791200 36000 1 YAKST}
|
||||
{717512400 32400 0 YAKT}
|
||||
{701802000 36000 1 YAKST}
|
||||
{717526800 32400 0 YAKT}
|
||||
{733251600 36000 1 YAKST}
|
||||
{748976400 32400 0 YAKT}
|
||||
{764701200 36000 1 YAKST}
|
||||
|
||||
@@ -29,8 +29,8 @@ set TZData(:Asia/Irkutsk) {
|
||||
{670359600 28800 1 IRKST}
|
||||
{686084400 25200 0 IRKT}
|
||||
{695761200 28800 0 IRKMMTT}
|
||||
{701794800 32400 1 IRKST}
|
||||
{717516000 28800 0 IRKT}
|
||||
{701805600 32400 1 IRKST}
|
||||
{717530400 28800 0 IRKT}
|
||||
{733255200 32400 1 IRKST}
|
||||
{748980000 28800 0 IRKT}
|
||||
{764704800 32400 1 IRKST}
|
||||
|
||||
@@ -28,8 +28,8 @@ set TZData(:Asia/Kamchatka) {
|
||||
{670345200 43200 1 PETST}
|
||||
{686070000 39600 0 PETT}
|
||||
{695746800 43200 0 PETMMTT}
|
||||
{701780400 46800 1 PETST}
|
||||
{717501600 43200 0 PETT}
|
||||
{701791200 46800 1 PETST}
|
||||
{717516000 43200 0 PETT}
|
||||
{733240800 46800 1 PETST}
|
||||
{748965600 43200 0 PETT}
|
||||
{764690400 46800 1 PETST}
|
||||
|
||||
@@ -28,8 +28,8 @@ set TZData(:Asia/Khandyga) {
|
||||
{670356000 32400 1 YAKST}
|
||||
{686080800 28800 0 YAKT}
|
||||
{695757600 32400 0 YAKMMTT}
|
||||
{701791200 36000 1 YAKST}
|
||||
{717512400 32400 0 YAKT}
|
||||
{701802000 36000 1 YAKST}
|
||||
{717526800 32400 0 YAKT}
|
||||
{733251600 36000 1 YAKST}
|
||||
{748976400 32400 0 YAKT}
|
||||
{764701200 36000 1 YAKST}
|
||||
|
||||
@@ -28,8 +28,8 @@ set TZData(:Asia/Krasnoyarsk) {
|
||||
{670363200 25200 1 KRAST}
|
||||
{686088000 21600 0 KRAT}
|
||||
{695764800 25200 0 KRAMMTT}
|
||||
{701798400 28800 1 KRAST}
|
||||
{717519600 25200 0 KRAT}
|
||||
{701809200 28800 1 KRAST}
|
||||
{717534000 25200 0 KRAT}
|
||||
{733258800 28800 1 KRAST}
|
||||
{748983600 25200 0 KRAT}
|
||||
{764708400 28800 1 KRAST}
|
||||
|
||||
@@ -28,8 +28,8 @@ set TZData(:Asia/Magadan) {
|
||||
{670348800 39600 1 MAGST}
|
||||
{686073600 36000 0 MAGT}
|
||||
{695750400 39600 0 MAGMMTT}
|
||||
{701784000 43200 1 MAGST}
|
||||
{717505200 39600 0 MAGT}
|
||||
{701794800 43200 1 MAGST}
|
||||
{717519600 39600 0 MAGT}
|
||||
{733244400 43200 1 MAGST}
|
||||
{748969200 39600 0 MAGT}
|
||||
{764694000 43200 1 MAGST}
|
||||
@@ -68,4 +68,5 @@ set TZData(:Asia/Magadan) {
|
||||
{1288450800 39600 0 MAGT}
|
||||
{1301151600 43200 0 MAGT}
|
||||
{1414245600 36000 0 MAGT}
|
||||
{1461427200 39600 0 MAGT}
|
||||
}
|
||||
|
||||
@@ -2,71 +2,70 @@
|
||||
|
||||
set TZData(:Asia/Novokuznetsk) {
|
||||
{-9223372036854775808 20928 0 LMT}
|
||||
{-1441259328 21600 0 KRAT}
|
||||
{-1247551200 25200 0 KRAMMTT}
|
||||
{354906000 28800 1 KRAST}
|
||||
{370713600 25200 0 KRAT}
|
||||
{386442000 28800 1 KRAST}
|
||||
{402249600 25200 0 KRAT}
|
||||
{417978000 28800 1 KRAST}
|
||||
{433785600 25200 0 KRAT}
|
||||
{449600400 28800 1 KRAST}
|
||||
{465332400 25200 0 KRAT}
|
||||
{481057200 28800 1 KRAST}
|
||||
{496782000 25200 0 KRAT}
|
||||
{512506800 28800 1 KRAST}
|
||||
{528231600 25200 0 KRAT}
|
||||
{543956400 28800 1 KRAST}
|
||||
{559681200 25200 0 KRAT}
|
||||
{575406000 28800 1 KRAST}
|
||||
{591130800 25200 0 KRAT}
|
||||
{606855600 28800 1 KRAST}
|
||||
{622580400 25200 0 KRAT}
|
||||
{638305200 28800 1 KRAST}
|
||||
{654634800 25200 0 KRAT}
|
||||
{670359600 21600 0 KRAMMTT}
|
||||
{670363200 25200 1 KRAST}
|
||||
{686088000 21600 0 KRAT}
|
||||
{695764800 25200 0 KRAMMTT}
|
||||
{701798400 28800 1 KRAST}
|
||||
{717519600 25200 0 KRAT}
|
||||
{733258800 28800 1 KRAST}
|
||||
{748983600 25200 0 KRAT}
|
||||
{764708400 28800 1 KRAST}
|
||||
{780433200 25200 0 KRAT}
|
||||
{796158000 28800 1 KRAST}
|
||||
{811882800 25200 0 KRAT}
|
||||
{828212400 28800 1 KRAST}
|
||||
{846356400 25200 0 KRAT}
|
||||
{859662000 28800 1 KRAST}
|
||||
{877806000 25200 0 KRAT}
|
||||
{891111600 28800 1 KRAST}
|
||||
{909255600 25200 0 KRAT}
|
||||
{922561200 28800 1 KRAST}
|
||||
{941310000 25200 0 KRAT}
|
||||
{954010800 28800 1 KRAST}
|
||||
{972759600 25200 0 KRAT}
|
||||
{985460400 28800 1 KRAST}
|
||||
{1004209200 25200 0 KRAT}
|
||||
{1017514800 28800 1 KRAST}
|
||||
{1035658800 25200 0 KRAT}
|
||||
{1048964400 28800 1 KRAST}
|
||||
{1067108400 25200 0 KRAT}
|
||||
{1080414000 28800 1 KRAST}
|
||||
{1099162800 25200 0 KRAT}
|
||||
{1111863600 28800 1 KRAST}
|
||||
{1130612400 25200 0 KRAT}
|
||||
{1143313200 28800 1 KRAST}
|
||||
{1162062000 25200 0 KRAT}
|
||||
{1174762800 28800 1 KRAST}
|
||||
{1193511600 25200 0 KRAT}
|
||||
{1206817200 28800 1 KRAST}
|
||||
{1224961200 25200 0 KRAT}
|
||||
{1238266800 28800 1 KRAST}
|
||||
{1256410800 25200 0 KRAT}
|
||||
{1269716400 21600 0 NOVMMTT}
|
||||
{1269720000 25200 1 NOVST}
|
||||
{1288468800 21600 0 NOVT}
|
||||
{1301169600 25200 0 NOVT}
|
||||
{1414263600 25200 0 KRAT}
|
||||
{-1441259328 21600 0 +06}
|
||||
{-1247551200 25200 0 +08}
|
||||
{354906000 28800 1 +08}
|
||||
{370713600 25200 0 +07}
|
||||
{386442000 28800 1 +08}
|
||||
{402249600 25200 0 +07}
|
||||
{417978000 28800 1 +08}
|
||||
{433785600 25200 0 +07}
|
||||
{449600400 28800 1 +08}
|
||||
{465332400 25200 0 +07}
|
||||
{481057200 28800 1 +08}
|
||||
{496782000 25200 0 +07}
|
||||
{512506800 28800 1 +08}
|
||||
{528231600 25200 0 +07}
|
||||
{543956400 28800 1 +08}
|
||||
{559681200 25200 0 +07}
|
||||
{575406000 28800 1 +08}
|
||||
{591130800 25200 0 +07}
|
||||
{606855600 28800 1 +08}
|
||||
{622580400 25200 0 +07}
|
||||
{638305200 28800 1 +08}
|
||||
{654634800 25200 0 +07}
|
||||
{670359600 21600 0 +07}
|
||||
{670363200 25200 1 +07}
|
||||
{686088000 21600 0 +06}
|
||||
{695764800 25200 0 +08}
|
||||
{701809200 28800 1 +08}
|
||||
{717534000 25200 0 +07}
|
||||
{733258800 28800 1 +08}
|
||||
{748983600 25200 0 +07}
|
||||
{764708400 28800 1 +08}
|
||||
{780433200 25200 0 +07}
|
||||
{796158000 28800 1 +08}
|
||||
{811882800 25200 0 +07}
|
||||
{828212400 28800 1 +08}
|
||||
{846356400 25200 0 +07}
|
||||
{859662000 28800 1 +08}
|
||||
{877806000 25200 0 +07}
|
||||
{891111600 28800 1 +08}
|
||||
{909255600 25200 0 +07}
|
||||
{922561200 28800 1 +08}
|
||||
{941310000 25200 0 +07}
|
||||
{954010800 28800 1 +08}
|
||||
{972759600 25200 0 +07}
|
||||
{985460400 28800 1 +08}
|
||||
{1004209200 25200 0 +07}
|
||||
{1017514800 28800 1 +08}
|
||||
{1035658800 25200 0 +07}
|
||||
{1048964400 28800 1 +08}
|
||||
{1067108400 25200 0 +07}
|
||||
{1080414000 28800 1 +08}
|
||||
{1099162800 25200 0 +07}
|
||||
{1111863600 28800 1 +08}
|
||||
{1130612400 25200 0 +07}
|
||||
{1143313200 28800 1 +08}
|
||||
{1162062000 25200 0 +07}
|
||||
{1174762800 28800 1 +08}
|
||||
{1193511600 25200 0 +07}
|
||||
{1206817200 28800 1 +08}
|
||||
{1224961200 25200 0 +07}
|
||||
{1238266800 28800 1 +08}
|
||||
{1256410800 25200 0 +07}
|
||||
{1269716400 21600 0 +07}
|
||||
{1269720000 25200 1 +07}
|
||||
{1288468800 21600 0 +06}
|
||||
{1301169600 25200 0 +07}
|
||||
}
|
||||
|
||||
@@ -2,71 +2,72 @@
|
||||
|
||||
set TZData(:Asia/Novosibirsk) {
|
||||
{-9223372036854775808 19900 0 LMT}
|
||||
{-1579476700 21600 0 NOVT}
|
||||
{-1247551200 25200 0 NOVMMTT}
|
||||
{354906000 28800 1 NOVST}
|
||||
{370713600 25200 0 NOVT}
|
||||
{386442000 28800 1 NOVST}
|
||||
{402249600 25200 0 NOVT}
|
||||
{417978000 28800 1 NOVST}
|
||||
{433785600 25200 0 NOVT}
|
||||
{449600400 28800 1 NOVST}
|
||||
{465332400 25200 0 NOVT}
|
||||
{481057200 28800 1 NOVST}
|
||||
{496782000 25200 0 NOVT}
|
||||
{512506800 28800 1 NOVST}
|
||||
{528231600 25200 0 NOVT}
|
||||
{543956400 28800 1 NOVST}
|
||||
{559681200 25200 0 NOVT}
|
||||
{575406000 28800 1 NOVST}
|
||||
{591130800 25200 0 NOVT}
|
||||
{606855600 28800 1 NOVST}
|
||||
{622580400 25200 0 NOVT}
|
||||
{638305200 28800 1 NOVST}
|
||||
{654634800 25200 0 NOVT}
|
||||
{670359600 21600 0 NOVMMTT}
|
||||
{670363200 25200 1 NOVST}
|
||||
{686088000 21600 0 NOVT}
|
||||
{695764800 25200 0 NOVMMTT}
|
||||
{701798400 28800 1 NOVST}
|
||||
{717519600 25200 0 NOVT}
|
||||
{733258800 28800 1 NOVST}
|
||||
{738090000 25200 0 NOVST}
|
||||
{748987200 21600 0 NOVT}
|
||||
{764712000 25200 1 NOVST}
|
||||
{780436800 21600 0 NOVT}
|
||||
{796161600 25200 1 NOVST}
|
||||
{811886400 21600 0 NOVT}
|
||||
{828216000 25200 1 NOVST}
|
||||
{846360000 21600 0 NOVT}
|
||||
{859665600 25200 1 NOVST}
|
||||
{877809600 21600 0 NOVT}
|
||||
{891115200 25200 1 NOVST}
|
||||
{909259200 21600 0 NOVT}
|
||||
{922564800 25200 1 NOVST}
|
||||
{941313600 21600 0 NOVT}
|
||||
{954014400 25200 1 NOVST}
|
||||
{972763200 21600 0 NOVT}
|
||||
{985464000 25200 1 NOVST}
|
||||
{1004212800 21600 0 NOVT}
|
||||
{1017518400 25200 1 NOVST}
|
||||
{1035662400 21600 0 NOVT}
|
||||
{1048968000 25200 1 NOVST}
|
||||
{1067112000 21600 0 NOVT}
|
||||
{1080417600 25200 1 NOVST}
|
||||
{1099166400 21600 0 NOVT}
|
||||
{1111867200 25200 1 NOVST}
|
||||
{1130616000 21600 0 NOVT}
|
||||
{1143316800 25200 1 NOVST}
|
||||
{1162065600 21600 0 NOVT}
|
||||
{1174766400 25200 1 NOVST}
|
||||
{1193515200 21600 0 NOVT}
|
||||
{1206820800 25200 1 NOVST}
|
||||
{1224964800 21600 0 NOVT}
|
||||
{1238270400 25200 1 NOVST}
|
||||
{1256414400 21600 0 NOVT}
|
||||
{1269720000 25200 1 NOVST}
|
||||
{1288468800 21600 0 NOVT}
|
||||
{1301169600 25200 0 NOVT}
|
||||
{1414263600 21600 0 NOVT}
|
||||
{-1579476700 21600 0 +06}
|
||||
{-1247551200 25200 0 +08}
|
||||
{354906000 28800 1 +08}
|
||||
{370713600 25200 0 +07}
|
||||
{386442000 28800 1 +08}
|
||||
{402249600 25200 0 +07}
|
||||
{417978000 28800 1 +08}
|
||||
{433785600 25200 0 +07}
|
||||
{449600400 28800 1 +08}
|
||||
{465332400 25200 0 +07}
|
||||
{481057200 28800 1 +08}
|
||||
{496782000 25200 0 +07}
|
||||
{512506800 28800 1 +08}
|
||||
{528231600 25200 0 +07}
|
||||
{543956400 28800 1 +08}
|
||||
{559681200 25200 0 +07}
|
||||
{575406000 28800 1 +08}
|
||||
{591130800 25200 0 +07}
|
||||
{606855600 28800 1 +08}
|
||||
{622580400 25200 0 +07}
|
||||
{638305200 28800 1 +08}
|
||||
{654634800 25200 0 +07}
|
||||
{670359600 21600 0 +07}
|
||||
{670363200 25200 1 +07}
|
||||
{686088000 21600 0 +06}
|
||||
{695764800 25200 0 +08}
|
||||
{701809200 28800 1 +08}
|
||||
{717534000 25200 0 +07}
|
||||
{733258800 28800 1 +08}
|
||||
{738090000 25200 0 +07}
|
||||
{748987200 21600 0 +06}
|
||||
{764712000 25200 1 +07}
|
||||
{780436800 21600 0 +06}
|
||||
{796161600 25200 1 +07}
|
||||
{811886400 21600 0 +06}
|
||||
{828216000 25200 1 +07}
|
||||
{846360000 21600 0 +06}
|
||||
{859665600 25200 1 +07}
|
||||
{877809600 21600 0 +06}
|
||||
{891115200 25200 1 +07}
|
||||
{909259200 21600 0 +06}
|
||||
{922564800 25200 1 +07}
|
||||
{941313600 21600 0 +06}
|
||||
{954014400 25200 1 +07}
|
||||
{972763200 21600 0 +06}
|
||||
{985464000 25200 1 +07}
|
||||
{1004212800 21600 0 +06}
|
||||
{1017518400 25200 1 +07}
|
||||
{1035662400 21600 0 +06}
|
||||
{1048968000 25200 1 +07}
|
||||
{1067112000 21600 0 +06}
|
||||
{1080417600 25200 1 +07}
|
||||
{1099166400 21600 0 +06}
|
||||
{1111867200 25200 1 +07}
|
||||
{1130616000 21600 0 +06}
|
||||
{1143316800 25200 1 +07}
|
||||
{1162065600 21600 0 +06}
|
||||
{1174766400 25200 1 +07}
|
||||
{1193515200 21600 0 +06}
|
||||
{1206820800 25200 1 +07}
|
||||
{1224964800 21600 0 +06}
|
||||
{1238270400 25200 1 +07}
|
||||
{1256414400 21600 0 +06}
|
||||
{1269720000 25200 1 +07}
|
||||
{1288468800 21600 0 +06}
|
||||
{1301169600 25200 0 +07}
|
||||
{1414263600 21600 0 +06}
|
||||
{1469304000 25200 0 +07}
|
||||
}
|
||||
|
||||
@@ -28,8 +28,8 @@ set TZData(:Asia/Omsk) {
|
||||
{670366800 21600 1 OMSST}
|
||||
{686091600 18000 0 OMST}
|
||||
{695768400 21600 0 OMSMMTT}
|
||||
{701802000 25200 1 OMSST}
|
||||
{717523200 21600 0 OMST}
|
||||
{701812800 25200 1 OMSST}
|
||||
{717537600 21600 0 OMST}
|
||||
{733262400 25200 1 OMSST}
|
||||
{748987200 21600 0 OMST}
|
||||
{764712000 25200 1 OMSST}
|
||||
|
||||
+53
-53
@@ -2,57 +2,57 @@
|
||||
|
||||
set TZData(:Asia/Oral) {
|
||||
{-9223372036854775808 12324 0 LMT}
|
||||
{-1441164324 14400 0 URAT}
|
||||
{-1247544000 18000 0 URAT}
|
||||
{354913200 21600 1 URAST}
|
||||
{370720800 21600 0 URAT}
|
||||
{386445600 18000 0 URAT}
|
||||
{386449200 21600 1 URAST}
|
||||
{402256800 18000 0 URAT}
|
||||
{417985200 21600 1 URAST}
|
||||
{433792800 18000 0 URAT}
|
||||
{449607600 21600 1 URAST}
|
||||
{465339600 18000 0 URAT}
|
||||
{481064400 21600 1 URAST}
|
||||
{496789200 18000 0 URAT}
|
||||
{512514000 21600 1 URAST}
|
||||
{528238800 18000 0 URAT}
|
||||
{543963600 21600 1 URAST}
|
||||
{559688400 18000 0 URAT}
|
||||
{575413200 21600 1 URAST}
|
||||
{591138000 18000 0 URAT}
|
||||
{606862800 14400 0 URAT}
|
||||
{606866400 18000 1 URAST}
|
||||
{622591200 14400 0 URAT}
|
||||
{638316000 18000 1 URAST}
|
||||
{654645600 14400 0 URAT}
|
||||
{662673600 14400 0 URAT}
|
||||
{692827200 14400 0 ORAT}
|
||||
{701809200 18000 1 ORAST}
|
||||
{717530400 14400 0 ORAT}
|
||||
{733269600 18000 1 ORAST}
|
||||
{748994400 14400 0 ORAT}
|
||||
{764719200 18000 1 ORAST}
|
||||
{780444000 14400 0 ORAT}
|
||||
{796168800 18000 1 ORAST}
|
||||
{811893600 14400 0 ORAT}
|
||||
{828223200 18000 1 ORAST}
|
||||
{846367200 14400 0 ORAT}
|
||||
{859672800 18000 1 ORAST}
|
||||
{877816800 14400 0 ORAT}
|
||||
{891122400 18000 1 ORAST}
|
||||
{909266400 14400 0 ORAT}
|
||||
{922572000 18000 1 ORAST}
|
||||
{941320800 14400 0 ORAT}
|
||||
{954021600 18000 1 ORAST}
|
||||
{972770400 14400 0 ORAT}
|
||||
{985471200 18000 1 ORAST}
|
||||
{1004220000 14400 0 ORAT}
|
||||
{1017525600 18000 1 ORAST}
|
||||
{1035669600 14400 0 ORAT}
|
||||
{1048975200 18000 1 ORAST}
|
||||
{1067119200 14400 0 ORAT}
|
||||
{1080424800 18000 1 ORAST}
|
||||
{1099173600 14400 0 ORAT}
|
||||
{1110830400 18000 0 ORAT}
|
||||
{-1441164324 14400 0 +04}
|
||||
{-1247544000 18000 0 +05}
|
||||
{354913200 21600 1 +06}
|
||||
{370720800 21600 0 +06}
|
||||
{386445600 18000 0 +05}
|
||||
{386449200 21600 1 +06}
|
||||
{402256800 18000 0 +05}
|
||||
{417985200 21600 1 +06}
|
||||
{433792800 18000 0 +05}
|
||||
{449607600 21600 1 +06}
|
||||
{465339600 18000 0 +05}
|
||||
{481064400 21600 1 +06}
|
||||
{496789200 18000 0 +05}
|
||||
{512514000 21600 1 +06}
|
||||
{528238800 18000 0 +05}
|
||||
{543963600 21600 1 +06}
|
||||
{559688400 18000 0 +05}
|
||||
{575413200 21600 1 +06}
|
||||
{591138000 18000 0 +05}
|
||||
{606862800 14400 0 +04}
|
||||
{606866400 18000 1 +05}
|
||||
{622591200 14400 0 +04}
|
||||
{638316000 18000 1 +05}
|
||||
{654645600 14400 0 +04}
|
||||
{670370400 18000 1 +05}
|
||||
{686095200 14400 0 +04}
|
||||
{701816400 14400 0 +04}
|
||||
{701820000 18000 1 +05}
|
||||
{717544800 14400 0 +04}
|
||||
{733269600 18000 1 +05}
|
||||
{748994400 14400 0 +04}
|
||||
{764719200 18000 1 +05}
|
||||
{780444000 14400 0 +04}
|
||||
{796168800 18000 1 +05}
|
||||
{811893600 14400 0 +04}
|
||||
{828223200 18000 1 +05}
|
||||
{846367200 14400 0 +04}
|
||||
{859672800 18000 1 +05}
|
||||
{877816800 14400 0 +04}
|
||||
{891122400 18000 1 +05}
|
||||
{909266400 14400 0 +04}
|
||||
{922572000 18000 1 +05}
|
||||
{941320800 14400 0 +04}
|
||||
{954021600 18000 1 +05}
|
||||
{972770400 14400 0 +04}
|
||||
{985471200 18000 1 +05}
|
||||
{1004220000 14400 0 +04}
|
||||
{1017525600 18000 1 +05}
|
||||
{1035669600 14400 0 +04}
|
||||
{1048975200 18000 1 +05}
|
||||
{1067119200 14400 0 +04}
|
||||
{1080424800 18000 1 +05}
|
||||
{1099173600 18000 0 +05}
|
||||
}
|
||||
|
||||
@@ -2,57 +2,56 @@
|
||||
|
||||
set TZData(:Asia/Qyzylorda) {
|
||||
{-9223372036854775808 15712 0 LMT}
|
||||
{-1441167712 14400 0 KIZT}
|
||||
{-1247544000 18000 0 KIZT}
|
||||
{354913200 21600 1 KIZST}
|
||||
{370720800 21600 0 KIZT}
|
||||
{386445600 18000 0 KIZT}
|
||||
{386449200 21600 1 KIZST}
|
||||
{402256800 18000 0 KIZT}
|
||||
{417985200 21600 1 KIZST}
|
||||
{433792800 18000 0 KIZT}
|
||||
{449607600 21600 1 KIZST}
|
||||
{465339600 18000 0 KIZT}
|
||||
{481064400 21600 1 KIZST}
|
||||
{496789200 18000 0 KIZT}
|
||||
{512514000 21600 1 KIZST}
|
||||
{528238800 18000 0 KIZT}
|
||||
{543963600 21600 1 KIZST}
|
||||
{559688400 18000 0 KIZT}
|
||||
{575413200 21600 1 KIZST}
|
||||
{591138000 18000 0 KIZT}
|
||||
{606862800 21600 1 KIZST}
|
||||
{622587600 18000 0 KIZT}
|
||||
{638312400 21600 1 KIZST}
|
||||
{654642000 18000 0 KIZT}
|
||||
{662670000 18000 0 KIZT}
|
||||
{692823600 18000 0 QYZT}
|
||||
{695768400 21600 0 QYZT}
|
||||
{701802000 25200 1 QYZST}
|
||||
{717523200 21600 0 QYZT}
|
||||
{733262400 25200 1 QYZST}
|
||||
{748987200 21600 0 QYZT}
|
||||
{764712000 25200 1 QYZST}
|
||||
{780436800 21600 0 QYZT}
|
||||
{796161600 25200 1 QYZST}
|
||||
{811886400 21600 0 QYZT}
|
||||
{828216000 25200 1 QYZST}
|
||||
{846360000 21600 0 QYZT}
|
||||
{859665600 25200 1 QYZST}
|
||||
{877809600 21600 0 QYZT}
|
||||
{891115200 25200 1 QYZST}
|
||||
{909259200 21600 0 QYZT}
|
||||
{922564800 25200 1 QYZST}
|
||||
{941313600 21600 0 QYZT}
|
||||
{954014400 25200 1 QYZST}
|
||||
{972763200 21600 0 QYZT}
|
||||
{985464000 25200 1 QYZST}
|
||||
{1004212800 21600 0 QYZT}
|
||||
{1017518400 25200 1 QYZST}
|
||||
{1035662400 21600 0 QYZT}
|
||||
{1048968000 25200 1 QYZST}
|
||||
{1067112000 21600 0 QYZT}
|
||||
{1080417600 25200 1 QYZST}
|
||||
{1099166400 21600 0 QYZT}
|
||||
{1110823200 21600 0 QYZT}
|
||||
{-1441167712 14400 0 +04}
|
||||
{-1247544000 18000 0 +05}
|
||||
{354913200 21600 1 +06}
|
||||
{370720800 21600 0 +06}
|
||||
{386445600 18000 0 +05}
|
||||
{386449200 21600 1 +06}
|
||||
{402256800 18000 0 +05}
|
||||
{417985200 21600 1 +06}
|
||||
{433792800 18000 0 +05}
|
||||
{449607600 21600 1 +06}
|
||||
{465339600 18000 0 +05}
|
||||
{481064400 21600 1 +06}
|
||||
{496789200 18000 0 +05}
|
||||
{512514000 21600 1 +06}
|
||||
{528238800 18000 0 +05}
|
||||
{543963600 21600 1 +06}
|
||||
{559688400 18000 0 +05}
|
||||
{575413200 21600 1 +06}
|
||||
{591138000 18000 0 +05}
|
||||
{606862800 21600 1 +06}
|
||||
{622587600 18000 0 +05}
|
||||
{638312400 21600 1 +06}
|
||||
{654642000 18000 0 +05}
|
||||
{670366800 14400 0 +04}
|
||||
{670370400 18000 1 +05}
|
||||
{701812800 18000 0 +05}
|
||||
{701816400 21600 1 +06}
|
||||
{717541200 18000 0 +05}
|
||||
{733266000 21600 1 +06}
|
||||
{748990800 18000 0 +05}
|
||||
{764715600 21600 1 +06}
|
||||
{780440400 18000 0 +05}
|
||||
{796165200 21600 1 +06}
|
||||
{811890000 18000 0 +05}
|
||||
{828219600 21600 1 +06}
|
||||
{846363600 18000 0 +05}
|
||||
{859669200 21600 1 +06}
|
||||
{877813200 18000 0 +05}
|
||||
{891118800 21600 1 +06}
|
||||
{909262800 18000 0 +05}
|
||||
{922568400 21600 1 +06}
|
||||
{941317200 18000 0 +05}
|
||||
{954018000 21600 1 +06}
|
||||
{972766800 18000 0 +05}
|
||||
{985467600 21600 1 +06}
|
||||
{1004216400 18000 0 +05}
|
||||
{1017522000 21600 1 +06}
|
||||
{1035666000 18000 0 +05}
|
||||
{1048971600 21600 1 +06}
|
||||
{1067115600 18000 0 +05}
|
||||
{1080421200 21600 1 +06}
|
||||
{1099170000 21600 0 +06}
|
||||
}
|
||||
|
||||
@@ -29,8 +29,8 @@ set TZData(:Asia/Sakhalin) {
|
||||
{670348800 39600 1 SAKST}
|
||||
{686073600 36000 0 SAKT}
|
||||
{695750400 39600 0 SAKMMTT}
|
||||
{701784000 43200 1 SAKST}
|
||||
{717505200 39600 0 SAKT}
|
||||
{701794800 43200 1 SAKST}
|
||||
{717519600 39600 0 SAKT}
|
||||
{733244400 43200 1 SAKST}
|
||||
{748969200 39600 0 SAKT}
|
||||
{764694000 43200 1 SAKST}
|
||||
|
||||
@@ -28,8 +28,8 @@ set TZData(:Asia/Srednekolymsk) {
|
||||
{670348800 39600 1 MAGST}
|
||||
{686073600 36000 0 MAGT}
|
||||
{695750400 39600 0 MAGMMTT}
|
||||
{701784000 43200 1 MAGST}
|
||||
{717505200 39600 0 MAGT}
|
||||
{701794800 43200 1 MAGST}
|
||||
{717519600 39600 0 MAGT}
|
||||
{733244400 43200 1 MAGST}
|
||||
{748969200 39600 0 MAGT}
|
||||
{764694000 43200 1 MAGST}
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Asia/Tomsk) {
|
||||
{-9223372036854775808 20391 0 LMT}
|
||||
{-1578807591 21600 0 +06}
|
||||
{-1247551200 25200 0 +08}
|
||||
{354906000 28800 1 +08}
|
||||
{370713600 25200 0 +07}
|
||||
{386442000 28800 1 +08}
|
||||
{402249600 25200 0 +07}
|
||||
{417978000 28800 1 +08}
|
||||
{433785600 25200 0 +07}
|
||||
{449600400 28800 1 +08}
|
||||
{465332400 25200 0 +07}
|
||||
{481057200 28800 1 +08}
|
||||
{496782000 25200 0 +07}
|
||||
{512506800 28800 1 +08}
|
||||
{528231600 25200 0 +07}
|
||||
{543956400 28800 1 +08}
|
||||
{559681200 25200 0 +07}
|
||||
{575406000 28800 1 +08}
|
||||
{591130800 25200 0 +07}
|
||||
{606855600 28800 1 +08}
|
||||
{622580400 25200 0 +07}
|
||||
{638305200 28800 1 +08}
|
||||
{654634800 25200 0 +07}
|
||||
{670359600 21600 0 +07}
|
||||
{670363200 25200 1 +07}
|
||||
{686088000 21600 0 +06}
|
||||
{695764800 25200 0 +08}
|
||||
{701809200 28800 1 +08}
|
||||
{717534000 25200 0 +07}
|
||||
{733258800 28800 1 +08}
|
||||
{748983600 25200 0 +07}
|
||||
{764708400 28800 1 +08}
|
||||
{780433200 25200 0 +07}
|
||||
{796158000 28800 1 +08}
|
||||
{811882800 25200 0 +07}
|
||||
{828212400 28800 1 +08}
|
||||
{846356400 25200 0 +07}
|
||||
{859662000 28800 1 +08}
|
||||
{877806000 25200 0 +07}
|
||||
{891111600 28800 1 +08}
|
||||
{909255600 25200 0 +07}
|
||||
{922561200 28800 1 +08}
|
||||
{941310000 25200 0 +07}
|
||||
{954010800 28800 1 +08}
|
||||
{972759600 25200 0 +07}
|
||||
{985460400 28800 1 +08}
|
||||
{1004209200 25200 0 +07}
|
||||
{1017514800 28800 1 +08}
|
||||
{1020196800 25200 0 +07}
|
||||
{1035662400 21600 0 +06}
|
||||
{1048968000 25200 1 +07}
|
||||
{1067112000 21600 0 +06}
|
||||
{1080417600 25200 1 +07}
|
||||
{1099166400 21600 0 +06}
|
||||
{1111867200 25200 1 +07}
|
||||
{1130616000 21600 0 +06}
|
||||
{1143316800 25200 1 +07}
|
||||
{1162065600 21600 0 +06}
|
||||
{1174766400 25200 1 +07}
|
||||
{1193515200 21600 0 +06}
|
||||
{1206820800 25200 1 +07}
|
||||
{1224964800 21600 0 +06}
|
||||
{1238270400 25200 1 +07}
|
||||
{1256414400 21600 0 +06}
|
||||
{1269720000 25200 1 +07}
|
||||
{1288468800 21600 0 +06}
|
||||
{1301169600 25200 0 +07}
|
||||
{1414263600 21600 0 +06}
|
||||
{1464465600 25200 0 +07}
|
||||
}
|
||||
@@ -27,8 +27,8 @@ set TZData(:Asia/Ust-Nera) {
|
||||
{670348800 39600 1 MAGST}
|
||||
{686073600 36000 0 MAGT}
|
||||
{695750400 39600 0 MAGMMTT}
|
||||
{701784000 43200 1 MAGST}
|
||||
{717505200 39600 0 MAGT}
|
||||
{701794800 43200 1 MAGST}
|
||||
{717519600 39600 0 MAGT}
|
||||
{733244400 43200 1 MAGST}
|
||||
{748969200 39600 0 MAGT}
|
||||
{764694000 43200 1 MAGST}
|
||||
|
||||
@@ -28,8 +28,8 @@ set TZData(:Asia/Vladivostok) {
|
||||
{670352400 36000 1 VLAST}
|
||||
{686077200 32400 0 VLAT}
|
||||
{695754000 36000 0 VLAMMTT}
|
||||
{701787600 39600 1 VLAST}
|
||||
{717508800 36000 0 VLAT}
|
||||
{701798400 39600 1 VLAST}
|
||||
{717523200 36000 0 VLAT}
|
||||
{733248000 39600 1 VLAST}
|
||||
{748972800 36000 0 VLAT}
|
||||
{764697600 39600 1 VLAST}
|
||||
|
||||
@@ -28,8 +28,8 @@ set TZData(:Asia/Yakutsk) {
|
||||
{670356000 32400 1 YAKST}
|
||||
{686080800 28800 0 YAKT}
|
||||
{695757600 32400 0 YAKMMTT}
|
||||
{701791200 36000 1 YAKST}
|
||||
{717512400 32400 0 YAKT}
|
||||
{701802000 36000 1 YAKST}
|
||||
{717526800 32400 0 YAKT}
|
||||
{733251600 36000 1 YAKST}
|
||||
{748976400 32400 0 YAKT}
|
||||
{764701200 36000 1 YAKST}
|
||||
|
||||
@@ -29,8 +29,8 @@ set TZData(:Asia/Yekaterinburg) {
|
||||
{670370400 18000 1 SVEST}
|
||||
{686095200 14400 0 SVET}
|
||||
{695772000 18000 0 YEKMMTT}
|
||||
{701805600 21600 1 YEKST}
|
||||
{717526800 18000 0 YEKT}
|
||||
{701816400 21600 1 YEKST}
|
||||
{717541200 18000 0 YEKT}
|
||||
{733266000 21600 1 YEKST}
|
||||
{748990800 18000 0 YEKT}
|
||||
{764715600 21600 1 YEKST}
|
||||
|
||||
@@ -27,8 +27,8 @@ set TZData(:Asia/Yerevan) {
|
||||
{670370400 14400 1 YERST}
|
||||
{685569600 14400 0 AMST}
|
||||
{686098800 10800 0 AMT}
|
||||
{701812800 14400 1 AMST}
|
||||
{717534000 10800 0 AMT}
|
||||
{701823600 14400 1 AMST}
|
||||
{717548400 10800 0 AMT}
|
||||
{733273200 14400 1 AMST}
|
||||
{748998000 10800 0 AMT}
|
||||
{764722800 14400 1 AMST}
|
||||
@@ -66,5 +66,5 @@ set TZData(:Asia/Yerevan) {
|
||||
{1288476000 14400 0 AMT}
|
||||
{1301176800 18000 1 AMST}
|
||||
{1319925600 14400 0 AMT}
|
||||
{1332626400 14400 0 AMT}
|
||||
{1328731200 14400 0 AMT}
|
||||
}
|
||||
|
||||
@@ -26,8 +26,9 @@ set TZData(:Europe/Astrakhan) {
|
||||
{638319600 14400 1 +04}
|
||||
{654649200 10800 0 +03}
|
||||
{670374000 14400 0 +04}
|
||||
{701820000 14400 0 +04}
|
||||
{717534000 10800 0 +03}
|
||||
{701820000 10800 0 +04}
|
||||
{701823600 14400 1 +04}
|
||||
{717548400 10800 0 +03}
|
||||
{733273200 14400 1 +04}
|
||||
{748998000 10800 0 +03}
|
||||
{764722800 14400 1 +04}
|
||||
|
||||
@@ -42,8 +42,8 @@ set TZData(:Europe/Kaliningrad) {
|
||||
{654652800 7200 0 EET}
|
||||
{670377600 10800 1 EEST}
|
||||
{686102400 7200 0 EET}
|
||||
{701816400 10800 1 EEST}
|
||||
{717537600 7200 0 EET}
|
||||
{701827200 10800 1 EEST}
|
||||
{717552000 7200 0 EET}
|
||||
{733276800 10800 1 EEST}
|
||||
{749001600 7200 0 EET}
|
||||
{764726400 10800 1 EEST}
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Europe/Kirov) {
|
||||
{-9223372036854775808 11928 0 LMT}
|
||||
{-1593825528 10800 0 +03}
|
||||
{-1247540400 14400 0 +05}
|
||||
{354916800 18000 1 +05}
|
||||
{370724400 14400 0 +04}
|
||||
{386452800 18000 1 +05}
|
||||
{402260400 14400 0 +04}
|
||||
{417988800 18000 1 +05}
|
||||
{433796400 14400 0 +04}
|
||||
{449611200 18000 1 +05}
|
||||
{465343200 14400 0 +04}
|
||||
{481068000 18000 1 +05}
|
||||
{496792800 14400 0 +04}
|
||||
{512517600 18000 1 +05}
|
||||
{528242400 14400 0 +04}
|
||||
{543967200 18000 1 +05}
|
||||
{559692000 14400 0 +04}
|
||||
{575416800 18000 1 +05}
|
||||
{591141600 14400 0 +04}
|
||||
{606866400 10800 0 +04}
|
||||
{606870000 14400 1 +04}
|
||||
{622594800 10800 0 +03}
|
||||
{638319600 14400 1 +04}
|
||||
{654649200 10800 0 +03}
|
||||
{670374000 14400 0 +04}
|
||||
{701820000 10800 0 +04}
|
||||
{701823600 14400 1 +04}
|
||||
{717548400 10800 0 +03}
|
||||
{733273200 14400 1 +04}
|
||||
{748998000 10800 0 +03}
|
||||
{764722800 14400 1 +04}
|
||||
{780447600 10800 0 +03}
|
||||
{796172400 14400 1 +04}
|
||||
{811897200 10800 0 +03}
|
||||
{828226800 14400 1 +04}
|
||||
{846370800 10800 0 +03}
|
||||
{859676400 14400 1 +04}
|
||||
{877820400 10800 0 +03}
|
||||
{891126000 14400 1 +04}
|
||||
{909270000 10800 0 +03}
|
||||
{922575600 14400 1 +04}
|
||||
{941324400 10800 0 +03}
|
||||
{954025200 14400 1 +04}
|
||||
{972774000 10800 0 +03}
|
||||
{985474800 14400 1 +04}
|
||||
{1004223600 10800 0 +03}
|
||||
{1017529200 14400 1 +04}
|
||||
{1035673200 10800 0 +03}
|
||||
{1048978800 14400 1 +04}
|
||||
{1067122800 10800 0 +03}
|
||||
{1080428400 14400 1 +04}
|
||||
{1099177200 10800 0 +03}
|
||||
{1111878000 14400 1 +04}
|
||||
{1130626800 10800 0 +03}
|
||||
{1143327600 14400 1 +04}
|
||||
{1162076400 10800 0 +03}
|
||||
{1174777200 14400 1 +04}
|
||||
{1193526000 10800 0 +03}
|
||||
{1206831600 14400 1 +04}
|
||||
{1224975600 10800 0 +03}
|
||||
{1238281200 14400 1 +04}
|
||||
{1256425200 10800 0 +03}
|
||||
{1269730800 14400 1 +04}
|
||||
{1288479600 10800 0 +03}
|
||||
{1301180400 14400 0 +04}
|
||||
{1414274400 10800 0 +03}
|
||||
}
|
||||
@@ -30,10 +30,11 @@ set TZData(:Europe/Minsk) {
|
||||
{606870000 14400 1 MSD}
|
||||
{622594800 10800 0 MSK}
|
||||
{631141200 10800 0 MSK}
|
||||
{670374000 10800 1 EEST}
|
||||
{670374000 7200 0 EEMMTT}
|
||||
{670377600 10800 1 EEST}
|
||||
{686102400 7200 0 EET}
|
||||
{701820000 10800 1 EEST}
|
||||
{717544800 7200 0 EET}
|
||||
{701827200 10800 1 EEST}
|
||||
{717552000 7200 0 EET}
|
||||
{733276800 10800 1 EEST}
|
||||
{749001600 7200 0 EET}
|
||||
{764726400 10800 1 EEST}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user