Compare commits
172
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d9096d1ada | ||
|
|
fc106439d4 | ||
|
|
c0d3a447bc | ||
|
|
0981d85b0c | ||
|
|
443ca84a71 | ||
|
|
2aaf426036 | ||
|
|
e15b769c9d | ||
|
|
d197994bd2 | ||
|
|
19e7a90783 | ||
|
|
daab595dea | ||
|
|
f86d726f85 | ||
|
|
3ad87b0a02 | ||
|
|
c83af8f8d4 | ||
|
|
d6e62aeb84 | ||
|
|
eb7a25fe2b | ||
|
|
560c2dcbe1 | ||
|
|
7413854f34 | ||
|
|
28552e2e35 | ||
|
|
c3651154a7 | ||
|
|
73b02508fa | ||
|
|
4759be8760 | ||
|
|
4b54ec077b | ||
|
|
76ca8e7008 | ||
|
|
31d38b0701 | ||
|
|
e104cccd94 | ||
|
|
8789461a94 | ||
|
|
ec1dceef35 | ||
|
|
5e1eaa44bc | ||
|
|
a403e2663e | ||
|
|
c5f68dde5c | ||
|
|
868c2951dc | ||
|
|
e438509c68 | ||
|
|
4f19f86513 | ||
|
|
fd38147f32 | ||
|
|
ce33f01bf1 | ||
|
|
bfb7ea0e46 | ||
|
|
694bd3ba73 | ||
|
|
067ef1dcea | ||
|
|
878c0cff52 | ||
|
|
9bdcf8e201 | ||
|
|
09a4760ba3 | ||
|
|
ce9b84204c | ||
|
|
e929b91222 | ||
|
|
1d119413f6 | ||
|
|
1fce20754c | ||
|
|
96fec1a88c | ||
|
|
9e6b54e433 | ||
|
|
39fcdc3c6e | ||
|
|
1479c62f1c | ||
|
|
54a81d4f0e | ||
|
|
f95a5e7c82 | ||
|
|
5285fe3ede | ||
|
|
8e1f9e82da | ||
|
|
fbac621bfc | ||
|
|
3cc058aa46 | ||
|
|
3e3649a18e | ||
|
|
d35d4b2c53 | ||
|
|
c91c7b7cf1 | ||
|
|
b4a00d3ac5 | ||
|
|
bfcb6b40d2 | ||
|
|
2440231062 | ||
|
|
0f1e352369 | ||
|
|
aed9fbb19c | ||
|
|
4551ca9b2c | ||
|
|
e4dfb0d689 | ||
|
|
63e65ca6f1 | ||
|
|
7887926261 | ||
|
|
91eca443b7 | ||
|
|
cb5d76ed2b | ||
|
|
10372d985a | ||
|
|
5aee161167 | ||
|
|
657b49a9d1 | ||
|
|
bbf4d17089 | ||
|
|
4a2c3b6440 | ||
|
|
3f481feba6 | ||
|
|
1b0845930c | ||
|
|
50a0b81579 | ||
|
|
ad07565ec0 | ||
|
|
3b93da87b3 | ||
|
|
a414da9341 | ||
|
|
345bd636d4 | ||
|
|
134ada8ff9 | ||
|
|
3204893f09 | ||
|
|
7bc81bcbb0 | ||
|
|
6d44125712 | ||
|
|
a2df72aecb | ||
|
|
85c48e5e91 | ||
|
|
d4d8f3201a | ||
|
|
debbae5fd9 | ||
|
|
649d0983f9 | ||
|
|
3146ffb96b | ||
|
|
f1a2117967 | ||
|
|
2044cba5ac | ||
|
|
eee6883d2a | ||
|
|
472fd0a636 | ||
|
|
bfe331b12a | ||
|
|
1092cae12e | ||
|
|
54850c7528 | ||
|
|
365b878745 | ||
|
|
08390e5c47 | ||
|
|
a52254cce9 | ||
|
|
5cc8523f8e | ||
|
|
bcb4faa32f | ||
|
|
fa65ef51ba | ||
|
|
e94119e59b | ||
|
|
0440ab215b | ||
|
|
27c4d781f4 | ||
|
|
8fd5bbdc7c | ||
|
|
612c7a7d4a | ||
|
|
c4a5440ed1 | ||
|
|
822fd2d405 | ||
|
|
e723893895 | ||
|
|
e0623615e3 | ||
|
|
b348c536f6 | ||
|
|
2b788a21e4 | ||
|
|
a8bbc9486a | ||
|
|
f089b1e4a1 | ||
|
|
bb55ca2e95 | ||
|
|
0288a572d8 | ||
|
|
1ecf461e41 | ||
|
|
97f9595151 | ||
|
|
30710a181c | ||
|
|
493b04cbc0 | ||
|
|
8938dbcc25 | ||
|
|
db738e7756 | ||
|
|
c6bb98e763 | ||
|
|
c938932757 | ||
|
|
9878106deb | ||
|
|
4d70c5f1e1 | ||
|
|
c5cad32cd6 | ||
|
|
6a3868f2cc | ||
|
|
3116380710 | ||
|
|
53dc4dcdee | ||
|
|
4733e874fc | ||
|
|
a313e78ffa | ||
|
|
2c3dbea378 | ||
|
|
8520e69f32 | ||
|
|
54223a5f7e | ||
|
|
22515fc47f | ||
|
|
8932701ae7 | ||
|
|
6b45d21b4b | ||
|
|
3adc645802 | ||
|
|
743ced9da3 | ||
|
|
b9ef276505 | ||
|
|
ebd7e8a86b | ||
|
|
4096bf5d01 | ||
|
|
6dcfcb8be9 | ||
|
|
24cec35f7b | ||
|
|
367ade79ed | ||
|
|
e6af5d333b | ||
|
|
24be1383da | ||
|
|
28384139ba | ||
|
|
e5b2f21fe9 | ||
|
|
ccbbb5d288 | ||
|
|
2d27ea7088 | ||
|
|
841e525556 | ||
|
|
993b39c491 | ||
|
|
987eb68977 | ||
|
|
6b6685b8fd | ||
|
|
066a4b7b35 | ||
|
|
a7e397556b | ||
|
|
200e0742b8 | ||
|
|
160ba1cb95 | ||
|
|
ff926f2b01 | ||
|
|
b2e3f2fa04 | ||
|
|
5684ad8d94 | ||
|
|
cc984c4e6e | ||
|
|
64bf3c8f4a | ||
|
|
064f7e5513 | ||
|
|
6597872335 | ||
|
|
5044035ec0 | ||
|
|
6b17a1e25a |
@@ -1,3 +1,58 @@
|
||||
A NOTE ON THE CHANGELOG:
|
||||
Starting in early 2011, Tcl source code has been under the management of
|
||||
fossil, hosted at http://core.tcl.tk/tcl/ . Fossil presents a "Timeline"
|
||||
view of changes made that is superior in every way to a hand edited log file.
|
||||
Because of this, many Tcl developers are now out of the habit of maintaining
|
||||
this log file. You may still find useful things in it, but the Timeline is
|
||||
a better first place to look now.
|
||||
============================================================================
|
||||
|
||||
2013-09-19 Don Porter <dgp@users.sourceforge.net>
|
||||
|
||||
*** 8.6.1 TAGGED FOR RELEASE ***
|
||||
|
||||
* generic/tcl.h: Bump version number to 8.6.1.
|
||||
* library/init.tcl:
|
||||
* unix/configure.in:
|
||||
* win/configure.in:
|
||||
* unix/tcl.spec:
|
||||
* README:
|
||||
|
||||
* unix/configure: autoconf-2.59
|
||||
* win/configure:
|
||||
|
||||
2013-09-19 Donal Fellows <dkf@users.sf.net>
|
||||
|
||||
* doc/next.n (METHOD SEARCH ORDER): Bug [3606943]: Corrected
|
||||
description of method search order.
|
||||
|
||||
2013-09-18 Donal Fellows <dkf@users.sf.net>
|
||||
|
||||
Bump TclOO version to 1.0.1 for release.
|
||||
|
||||
2013-09-17 Donal Fellows <dkf@users.sf.net>
|
||||
|
||||
* generic/tclBinary.c (BinaryEncodeUu, BinaryDecodeUu): [Bug 2152292]:
|
||||
Corrected implementation of the core of uuencode handling so that the
|
||||
line length processing is correctly applied.
|
||||
***POTENTIAL INCOMPATIBILITY***
|
||||
Existing code that was using the old versions and working around the
|
||||
limitations will now need to do far less. The -maxlen option now has
|
||||
strict limits on the range of supported lengths; this is a limitation
|
||||
of the format itself.
|
||||
|
||||
2013-09-09 Donal Fellows <dkf@users.sf.net>
|
||||
|
||||
* generic/tclOOMethod.c (CloneProcedureMethod): [Bug 3609693]: Strip
|
||||
the internal representation of method bodies during cloning in order
|
||||
to ensure that any bound references to instance variables are removed.
|
||||
|
||||
2013-09-01 Donal Fellows <dkf@users.sf.net>
|
||||
|
||||
* generic/tclBinary.c (BinaryDecodeHex): [Bug b98fa55285]: Ensure that
|
||||
whitespace at the end of a string don't cause the decoder to drop the
|
||||
last decoded byte.
|
||||
|
||||
2013-08-03 Donal Fellows <dkf@users.sf.net>
|
||||
|
||||
* library/auto.tcl: [Patch 3611643]: Allow TclOO classes to be found
|
||||
@@ -36,12 +91,13 @@
|
||||
|
||||
2013-06-27 Jan Nijtmans <nijtmans@users.sf.net>
|
||||
|
||||
* generic/tclConfig.c: Bug [9b2e636361]: Tcl_CreateInterp() needs initialized
|
||||
* generic/tclMain.c: encodings.
|
||||
* generic/tclConfig.c: Bug [9b2e636361]: Tcl_CreateInterp() needs
|
||||
* generic/tclMain.c: initialized encodings.
|
||||
|
||||
2013-06-18 Jan Nijtmans <nijtmans@users.sf.net>
|
||||
|
||||
* generic/tclEvent.c: Bug [3611974]: InitSubsystems multiple thread issue.
|
||||
* generic/tclEvent.c: Bug [3611974]: InitSubsystems multiple thread
|
||||
issue.
|
||||
|
||||
2013-06-17 Jan Nijtmans <nijtmans@users.sf.net>
|
||||
|
||||
@@ -153,10 +209,10 @@
|
||||
|
||||
* generic/tclStubInit.c: Add support for Cygwin64, which has a 64-bit
|
||||
* generic/tclDecls.h: "long" type. Binary compatibility with win64
|
||||
requires that all stub entries use 32-bit long's, therefore the
|
||||
need for various wrapper functions/macros. For Tcl 9 a better
|
||||
solution is needed, but that cannot be done without introducing
|
||||
binary incompatibility.
|
||||
requires that all stub entries use 32-bit long's, therefore the need
|
||||
for various wrapper functions/macros. For Tcl 9 a better solution is
|
||||
needed, but that cannot be done without introducing binary
|
||||
incompatibility.
|
||||
|
||||
2013-04-30 Andreas Kupries <andreask@activestate.com>
|
||||
|
||||
@@ -174,8 +230,8 @@
|
||||
|
||||
* generic/tclDecls.h: Implement Tcl_NewBooleanObj, Tcl_DbNewBooleanObj
|
||||
and Tcl_SetBooleanObj as macros using Tcl_NewIntObj, Tcl_DbNewLongObj
|
||||
and Tcl_SetIntObj. Starting with Tcl 8.5, this is exactly the same,
|
||||
it only eliminates code duplication.
|
||||
and Tcl_SetIntObj. Starting with Tcl 8.5, this is exactly the same, it
|
||||
only eliminates code duplication.
|
||||
* generic/tclInt.h: Eliminate use of NO_WIDE_TYPE everywhere: It's
|
||||
exactly the same as TCL_WIDE_INT_IS_LONG
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
README: Tcl
|
||||
This is the Tcl 8.6.0 source distribution.
|
||||
This is the Tcl 8.6.1 source distribution.
|
||||
http://sourceforge.net/projects/tcl/files/Tcl/
|
||||
You can get any source release of Tcl from the URL above.
|
||||
|
||||
|
||||
@@ -8164,6 +8164,143 @@ Dropped support for OS X versions less than 10.4 (Tiger) (fellows)
|
||||
|
||||
--- Released 8.6.0, December 20, 2012 --- See ChangeLog for details ---
|
||||
|
||||
2013-05-08 (bug fix)[3036566] Honor language packs on Vista+ to get initial locale (oehlmann)
|
||||
2012-12-22 (bug fix)[3598150] DString to Tcl_Obj memleak (afredd)
|
||||
|
||||
2012-12-27 (bug fix)[3598580] Tcl_ListObjReplace() refcount fix (nijtmans)
|
||||
|
||||
2013-01-04 (bug fix) memleak in [format] compiler (fellows)
|
||||
|
||||
2013-01-08 (bug fix)[3092089,3587096] [file normalize] on junction points
|
||||
|
||||
2013-01-09 (bug fix)[3599395] status line processing (nijtmans)
|
||||
2013-01-23 (bug fix)[2911139] repair async connection management (fellows)
|
||||
=> http 2.8.6
|
||||
|
||||
2013-01-26 (bug fix)[3601804] Darwin segfault platformCPUID (nijtmans)
|
||||
|
||||
2013-01-28 (enhancement) improve ensemble bytecode (fellows)
|
||||
|
||||
2013-01-30 (enhancement) selected script code improvements (fradin)
|
||||
=> tcltest 2.3.6
|
||||
|
||||
2013-01-30 (bug fix)[3599098] update to handle glibc banner changes (kupries)
|
||||
=> platform 1.0.11
|
||||
|
||||
2013-01-31 (bug fix)[3598282] make install DESTDIR support (cassoff)
|
||||
|
||||
2013-02-05 (bug fix)[3603434] [file normalize a:/] flaw in VFS (porter,griffin)
|
||||
|
||||
2013-02-09 (bug fix)[3603695] $obj varname resolution rules (venable,fellows)
|
||||
|
||||
2013-02-11 (bug fix)[3603553] zlib flushing errors (vampiera,fellows)
|
||||
|
||||
2013-02-14 (bug fix)[3604576] msgcat use of Windows registry (oehlmann,nijtmans)
|
||||
=> msgcat 1.5.1
|
||||
|
||||
2013-02-19 (bug fix)[2438181] report errors in trace handlers (yorick)
|
||||
|
||||
2013-02-21 (bug fix)[3605447] unbreak [namespace export -clear] (porter)
|
||||
|
||||
2013-02-23 (bug fix)[3599194] fallback IPv6 routines (afredd,max)
|
||||
|
||||
2013-02-27 (bug fix)[3606139] stop crash in [regexp] (lane)
|
||||
|
||||
2013-03-03 (bug fix)[3606258] major serial port update (english)
|
||||
|
||||
2013-03-06 (bug fix)[3606683] [regexp (((((a)*)*)*)*)* {}] hangs
|
||||
(grathwohl,lane,porter)
|
||||
|
||||
2013-03-12 (enhancement) better build support for Debian arch (shadura)
|
||||
|
||||
2013-03-19 (bug fix)[2893771] [file stat] on locked files (thoyts,nijtmans)
|
||||
|
||||
2013-03-21 (bug fix)[2102614] [auto_mkindex] ensemble support (griffin)
|
||||
|
||||
2013-03-27 Tcl_Zlib*() routines tolerate NULL interps (porter
|
||||
|
||||
2013-04-04 (bug fix) Support URLs with query but no path (max)
|
||||
=> http 2.8.7
|
||||
|
||||
2013-04-08 (bug fix)[3610026] regexp crash on color overflow (linnakangas)
|
||||
|
||||
2013-04-29 (enhancement) [array set] compile improvement (fellows)
|
||||
|
||||
2013-04-30 (enhancement) broaden glibc version detection (kupries)
|
||||
=> platform 1.0.12
|
||||
|
||||
2013-05-06 (platform support) Cygwin64 (nijtmans)
|
||||
|
||||
2013-05-15 (enhancement) Improved [list {*}...] compile (fellows)
|
||||
|
||||
2013-05-16 (platform support) mingw-4.0 (nijtmans)
|
||||
|
||||
2013-05-19 (platform support) FreeBSD updates (cerutti)
|
||||
|
||||
2013-05-20 (bug fix)[3613567] access error temp file creation (keene)
|
||||
|
||||
2013-05-20 (bug fix)[3613569] temp file open fail can crash [load] (keene)
|
||||
|
||||
2013-05-22 (bug fix)[3613609] [lsort -nocase] failed on non-ASCII (fellows)
|
||||
|
||||
2013-05-28 (bug fix)[3036566] Use language packs (Vista+) locale (oehlmann)
|
||||
=> msgcat 1.5.2
|
||||
|
||||
2013-05-29 (bug fix)[3614102] [apply {{} {list [if 1]}}] stack woes (porter)
|
||||
|
||||
2013-06-03 Restored lost performance appending to long strings (elby,porter)
|
||||
|
||||
2013-06-05 (bug fix)[2835313] [while 1 {foo [continue]}] crash (fellows)
|
||||
|
||||
2013-06-17 (bug fix)[a876646] [:cntrl:] includes \x00 to \x1f (nijtmans)
|
||||
|
||||
2013-06-27 (bug fix)[983509] missing encodings for config values (nijtmans)
|
||||
|
||||
2013-06-27 (bug fix)[34538b] apply DST in 2099 (lang)
|
||||
|
||||
2013-07-02 (bug fix)[32afa6] corrected dirent64 check (griffin)
|
||||
|
||||
2013-07-06 tzdata updated to Olson's tzdata2013d (kenny)
|
||||
|
||||
2013-07-10 (bug fix)[86fb5e] [info frame] in compiled ensembles (porter)
|
||||
|
||||
2013-07-18 (bug fix)[1c17fb] revisd syntax errorinfo that shows error (porter)
|
||||
|
||||
2013-07-26 (bug fix)[6585b2] regexp {(\w).*?\1} abb (lane)
|
||||
|
||||
2013-07-29 [string is space \u202f] => 1 (nijtmans)
|
||||
|
||||
2013-08-01 [a0bc85] Limited support for fork with threads (for Rivet) (nijtmans)
|
||||
|
||||
2013-08-01 (bug fix)[1905562] RE recursion limit increased to support
|
||||
reported usage of large expressions (porter)
|
||||
|
||||
2013-08-02 (bug fix)[9d6162] superclass slot empty crash (vdgoot,fellows)2013-08-02 (bug fix)[9d6162] superclass slot empty crash (vdgoot,fellows)
|
||||
|
||||
2013-08-03 (enhancement)[3611643] [auto_mkindex] support TclOO (fellows)
|
||||
|
||||
2013-08-14 (bug fix)[a16752] Missing command delete callbacks (porter)
|
||||
|
||||
2013-08-15 (bug fix)[3610404] reresolve traced forwards (porter)
|
||||
|
||||
2013-08-15 Errors from execution traces become errors of the command (porter)
|
||||
|
||||
2013-08-23 (bug fix)[8ff0cb9] Tcl_NR*Eval*() schedule only, as doc'd (porter)
|
||||
|
||||
2013-08-29 (bug fix)[2486550] enable [interp invokehidden {} yield] (porter)
|
||||
|
||||
2013-09-01 (bug fix)[b98fa55] [binary decode] fail on whitespace (reche,fellows)
|
||||
|
||||
2013-09-07 (bug fix)[86ceb4] have tm path favor first provider (neumann,porter)
|
||||
|
||||
2013-09-09 (bug fix)[3609693] copied object member variable confusion (fellows)
|
||||
=> TclOO 1.0.1
|
||||
|
||||
2013-09-17 (bug fix)[2152292] [binary encode uuencode] corrected (fellows)
|
||||
|
||||
2013-09-19 (bug fix)[3487626] segfaults in [dict] compilers (porter)
|
||||
|
||||
2013-09-19 (bug fix)[31661d2] mem leak in [lreplace] (ade,porter)
|
||||
|
||||
Many optmizations, improvements, and tightened stack management in bytecode.
|
||||
|
||||
--- Released 8.6.1, Septemer 20, 2013 --- http://core.tcl.tk/tcl/ for details
|
||||
|
||||
+1
-1
@@ -111,7 +111,7 @@ function. Note that the Tcl_Obj reference returned by \fBTcl_GetObjectName\fR
|
||||
is a shared reference.
|
||||
.PP
|
||||
Instances of classes are created using \fBTcl_NewObjectInstance\fR, which
|
||||
takes creates an object from any class (and which is internally called by both
|
||||
creates an object from any class (and which is internally called by both
|
||||
the \fBcreate\fR and \fBnew\fR methods of the \fBoo::class\fR class). It takes
|
||||
parameters that optionally give the name of the object and namespace to
|
||||
create, and which describe the arguments to pass to the class's constructor
|
||||
|
||||
@@ -8,8 +8,7 @@
|
||||
.TH NRE 3 8.6 Tcl "Tcl Library Procedures"
|
||||
.BS
|
||||
.SH NAME
|
||||
Tcl_NRCreateCommand, Tcl_NRCallObjProc, Tcl_NREvalObj, Tcl_NREvalObjv,
|
||||
Tcl_NRCmdSwap, Tcl_NRExprObj, Tcl_NRAddCallback \- Non-Recursive (stackless) evaluation of Tcl scripts.
|
||||
Tcl_NRCreateCommand, Tcl_NRCallObjProc, Tcl_NREvalObj, Tcl_NREvalObjv, Tcl_NRCmdSwap, Tcl_NRExprObj, Tcl_NRAddCallback \- Non-Recursive (stackless) evaluation of Tcl scripts.
|
||||
.SH SYNOPSIS
|
||||
.nf
|
||||
\fB#include <tcl.h>\fR
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
'\"
|
||||
'\" Copyright (c) 2012 Donal K. Fellows
|
||||
'\"
|
||||
'\" See the file "license.terms" for information on usage and redistribution
|
||||
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
'\"
|
||||
.so man.macros
|
||||
.TH Tcl_OOInitStubs 3 1.0 TclOO "TclOO Library Functions"
|
||||
.BS
|
||||
'\" Note: do not modify the .SH NAME line immediately below!
|
||||
.SH NAME
|
||||
Tcl_OOInitStubs \- initialize library access to TclOO functionality
|
||||
.SH SYNOPSIS
|
||||
.nf
|
||||
\fB#include <tclOO.h>\fR
|
||||
.sp
|
||||
const char *
|
||||
\fBTcl_OOInitStubs\fR(\fIinterp\fR)
|
||||
.fi
|
||||
.SH ARGUMENTS
|
||||
.AS Tcl_Interp *interp in
|
||||
.AP Tcl_Interp *interp in
|
||||
The Tcl interpreter that the TclOO API is integrated with and whose C
|
||||
interface is going to be used.
|
||||
.BE
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
When an extension library is going to use the C interface exposed by TclOO, it
|
||||
should use \fBTcl_OOInitStubs\fR to initialize its access to that interface
|
||||
from within its \fI*\fB_Init\fR (or \fI*\fB_SafeInit\fR) function, passing in
|
||||
the \fIinterp\fR that was passed into that routine as context. If the result
|
||||
of calling \fBTcl_OOInitStubs\fR is NULL, the initialization failed and an
|
||||
error message will have been left in the interpreter's result. Otherwise, the
|
||||
initialization succeeded and the TclOO API may thereafter be used; the
|
||||
version of the TclOO API is returned.
|
||||
.PP
|
||||
When using this function, either the C #define symbol \fBUSE_TCLOO_STUBS\fR
|
||||
should be defined and your library code linked against the Tcl stub library,
|
||||
or that #define symbol should \fInot\fR be defined and your library code
|
||||
linked against the Tcl main library directly.
|
||||
.SH "BACKWARD COMPATIBILITY NOTE"
|
||||
.PP
|
||||
If you are linking against the Tcl 8.5 forward compatibility package for
|
||||
TclOO, \fIonly\fR the stub-enabled configuration is supported and you should
|
||||
also link against the TclOO independent stub library; that library is an
|
||||
integrated part of the main Tcl stub library in Tcl 8.6.
|
||||
.SH KEYWORDS
|
||||
stubs
|
||||
.SH "SEE ALSO"
|
||||
Tcl_InitStubs(3)
|
||||
.\" Local variables:
|
||||
.\" mode: nroff
|
||||
.\" fill-column: 78
|
||||
.\" End:
|
||||
+21
-5
@@ -36,6 +36,13 @@ The \fBbinary encode\fR and \fBbinary decode\fR subcommands convert
|
||||
binary data to or from string encodings such as base64 (used in MIME
|
||||
messages for example).
|
||||
.VE 8.6
|
||||
.PP
|
||||
Note that other operations on binary data, such as taking a subsequence of it,
|
||||
getting its length, or reinterpreting it as a string in some encoding, are
|
||||
done by other Tcl commands (respectively \fBstring range\fR,
|
||||
\fBstring length\fR and \fBencoding convertfrom\fR in the example cases). A
|
||||
binary string in Tcl is merely one where all the characters it contains are in
|
||||
the range \eu0000\-\eu00FF.
|
||||
.SH "BINARY ENCODE AND DECODE"
|
||||
.VS 8.6
|
||||
.PP
|
||||
@@ -95,13 +102,14 @@ between Unix systems and on USENET, but is less common these days, having been
|
||||
largely superseded by the \fBbase64\fR binary encoding.
|
||||
.RS
|
||||
.PP
|
||||
During encoding, the following options are supported:
|
||||
'\" This is wrong! The uuencode format had more complexity than this!
|
||||
During encoding, the following options are supported (though changing them may
|
||||
produce files that other implementations of decoders cannot process):
|
||||
.TP
|
||||
\fB\-maxlen \fIlength\fR
|
||||
.
|
||||
Indicates that the output should be split into lines of no more than
|
||||
\fIlength\fR characters. By default, lines are not split.
|
||||
\fIlength\fR characters. By default, lines are split every 61 characters, and
|
||||
this must be in the range 3 to 85 due to limitations in the encoding.
|
||||
.TP
|
||||
\fB\-wrapchar \fIcharacter\fR
|
||||
.
|
||||
@@ -114,7 +122,11 @@ During decoding, the following options are supported:
|
||||
.TP
|
||||
\fB\-strict\fR
|
||||
.
|
||||
Instructs the decoder to throw an error if it encounters whitespace characters. Otherwise it ignores them.
|
||||
Instructs the decoder to throw an error if it encounters unexpected whitespace
|
||||
characters. Otherwise it ignores them.
|
||||
.PP
|
||||
Note that neither the encoder nor the decoder handle the header and footer of
|
||||
the uuencode format.
|
||||
.RE
|
||||
.VE 8.6
|
||||
.SH "BINARY FORMAT"
|
||||
@@ -855,6 +867,7 @@ architectures, use their textual representation (as produced by
|
||||
.PP
|
||||
This is a procedure to write a Tcl string to a binary-encoded channel as
|
||||
UTF-8 data preceded by a length word:
|
||||
.PP
|
||||
.CS
|
||||
proc \fIwriteString\fR {channel string} {
|
||||
set data [encoding convertto utf-8 $string]
|
||||
@@ -865,6 +878,7 @@ proc \fIwriteString\fR {channel string} {
|
||||
.PP
|
||||
This procedure reads a string from a channel that was written by the
|
||||
previously presented \fIwriteString\fR procedure:
|
||||
.PP
|
||||
.CS
|
||||
proc \fIreadString\fR {channel} {
|
||||
if {![\fBbinary scan\fR [read $channel 4] I length]} {
|
||||
@@ -877,6 +891,7 @@ proc \fIreadString\fR {channel} {
|
||||
.PP
|
||||
This converts the contents of a file (named in the variable \fIfilename\fR) to
|
||||
base64 and prints them:
|
||||
.PP
|
||||
.CS
|
||||
set f [open $filename rb]
|
||||
set data [read $f]
|
||||
@@ -884,9 +899,10 @@ close $f
|
||||
puts [\fBbinary encode\fR base64 \-maxlen 64 $data]
|
||||
.CE
|
||||
.SH "SEE ALSO"
|
||||
format(n), scan(n), tcl_platform(n)
|
||||
encoding(n), format(n), scan(n), string(n), tcl_platform(n)
|
||||
.SH KEYWORDS
|
||||
binary, format, scan
|
||||
'\" Local Variables:
|
||||
'\" mode: nroff
|
||||
'\" fill-column: 78
|
||||
'\" End:
|
||||
|
||||
+1
-1
@@ -484,7 +484,7 @@ not the effective ones.
|
||||
.TP
|
||||
\fBWindows\fR\0\0\0\0
|
||||
.
|
||||
The \fbfile owned\fR subcommand currently always reports that the current user
|
||||
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.
|
||||
|
||||
+7
-4
@@ -62,14 +62,14 @@ The method chain is cached for future use.
|
||||
When constructing the method chain, method implementations are searched for in
|
||||
the following order:
|
||||
.IP [1]
|
||||
In the object.
|
||||
.IP [2]
|
||||
In the classes mixed into the object, in class traversal order. The list of
|
||||
mixins is checked in natural order.
|
||||
.IP [3]
|
||||
.IP [2]
|
||||
In the classes mixed into the classes of the object, with sources of mixing in
|
||||
being searched in class traversal order. Within each class, the list of mixins
|
||||
is processed in natural order.
|
||||
.IP [3]
|
||||
In the object itself.
|
||||
.IP [4]
|
||||
In the object's class.
|
||||
.IP [5]
|
||||
@@ -77,7 +77,10 @@ In the superclasses of the class, following each superclass in a depth-first
|
||||
fashion in the natural order of the superclass list.
|
||||
.PP
|
||||
Any particular method implementation always comes as \fIlate\fR in the
|
||||
resulting list of implementations as possible.
|
||||
resulting list of implementations as possible; this means that if some class,
|
||||
A, is both mixed into a class, B, and is also a superclass of B, the instances
|
||||
of B will always treat A as a superclass from the perspective of inheritance.
|
||||
This is true even when the multiple inheritance is processed indirectly.
|
||||
.SS FILTERS
|
||||
.PP
|
||||
When an object has a list of filter names set upon it, or is an instance of a
|
||||
|
||||
+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 0
|
||||
#define TCL_RELEASE_SERIAL 1
|
||||
|
||||
#define TCL_VERSION "8.6"
|
||||
#define TCL_PATCH_LEVEL "8.6.0"
|
||||
#define TCL_PATCH_LEVEL "8.6.1"
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------------
|
||||
|
||||
+32
-3
@@ -246,6 +246,8 @@ static void BBEmitInstInt4(AssemblyEnv* assemEnvPtr, int tblIdx,
|
||||
int opnd, int count);
|
||||
static void BBEmitInst1or4(AssemblyEnv* assemEnvPtr, int tblIdx,
|
||||
int param, int count);
|
||||
static void BBEmitInvoke1or4(AssemblyEnv* assemEnvPtr, int tblIdx,
|
||||
int param, int count);
|
||||
static void BBEmitOpcode(AssemblyEnv* assemEnvPtr, int tblIdx,
|
||||
int count);
|
||||
static int BuildExceptionRanges(AssemblyEnv* assemEnvPtr);
|
||||
@@ -679,10 +681,13 @@ BBEmitInstInt4(
|
||||
/*
|
||||
*-----------------------------------------------------------------------------
|
||||
*
|
||||
* BBEmitInst1or4 --
|
||||
* BBEmitInst1or4, BBEmitInvoke1or4 --
|
||||
*
|
||||
* Emits a 1- or 4-byte operation according to the magnitude of the
|
||||
* operand
|
||||
* operand. The Invoke variant generates wrapping stack-balance
|
||||
* management if necessary (which is not normally required in assembled
|
||||
* code, as loop exception ranges, expansions, breaks and continues can't
|
||||
* be issued currently).
|
||||
*
|
||||
*-----------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -714,6 +719,29 @@ BBEmitInst1or4(
|
||||
TclUpdateAtCmdStart(op, envPtr);
|
||||
BBUpdateStackReqs(bbPtr, tblIdx, count);
|
||||
}
|
||||
|
||||
static void
|
||||
BBEmitInvoke1or4(
|
||||
AssemblyEnv* assemEnvPtr, /* Assembly environment */
|
||||
int tblIdx, /* Index in TalInstructionTable of op */
|
||||
int param, /* Variable-length parameter */
|
||||
int count) /* Arity if variadic */
|
||||
{
|
||||
CompileEnv* envPtr = assemEnvPtr->envPtr;
|
||||
/* Compilation environment */
|
||||
BasicBlock* bbPtr = assemEnvPtr->curr_bb;
|
||||
/* Current basic block */
|
||||
int op = TalInstructionTable[tblIdx].tclInstCode;
|
||||
|
||||
if (param <= 0xff) {
|
||||
op >>= 8;
|
||||
} else {
|
||||
op &= 0xff;
|
||||
}
|
||||
TclEmitInvoke(envPtr, op, param);
|
||||
TclUpdateAtCmdStart(op, envPtr);
|
||||
BBUpdateStackReqs(bbPtr, tblIdx, count);
|
||||
}
|
||||
|
||||
/*
|
||||
*-----------------------------------------------------------------------------
|
||||
@@ -1450,7 +1478,7 @@ AssembleOneLine(
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
BBEmitInst1or4(assemEnvPtr, tblIdx, opnd, opnd);
|
||||
BBEmitInvoke1or4(assemEnvPtr, tblIdx, opnd, opnd);
|
||||
break;
|
||||
|
||||
case ASSEM_JUMP:
|
||||
@@ -2617,6 +2645,7 @@ AllocBB(
|
||||
bb->minStackDepth = 0;
|
||||
bb->maxStackDepth = 0;
|
||||
bb->finalStackDepth = 0;
|
||||
bb->catchDepth = 0;
|
||||
bb->enclosingCatch = NULL;
|
||||
bb->foreignExceptionBase = -1;
|
||||
bb->foreignExceptionCount = 0;
|
||||
|
||||
+197
-131
@@ -147,7 +147,7 @@ static int TEOV_NotFound(Tcl_Interp *interp, int objc,
|
||||
Tcl_Obj *const objv[], Namespace *lookupNsPtr);
|
||||
static int TEOV_RunEnterTraces(Tcl_Interp *interp,
|
||||
Command **cmdPtrPtr, Tcl_Obj *commandPtr, int objc,
|
||||
Tcl_Obj *const objv[], Namespace *lookupNsPtr);
|
||||
Tcl_Obj *const objv[]);
|
||||
static Tcl_NRPostProc RewindCoroutineCallback;
|
||||
static Tcl_NRPostProc TailcallCleanup;
|
||||
static Tcl_NRPostProc TEOEx_ByteCodeCallback;
|
||||
@@ -161,6 +161,7 @@ static Tcl_NRPostProc EvalObjvCore;
|
||||
static Tcl_NRPostProc Dispatch;
|
||||
|
||||
static Tcl_ObjCmdProc NRCoroInjectObjCmd;
|
||||
static Tcl_NRPostProc NRPostInvoke;
|
||||
|
||||
MODULE_SCOPE const TclStubs tclStubs;
|
||||
|
||||
@@ -2174,7 +2175,8 @@ Tcl_CreateCommand(
|
||||
*
|
||||
* Side effects:
|
||||
* If a command named "cmdName" already exists for interp, it is
|
||||
* first deleted. Then the new command is created from the arguments.
|
||||
* first deleted. Then the new command is created from the arguments.
|
||||
* [***] (See below for exception).
|
||||
*
|
||||
* In the future, during bytecode evaluation when "cmdName" is seen as
|
||||
* the name of a command by Tcl_EvalObj or Tcl_Eval, the object-based
|
||||
@@ -2241,8 +2243,27 @@ Tcl_CreateObjCommand(
|
||||
if (!isNew) {
|
||||
cmdPtr = Tcl_GetHashValue(hPtr);
|
||||
|
||||
/* Command already exists. */
|
||||
|
||||
/*
|
||||
* Command already exists; delete it. Be careful to preserve any
|
||||
* [***] This is wrong. See Tcl Bug a16752c252.
|
||||
* However, this buggy behavior is kept under particular
|
||||
* circumstances to accommodate deployed binaries of the
|
||||
* "tclcompiler" program. http://sourceforge.net/projects/tclpro/
|
||||
* that crash if the bug is fixed.
|
||||
*/
|
||||
|
||||
if (cmdPtr->objProc == TclInvokeStringCommand
|
||||
&& cmdPtr->clientData == clientData
|
||||
&& cmdPtr->deleteData == clientData
|
||||
&& cmdPtr->deleteProc == deleteProc) {
|
||||
cmdPtr->objProc = proc;
|
||||
cmdPtr->objClientData = clientData;
|
||||
return (Tcl_Command) cmdPtr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Otherwise, we delete the old command. Be careful to preserve any
|
||||
* existing import links so we can restore them down below. That way,
|
||||
* you can redefine a command and its import status will remain
|
||||
* intact.
|
||||
@@ -4119,13 +4140,23 @@ EvalObjvCore(
|
||||
Tcl_Interp *interp,
|
||||
int result)
|
||||
{
|
||||
Command *cmdPtr = data[0];
|
||||
Command *cmdPtr = NULL, *preCmdPtr = data[0];
|
||||
int flags = PTR2INT(data[1]);
|
||||
int objc = PTR2INT(data[2]);
|
||||
Tcl_Obj **objv = data[3];
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
Namespace *lookupNsPtr = iPtr->lookupNsPtr;
|
||||
Namespace *lookupNsPtr = NULL;
|
||||
int enterTracesDone = 0;
|
||||
|
||||
/*
|
||||
* Push records for task to be done on return, in INVERSE order. First, if
|
||||
* needed, the exception handlers (as they should happen last).
|
||||
*/
|
||||
|
||||
if (!(flags & TCL_EVAL_NOERR)) {
|
||||
TEOV_PushExceptionHandlers(interp, objc, objv, flags);
|
||||
}
|
||||
|
||||
if (TCL_OK != TclInterpReady(interp)) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
@@ -4138,73 +4169,121 @@ EvalObjvCore(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
iPtr->lookupNsPtr = NULL;
|
||||
|
||||
if (cmdPtr) {
|
||||
goto commandFound;
|
||||
}
|
||||
|
||||
/*
|
||||
* Push records for task to be done on return, in INVERSE order. First, if
|
||||
* needed, the exception handlers (as they should happen last).
|
||||
*/
|
||||
|
||||
if (!(flags & TCL_EVAL_NOERR)) {
|
||||
TEOV_PushExceptionHandlers(interp, objc, objv, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Configure evaluation context to match the requested flags.
|
||||
*/
|
||||
|
||||
if ((flags & TCL_EVAL_INVOKE) || lookupNsPtr) {
|
||||
if (!lookupNsPtr) {
|
||||
lookupNsPtr = iPtr->globalNsPtr;
|
||||
}
|
||||
if (iPtr->lookupNsPtr) {
|
||||
|
||||
/*
|
||||
* Capture the namespace we should do command name resolution in, as
|
||||
* instructed by our caller sneaking it in to us in a private interp
|
||||
* field. Clear that field right away so we cannot possibly have its
|
||||
* use leak where it should not. The sneaky message pass is done.
|
||||
*
|
||||
* Use of this mechanism overrides the TCL_EVAL_GLOBAL flag.
|
||||
* TODO: Is that a bug?
|
||||
*/
|
||||
|
||||
lookupNsPtr = iPtr->lookupNsPtr;
|
||||
iPtr->lookupNsPtr = NULL;
|
||||
} else if (flags & TCL_EVAL_INVOKE) {
|
||||
lookupNsPtr = iPtr->globalNsPtr;
|
||||
} else {
|
||||
if (flags & TCL_EVAL_GLOBAL) {
|
||||
TEOV_SwitchVarFrame(interp);
|
||||
lookupNsPtr = iPtr->globalNsPtr;
|
||||
}
|
||||
|
||||
/*
|
||||
* TCL_EVAL_INVOKE was not set: clear rewrite rules
|
||||
*/
|
||||
|
||||
iPtr->ensembleRewrite.sourceObjs = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Lookup the command
|
||||
*/
|
||||
|
||||
cmdPtr = TEOV_LookupCmdFromObj(interp, objv[0], lookupNsPtr);
|
||||
if (!cmdPtr) {
|
||||
return TEOV_NotFound(interp, objc, objv, lookupNsPtr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Found a command! The real work begins now ...
|
||||
*/
|
||||
|
||||
commandFound:
|
||||
if (iPtr->tracePtr || (cmdPtr->flags & CMD_HAS_EXEC_TRACES)) {
|
||||
/*
|
||||
* Call enter traces. They will schedule a call to the leave traces if
|
||||
* necessary.
|
||||
*/
|
||||
|
||||
result = TEOV_RunEnterTraces(interp, &cmdPtr, TclGetSourceFromFrame(
|
||||
flags & TCL_EVAL_SOURCE_IN_FRAME ? iPtr->cmdFramePtr : NULL,
|
||||
objc, objv), objc, objv, lookupNsPtr);
|
||||
if (result != TCL_OK) {
|
||||
return result;
|
||||
if (flags & TCL_EVAL_GLOBAL) {
|
||||
TEOV_SwitchVarFrame(interp);
|
||||
lookupNsPtr = iPtr->globalNsPtr;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Lookup the Command to dispatch.
|
||||
*/
|
||||
|
||||
reresolve:
|
||||
assert(cmdPtr == NULL);
|
||||
if (preCmdPtr) {
|
||||
/* Caller gave it to us */
|
||||
if (!(preCmdPtr->flags & CMD_IS_DELETED)) {
|
||||
/* So long as it exists, use it. */
|
||||
cmdPtr = preCmdPtr;
|
||||
} else if (flags & TCL_EVAL_NORESOLVE) {
|
||||
/*
|
||||
* When it's been deleted, and we're told not to attempt
|
||||
* resolving it ourselves, all we can do is raise an error.
|
||||
*/
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"attempt to invoke a deleted command"));
|
||||
Tcl_SetErrorCode(interp, "TCL", "EVAL", "DELETEDCOMMAND", NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
}
|
||||
if (cmdPtr == NULL) {
|
||||
cmdPtr = TEOV_LookupCmdFromObj(interp, objv[0], lookupNsPtr);
|
||||
if (!cmdPtr) {
|
||||
return TEOV_NotFound(interp, objc, objv, lookupNsPtr);
|
||||
}
|
||||
}
|
||||
|
||||
if (enterTracesDone || iPtr->tracePtr
|
||||
|| (cmdPtr->flags & CMD_HAS_EXEC_TRACES)) {
|
||||
|
||||
Tcl_Obj *commandPtr = TclGetSourceFromFrame(
|
||||
flags & TCL_EVAL_SOURCE_IN_FRAME ? iPtr->cmdFramePtr : NULL,
|
||||
objc, objv);
|
||||
Tcl_IncrRefCount(commandPtr);
|
||||
|
||||
if (!enterTracesDone) {
|
||||
|
||||
int code = TEOV_RunEnterTraces(interp, &cmdPtr, commandPtr,
|
||||
objc, objv);
|
||||
|
||||
/*
|
||||
* Send any exception from enter traces back as an exception
|
||||
* raised by the traced command.
|
||||
* TODO: Is this a bug? Letting an execution trace BREAK or
|
||||
* CONTINUE or RETURN in the place of the traced command?
|
||||
* Would either converting all exceptions to TCL_ERROR, or
|
||||
* just swallowing them be better? (Swallowing them has the
|
||||
* problem of permanently hiding program errors.)
|
||||
*/
|
||||
|
||||
if (code != TCL_OK) {
|
||||
Tcl_DecrRefCount(commandPtr);
|
||||
return code;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the enter traces made the resolved cmdPtr unusable, go
|
||||
* back and resolve again, but next time don't run enter
|
||||
* traces again.
|
||||
*/
|
||||
|
||||
if (cmdPtr == NULL) {
|
||||
enterTracesDone = 1;
|
||||
Tcl_DecrRefCount(commandPtr);
|
||||
goto reresolve;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Schedule leave traces. Raise the refCount on the resolved
|
||||
* cmdPtr, so that when it passes to the leave traces we know
|
||||
* it's still valid.
|
||||
*/
|
||||
|
||||
cmdPtr->refCount++;
|
||||
TclNRAddCallback(interp, TEOV_RunLeaveTraces, INT2PTR(objc),
|
||||
commandPtr, cmdPtr, objv);
|
||||
}
|
||||
|
||||
TclNRAddCallback(interp, Dispatch,
|
||||
cmdPtr->nreProc ? cmdPtr->nreProc : cmdPtr->objProc,
|
||||
cmdPtr->objClientData, INT2PTR(objc), objv);
|
||||
@@ -4592,25 +4671,19 @@ TEOV_RunEnterTraces(
|
||||
Command **cmdPtrPtr,
|
||||
Tcl_Obj *commandPtr,
|
||||
int objc,
|
||||
Tcl_Obj *const objv[],
|
||||
Namespace *lookupNsPtr)
|
||||
Tcl_Obj *const objv[])
|
||||
{
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
Command *cmdPtr = *cmdPtrPtr;
|
||||
int traceCode = TCL_OK;
|
||||
int cmdEpoch = cmdPtr->cmdEpoch;
|
||||
int newEpoch;
|
||||
const char *command;
|
||||
int length;
|
||||
|
||||
Tcl_IncrRefCount(commandPtr);
|
||||
command = Tcl_GetStringFromObj(commandPtr, &length);
|
||||
int newEpoch, cmdEpoch = cmdPtr->cmdEpoch;
|
||||
int length, traceCode = TCL_OK;
|
||||
const char *command = Tcl_GetStringFromObj(commandPtr, &length);
|
||||
|
||||
/*
|
||||
* Call trace functions.
|
||||
* Execute any command or execution traces. Note that we bump up the
|
||||
* command's reference count for the duration of the calling of the traces
|
||||
* so that the structure doesn't go away underneath our feet.
|
||||
* command's reference count for the duration of the calling of the
|
||||
* traces so that the structure doesn't go away underneath our feet.
|
||||
*/
|
||||
|
||||
cmdPtr->refCount++;
|
||||
@@ -4625,29 +4698,22 @@ TEOV_RunEnterTraces(
|
||||
newEpoch = cmdPtr->cmdEpoch;
|
||||
TclCleanupCommandMacro(cmdPtr);
|
||||
|
||||
/*
|
||||
* If the traces modified/deleted the command or any existing traces, they
|
||||
* will update the command's epoch. We need to lookup again, but do not
|
||||
* run enter traces on the newly found cmdPtr.
|
||||
*/
|
||||
if (traceCode != TCL_OK) {
|
||||
if (traceCode == TCL_ERROR) {
|
||||
Tcl_Obj *info;
|
||||
|
||||
TclNewLiteralStringObj(info, "\n (enter trace on \"");
|
||||
Tcl_AppendLimitedToObj(info, command, length, 55, "...");
|
||||
Tcl_AppendToObj(info, "\")", 2);
|
||||
Tcl_AppendObjToErrorInfo(interp, info);
|
||||
iPtr->flags |= ERR_ALREADY_LOGGED;
|
||||
}
|
||||
return traceCode;
|
||||
}
|
||||
if (cmdEpoch != newEpoch) {
|
||||
cmdPtr = TEOV_LookupCmdFromObj(interp, objv[0], lookupNsPtr);
|
||||
*cmdPtrPtr = cmdPtr;
|
||||
*cmdPtrPtr = NULL;
|
||||
}
|
||||
|
||||
if (cmdPtr && (traceCode == TCL_OK)) {
|
||||
/*
|
||||
* Command was found: push a record to schedule the leave traces.
|
||||
*/
|
||||
|
||||
TclNRAddCallback(interp, TEOV_RunLeaveTraces, INT2PTR(objc),
|
||||
commandPtr, cmdPtr, objv);
|
||||
cmdPtr->refCount++;
|
||||
} else {
|
||||
Tcl_DecrRefCount(commandPtr);
|
||||
}
|
||||
return traceCode;
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -4662,12 +4728,10 @@ TEOV_RunLeaveTraces(
|
||||
Tcl_Obj *commandPtr = data[1];
|
||||
Command *cmdPtr = data[2];
|
||||
Tcl_Obj **objv = data[3];
|
||||
|
||||
int length;
|
||||
const char *command = Tcl_GetStringFromObj(commandPtr, &length);
|
||||
|
||||
if (!(cmdPtr->flags & CMD_IS_DELETED)) {
|
||||
int length;
|
||||
const char *command = Tcl_GetStringFromObj(commandPtr, &length);
|
||||
|
||||
if (cmdPtr->flags & CMD_HAS_EXEC_TRACES){
|
||||
traceCode = TclCheckExecutionTraces(interp, command, length,
|
||||
cmdPtr, result, TCL_TRACE_LEAVE_EXEC, objc, objv);
|
||||
@@ -4677,7 +4741,6 @@ TEOV_RunLeaveTraces(
|
||||
cmdPtr, result, TCL_TRACE_LEAVE_EXEC, objc, objv);
|
||||
}
|
||||
}
|
||||
Tcl_DecrRefCount(commandPtr);
|
||||
|
||||
/*
|
||||
* As cmdPtr is set, TclNRRunCallbacks is about to reduce the numlevels.
|
||||
@@ -4688,8 +4751,18 @@ TEOV_RunLeaveTraces(
|
||||
TclCleanupCommandMacro(cmdPtr);
|
||||
|
||||
if (traceCode != TCL_OK) {
|
||||
return traceCode;
|
||||
if (traceCode == TCL_ERROR) {
|
||||
Tcl_Obj *info;
|
||||
|
||||
TclNewLiteralStringObj(info, "\n (leave trace on \"");
|
||||
Tcl_AppendLimitedToObj(info, command, length, 55, "...");
|
||||
Tcl_AppendToObj(info, "\")", 2);
|
||||
Tcl_AppendObjToErrorInfo(interp, info);
|
||||
iPtr->flags |= ERR_ALREADY_LOGGED;
|
||||
}
|
||||
result = traceCode;
|
||||
}
|
||||
Tcl_DecrRefCount(commandPtr);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -4705,7 +4778,6 @@ TEOV_LookupCmdFromObj(
|
||||
|
||||
if (lookupNsPtr) {
|
||||
iPtr->varFramePtr->nsPtr = lookupNsPtr;
|
||||
iPtr->lookupNsPtr = NULL;
|
||||
}
|
||||
cmdPtr = (Command *) Tcl_GetCommandFromObj(interp, namePtr);
|
||||
iPtr->varFramePtr->nsPtr = savedNsPtr;
|
||||
@@ -6460,30 +6532,32 @@ TclObjInvoke(
|
||||
* TCL_INVOKE_HIDDEN, TCL_INVOKE_NO_UNKNOWN,
|
||||
* or TCL_INVOKE_NO_TRACEBACK. */
|
||||
{
|
||||
register Interp *iPtr = (Interp *) interp;
|
||||
Tcl_HashTable *hTblPtr; /* Table of hidden commands. */
|
||||
const char *cmdName; /* Name of the command from objv[0]. */
|
||||
Tcl_HashEntry *hPtr = NULL;
|
||||
Command *cmdPtr;
|
||||
int result;
|
||||
|
||||
if (interp == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
if ((objc < 1) || (objv == NULL)) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"illegal argument vector", -1));
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
if ((flags & TCL_INVOKE_HIDDEN) == 0) {
|
||||
Tcl_Panic("TclObjInvoke: called without TCL_INVOKE_HIDDEN");
|
||||
}
|
||||
return Tcl_NRCallObjProc(interp, TclNRInvoke, NULL, objc, objv);
|
||||
}
|
||||
|
||||
if (TclInterpReady(interp) == TCL_ERROR) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
int
|
||||
TclNRInvoke(
|
||||
ClientData clientData,
|
||||
Tcl_Interp *interp,
|
||||
int objc,
|
||||
Tcl_Obj *const objv[])
|
||||
{
|
||||
register Interp *iPtr = (Interp *) interp;
|
||||
Tcl_HashTable *hTblPtr; /* Table of hidden commands. */
|
||||
const char *cmdName; /* Name of the command from objv[0]. */
|
||||
Tcl_HashEntry *hPtr = NULL;
|
||||
Command *cmdPtr;
|
||||
|
||||
cmdName = TclGetString(objv[0]);
|
||||
hTblPtr = iPtr->hiddenCmdTablePtr;
|
||||
@@ -6499,36 +6573,27 @@ TclObjInvoke(
|
||||
}
|
||||
cmdPtr = Tcl_GetHashValue(hPtr);
|
||||
|
||||
/*
|
||||
* Invoke the command function.
|
||||
*/
|
||||
|
||||
iPtr->cmdCount++;
|
||||
if (cmdPtr->objProc != NULL) {
|
||||
result = cmdPtr->objProc(cmdPtr->objClientData, interp, objc, objv);
|
||||
} else {
|
||||
result = Tcl_NRCallObjProc(interp, cmdPtr->nreProc,
|
||||
cmdPtr->objClientData, objc, objv);
|
||||
}
|
||||
/* Avoid the exception-handling brain damage when numLevels == 0 . */
|
||||
iPtr->numLevels++;
|
||||
Tcl_NRAddCallback(interp, NRPostInvoke, NULL, NULL, NULL, NULL);
|
||||
|
||||
/*
|
||||
* If an error occurred, record information about what was being executed
|
||||
* when the error occurred.
|
||||
* Normal command resolution of objv[0] isn't going to find cmdPtr.
|
||||
* That's the whole point of **hidden** commands. So tell the
|
||||
* Eval core machinery not to even try (and risk finding something wrong).
|
||||
*/
|
||||
|
||||
if ((result == TCL_ERROR)
|
||||
&& ((flags & TCL_INVOKE_NO_TRACEBACK) == 0)
|
||||
&& ((iPtr->flags & ERR_ALREADY_LOGGED) == 0)) {
|
||||
int length;
|
||||
Tcl_Obj *command = Tcl_NewListObj(objc, objv);
|
||||
const char *cmdString;
|
||||
return TclNREvalObjv(interp, objc, objv, TCL_EVAL_NORESOLVE, cmdPtr);
|
||||
}
|
||||
|
||||
Tcl_IncrRefCount(command);
|
||||
cmdString = Tcl_GetStringFromObj(command, &length);
|
||||
Tcl_LogCommandInfo(interp, cmdString, cmdString, length);
|
||||
Tcl_DecrRefCount(command);
|
||||
iPtr->flags &= ~ERR_ALREADY_LOGGED;
|
||||
}
|
||||
static int
|
||||
NRPostInvoke(
|
||||
ClientData clientData[],
|
||||
Tcl_Interp *interp,
|
||||
int result)
|
||||
{
|
||||
Interp *iPtr = (Interp *)interp;
|
||||
iPtr->numLevels--;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -8076,7 +8141,8 @@ Tcl_NRCmdSwap(
|
||||
Tcl_Obj *const objv[],
|
||||
int flags)
|
||||
{
|
||||
return TclNREvalObjv(interp, objc, objv, flags, (Command *) cmd);
|
||||
return TclNREvalObjv(interp, objc, objv, flags|TCL_EVAL_NOERR,
|
||||
(Command *) cmd);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
|
||||
+253
-55
@@ -87,10 +87,13 @@ static int BinaryDecodeHex(ClientData clientData,
|
||||
static int BinaryEncode64(ClientData clientData,
|
||||
Tcl_Interp *interp,
|
||||
int objc, Tcl_Obj *const objv[]);
|
||||
static int BinaryDecodeUu(ClientData clientData,
|
||||
static int BinaryDecode64(ClientData clientData,
|
||||
Tcl_Interp *interp,
|
||||
int objc, Tcl_Obj *const objv[]);
|
||||
static int BinaryDecode64(ClientData clientData,
|
||||
static int BinaryEncodeUu(ClientData clientData,
|
||||
Tcl_Interp *interp, int objc,
|
||||
Tcl_Obj *const objv[]);
|
||||
static int BinaryDecodeUu(ClientData clientData,
|
||||
Tcl_Interp *interp,
|
||||
int objc, Tcl_Obj *const objv[]);
|
||||
|
||||
@@ -139,9 +142,9 @@ static const EnsembleImplMap binaryMap[] = {
|
||||
{ NULL, NULL, NULL, NULL, NULL, 0 }
|
||||
};
|
||||
static const EnsembleImplMap encodeMap[] = {
|
||||
{ "hex", BinaryEncodeHex, TclCompileBasic1ArgCmd, NULL, (ClientData)HexDigits, 0 },
|
||||
{ "uuencode", BinaryEncode64, NULL, NULL, (ClientData)UueDigits, 0 },
|
||||
{ "base64", BinaryEncode64, NULL, NULL, (ClientData)B64Digits, 0 },
|
||||
{ "hex", BinaryEncodeHex, TclCompileBasic1ArgCmd, NULL, NULL, 0 },
|
||||
{ "uuencode", BinaryEncodeUu, NULL, NULL, NULL, 0 },
|
||||
{ "base64", BinaryEncode64, NULL, NULL, NULL, 0 },
|
||||
{ NULL, NULL, NULL, NULL, NULL, 0 }
|
||||
};
|
||||
static const EnsembleImplMap decodeMap[] = {
|
||||
@@ -2312,7 +2315,6 @@ BinaryEncodeHex(
|
||||
Tcl_Obj *resultObj = NULL;
|
||||
unsigned char *data = NULL;
|
||||
unsigned char *cursor = NULL;
|
||||
const char *digits = clientData;
|
||||
int offset = 0, count = 0;
|
||||
|
||||
if (objc != 2) {
|
||||
@@ -2324,8 +2326,8 @@ BinaryEncodeHex(
|
||||
data = Tcl_GetByteArrayFromObj(objv[1], &count);
|
||||
cursor = Tcl_SetByteArrayLength(resultObj, count * 2);
|
||||
for (offset = 0; offset < count; ++offset) {
|
||||
*cursor++ = digits[((data[offset] >> 4) & 0x0f)];
|
||||
*cursor++ = digits[(data[offset] & 0x0f)];
|
||||
*cursor++ = HexDigits[((data[offset] >> 4) & 0x0f)];
|
||||
*cursor++ = HexDigits[(data[offset] & 0x0f)];
|
||||
}
|
||||
Tcl_SetObjResult(interp, resultObj);
|
||||
return TCL_OK;
|
||||
@@ -2386,29 +2388,32 @@ BinaryDecodeHex(
|
||||
while (data < dataend) {
|
||||
value = 0;
|
||||
for (i=0 ; i<2 ; i++) {
|
||||
if (data < dataend) {
|
||||
c = *data++;
|
||||
|
||||
if (!isxdigit((int) c)) {
|
||||
if (strict || !isspace(c)) {
|
||||
goto badChar;
|
||||
}
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
if (data >= dataend) {
|
||||
value <<= 4;
|
||||
c -= '0';
|
||||
if (c > 9) {
|
||||
c += ('0' - 'A') + 10;
|
||||
}
|
||||
if (c > 16) {
|
||||
c += ('A' - 'a');
|
||||
}
|
||||
value |= (c & 0xf);
|
||||
} else {
|
||||
value <<= 4;
|
||||
cut++;
|
||||
break;
|
||||
}
|
||||
|
||||
c = *data++;
|
||||
if (!isxdigit((int) c)) {
|
||||
if (strict || !isspace(c)) {
|
||||
goto badChar;
|
||||
}
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
|
||||
value <<= 4;
|
||||
c -= '0';
|
||||
if (c > 9) {
|
||||
c += ('0' - 'A') + 10;
|
||||
}
|
||||
if (c > 16) {
|
||||
c += ('A' - 'a');
|
||||
}
|
||||
value |= (c & 0xf);
|
||||
}
|
||||
if (i < 2) {
|
||||
cut++;
|
||||
}
|
||||
*cursor++ = UCHAR(value);
|
||||
value = 0;
|
||||
@@ -2436,7 +2441,7 @@ BinaryDecodeHex(
|
||||
* This implements a generic 6 bit binary encoding. Input is broken into
|
||||
* 6 bit chunks and a lookup table passed in via clientData is used to
|
||||
* turn these values into output characters. This is used to implement
|
||||
* base64 and uuencode binary encodings.
|
||||
* base64 binary encodings.
|
||||
*
|
||||
* Results:
|
||||
* Interp result set to an encoded byte array object
|
||||
@@ -2472,7 +2477,6 @@ BinaryEncode64(
|
||||
{
|
||||
Tcl_Obj *resultObj;
|
||||
unsigned char *data, *cursor, *limit;
|
||||
const char *digits = clientData;
|
||||
int maxlen = 0;
|
||||
const char *wrapchar = "\n";
|
||||
int wrapcharlen = 1;
|
||||
@@ -2495,6 +2499,13 @@ BinaryEncode64(
|
||||
if (Tcl_GetIntFromObj(interp, objv[i+1], &maxlen) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
if (maxlen < 0) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"line length out of range", -1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "BINARY", "ENCODE",
|
||||
"LINE_LENGTH", NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
break;
|
||||
case OPT_WRAPCHAR:
|
||||
wrapchar = Tcl_GetStringFromObj(objv[i+1], &wrapcharlen);
|
||||
@@ -2525,17 +2536,17 @@ BinaryEncode64(
|
||||
for (i = 0; i < 3 && offset+i < count; ++i) {
|
||||
d[i] = data[offset + i];
|
||||
}
|
||||
OUTPUT(digits[d[0] >> 2]);
|
||||
OUTPUT(digits[((d[0] & 0x03) << 4) | (d[1] >> 4)]);
|
||||
OUTPUT(B64Digits[d[0] >> 2]);
|
||||
OUTPUT(B64Digits[((d[0] & 0x03) << 4) | (d[1] >> 4)]);
|
||||
if (offset+1 < count) {
|
||||
OUTPUT(digits[((d[1] & 0x0f) << 2) | (d[2] >> 6)]);
|
||||
OUTPUT(B64Digits[((d[1] & 0x0f) << 2) | (d[2] >> 6)]);
|
||||
} else {
|
||||
OUTPUT(digits[64]);
|
||||
OUTPUT(B64Digits[64]);
|
||||
}
|
||||
if (offset+2 < count) {
|
||||
OUTPUT(digits[d[2] & 0x3f]);
|
||||
OUTPUT(B64Digits[d[2] & 0x3f]);
|
||||
} else {
|
||||
OUTPUT(digits[64]);
|
||||
OUTPUT(B64Digits[64]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2544,6 +2555,125 @@ BinaryEncode64(
|
||||
}
|
||||
#undef OUTPUT
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* BinaryEncodeUu --
|
||||
*
|
||||
* This implements the uuencode binary encoding. Input is broken into 6
|
||||
* bit chunks and a lookup table is used to turn these values into output
|
||||
* characters. This differs from the generic code above in that line
|
||||
* lengths are also encoded.
|
||||
*
|
||||
* Results:
|
||||
* Interp result set to an encoded byte array object
|
||||
*
|
||||
* Side effects:
|
||||
* None
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static int
|
||||
BinaryEncodeUu(
|
||||
ClientData clientData,
|
||||
Tcl_Interp *interp,
|
||||
int objc,
|
||||
Tcl_Obj *const objv[])
|
||||
{
|
||||
Tcl_Obj *resultObj;
|
||||
unsigned char *data, *start, *cursor;
|
||||
int offset, count, rawLength, n, i, j, bits, index;
|
||||
int lineLength = 61;
|
||||
const unsigned char SingleNewline[] = { (unsigned char) '\n' };
|
||||
const unsigned char *wrapchar = SingleNewline;
|
||||
int wrapcharlen = sizeof(SingleNewline);
|
||||
enum { OPT_MAXLEN, OPT_WRAPCHAR };
|
||||
static const char *const optStrings[] = { "-maxlen", "-wrapchar", NULL };
|
||||
|
||||
if (objc < 2 || objc%2 != 0) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv,
|
||||
"?-maxlen len? ?-wrapchar char? data");
|
||||
return TCL_ERROR;
|
||||
}
|
||||
for (i = 1; i < objc-1; i += 2) {
|
||||
if (Tcl_GetIndexFromObj(interp, objv[i], optStrings, "option",
|
||||
TCL_EXACT, &index) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
switch (index) {
|
||||
case OPT_MAXLEN:
|
||||
if (Tcl_GetIntFromObj(interp, objv[i+1], &lineLength) != TCL_OK) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
if (lineLength < 3 || lineLength > 85) {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"line length out of range", -1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "BINARY", "ENCODE",
|
||||
"LINE_LENGTH", NULL);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
break;
|
||||
case OPT_WRAPCHAR:
|
||||
wrapchar = Tcl_GetByteArrayFromObj(objv[i+1], &wrapcharlen);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate the buffer. This is a little bit too long, but is "good
|
||||
* enough".
|
||||
*/
|
||||
|
||||
resultObj = Tcl_NewObj();
|
||||
offset = 0;
|
||||
data = Tcl_GetByteArrayFromObj(objv[objc-1], &count);
|
||||
rawLength = (lineLength - 1) * 3 / 4;
|
||||
start = cursor = Tcl_SetByteArrayLength(resultObj,
|
||||
(lineLength + wrapcharlen) *
|
||||
((count + (rawLength - 1)) / rawLength));
|
||||
n = bits = 0;
|
||||
|
||||
/*
|
||||
* Encode the data. Each output line first has the length of raw data
|
||||
* encoded by the output line described in it by one encoded byte, then
|
||||
* the encoded data follows (encoding each 6 bits as one character).
|
||||
* Encoded lines are always terminated by a newline.
|
||||
*/
|
||||
|
||||
while (offset < count) {
|
||||
int lineLen = count - offset;
|
||||
|
||||
if (lineLen > rawLength) {
|
||||
lineLen = rawLength;
|
||||
}
|
||||
*cursor++ = UueDigits[lineLen];
|
||||
for (i=0 ; i<lineLen ; i++) {
|
||||
n <<= 8;
|
||||
n |= data[offset++];
|
||||
for (bits += 8; bits > 6 ; bits -= 6) {
|
||||
*cursor++ = UueDigits[(n >> (bits-6)) & 0x3f];
|
||||
}
|
||||
}
|
||||
if (bits > 0) {
|
||||
n <<= 8;
|
||||
*cursor++ = UueDigits[(n >> (bits + 2)) & 0x3f];
|
||||
bits = 0;
|
||||
}
|
||||
for (j=0 ; j<wrapcharlen ; ++j) {
|
||||
*cursor++ = wrapchar[j];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Fix the length of the output bytearray.
|
||||
*/
|
||||
|
||||
Tcl_SetByteArrayLength(resultObj, cursor-start);
|
||||
Tcl_SetObjResult(interp, resultObj);
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
@@ -2570,8 +2700,8 @@ BinaryDecodeUu(
|
||||
Tcl_Obj *resultObj = NULL;
|
||||
unsigned char *data, *datastart, *dataend;
|
||||
unsigned char *begin, *cursor;
|
||||
int i, index, size, count = 0, cut = 0, strict = 0;
|
||||
char c;
|
||||
int i, index, size, count = 0, strict = 0, lineLen;
|
||||
unsigned char c;
|
||||
enum {OPT_STRICT };
|
||||
static const char *const optStrings[] = { "-strict", NULL };
|
||||
|
||||
@@ -2597,44 +2727,112 @@ BinaryDecodeUu(
|
||||
dataend = data + count;
|
||||
size = ((count + 3) & ~3) * 3 / 4;
|
||||
begin = cursor = Tcl_SetByteArrayLength(resultObj, size);
|
||||
lineLen = -1;
|
||||
|
||||
/*
|
||||
* The decoding loop. First, we get the length of line (strictly, the
|
||||
* number of data bytes we expect to generate from the line) we're
|
||||
* processing this time round if it is not already known (i.e., when the
|
||||
* lineLen variable is set to the magic value, -1).
|
||||
*/
|
||||
|
||||
while (data < dataend) {
|
||||
char d[4] = {0, 0, 0, 0};
|
||||
|
||||
if (lineLen < 0) {
|
||||
c = *data++;
|
||||
if (c < 32 || c > 96) {
|
||||
if (strict || !isspace(c)) {
|
||||
goto badUu;
|
||||
}
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
lineLen = (c - 32) & 0x3f;
|
||||
}
|
||||
|
||||
/*
|
||||
* Now we read a four-character grouping.
|
||||
*/
|
||||
|
||||
for (i=0 ; i<4 ; i++) {
|
||||
if (data < dataend) {
|
||||
d[i] = c = *data++;
|
||||
if (c < 33 || c > 96) {
|
||||
if (strict || !isspace(UCHAR(c))) {
|
||||
goto badUu;
|
||||
if (c < 32 || c > 96) {
|
||||
if (strict) {
|
||||
if (!isspace(c)) {
|
||||
goto badUu;
|
||||
} else if (c == '\n') {
|
||||
goto shortUu;
|
||||
}
|
||||
}
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
cut++;
|
||||
}
|
||||
}
|
||||
if (cut > 3) {
|
||||
cut = 3;
|
||||
|
||||
/*
|
||||
* Translate that grouping into (up to) three binary bytes output.
|
||||
*/
|
||||
|
||||
if (lineLen > 0) {
|
||||
*cursor++ = (((d[0] - 0x20) & 0x3f) << 2)
|
||||
| (((d[1] - 0x20) & 0x3f) >> 4);
|
||||
if (--lineLen > 0) {
|
||||
*cursor++ = (((d[1] - 0x20) & 0x3f) << 4)
|
||||
| (((d[2] - 0x20) & 0x3f) >> 2);
|
||||
if (--lineLen > 0) {
|
||||
*cursor++ = (((d[2] - 0x20) & 0x3f) << 6)
|
||||
| (((d[3] - 0x20) & 0x3f));
|
||||
lineLen--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If we've reached the end of the line, skip until we process a
|
||||
* newline.
|
||||
*/
|
||||
|
||||
if (lineLen == 0 && data < dataend) {
|
||||
lineLen = -1;
|
||||
do {
|
||||
c = *data++;
|
||||
if (c == '\n') {
|
||||
break;
|
||||
} else if (c >= 32 && c <= 96) {
|
||||
data--;
|
||||
break;
|
||||
} else if (strict || !isspace(c)) {
|
||||
goto badUu;
|
||||
}
|
||||
} while (data < dataend);
|
||||
}
|
||||
*cursor++ = (((d[0] - 0x20) & 0x3f) << 2)
|
||||
| (((d[1] - 0x20) & 0x3f) >> 4);
|
||||
*cursor++ = (((d[1] - 0x20) & 0x3f) << 4)
|
||||
| (((d[2] - 0x20) & 0x3f) >> 2);
|
||||
*cursor++ = (((d[2] - 0x20) & 0x3f) << 6)
|
||||
| (((d[3] - 0x20) & 0x3f));
|
||||
}
|
||||
if (cut > size) {
|
||||
cut = size;
|
||||
|
||||
/*
|
||||
* Sanity check, clean up and finish.
|
||||
*/
|
||||
|
||||
if (lineLen > 0 && strict) {
|
||||
goto shortUu;
|
||||
}
|
||||
Tcl_SetByteArrayLength(resultObj, cursor - begin - cut);
|
||||
Tcl_SetByteArrayLength(resultObj, cursor - begin);
|
||||
Tcl_SetObjResult(interp, resultObj);
|
||||
return TCL_OK;
|
||||
|
||||
shortUu:
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf("short uuencode data"));
|
||||
Tcl_SetErrorCode(interp, "TCL", "BINARY", "DECODE", "SHORT", NULL);
|
||||
TclDecrRefCount(resultObj);
|
||||
return TCL_ERROR;
|
||||
|
||||
badUu:
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"invalid uuencode character \"%c\" at position %d",
|
||||
c, (int) (data - datastart - 1)));
|
||||
Tcl_SetErrorCode(interp, "TCL", "BINARY", "DECODE", "INVALID", NULL);
|
||||
TclDecrRefCount(resultObj);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
+62
-40
@@ -269,7 +269,7 @@ TclCompileArraySetCmd(
|
||||
if (isDataValid && !isDataEven) {
|
||||
PushStringLiteral(envPtr, "list must have an even number of elements");
|
||||
PushStringLiteral(envPtr, "-errorCode {TCL ARGUMENT FORMAT}");
|
||||
TclEmitInstInt4(INST_RETURN_IMM, 1, envPtr);
|
||||
TclEmitInstInt4(INST_RETURN_IMM, TCL_ERROR, envPtr);
|
||||
TclEmitInt4( 0, envPtr);
|
||||
goto done;
|
||||
}
|
||||
@@ -354,7 +354,7 @@ TclCompileArraySetCmd(
|
||||
TclEmitInstInt1(INST_JUMP_FALSE1, 0, envPtr);
|
||||
PushStringLiteral(envPtr, "list must have an even number of elements");
|
||||
PushStringLiteral(envPtr, "-errorCode {TCL ARGUMENT FORMAT}");
|
||||
TclEmitInstInt4(INST_RETURN_IMM, 1, envPtr);
|
||||
TclEmitInstInt4(INST_RETURN_IMM, TCL_ERROR, envPtr);
|
||||
TclEmitInt4( 0, envPtr);
|
||||
TclAdjustStackDepth(-1, envPtr);
|
||||
fwd = CurrentOffset(envPtr) - offsetFwd;
|
||||
@@ -620,7 +620,7 @@ TclCompileCatchCmd(
|
||||
TclEmitInstInt4( INST_BEGIN_CATCH4, range, envPtr);
|
||||
ExceptionRangeStarts(envPtr, range);
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
TclEmitOpcode( INST_EVAL_STK, envPtr);
|
||||
TclEmitInvoke(envPtr, INST_EVAL_STK);
|
||||
}
|
||||
/* Stack at this point:
|
||||
* nonsimple: script <mark> result
|
||||
@@ -839,7 +839,7 @@ TclCompileDictSetCmd(
|
||||
CompileEnv *envPtr) /* Holds resulting instructions. */
|
||||
{
|
||||
Tcl_Token *tokenPtr;
|
||||
int numWords, i, dictVarIndex;
|
||||
int i, dictVarIndex;
|
||||
DefineLineInformation; /* TIP #280 */
|
||||
Tcl_Token *varTokenPtr;
|
||||
|
||||
@@ -868,8 +868,7 @@ TclCompileDictSetCmd(
|
||||
*/
|
||||
|
||||
tokenPtr = TokenAfter(varTokenPtr);
|
||||
numWords = parsePtr->numWords-1;
|
||||
for (i=1 ; i<numWords ; i++) {
|
||||
for (i=2 ; i< parsePtr->numWords ; i++) {
|
||||
CompileWord(envPtr, tokenPtr, interp, i);
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
}
|
||||
@@ -878,7 +877,7 @@ TclCompileDictSetCmd(
|
||||
* Now emit the instruction to do the dict manipulation.
|
||||
*/
|
||||
|
||||
TclEmitInstInt4( INST_DICT_SET, numWords-2, envPtr);
|
||||
TclEmitInstInt4( INST_DICT_SET, parsePtr->numWords-3, envPtr);
|
||||
TclEmitInt4( dictVarIndex, envPtr);
|
||||
TclAdjustStackDepth(-1, envPtr);
|
||||
return TCL_OK;
|
||||
@@ -950,7 +949,7 @@ TclCompileDictIncrCmd(
|
||||
* Emit the key and the code to actually do the increment.
|
||||
*/
|
||||
|
||||
CompileWord(envPtr, keyTokenPtr, interp, 3);
|
||||
CompileWord(envPtr, keyTokenPtr, interp, 2);
|
||||
TclEmitInstInt4( INST_DICT_INCR_IMM, incrAmount, envPtr);
|
||||
TclEmitInt4( dictVarIndex, envPtr);
|
||||
return TCL_OK;
|
||||
@@ -966,7 +965,7 @@ TclCompileDictGetCmd(
|
||||
CompileEnv *envPtr) /* Holds resulting instructions. */
|
||||
{
|
||||
Tcl_Token *tokenPtr;
|
||||
int numWords, i;
|
||||
int i;
|
||||
DefineLineInformation; /* TIP #280 */
|
||||
|
||||
/*
|
||||
@@ -979,17 +978,16 @@ TclCompileDictGetCmd(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
tokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
numWords = parsePtr->numWords-1;
|
||||
|
||||
/*
|
||||
* Only compile this because we need INST_DICT_GET anyway.
|
||||
*/
|
||||
|
||||
for (i=0 ; i<numWords ; i++) {
|
||||
for (i=1 ; i<parsePtr->numWords ; i++) {
|
||||
CompileWord(envPtr, tokenPtr, interp, i);
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
}
|
||||
TclEmitInstInt4(INST_DICT_GET, numWords-1, envPtr);
|
||||
TclEmitInstInt4(INST_DICT_GET, parsePtr->numWords-2, envPtr);
|
||||
TclAdjustStackDepth(-1, envPtr);
|
||||
return TCL_OK;
|
||||
}
|
||||
@@ -1004,7 +1002,7 @@ TclCompileDictExistsCmd(
|
||||
CompileEnv *envPtr) /* Holds resulting instructions. */
|
||||
{
|
||||
Tcl_Token *tokenPtr;
|
||||
int numWords, i;
|
||||
int i;
|
||||
DefineLineInformation; /* TIP #280 */
|
||||
|
||||
/*
|
||||
@@ -1017,17 +1015,16 @@ TclCompileDictExistsCmd(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
tokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
numWords = parsePtr->numWords-1;
|
||||
|
||||
/*
|
||||
* Now we do the code generation.
|
||||
*/
|
||||
|
||||
for (i=0 ; i<numWords ; i++) {
|
||||
for (i=1 ; i<parsePtr->numWords ; i++) {
|
||||
CompileWord(envPtr, tokenPtr, interp, i);
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
}
|
||||
TclEmitInstInt4(INST_DICT_EXISTS, numWords-1, envPtr);
|
||||
TclEmitInstInt4(INST_DICT_EXISTS, parsePtr->numWords-2, envPtr);
|
||||
TclAdjustStackDepth(-1, envPtr);
|
||||
return TCL_OK;
|
||||
}
|
||||
@@ -1426,7 +1423,7 @@ CompileDictEachCmd(
|
||||
* this point.
|
||||
*/
|
||||
|
||||
CompileWord(envPtr, dictTokenPtr, interp, 3);
|
||||
CompileWord(envPtr, dictTokenPtr, interp, 2);
|
||||
|
||||
/*
|
||||
* Now we catch errors from here on so that we can finalize the search
|
||||
@@ -1635,7 +1632,7 @@ TclCompileDictUpdateCmd(
|
||||
infoIndex = TclCreateAuxData(duiPtr, &tclDictUpdateInfoType, envPtr);
|
||||
|
||||
for (i=0 ; i<numVars ; i++) {
|
||||
CompileWord(envPtr, keyTokenPtrs[i], interp, i);
|
||||
CompileWord(envPtr, keyTokenPtrs[i], interp, 2*i+2);
|
||||
}
|
||||
TclEmitInstInt4( INST_LIST, numVars, envPtr);
|
||||
TclEmitInstInt4( INST_DICT_UPDATE_START, dictIndex, envPtr);
|
||||
@@ -1678,7 +1675,7 @@ TclCompileDictUpdateCmd(
|
||||
|
||||
TclEmitInstInt4( INST_DICT_UPDATE_END, dictIndex, envPtr);
|
||||
TclEmitInt4( infoIndex, envPtr);
|
||||
TclEmitOpcode( INST_RETURN_STK, envPtr);
|
||||
TclEmitInvoke(envPtr,INST_RETURN_STK);
|
||||
|
||||
if (TclFixupForwardJumpToHere(envPtr, &jumpFixup, 127)) {
|
||||
Tcl_Panic("TclCompileDictCmd(update): bad jump distance %d",
|
||||
@@ -1792,8 +1789,8 @@ TclCompileDictLappendCmd(
|
||||
* Issue the implementation.
|
||||
*/
|
||||
|
||||
CompileWord(envPtr, keyTokenPtr, interp, 3);
|
||||
CompileWord(envPtr, valueTokenPtr, interp, 4);
|
||||
CompileWord(envPtr, keyTokenPtr, interp, 2);
|
||||
CompileWord(envPtr, valueTokenPtr, interp, 3);
|
||||
TclEmitInstInt4( INST_DICT_LAPPEND, dictVarIndex, envPtr);
|
||||
return TCL_OK;
|
||||
}
|
||||
@@ -1878,7 +1875,7 @@ TclCompileDictWithCmd(
|
||||
|
||||
tokenPtr = TokenAfter(varTokenPtr);
|
||||
for (i=2 ; i<parsePtr->numWords-1 ; i++) {
|
||||
CompileWord(envPtr, tokenPtr, interp, i-1);
|
||||
CompileWord(envPtr, tokenPtr, interp, i);
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
}
|
||||
TclEmitInstInt4(INST_LIST, parsePtr->numWords-3,envPtr);
|
||||
@@ -1905,7 +1902,7 @@ TclCompileDictWithCmd(
|
||||
|
||||
tokenPtr = varTokenPtr;
|
||||
for (i=1 ; i<parsePtr->numWords-1 ; i++) {
|
||||
CompileWord(envPtr, tokenPtr, interp, i-1);
|
||||
CompileWord(envPtr, tokenPtr, interp, i);
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
}
|
||||
TclEmitInstInt4(INST_LIST, parsePtr->numWords-3,envPtr);
|
||||
@@ -1919,7 +1916,7 @@ TclCompileDictWithCmd(
|
||||
* Case: Direct dict in non-simple var with empty body.
|
||||
*/
|
||||
|
||||
CompileWord(envPtr, varTokenPtr, interp, 0);
|
||||
CompileWord(envPtr, varTokenPtr, interp, 1);
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
TclEmitOpcode( INST_LOAD_STK, envPtr);
|
||||
PushStringLiteral(envPtr, "");
|
||||
@@ -1954,13 +1951,13 @@ TclCompileDictWithCmd(
|
||||
*/
|
||||
|
||||
if (dictVar == -1) {
|
||||
CompileWord(envPtr, varTokenPtr, interp, 0);
|
||||
CompileWord(envPtr, varTokenPtr, interp, 1);
|
||||
Emit14Inst( INST_STORE_SCALAR, varNameTmp, envPtr);
|
||||
}
|
||||
tokenPtr = TokenAfter(varTokenPtr);
|
||||
if (gotPath) {
|
||||
for (i=2 ; i<parsePtr->numWords-1 ; i++) {
|
||||
CompileWord(envPtr, tokenPtr, interp, i-1);
|
||||
CompileWord(envPtr, tokenPtr, interp, i);
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
}
|
||||
TclEmitInstInt4( INST_LIST, parsePtr->numWords-3,envPtr);
|
||||
@@ -2036,7 +2033,7 @@ TclCompileDictWithCmd(
|
||||
} else {
|
||||
TclEmitInstInt4( INST_DICT_RECOMBINE_IMM, dictVar, envPtr);
|
||||
}
|
||||
TclEmitOpcode( INST_RETURN_STK, envPtr);
|
||||
TclEmitInvoke(envPtr, INST_RETURN_STK);
|
||||
|
||||
/*
|
||||
* Prepare for the start of the next command.
|
||||
@@ -2138,19 +2135,48 @@ TclCompileErrorCmd(
|
||||
{
|
||||
/*
|
||||
* General syntax: [error message ?errorInfo? ?errorCode?]
|
||||
* However, we only deal with the case where there is just a message.
|
||||
*/
|
||||
Tcl_Token *messageTokenPtr;
|
||||
|
||||
Tcl_Token *tokenPtr;
|
||||
DefineLineInformation; /* TIP #280 */
|
||||
|
||||
if (parsePtr->numWords != 2) {
|
||||
if (parsePtr->numWords < 2 || parsePtr->numWords > 4) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
messageTokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
|
||||
PushStringLiteral(envPtr, "-code error -level 0");
|
||||
CompileWord(envPtr, messageTokenPtr, interp, 1);
|
||||
TclEmitOpcode(INST_RETURN_STK, envPtr);
|
||||
/*
|
||||
* Handle the message.
|
||||
*/
|
||||
|
||||
tokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
CompileWord(envPtr, tokenPtr, interp, 1);
|
||||
|
||||
/*
|
||||
* Construct the options. Note that -code and -level are not here.
|
||||
*/
|
||||
|
||||
if (parsePtr->numWords == 2) {
|
||||
PushStringLiteral(envPtr, "");
|
||||
} else {
|
||||
PushStringLiteral(envPtr, "-errorinfo");
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
CompileWord(envPtr, tokenPtr, interp, 2);
|
||||
if (parsePtr->numWords == 3) {
|
||||
TclEmitInstInt4( INST_LIST, 2, envPtr);
|
||||
} else {
|
||||
PushStringLiteral(envPtr, "-errorcode");
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
CompileWord(envPtr, tokenPtr, interp, 3);
|
||||
TclEmitInstInt4( INST_LIST, 4, envPtr);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Issue the error via 'returnImm error 0'.
|
||||
*/
|
||||
|
||||
TclEmitInstInt4( INST_RETURN_IMM, TCL_ERROR, envPtr);
|
||||
TclEmitInt4( 0, envPtr);
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
@@ -2228,7 +2254,7 @@ TclCompileForCmd(
|
||||
{
|
||||
Tcl_Token *startTokenPtr, *testTokenPtr, *nextTokenPtr, *bodyTokenPtr;
|
||||
JumpFixup jumpEvalCondFixup;
|
||||
int testCodeOffset, bodyCodeOffset, nextCodeOffset, jumpDist;
|
||||
int bodyCodeOffset, nextCodeOffset, jumpDist;
|
||||
int bodyRange, nextRange;
|
||||
DefineLineInformation; /* TIP #280 */
|
||||
|
||||
@@ -2309,13 +2335,9 @@ TclCompileForCmd(
|
||||
* terminates the for.
|
||||
*/
|
||||
|
||||
testCodeOffset = CurrentOffset(envPtr);
|
||||
|
||||
jumpDist = testCodeOffset - jumpEvalCondFixup.codeOffset;
|
||||
if (TclFixupForwardJump(envPtr, &jumpEvalCondFixup, jumpDist, 127)) {
|
||||
if (TclFixupForwardJumpToHere(envPtr, &jumpEvalCondFixup, 127)) {
|
||||
bodyCodeOffset += 3;
|
||||
nextCodeOffset += 3;
|
||||
testCodeOffset += 3;
|
||||
}
|
||||
|
||||
SetLineInformation(2);
|
||||
|
||||
+44
-16
@@ -85,14 +85,17 @@ TclCompileGlobalCmd(
|
||||
*/
|
||||
|
||||
varTokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
for (i=2; i<=numWords; varTokenPtr = TokenAfter(varTokenPtr),i++) {
|
||||
for (i=1; i<numWords; varTokenPtr = TokenAfter(varTokenPtr),i++) {
|
||||
localIndex = IndexTailVarIfKnown(interp, varTokenPtr, envPtr);
|
||||
|
||||
if (localIndex < 0) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
CompileWord(envPtr, varTokenPtr, interp, 1);
|
||||
/* TODO: Consider what value can pass throug the
|
||||
* IndexTailVarIfKnown() screen. Full CompileWord()
|
||||
* likely does not apply here. Push known value instead. */
|
||||
CompileWord(envPtr, varTokenPtr, interp, i);
|
||||
TclEmitInstInt4( INST_NSUPVAR, localIndex, envPtr);
|
||||
}
|
||||
|
||||
@@ -584,6 +587,7 @@ TclCompileInfoCommandsCmd(
|
||||
* that the result needs to be list-ified.
|
||||
*/
|
||||
|
||||
/* TODO: Just push the known value */
|
||||
CompileWord(envPtr, tokenPtr, interp, 1);
|
||||
TclEmitOpcode( INST_RESOLVE_COMMAND, envPtr);
|
||||
TclEmitOpcode( INST_DUP, envPtr);
|
||||
@@ -1899,13 +1903,13 @@ TclCompileNamespaceUpvarCmd(
|
||||
*/
|
||||
|
||||
localTokenPtr = tokenPtr;
|
||||
for (i=3; i<=numWords; i+=2) {
|
||||
for (i=2; i<numWords; i+=2) {
|
||||
otherTokenPtr = TokenAfter(localTokenPtr);
|
||||
localTokenPtr = TokenAfter(otherTokenPtr);
|
||||
|
||||
CompileWord(envPtr, otherTokenPtr, interp, 1);
|
||||
CompileWord(envPtr, otherTokenPtr, interp, i);
|
||||
PushVarNameWord(interp, localTokenPtr, envPtr, 0,
|
||||
&localIndex, &isScalar, 1);
|
||||
&localIndex, &isScalar, i+1);
|
||||
|
||||
if ((localIndex < 0) || !isScalar) {
|
||||
return TCL_ERROR;
|
||||
@@ -2363,7 +2367,7 @@ TclCompileReturnCmd(
|
||||
|
||||
CompileWord(envPtr, optsTokenPtr, interp, 2);
|
||||
CompileWord(envPtr, msgTokenPtr, interp, 3);
|
||||
TclEmitOpcode(INST_RETURN_STK, envPtr);
|
||||
TclEmitInvoke(envPtr, INST_RETURN_STK);
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
@@ -2377,6 +2381,10 @@ TclCompileReturnCmd(
|
||||
* Scan through the return options. If any are unknown at compile time,
|
||||
* there is no value in bytecompiling. Save the option values known in an
|
||||
* objv array for merging into a return options dictionary.
|
||||
*
|
||||
* TODO: There is potential for improvement if all option keys are known
|
||||
* at compile time and all option values relating to '-code' and '-level'
|
||||
* are known at compile time.
|
||||
*/
|
||||
|
||||
for (objc = 0; objc < numOptionWords; objc++) {
|
||||
@@ -2384,7 +2392,7 @@ TclCompileReturnCmd(
|
||||
Tcl_IncrRefCount(objv[objc]);
|
||||
if (!TclWordKnownAtCompileTime(wordTokenPtr, objv[objc])) {
|
||||
/*
|
||||
* Non-literal, so punt to run-time.
|
||||
* Non-literal, so punt to run-time assembly of the dictionary.
|
||||
*/
|
||||
|
||||
for (; objc>=0 ; objc--) {
|
||||
@@ -2505,7 +2513,7 @@ TclCompileReturnCmd(
|
||||
* Issue the RETURN itself.
|
||||
*/
|
||||
|
||||
TclEmitOpcode(INST_RETURN_STK, envPtr);
|
||||
TclEmitInvoke(envPtr, INST_RETURN_STK);
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
@@ -2517,6 +2525,23 @@ CompileReturnInternal(
|
||||
int level,
|
||||
Tcl_Obj *returnOpts)
|
||||
{
|
||||
if (level == 0 && (code == TCL_BREAK || code == TCL_CONTINUE)) {
|
||||
ExceptionRange *rangePtr;
|
||||
ExceptionAux *exceptAux;
|
||||
|
||||
rangePtr = TclGetInnermostExceptionRange(envPtr, code, &exceptAux);
|
||||
if (rangePtr && rangePtr->type == LOOP_EXCEPTION_RANGE) {
|
||||
TclCleanupStackForBreakContinue(envPtr, exceptAux);
|
||||
if (code == TCL_BREAK) {
|
||||
TclAddLoopBreakFixup(envPtr, exceptAux);
|
||||
} else {
|
||||
TclAddLoopContinueFixup(envPtr, exceptAux);
|
||||
}
|
||||
Tcl_DecrRefCount(returnOpts);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
TclEmitPush(TclAddLiteralObj(envPtr, returnOpts, NULL), envPtr);
|
||||
TclEmitInstInt4(op, code, envPtr);
|
||||
TclEmitInt4(level, envPtr);
|
||||
@@ -2568,16 +2593,14 @@ TclCompileUpvarCmd(
|
||||
Tcl_Token *tokenPtr, *otherTokenPtr, *localTokenPtr;
|
||||
int isScalar, localIndex, numWords, i;
|
||||
DefineLineInformation; /* TIP #280 */
|
||||
Tcl_Obj *objPtr = Tcl_NewObj();
|
||||
Tcl_Obj *objPtr;
|
||||
|
||||
if (envPtr->procPtr == NULL) {
|
||||
Tcl_DecrRefCount(objPtr);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
numWords = parsePtr->numWords;
|
||||
if (numWords < 3) {
|
||||
Tcl_DecrRefCount(objPtr);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
@@ -2585,6 +2608,7 @@ TclCompileUpvarCmd(
|
||||
* Push the frame index if it is known at compile time
|
||||
*/
|
||||
|
||||
objPtr = Tcl_NewObj();
|
||||
tokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
if (TclWordKnownAtCompileTime(tokenPtr, objPtr)) {
|
||||
CallFrame *framePtr;
|
||||
@@ -2603,16 +2627,17 @@ TclCompileUpvarCmd(
|
||||
if (numWords%2) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
/* TODO: Push the known value instead? */
|
||||
CompileWord(envPtr, tokenPtr, interp, 1);
|
||||
otherTokenPtr = TokenAfter(tokenPtr);
|
||||
i = 4;
|
||||
i = 2;
|
||||
} else {
|
||||
if (!(numWords%2)) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
PushStringLiteral(envPtr, "1");
|
||||
otherTokenPtr = tokenPtr;
|
||||
i = 3;
|
||||
i = 1;
|
||||
}
|
||||
} else {
|
||||
Tcl_DecrRefCount(objPtr);
|
||||
@@ -2625,12 +2650,12 @@ TclCompileUpvarCmd(
|
||||
* be called at runtime.
|
||||
*/
|
||||
|
||||
for (; i<=numWords; i+=2, otherTokenPtr = TokenAfter(localTokenPtr)) {
|
||||
for (; i<numWords; i+=2, otherTokenPtr = TokenAfter(localTokenPtr)) {
|
||||
localTokenPtr = TokenAfter(otherTokenPtr);
|
||||
|
||||
CompileWord(envPtr, otherTokenPtr, interp, 1);
|
||||
CompileWord(envPtr, otherTokenPtr, interp, i);
|
||||
PushVarNameWord(interp, localTokenPtr, envPtr, 0,
|
||||
&localIndex, &isScalar, 1);
|
||||
&localIndex, &isScalar, i+1);
|
||||
|
||||
if ((localIndex < 0) || !isScalar) {
|
||||
return TCL_ERROR;
|
||||
@@ -2706,6 +2731,9 @@ TclCompileVariableCmd(
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
/* TODO: Consider what value can pass throug the
|
||||
* IndexTailVarIfKnown() screen. Full CompileWord()
|
||||
* likely does not apply here. Push known value instead. */
|
||||
CompileWord(envPtr, varTokenPtr, interp, i);
|
||||
TclEmitInstInt4( INST_VARIABLE, localIndex, envPtr);
|
||||
|
||||
|
||||
+77
-32
@@ -99,6 +99,8 @@ const AuxDataType tclJumptableInfoType = {
|
||||
if ((idx)<256) {OP1(LOAD_SCALAR1,(idx));} else {OP4(LOAD_SCALAR4,(idx));}
|
||||
#define STORE(idx) \
|
||||
if ((idx)<256) {OP1(STORE_SCALAR1,(idx));} else {OP4(STORE_SCALAR4,(idx));}
|
||||
#define INVOKE(name) \
|
||||
TclEmitInvoke(envPtr,INST_##name)
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
@@ -873,7 +875,7 @@ TclSubstCompile(
|
||||
OP( END_CATCH);
|
||||
OP( RETURN_CODE_BRANCH);
|
||||
|
||||
/* ERROR -> reraise it */
|
||||
/* ERROR -> reraise it; NB: can't require BREAK/CONTINUE handling */
|
||||
OP( RETURN_STK);
|
||||
OP( NOP);
|
||||
|
||||
@@ -1864,6 +1866,7 @@ TclCompileTailcallCmd(
|
||||
}
|
||||
|
||||
/* make room for the nsObjPtr */
|
||||
/* TODO: Doesn't this have to be a known value? */
|
||||
CompileWord(envPtr, tokenPtr, interp, 0);
|
||||
for (i=1 ; i<parsePtr->numWords ; i++) {
|
||||
tokenPtr = TokenAfter(tokenPtr);
|
||||
@@ -1964,7 +1967,7 @@ TclCompileThrowCmd(
|
||||
OP( LIST_LENGTH);
|
||||
OP1( JUMP_FALSE1, 16);
|
||||
OP4( LIST, 2);
|
||||
OP44( RETURN_IMM, 1, 0);
|
||||
OP44( RETURN_IMM, TCL_ERROR, 0);
|
||||
TclAdjustStackDepth(2, envPtr);
|
||||
OP( POP);
|
||||
OP( POP);
|
||||
@@ -1973,7 +1976,7 @@ TclCompileThrowCmd(
|
||||
PUSH( "type must be non-empty list");
|
||||
PUSH( "-errorcode {TCL OPERATION THROW BADEXCEPTION}");
|
||||
}
|
||||
OP44( RETURN_IMM, 1, 0);
|
||||
OP44( RETURN_IMM, TCL_ERROR, 0);
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
@@ -2395,7 +2398,7 @@ IssueTryClausesInstructions(
|
||||
TclAdjustStackDepth(-1, envPtr);
|
||||
FIXJUMP1( dontChangeOptions);
|
||||
OP4( REVERSE, 2);
|
||||
OP( RETURN_STK);
|
||||
INVOKE( RETURN_STK);
|
||||
}
|
||||
|
||||
JUMP4( JUMP, addrsToFix[i]);
|
||||
@@ -2414,7 +2417,7 @@ IssueTryClausesInstructions(
|
||||
OP( POP);
|
||||
LOAD( optionsVar);
|
||||
LOAD( resultVar);
|
||||
OP( RETURN_STK);
|
||||
INVOKE( RETURN_STK);
|
||||
|
||||
/*
|
||||
* Fix all the jumps from taken clauses to here (which is the end of the
|
||||
@@ -2723,7 +2726,7 @@ IssueTryClausesFinallyInstructions(
|
||||
FIXJUMP1( finalOK);
|
||||
LOAD( optionsVar);
|
||||
LOAD( resultVar);
|
||||
OP( RETURN_STK);
|
||||
INVOKE( RETURN_STK);
|
||||
|
||||
return TCL_OK;
|
||||
}
|
||||
@@ -2782,7 +2785,7 @@ IssueTryFinallyInstructions(
|
||||
OP1( JUMP1, 7);
|
||||
FIXJUMP1( jumpOK);
|
||||
OP4( REVERSE, 2);
|
||||
OP( RETURN_STK);
|
||||
INVOKE( RETURN_STK);
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
@@ -2814,39 +2817,81 @@ TclCompileUnsetCmd(
|
||||
CompileEnv *envPtr) /* Holds resulting instructions. */
|
||||
{
|
||||
Tcl_Token *varTokenPtr;
|
||||
int isScalar, localIndex, numWords, flags, i;
|
||||
Tcl_Obj *leadingWord;
|
||||
int isScalar, localIndex, flags = 1, i, varCount = 0, haveFlags = 0;
|
||||
DefineLineInformation; /* TIP #280 */
|
||||
|
||||
/* TODO: Consider support for compiling expanded args. */
|
||||
numWords = parsePtr->numWords-1;
|
||||
flags = 1;
|
||||
varTokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
leadingWord = Tcl_NewObj();
|
||||
if (numWords > 0 && TclWordKnownAtCompileTime(varTokenPtr, leadingWord)) {
|
||||
int len;
|
||||
const char *bytes = Tcl_GetStringFromObj(leadingWord, &len);
|
||||
|
||||
if (len == 11 && !strncmp("-nocomplain", bytes, 11)) {
|
||||
flags = 0;
|
||||
varTokenPtr = TokenAfter(varTokenPtr);
|
||||
numWords--;
|
||||
} else if (len == 2 && !strncmp("--", bytes, 2)) {
|
||||
varTokenPtr = TokenAfter(varTokenPtr);
|
||||
numWords--;
|
||||
/*
|
||||
* Verify that all words - except the first non-option one - are known at
|
||||
* compile time so that we can handle them without needing to do a nasty
|
||||
* push/rotate. [Bug 3970f54c4e]
|
||||
*/
|
||||
|
||||
for (i=1,varTokenPtr=parsePtr->tokenPtr ; i<parsePtr->numWords ; i++) {
|
||||
Tcl_Obj *leadingWord = Tcl_NewObj();
|
||||
|
||||
varTokenPtr = TokenAfter(varTokenPtr);
|
||||
if (!TclWordKnownAtCompileTime(varTokenPtr, leadingWord)) {
|
||||
TclDecrRefCount(leadingWord);
|
||||
|
||||
/*
|
||||
* We can tolerate non-trivial substitutions in the first variable
|
||||
* to be unset. If a '--' or '-nocomplain' was present, anything
|
||||
* goes in that one place! (All subsequent variable names must be
|
||||
* constants since we don't want to have to push them all first.)
|
||||
*/
|
||||
|
||||
if (varCount == 0) {
|
||||
if (haveFlags) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* In fact, we're OK as long as we're the first argument *and*
|
||||
* we provably don't start with a '-'. If that is true, then
|
||||
* even if everything else is varying, we still can't be a
|
||||
* flag. Otherwise we'll spill to runtime to place a limit on
|
||||
* the trickiness.
|
||||
*/
|
||||
|
||||
if (varTokenPtr->type == TCL_TOKEN_WORD
|
||||
&& varTokenPtr[1].type == TCL_TOKEN_TEXT
|
||||
&& varTokenPtr[1].size > 0
|
||||
&& varTokenPtr[1].start[0] != '-') {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return TCL_ERROR;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* Cannot guarantee that the first word is not '-nocomplain' at
|
||||
* evaluation with reasonable effort, so spill to interpreted version.
|
||||
*/
|
||||
if (i == 1) {
|
||||
const char *bytes;
|
||||
int len;
|
||||
|
||||
bytes = Tcl_GetStringFromObj(leadingWord, &len);
|
||||
if (len == 11 && !strncmp("-nocomplain", bytes, 11)) {
|
||||
flags = 0;
|
||||
haveFlags = 1;
|
||||
} else if (len == 2 && !strncmp("--", bytes, 2)) {
|
||||
haveFlags = 1;
|
||||
} else {
|
||||
varCount++;
|
||||
}
|
||||
} else {
|
||||
varCount++;
|
||||
}
|
||||
TclDecrRefCount(leadingWord);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
TclDecrRefCount(leadingWord);
|
||||
|
||||
for (i=0 ; i<numWords ; i++) {
|
||||
/*
|
||||
* Issue instructions to unset each of the named variables.
|
||||
*/
|
||||
|
||||
varTokenPtr = TokenAfter(parsePtr->tokenPtr);
|
||||
if (haveFlags) {
|
||||
varTokenPtr = TokenAfter(varTokenPtr);
|
||||
}
|
||||
for (i=1+haveFlags ; i<parsePtr->numWords ; i++) {
|
||||
/*
|
||||
* Decide if we can use a frame slot for the var/array name or if we
|
||||
* need to emit code to compute and push the name at runtime. We use a
|
||||
@@ -2856,7 +2901,7 @@ TclCompileUnsetCmd(
|
||||
*/
|
||||
|
||||
PushVarNameWord(interp, varTokenPtr, envPtr, 0,
|
||||
&localIndex, &isScalar, 1);
|
||||
&localIndex, &isScalar, i);
|
||||
|
||||
/*
|
||||
* Emit instructions to unset the variable.
|
||||
|
||||
+41
-64
@@ -490,13 +490,6 @@ typedef struct JumpList {
|
||||
JumpFixup jump; /* Pass this argument to matching calls of
|
||||
* TclEmitForwardJump() and
|
||||
* TclFixupForwardJump(). */
|
||||
int depth; /* Remember the currStackDepth of the
|
||||
* CompileEnv here. */
|
||||
int offset; /* Data used to compute jump lengths to pass
|
||||
* to TclFixupForwardJump() */
|
||||
int convert; /* Temporary storage used to compute whether
|
||||
* numeric conversion will be needed following
|
||||
* the operator we're compiling. */
|
||||
struct JumpList *next; /* Point to next item on the stack */
|
||||
} JumpList;
|
||||
|
||||
@@ -2261,30 +2254,8 @@ CompileExprTree(
|
||||
if (nodePtr->mark == MARK_LEFT) {
|
||||
next = nodePtr->left;
|
||||
|
||||
switch (nodePtr->lexeme) {
|
||||
case QUESTION:
|
||||
newJump = TclStackAlloc(interp, sizeof(JumpList));
|
||||
newJump->next = jumpPtr;
|
||||
jumpPtr = newJump;
|
||||
newJump = TclStackAlloc(interp, sizeof(JumpList));
|
||||
newJump->next = jumpPtr;
|
||||
jumpPtr = newJump;
|
||||
jumpPtr->depth = envPtr->currStackDepth;
|
||||
if (nodePtr->lexeme == QUESTION) {
|
||||
convert = 1;
|
||||
break;
|
||||
case AND:
|
||||
case OR:
|
||||
newJump = TclStackAlloc(interp, sizeof(JumpList));
|
||||
newJump->next = jumpPtr;
|
||||
jumpPtr = newJump;
|
||||
newJump = TclStackAlloc(interp, sizeof(JumpList));
|
||||
newJump->next = jumpPtr;
|
||||
jumpPtr = newJump;
|
||||
newJump = TclStackAlloc(interp, sizeof(JumpList));
|
||||
newJump->next = jumpPtr;
|
||||
jumpPtr = newJump;
|
||||
jumpPtr->depth = envPtr->currStackDepth;
|
||||
break;
|
||||
}
|
||||
} else if (nodePtr->mark == MARK_RIGHT) {
|
||||
next = nodePtr->right;
|
||||
@@ -2317,25 +2288,35 @@ CompileExprTree(
|
||||
break;
|
||||
}
|
||||
case QUESTION:
|
||||
newJump = TclStackAlloc(interp, sizeof(JumpList));
|
||||
newJump->next = jumpPtr;
|
||||
jumpPtr = newJump;
|
||||
TclEmitForwardJump(envPtr, TCL_FALSE_JUMP, &jumpPtr->jump);
|
||||
break;
|
||||
case COLON:
|
||||
CLANG_ASSERT(jumpPtr);
|
||||
newJump = TclStackAlloc(interp, sizeof(JumpList));
|
||||
newJump->next = jumpPtr;
|
||||
jumpPtr = newJump;
|
||||
TclEmitForwardJump(envPtr, TCL_UNCONDITIONAL_JUMP,
|
||||
&jumpPtr->next->jump);
|
||||
envPtr->currStackDepth = jumpPtr->depth;
|
||||
jumpPtr->offset = (envPtr->codeNext - envPtr->codeStart);
|
||||
jumpPtr->convert = convert;
|
||||
&jumpPtr->jump);
|
||||
TclAdjustStackDepth(-1, envPtr);
|
||||
if (convert) {
|
||||
jumpPtr->jump.jumpType = TCL_TRUE_JUMP;
|
||||
}
|
||||
convert = 1;
|
||||
break;
|
||||
case AND:
|
||||
TclEmitForwardJump(envPtr, TCL_FALSE_JUMP, &jumpPtr->jump);
|
||||
break;
|
||||
case OR:
|
||||
TclEmitForwardJump(envPtr, TCL_TRUE_JUMP, &jumpPtr->jump);
|
||||
newJump = TclStackAlloc(interp, sizeof(JumpList));
|
||||
newJump->next = jumpPtr;
|
||||
jumpPtr = newJump;
|
||||
TclEmitForwardJump(envPtr, (nodePtr->lexeme == AND)
|
||||
? TCL_FALSE_JUMP : TCL_TRUE_JUMP, &jumpPtr->jump);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
int pc1, pc2, target;
|
||||
|
||||
switch (nodePtr->lexeme) {
|
||||
case START:
|
||||
case QUESTION:
|
||||
@@ -2354,9 +2335,9 @@ CompileExprTree(
|
||||
*/
|
||||
|
||||
if (numWords < 255) {
|
||||
TclEmitInstInt1(INST_INVOKE_STK1, numWords, envPtr);
|
||||
TclEmitInvoke(envPtr, INST_INVOKE_STK1, numWords);
|
||||
} else {
|
||||
TclEmitInstInt4(INST_INVOKE_STK4, numWords, envPtr);
|
||||
TclEmitInvoke(envPtr, INST_INVOKE_STK4, numWords);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2375,18 +2356,20 @@ CompileExprTree(
|
||||
break;
|
||||
case COLON:
|
||||
CLANG_ASSERT(jumpPtr);
|
||||
if (TclFixupForwardJump(envPtr, &jumpPtr->next->jump,
|
||||
(envPtr->codeNext - envPtr->codeStart)
|
||||
- jumpPtr->next->jump.codeOffset, 127)) {
|
||||
jumpPtr->offset += 3;
|
||||
if (jumpPtr->jump.jumpType == TCL_TRUE_JUMP) {
|
||||
jumpPtr->jump.jumpType = TCL_UNCONDITIONAL_JUMP;
|
||||
convert = 1;
|
||||
}
|
||||
target = jumpPtr->jump.codeOffset + 2;
|
||||
if (TclFixupForwardJumpToHere(envPtr, &jumpPtr->jump, 127)) {
|
||||
target += 3;
|
||||
}
|
||||
TclFixupForwardJump(envPtr, &jumpPtr->jump,
|
||||
jumpPtr->offset - jumpPtr->jump.codeOffset, 127);
|
||||
convert |= jumpPtr->convert;
|
||||
envPtr->currStackDepth = jumpPtr->depth + 1;
|
||||
freePtr = jumpPtr;
|
||||
jumpPtr = jumpPtr->next;
|
||||
TclStackFree(interp, freePtr);
|
||||
TclFixupForwardJump(envPtr, &jumpPtr->jump,
|
||||
target - jumpPtr->jump.codeOffset, 127);
|
||||
|
||||
freePtr = jumpPtr;
|
||||
jumpPtr = jumpPtr->next;
|
||||
TclStackFree(interp, freePtr);
|
||||
@@ -2394,30 +2377,24 @@ CompileExprTree(
|
||||
case AND:
|
||||
case OR:
|
||||
CLANG_ASSERT(jumpPtr);
|
||||
TclEmitForwardJump(envPtr, (nodePtr->lexeme == AND)
|
||||
? TCL_FALSE_JUMP : TCL_TRUE_JUMP,
|
||||
&jumpPtr->next->jump);
|
||||
pc1 = CurrentOffset(envPtr);
|
||||
TclEmitInstInt1((nodePtr->lexeme == AND) ? INST_JUMP_FALSE1
|
||||
: INST_JUMP_TRUE1, 0, envPtr);
|
||||
TclEmitPush(TclRegisterNewLiteral(envPtr,
|
||||
(nodePtr->lexeme == AND) ? "1" : "0", 1), envPtr);
|
||||
TclEmitForwardJump(envPtr, TCL_UNCONDITIONAL_JUMP,
|
||||
&jumpPtr->next->next->jump);
|
||||
pc2 = CurrentOffset(envPtr);
|
||||
TclEmitInstInt1(INST_JUMP1, 0, envPtr);
|
||||
TclAdjustStackDepth(-1, envPtr);
|
||||
TclFixupForwardJumpToHere(envPtr, &jumpPtr->next->jump, 127);
|
||||
TclStoreInt1AtPtr(CurrentOffset(envPtr) - pc1,
|
||||
envPtr->codeStart + pc1 + 1);
|
||||
if (TclFixupForwardJumpToHere(envPtr, &jumpPtr->jump, 127)) {
|
||||
jumpPtr->next->next->jump.codeOffset += 3;
|
||||
pc2 += 3;
|
||||
}
|
||||
TclEmitPush(TclRegisterNewLiteral(envPtr,
|
||||
(nodePtr->lexeme == AND) ? "0" : "1", 1), envPtr);
|
||||
TclFixupForwardJumpToHere(envPtr, &jumpPtr->next->next->jump,
|
||||
127);
|
||||
TclStoreInt1AtPtr(CurrentOffset(envPtr) - pc2,
|
||||
envPtr->codeStart + pc2 + 1);
|
||||
convert = 0;
|
||||
envPtr->currStackDepth = jumpPtr->depth + 1;
|
||||
freePtr = jumpPtr;
|
||||
jumpPtr = jumpPtr->next;
|
||||
TclStackFree(interp, freePtr);
|
||||
freePtr = jumpPtr;
|
||||
jumpPtr = jumpPtr->next;
|
||||
TclStackFree(interp, freePtr);
|
||||
freePtr = jumpPtr;
|
||||
jumpPtr = jumpPtr->next;
|
||||
TclStackFree(interp, freePtr);
|
||||
|
||||
+201
-7
@@ -1738,9 +1738,9 @@ TclCompileInvocation(
|
||||
}
|
||||
|
||||
if (wordIdx <= 255) {
|
||||
TclEmitInstInt1(INST_INVOKE_STK1, wordIdx, envPtr);
|
||||
TclEmitInvoke(envPtr, INST_INVOKE_STK1, wordIdx);
|
||||
} else {
|
||||
TclEmitInstInt4(INST_INVOKE_STK4, wordIdx, envPtr);
|
||||
TclEmitInvoke(envPtr, INST_INVOKE_STK4, wordIdx);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1802,9 +1802,7 @@ CompileExpanded(
|
||||
* stack-neutral in general.
|
||||
*/
|
||||
|
||||
TclEmitOpcode(INST_INVOKE_EXPANDED, envPtr);
|
||||
envPtr->expandCount--;
|
||||
TclAdjustStackDepth(1 - wordIdx, envPtr);
|
||||
TclEmitInvoke(envPtr, INST_INVOKE_EXPANDED, wordIdx);
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -2229,7 +2227,7 @@ TclCompileTokens(
|
||||
Tcl_DString textBuffer; /* Holds concatenated chars from adjacent
|
||||
* TCL_TOKEN_TEXT, TCL_TOKEN_BS tokens. */
|
||||
char buffer[TCL_UTF_MAX];
|
||||
int i, numObjsToConcat, length;
|
||||
int i, numObjsToConcat, length, adjust;
|
||||
unsigned char *entryCodeNext = envPtr->codeNext;
|
||||
#define NUM_STATIC_POS 20
|
||||
int isLiteral, maxNumCL, numCL;
|
||||
@@ -2266,6 +2264,7 @@ TclCompileTokens(
|
||||
clPosition = ckalloc(maxNumCL * sizeof(int));
|
||||
}
|
||||
|
||||
adjust = 0;
|
||||
Tcl_DStringInit(&textBuffer);
|
||||
numObjsToConcat = 0;
|
||||
for ( ; count > 0; count--, tokenPtr++) {
|
||||
@@ -2309,6 +2308,7 @@ TclCompileTokens(
|
||||
clPosition[numCL] = clPos;
|
||||
numCL ++;
|
||||
}
|
||||
adjust++;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -2331,8 +2331,10 @@ TclCompileTokens(
|
||||
numCL = 0;
|
||||
}
|
||||
|
||||
envPtr->line += adjust;
|
||||
TclCompileScript(interp, tokenPtr->start+1,
|
||||
tokenPtr->size-2, envPtr);
|
||||
envPtr->line -= adjust;
|
||||
numObjsToConcat++;
|
||||
break;
|
||||
|
||||
@@ -2454,7 +2456,7 @@ TclCompileCmdWord(
|
||||
*/
|
||||
|
||||
TclCompileTokens(interp, tokenPtr, count, envPtr);
|
||||
TclEmitOpcode(INST_EVAL_STK, envPtr);
|
||||
TclEmitInvoke(envPtr, INST_EVAL_STK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3897,6 +3899,198 @@ TclFixupForwardJump(
|
||||
return 1; /* the jump was grown */
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclEmitInvoke --
|
||||
*
|
||||
* Emit one of the invoke-related instructions, wrapping it if necessary
|
||||
* in code that ensures that any break or continue operation passing
|
||||
* through it gets the stack unwinding correct, converting it into an
|
||||
* internal jump if in an appropriate context.
|
||||
*
|
||||
* Results:
|
||||
* None
|
||||
*
|
||||
* Side effects:
|
||||
* Issues the jump with all correct stack management. May create another
|
||||
* loop exception range; pointers to ExceptionRange and ExceptionAux
|
||||
* structures should not be held across this call.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
TclEmitInvoke(
|
||||
CompileEnv *envPtr,
|
||||
int opcode,
|
||||
...)
|
||||
{
|
||||
va_list argList;
|
||||
ExceptionRange *rangePtr;
|
||||
ExceptionAux *auxBreakPtr, *auxContinuePtr;
|
||||
int arg1, arg2, wordCount = 0, expandCount = 0;
|
||||
int loopRange, breakRange, continueRange;
|
||||
|
||||
/*
|
||||
* Parse the arguments.
|
||||
*/
|
||||
|
||||
va_start(argList, opcode);
|
||||
switch (opcode) {
|
||||
case INST_INVOKE_STK1:
|
||||
wordCount = arg1 = va_arg(argList, int);
|
||||
arg2 = 0;
|
||||
break;
|
||||
case INST_INVOKE_STK4:
|
||||
wordCount = arg1 = va_arg(argList, int);
|
||||
arg2 = 0;
|
||||
break;
|
||||
case INST_INVOKE_REPLACE:
|
||||
arg1 = va_arg(argList, int);
|
||||
arg2 = va_arg(argList, int);
|
||||
wordCount = arg1 + arg2 - 1;
|
||||
break;
|
||||
default:
|
||||
Tcl_Panic("unexpected opcode");
|
||||
case INST_EVAL_STK:
|
||||
wordCount = 1;
|
||||
arg1 = arg2 = 0;
|
||||
break;
|
||||
case INST_RETURN_STK:
|
||||
wordCount = 2;
|
||||
arg1 = arg2 = 0;
|
||||
break;
|
||||
case INST_INVOKE_EXPANDED:
|
||||
wordCount = arg1 = va_arg(argList, int);
|
||||
arg2 = 0;
|
||||
expandCount = 1;
|
||||
break;
|
||||
}
|
||||
va_end(argList);
|
||||
|
||||
/*
|
||||
* Determine if we need to handle break and continue exceptions with a
|
||||
* special handling exception range (so that we can correctly unwind the
|
||||
* stack).
|
||||
*
|
||||
* These must be done separately; they can be different (especially for
|
||||
* calls from inside a [for] increment clause).
|
||||
*/
|
||||
|
||||
rangePtr = TclGetInnermostExceptionRange(envPtr, TCL_BREAK, &auxBreakPtr);
|
||||
if (rangePtr == NULL || rangePtr->type != LOOP_EXCEPTION_RANGE) {
|
||||
auxBreakPtr = NULL;
|
||||
} else if (auxBreakPtr->stackDepth == envPtr->currStackDepth-wordCount
|
||||
&& auxBreakPtr->expandTarget == envPtr->expandCount-expandCount) {
|
||||
auxBreakPtr = NULL;
|
||||
} else {
|
||||
breakRange = auxBreakPtr - envPtr->exceptAuxArrayPtr;
|
||||
}
|
||||
|
||||
rangePtr = TclGetInnermostExceptionRange(envPtr, TCL_CONTINUE,
|
||||
&auxContinuePtr);
|
||||
if (rangePtr == NULL || rangePtr->type != LOOP_EXCEPTION_RANGE) {
|
||||
auxContinuePtr = NULL;
|
||||
} else if (auxContinuePtr->stackDepth == envPtr->currStackDepth-wordCount
|
||||
&& auxContinuePtr->expandTarget == envPtr->expandCount-expandCount) {
|
||||
auxContinuePtr = NULL;
|
||||
} else {
|
||||
continueRange = auxBreakPtr - envPtr->exceptAuxArrayPtr;
|
||||
}
|
||||
|
||||
if (auxBreakPtr != NULL || auxContinuePtr != NULL) {
|
||||
loopRange = TclCreateExceptRange(LOOP_EXCEPTION_RANGE, envPtr);
|
||||
ExceptionRangeStarts(envPtr, loopRange);
|
||||
}
|
||||
|
||||
/*
|
||||
* Issue the invoke itself.
|
||||
*/
|
||||
|
||||
switch (opcode) {
|
||||
case INST_INVOKE_STK1:
|
||||
TclEmitInstInt1(INST_INVOKE_STK1, arg1, envPtr);
|
||||
break;
|
||||
case INST_INVOKE_STK4:
|
||||
TclEmitInstInt4(INST_INVOKE_STK4, arg1, envPtr);
|
||||
break;
|
||||
case INST_INVOKE_EXPANDED:
|
||||
TclEmitOpcode(INST_INVOKE_EXPANDED, envPtr);
|
||||
envPtr->expandCount--;
|
||||
TclAdjustStackDepth(1 - arg1, envPtr);
|
||||
break;
|
||||
case INST_EVAL_STK:
|
||||
TclEmitOpcode(INST_EVAL_STK, envPtr);
|
||||
break;
|
||||
case INST_RETURN_STK:
|
||||
TclEmitOpcode(INST_RETURN_STK, envPtr);
|
||||
break;
|
||||
case INST_INVOKE_REPLACE:
|
||||
TclEmitInstInt4(INST_INVOKE_REPLACE, arg1, envPtr);
|
||||
TclEmitInt1(arg2, envPtr);
|
||||
TclAdjustStackDepth(-1, envPtr); /* Correction to stack depth calcs */
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we're generating a special wrapper exception range, we need to
|
||||
* finish that up now.
|
||||
*/
|
||||
|
||||
if (auxBreakPtr != NULL || auxContinuePtr != NULL) {
|
||||
int savedStackDepth = envPtr->currStackDepth;
|
||||
int savedExpandCount = envPtr->expandCount;
|
||||
JumpFixup nonTrapFixup;
|
||||
ExceptionAux *exceptAux = envPtr->exceptAuxArrayPtr + loopRange;
|
||||
|
||||
if (auxBreakPtr != NULL) {
|
||||
auxBreakPtr = envPtr->exceptAuxArrayPtr + breakRange;
|
||||
}
|
||||
if (auxContinuePtr != NULL) {
|
||||
auxContinuePtr = envPtr->exceptAuxArrayPtr + continueRange;
|
||||
}
|
||||
|
||||
ExceptionRangeEnds(envPtr, loopRange);
|
||||
TclEmitForwardJump(envPtr, TCL_UNCONDITIONAL_JUMP, &nonTrapFixup);
|
||||
|
||||
/*
|
||||
* Careful! When generating these stack unwinding sequences, the depth
|
||||
* of stack in the cases where they are taken is not the same as if
|
||||
* the exception is not taken.
|
||||
*/
|
||||
|
||||
if (auxBreakPtr != NULL) {
|
||||
TclAdjustStackDepth(-1, envPtr);
|
||||
exceptAux->stackDepth = auxBreakPtr->stackDepth;
|
||||
exceptAux->expandTarget = auxBreakPtr->expandTarget;
|
||||
|
||||
ExceptionRangeTarget(envPtr, loopRange, breakOffset);
|
||||
TclCleanupStackForBreakContinue(envPtr, exceptAux);
|
||||
TclAddLoopBreakFixup(envPtr, auxBreakPtr);
|
||||
|
||||
envPtr->currStackDepth = savedStackDepth;
|
||||
envPtr->expandCount = savedExpandCount;
|
||||
}
|
||||
|
||||
if (auxContinuePtr != NULL) {
|
||||
TclAdjustStackDepth(-1, envPtr);
|
||||
exceptAux->stackDepth = auxContinuePtr->stackDepth;
|
||||
exceptAux->expandTarget = auxContinuePtr->expandTarget;
|
||||
|
||||
ExceptionRangeTarget(envPtr, loopRange, continueOffset);
|
||||
TclCleanupStackForBreakContinue(envPtr, exceptAux);
|
||||
TclAddLoopContinueFixup(envPtr, auxContinuePtr);
|
||||
|
||||
envPtr->currStackDepth = savedStackDepth;
|
||||
envPtr->expandCount = savedExpandCount;
|
||||
}
|
||||
|
||||
TclFinalizeLoopExceptionRange(envPtr, loopRange);
|
||||
TclFixupForwardJumpToHere(envPtr, &nonTrapFixup, 127);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
|
||||
@@ -1021,6 +1021,7 @@ MODULE_SCOPE void TclDeleteLiteralTable(Tcl_Interp *interp,
|
||||
LiteralTable *tablePtr);
|
||||
MODULE_SCOPE void TclEmitForwardJump(CompileEnv *envPtr,
|
||||
TclJumpType jumpType, JumpFixup *jumpFixupPtr);
|
||||
MODULE_SCOPE void TclEmitInvoke(CompileEnv *envPtr, int opcode, ...);
|
||||
MODULE_SCOPE ExceptionRange * TclGetExceptionRangeForPc(unsigned char *pc,
|
||||
int catchOnly, ByteCode *codePtr);
|
||||
MODULE_SCOPE void TclExpandJumpFixupArray(JumpFixupArray *fixupArrayPtr);
|
||||
|
||||
@@ -3179,9 +3179,7 @@ CompileToInvokedCommand(
|
||||
* Do the replacing dispatch.
|
||||
*/
|
||||
|
||||
TclEmitInstInt4(INST_INVOKE_REPLACE, parsePtr->numWords, envPtr);
|
||||
TclEmitInt1(numWords+1, envPtr);
|
||||
TclAdjustStackDepth(-1, envPtr); /* Correction to stack depth calcs. */
|
||||
TclEmitInvoke(envPtr, INST_INVOKE_REPLACE, parsePtr->numWords,numWords+1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+65
-16
@@ -76,36 +76,56 @@ TclSetupEnv(
|
||||
Tcl_Interp *interp) /* Interpreter whose "env" array is to be
|
||||
* managed. */
|
||||
{
|
||||
Var *varPtr, *arrayPtr;
|
||||
Tcl_Obj *varNamePtr;
|
||||
Tcl_DString envString;
|
||||
char *p1, *p2;
|
||||
int i;
|
||||
Tcl_HashTable namesHash;
|
||||
Tcl_HashEntry *hPtr;
|
||||
Tcl_HashSearch search;
|
||||
|
||||
/*
|
||||
* Synchronize the values in the environ array with the contents of the
|
||||
* Tcl "env" variable. To do this:
|
||||
* 1) Remove the trace that fires when the "env" var is unset.
|
||||
* 2) Unset the "env" variable.
|
||||
* 3) If there are no environ variables, create an empty "env" array.
|
||||
* Otherwise populate the array with current values.
|
||||
* 4) Add a trace that synchronizes the "env" array.
|
||||
* 1) Remove the trace that fires when the "env" var is updated.
|
||||
* 2) Find the existing contents of the "env", storing in a hash table.
|
||||
* 3) Create/update elements for each environ variable, removing
|
||||
* elements from the hash table as we go.
|
||||
* 4) Remove the elements for each remaining entry in the hash table,
|
||||
* which must have existed before yet have no analog in the environ
|
||||
* variable.
|
||||
* 5) Add a trace that synchronizes the "env" array.
|
||||
*/
|
||||
|
||||
Tcl_UntraceVar2(interp, "env", NULL,
|
||||
TCL_GLOBAL_ONLY | TCL_TRACE_WRITES | TCL_TRACE_UNSETS |
|
||||
TCL_TRACE_READS | TCL_TRACE_ARRAY, EnvTraceProc, NULL);
|
||||
|
||||
Tcl_UnsetVar2(interp, "env", NULL, TCL_GLOBAL_ONLY);
|
||||
/*
|
||||
* Find out what elements are currently in the global env array.
|
||||
*/
|
||||
|
||||
if (environ[0] == NULL) {
|
||||
Tcl_Obj *varNamePtr;
|
||||
TclNewLiteralStringObj(varNamePtr, "env");
|
||||
Tcl_IncrRefCount(varNamePtr);
|
||||
Tcl_InitObjHashTable(&namesHash);
|
||||
varPtr = TclObjLookupVarEx(interp, varNamePtr, NULL, TCL_GLOBAL_ONLY,
|
||||
/*msg*/ 0, /*createPart1*/ 0, /*createPart2*/ 0, &arrayPtr);
|
||||
TclFindArrayPtrElements(varPtr, &namesHash);
|
||||
|
||||
/*
|
||||
* Go through the environment array and transfer its values into Tcl. At
|
||||
* the same time, remove those elements we add/update from the hash table
|
||||
* of existing elements, so that after this part processes, that table
|
||||
* will hold just the parts to remove.
|
||||
*/
|
||||
|
||||
if (environ[0] != NULL) {
|
||||
int i;
|
||||
|
||||
TclNewLiteralStringObj(varNamePtr, "env");
|
||||
Tcl_IncrRefCount(varNamePtr);
|
||||
TclArraySet(interp, varNamePtr, NULL);
|
||||
Tcl_DecrRefCount(varNamePtr);
|
||||
} else {
|
||||
Tcl_MutexLock(&envMutex);
|
||||
for (i = 0; environ[i] != NULL; i++) {
|
||||
Tcl_Obj *obj1, *obj2;
|
||||
char *p1, *p2;
|
||||
|
||||
p1 = Tcl_ExternalToUtfDString(NULL, environ[i], -1, &envString);
|
||||
p2 = strchr(p1, '=');
|
||||
if (p2 == NULL) {
|
||||
@@ -119,12 +139,41 @@ TclSetupEnv(
|
||||
}
|
||||
p2++;
|
||||
p2[-1] = '\0';
|
||||
Tcl_SetVar2(interp, "env", p1, p2, TCL_GLOBAL_ONLY);
|
||||
obj1 = Tcl_NewStringObj(p1, -1);
|
||||
obj2 = Tcl_NewStringObj(p2, -1);
|
||||
Tcl_DStringFree(&envString);
|
||||
|
||||
Tcl_IncrRefCount(obj1);
|
||||
Tcl_IncrRefCount(obj2);
|
||||
Tcl_ObjSetVar2(interp, varNamePtr, obj1, obj2, TCL_GLOBAL_ONLY);
|
||||
hPtr = Tcl_FindHashEntry(&namesHash, obj1);
|
||||
if (hPtr != NULL) {
|
||||
Tcl_DeleteHashEntry(hPtr);
|
||||
}
|
||||
Tcl_DecrRefCount(obj1);
|
||||
Tcl_DecrRefCount(obj2);
|
||||
}
|
||||
Tcl_MutexUnlock(&envMutex);
|
||||
}
|
||||
|
||||
/*
|
||||
* Delete those elements that existed in the array but which had no
|
||||
* counterparts in the environment array.
|
||||
*/
|
||||
|
||||
for (hPtr=Tcl_FirstHashEntry(&namesHash, &search); hPtr!=NULL;
|
||||
hPtr=Tcl_NextHashEntry(&search)) {
|
||||
Tcl_Obj *elemName = Tcl_GetHashValue(hPtr);
|
||||
|
||||
TclObjUnsetVar2(interp, varNamePtr, elemName, TCL_GLOBAL_ONLY);
|
||||
}
|
||||
Tcl_DeleteHashTable(&namesHash);
|
||||
Tcl_DecrRefCount(varNamePtr);
|
||||
|
||||
/*
|
||||
* Re-establish the trace.
|
||||
*/
|
||||
|
||||
Tcl_TraceVar2(interp, "env", NULL,
|
||||
TCL_GLOBAL_ONLY | TCL_TRACE_WRITES | TCL_TRACE_UNSETS |
|
||||
TCL_TRACE_READS | TCL_TRACE_ARRAY, EnvTraceProc, NULL);
|
||||
|
||||
@@ -1171,8 +1171,6 @@ Tcl_Finalize(void)
|
||||
|
||||
TclFinalizeEncodingSubsystem();
|
||||
|
||||
Tcl_SetPanicProc(NULL);
|
||||
|
||||
/*
|
||||
* Repeat finalization of the thread local storage once more. Although
|
||||
* this step is already done by the Tcl_FinalizeThread call above, series
|
||||
|
||||
+13
-9
@@ -293,12 +293,14 @@ VarHashCreateVar(
|
||||
switch (nCleanup) { \
|
||||
case 1: goto cleanup1_pushObjResultPtr; \
|
||||
case 2: goto cleanup2_pushObjResultPtr; \
|
||||
case 0: break; \
|
||||
} \
|
||||
} else { \
|
||||
pc += (pcAdjustment); \
|
||||
switch (nCleanup) { \
|
||||
case 1: goto cleanup1; \
|
||||
case 2: goto cleanup2; \
|
||||
case 0: break; \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
@@ -360,6 +362,8 @@ VarHashCreateVar(
|
||||
|
||||
#define CURR_DEPTH ((ptrdiff_t) (tosPtr - initTosPtr))
|
||||
|
||||
#define STACK_BASE(esPtr) ((esPtr)->stackWords - 1)
|
||||
|
||||
/*
|
||||
* Macros used to trace instruction execution. The macros TRACE,
|
||||
* TRACE_WITH_OBJ, and O2S are only used inside TclNRExecuteByteCode. O2S is
|
||||
@@ -451,7 +455,7 @@ VarHashCreateVar(
|
||||
(&((objPtr)->internalRep.doubleValue)), TCL_OK) : \
|
||||
((((objPtr)->typePtr == NULL) && ((objPtr)->bytes == NULL)) || \
|
||||
(((objPtr)->bytes != NULL) && ((objPtr)->length == 0))) \
|
||||
? TCL_ERROR : \
|
||||
? (*(tPtr) = TCL_NUMBER_LONG),TCL_ERROR : \
|
||||
TclGetNumberFromObj((interp), (objPtr), (ptrPtr), (tPtr)))
|
||||
#else /* !TCL_WIDE_INT_IS_LONG */
|
||||
#define GetNumberFromObj(interp, objPtr, ptrPtr, tPtr) \
|
||||
@@ -471,7 +475,7 @@ VarHashCreateVar(
|
||||
(&((objPtr)->internalRep.doubleValue)), TCL_OK) : \
|
||||
((((objPtr)->typePtr == NULL) && ((objPtr)->bytes == NULL)) || \
|
||||
(((objPtr)->bytes != NULL) && ((objPtr)->length == 0))) \
|
||||
? TCL_ERROR : \
|
||||
? (*(tPtr) = TCL_NUMBER_LONG),TCL_ERROR : \
|
||||
TclGetNumberFromObj((interp), (objPtr), (ptrPtr), (tPtr)))
|
||||
#endif /* TCL_WIDE_INT_IS_LONG */
|
||||
|
||||
@@ -885,7 +889,7 @@ TclCreateExecEnv(
|
||||
esPtr->nextPtr = NULL;
|
||||
esPtr->markerPtr = NULL;
|
||||
esPtr->endPtr = &esPtr->stackWords[size-1];
|
||||
esPtr->tosPtr = &esPtr->stackWords[-1];
|
||||
esPtr->tosPtr = STACK_BASE(esPtr);
|
||||
|
||||
Tcl_MutexLock(&execMutex);
|
||||
if (!execInitialized) {
|
||||
@@ -1106,8 +1110,8 @@ GrowEvaluationStack(
|
||||
if (esPtr->nextPtr) {
|
||||
oldPtr = esPtr;
|
||||
esPtr = oldPtr->nextPtr;
|
||||
currElems = esPtr->endPtr - &esPtr->stackWords[-1];
|
||||
if (esPtr->markerPtr || (esPtr->tosPtr != &esPtr->stackWords[-1])) {
|
||||
currElems = esPtr->endPtr - STACK_BASE(esPtr);
|
||||
if (esPtr->markerPtr || (esPtr->tosPtr != STACK_BASE(esPtr))) {
|
||||
Tcl_Panic("STACK: Stack after current is in use");
|
||||
}
|
||||
if (esPtr->nextPtr) {
|
||||
@@ -1119,7 +1123,7 @@ GrowEvaluationStack(
|
||||
DeleteExecStack(esPtr);
|
||||
esPtr = oldPtr;
|
||||
} else {
|
||||
currElems = esPtr->endPtr - &esPtr->stackWords[-1];
|
||||
currElems = esPtr->endPtr - STACK_BASE(esPtr);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1273,10 +1277,10 @@ TclStackFree(
|
||||
while (esPtr->nextPtr) {
|
||||
esPtr = esPtr->nextPtr;
|
||||
}
|
||||
esPtr->tosPtr = &esPtr->stackWords[-1];
|
||||
esPtr->tosPtr = STACK_BASE(esPtr);
|
||||
while (esPtr->prevPtr) {
|
||||
ExecStack *tmpPtr = esPtr->prevPtr;
|
||||
if (tmpPtr->tosPtr == &tmpPtr->stackWords[-1]) {
|
||||
if (tmpPtr->tosPtr == STACK_BASE(tmpPtr)) {
|
||||
DeleteExecStack(tmpPtr);
|
||||
} else {
|
||||
break;
|
||||
@@ -4738,7 +4742,7 @@ TEBCresume(
|
||||
if (listPtr->refCount == 1) {
|
||||
TRACE(("\"%.30s\" %d %d => ", O2S(valuePtr),
|
||||
TclGetInt4AtPtr(pc+1), TclGetInt4AtPtr(pc+5)));
|
||||
for (index=toIdx+1 ; index<objc-1 ; index++) {
|
||||
for (index=toIdx+1; index<objc ; index++) {
|
||||
TclDecrRefCount(objv[index]);
|
||||
}
|
||||
listPtr->elemCount = toIdx+1;
|
||||
|
||||
@@ -2201,6 +2201,7 @@ typedef struct Interp {
|
||||
#define TCL_ALLOW_EXCEPTIONS 0x04
|
||||
#define TCL_EVAL_FILE 0x02
|
||||
#define TCL_EVAL_SOURCE_IN_FRAME 0x10
|
||||
#define TCL_EVAL_NORESOLVE 0x20
|
||||
|
||||
/*
|
||||
* Flag bits for Interp structures:
|
||||
@@ -2725,6 +2726,7 @@ MODULE_SCOPE Tcl_ObjCmdProc TclNRCoroutineObjCmd;
|
||||
MODULE_SCOPE Tcl_ObjCmdProc TclNRYieldObjCmd;
|
||||
MODULE_SCOPE Tcl_ObjCmdProc TclNRYieldmObjCmd;
|
||||
MODULE_SCOPE Tcl_ObjCmdProc TclNRYieldToObjCmd;
|
||||
MODULE_SCOPE Tcl_ObjCmdProc TclNRInvoke;
|
||||
|
||||
MODULE_SCOPE void TclSetTailcall(Tcl_Interp *interp, Tcl_Obj *tailcallPtr);
|
||||
MODULE_SCOPE void TclPushTailcallPoint(Tcl_Interp *interp);
|
||||
@@ -3855,6 +3857,8 @@ MODULE_SCOPE int TclPtrUnsetVar(Tcl_Interp *interp, Var *varPtr,
|
||||
Tcl_Obj *part2Ptr, const int flags,
|
||||
int index);
|
||||
MODULE_SCOPE void TclInvalidateNsPath(Namespace *nsPtr);
|
||||
MODULE_SCOPE void TclFindArrayPtrElements(Var *arrayPtr,
|
||||
Tcl_HashTable *tablePtr);
|
||||
|
||||
/*
|
||||
* The new extended interface to the variable traces.
|
||||
|
||||
+52
-4
@@ -279,6 +279,12 @@ static void DeleteScriptLimitCallback(ClientData clientData);
|
||||
static void RunLimitHandlers(LimitHandler *handlerPtr,
|
||||
Tcl_Interp *interp);
|
||||
static void TimeLimitCallback(ClientData clientData);
|
||||
|
||||
/* NRE enabling */
|
||||
static Tcl_NRPostProc NRPostInvokeHidden;
|
||||
static Tcl_ObjCmdProc NRInterpCmd;
|
||||
static Tcl_ObjCmdProc NRSlaveCmd;
|
||||
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
@@ -481,7 +487,8 @@ TclInterpInit(
|
||||
slavePtr->interpCmd = NULL;
|
||||
Tcl_InitHashTable(&slavePtr->aliasTable, TCL_STRING_KEYS);
|
||||
|
||||
Tcl_CreateObjCommand(interp, "interp", Tcl_InterpObjCmd, NULL, NULL);
|
||||
Tcl_NRCreateCommand(interp, "interp", Tcl_InterpObjCmd, NRInterpCmd,
|
||||
NULL, NULL);
|
||||
|
||||
Tcl_CallWhenDeleted(interp, InterpInfoDeleteProc, NULL);
|
||||
return TCL_OK;
|
||||
@@ -589,6 +596,16 @@ Tcl_InterpObjCmd(
|
||||
Tcl_Interp *interp, /* Current interpreter. */
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
return Tcl_NRCallObjProc(interp, NRInterpCmd, clientData, objc, objv);
|
||||
}
|
||||
|
||||
static int
|
||||
NRInterpCmd(
|
||||
ClientData clientData, /* Unused. */
|
||||
Tcl_Interp *interp, /* Current interpreter. */
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
Tcl_Interp *slaveInterp;
|
||||
int index;
|
||||
@@ -2372,8 +2389,8 @@ SlaveCreate(
|
||||
slavePtr->masterInterp = masterInterp;
|
||||
slavePtr->slaveEntryPtr = hPtr;
|
||||
slavePtr->slaveInterp = slaveInterp;
|
||||
slavePtr->interpCmd = Tcl_CreateObjCommand(masterInterp, path,
|
||||
SlaveObjCmd, slaveInterp, SlaveObjCmdDeleteProc);
|
||||
slavePtr->interpCmd = Tcl_NRCreateCommand(masterInterp, path,
|
||||
SlaveObjCmd, NRSlaveCmd, slaveInterp, SlaveObjCmdDeleteProc);
|
||||
Tcl_InitHashTable(&slavePtr->aliasTable, TCL_STRING_KEYS);
|
||||
Tcl_SetHashValue(hPtr, slavePtr);
|
||||
Tcl_SetVar(slaveInterp, "tcl_interactive", "0", TCL_GLOBAL_ONLY);
|
||||
@@ -2461,6 +2478,16 @@ SlaveObjCmd(
|
||||
Tcl_Interp *interp, /* Current interpreter. */
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
return Tcl_NRCallObjProc(interp, NRSlaveCmd, clientData, objc, objv);
|
||||
}
|
||||
|
||||
static int
|
||||
NRSlaveCmd(
|
||||
ClientData clientData, /* Slave interpreter. */
|
||||
Tcl_Interp *interp, /* Current interpreter. */
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
Tcl_Interp *slaveInterp = clientData;
|
||||
int index;
|
||||
@@ -3052,7 +3079,11 @@ SlaveInvokeHidden(
|
||||
Tcl_AllowExceptions(slaveInterp);
|
||||
|
||||
if (namespaceName == NULL) {
|
||||
result = TclObjInvoke(slaveInterp, objc, objv, TCL_INVOKE_HIDDEN);
|
||||
NRE_callback *rootPtr = TOP_CB(slaveInterp);
|
||||
|
||||
Tcl_NRAddCallback(interp, NRPostInvokeHidden, slaveInterp,
|
||||
rootPtr, NULL, NULL);
|
||||
return TclNRInvoke(NULL, slaveInterp, objc, objv);
|
||||
} else {
|
||||
Namespace *nsPtr, *dummy1, *dummy2;
|
||||
const char *tail;
|
||||
@@ -3071,6 +3102,23 @@ SlaveInvokeHidden(
|
||||
Tcl_Release(slaveInterp);
|
||||
return result;
|
||||
}
|
||||
|
||||
static int
|
||||
NRPostInvokeHidden(
|
||||
ClientData data[],
|
||||
Tcl_Interp *interp,
|
||||
int result)
|
||||
{
|
||||
Tcl_Interp *slaveInterp = (Tcl_Interp *)data[0];
|
||||
NRE_callback *rootPtr = (NRE_callback *)data[1];
|
||||
|
||||
if (interp != slaveInterp) {
|
||||
result = TclNRRunCallbacks(slaveInterp, result, rootPtr);
|
||||
Tcl_TransferResult(slaveInterp, result, interp);
|
||||
}
|
||||
Tcl_Release(slaveInterp);
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
|
||||
+66
-31
@@ -673,6 +673,10 @@ Tcl_CreateNamespace(
|
||||
Tcl_DString *namePtr, *buffPtr;
|
||||
int newEntry, nameLen;
|
||||
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
|
||||
const char *nameStr;
|
||||
Tcl_DString tmpBuffer;
|
||||
|
||||
Tcl_DStringInit(&tmpBuffer);
|
||||
|
||||
/*
|
||||
* If there is no active namespace, the interpreter is being initialized.
|
||||
@@ -686,49 +690,78 @@ Tcl_CreateNamespace(
|
||||
|
||||
parentPtr = NULL;
|
||||
simpleName = "";
|
||||
} else if (*name == '\0') {
|
||||
goto doCreate;
|
||||
}
|
||||
|
||||
/*
|
||||
* Ensure that there are no trailing colons as that causes chaos when a
|
||||
* deleteProc is specified. [Bug d614d63989]
|
||||
*/
|
||||
|
||||
if (deleteProc != NULL) {
|
||||
nameStr = name + strlen(name) - 2;
|
||||
if (nameStr >= name && nameStr[1] == ':' && nameStr[0] == ':') {
|
||||
Tcl_DStringAppend(&tmpBuffer, name, -1);
|
||||
while ((nameLen = Tcl_DStringLength(&tmpBuffer)) > 0
|
||||
&& Tcl_DStringValue(&tmpBuffer)[nameLen-1] == ':') {
|
||||
Tcl_DStringSetLength(&tmpBuffer, nameLen-1);
|
||||
}
|
||||
name = Tcl_DStringValue(&tmpBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If we've ended up with an empty string now, we're attempting to create
|
||||
* the global namespace despite the global namespace existing. That's
|
||||
* naughty!
|
||||
*/
|
||||
|
||||
if (*name == '\0') {
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj("can't create namespace"
|
||||
" \"\": only global namespace can have empty name", -1));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "NAMESPACE",
|
||||
"CREATEGLOBAL", NULL);
|
||||
Tcl_DStringFree(&tmpBuffer);
|
||||
return NULL;
|
||||
} else {
|
||||
/*
|
||||
* Find the parent for the new namespace.
|
||||
*/
|
||||
}
|
||||
|
||||
TclGetNamespaceForQualName(interp, name, NULL, TCL_CREATE_NS_IF_UNKNOWN,
|
||||
&parentPtr, &dummy1Ptr, &dummy2Ptr, &simpleName);
|
||||
/*
|
||||
* Find the parent for the new namespace.
|
||||
*/
|
||||
|
||||
/*
|
||||
* If the unqualified name at the end is empty, there were trailing
|
||||
* "::"s after the namespace's name which we ignore. The new namespace
|
||||
* was already (recursively) created and is pointed to by parentPtr.
|
||||
*/
|
||||
TclGetNamespaceForQualName(interp, name, NULL, TCL_CREATE_NS_IF_UNKNOWN,
|
||||
&parentPtr, &dummy1Ptr, &dummy2Ptr, &simpleName);
|
||||
|
||||
if (*simpleName == '\0') {
|
||||
return (Tcl_Namespace *) parentPtr;
|
||||
}
|
||||
/*
|
||||
* If the unqualified name at the end is empty, there were trailing "::"s
|
||||
* after the namespace's name which we ignore. The new namespace was
|
||||
* already (recursively) created and is pointed to by parentPtr.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Check for a bad namespace name and make sure that the name does not
|
||||
* already exist in the parent namespace.
|
||||
*/
|
||||
if (*simpleName == '\0') {
|
||||
Tcl_DStringFree(&tmpBuffer);
|
||||
return (Tcl_Namespace *) parentPtr;
|
||||
}
|
||||
|
||||
if (
|
||||
/*
|
||||
* Check for a bad namespace name and make sure that the name does not
|
||||
* already exist in the parent namespace.
|
||||
*/
|
||||
|
||||
if (
|
||||
#ifndef BREAK_NAMESPACE_COMPAT
|
||||
Tcl_FindHashEntry(&parentPtr->childTable, simpleName) != NULL
|
||||
Tcl_FindHashEntry(&parentPtr->childTable, simpleName) != NULL
|
||||
#else
|
||||
parentPtr->childTablePtr != NULL &&
|
||||
Tcl_FindHashEntry(parentPtr->childTablePtr, simpleName) != NULL
|
||||
parentPtr->childTablePtr != NULL &&
|
||||
Tcl_FindHashEntry(parentPtr->childTablePtr, simpleName) != NULL
|
||||
#endif
|
||||
) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"can't create namespace \"%s\": already exists", name));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "NAMESPACE",
|
||||
"CREATEEXISTING", NULL);
|
||||
return NULL;
|
||||
}
|
||||
) {
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"can't create namespace \"%s\": already exists", name));
|
||||
Tcl_SetErrorCode(interp, "TCL", "OPERATION", "NAMESPACE",
|
||||
"CREATEEXISTING", NULL);
|
||||
Tcl_DStringFree(&tmpBuffer);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -736,6 +769,7 @@ Tcl_CreateNamespace(
|
||||
* of namespaces created.
|
||||
*/
|
||||
|
||||
doCreate:
|
||||
nsPtr = ckalloc(sizeof(Namespace));
|
||||
nameLen = strlen(simpleName) + 1;
|
||||
nsPtr->name = ckalloc(nameLen);
|
||||
@@ -831,6 +865,7 @@ Tcl_CreateNamespace(
|
||||
|
||||
Tcl_DStringFree(&buffer1);
|
||||
Tcl_DStringFree(&buffer2);
|
||||
Tcl_DStringFree(&tmpBuffer);
|
||||
|
||||
/*
|
||||
* If compilation of commands originating from the parent NS is
|
||||
@@ -1942,7 +1977,7 @@ InvokeImportedNRCmd(
|
||||
Command *realCmdPtr = dataPtr->realCmdPtr;
|
||||
|
||||
TclSkipTailcall(interp);
|
||||
return Tcl_NRCmdSwap(interp, (Tcl_Command) realCmdPtr, objc, objv, 0);
|
||||
return TclNREvalObjv(interp, objc, objv, TCL_EVAL_NOERR, realCmdPtr);
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
+17
-3
@@ -1,12 +1,24 @@
|
||||
# tclOO.decls --
|
||||
#
|
||||
# This file contains the declarations for all supported public functions
|
||||
# that are exported by the TclOO package that is embedded within the Tcl
|
||||
# library via the stubs table. This file is used to generate the
|
||||
# tclOODecls.h, tclOOIntDecls.h, tclOOStubInit.c, and tclOOStubLib.c
|
||||
# files.
|
||||
#
|
||||
# Copyright (c) 2008-2013 by Donal K. Fellows.
|
||||
#
|
||||
# See the file "license.terms" for information on usage and redistribution of
|
||||
# this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
|
||||
library tclOO
|
||||
|
||||
######################################################################
|
||||
# public API
|
||||
# Public API, exposed for general users of TclOO.
|
||||
#
|
||||
|
||||
interface tclOO
|
||||
hooks tclOOInt
|
||||
scspec TCLOOAPI
|
||||
|
||||
declare 0 {
|
||||
Tcl_Object Tcl_CopyObjectInstance(Tcl_Interp *interp,
|
||||
@@ -116,7 +128,9 @@ declare 28 {
|
||||
}
|
||||
|
||||
######################################################################
|
||||
# private API, exposed to support advanced OO systems that plug in on top
|
||||
# Private API, exposed to support advanced OO systems that plug in on top of
|
||||
# TclOO; not intended for general use and does not have any commitment to
|
||||
# long-term support.
|
||||
#
|
||||
|
||||
interface tclOOInt
|
||||
|
||||
+23
-16
@@ -12,21 +12,6 @@
|
||||
|
||||
#ifndef TCLOO_H_INCLUDED
|
||||
#define TCLOO_H_INCLUDED
|
||||
#include "tcl.h"
|
||||
|
||||
#ifndef TCLOOAPI
|
||||
# if defined(BUILD_tcl) || defined(BUILD_TclOO)
|
||||
# define TCLOOAPI MODULE_SCOPE
|
||||
# else
|
||||
# define TCLOOAPI extern
|
||||
# undef USE_TCLOO_STUBS
|
||||
# define USE_TCLOO_STUBS 1
|
||||
# endif
|
||||
#endif
|
||||
|
||||
extern const char *TclOOInitializeStubs(
|
||||
Tcl_Interp *, const char *version);
|
||||
#define Tcl_OOInitStubs(interp) TclOOInitializeStubs((interp), TCLOO_VERSION)
|
||||
|
||||
/*
|
||||
* Be careful when it comes to versioning; need to make sure that the
|
||||
@@ -39,9 +24,28 @@ extern const char *TclOOInitializeStubs(
|
||||
* win/tclooConfig.sh
|
||||
*/
|
||||
|
||||
#define TCLOO_VERSION "1.0"
|
||||
#define TCLOO_VERSION "1.0.1"
|
||||
#define TCLOO_PATCHLEVEL TCLOO_VERSION
|
||||
|
||||
#include "tcl.h"
|
||||
|
||||
/*
|
||||
* For C++ compilers, use extern "C"
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if (defined(USE_TCLOO_STUBS) || defined(USE_TCL_STUBS))
|
||||
extern const char *TclOOInitializeStubs(
|
||||
Tcl_Interp *, const char *version);
|
||||
#define Tcl_OOInitStubs(interp) \
|
||||
TclOOInitializeStubs((interp), TCLOO_VERSION)
|
||||
#else
|
||||
#define Tcl_OOInitStubs(interp) (TCLOO_PATCHLEVEL)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* These are opaque types.
|
||||
*/
|
||||
@@ -130,6 +134,9 @@ typedef struct {
|
||||
|
||||
#include "tclOODecls.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* This file contains implementations of the "simple" commands and
|
||||
* methods from the object-system core.
|
||||
*
|
||||
* Copyright (c) 2005-2012 by Donal K. Fellows
|
||||
* Copyright (c) 2005-2013 by Donal K. Fellows
|
||||
*
|
||||
* See the file "license.terms" for information on usage and redistribution of
|
||||
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
|
||||
+43
-29
@@ -5,6 +5,17 @@
|
||||
#ifndef _TCLOODECLS
|
||||
#define _TCLOODECLS
|
||||
|
||||
#undef TCL_STORAGE_CLASS
|
||||
#ifdef BUILD_tcl
|
||||
# define TCL_STORAGE_CLASS DLLEXPORT
|
||||
#else
|
||||
# ifdef USE_TCL_STUBS
|
||||
# define TCL_STORAGE_CLASS
|
||||
# else
|
||||
# define TCL_STORAGE_CLASS DLLIMPORT
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* !BEGIN!: Do not edit below this line. */
|
||||
|
||||
/*
|
||||
@@ -12,92 +23,92 @@
|
||||
*/
|
||||
|
||||
/* 0 */
|
||||
TCLOOAPI Tcl_Object Tcl_CopyObjectInstance(Tcl_Interp *interp,
|
||||
EXTERN Tcl_Object Tcl_CopyObjectInstance(Tcl_Interp *interp,
|
||||
Tcl_Object sourceObject,
|
||||
const char *targetName,
|
||||
const char *targetNamespaceName);
|
||||
/* 1 */
|
||||
TCLOOAPI Tcl_Object Tcl_GetClassAsObject(Tcl_Class clazz);
|
||||
EXTERN Tcl_Object Tcl_GetClassAsObject(Tcl_Class clazz);
|
||||
/* 2 */
|
||||
TCLOOAPI Tcl_Class Tcl_GetObjectAsClass(Tcl_Object object);
|
||||
EXTERN Tcl_Class Tcl_GetObjectAsClass(Tcl_Object object);
|
||||
/* 3 */
|
||||
TCLOOAPI Tcl_Command Tcl_GetObjectCommand(Tcl_Object object);
|
||||
EXTERN Tcl_Command Tcl_GetObjectCommand(Tcl_Object object);
|
||||
/* 4 */
|
||||
TCLOOAPI Tcl_Object Tcl_GetObjectFromObj(Tcl_Interp *interp,
|
||||
EXTERN Tcl_Object Tcl_GetObjectFromObj(Tcl_Interp *interp,
|
||||
Tcl_Obj *objPtr);
|
||||
/* 5 */
|
||||
TCLOOAPI Tcl_Namespace * Tcl_GetObjectNamespace(Tcl_Object object);
|
||||
EXTERN Tcl_Namespace * Tcl_GetObjectNamespace(Tcl_Object object);
|
||||
/* 6 */
|
||||
TCLOOAPI Tcl_Class Tcl_MethodDeclarerClass(Tcl_Method method);
|
||||
EXTERN Tcl_Class Tcl_MethodDeclarerClass(Tcl_Method method);
|
||||
/* 7 */
|
||||
TCLOOAPI Tcl_Object Tcl_MethodDeclarerObject(Tcl_Method method);
|
||||
EXTERN Tcl_Object Tcl_MethodDeclarerObject(Tcl_Method method);
|
||||
/* 8 */
|
||||
TCLOOAPI int Tcl_MethodIsPublic(Tcl_Method method);
|
||||
EXTERN int Tcl_MethodIsPublic(Tcl_Method method);
|
||||
/* 9 */
|
||||
TCLOOAPI int Tcl_MethodIsType(Tcl_Method method,
|
||||
EXTERN int Tcl_MethodIsType(Tcl_Method method,
|
||||
const Tcl_MethodType *typePtr,
|
||||
ClientData *clientDataPtr);
|
||||
/* 10 */
|
||||
TCLOOAPI Tcl_Obj * Tcl_MethodName(Tcl_Method method);
|
||||
EXTERN Tcl_Obj * Tcl_MethodName(Tcl_Method method);
|
||||
/* 11 */
|
||||
TCLOOAPI Tcl_Method Tcl_NewInstanceMethod(Tcl_Interp *interp,
|
||||
EXTERN Tcl_Method Tcl_NewInstanceMethod(Tcl_Interp *interp,
|
||||
Tcl_Object object, Tcl_Obj *nameObj,
|
||||
int isPublic, const Tcl_MethodType *typePtr,
|
||||
ClientData clientData);
|
||||
/* 12 */
|
||||
TCLOOAPI Tcl_Method Tcl_NewMethod(Tcl_Interp *interp, Tcl_Class cls,
|
||||
EXTERN Tcl_Method Tcl_NewMethod(Tcl_Interp *interp, Tcl_Class cls,
|
||||
Tcl_Obj *nameObj, int isPublic,
|
||||
const Tcl_MethodType *typePtr,
|
||||
ClientData clientData);
|
||||
/* 13 */
|
||||
TCLOOAPI Tcl_Object Tcl_NewObjectInstance(Tcl_Interp *interp,
|
||||
EXTERN Tcl_Object Tcl_NewObjectInstance(Tcl_Interp *interp,
|
||||
Tcl_Class cls, const char *nameStr,
|
||||
const char *nsNameStr, int objc,
|
||||
Tcl_Obj *const *objv, int skip);
|
||||
/* 14 */
|
||||
TCLOOAPI int Tcl_ObjectDeleted(Tcl_Object object);
|
||||
EXTERN int Tcl_ObjectDeleted(Tcl_Object object);
|
||||
/* 15 */
|
||||
TCLOOAPI int Tcl_ObjectContextIsFiltering(
|
||||
EXTERN int Tcl_ObjectContextIsFiltering(
|
||||
Tcl_ObjectContext context);
|
||||
/* 16 */
|
||||
TCLOOAPI Tcl_Method Tcl_ObjectContextMethod(Tcl_ObjectContext context);
|
||||
EXTERN Tcl_Method Tcl_ObjectContextMethod(Tcl_ObjectContext context);
|
||||
/* 17 */
|
||||
TCLOOAPI Tcl_Object Tcl_ObjectContextObject(Tcl_ObjectContext context);
|
||||
EXTERN Tcl_Object Tcl_ObjectContextObject(Tcl_ObjectContext context);
|
||||
/* 18 */
|
||||
TCLOOAPI int Tcl_ObjectContextSkippedArgs(
|
||||
EXTERN int Tcl_ObjectContextSkippedArgs(
|
||||
Tcl_ObjectContext context);
|
||||
/* 19 */
|
||||
TCLOOAPI ClientData Tcl_ClassGetMetadata(Tcl_Class clazz,
|
||||
EXTERN ClientData Tcl_ClassGetMetadata(Tcl_Class clazz,
|
||||
const Tcl_ObjectMetadataType *typePtr);
|
||||
/* 20 */
|
||||
TCLOOAPI void Tcl_ClassSetMetadata(Tcl_Class clazz,
|
||||
EXTERN void Tcl_ClassSetMetadata(Tcl_Class clazz,
|
||||
const Tcl_ObjectMetadataType *typePtr,
|
||||
ClientData metadata);
|
||||
/* 21 */
|
||||
TCLOOAPI ClientData Tcl_ObjectGetMetadata(Tcl_Object object,
|
||||
EXTERN ClientData Tcl_ObjectGetMetadata(Tcl_Object object,
|
||||
const Tcl_ObjectMetadataType *typePtr);
|
||||
/* 22 */
|
||||
TCLOOAPI void Tcl_ObjectSetMetadata(Tcl_Object object,
|
||||
EXTERN void Tcl_ObjectSetMetadata(Tcl_Object object,
|
||||
const Tcl_ObjectMetadataType *typePtr,
|
||||
ClientData metadata);
|
||||
/* 23 */
|
||||
TCLOOAPI int Tcl_ObjectContextInvokeNext(Tcl_Interp *interp,
|
||||
EXTERN int Tcl_ObjectContextInvokeNext(Tcl_Interp *interp,
|
||||
Tcl_ObjectContext context, int objc,
|
||||
Tcl_Obj *const *objv, int skip);
|
||||
/* 24 */
|
||||
TCLOOAPI Tcl_ObjectMapMethodNameProc * Tcl_ObjectGetMethodNameMapper(
|
||||
EXTERN Tcl_ObjectMapMethodNameProc * Tcl_ObjectGetMethodNameMapper(
|
||||
Tcl_Object object);
|
||||
/* 25 */
|
||||
TCLOOAPI void Tcl_ObjectSetMethodNameMapper(Tcl_Object object,
|
||||
EXTERN void Tcl_ObjectSetMethodNameMapper(Tcl_Object object,
|
||||
Tcl_ObjectMapMethodNameProc *mapMethodNameProc);
|
||||
/* 26 */
|
||||
TCLOOAPI void Tcl_ClassSetConstructor(Tcl_Interp *interp,
|
||||
EXTERN void Tcl_ClassSetConstructor(Tcl_Interp *interp,
|
||||
Tcl_Class clazz, Tcl_Method method);
|
||||
/* 27 */
|
||||
TCLOOAPI void Tcl_ClassSetDestructor(Tcl_Interp *interp,
|
||||
EXTERN void Tcl_ClassSetDestructor(Tcl_Interp *interp,
|
||||
Tcl_Class clazz, Tcl_Method method);
|
||||
/* 28 */
|
||||
TCLOOAPI Tcl_Obj * Tcl_GetObjectName(Tcl_Interp *interp,
|
||||
EXTERN Tcl_Obj * Tcl_GetObjectName(Tcl_Interp *interp,
|
||||
Tcl_Object object);
|
||||
|
||||
typedef struct {
|
||||
@@ -215,4 +226,7 @@ extern const TclOOStubs *tclOOStubsPtr;
|
||||
#endif /* defined(USE_TCLOO_STUBS) */
|
||||
|
||||
/* !END!: Do not edit above this line. */
|
||||
|
||||
#undef TCL_STORAGE_CLASS
|
||||
#define TCL_STORAGE_CLASS DLLIMPORT
|
||||
#endif /* _TCLOODECLS */
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* This file contains the implementation of the ::oo::define command,
|
||||
* part of the object-system core (NB: not Tcl_Obj, but ::oo).
|
||||
*
|
||||
* Copyright (c) 2006-2012 by Donal K. Fellows
|
||||
* Copyright (c) 2006-2013 by Donal K. Fellows
|
||||
*
|
||||
* See the file "license.terms" for information on usage and redistribution of
|
||||
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
|
||||
+30
-16
@@ -5,6 +5,17 @@
|
||||
#ifndef _TCLOOINTDECLS
|
||||
#define _TCLOOINTDECLS
|
||||
|
||||
#undef TCL_STORAGE_CLASS
|
||||
#ifdef BUILD_tcl
|
||||
# define TCL_STORAGE_CLASS DLLEXPORT
|
||||
#else
|
||||
# ifdef USE_TCL_STUBS
|
||||
# define TCL_STORAGE_CLASS
|
||||
# else
|
||||
# define TCL_STORAGE_CLASS DLLIMPORT
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* !BEGIN!: Do not edit below this line. */
|
||||
|
||||
/*
|
||||
@@ -12,46 +23,46 @@
|
||||
*/
|
||||
|
||||
/* 0 */
|
||||
TCLOOAPI Tcl_Object TclOOGetDefineCmdContext(Tcl_Interp *interp);
|
||||
EXTERN Tcl_Object TclOOGetDefineCmdContext(Tcl_Interp *interp);
|
||||
/* 1 */
|
||||
TCLOOAPI Tcl_Method TclOOMakeProcInstanceMethod(Tcl_Interp *interp,
|
||||
EXTERN Tcl_Method TclOOMakeProcInstanceMethod(Tcl_Interp *interp,
|
||||
Object *oPtr, int flags, Tcl_Obj *nameObj,
|
||||
Tcl_Obj *argsObj, Tcl_Obj *bodyObj,
|
||||
const Tcl_MethodType *typePtr,
|
||||
ClientData clientData, Proc **procPtrPtr);
|
||||
/* 2 */
|
||||
TCLOOAPI Tcl_Method TclOOMakeProcMethod(Tcl_Interp *interp,
|
||||
EXTERN Tcl_Method TclOOMakeProcMethod(Tcl_Interp *interp,
|
||||
Class *clsPtr, int flags, Tcl_Obj *nameObj,
|
||||
const char *namePtr, Tcl_Obj *argsObj,
|
||||
Tcl_Obj *bodyObj,
|
||||
const Tcl_MethodType *typePtr,
|
||||
ClientData clientData, Proc **procPtrPtr);
|
||||
/* 3 */
|
||||
TCLOOAPI Method * TclOONewProcInstanceMethod(Tcl_Interp *interp,
|
||||
EXTERN Method * TclOONewProcInstanceMethod(Tcl_Interp *interp,
|
||||
Object *oPtr, int flags, Tcl_Obj *nameObj,
|
||||
Tcl_Obj *argsObj, Tcl_Obj *bodyObj,
|
||||
ProcedureMethod **pmPtrPtr);
|
||||
/* 4 */
|
||||
TCLOOAPI Method * TclOONewProcMethod(Tcl_Interp *interp, Class *clsPtr,
|
||||
EXTERN Method * TclOONewProcMethod(Tcl_Interp *interp, Class *clsPtr,
|
||||
int flags, Tcl_Obj *nameObj,
|
||||
Tcl_Obj *argsObj, Tcl_Obj *bodyObj,
|
||||
ProcedureMethod **pmPtrPtr);
|
||||
/* 5 */
|
||||
TCLOOAPI int TclOOObjectCmdCore(Object *oPtr, Tcl_Interp *interp,
|
||||
EXTERN int TclOOObjectCmdCore(Object *oPtr, Tcl_Interp *interp,
|
||||
int objc, Tcl_Obj *const *objv,
|
||||
int publicOnly, Class *startCls);
|
||||
/* 6 */
|
||||
TCLOOAPI int TclOOIsReachable(Class *targetPtr, Class *startPtr);
|
||||
EXTERN int TclOOIsReachable(Class *targetPtr, Class *startPtr);
|
||||
/* 7 */
|
||||
TCLOOAPI Method * TclOONewForwardMethod(Tcl_Interp *interp,
|
||||
EXTERN Method * TclOONewForwardMethod(Tcl_Interp *interp,
|
||||
Class *clsPtr, int isPublic,
|
||||
Tcl_Obj *nameObj, Tcl_Obj *prefixObj);
|
||||
/* 8 */
|
||||
TCLOOAPI Method * TclOONewForwardInstanceMethod(Tcl_Interp *interp,
|
||||
EXTERN Method * TclOONewForwardInstanceMethod(Tcl_Interp *interp,
|
||||
Object *oPtr, int isPublic, Tcl_Obj *nameObj,
|
||||
Tcl_Obj *prefixObj);
|
||||
/* 9 */
|
||||
TCLOOAPI Tcl_Method TclOONewProcInstanceMethodEx(Tcl_Interp *interp,
|
||||
EXTERN Tcl_Method TclOONewProcInstanceMethodEx(Tcl_Interp *interp,
|
||||
Tcl_Object oPtr,
|
||||
TclOO_PreCallProc *preCallPtr,
|
||||
TclOO_PostCallProc *postCallPtr,
|
||||
@@ -60,7 +71,7 @@ TCLOOAPI Tcl_Method TclOONewProcInstanceMethodEx(Tcl_Interp *interp,
|
||||
Tcl_Obj *argsObj, Tcl_Obj *bodyObj,
|
||||
int flags, void **internalTokenPtr);
|
||||
/* 10 */
|
||||
TCLOOAPI Tcl_Method TclOONewProcMethodEx(Tcl_Interp *interp,
|
||||
EXTERN Tcl_Method TclOONewProcMethodEx(Tcl_Interp *interp,
|
||||
Tcl_Class clsPtr,
|
||||
TclOO_PreCallProc *preCallPtr,
|
||||
TclOO_PostCallProc *postCallPtr,
|
||||
@@ -69,22 +80,22 @@ TCLOOAPI Tcl_Method TclOONewProcMethodEx(Tcl_Interp *interp,
|
||||
Tcl_Obj *argsObj, Tcl_Obj *bodyObj,
|
||||
int flags, void **internalTokenPtr);
|
||||
/* 11 */
|
||||
TCLOOAPI int TclOOInvokeObject(Tcl_Interp *interp,
|
||||
EXTERN int TclOOInvokeObject(Tcl_Interp *interp,
|
||||
Tcl_Object object, Tcl_Class startCls,
|
||||
int publicPrivate, int objc,
|
||||
Tcl_Obj *const *objv);
|
||||
/* 12 */
|
||||
TCLOOAPI void TclOOObjectSetFilters(Object *oPtr, int numFilters,
|
||||
EXTERN void TclOOObjectSetFilters(Object *oPtr, int numFilters,
|
||||
Tcl_Obj *const *filters);
|
||||
/* 13 */
|
||||
TCLOOAPI void TclOOClassSetFilters(Tcl_Interp *interp,
|
||||
EXTERN void TclOOClassSetFilters(Tcl_Interp *interp,
|
||||
Class *classPtr, int numFilters,
|
||||
Tcl_Obj *const *filters);
|
||||
/* 14 */
|
||||
TCLOOAPI void TclOOObjectSetMixins(Object *oPtr, int numMixins,
|
||||
EXTERN void TclOOObjectSetMixins(Object *oPtr, int numMixins,
|
||||
Class *const *mixins);
|
||||
/* 15 */
|
||||
TCLOOAPI void TclOOClassSetMixins(Tcl_Interp *interp,
|
||||
EXTERN void TclOOClassSetMixins(Tcl_Interp *interp,
|
||||
Class *classPtr, int numMixins,
|
||||
Class *const *mixins);
|
||||
|
||||
@@ -160,4 +171,7 @@ extern const TclOOIntStubs *tclOOIntStubsPtr;
|
||||
#endif /* defined(USE_TCLOO_STUBS) */
|
||||
|
||||
/* !END!: Do not edit above this line. */
|
||||
|
||||
#undef TCL_STORAGE_CLASS
|
||||
#define TCL_STORAGE_CLASS DLLIMPORT
|
||||
#endif /* _TCLOOINTDECLS */
|
||||
|
||||
+49
-3
@@ -1290,11 +1290,57 @@ CloneProcedureMethod(
|
||||
ClientData *newClientData)
|
||||
{
|
||||
ProcedureMethod *pmPtr = clientData;
|
||||
ProcedureMethod *pm2Ptr = ckalloc(sizeof(ProcedureMethod));
|
||||
ProcedureMethod *pm2Ptr;
|
||||
Tcl_Obj *bodyObj, *argsObj;
|
||||
CompiledLocal *localPtr;
|
||||
|
||||
/*
|
||||
* Copy the argument list.
|
||||
*/
|
||||
|
||||
argsObj = Tcl_NewObj();
|
||||
for (localPtr=pmPtr->procPtr->firstLocalPtr; localPtr!=NULL;
|
||||
localPtr=localPtr->nextPtr) {
|
||||
if (TclIsVarArgument(localPtr)) {
|
||||
Tcl_Obj *argObj = Tcl_NewObj();
|
||||
|
||||
Tcl_ListObjAppendElement(NULL, argObj,
|
||||
Tcl_NewStringObj(localPtr->name, -1));
|
||||
if (localPtr->defValuePtr != NULL) {
|
||||
Tcl_ListObjAppendElement(NULL, argObj, localPtr->defValuePtr);
|
||||
}
|
||||
Tcl_ListObjAppendElement(NULL, argsObj, argObj);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Must strip the internal representation in order to ensure that any
|
||||
* bound references to instance variables are removed. [Bug 3609693]
|
||||
*/
|
||||
|
||||
bodyObj = Tcl_DuplicateObj(pmPtr->procPtr->bodyPtr);
|
||||
TclFreeIntRep(bodyObj);
|
||||
|
||||
/*
|
||||
* Create the actual copy of the method record, manufacturing a new proc
|
||||
* record.
|
||||
*/
|
||||
|
||||
pm2Ptr = ckalloc(sizeof(ProcedureMethod));
|
||||
memcpy(pm2Ptr, pmPtr, sizeof(ProcedureMethod));
|
||||
pm2Ptr->refCount = 1;
|
||||
pm2Ptr->procPtr->refCount++;
|
||||
Tcl_IncrRefCount(argsObj);
|
||||
Tcl_IncrRefCount(bodyObj);
|
||||
if (TclCreateProc(interp, NULL, "", argsObj, bodyObj,
|
||||
&pm2Ptr->procPtr) != TCL_OK) {
|
||||
Tcl_DecrRefCount(argsObj);
|
||||
Tcl_DecrRefCount(bodyObj);
|
||||
ckfree(pm2Ptr);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
Tcl_DecrRefCount(argsObj);
|
||||
Tcl_DecrRefCount(bodyObj);
|
||||
|
||||
if (pmPtr->cloneClientdataProc) {
|
||||
pm2Ptr->clientData = pmPtr->cloneClientdataProc(pmPtr->clientData);
|
||||
}
|
||||
@@ -1421,7 +1467,7 @@ InvokeForwardMethod(
|
||||
Tcl_NRAddCallback(interp, FinalizeForwardCall, argObjs, NULL, NULL, NULL);
|
||||
((Interp *)interp)->lookupNsPtr
|
||||
= (Namespace *) contextPtr->oPtr->namespacePtr;
|
||||
return TclNREvalObjv(interp, len, argObjs, TCL_EVAL_INVOKE, NULL);
|
||||
return TclNREvalObjv(interp, len, argObjs, TCL_EVAL_NOERR, NULL);
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
+17
-1
@@ -344,21 +344,28 @@ AdvanceJumps(
|
||||
CompileEnv *envPtr)
|
||||
{
|
||||
unsigned char *currentInstPtr;
|
||||
Tcl_HashTable jumps;
|
||||
|
||||
for (currentInstPtr = envPtr->codeStart ;
|
||||
currentInstPtr < envPtr->codeNext-1 ;
|
||||
currentInstPtr += AddrLength(currentInstPtr)) {
|
||||
int offset, delta;
|
||||
int offset, delta, isNew;
|
||||
|
||||
switch (*currentInstPtr) {
|
||||
case INST_JUMP1:
|
||||
case INST_JUMP_TRUE1:
|
||||
case INST_JUMP_FALSE1:
|
||||
offset = TclGetInt1AtPtr(currentInstPtr + 1);
|
||||
Tcl_InitHashTable(&jumps, TCL_ONE_WORD_KEYS);
|
||||
for (delta=0 ; offset+delta != 0 ;) {
|
||||
if (offset + delta < -128 || offset + delta > 127) {
|
||||
break;
|
||||
}
|
||||
Tcl_CreateHashEntry(&jumps, INT2PTR(offset), &isNew);
|
||||
if (!isNew) {
|
||||
offset = TclGetInt1AtPtr(currentInstPtr + 1);
|
||||
break;
|
||||
}
|
||||
offset += delta;
|
||||
switch (*(currentInstPtr + offset)) {
|
||||
case INST_NOP:
|
||||
@@ -373,13 +380,21 @@ AdvanceJumps(
|
||||
}
|
||||
break;
|
||||
}
|
||||
Tcl_DeleteHashTable(&jumps);
|
||||
TclStoreInt1AtPtr(offset, currentInstPtr + 1);
|
||||
continue;
|
||||
|
||||
case INST_JUMP4:
|
||||
case INST_JUMP_TRUE4:
|
||||
case INST_JUMP_FALSE4:
|
||||
Tcl_InitHashTable(&jumps, TCL_ONE_WORD_KEYS);
|
||||
Tcl_CreateHashEntry(&jumps, INT2PTR(0), &isNew);
|
||||
for (offset = TclGetInt4AtPtr(currentInstPtr + 1); offset!=0 ;) {
|
||||
Tcl_CreateHashEntry(&jumps, INT2PTR(offset), &isNew);
|
||||
if (!isNew) {
|
||||
offset = TclGetInt4AtPtr(currentInstPtr + 1);
|
||||
break;
|
||||
}
|
||||
switch (*(currentInstPtr + offset)) {
|
||||
case INST_NOP:
|
||||
offset += InstLength(INST_NOP);
|
||||
@@ -393,6 +408,7 @@ AdvanceJumps(
|
||||
}
|
||||
break;
|
||||
}
|
||||
Tcl_DeleteHashTable(&jumps);
|
||||
TclStoreInt4AtPtr(offset, currentInstPtr + 1);
|
||||
continue;
|
||||
}
|
||||
|
||||
+1
-1
@@ -13,9 +13,9 @@
|
||||
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include "tclInt.h"
|
||||
#include "tclParse.h"
|
||||
#include <assert.h>
|
||||
|
||||
/*
|
||||
* The following table provides parsing information about each possible 8-bit
|
||||
|
||||
+20
-2
@@ -4408,8 +4408,26 @@ TestseterrorcodeCmd(
|
||||
Tcl_SetResult(interp, "too many args", TCL_STATIC);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
Tcl_SetErrorCode(interp, argv[1], argv[2], argv[3], argv[4],
|
||||
argv[5], NULL);
|
||||
switch (argc) {
|
||||
case 1:
|
||||
Tcl_SetErrorCode(interp, "NONE", NULL);
|
||||
break;
|
||||
case 2:
|
||||
Tcl_SetErrorCode(interp, argv[1], NULL);
|
||||
break;
|
||||
case 3:
|
||||
Tcl_SetErrorCode(interp, argv[1], argv[2], NULL);
|
||||
break;
|
||||
case 4:
|
||||
Tcl_SetErrorCode(interp, argv[1], argv[2], argv[3], NULL);
|
||||
break;
|
||||
case 5:
|
||||
Tcl_SetErrorCode(interp, argv[1], argv[2], argv[3], argv[4], NULL);
|
||||
break;
|
||||
case 6:
|
||||
Tcl_SetErrorCode(interp, argv[1], argv[2], argv[3], argv[4],
|
||||
argv[5], NULL);
|
||||
}
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -3580,10 +3580,9 @@ UpdateStringOfEndOffset(
|
||||
register Tcl_Obj *objPtr)
|
||||
{
|
||||
char buffer[TCL_INTEGER_SPACE + 5];
|
||||
register int len;
|
||||
register int len = 3;
|
||||
|
||||
memcpy(buffer, "end", 4);
|
||||
len = sizeof("end") - 1;
|
||||
if (objPtr->internalRep.longValue != 0) {
|
||||
buffer[len++] = '-';
|
||||
len += TclFormatInt(buffer+len, -(objPtr->internalRep.longValue));
|
||||
|
||||
@@ -3847,6 +3847,53 @@ ArrayNamesCmd(
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclFindArrayPtrElements --
|
||||
*
|
||||
* Fill out a hash table (which *must* use Tcl_Obj* keys) with an entry
|
||||
* for each existing element of the given array. The provided hash table
|
||||
* is assumed to be initially empty.
|
||||
*
|
||||
* Result:
|
||||
* none
|
||||
*
|
||||
* Side effects:
|
||||
* The keys of the array gain an extra reference. The supplied hash table
|
||||
* has elements added to it.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
TclFindArrayPtrElements(
|
||||
Var *arrayPtr,
|
||||
Tcl_HashTable *tablePtr)
|
||||
{
|
||||
Var *varPtr;
|
||||
Tcl_HashSearch search;
|
||||
|
||||
if ((arrayPtr == NULL) || !TclIsVarArray(arrayPtr)
|
||||
|| TclIsVarUndefined(arrayPtr)) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (varPtr=VarHashFirstVar(arrayPtr->value.tablePtr, &search);
|
||||
varPtr!=NULL ; varPtr=VarHashNextVar(&search)) {
|
||||
Tcl_HashEntry *hPtr;
|
||||
Tcl_Obj *nameObj;
|
||||
int dummy;
|
||||
|
||||
if (TclIsVarUndefined(varPtr)) {
|
||||
continue;
|
||||
}
|
||||
nameObj = VarHashGetKey(varPtr);
|
||||
hPtr = Tcl_CreateHashEntry(tablePtr, (char *) nameObj, &dummy);
|
||||
Tcl_SetHashValue(hPtr, nameObj);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
|
||||
+43
-26
@@ -513,6 +513,32 @@ proc auto_mkindex_parser::fullname {name} {
|
||||
return [string map [list \0 \$] $name]
|
||||
}
|
||||
|
||||
# auto_mkindex_parser::indexEntry --
|
||||
#
|
||||
# Used by commands like "proc" within the auto_mkindex parser to add a
|
||||
# correctly-quoted entry to the index. This is shared code so it is done
|
||||
# *right*, in one place.
|
||||
#
|
||||
# Arguments:
|
||||
# name - Name that is being added to index.
|
||||
|
||||
proc auto_mkindex_parser::indexEntry {name} {
|
||||
variable index
|
||||
variable scriptFile
|
||||
|
||||
# We convert all metacharacters to their backslashed form, and pre-split
|
||||
# the file name that we know about (which will be a proper list, and so
|
||||
# correctly quoted).
|
||||
|
||||
set name [string range [list \}[fullname $name]] 2 end]
|
||||
set filenameParts [file split $scriptFile]
|
||||
|
||||
append index [format \
|
||||
{set auto_index(%s) [list source [file join $dir %s]]%s} \
|
||||
$name $filenameParts \n]
|
||||
return
|
||||
}
|
||||
|
||||
if {[llength $::auto_mkindex_parser::initCommands]} {
|
||||
return
|
||||
}
|
||||
@@ -524,15 +550,7 @@ if {[llength $::auto_mkindex_parser::initCommands]} {
|
||||
# Adds an entry to the auto index list for the given procedure name.
|
||||
|
||||
auto_mkindex_parser::command proc {name args} {
|
||||
variable index
|
||||
variable scriptFile
|
||||
# Do some fancy reformatting on the "source" call to handle platform
|
||||
# differences with respect to pathnames. Use format just so that the
|
||||
# command is a little easier to read (otherwise it'd be full of
|
||||
# backslashed dollar signs, etc.
|
||||
append index [list set auto_index([fullname $name])] \
|
||||
[format { [list source [file join $dir %s]]} \
|
||||
[file split $scriptFile]] "\n"
|
||||
indexEntry $name
|
||||
}
|
||||
|
||||
# Conditionally add support for Tcl byte code files. There are some tricky
|
||||
@@ -559,14 +577,7 @@ auto_mkindex_parser::hook {
|
||||
# procedure name.
|
||||
|
||||
auto_mkindex_parser::commandInit tbcload::bcproc {name args} {
|
||||
variable index
|
||||
variable scriptFile
|
||||
# Do some nice reformatting of the "source" call, to get around
|
||||
# path differences on different platforms. We use the format
|
||||
# command just so that the code is a little easier to read.
|
||||
append index [list set auto_index([fullname $name])] \
|
||||
[format { [list source [file join $dir %s]]} \
|
||||
[file split $scriptFile]] "\n"
|
||||
indexEntry $name
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -610,6 +621,13 @@ auto_mkindex_parser::command namespace {op args} {
|
||||
variable contextStack
|
||||
if {[lindex $args 0] eq "create"} {
|
||||
set name ::[join [lreverse $contextStack] ::]
|
||||
catch {
|
||||
set name [dict get [lrange $args 1 end] -command]
|
||||
if {![string match ::* $name]} {
|
||||
set name ::[join [lreverse $contextStack] ::]$name
|
||||
}
|
||||
regsub -all ::+ $name :: name
|
||||
}
|
||||
# create artifical proc to force an entry in the tclIndex
|
||||
$parser eval [list ::proc $name {} {}]
|
||||
}
|
||||
@@ -619,15 +637,14 @@ auto_mkindex_parser::command namespace {op args} {
|
||||
|
||||
# AUTO MKINDEX: oo::class create name ?definition?
|
||||
# Adds an entry to the auto index list for the given class name.
|
||||
foreach cmd {oo::class class} {
|
||||
auto_mkindex_parser::command $cmd {ecmd name {body ""}} {
|
||||
if {$cmd eq "create"} {
|
||||
variable index
|
||||
variable scriptFile
|
||||
append index [format "set %s \[list source \[%s]]\n" \
|
||||
[list auto_index([fullname $name])] \
|
||||
[list file join $dir {*}[file split $scriptFile]]]
|
||||
}
|
||||
auto_mkindex_parser::command oo::class {op name {body ""}} {
|
||||
if {$op eq "create"} {
|
||||
indexEntry $name
|
||||
}
|
||||
}
|
||||
auto_mkindex_parser::command class {op name {body ""}} {
|
||||
if {$op eq "create"} {
|
||||
indexEntry $name
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+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.0
|
||||
package require -exact Tcl 8.6.1
|
||||
|
||||
# Compute the auto path to use in this interpreter.
|
||||
# The values on the path come from several locations:
|
||||
|
||||
@@ -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.5 [list source [file join $dir tcltest.tcl]]
|
||||
package ifneeded tcltest 2.3.6 [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.5
|
||||
variable Version 2.3.6
|
||||
|
||||
# Compatibility support for dumb variables defined in tcltest 1
|
||||
# Do not use these. Call [package provide Tcl] and [info patchlevel]
|
||||
|
||||
@@ -238,6 +238,15 @@ proc ::tcl::tm::UnknownHandler {original name args} {
|
||||
continue
|
||||
}
|
||||
|
||||
if {[package ifneeded $pkgname $pkgversion] ne {}} {
|
||||
# There's already a provide script registered for
|
||||
# this version of this package. Since all units of
|
||||
# code claiming to be the same version of the same
|
||||
# package ought to be identical, just stick with
|
||||
# the one we already have.
|
||||
continue
|
||||
}
|
||||
|
||||
# We have found a candidate, generate a "provide script"
|
||||
# for it, and remember it. Note that we are using ::list
|
||||
# to do this; locally [list] means something else without
|
||||
|
||||
+114
-170
@@ -36,189 +36,133 @@ set TZData(:Africa/Casablanca) {
|
||||
{1367114400 3600 1 WEST}
|
||||
{1373162400 0 0 WET}
|
||||
{1376100000 3600 1 WEST}
|
||||
{1380420000 0 0 WET}
|
||||
{1398564000 3600 1 WEST}
|
||||
{1382839200 0 0 WET}
|
||||
{1396144800 3600 1 WEST}
|
||||
{1404007200 0 0 WET}
|
||||
{1406599200 3600 1 WEST}
|
||||
{1411869600 0 0 WET}
|
||||
{1430013600 3600 1 WEST}
|
||||
{1414288800 0 0 WET}
|
||||
{1427594400 3600 1 WEST}
|
||||
{1434592800 0 0 WET}
|
||||
{1437184800 3600 1 WEST}
|
||||
{1443319200 0 0 WET}
|
||||
{1461463200 3600 1 WEST}
|
||||
{1445738400 0 0 WET}
|
||||
{1459044000 3600 1 WEST}
|
||||
{1465264800 0 0 WET}
|
||||
{1467856800 3600 1 WEST}
|
||||
{1474768800 0 0 WET}
|
||||
{1493517600 3600 1 WEST}
|
||||
{1477792800 0 0 WET}
|
||||
{1490493600 3600 1 WEST}
|
||||
{1495850400 0 0 WET}
|
||||
{1498442400 3600 1 WEST}
|
||||
{1506218400 0 0 WET}
|
||||
{1524967200 3600 1 WEST}
|
||||
{1509242400 0 0 WET}
|
||||
{1521943200 3600 1 WEST}
|
||||
{1526436000 0 0 WET}
|
||||
{1529028000 3600 1 WEST}
|
||||
{1538272800 0 0 WET}
|
||||
{1556416800 3600 1 WEST}
|
||||
{1540692000 0 0 WET}
|
||||
{1553997600 3600 1 WEST}
|
||||
{1557108000 0 0 WET}
|
||||
{1559700000 3600 1 WEST}
|
||||
{1569722400 0 0 WET}
|
||||
{1572141600 0 0 WET}
|
||||
{1585447200 3600 1 WEST}
|
||||
{1587693600 0 0 WET}
|
||||
{1590285600 3600 1 WEST}
|
||||
{1601172000 0 0 WET}
|
||||
{1603591200 0 0 WET}
|
||||
{1616896800 3600 1 WEST}
|
||||
{1618279200 0 0 WET}
|
||||
{1620871200 3600 1 WEST}
|
||||
{1632621600 0 0 WET}
|
||||
{1635645600 0 0 WET}
|
||||
{1648346400 3600 1 WEST}
|
||||
{1648951200 0 0 WET}
|
||||
{1651543200 3600 1 WEST}
|
||||
{1664071200 0 0 WET}
|
||||
{1682820000 3600 1 WEST}
|
||||
{1695520800 0 0 WET}
|
||||
{1714269600 3600 1 WEST}
|
||||
{1727575200 0 0 WET}
|
||||
{1745719200 3600 1 WEST}
|
||||
{1759024800 0 0 WET}
|
||||
{1777168800 3600 1 WEST}
|
||||
{1790474400 0 0 WET}
|
||||
{1808618400 3600 1 WEST}
|
||||
{1821924000 0 0 WET}
|
||||
{1840672800 3600 1 WEST}
|
||||
{1853373600 0 0 WET}
|
||||
{1872122400 3600 1 WEST}
|
||||
{1885428000 0 0 WET}
|
||||
{1903572000 3600 1 WEST}
|
||||
{1916877600 0 0 WET}
|
||||
{1935021600 3600 1 WEST}
|
||||
{1948327200 0 0 WET}
|
||||
{1966471200 3600 1 WEST}
|
||||
{1979776800 0 0 WET}
|
||||
{1997920800 3600 1 WEST}
|
||||
{2011226400 0 0 WET}
|
||||
{2029975200 3600 1 WEST}
|
||||
{2042676000 0 0 WET}
|
||||
{2061424800 3600 1 WEST}
|
||||
{2074730400 0 0 WET}
|
||||
{2092874400 3600 1 WEST}
|
||||
{2106180000 0 0 WET}
|
||||
{2124324000 3600 1 WEST}
|
||||
{2137629600 0 0 WET}
|
||||
{2155773600 3600 1 WEST}
|
||||
{2169079200 0 0 WET}
|
||||
{2187223200 3600 1 WEST}
|
||||
{2200528800 0 0 WET}
|
||||
{2219277600 3600 1 WEST}
|
||||
{2232583200 0 0 WET}
|
||||
{2250727200 3600 1 WEST}
|
||||
{2264032800 0 0 WET}
|
||||
{2282176800 3600 1 WEST}
|
||||
{2295482400 0 0 WET}
|
||||
{2313626400 3600 1 WEST}
|
||||
{2326932000 0 0 WET}
|
||||
{2345076000 3600 1 WEST}
|
||||
{2358381600 0 0 WET}
|
||||
{2377130400 3600 1 WEST}
|
||||
{2389831200 0 0 WET}
|
||||
{2408580000 3600 1 WEST}
|
||||
{2421885600 0 0 WET}
|
||||
{2440029600 3600 1 WEST}
|
||||
{2453335200 0 0 WET}
|
||||
{2471479200 3600 1 WEST}
|
||||
{2484784800 0 0 WET}
|
||||
{2502928800 3600 1 WEST}
|
||||
{2516234400 0 0 WET}
|
||||
{2534378400 3600 1 WEST}
|
||||
{2547684000 0 0 WET}
|
||||
{2566432800 3600 1 WEST}
|
||||
{2579133600 0 0 WET}
|
||||
{2597882400 3600 1 WEST}
|
||||
{2611188000 0 0 WET}
|
||||
{2629332000 3600 1 WEST}
|
||||
{2642637600 0 0 WET}
|
||||
{2660781600 3600 1 WEST}
|
||||
{2674087200 0 0 WET}
|
||||
{2692231200 3600 1 WEST}
|
||||
{2705536800 0 0 WET}
|
||||
{2724285600 3600 1 WEST}
|
||||
{2736986400 0 0 WET}
|
||||
{2755735200 3600 1 WEST}
|
||||
{2769040800 0 0 WET}
|
||||
{2787184800 3600 1 WEST}
|
||||
{2800490400 0 0 WET}
|
||||
{2818634400 3600 1 WEST}
|
||||
{2831940000 0 0 WET}
|
||||
{2850084000 3600 1 WEST}
|
||||
{2863389600 0 0 WET}
|
||||
{2881533600 3600 1 WEST}
|
||||
{2894839200 0 0 WET}
|
||||
{2913588000 3600 1 WEST}
|
||||
{2926288800 0 0 WET}
|
||||
{2945037600 3600 1 WEST}
|
||||
{2958343200 0 0 WET}
|
||||
{2976487200 3600 1 WEST}
|
||||
{2989792800 0 0 WET}
|
||||
{3007936800 3600 1 WEST}
|
||||
{3021242400 0 0 WET}
|
||||
{3039386400 3600 1 WEST}
|
||||
{3052692000 0 0 WET}
|
||||
{3070836000 3600 1 WEST}
|
||||
{3084141600 0 0 WET}
|
||||
{3102890400 3600 1 WEST}
|
||||
{3116196000 0 0 WET}
|
||||
{3134340000 3600 1 WEST}
|
||||
{3147645600 0 0 WET}
|
||||
{3165789600 3600 1 WEST}
|
||||
{3179095200 0 0 WET}
|
||||
{3197239200 3600 1 WEST}
|
||||
{3210544800 0 0 WET}
|
||||
{3228688800 3600 1 WEST}
|
||||
{3241994400 0 0 WET}
|
||||
{3260743200 3600 1 WEST}
|
||||
{3273444000 0 0 WET}
|
||||
{3292192800 3600 1 WEST}
|
||||
{3305498400 0 0 WET}
|
||||
{3323642400 3600 1 WEST}
|
||||
{3336948000 0 0 WET}
|
||||
{3355092000 3600 1 WEST}
|
||||
{3368397600 0 0 WET}
|
||||
{3386541600 3600 1 WEST}
|
||||
{3399847200 0 0 WET}
|
||||
{3417991200 3600 1 WEST}
|
||||
{3431296800 0 0 WET}
|
||||
{3450045600 3600 1 WEST}
|
||||
{3462746400 0 0 WET}
|
||||
{3481495200 3600 1 WEST}
|
||||
{3494800800 0 0 WET}
|
||||
{3512944800 3600 1 WEST}
|
||||
{3526250400 0 0 WET}
|
||||
{3544394400 3600 1 WEST}
|
||||
{3557700000 0 0 WET}
|
||||
{3575844000 3600 1 WEST}
|
||||
{3589149600 0 0 WET}
|
||||
{3607898400 3600 1 WEST}
|
||||
{3620599200 0 0 WET}
|
||||
{3639348000 3600 1 WEST}
|
||||
{3652653600 0 0 WET}
|
||||
{3670797600 3600 1 WEST}
|
||||
{3684103200 0 0 WET}
|
||||
{3702247200 3600 1 WEST}
|
||||
{3715552800 0 0 WET}
|
||||
{3733696800 3600 1 WEST}
|
||||
{3747002400 0 0 WET}
|
||||
{3765146400 3600 1 WEST}
|
||||
{3778452000 0 0 WET}
|
||||
{3797200800 3600 1 WEST}
|
||||
{3809901600 0 0 WET}
|
||||
{3828650400 3600 1 WEST}
|
||||
{3841956000 0 0 WET}
|
||||
{3860100000 3600 1 WEST}
|
||||
{3873405600 0 0 WET}
|
||||
{3891549600 3600 1 WEST}
|
||||
{3904855200 0 0 WET}
|
||||
{3922999200 3600 1 WEST}
|
||||
{3936304800 0 0 WET}
|
||||
{3954448800 3600 1 WEST}
|
||||
{3967754400 0 0 WET}
|
||||
{3986503200 3600 1 WEST}
|
||||
{3999808800 0 0 WET}
|
||||
{4017952800 3600 1 WEST}
|
||||
{4031258400 0 0 WET}
|
||||
{4049402400 3600 1 WEST}
|
||||
{4062708000 0 0 WET}
|
||||
{4080852000 3600 1 WEST}
|
||||
{4094157600 0 0 WET}
|
||||
{1667095200 0 0 WET}
|
||||
{1682128800 3600 1 WEST}
|
||||
{1698544800 0 0 WET}
|
||||
{1712714400 3600 1 WEST}
|
||||
{1729994400 0 0 WET}
|
||||
{1743386400 3600 1 WEST}
|
||||
{1761444000 0 0 WET}
|
||||
{1774749600 3600 1 WEST}
|
||||
{1792893600 0 0 WET}
|
||||
{1806199200 3600 1 WEST}
|
||||
{1824948000 0 0 WET}
|
||||
{1837648800 3600 1 WEST}
|
||||
{1856397600 0 0 WET}
|
||||
{1869098400 3600 1 WEST}
|
||||
{1887847200 0 0 WET}
|
||||
{1901152800 3600 1 WEST}
|
||||
{1919296800 0 0 WET}
|
||||
{1932602400 3600 1 WEST}
|
||||
{1950746400 0 0 WET}
|
||||
{1964052000 3600 1 WEST}
|
||||
{1982800800 0 0 WET}
|
||||
{1995501600 3600 1 WEST}
|
||||
{2014250400 0 0 WET}
|
||||
{2026951200 3600 1 WEST}
|
||||
{2045700000 0 0 WET}
|
||||
{2058400800 3600 1 WEST}
|
||||
{2077149600 0 0 WET}
|
||||
{2090455200 3600 1 WEST}
|
||||
{2108167200 0 0 WET}
|
||||
{2121904800 3600 1 WEST}
|
||||
{2138839200 0 0 WET}
|
||||
{2153354400 3600 1 WEST}
|
||||
{2184800400 3600 1 WEST}
|
||||
{2216250000 3600 1 WEST}
|
||||
{2248304400 3600 1 WEST}
|
||||
{2279754000 3600 1 WEST}
|
||||
{2311203600 3600 1 WEST}
|
||||
{2342653200 3600 1 WEST}
|
||||
{2374102800 3600 1 WEST}
|
||||
{2405552400 3600 1 WEST}
|
||||
{2437606800 3600 1 WEST}
|
||||
{2469056400 3600 1 WEST}
|
||||
{2500506000 3600 1 WEST}
|
||||
{2531955600 3600 1 WEST}
|
||||
{2563405200 3600 1 WEST}
|
||||
{2595459600 3600 1 WEST}
|
||||
{2626909200 3600 1 WEST}
|
||||
{2658358800 3600 1 WEST}
|
||||
{2689808400 3600 1 WEST}
|
||||
{2721258000 3600 1 WEST}
|
||||
{2752707600 3600 1 WEST}
|
||||
{2784762000 3600 1 WEST}
|
||||
{2816211600 3600 1 WEST}
|
||||
{2847661200 3600 1 WEST}
|
||||
{2879110800 3600 1 WEST}
|
||||
{2910560400 3600 1 WEST}
|
||||
{2942010000 3600 1 WEST}
|
||||
{2974064400 3600 1 WEST}
|
||||
{3005514000 3600 1 WEST}
|
||||
{3036963600 3600 1 WEST}
|
||||
{3068413200 3600 1 WEST}
|
||||
{3099862800 3600 1 WEST}
|
||||
{3131917200 3600 1 WEST}
|
||||
{3163366800 3600 1 WEST}
|
||||
{3194816400 3600 1 WEST}
|
||||
{3226266000 3600 1 WEST}
|
||||
{3257715600 3600 1 WEST}
|
||||
{3289165200 3600 1 WEST}
|
||||
{3321219600 3600 1 WEST}
|
||||
{3352669200 3600 1 WEST}
|
||||
{3384118800 3600 1 WEST}
|
||||
{3415568400 3600 1 WEST}
|
||||
{3447018000 3600 1 WEST}
|
||||
{3479072400 3600 1 WEST}
|
||||
{3510522000 3600 1 WEST}
|
||||
{3541971600 3600 1 WEST}
|
||||
{3573421200 3600 1 WEST}
|
||||
{3604870800 3600 1 WEST}
|
||||
{3636320400 3600 1 WEST}
|
||||
{3668374800 3600 1 WEST}
|
||||
{3699824400 3600 1 WEST}
|
||||
{3731274000 3600 1 WEST}
|
||||
{3762723600 3600 1 WEST}
|
||||
{3794173200 3600 1 WEST}
|
||||
{3825622800 3600 1 WEST}
|
||||
{3857677200 3600 1 WEST}
|
||||
{3889126800 3600 1 WEST}
|
||||
{3920576400 3600 1 WEST}
|
||||
{3952026000 3600 1 WEST}
|
||||
{3983475600 3600 1 WEST}
|
||||
{4015530000 3600 1 WEST}
|
||||
{4046979600 3600 1 WEST}
|
||||
{4078429200 3600 1 WEST}
|
||||
}
|
||||
|
||||
@@ -1,39 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Africa/Juba) {
|
||||
{-9223372036854775808 7584 0 LMT}
|
||||
{-1230775584 7200 0 CAT}
|
||||
{10360800 10800 1 CAST}
|
||||
{24786000 7200 0 CAT}
|
||||
{41810400 10800 1 CAST}
|
||||
{56322000 7200 0 CAT}
|
||||
{73432800 10800 1 CAST}
|
||||
{87944400 7200 0 CAT}
|
||||
{104882400 10800 1 CAST}
|
||||
{119480400 7200 0 CAT}
|
||||
{136332000 10800 1 CAST}
|
||||
{151016400 7200 0 CAT}
|
||||
{167781600 10800 1 CAST}
|
||||
{182552400 7200 0 CAT}
|
||||
{199231200 10800 1 CAST}
|
||||
{214174800 7200 0 CAT}
|
||||
{230680800 10800 1 CAST}
|
||||
{245710800 7200 0 CAT}
|
||||
{262735200 10800 1 CAST}
|
||||
{277246800 7200 0 CAT}
|
||||
{294184800 10800 1 CAST}
|
||||
{308782800 7200 0 CAT}
|
||||
{325634400 10800 1 CAST}
|
||||
{340405200 7200 0 CAT}
|
||||
{357084000 10800 1 CAST}
|
||||
{371941200 7200 0 CAT}
|
||||
{388533600 10800 1 CAST}
|
||||
{403477200 7200 0 CAT}
|
||||
{419983200 10800 1 CAST}
|
||||
{435013200 7200 0 CAT}
|
||||
{452037600 10800 1 CAST}
|
||||
{466635600 7200 0 CAT}
|
||||
{483487200 10800 1 CAST}
|
||||
{498171600 7200 0 CAT}
|
||||
{947930400 10800 0 EAT}
|
||||
if {![info exists TZData(Africa/Khartoum)]} {
|
||||
LoadTimeZoneFile Africa/Khartoum
|
||||
}
|
||||
set TZData(:Africa/Juba) $TZData(:Africa/Khartoum)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Anguilla) {
|
||||
{-9223372036854775808 -15136 0 LMT}
|
||||
{-1825098464 -14400 0 AST}
|
||||
if {![info exists TZData(America/Port_of_Spain)]} {
|
||||
LoadTimeZoneFile America/Port_of_Spain
|
||||
}
|
||||
set TZData(:America/Anguilla) $TZData(:America/Port_of_Spain)
|
||||
|
||||
@@ -56,177 +56,5 @@ set TZData(:America/Araguaina) {
|
||||
{1064368800 -10800 0 BRT}
|
||||
{1350788400 -7200 0 BRST}
|
||||
{1361066400 -10800 0 BRT}
|
||||
{1382238000 -7200 1 BRST}
|
||||
{1392516000 -10800 0 BRT}
|
||||
{1413687600 -7200 1 BRST}
|
||||
{1424570400 -10800 0 BRT}
|
||||
{1445137200 -7200 1 BRST}
|
||||
{1456020000 -10800 0 BRT}
|
||||
{1476586800 -7200 1 BRST}
|
||||
{1487469600 -10800 0 BRT}
|
||||
{1508036400 -7200 1 BRST}
|
||||
{1518919200 -10800 0 BRT}
|
||||
{1540090800 -7200 1 BRST}
|
||||
{1550368800 -10800 0 BRT}
|
||||
{1571540400 -7200 1 BRST}
|
||||
{1581818400 -10800 0 BRT}
|
||||
{1602990000 -7200 1 BRST}
|
||||
{1613872800 -10800 0 BRT}
|
||||
{1634439600 -7200 1 BRST}
|
||||
{1645322400 -10800 0 BRT}
|
||||
{1665889200 -7200 1 BRST}
|
||||
{1677376800 -10800 0 BRT}
|
||||
{1697338800 -7200 1 BRST}
|
||||
{1708221600 -10800 0 BRT}
|
||||
{1729393200 -7200 1 BRST}
|
||||
{1739671200 -10800 0 BRT}
|
||||
{1760842800 -7200 1 BRST}
|
||||
{1771725600 -10800 0 BRT}
|
||||
{1792292400 -7200 1 BRST}
|
||||
{1803175200 -10800 0 BRT}
|
||||
{1823742000 -7200 1 BRST}
|
||||
{1834624800 -10800 0 BRT}
|
||||
{1855191600 -7200 1 BRST}
|
||||
{1866074400 -10800 0 BRT}
|
||||
{1887246000 -7200 1 BRST}
|
||||
{1897524000 -10800 0 BRT}
|
||||
{1918695600 -7200 1 BRST}
|
||||
{1928973600 -10800 0 BRT}
|
||||
{1950145200 -7200 1 BRST}
|
||||
{1960423200 -10800 0 BRT}
|
||||
{1981594800 -7200 1 BRST}
|
||||
{1992477600 -10800 0 BRT}
|
||||
{2013044400 -7200 1 BRST}
|
||||
{2024532000 -10800 0 BRT}
|
||||
{2044494000 -7200 1 BRST}
|
||||
{2055376800 -10800 0 BRT}
|
||||
{2076548400 -7200 1 BRST}
|
||||
{2086826400 -10800 0 BRT}
|
||||
{2107998000 -7200 1 BRST}
|
||||
{2118880800 -10800 0 BRT}
|
||||
{2139447600 -7200 1 BRST}
|
||||
{2150330400 -10800 0 BRT}
|
||||
{2170897200 -7200 1 BRST}
|
||||
{2181780000 -10800 0 BRT}
|
||||
{2202346800 -7200 1 BRST}
|
||||
{2213229600 -10800 0 BRT}
|
||||
{2234401200 -7200 1 BRST}
|
||||
{2244679200 -10800 0 BRT}
|
||||
{2265850800 -7200 1 BRST}
|
||||
{2276128800 -10800 0 BRT}
|
||||
{2297300400 -7200 1 BRST}
|
||||
{2307578400 -10800 0 BRT}
|
||||
{2328750000 -7200 1 BRST}
|
||||
{2339632800 -10800 0 BRT}
|
||||
{2360199600 -7200 1 BRST}
|
||||
{2371082400 -10800 0 BRT}
|
||||
{2391649200 -7200 1 BRST}
|
||||
{2402532000 -10800 0 BRT}
|
||||
{2423703600 -7200 1 BRST}
|
||||
{2433981600 -10800 0 BRT}
|
||||
{2455153200 -7200 1 BRST}
|
||||
{2465431200 -10800 0 BRT}
|
||||
{2486602800 -7200 1 BRST}
|
||||
{2497485600 -10800 0 BRT}
|
||||
{2518052400 -7200 1 BRST}
|
||||
{2528935200 -10800 0 BRT}
|
||||
{2549502000 -7200 1 BRST}
|
||||
{2560384800 -10800 0 BRT}
|
||||
{2580951600 -7200 1 BRST}
|
||||
{2591834400 -10800 0 BRT}
|
||||
{2613006000 -7200 1 BRST}
|
||||
{2623284000 -10800 0 BRT}
|
||||
{2644455600 -7200 1 BRST}
|
||||
{2654733600 -10800 0 BRT}
|
||||
{2675905200 -7200 1 BRST}
|
||||
{2686788000 -10800 0 BRT}
|
||||
{2707354800 -7200 1 BRST}
|
||||
{2718237600 -10800 0 BRT}
|
||||
{2738804400 -7200 1 BRST}
|
||||
{2749687200 -10800 0 BRT}
|
||||
{2770858800 -7200 1 BRST}
|
||||
{2781136800 -10800 0 BRT}
|
||||
{2802308400 -7200 1 BRST}
|
||||
{2812586400 -10800 0 BRT}
|
||||
{2833758000 -7200 1 BRST}
|
||||
{2844036000 -10800 0 BRT}
|
||||
{2865207600 -7200 1 BRST}
|
||||
{2876090400 -10800 0 BRT}
|
||||
{2896657200 -7200 1 BRST}
|
||||
{2907540000 -10800 0 BRT}
|
||||
{2928106800 -7200 1 BRST}
|
||||
{2938989600 -10800 0 BRT}
|
||||
{2960161200 -7200 1 BRST}
|
||||
{2970439200 -10800 0 BRT}
|
||||
{2991610800 -7200 1 BRST}
|
||||
{3001888800 -10800 0 BRT}
|
||||
{3023060400 -7200 1 BRST}
|
||||
{3033943200 -10800 0 BRT}
|
||||
{3054510000 -7200 1 BRST}
|
||||
{3065392800 -10800 0 BRT}
|
||||
{3085959600 -7200 1 BRST}
|
||||
{3096842400 -10800 0 BRT}
|
||||
{3118014000 -7200 1 BRST}
|
||||
{3128292000 -10800 0 BRT}
|
||||
{3149463600 -7200 1 BRST}
|
||||
{3159741600 -10800 0 BRT}
|
||||
{3180913200 -7200 1 BRST}
|
||||
{3191191200 -10800 0 BRT}
|
||||
{3212362800 -7200 1 BRST}
|
||||
{3223245600 -10800 0 BRT}
|
||||
{3243812400 -7200 1 BRST}
|
||||
{3254695200 -10800 0 BRT}
|
||||
{3275262000 -7200 1 BRST}
|
||||
{3286144800 -10800 0 BRT}
|
||||
{3307316400 -7200 1 BRST}
|
||||
{3317594400 -10800 0 BRT}
|
||||
{3338766000 -7200 1 BRST}
|
||||
{3349044000 -10800 0 BRT}
|
||||
{3370215600 -7200 1 BRST}
|
||||
{3381098400 -10800 0 BRT}
|
||||
{3401665200 -7200 1 BRST}
|
||||
{3412548000 -10800 0 BRT}
|
||||
{3433114800 -7200 1 BRST}
|
||||
{3443997600 -10800 0 BRT}
|
||||
{3464564400 -7200 1 BRST}
|
||||
{3475447200 -10800 0 BRT}
|
||||
{3496618800 -7200 1 BRST}
|
||||
{3506896800 -10800 0 BRT}
|
||||
{3528068400 -7200 1 BRST}
|
||||
{3538346400 -10800 0 BRT}
|
||||
{3559518000 -7200 1 BRST}
|
||||
{3570400800 -10800 0 BRT}
|
||||
{3590967600 -7200 1 BRST}
|
||||
{3601850400 -10800 0 BRT}
|
||||
{3622417200 -7200 1 BRST}
|
||||
{3633300000 -10800 0 BRT}
|
||||
{3654471600 -7200 1 BRST}
|
||||
{3664749600 -10800 0 BRT}
|
||||
{3685921200 -7200 1 BRST}
|
||||
{3696199200 -10800 0 BRT}
|
||||
{3717370800 -7200 1 BRST}
|
||||
{3727648800 -10800 0 BRT}
|
||||
{3748820400 -7200 1 BRST}
|
||||
{3759703200 -10800 0 BRT}
|
||||
{3780270000 -7200 1 BRST}
|
||||
{3791152800 -10800 0 BRT}
|
||||
{3811719600 -7200 1 BRST}
|
||||
{3822602400 -10800 0 BRT}
|
||||
{3843774000 -7200 1 BRST}
|
||||
{3854052000 -10800 0 BRT}
|
||||
{3875223600 -7200 1 BRST}
|
||||
{3885501600 -10800 0 BRT}
|
||||
{3906673200 -7200 1 BRST}
|
||||
{3917556000 -10800 0 BRT}
|
||||
{3938122800 -7200 1 BRST}
|
||||
{3949005600 -10800 0 BRT}
|
||||
{3969572400 -7200 1 BRST}
|
||||
{3980455200 -10800 0 BRT}
|
||||
{4001626800 -7200 1 BRST}
|
||||
{4011904800 -10800 0 BRT}
|
||||
{4033076400 -7200 1 BRST}
|
||||
{4043354400 -10800 0 BRT}
|
||||
{4064526000 -7200 1 BRST}
|
||||
{4074804000 -10800 0 BRT}
|
||||
{4095975600 -7200 1 BRST}
|
||||
{1378000800 -10800 0 BRT}
|
||||
}
|
||||
|
||||
@@ -64,5 +64,5 @@ set TZData(:America/Argentina/San_Luis) {
|
||||
{1205031600 -14400 0 WART}
|
||||
{1223784000 -10800 1 WARST}
|
||||
{1236481200 -14400 0 WART}
|
||||
{1255233600 -10800 1 WARST}
|
||||
{1255233600 -10800 0 ART}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Aruba) {
|
||||
{-9223372036854775808 -16824 0 LMT}
|
||||
{-1826738376 -16200 0 ANT}
|
||||
{-157750200 -14400 0 AST}
|
||||
if {![info exists TZData(America/Curacao)]} {
|
||||
LoadTimeZoneFile America/Curacao
|
||||
}
|
||||
set TZData(:America/Aruba) $TZData(:America/Curacao)
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
|
||||
set TZData(:America/Cayman) {
|
||||
{-9223372036854775808 -19532 0 LMT}
|
||||
{-2524502068 -18432 0 KMT}
|
||||
{-1827687168 -18000 0 EST}
|
||||
{-2524502068 -18431 0 KMT}
|
||||
{-1827687169 -18000 0 EST}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Dominica) {
|
||||
{-9223372036854775808 -14736 0 LMT}
|
||||
{-1846266804 -14400 0 AST}
|
||||
if {![info exists TZData(America/Port_of_Spain)]} {
|
||||
LoadTimeZoneFile America/Port_of_Spain
|
||||
}
|
||||
set TZData(:America/Dominica) $TZData(:America/Port_of_Spain)
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
set TZData(:America/Grand_Turk) {
|
||||
{-9223372036854775808 -17072 0 LMT}
|
||||
{-2524504528 -18432 0 KMT}
|
||||
{-1827687168 -18000 0 EST}
|
||||
{-2524504528 -18431 0 KMT}
|
||||
{-1827687169 -18000 0 EST}
|
||||
{294217200 -14400 1 EDT}
|
||||
{309938400 -18000 0 EST}
|
||||
{325666800 -14400 1 EDT}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Grenada) {
|
||||
{-9223372036854775808 -14820 0 LMT}
|
||||
{-1846266780 -14400 0 AST}
|
||||
if {![info exists TZData(America/Port_of_Spain)]} {
|
||||
LoadTimeZoneFile America/Port_of_Spain
|
||||
}
|
||||
set TZData(:America/Grenada) $TZData(:America/Port_of_Spain)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Guadeloupe) {
|
||||
{-9223372036854775808 -14768 0 LMT}
|
||||
{-1848254032 -14400 0 AST}
|
||||
if {![info exists TZData(America/Port_of_Spain)]} {
|
||||
LoadTimeZoneFile America/Port_of_Spain
|
||||
}
|
||||
set TZData(:America/Guadeloupe) $TZData(:America/Port_of_Spain)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Jamaica) {
|
||||
{-9223372036854775808 -18432 0 LMT}
|
||||
{-2524503168 -18432 0 KMT}
|
||||
{-1827687168 -18000 0 EST}
|
||||
{-9223372036854775808 -18431 0 LMT}
|
||||
{-2524503169 -18431 0 KMT}
|
||||
{-1827687169 -18000 0 EST}
|
||||
{136364400 -14400 0 EDT}
|
||||
{152085600 -18000 0 EST}
|
||||
{162370800 -14400 1 EDT}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
if {![info exists TZData(America/Guadeloupe)]} {
|
||||
LoadTimeZoneFile America/Guadeloupe
|
||||
if {![info exists TZData(America/Port_of_Spain)]} {
|
||||
LoadTimeZoneFile America/Port_of_Spain
|
||||
}
|
||||
set TZData(:America/Marigot) $TZData(:America/Guadeloupe)
|
||||
set TZData(:America/Marigot) $TZData(:America/Port_of_Spain)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Montserrat) {
|
||||
{-9223372036854775808 -14932 0 LMT}
|
||||
{-1846266608 -14400 0 AST}
|
||||
if {![info exists TZData(America/Port_of_Spain)]} {
|
||||
LoadTimeZoneFile America/Port_of_Spain
|
||||
}
|
||||
set TZData(:America/Montserrat) $TZData(:America/Port_of_Spain)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
if {![info exists TZData(America/Guadeloupe)]} {
|
||||
LoadTimeZoneFile America/Guadeloupe
|
||||
if {![info exists TZData(America/Port_of_Spain)]} {
|
||||
LoadTimeZoneFile America/Port_of_Spain
|
||||
}
|
||||
set TZData(:America/St_Barthelemy) $TZData(:America/Guadeloupe)
|
||||
set TZData(:America/St_Barthelemy) $TZData(:America/Port_of_Spain)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/St_Kitts) {
|
||||
{-9223372036854775808 -15052 0 LMT}
|
||||
{-1825098548 -14400 0 AST}
|
||||
if {![info exists TZData(America/Port_of_Spain)]} {
|
||||
LoadTimeZoneFile America/Port_of_Spain
|
||||
}
|
||||
set TZData(:America/St_Kitts) $TZData(:America/Port_of_Spain)
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/St_Lucia) {
|
||||
{-9223372036854775808 -14640 0 LMT}
|
||||
{-2524506960 -14640 0 CMT}
|
||||
{-1830369360 -14400 0 AST}
|
||||
if {![info exists TZData(America/Port_of_Spain)]} {
|
||||
LoadTimeZoneFile America/Port_of_Spain
|
||||
}
|
||||
set TZData(:America/St_Lucia) $TZData(:America/Port_of_Spain)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/St_Thomas) {
|
||||
{-9223372036854775808 -15584 0 LMT}
|
||||
{-1846266016 -14400 0 AST}
|
||||
if {![info exists TZData(America/Port_of_Spain)]} {
|
||||
LoadTimeZoneFile America/Port_of_Spain
|
||||
}
|
||||
set TZData(:America/St_Thomas) $TZData(:America/Port_of_Spain)
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/St_Vincent) {
|
||||
{-9223372036854775808 -14696 0 LMT}
|
||||
{-2524506904 -14696 0 KMT}
|
||||
{-1830369304 -14400 0 AST}
|
||||
if {![info exists TZData(America/Port_of_Spain)]} {
|
||||
LoadTimeZoneFile America/Port_of_Spain
|
||||
}
|
||||
set TZData(:America/St_Vincent) $TZData(:America/Port_of_Spain)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:America/Tortola) {
|
||||
{-9223372036854775808 -15508 0 LMT}
|
||||
{-1846266092 -14400 0 AST}
|
||||
if {![info exists TZData(America/Port_of_Spain)]} {
|
||||
LoadTimeZoneFile America/Port_of_Spain
|
||||
}
|
||||
set TZData(:America/Tortola) $TZData(:America/Port_of_Spain)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
if {![info exists TZData(America/St_Thomas)]} {
|
||||
LoadTimeZoneFile America/St_Thomas
|
||||
if {![info exists TZData(America/Port_of_Spain)]} {
|
||||
LoadTimeZoneFile America/Port_of_Spain
|
||||
}
|
||||
set TZData(:America/Virgin) $TZData(:America/St_Thomas)
|
||||
set TZData(:America/Virgin) $TZData(:America/Port_of_Spain)
|
||||
|
||||
@@ -1,257 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Antarctica/McMurdo) {
|
||||
{-9223372036854775808 0 0 zzz}
|
||||
{-441849600 43200 0 NZST}
|
||||
{152632800 46800 1 NZDT}
|
||||
{162309600 43200 0 NZST}
|
||||
{183477600 46800 1 NZDT}
|
||||
{194968800 43200 0 NZST}
|
||||
{215532000 46800 1 NZDT}
|
||||
{226418400 43200 0 NZST}
|
||||
{246981600 46800 1 NZDT}
|
||||
{257868000 43200 0 NZST}
|
||||
{278431200 46800 1 NZDT}
|
||||
{289317600 43200 0 NZST}
|
||||
{309880800 46800 1 NZDT}
|
||||
{320767200 43200 0 NZST}
|
||||
{341330400 46800 1 NZDT}
|
||||
{352216800 43200 0 NZST}
|
||||
{372780000 46800 1 NZDT}
|
||||
{384271200 43200 0 NZST}
|
||||
{404834400 46800 1 NZDT}
|
||||
{415720800 43200 0 NZST}
|
||||
{436284000 46800 1 NZDT}
|
||||
{447170400 43200 0 NZST}
|
||||
{467733600 46800 1 NZDT}
|
||||
{478620000 43200 0 NZST}
|
||||
{499183200 46800 1 NZDT}
|
||||
{510069600 43200 0 NZST}
|
||||
{530632800 46800 1 NZDT}
|
||||
{541519200 43200 0 NZST}
|
||||
{562082400 46800 1 NZDT}
|
||||
{573573600 43200 0 NZST}
|
||||
{594136800 46800 1 NZDT}
|
||||
{605023200 43200 0 NZST}
|
||||
{623772000 46800 1 NZDT}
|
||||
{637682400 43200 0 NZST}
|
||||
{655221600 46800 1 NZDT}
|
||||
{669132000 43200 0 NZST}
|
||||
{686671200 46800 1 NZDT}
|
||||
{700581600 43200 0 NZST}
|
||||
{718120800 46800 1 NZDT}
|
||||
{732636000 43200 0 NZST}
|
||||
{749570400 46800 1 NZDT}
|
||||
{764085600 43200 0 NZST}
|
||||
{781020000 46800 1 NZDT}
|
||||
{795535200 43200 0 NZST}
|
||||
{812469600 46800 1 NZDT}
|
||||
{826984800 43200 0 NZST}
|
||||
{844524000 46800 1 NZDT}
|
||||
{858434400 43200 0 NZST}
|
||||
{875973600 46800 1 NZDT}
|
||||
{889884000 43200 0 NZST}
|
||||
{907423200 46800 1 NZDT}
|
||||
{921938400 43200 0 NZST}
|
||||
{938872800 46800 1 NZDT}
|
||||
{953388000 43200 0 NZST}
|
||||
{970322400 46800 1 NZDT}
|
||||
{984837600 43200 0 NZST}
|
||||
{1002376800 46800 1 NZDT}
|
||||
{1016287200 43200 0 NZST}
|
||||
{1033826400 46800 1 NZDT}
|
||||
{1047736800 43200 0 NZST}
|
||||
{1065276000 46800 1 NZDT}
|
||||
{1079791200 43200 0 NZST}
|
||||
{1096725600 46800 1 NZDT}
|
||||
{1111240800 43200 0 NZST}
|
||||
{1128175200 46800 1 NZDT}
|
||||
{1142690400 43200 0 NZST}
|
||||
{1159624800 46800 1 NZDT}
|
||||
{1174140000 43200 0 NZST}
|
||||
{1191074400 46800 1 NZDT}
|
||||
{1207404000 43200 0 NZST}
|
||||
{1222524000 46800 1 NZDT}
|
||||
{1238853600 43200 0 NZST}
|
||||
{1253973600 46800 1 NZDT}
|
||||
{1270303200 43200 0 NZST}
|
||||
{1285423200 46800 1 NZDT}
|
||||
{1301752800 43200 0 NZST}
|
||||
{1316872800 46800 1 NZDT}
|
||||
{1333202400 43200 0 NZST}
|
||||
{1348927200 46800 1 NZDT}
|
||||
{1365256800 43200 0 NZST}
|
||||
{1380376800 46800 1 NZDT}
|
||||
{1396706400 43200 0 NZST}
|
||||
{1411826400 46800 1 NZDT}
|
||||
{1428156000 43200 0 NZST}
|
||||
{1443276000 46800 1 NZDT}
|
||||
{1459605600 43200 0 NZST}
|
||||
{1474725600 46800 1 NZDT}
|
||||
{1491055200 43200 0 NZST}
|
||||
{1506175200 46800 1 NZDT}
|
||||
{1522504800 43200 0 NZST}
|
||||
{1538229600 46800 1 NZDT}
|
||||
{1554559200 43200 0 NZST}
|
||||
{1569679200 46800 1 NZDT}
|
||||
{1586008800 43200 0 NZST}
|
||||
{1601128800 46800 1 NZDT}
|
||||
{1617458400 43200 0 NZST}
|
||||
{1632578400 46800 1 NZDT}
|
||||
{1648908000 43200 0 NZST}
|
||||
{1664028000 46800 1 NZDT}
|
||||
{1680357600 43200 0 NZST}
|
||||
{1695477600 46800 1 NZDT}
|
||||
{1712412000 43200 0 NZST}
|
||||
{1727532000 46800 1 NZDT}
|
||||
{1743861600 43200 0 NZST}
|
||||
{1758981600 46800 1 NZDT}
|
||||
{1775311200 43200 0 NZST}
|
||||
{1790431200 46800 1 NZDT}
|
||||
{1806760800 43200 0 NZST}
|
||||
{1821880800 46800 1 NZDT}
|
||||
{1838210400 43200 0 NZST}
|
||||
{1853330400 46800 1 NZDT}
|
||||
{1869660000 43200 0 NZST}
|
||||
{1885384800 46800 1 NZDT}
|
||||
{1901714400 43200 0 NZST}
|
||||
{1916834400 46800 1 NZDT}
|
||||
{1933164000 43200 0 NZST}
|
||||
{1948284000 46800 1 NZDT}
|
||||
{1964613600 43200 0 NZST}
|
||||
{1979733600 46800 1 NZDT}
|
||||
{1996063200 43200 0 NZST}
|
||||
{2011183200 46800 1 NZDT}
|
||||
{2027512800 43200 0 NZST}
|
||||
{2042632800 46800 1 NZDT}
|
||||
{2058962400 43200 0 NZST}
|
||||
{2074687200 46800 1 NZDT}
|
||||
{2091016800 43200 0 NZST}
|
||||
{2106136800 46800 1 NZDT}
|
||||
{2122466400 43200 0 NZST}
|
||||
{2137586400 46800 1 NZDT}
|
||||
{2153916000 43200 0 NZST}
|
||||
{2169036000 46800 1 NZDT}
|
||||
{2185365600 43200 0 NZST}
|
||||
{2200485600 46800 1 NZDT}
|
||||
{2216815200 43200 0 NZST}
|
||||
{2232540000 46800 1 NZDT}
|
||||
{2248869600 43200 0 NZST}
|
||||
{2263989600 46800 1 NZDT}
|
||||
{2280319200 43200 0 NZST}
|
||||
{2295439200 46800 1 NZDT}
|
||||
{2311768800 43200 0 NZST}
|
||||
{2326888800 46800 1 NZDT}
|
||||
{2343218400 43200 0 NZST}
|
||||
{2358338400 46800 1 NZDT}
|
||||
{2374668000 43200 0 NZST}
|
||||
{2389788000 46800 1 NZDT}
|
||||
{2406117600 43200 0 NZST}
|
||||
{2421842400 46800 1 NZDT}
|
||||
{2438172000 43200 0 NZST}
|
||||
{2453292000 46800 1 NZDT}
|
||||
{2469621600 43200 0 NZST}
|
||||
{2484741600 46800 1 NZDT}
|
||||
{2501071200 43200 0 NZST}
|
||||
{2516191200 46800 1 NZDT}
|
||||
{2532520800 43200 0 NZST}
|
||||
{2547640800 46800 1 NZDT}
|
||||
{2563970400 43200 0 NZST}
|
||||
{2579090400 46800 1 NZDT}
|
||||
{2596024800 43200 0 NZST}
|
||||
{2611144800 46800 1 NZDT}
|
||||
{2627474400 43200 0 NZST}
|
||||
{2642594400 46800 1 NZDT}
|
||||
{2658924000 43200 0 NZST}
|
||||
{2674044000 46800 1 NZDT}
|
||||
{2690373600 43200 0 NZST}
|
||||
{2705493600 46800 1 NZDT}
|
||||
{2721823200 43200 0 NZST}
|
||||
{2736943200 46800 1 NZDT}
|
||||
{2753272800 43200 0 NZST}
|
||||
{2768997600 46800 1 NZDT}
|
||||
{2785327200 43200 0 NZST}
|
||||
{2800447200 46800 1 NZDT}
|
||||
{2816776800 43200 0 NZST}
|
||||
{2831896800 46800 1 NZDT}
|
||||
{2848226400 43200 0 NZST}
|
||||
{2863346400 46800 1 NZDT}
|
||||
{2879676000 43200 0 NZST}
|
||||
{2894796000 46800 1 NZDT}
|
||||
{2911125600 43200 0 NZST}
|
||||
{2926245600 46800 1 NZDT}
|
||||
{2942575200 43200 0 NZST}
|
||||
{2958300000 46800 1 NZDT}
|
||||
{2974629600 43200 0 NZST}
|
||||
{2989749600 46800 1 NZDT}
|
||||
{3006079200 43200 0 NZST}
|
||||
{3021199200 46800 1 NZDT}
|
||||
{3037528800 43200 0 NZST}
|
||||
{3052648800 46800 1 NZDT}
|
||||
{3068978400 43200 0 NZST}
|
||||
{3084098400 46800 1 NZDT}
|
||||
{3100428000 43200 0 NZST}
|
||||
{3116152800 46800 1 NZDT}
|
||||
{3132482400 43200 0 NZST}
|
||||
{3147602400 46800 1 NZDT}
|
||||
{3163932000 43200 0 NZST}
|
||||
{3179052000 46800 1 NZDT}
|
||||
{3195381600 43200 0 NZST}
|
||||
{3210501600 46800 1 NZDT}
|
||||
{3226831200 43200 0 NZST}
|
||||
{3241951200 46800 1 NZDT}
|
||||
{3258280800 43200 0 NZST}
|
||||
{3273400800 46800 1 NZDT}
|
||||
{3289730400 43200 0 NZST}
|
||||
{3305455200 46800 1 NZDT}
|
||||
{3321784800 43200 0 NZST}
|
||||
{3336904800 46800 1 NZDT}
|
||||
{3353234400 43200 0 NZST}
|
||||
{3368354400 46800 1 NZDT}
|
||||
{3384684000 43200 0 NZST}
|
||||
{3399804000 46800 1 NZDT}
|
||||
{3416133600 43200 0 NZST}
|
||||
{3431253600 46800 1 NZDT}
|
||||
{3447583200 43200 0 NZST}
|
||||
{3462703200 46800 1 NZDT}
|
||||
{3479637600 43200 0 NZST}
|
||||
{3494757600 46800 1 NZDT}
|
||||
{3511087200 43200 0 NZST}
|
||||
{3526207200 46800 1 NZDT}
|
||||
{3542536800 43200 0 NZST}
|
||||
{3557656800 46800 1 NZDT}
|
||||
{3573986400 43200 0 NZST}
|
||||
{3589106400 46800 1 NZDT}
|
||||
{3605436000 43200 0 NZST}
|
||||
{3620556000 46800 1 NZDT}
|
||||
{3636885600 43200 0 NZST}
|
||||
{3652610400 46800 1 NZDT}
|
||||
{3668940000 43200 0 NZST}
|
||||
{3684060000 46800 1 NZDT}
|
||||
{3700389600 43200 0 NZST}
|
||||
{3715509600 46800 1 NZDT}
|
||||
{3731839200 43200 0 NZST}
|
||||
{3746959200 46800 1 NZDT}
|
||||
{3763288800 43200 0 NZST}
|
||||
{3778408800 46800 1 NZDT}
|
||||
{3794738400 43200 0 NZST}
|
||||
{3809858400 46800 1 NZDT}
|
||||
{3826188000 43200 0 NZST}
|
||||
{3841912800 46800 1 NZDT}
|
||||
{3858242400 43200 0 NZST}
|
||||
{3873362400 46800 1 NZDT}
|
||||
{3889692000 43200 0 NZST}
|
||||
{3904812000 46800 1 NZDT}
|
||||
{3921141600 43200 0 NZST}
|
||||
{3936261600 46800 1 NZDT}
|
||||
{3952591200 43200 0 NZST}
|
||||
{3967711200 46800 1 NZDT}
|
||||
{3984040800 43200 0 NZST}
|
||||
{3999765600 46800 1 NZDT}
|
||||
{4016095200 43200 0 NZST}
|
||||
{4031215200 46800 1 NZDT}
|
||||
{4047544800 43200 0 NZST}
|
||||
{4062664800 46800 1 NZDT}
|
||||
{4078994400 43200 0 NZST}
|
||||
{4094114400 46800 1 NZDT}
|
||||
if {![info exists TZData(Pacific/Auckland)]} {
|
||||
LoadTimeZoneFile Pacific/Auckland
|
||||
}
|
||||
set TZData(:Antarctica/McMurdo) $TZData(:Pacific/Auckland)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
if {![info exists TZData(Antarctica/McMurdo)]} {
|
||||
LoadTimeZoneFile Antarctica/McMurdo
|
||||
if {![info exists TZData(Pacific/Auckland)]} {
|
||||
LoadTimeZoneFile Pacific/Auckland
|
||||
}
|
||||
set TZData(:Antarctica/South_Pole) $TZData(:Antarctica/McMurdo)
|
||||
set TZData(:Antarctica/South_Pole) $TZData(:Pacific/Auckland)
|
||||
|
||||
+1
-174
@@ -70,178 +70,5 @@ set TZData(:Asia/Amman) {
|
||||
{1301608800 10800 1 EEST}
|
||||
{1319752800 7200 0 EET}
|
||||
{1333058400 10800 1 EEST}
|
||||
{1364504400 10800 1 EEST}
|
||||
{1382652000 7200 0 EET}
|
||||
{1395957600 10800 1 EEST}
|
||||
{1414706400 7200 0 EET}
|
||||
{1427407200 10800 1 EEST}
|
||||
{1446156000 7200 0 EET}
|
||||
{1459461600 10800 1 EEST}
|
||||
{1477605600 7200 0 EET}
|
||||
{1490911200 10800 1 EEST}
|
||||
{1509055200 7200 0 EET}
|
||||
{1522360800 10800 1 EEST}
|
||||
{1540504800 7200 0 EET}
|
||||
{1553810400 10800 1 EEST}
|
||||
{1571954400 7200 0 EET}
|
||||
{1585260000 10800 1 EEST}
|
||||
{1604008800 7200 0 EET}
|
||||
{1616709600 10800 1 EEST}
|
||||
{1635458400 7200 0 EET}
|
||||
{1648764000 10800 1 EEST}
|
||||
{1666908000 7200 0 EET}
|
||||
{1680213600 10800 1 EEST}
|
||||
{1698357600 7200 0 EET}
|
||||
{1711663200 10800 1 EEST}
|
||||
{1729807200 7200 0 EET}
|
||||
{1743112800 10800 1 EEST}
|
||||
{1761861600 7200 0 EET}
|
||||
{1774562400 10800 1 EEST}
|
||||
{1793311200 7200 0 EET}
|
||||
{1806012000 10800 1 EEST}
|
||||
{1824760800 7200 0 EET}
|
||||
{1838066400 10800 1 EEST}
|
||||
{1856210400 7200 0 EET}
|
||||
{1869516000 10800 1 EEST}
|
||||
{1887660000 7200 0 EET}
|
||||
{1900965600 10800 1 EEST}
|
||||
{1919109600 7200 0 EET}
|
||||
{1932415200 10800 1 EEST}
|
||||
{1951164000 7200 0 EET}
|
||||
{1963864800 10800 1 EEST}
|
||||
{1982613600 7200 0 EET}
|
||||
{1995919200 10800 1 EEST}
|
||||
{2014063200 7200 0 EET}
|
||||
{2027368800 10800 1 EEST}
|
||||
{2045512800 7200 0 EET}
|
||||
{2058818400 10800 1 EEST}
|
||||
{2076962400 7200 0 EET}
|
||||
{2090268000 10800 1 EEST}
|
||||
{2109016800 7200 0 EET}
|
||||
{2121717600 10800 1 EEST}
|
||||
{2140466400 7200 0 EET}
|
||||
{2153167200 10800 1 EEST}
|
||||
{2171916000 7200 0 EET}
|
||||
{2185221600 10800 1 EEST}
|
||||
{2203365600 7200 0 EET}
|
||||
{2216671200 10800 1 EEST}
|
||||
{2234815200 7200 0 EET}
|
||||
{2248120800 10800 1 EEST}
|
||||
{2266264800 7200 0 EET}
|
||||
{2279570400 10800 1 EEST}
|
||||
{2298319200 7200 0 EET}
|
||||
{2311020000 10800 1 EEST}
|
||||
{2329768800 7200 0 EET}
|
||||
{2343074400 10800 1 EEST}
|
||||
{2361218400 7200 0 EET}
|
||||
{2374524000 10800 1 EEST}
|
||||
{2392668000 7200 0 EET}
|
||||
{2405973600 10800 1 EEST}
|
||||
{2424117600 7200 0 EET}
|
||||
{2437423200 10800 1 EEST}
|
||||
{2455567200 7200 0 EET}
|
||||
{2468872800 10800 1 EEST}
|
||||
{2487621600 7200 0 EET}
|
||||
{2500322400 10800 1 EEST}
|
||||
{2519071200 7200 0 EET}
|
||||
{2532376800 10800 1 EEST}
|
||||
{2550520800 7200 0 EET}
|
||||
{2563826400 10800 1 EEST}
|
||||
{2581970400 7200 0 EET}
|
||||
{2595276000 10800 1 EEST}
|
||||
{2613420000 7200 0 EET}
|
||||
{2626725600 10800 1 EEST}
|
||||
{2645474400 7200 0 EET}
|
||||
{2658175200 10800 1 EEST}
|
||||
{2676924000 7200 0 EET}
|
||||
{2689624800 10800 1 EEST}
|
||||
{2708373600 7200 0 EET}
|
||||
{2721679200 10800 1 EEST}
|
||||
{2739823200 7200 0 EET}
|
||||
{2753128800 10800 1 EEST}
|
||||
{2771272800 7200 0 EET}
|
||||
{2784578400 10800 1 EEST}
|
||||
{2802722400 7200 0 EET}
|
||||
{2816028000 10800 1 EEST}
|
||||
{2834776800 7200 0 EET}
|
||||
{2847477600 10800 1 EEST}
|
||||
{2866226400 7200 0 EET}
|
||||
{2879532000 10800 1 EEST}
|
||||
{2897676000 7200 0 EET}
|
||||
{2910981600 10800 1 EEST}
|
||||
{2929125600 7200 0 EET}
|
||||
{2942431200 10800 1 EEST}
|
||||
{2960575200 7200 0 EET}
|
||||
{2973880800 10800 1 EEST}
|
||||
{2992629600 7200 0 EET}
|
||||
{3005330400 10800 1 EEST}
|
||||
{3024079200 7200 0 EET}
|
||||
{3036780000 10800 1 EEST}
|
||||
{3055528800 7200 0 EET}
|
||||
{3068834400 10800 1 EEST}
|
||||
{3086978400 7200 0 EET}
|
||||
{3100284000 10800 1 EEST}
|
||||
{3118428000 7200 0 EET}
|
||||
{3131733600 10800 1 EEST}
|
||||
{3149877600 7200 0 EET}
|
||||
{3163183200 10800 1 EEST}
|
||||
{3181932000 7200 0 EET}
|
||||
{3194632800 10800 1 EEST}
|
||||
{3213381600 7200 0 EET}
|
||||
{3226687200 10800 1 EEST}
|
||||
{3244831200 7200 0 EET}
|
||||
{3258136800 10800 1 EEST}
|
||||
{3276280800 7200 0 EET}
|
||||
{3289586400 10800 1 EEST}
|
||||
{3307730400 7200 0 EET}
|
||||
{3321036000 10800 1 EEST}
|
||||
{3339180000 7200 0 EET}
|
||||
{3352485600 10800 1 EEST}
|
||||
{3371234400 7200 0 EET}
|
||||
{3383935200 10800 1 EEST}
|
||||
{3402684000 7200 0 EET}
|
||||
{3415989600 10800 1 EEST}
|
||||
{3434133600 7200 0 EET}
|
||||
{3447439200 10800 1 EEST}
|
||||
{3465583200 7200 0 EET}
|
||||
{3478888800 10800 1 EEST}
|
||||
{3497032800 7200 0 EET}
|
||||
{3510338400 10800 1 EEST}
|
||||
{3529087200 7200 0 EET}
|
||||
{3541788000 10800 1 EEST}
|
||||
{3560536800 7200 0 EET}
|
||||
{3573237600 10800 1 EEST}
|
||||
{3591986400 7200 0 EET}
|
||||
{3605292000 10800 1 EEST}
|
||||
{3623436000 7200 0 EET}
|
||||
{3636741600 10800 1 EEST}
|
||||
{3654885600 7200 0 EET}
|
||||
{3668191200 10800 1 EEST}
|
||||
{3686335200 7200 0 EET}
|
||||
{3699640800 10800 1 EEST}
|
||||
{3718389600 7200 0 EET}
|
||||
{3731090400 10800 1 EEST}
|
||||
{3749839200 7200 0 EET}
|
||||
{3763144800 10800 1 EEST}
|
||||
{3781288800 7200 0 EET}
|
||||
{3794594400 10800 1 EEST}
|
||||
{3812738400 7200 0 EET}
|
||||
{3826044000 10800 1 EEST}
|
||||
{3844188000 7200 0 EET}
|
||||
{3857493600 10800 1 EEST}
|
||||
{3876242400 7200 0 EET}
|
||||
{3888943200 10800 1 EEST}
|
||||
{3907692000 7200 0 EET}
|
||||
{3920392800 10800 1 EEST}
|
||||
{3939141600 7200 0 EET}
|
||||
{3952447200 10800 1 EEST}
|
||||
{3970591200 7200 0 EET}
|
||||
{3983896800 10800 1 EEST}
|
||||
{4002040800 7200 0 EET}
|
||||
{4015346400 10800 1 EEST}
|
||||
{4033490400 7200 0 EET}
|
||||
{4046796000 10800 1 EEST}
|
||||
{4065544800 7200 0 EET}
|
||||
{4078245600 10800 1 EEST}
|
||||
{4096994400 7200 0 EET}
|
||||
{1351202400 10800 0 AST}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,6 @@ set TZData(:Asia/Dili) {
|
||||
{-1830414140 28800 0 TLT}
|
||||
{-879152400 32400 0 JST}
|
||||
{-766054800 32400 0 TLT}
|
||||
{199897200 28800 0 CIT}
|
||||
{199897200 28800 0 WITA}
|
||||
{969120000 32400 0 TLT}
|
||||
}
|
||||
|
||||
+87
-87
@@ -102,177 +102,177 @@ set TZData(:Asia/Gaza) {
|
||||
{1333058400 10800 1 EEST}
|
||||
{1348178400 7200 0 EET}
|
||||
{1364508000 10800 1 EEST}
|
||||
{1380232800 7200 0 EET}
|
||||
{1380229200 7200 0 EET}
|
||||
{1395957600 10800 1 EEST}
|
||||
{1411682400 7200 0 EET}
|
||||
{1411678800 7200 0 EET}
|
||||
{1427407200 10800 1 EEST}
|
||||
{1443132000 7200 0 EET}
|
||||
{1443128400 7200 0 EET}
|
||||
{1459461600 10800 1 EEST}
|
||||
{1474581600 7200 0 EET}
|
||||
{1474578000 7200 0 EET}
|
||||
{1490911200 10800 1 EEST}
|
||||
{1506031200 7200 0 EET}
|
||||
{1506027600 7200 0 EET}
|
||||
{1522360800 10800 1 EEST}
|
||||
{1537480800 7200 0 EET}
|
||||
{1537477200 7200 0 EET}
|
||||
{1553810400 10800 1 EEST}
|
||||
{1569535200 7200 0 EET}
|
||||
{1569531600 7200 0 EET}
|
||||
{1585260000 10800 1 EEST}
|
||||
{1600984800 7200 0 EET}
|
||||
{1600981200 7200 0 EET}
|
||||
{1616709600 10800 1 EEST}
|
||||
{1632434400 7200 0 EET}
|
||||
{1632430800 7200 0 EET}
|
||||
{1648764000 10800 1 EEST}
|
||||
{1663884000 7200 0 EET}
|
||||
{1663880400 7200 0 EET}
|
||||
{1680213600 10800 1 EEST}
|
||||
{1695333600 7200 0 EET}
|
||||
{1695330000 7200 0 EET}
|
||||
{1711663200 10800 1 EEST}
|
||||
{1727388000 7200 0 EET}
|
||||
{1727384400 7200 0 EET}
|
||||
{1743112800 10800 1 EEST}
|
||||
{1758837600 7200 0 EET}
|
||||
{1758834000 7200 0 EET}
|
||||
{1774562400 10800 1 EEST}
|
||||
{1790287200 7200 0 EET}
|
||||
{1790283600 7200 0 EET}
|
||||
{1806012000 10800 1 EEST}
|
||||
{1821736800 7200 0 EET}
|
||||
{1821733200 7200 0 EET}
|
||||
{1838066400 10800 1 EEST}
|
||||
{1853186400 7200 0 EET}
|
||||
{1853182800 7200 0 EET}
|
||||
{1869516000 10800 1 EEST}
|
||||
{1884636000 7200 0 EET}
|
||||
{1884632400 7200 0 EET}
|
||||
{1900965600 10800 1 EEST}
|
||||
{1916690400 7200 0 EET}
|
||||
{1916686800 7200 0 EET}
|
||||
{1932415200 10800 1 EEST}
|
||||
{1948140000 7200 0 EET}
|
||||
{1948136400 7200 0 EET}
|
||||
{1963864800 10800 1 EEST}
|
||||
{1979589600 7200 0 EET}
|
||||
{1979586000 7200 0 EET}
|
||||
{1995919200 10800 1 EEST}
|
||||
{2011039200 7200 0 EET}
|
||||
{2011035600 7200 0 EET}
|
||||
{2027368800 10800 1 EEST}
|
||||
{2042488800 7200 0 EET}
|
||||
{2042485200 7200 0 EET}
|
||||
{2058818400 10800 1 EEST}
|
||||
{2073938400 7200 0 EET}
|
||||
{2073934800 7200 0 EET}
|
||||
{2090268000 10800 1 EEST}
|
||||
{2105992800 7200 0 EET}
|
||||
{2105989200 7200 0 EET}
|
||||
{2121717600 10800 1 EEST}
|
||||
{2137442400 7200 0 EET}
|
||||
{2137438800 7200 0 EET}
|
||||
{2153167200 10800 1 EEST}
|
||||
{2168892000 7200 0 EET}
|
||||
{2168888400 7200 0 EET}
|
||||
{2185221600 10800 1 EEST}
|
||||
{2200341600 7200 0 EET}
|
||||
{2200338000 7200 0 EET}
|
||||
{2216671200 10800 1 EEST}
|
||||
{2231791200 7200 0 EET}
|
||||
{2231787600 7200 0 EET}
|
||||
{2248120800 10800 1 EEST}
|
||||
{2263845600 7200 0 EET}
|
||||
{2263842000 7200 0 EET}
|
||||
{2279570400 10800 1 EEST}
|
||||
{2295295200 7200 0 EET}
|
||||
{2295291600 7200 0 EET}
|
||||
{2311020000 10800 1 EEST}
|
||||
{2326744800 7200 0 EET}
|
||||
{2326741200 7200 0 EET}
|
||||
{2343074400 10800 1 EEST}
|
||||
{2358194400 7200 0 EET}
|
||||
{2358190800 7200 0 EET}
|
||||
{2374524000 10800 1 EEST}
|
||||
{2389644000 7200 0 EET}
|
||||
{2389640400 7200 0 EET}
|
||||
{2405973600 10800 1 EEST}
|
||||
{2421093600 7200 0 EET}
|
||||
{2421090000 7200 0 EET}
|
||||
{2437423200 10800 1 EEST}
|
||||
{2453148000 7200 0 EET}
|
||||
{2453144400 7200 0 EET}
|
||||
{2468872800 10800 1 EEST}
|
||||
{2484597600 7200 0 EET}
|
||||
{2484594000 7200 0 EET}
|
||||
{2500322400 10800 1 EEST}
|
||||
{2516047200 7200 0 EET}
|
||||
{2516043600 7200 0 EET}
|
||||
{2532376800 10800 1 EEST}
|
||||
{2547496800 7200 0 EET}
|
||||
{2547493200 7200 0 EET}
|
||||
{2563826400 10800 1 EEST}
|
||||
{2578946400 7200 0 EET}
|
||||
{2578942800 7200 0 EET}
|
||||
{2595276000 10800 1 EEST}
|
||||
{2611000800 7200 0 EET}
|
||||
{2610997200 7200 0 EET}
|
||||
{2626725600 10800 1 EEST}
|
||||
{2642450400 7200 0 EET}
|
||||
{2642446800 7200 0 EET}
|
||||
{2658175200 10800 1 EEST}
|
||||
{2673900000 7200 0 EET}
|
||||
{2673896400 7200 0 EET}
|
||||
{2689624800 10800 1 EEST}
|
||||
{2705349600 7200 0 EET}
|
||||
{2705346000 7200 0 EET}
|
||||
{2721679200 10800 1 EEST}
|
||||
{2736799200 7200 0 EET}
|
||||
{2736795600 7200 0 EET}
|
||||
{2753128800 10800 1 EEST}
|
||||
{2768248800 7200 0 EET}
|
||||
{2768245200 7200 0 EET}
|
||||
{2784578400 10800 1 EEST}
|
||||
{2800303200 7200 0 EET}
|
||||
{2800299600 7200 0 EET}
|
||||
{2816028000 10800 1 EEST}
|
||||
{2831752800 7200 0 EET}
|
||||
{2831749200 7200 0 EET}
|
||||
{2847477600 10800 1 EEST}
|
||||
{2863202400 7200 0 EET}
|
||||
{2863198800 7200 0 EET}
|
||||
{2879532000 10800 1 EEST}
|
||||
{2894652000 7200 0 EET}
|
||||
{2894648400 7200 0 EET}
|
||||
{2910981600 10800 1 EEST}
|
||||
{2926101600 7200 0 EET}
|
||||
{2926098000 7200 0 EET}
|
||||
{2942431200 10800 1 EEST}
|
||||
{2957551200 7200 0 EET}
|
||||
{2957547600 7200 0 EET}
|
||||
{2973880800 10800 1 EEST}
|
||||
{2989605600 7200 0 EET}
|
||||
{2989602000 7200 0 EET}
|
||||
{3005330400 10800 1 EEST}
|
||||
{3021055200 7200 0 EET}
|
||||
{3021051600 7200 0 EET}
|
||||
{3036780000 10800 1 EEST}
|
||||
{3052504800 7200 0 EET}
|
||||
{3052501200 7200 0 EET}
|
||||
{3068834400 10800 1 EEST}
|
||||
{3083954400 7200 0 EET}
|
||||
{3083950800 7200 0 EET}
|
||||
{3100284000 10800 1 EEST}
|
||||
{3115404000 7200 0 EET}
|
||||
{3115400400 7200 0 EET}
|
||||
{3131733600 10800 1 EEST}
|
||||
{3147458400 7200 0 EET}
|
||||
{3147454800 7200 0 EET}
|
||||
{3163183200 10800 1 EEST}
|
||||
{3178908000 7200 0 EET}
|
||||
{3178904400 7200 0 EET}
|
||||
{3194632800 10800 1 EEST}
|
||||
{3210357600 7200 0 EET}
|
||||
{3210354000 7200 0 EET}
|
||||
{3226687200 10800 1 EEST}
|
||||
{3241807200 7200 0 EET}
|
||||
{3241803600 7200 0 EET}
|
||||
{3258136800 10800 1 EEST}
|
||||
{3273256800 7200 0 EET}
|
||||
{3273253200 7200 0 EET}
|
||||
{3289586400 10800 1 EEST}
|
||||
{3304706400 7200 0 EET}
|
||||
{3304702800 7200 0 EET}
|
||||
{3321036000 10800 1 EEST}
|
||||
{3336760800 7200 0 EET}
|
||||
{3336757200 7200 0 EET}
|
||||
{3352485600 10800 1 EEST}
|
||||
{3368210400 7200 0 EET}
|
||||
{3368206800 7200 0 EET}
|
||||
{3383935200 10800 1 EEST}
|
||||
{3399660000 7200 0 EET}
|
||||
{3399656400 7200 0 EET}
|
||||
{3415989600 10800 1 EEST}
|
||||
{3431109600 7200 0 EET}
|
||||
{3431106000 7200 0 EET}
|
||||
{3447439200 10800 1 EEST}
|
||||
{3462559200 7200 0 EET}
|
||||
{3462555600 7200 0 EET}
|
||||
{3478888800 10800 1 EEST}
|
||||
{3494613600 7200 0 EET}
|
||||
{3494610000 7200 0 EET}
|
||||
{3510338400 10800 1 EEST}
|
||||
{3526063200 7200 0 EET}
|
||||
{3526059600 7200 0 EET}
|
||||
{3541788000 10800 1 EEST}
|
||||
{3557512800 7200 0 EET}
|
||||
{3557509200 7200 0 EET}
|
||||
{3573237600 10800 1 EEST}
|
||||
{3588962400 7200 0 EET}
|
||||
{3588958800 7200 0 EET}
|
||||
{3605292000 10800 1 EEST}
|
||||
{3620412000 7200 0 EET}
|
||||
{3620408400 7200 0 EET}
|
||||
{3636741600 10800 1 EEST}
|
||||
{3651861600 7200 0 EET}
|
||||
{3651858000 7200 0 EET}
|
||||
{3668191200 10800 1 EEST}
|
||||
{3683916000 7200 0 EET}
|
||||
{3683912400 7200 0 EET}
|
||||
{3699640800 10800 1 EEST}
|
||||
{3715365600 7200 0 EET}
|
||||
{3715362000 7200 0 EET}
|
||||
{3731090400 10800 1 EEST}
|
||||
{3746815200 7200 0 EET}
|
||||
{3746811600 7200 0 EET}
|
||||
{3763144800 10800 1 EEST}
|
||||
{3778264800 7200 0 EET}
|
||||
{3778261200 7200 0 EET}
|
||||
{3794594400 10800 1 EEST}
|
||||
{3809714400 7200 0 EET}
|
||||
{3809710800 7200 0 EET}
|
||||
{3826044000 10800 1 EEST}
|
||||
{3841164000 7200 0 EET}
|
||||
{3841160400 7200 0 EET}
|
||||
{3857493600 10800 1 EEST}
|
||||
{3873218400 7200 0 EET}
|
||||
{3873214800 7200 0 EET}
|
||||
{3888943200 10800 1 EEST}
|
||||
{3904668000 7200 0 EET}
|
||||
{3904664400 7200 0 EET}
|
||||
{3920392800 10800 1 EEST}
|
||||
{3936117600 7200 0 EET}
|
||||
{3936114000 7200 0 EET}
|
||||
{3952447200 10800 1 EEST}
|
||||
{3967567200 7200 0 EET}
|
||||
{3967563600 7200 0 EET}
|
||||
{3983896800 10800 1 EEST}
|
||||
{3999016800 7200 0 EET}
|
||||
{3999013200 7200 0 EET}
|
||||
{4015346400 10800 1 EEST}
|
||||
{4031071200 7200 0 EET}
|
||||
{4031067600 7200 0 EET}
|
||||
{4046796000 10800 1 EEST}
|
||||
{4062520800 7200 0 EET}
|
||||
{4062517200 7200 0 EET}
|
||||
{4078245600 10800 1 EEST}
|
||||
{4093970400 7200 0 EET}
|
||||
{4093966800 7200 0 EET}
|
||||
}
|
||||
|
||||
+87
-87
@@ -101,177 +101,177 @@ set TZData(:Asia/Hebron) {
|
||||
{1333058400 10800 1 EEST}
|
||||
{1348178400 7200 0 EET}
|
||||
{1364508000 10800 1 EEST}
|
||||
{1380232800 7200 0 EET}
|
||||
{1380229200 7200 0 EET}
|
||||
{1395957600 10800 1 EEST}
|
||||
{1411682400 7200 0 EET}
|
||||
{1411678800 7200 0 EET}
|
||||
{1427407200 10800 1 EEST}
|
||||
{1443132000 7200 0 EET}
|
||||
{1443128400 7200 0 EET}
|
||||
{1459461600 10800 1 EEST}
|
||||
{1474581600 7200 0 EET}
|
||||
{1474578000 7200 0 EET}
|
||||
{1490911200 10800 1 EEST}
|
||||
{1506031200 7200 0 EET}
|
||||
{1506027600 7200 0 EET}
|
||||
{1522360800 10800 1 EEST}
|
||||
{1537480800 7200 0 EET}
|
||||
{1537477200 7200 0 EET}
|
||||
{1553810400 10800 1 EEST}
|
||||
{1569535200 7200 0 EET}
|
||||
{1569531600 7200 0 EET}
|
||||
{1585260000 10800 1 EEST}
|
||||
{1600984800 7200 0 EET}
|
||||
{1600981200 7200 0 EET}
|
||||
{1616709600 10800 1 EEST}
|
||||
{1632434400 7200 0 EET}
|
||||
{1632430800 7200 0 EET}
|
||||
{1648764000 10800 1 EEST}
|
||||
{1663884000 7200 0 EET}
|
||||
{1663880400 7200 0 EET}
|
||||
{1680213600 10800 1 EEST}
|
||||
{1695333600 7200 0 EET}
|
||||
{1695330000 7200 0 EET}
|
||||
{1711663200 10800 1 EEST}
|
||||
{1727388000 7200 0 EET}
|
||||
{1727384400 7200 0 EET}
|
||||
{1743112800 10800 1 EEST}
|
||||
{1758837600 7200 0 EET}
|
||||
{1758834000 7200 0 EET}
|
||||
{1774562400 10800 1 EEST}
|
||||
{1790287200 7200 0 EET}
|
||||
{1790283600 7200 0 EET}
|
||||
{1806012000 10800 1 EEST}
|
||||
{1821736800 7200 0 EET}
|
||||
{1821733200 7200 0 EET}
|
||||
{1838066400 10800 1 EEST}
|
||||
{1853186400 7200 0 EET}
|
||||
{1853182800 7200 0 EET}
|
||||
{1869516000 10800 1 EEST}
|
||||
{1884636000 7200 0 EET}
|
||||
{1884632400 7200 0 EET}
|
||||
{1900965600 10800 1 EEST}
|
||||
{1916690400 7200 0 EET}
|
||||
{1916686800 7200 0 EET}
|
||||
{1932415200 10800 1 EEST}
|
||||
{1948140000 7200 0 EET}
|
||||
{1948136400 7200 0 EET}
|
||||
{1963864800 10800 1 EEST}
|
||||
{1979589600 7200 0 EET}
|
||||
{1979586000 7200 0 EET}
|
||||
{1995919200 10800 1 EEST}
|
||||
{2011039200 7200 0 EET}
|
||||
{2011035600 7200 0 EET}
|
||||
{2027368800 10800 1 EEST}
|
||||
{2042488800 7200 0 EET}
|
||||
{2042485200 7200 0 EET}
|
||||
{2058818400 10800 1 EEST}
|
||||
{2073938400 7200 0 EET}
|
||||
{2073934800 7200 0 EET}
|
||||
{2090268000 10800 1 EEST}
|
||||
{2105992800 7200 0 EET}
|
||||
{2105989200 7200 0 EET}
|
||||
{2121717600 10800 1 EEST}
|
||||
{2137442400 7200 0 EET}
|
||||
{2137438800 7200 0 EET}
|
||||
{2153167200 10800 1 EEST}
|
||||
{2168892000 7200 0 EET}
|
||||
{2168888400 7200 0 EET}
|
||||
{2185221600 10800 1 EEST}
|
||||
{2200341600 7200 0 EET}
|
||||
{2200338000 7200 0 EET}
|
||||
{2216671200 10800 1 EEST}
|
||||
{2231791200 7200 0 EET}
|
||||
{2231787600 7200 0 EET}
|
||||
{2248120800 10800 1 EEST}
|
||||
{2263845600 7200 0 EET}
|
||||
{2263842000 7200 0 EET}
|
||||
{2279570400 10800 1 EEST}
|
||||
{2295295200 7200 0 EET}
|
||||
{2295291600 7200 0 EET}
|
||||
{2311020000 10800 1 EEST}
|
||||
{2326744800 7200 0 EET}
|
||||
{2326741200 7200 0 EET}
|
||||
{2343074400 10800 1 EEST}
|
||||
{2358194400 7200 0 EET}
|
||||
{2358190800 7200 0 EET}
|
||||
{2374524000 10800 1 EEST}
|
||||
{2389644000 7200 0 EET}
|
||||
{2389640400 7200 0 EET}
|
||||
{2405973600 10800 1 EEST}
|
||||
{2421093600 7200 0 EET}
|
||||
{2421090000 7200 0 EET}
|
||||
{2437423200 10800 1 EEST}
|
||||
{2453148000 7200 0 EET}
|
||||
{2453144400 7200 0 EET}
|
||||
{2468872800 10800 1 EEST}
|
||||
{2484597600 7200 0 EET}
|
||||
{2484594000 7200 0 EET}
|
||||
{2500322400 10800 1 EEST}
|
||||
{2516047200 7200 0 EET}
|
||||
{2516043600 7200 0 EET}
|
||||
{2532376800 10800 1 EEST}
|
||||
{2547496800 7200 0 EET}
|
||||
{2547493200 7200 0 EET}
|
||||
{2563826400 10800 1 EEST}
|
||||
{2578946400 7200 0 EET}
|
||||
{2578942800 7200 0 EET}
|
||||
{2595276000 10800 1 EEST}
|
||||
{2611000800 7200 0 EET}
|
||||
{2610997200 7200 0 EET}
|
||||
{2626725600 10800 1 EEST}
|
||||
{2642450400 7200 0 EET}
|
||||
{2642446800 7200 0 EET}
|
||||
{2658175200 10800 1 EEST}
|
||||
{2673900000 7200 0 EET}
|
||||
{2673896400 7200 0 EET}
|
||||
{2689624800 10800 1 EEST}
|
||||
{2705349600 7200 0 EET}
|
||||
{2705346000 7200 0 EET}
|
||||
{2721679200 10800 1 EEST}
|
||||
{2736799200 7200 0 EET}
|
||||
{2736795600 7200 0 EET}
|
||||
{2753128800 10800 1 EEST}
|
||||
{2768248800 7200 0 EET}
|
||||
{2768245200 7200 0 EET}
|
||||
{2784578400 10800 1 EEST}
|
||||
{2800303200 7200 0 EET}
|
||||
{2800299600 7200 0 EET}
|
||||
{2816028000 10800 1 EEST}
|
||||
{2831752800 7200 0 EET}
|
||||
{2831749200 7200 0 EET}
|
||||
{2847477600 10800 1 EEST}
|
||||
{2863202400 7200 0 EET}
|
||||
{2863198800 7200 0 EET}
|
||||
{2879532000 10800 1 EEST}
|
||||
{2894652000 7200 0 EET}
|
||||
{2894648400 7200 0 EET}
|
||||
{2910981600 10800 1 EEST}
|
||||
{2926101600 7200 0 EET}
|
||||
{2926098000 7200 0 EET}
|
||||
{2942431200 10800 1 EEST}
|
||||
{2957551200 7200 0 EET}
|
||||
{2957547600 7200 0 EET}
|
||||
{2973880800 10800 1 EEST}
|
||||
{2989605600 7200 0 EET}
|
||||
{2989602000 7200 0 EET}
|
||||
{3005330400 10800 1 EEST}
|
||||
{3021055200 7200 0 EET}
|
||||
{3021051600 7200 0 EET}
|
||||
{3036780000 10800 1 EEST}
|
||||
{3052504800 7200 0 EET}
|
||||
{3052501200 7200 0 EET}
|
||||
{3068834400 10800 1 EEST}
|
||||
{3083954400 7200 0 EET}
|
||||
{3083950800 7200 0 EET}
|
||||
{3100284000 10800 1 EEST}
|
||||
{3115404000 7200 0 EET}
|
||||
{3115400400 7200 0 EET}
|
||||
{3131733600 10800 1 EEST}
|
||||
{3147458400 7200 0 EET}
|
||||
{3147454800 7200 0 EET}
|
||||
{3163183200 10800 1 EEST}
|
||||
{3178908000 7200 0 EET}
|
||||
{3178904400 7200 0 EET}
|
||||
{3194632800 10800 1 EEST}
|
||||
{3210357600 7200 0 EET}
|
||||
{3210354000 7200 0 EET}
|
||||
{3226687200 10800 1 EEST}
|
||||
{3241807200 7200 0 EET}
|
||||
{3241803600 7200 0 EET}
|
||||
{3258136800 10800 1 EEST}
|
||||
{3273256800 7200 0 EET}
|
||||
{3273253200 7200 0 EET}
|
||||
{3289586400 10800 1 EEST}
|
||||
{3304706400 7200 0 EET}
|
||||
{3304702800 7200 0 EET}
|
||||
{3321036000 10800 1 EEST}
|
||||
{3336760800 7200 0 EET}
|
||||
{3336757200 7200 0 EET}
|
||||
{3352485600 10800 1 EEST}
|
||||
{3368210400 7200 0 EET}
|
||||
{3368206800 7200 0 EET}
|
||||
{3383935200 10800 1 EEST}
|
||||
{3399660000 7200 0 EET}
|
||||
{3399656400 7200 0 EET}
|
||||
{3415989600 10800 1 EEST}
|
||||
{3431109600 7200 0 EET}
|
||||
{3431106000 7200 0 EET}
|
||||
{3447439200 10800 1 EEST}
|
||||
{3462559200 7200 0 EET}
|
||||
{3462555600 7200 0 EET}
|
||||
{3478888800 10800 1 EEST}
|
||||
{3494613600 7200 0 EET}
|
||||
{3494610000 7200 0 EET}
|
||||
{3510338400 10800 1 EEST}
|
||||
{3526063200 7200 0 EET}
|
||||
{3526059600 7200 0 EET}
|
||||
{3541788000 10800 1 EEST}
|
||||
{3557512800 7200 0 EET}
|
||||
{3557509200 7200 0 EET}
|
||||
{3573237600 10800 1 EEST}
|
||||
{3588962400 7200 0 EET}
|
||||
{3588958800 7200 0 EET}
|
||||
{3605292000 10800 1 EEST}
|
||||
{3620412000 7200 0 EET}
|
||||
{3620408400 7200 0 EET}
|
||||
{3636741600 10800 1 EEST}
|
||||
{3651861600 7200 0 EET}
|
||||
{3651858000 7200 0 EET}
|
||||
{3668191200 10800 1 EEST}
|
||||
{3683916000 7200 0 EET}
|
||||
{3683912400 7200 0 EET}
|
||||
{3699640800 10800 1 EEST}
|
||||
{3715365600 7200 0 EET}
|
||||
{3715362000 7200 0 EET}
|
||||
{3731090400 10800 1 EEST}
|
||||
{3746815200 7200 0 EET}
|
||||
{3746811600 7200 0 EET}
|
||||
{3763144800 10800 1 EEST}
|
||||
{3778264800 7200 0 EET}
|
||||
{3778261200 7200 0 EET}
|
||||
{3794594400 10800 1 EEST}
|
||||
{3809714400 7200 0 EET}
|
||||
{3809710800 7200 0 EET}
|
||||
{3826044000 10800 1 EEST}
|
||||
{3841164000 7200 0 EET}
|
||||
{3841160400 7200 0 EET}
|
||||
{3857493600 10800 1 EEST}
|
||||
{3873218400 7200 0 EET}
|
||||
{3873214800 7200 0 EET}
|
||||
{3888943200 10800 1 EEST}
|
||||
{3904668000 7200 0 EET}
|
||||
{3904664400 7200 0 EET}
|
||||
{3920392800 10800 1 EEST}
|
||||
{3936117600 7200 0 EET}
|
||||
{3936114000 7200 0 EET}
|
||||
{3952447200 10800 1 EEST}
|
||||
{3967567200 7200 0 EET}
|
||||
{3967563600 7200 0 EET}
|
||||
{3983896800 10800 1 EEST}
|
||||
{3999016800 7200 0 EET}
|
||||
{3999013200 7200 0 EET}
|
||||
{4015346400 10800 1 EEST}
|
||||
{4031071200 7200 0 EET}
|
||||
{4031067600 7200 0 EET}
|
||||
{4046796000 10800 1 EEST}
|
||||
{4062520800 7200 0 EET}
|
||||
{4062517200 7200 0 EET}
|
||||
{4078245600 10800 1 EEST}
|
||||
{4093970400 7200 0 EET}
|
||||
{4093966800 7200 0 EET}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
set TZData(:Asia/Jakarta) {
|
||||
{-9223372036854775808 25632 0 LMT}
|
||||
{-3231299232 25632 0 JMT}
|
||||
{-3231299232 25632 0 BMT}
|
||||
{-1451719200 26400 0 JAVT}
|
||||
{-1172906400 27000 0 WIT}
|
||||
{-1172906400 27000 0 WIB}
|
||||
{-876641400 32400 0 JST}
|
||||
{-766054800 27000 0 WIT}
|
||||
{-683883000 28800 0 WIT}
|
||||
{-620812800 27000 0 WIT}
|
||||
{-189415800 25200 0 WIT}
|
||||
{-766054800 27000 0 WIB}
|
||||
{-683883000 28800 0 WIB}
|
||||
{-620812800 27000 0 WIB}
|
||||
{-189415800 25200 0 WIB}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
set TZData(:Asia/Jayapura) {
|
||||
{-9223372036854775808 33768 0 LMT}
|
||||
{-1172913768 32400 0 EIT}
|
||||
{-1172913768 32400 0 WIT}
|
||||
{-799491600 34200 0 CST}
|
||||
{-189423000 32400 0 EIT}
|
||||
{-189423000 32400 0 WIT}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
set TZData(:Asia/Makassar) {
|
||||
{-9223372036854775808 28656 0 LMT}
|
||||
{-1577951856 28656 0 MMT}
|
||||
{-1172908656 28800 0 CIT}
|
||||
{-1172908656 28800 0 WITA}
|
||||
{-880272000 32400 0 JST}
|
||||
{-766054800 28800 0 CIT}
|
||||
{-766054800 28800 0 WITA}
|
||||
}
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
set TZData(:Asia/Pontianak) {
|
||||
{-9223372036854775808 26240 0 LMT}
|
||||
{-1946186240 26240 0 PMT}
|
||||
{-1172906240 27000 0 WIT}
|
||||
{-1172906240 27000 0 WIB}
|
||||
{-881220600 32400 0 JST}
|
||||
{-766054800 27000 0 WIT}
|
||||
{-683883000 28800 0 WIT}
|
||||
{-620812800 27000 0 WIT}
|
||||
{-189415800 28800 0 CIT}
|
||||
{567964800 25200 0 WIT}
|
||||
{-766054800 27000 0 WIB}
|
||||
{-683883000 28800 0 WIB}
|
||||
{-620812800 27000 0 WIB}
|
||||
{-189415800 28800 0 WITA}
|
||||
{567964800 25200 0 WIB}
|
||||
}
|
||||
|
||||
+3
-243
@@ -1,245 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Europe/Vaduz) {
|
||||
{-9223372036854775808 2284 0 LMT}
|
||||
{-2385247084 3600 0 CET}
|
||||
{347151600 3600 0 CET}
|
||||
{354675600 7200 1 CEST}
|
||||
{370400400 3600 0 CET}
|
||||
{386125200 7200 1 CEST}
|
||||
{401850000 3600 0 CET}
|
||||
{417574800 7200 1 CEST}
|
||||
{433299600 3600 0 CET}
|
||||
{449024400 7200 1 CEST}
|
||||
{465354000 3600 0 CET}
|
||||
{481078800 7200 1 CEST}
|
||||
{496803600 3600 0 CET}
|
||||
{512528400 7200 1 CEST}
|
||||
{528253200 3600 0 CET}
|
||||
{543978000 7200 1 CEST}
|
||||
{559702800 3600 0 CET}
|
||||
{575427600 7200 1 CEST}
|
||||
{591152400 3600 0 CET}
|
||||
{606877200 7200 1 CEST}
|
||||
{622602000 3600 0 CET}
|
||||
{638326800 7200 1 CEST}
|
||||
{654656400 3600 0 CET}
|
||||
{670381200 7200 1 CEST}
|
||||
{686106000 3600 0 CET}
|
||||
{701830800 7200 1 CEST}
|
||||
{717555600 3600 0 CET}
|
||||
{733280400 7200 1 CEST}
|
||||
{749005200 3600 0 CET}
|
||||
{764730000 7200 1 CEST}
|
||||
{780454800 3600 0 CET}
|
||||
{796179600 7200 1 CEST}
|
||||
{811904400 3600 0 CET}
|
||||
{828234000 7200 1 CEST}
|
||||
{846378000 3600 0 CET}
|
||||
{859683600 7200 1 CEST}
|
||||
{877827600 3600 0 CET}
|
||||
{891133200 7200 1 CEST}
|
||||
{909277200 3600 0 CET}
|
||||
{922582800 7200 1 CEST}
|
||||
{941331600 3600 0 CET}
|
||||
{954032400 7200 1 CEST}
|
||||
{972781200 3600 0 CET}
|
||||
{985482000 7200 1 CEST}
|
||||
{1004230800 3600 0 CET}
|
||||
{1017536400 7200 1 CEST}
|
||||
{1035680400 3600 0 CET}
|
||||
{1048986000 7200 1 CEST}
|
||||
{1067130000 3600 0 CET}
|
||||
{1080435600 7200 1 CEST}
|
||||
{1099184400 3600 0 CET}
|
||||
{1111885200 7200 1 CEST}
|
||||
{1130634000 3600 0 CET}
|
||||
{1143334800 7200 1 CEST}
|
||||
{1162083600 3600 0 CET}
|
||||
{1174784400 7200 1 CEST}
|
||||
{1193533200 3600 0 CET}
|
||||
{1206838800 7200 1 CEST}
|
||||
{1224982800 3600 0 CET}
|
||||
{1238288400 7200 1 CEST}
|
||||
{1256432400 3600 0 CET}
|
||||
{1269738000 7200 1 CEST}
|
||||
{1288486800 3600 0 CET}
|
||||
{1301187600 7200 1 CEST}
|
||||
{1319936400 3600 0 CET}
|
||||
{1332637200 7200 1 CEST}
|
||||
{1351386000 3600 0 CET}
|
||||
{1364691600 7200 1 CEST}
|
||||
{1382835600 3600 0 CET}
|
||||
{1396141200 7200 1 CEST}
|
||||
{1414285200 3600 0 CET}
|
||||
{1427590800 7200 1 CEST}
|
||||
{1445734800 3600 0 CET}
|
||||
{1459040400 7200 1 CEST}
|
||||
{1477789200 3600 0 CET}
|
||||
{1490490000 7200 1 CEST}
|
||||
{1509238800 3600 0 CET}
|
||||
{1521939600 7200 1 CEST}
|
||||
{1540688400 3600 0 CET}
|
||||
{1553994000 7200 1 CEST}
|
||||
{1572138000 3600 0 CET}
|
||||
{1585443600 7200 1 CEST}
|
||||
{1603587600 3600 0 CET}
|
||||
{1616893200 7200 1 CEST}
|
||||
{1635642000 3600 0 CET}
|
||||
{1648342800 7200 1 CEST}
|
||||
{1667091600 3600 0 CET}
|
||||
{1679792400 7200 1 CEST}
|
||||
{1698541200 3600 0 CET}
|
||||
{1711846800 7200 1 CEST}
|
||||
{1729990800 3600 0 CET}
|
||||
{1743296400 7200 1 CEST}
|
||||
{1761440400 3600 0 CET}
|
||||
{1774746000 7200 1 CEST}
|
||||
{1792890000 3600 0 CET}
|
||||
{1806195600 7200 1 CEST}
|
||||
{1824944400 3600 0 CET}
|
||||
{1837645200 7200 1 CEST}
|
||||
{1856394000 3600 0 CET}
|
||||
{1869094800 7200 1 CEST}
|
||||
{1887843600 3600 0 CET}
|
||||
{1901149200 7200 1 CEST}
|
||||
{1919293200 3600 0 CET}
|
||||
{1932598800 7200 1 CEST}
|
||||
{1950742800 3600 0 CET}
|
||||
{1964048400 7200 1 CEST}
|
||||
{1982797200 3600 0 CET}
|
||||
{1995498000 7200 1 CEST}
|
||||
{2014246800 3600 0 CET}
|
||||
{2026947600 7200 1 CEST}
|
||||
{2045696400 3600 0 CET}
|
||||
{2058397200 7200 1 CEST}
|
||||
{2077146000 3600 0 CET}
|
||||
{2090451600 7200 1 CEST}
|
||||
{2108595600 3600 0 CET}
|
||||
{2121901200 7200 1 CEST}
|
||||
{2140045200 3600 0 CET}
|
||||
{2153350800 7200 1 CEST}
|
||||
{2172099600 3600 0 CET}
|
||||
{2184800400 7200 1 CEST}
|
||||
{2203549200 3600 0 CET}
|
||||
{2216250000 7200 1 CEST}
|
||||
{2234998800 3600 0 CET}
|
||||
{2248304400 7200 1 CEST}
|
||||
{2266448400 3600 0 CET}
|
||||
{2279754000 7200 1 CEST}
|
||||
{2297898000 3600 0 CET}
|
||||
{2311203600 7200 1 CEST}
|
||||
{2329347600 3600 0 CET}
|
||||
{2342653200 7200 1 CEST}
|
||||
{2361402000 3600 0 CET}
|
||||
{2374102800 7200 1 CEST}
|
||||
{2392851600 3600 0 CET}
|
||||
{2405552400 7200 1 CEST}
|
||||
{2424301200 3600 0 CET}
|
||||
{2437606800 7200 1 CEST}
|
||||
{2455750800 3600 0 CET}
|
||||
{2469056400 7200 1 CEST}
|
||||
{2487200400 3600 0 CET}
|
||||
{2500506000 7200 1 CEST}
|
||||
{2519254800 3600 0 CET}
|
||||
{2531955600 7200 1 CEST}
|
||||
{2550704400 3600 0 CET}
|
||||
{2563405200 7200 1 CEST}
|
||||
{2582154000 3600 0 CET}
|
||||
{2595459600 7200 1 CEST}
|
||||
{2613603600 3600 0 CET}
|
||||
{2626909200 7200 1 CEST}
|
||||
{2645053200 3600 0 CET}
|
||||
{2658358800 7200 1 CEST}
|
||||
{2676502800 3600 0 CET}
|
||||
{2689808400 7200 1 CEST}
|
||||
{2708557200 3600 0 CET}
|
||||
{2721258000 7200 1 CEST}
|
||||
{2740006800 3600 0 CET}
|
||||
{2752707600 7200 1 CEST}
|
||||
{2771456400 3600 0 CET}
|
||||
{2784762000 7200 1 CEST}
|
||||
{2802906000 3600 0 CET}
|
||||
{2816211600 7200 1 CEST}
|
||||
{2834355600 3600 0 CET}
|
||||
{2847661200 7200 1 CEST}
|
||||
{2866410000 3600 0 CET}
|
||||
{2879110800 7200 1 CEST}
|
||||
{2897859600 3600 0 CET}
|
||||
{2910560400 7200 1 CEST}
|
||||
{2929309200 3600 0 CET}
|
||||
{2942010000 7200 1 CEST}
|
||||
{2960758800 3600 0 CET}
|
||||
{2974064400 7200 1 CEST}
|
||||
{2992208400 3600 0 CET}
|
||||
{3005514000 7200 1 CEST}
|
||||
{3023658000 3600 0 CET}
|
||||
{3036963600 7200 1 CEST}
|
||||
{3055712400 3600 0 CET}
|
||||
{3068413200 7200 1 CEST}
|
||||
{3087162000 3600 0 CET}
|
||||
{3099862800 7200 1 CEST}
|
||||
{3118611600 3600 0 CET}
|
||||
{3131917200 7200 1 CEST}
|
||||
{3150061200 3600 0 CET}
|
||||
{3163366800 7200 1 CEST}
|
||||
{3181510800 3600 0 CET}
|
||||
{3194816400 7200 1 CEST}
|
||||
{3212960400 3600 0 CET}
|
||||
{3226266000 7200 1 CEST}
|
||||
{3245014800 3600 0 CET}
|
||||
{3257715600 7200 1 CEST}
|
||||
{3276464400 3600 0 CET}
|
||||
{3289165200 7200 1 CEST}
|
||||
{3307914000 3600 0 CET}
|
||||
{3321219600 7200 1 CEST}
|
||||
{3339363600 3600 0 CET}
|
||||
{3352669200 7200 1 CEST}
|
||||
{3370813200 3600 0 CET}
|
||||
{3384118800 7200 1 CEST}
|
||||
{3402867600 3600 0 CET}
|
||||
{3415568400 7200 1 CEST}
|
||||
{3434317200 3600 0 CET}
|
||||
{3447018000 7200 1 CEST}
|
||||
{3465766800 3600 0 CET}
|
||||
{3479072400 7200 1 CEST}
|
||||
{3497216400 3600 0 CET}
|
||||
{3510522000 7200 1 CEST}
|
||||
{3528666000 3600 0 CET}
|
||||
{3541971600 7200 1 CEST}
|
||||
{3560115600 3600 0 CET}
|
||||
{3573421200 7200 1 CEST}
|
||||
{3592170000 3600 0 CET}
|
||||
{3604870800 7200 1 CEST}
|
||||
{3623619600 3600 0 CET}
|
||||
{3636320400 7200 1 CEST}
|
||||
{3655069200 3600 0 CET}
|
||||
{3668374800 7200 1 CEST}
|
||||
{3686518800 3600 0 CET}
|
||||
{3699824400 7200 1 CEST}
|
||||
{3717968400 3600 0 CET}
|
||||
{3731274000 7200 1 CEST}
|
||||
{3750022800 3600 0 CET}
|
||||
{3762723600 7200 1 CEST}
|
||||
{3781472400 3600 0 CET}
|
||||
{3794173200 7200 1 CEST}
|
||||
{3812922000 3600 0 CET}
|
||||
{3825622800 7200 1 CEST}
|
||||
{3844371600 3600 0 CET}
|
||||
{3857677200 7200 1 CEST}
|
||||
{3875821200 3600 0 CET}
|
||||
{3889126800 7200 1 CEST}
|
||||
{3907270800 3600 0 CET}
|
||||
{3920576400 7200 1 CEST}
|
||||
{3939325200 3600 0 CET}
|
||||
{3952026000 7200 1 CEST}
|
||||
{3970774800 3600 0 CET}
|
||||
{3983475600 7200 1 CEST}
|
||||
{4002224400 3600 0 CET}
|
||||
{4015530000 7200 1 CEST}
|
||||
{4033674000 3600 0 CET}
|
||||
{4046979600 7200 1 CEST}
|
||||
{4065123600 3600 0 CET}
|
||||
{4078429200 7200 1 CEST}
|
||||
{4096573200 3600 0 CET}
|
||||
if {![info exists TZData(Europe/Zurich)]} {
|
||||
LoadTimeZoneFile Europe/Zurich
|
||||
}
|
||||
set TZData(:Europe/Vaduz) $TZData(:Europe/Zurich)
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
set TZData(:Europe/Zurich) {
|
||||
{-9223372036854775808 2048 0 LMT}
|
||||
{-3827954048 1784 0 BMT}
|
||||
{-2385246584 3600 0 CET}
|
||||
{-3675198848 1786 0 BMT}
|
||||
{-2385246586 3600 0 CET}
|
||||
{-904435200 7200 1 CEST}
|
||||
{-891129600 3600 0 CET}
|
||||
{-872985600 7200 1 CEST}
|
||||
|
||||
+39
-39
@@ -15,11 +15,11 @@ set TZData(:Pacific/Fiji) {
|
||||
{1327154400 43200 0 FJT}
|
||||
{1350741600 46800 1 FJST}
|
||||
{1358604000 43200 0 FJT}
|
||||
{1382191200 46800 1 FJST}
|
||||
{1382796000 46800 1 FJST}
|
||||
{1390053600 43200 0 FJT}
|
||||
{1413640800 46800 1 FJST}
|
||||
{1414245600 46800 1 FJST}
|
||||
{1421503200 43200 0 FJT}
|
||||
{1445090400 46800 1 FJST}
|
||||
{1445695200 46800 1 FJST}
|
||||
{1453557600 43200 0 FJT}
|
||||
{1477144800 46800 1 FJST}
|
||||
{1485007200 43200 0 FJT}
|
||||
@@ -27,9 +27,9 @@ set TZData(:Pacific/Fiji) {
|
||||
{1516456800 43200 0 FJT}
|
||||
{1540044000 46800 1 FJST}
|
||||
{1547906400 43200 0 FJT}
|
||||
{1571493600 46800 1 FJST}
|
||||
{1572098400 46800 1 FJST}
|
||||
{1579356000 43200 0 FJT}
|
||||
{1602943200 46800 1 FJST}
|
||||
{1603548000 46800 1 FJST}
|
||||
{1611410400 43200 0 FJT}
|
||||
{1634997600 46800 1 FJST}
|
||||
{1642860000 43200 0 FJT}
|
||||
@@ -37,11 +37,11 @@ set TZData(:Pacific/Fiji) {
|
||||
{1674309600 43200 0 FJT}
|
||||
{1697896800 46800 1 FJST}
|
||||
{1705759200 43200 0 FJT}
|
||||
{1729346400 46800 1 FJST}
|
||||
{1729951200 46800 1 FJST}
|
||||
{1737208800 43200 0 FJT}
|
||||
{1760796000 46800 1 FJST}
|
||||
{1761400800 46800 1 FJST}
|
||||
{1768658400 43200 0 FJT}
|
||||
{1792245600 46800 1 FJST}
|
||||
{1792850400 46800 1 FJST}
|
||||
{1800712800 43200 0 FJT}
|
||||
{1824300000 46800 1 FJST}
|
||||
{1832162400 43200 0 FJT}
|
||||
@@ -49,9 +49,9 @@ set TZData(:Pacific/Fiji) {
|
||||
{1863612000 43200 0 FJT}
|
||||
{1887199200 46800 1 FJST}
|
||||
{1895061600 43200 0 FJT}
|
||||
{1918648800 46800 1 FJST}
|
||||
{1919253600 46800 1 FJST}
|
||||
{1926511200 43200 0 FJT}
|
||||
{1950098400 46800 1 FJST}
|
||||
{1950703200 46800 1 FJST}
|
||||
{1957960800 43200 0 FJT}
|
||||
{1982152800 46800 1 FJST}
|
||||
{1990015200 43200 0 FJT}
|
||||
@@ -61,9 +61,9 @@ set TZData(:Pacific/Fiji) {
|
||||
{2052914400 43200 0 FJT}
|
||||
{2076501600 46800 1 FJST}
|
||||
{2084364000 43200 0 FJT}
|
||||
{2107951200 46800 1 FJST}
|
||||
{2108556000 46800 1 FJST}
|
||||
{2115813600 43200 0 FJT}
|
||||
{2139400800 46800 1 FJST}
|
||||
{2140005600 46800 1 FJST}
|
||||
{2147868000 43200 0 FJT}
|
||||
{2171455200 46800 1 FJST}
|
||||
{2179317600 43200 0 FJT}
|
||||
@@ -71,11 +71,11 @@ set TZData(:Pacific/Fiji) {
|
||||
{2210767200 43200 0 FJT}
|
||||
{2234354400 46800 1 FJST}
|
||||
{2242216800 43200 0 FJT}
|
||||
{2265804000 46800 1 FJST}
|
||||
{2266408800 46800 1 FJST}
|
||||
{2273666400 43200 0 FJT}
|
||||
{2297253600 46800 1 FJST}
|
||||
{2297858400 46800 1 FJST}
|
||||
{2305116000 43200 0 FJT}
|
||||
{2328703200 46800 1 FJST}
|
||||
{2329308000 46800 1 FJST}
|
||||
{2337170400 43200 0 FJT}
|
||||
{2360757600 46800 1 FJST}
|
||||
{2368620000 43200 0 FJT}
|
||||
@@ -83,9 +83,9 @@ set TZData(:Pacific/Fiji) {
|
||||
{2400069600 43200 0 FJT}
|
||||
{2423656800 46800 1 FJST}
|
||||
{2431519200 43200 0 FJT}
|
||||
{2455106400 46800 1 FJST}
|
||||
{2455711200 46800 1 FJST}
|
||||
{2462968800 43200 0 FJT}
|
||||
{2486556000 46800 1 FJST}
|
||||
{2487160800 46800 1 FJST}
|
||||
{2495023200 43200 0 FJT}
|
||||
{2518610400 46800 1 FJST}
|
||||
{2526472800 43200 0 FJT}
|
||||
@@ -93,11 +93,11 @@ set TZData(:Pacific/Fiji) {
|
||||
{2557922400 43200 0 FJT}
|
||||
{2581509600 46800 1 FJST}
|
||||
{2589372000 43200 0 FJT}
|
||||
{2612959200 46800 1 FJST}
|
||||
{2613564000 46800 1 FJST}
|
||||
{2620821600 43200 0 FJT}
|
||||
{2644408800 46800 1 FJST}
|
||||
{2645013600 46800 1 FJST}
|
||||
{2652271200 43200 0 FJT}
|
||||
{2675858400 46800 1 FJST}
|
||||
{2676463200 46800 1 FJST}
|
||||
{2684325600 43200 0 FJT}
|
||||
{2707912800 46800 1 FJST}
|
||||
{2715775200 43200 0 FJT}
|
||||
@@ -105,9 +105,9 @@ set TZData(:Pacific/Fiji) {
|
||||
{2747224800 43200 0 FJT}
|
||||
{2770812000 46800 1 FJST}
|
||||
{2778674400 43200 0 FJT}
|
||||
{2802261600 46800 1 FJST}
|
||||
{2802866400 46800 1 FJST}
|
||||
{2810124000 43200 0 FJT}
|
||||
{2833711200 46800 1 FJST}
|
||||
{2834316000 46800 1 FJST}
|
||||
{2841573600 43200 0 FJT}
|
||||
{2865765600 46800 1 FJST}
|
||||
{2873628000 43200 0 FJT}
|
||||
@@ -117,9 +117,9 @@ set TZData(:Pacific/Fiji) {
|
||||
{2936527200 43200 0 FJT}
|
||||
{2960114400 46800 1 FJST}
|
||||
{2967976800 43200 0 FJT}
|
||||
{2991564000 46800 1 FJST}
|
||||
{2992168800 46800 1 FJST}
|
||||
{2999426400 43200 0 FJT}
|
||||
{3023013600 46800 1 FJST}
|
||||
{3023618400 46800 1 FJST}
|
||||
{3031480800 43200 0 FJT}
|
||||
{3055068000 46800 1 FJST}
|
||||
{3062930400 43200 0 FJT}
|
||||
@@ -127,11 +127,11 @@ set TZData(:Pacific/Fiji) {
|
||||
{3094380000 43200 0 FJT}
|
||||
{3117967200 46800 1 FJST}
|
||||
{3125829600 43200 0 FJT}
|
||||
{3149416800 46800 1 FJST}
|
||||
{3150021600 46800 1 FJST}
|
||||
{3157279200 43200 0 FJT}
|
||||
{3180866400 46800 1 FJST}
|
||||
{3181471200 46800 1 FJST}
|
||||
{3188728800 43200 0 FJT}
|
||||
{3212316000 46800 1 FJST}
|
||||
{3212920800 46800 1 FJST}
|
||||
{3220783200 43200 0 FJT}
|
||||
{3244370400 46800 1 FJST}
|
||||
{3252232800 43200 0 FJT}
|
||||
@@ -139,9 +139,9 @@ set TZData(:Pacific/Fiji) {
|
||||
{3283682400 43200 0 FJT}
|
||||
{3307269600 46800 1 FJST}
|
||||
{3315132000 43200 0 FJT}
|
||||
{3338719200 46800 1 FJST}
|
||||
{3339324000 46800 1 FJST}
|
||||
{3346581600 43200 0 FJT}
|
||||
{3370168800 46800 1 FJST}
|
||||
{3370773600 46800 1 FJST}
|
||||
{3378636000 43200 0 FJT}
|
||||
{3402223200 46800 1 FJST}
|
||||
{3410085600 43200 0 FJT}
|
||||
@@ -149,11 +149,11 @@ set TZData(:Pacific/Fiji) {
|
||||
{3441535200 43200 0 FJT}
|
||||
{3465122400 46800 1 FJST}
|
||||
{3472984800 43200 0 FJT}
|
||||
{3496572000 46800 1 FJST}
|
||||
{3497176800 46800 1 FJST}
|
||||
{3504434400 43200 0 FJT}
|
||||
{3528021600 46800 1 FJST}
|
||||
{3528626400 46800 1 FJST}
|
||||
{3535884000 43200 0 FJT}
|
||||
{3559471200 46800 1 FJST}
|
||||
{3560076000 46800 1 FJST}
|
||||
{3567938400 43200 0 FJT}
|
||||
{3591525600 46800 1 FJST}
|
||||
{3599388000 43200 0 FJT}
|
||||
@@ -161,9 +161,9 @@ set TZData(:Pacific/Fiji) {
|
||||
{3630837600 43200 0 FJT}
|
||||
{3654424800 46800 1 FJST}
|
||||
{3662287200 43200 0 FJT}
|
||||
{3685874400 46800 1 FJST}
|
||||
{3686479200 46800 1 FJST}
|
||||
{3693736800 43200 0 FJT}
|
||||
{3717324000 46800 1 FJST}
|
||||
{3717928800 46800 1 FJST}
|
||||
{3725186400 43200 0 FJT}
|
||||
{3749378400 46800 1 FJST}
|
||||
{3757240800 43200 0 FJT}
|
||||
@@ -173,9 +173,9 @@ set TZData(:Pacific/Fiji) {
|
||||
{3820140000 43200 0 FJT}
|
||||
{3843727200 46800 1 FJST}
|
||||
{3851589600 43200 0 FJT}
|
||||
{3875176800 46800 1 FJST}
|
||||
{3875781600 46800 1 FJST}
|
||||
{3883039200 43200 0 FJT}
|
||||
{3906626400 46800 1 FJST}
|
||||
{3907231200 46800 1 FJST}
|
||||
{3915093600 43200 0 FJT}
|
||||
{3938680800 46800 1 FJST}
|
||||
{3946543200 43200 0 FJT}
|
||||
@@ -183,9 +183,9 @@ set TZData(:Pacific/Fiji) {
|
||||
{3977992800 43200 0 FJT}
|
||||
{4001580000 46800 1 FJST}
|
||||
{4009442400 43200 0 FJT}
|
||||
{4033029600 46800 1 FJST}
|
||||
{4033634400 46800 1 FJST}
|
||||
{4040892000 43200 0 FJT}
|
||||
{4064479200 46800 1 FJST}
|
||||
{4065084000 46800 1 FJST}
|
||||
{4072341600 43200 0 FJT}
|
||||
{4095928800 46800 1 FJST}
|
||||
{4096533600 46800 1 FJST}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# created by tools/tclZIC.tcl - do not edit
|
||||
|
||||
set TZData(:Pacific/Johnston) {
|
||||
{-9223372036854775808 -36000 0 HST}
|
||||
if {![info exists TZData(Pacific/Honolulu)]} {
|
||||
LoadTimeZoneFile Pacific/Honolulu
|
||||
}
|
||||
set TZData(:Pacific/Johnston) $TZData(:Pacific/Honolulu)
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ needs to conform to the following conventions.
|
||||
distclean: Delete all generated files.
|
||||
|
||||
dist: Produce a copy of the package's source code distribution.
|
||||
Must respect the DIST_ROOT variable determing where to
|
||||
Must respect the DIST_ROOT variable determining where to
|
||||
write the generated directory.
|
||||
|
||||
Packages that are written to make use of the Tcl Extension Architecture (TEA)
|
||||
|
||||
+71
-32
@@ -2499,6 +2499,34 @@ test binary-71.9 {binary decode hex} -body {
|
||||
test binary-71.10 {binary decode hex} -body {
|
||||
string length [binary decode hex " "]
|
||||
} -result 0
|
||||
test binary-71.11 {binary decode hex: Bug b98fa55285} -body {
|
||||
apply {{} {
|
||||
set str "137b6f95e7519389e7c4b36599781e2ccf492699649249aae43fbe8c26\n"
|
||||
set decoded [binary decode hex $str]
|
||||
list [string length $decoded] [scan [string index $decoded end] %c]
|
||||
}}
|
||||
} -result {29 38}
|
||||
test binary-71.12 {binary decode hex: Bug b98fa55285 cross check} -body {
|
||||
apply {{} {
|
||||
set str "137b6f95e7519389e7c4b36599781e2ccf492699649249aae43fbe8c2\n"
|
||||
set decoded [binary decode hex $str]
|
||||
list [string length $decoded] [scan [string index $decoded end] %c]
|
||||
}}
|
||||
} -result {28 140}
|
||||
test binary-71.13 {binary decode hex: Bug b98fa55285 cross check} -body {
|
||||
apply {{} {
|
||||
set str "137b6f95e7519389e7c4b36599781e2ccf492699649249aae43fbe8c2\n\n"
|
||||
set decoded [binary decode hex $str]
|
||||
list [string length $decoded] [scan [string index $decoded end] %c]
|
||||
}}
|
||||
} -result {28 140}
|
||||
test binary-71.14 {binary decode hex: Bug b98fa55285 cross check} -body {
|
||||
apply {{} {
|
||||
set str "137b6f95e7519389e7c4b36599781e2ccf492699649249aae43fbe8c2\n\n\n"
|
||||
set decoded [binary decode hex $str]
|
||||
list [string length $decoded] [scan [string index $decoded end] %c]
|
||||
}}
|
||||
} -result {28 140}
|
||||
|
||||
test binary-72.1 {binary encode base64} -body {
|
||||
binary encode base64
|
||||
@@ -2677,105 +2705,116 @@ test binary-74.1 {binary encode uuencode} -body {
|
||||
} -returnCodes error -match glob -result "wrong # args: *"
|
||||
test binary-74.2 {binary encode uuencode} -body {
|
||||
binary encode uuencode abc
|
||||
} -result {86)C}
|
||||
} -result {#86)C
|
||||
}
|
||||
test binary-74.3 {binary encode uuencode} -body {
|
||||
binary encode uuencode {}
|
||||
} -result {}
|
||||
test binary-74.4 {binary encode uuencode} -body {
|
||||
binary encode uuencode [string repeat abc 20]
|
||||
} -result [string repeat 86)C 20]
|
||||
} -result "M[string repeat 86)C 15]\n/[string repeat 86)C 5]\n"
|
||||
test binary-74.5 {binary encode uuencode} -body {
|
||||
binary encode uuencode \0\1\2\3\4\0\1\2\3
|
||||
} -result "``\$\"`P0``0(#"
|
||||
} -result ")``\$\"`P0``0(#\n"
|
||||
test binary-74.6 {binary encode uuencode} -body {
|
||||
binary encode uuencode \0
|
||||
} -result {````}
|
||||
} -result {!``
|
||||
}
|
||||
test binary-74.7 {binary encode uuencode} -body {
|
||||
binary encode uuencode \0\0
|
||||
} -result {````}
|
||||
} -result "\"```
|
||||
"
|
||||
test binary-74.8 {binary encode uuencode} -body {
|
||||
binary encode uuencode \0\0\0
|
||||
} -result {````}
|
||||
} -result {#````
|
||||
}
|
||||
test binary-74.9 {binary encode uuencode} -body {
|
||||
binary encode uuencode \0\0\0\0
|
||||
} -result {````````}
|
||||
test binary-74.10 {binary encode uuencode} -body {
|
||||
binary encode uuencode -maxlen 0 -wrapchar | abcabcabc
|
||||
} -result {86)C86)C86)C}
|
||||
test binary-74.11 {binary encode uuencode} -body {
|
||||
binary encode uuencode -maxlen 1 -wrapchar | abcabcabc
|
||||
} -result {8|6|)|C|8|6|)|C|8|6|)|C}
|
||||
} -result {$``````
|
||||
}
|
||||
test binary-74.10 {binary encode uuencode} -returnCodes error -body {
|
||||
binary encode uuencode -foo 30 abcabcabc
|
||||
} -result {bad option "-foo": must be -maxlen or -wrapchar}
|
||||
test binary-74.11 {binary encode uuencode} -returnCodes error -body {
|
||||
binary encode uuencode -maxlen 1 abcabcabc
|
||||
} -result {line length out of range}
|
||||
test binary-74.12 {binary encode uuencode} -body {
|
||||
binary encode uuencode -maxlen 3 -wrapchar | abcabcabc
|
||||
} -result {!80|!8@|!8P|!80|!8@|!8P|!80|!8@|!8P|}
|
||||
|
||||
test binary-75.1 {binary decode uuencode} -body {
|
||||
binary decode uuencode
|
||||
} -returnCodes error -match glob -result "wrong # args: *"
|
||||
test binary-75.2 {binary decode uuencode} -body {
|
||||
binary decode uuencode 86)C
|
||||
binary decode uuencode "#86)C\n"
|
||||
} -result {abc}
|
||||
test binary-75.3 {binary decode uuencode} -body {
|
||||
binary decode uuencode {}
|
||||
} -result {}
|
||||
test binary-75.3.1 {binary decode uuencode} -body {
|
||||
binary decode uuencode `\n
|
||||
} -result {}
|
||||
test binary-75.4 {binary decode uuencode} -body {
|
||||
binary decode uuencode [string repeat "86)C" 20]
|
||||
binary decode uuencode "M[string repeat 86)C 15]\n/[string repeat 86)C 5]\n"
|
||||
} -result [string repeat abc 20]
|
||||
test binary-75.5 {binary decode uuencode} -body {
|
||||
binary decode uuencode "``\$\"`P0``0(#"
|
||||
binary decode uuencode ")``\$\"`P0``0(#"
|
||||
} -result "\0\1\2\3\4\0\1\2\3"
|
||||
test binary-75.6 {binary decode uuencode} -body {
|
||||
string length [binary decode uuencode {`}]
|
||||
string length [binary decode uuencode "`\n"]
|
||||
} -result 0
|
||||
test binary-75.7 {binary decode uuencode} -body {
|
||||
string length [binary decode uuencode {``}]
|
||||
string length [binary decode uuencode "!`\n"]
|
||||
} -result 1
|
||||
test binary-75.8 {binary decode uuencode} -body {
|
||||
string length [binary decode uuencode {```}]
|
||||
string length [binary decode uuencode "\"``\n"]
|
||||
} -result 2
|
||||
test binary-75.9 {binary decode uuencode} -body {
|
||||
string length [binary decode uuencode {````}]
|
||||
string length [binary decode uuencode "#```\n"]
|
||||
} -result 3
|
||||
test binary-75.10 {binary decode uuencode} -body {
|
||||
set s "[string repeat 86)C 10]\n[string repeat 86)C 10]"
|
||||
set s ">[string repeat 86)C 10]\n>[string repeat 86)C 10]"
|
||||
binary decode uuencode $s
|
||||
} -result [string repeat abc 20]
|
||||
test binary-75.11 {binary decode uuencode} -body {
|
||||
set s "[string repeat 86)C 10]\n [string repeat 86)C 10]"
|
||||
set s ">[string repeat 86)C 10]\n\t>\t[string repeat 86)C 10]\r"
|
||||
binary decode uuencode $s
|
||||
} -result [string repeat abc 20]
|
||||
test binary-75.12 {binary decode uuencode} -body {
|
||||
binary decode uuencode -strict "|86)C"
|
||||
} -returnCodes error -match glob -result {invalid uuencode character "|" at position 0}
|
||||
test binary-75.13 {binary decode uuencode} -body {
|
||||
set s "[string repeat 86)C 10]|[string repeat 86)C 10]"
|
||||
set s ">[string repeat 86)C 10]|[string repeat 86)C 10]"
|
||||
binary decode uuencode -strict $s
|
||||
} -returnCodes error -match glob -result {invalid uuencode character "|" at position 40}
|
||||
} -returnCodes error -match glob -result {invalid uuencode character "|" at position 41}
|
||||
test binary-75.14 {binary decode uuencode} -body {
|
||||
set s "[string repeat 86)C 10]\n [string repeat 86)C 10]"
|
||||
set s ">[string repeat 86)C 10]\na[string repeat 86)C 10]"
|
||||
binary decode uuencode -strict $s
|
||||
} -returnCodes error -match glob -result {invalid uuencode character *}
|
||||
test binary-75.20 {binary decode uuencode} -body {
|
||||
set r [binary decode uuencode 8]
|
||||
set r [binary decode uuencode " 8"]
|
||||
list [string length $r] $r
|
||||
} -result {0 {}}
|
||||
test binary-75.21 {binary decode uuencode} -body {
|
||||
set r [binary decode uuencode 86]
|
||||
set r [binary decode uuencode "!86"]
|
||||
list [string length $r] $r
|
||||
} -result {1 a}
|
||||
test binary-75.22 {binary decode uuencode} -body {
|
||||
set r [binary decode uuencode 86)]
|
||||
set r [binary decode uuencode "\"86)"]
|
||||
list [string length $r] $r
|
||||
} -result {2 ab}
|
||||
test binary-75.23 {binary decode uuencode} -body {
|
||||
set r [binary decode uuencode 86)C]
|
||||
set r [binary decode uuencode "#86)C"]
|
||||
list [string length $r] $r
|
||||
} -result {3 abc}
|
||||
test binary-75.24 {binary decode uuencode} -body {
|
||||
set s "04)\# "
|
||||
set s "#04)\# "
|
||||
binary decode uuencode $s
|
||||
} -result ABC
|
||||
test binary-75.25 {binary decode uuencode} -body {
|
||||
set s "04)\#z"
|
||||
set s "#04)\#z"
|
||||
binary decode uuencode $s
|
||||
} -returnCodes error -match glob -result {invalid uuencode character "z" at position 4}
|
||||
} -returnCodes error -match glob -result {invalid uuencode character "z" at position 5}
|
||||
test binary-75.26 {binary decode uuencode} -body {
|
||||
string length [binary decode uuencode " "]
|
||||
} -result 0
|
||||
|
||||
@@ -713,6 +713,70 @@ test compile-19.0 {Bug 3614102: reset stack housekeeping} -body {
|
||||
apply {{} {list [if 1]}}
|
||||
} -returnCodes error -match glob -result *
|
||||
|
||||
test compile-20.1 {ensure there are no infinite loops in optimizing} {
|
||||
tcl::unsupported::disassemble script {
|
||||
while 1 {
|
||||
return -code continue -level 0
|
||||
}
|
||||
}
|
||||
return
|
||||
} {}
|
||||
test compile-20.2 {ensure there are no infinite loops in optimizing} {
|
||||
tcl::unsupported::disassemble script {
|
||||
while 1 {
|
||||
while 1 {
|
||||
return -code break -level 0
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
} {}
|
||||
|
||||
test compile-21.1 {stack balance management} {
|
||||
apply {{} {
|
||||
set result {}
|
||||
while 1 {
|
||||
lappend result a
|
||||
lappend result [list b [break]]
|
||||
lappend result c
|
||||
}
|
||||
return $result
|
||||
}}
|
||||
} a
|
||||
test compile-21.2 {stack balance management} {
|
||||
apply {{} {
|
||||
set result {}
|
||||
while {[incr i] <= 10} {
|
||||
lappend result $i
|
||||
lappend result [list b [continue] c]
|
||||
lappend result c
|
||||
}
|
||||
return $result
|
||||
}}
|
||||
} {1 2 3 4 5 6 7 8 9 10}
|
||||
test compile-21.3 {stack balance management} {
|
||||
apply {args {
|
||||
set result {}
|
||||
while 1 {
|
||||
lappend result a
|
||||
lappend result [concat {*}$args [break]]
|
||||
lappend result c
|
||||
}
|
||||
return $result
|
||||
}} P Q R S T
|
||||
} a
|
||||
test compile-21.4 {stack balance management} {
|
||||
apply {args {
|
||||
set result {}
|
||||
while {[incr i] <= 10} {
|
||||
lappend result $i
|
||||
lappend result [concat {*}$args [continue] c]
|
||||
lappend result c
|
||||
}
|
||||
return $result
|
||||
}} P Q R S T
|
||||
} {1 2 3 4 5 6 7 8 9 10}
|
||||
|
||||
# TODO sometime - check that bytecode from tbcload is *not* disassembled.
|
||||
|
||||
# cleanup
|
||||
|
||||
@@ -633,6 +633,15 @@ test coroutine-7.6 {Early yield crashes} {
|
||||
rename foo {}
|
||||
} {}
|
||||
|
||||
test coroutine-7.7 {Bug 2486550} -setup {
|
||||
interp hide {} yield
|
||||
} -body {
|
||||
coroutine demo interp invokehidden {} yield ok
|
||||
} -cleanup {
|
||||
demo
|
||||
interp expose {} yield
|
||||
} -result ok
|
||||
|
||||
|
||||
# cleanup
|
||||
unset lambda
|
||||
|
||||
+73
-2
@@ -1604,7 +1604,7 @@ test dict-23.1 {dict compilation crash: Bug 3487626} {
|
||||
}
|
||||
}} [linenumber]}}
|
||||
} 5
|
||||
test dict-23.2 {dict compilation crash: Bug 3487626} knownBug {
|
||||
test dict-23.2 {dict compilation crash: Bug 3487626} {
|
||||
# Something isn't quite right in line number and continuation line
|
||||
# tracking; at time of writing, this test produces 7, not 5, which
|
||||
# indicates that the extra newlines in the non-script argument are
|
||||
@@ -1838,7 +1838,7 @@ test dict-24.20.1 {dict compilation crash: 'dict for' bug 3487626} {
|
||||
}
|
||||
}} [linenumber]}}
|
||||
} 5
|
||||
test dict-24.21 {dict compilation crash: 'dict for' bug 3487626} knownBug {
|
||||
test dict-24.21 {dict compilation crash: 'dict for' bug 3487626} {
|
||||
apply {{} {apply {n {
|
||||
set e {}
|
||||
set k {}
|
||||
@@ -1865,6 +1865,77 @@ j
|
||||
}
|
||||
}} [linenumber]}}
|
||||
} 5
|
||||
test dict-23.3 {CompileWord OBOE} {
|
||||
# segfault when buggy
|
||||
apply {{} {tcl::dict::lappend foo bar \
|
||||
[format baz]}}
|
||||
} {bar baz}
|
||||
test dict-23.4 {CompileWord OBOE} {
|
||||
apply {n {
|
||||
dict set foo {*}{
|
||||
} [return [incr n -[linenumber]]] val
|
||||
}} [linenumber]
|
||||
} 1
|
||||
test dict-23.5 {CompileWord OBOE} {
|
||||
# segfault when buggy
|
||||
apply {{} {tcl::dict::incr foo \
|
||||
[format bar]}}
|
||||
} {bar 1}
|
||||
test dict-23.6 {CompileWord OBOE} {
|
||||
apply {n {
|
||||
dict get {a b} {*}{
|
||||
} [return [incr n -[linenumber]]]
|
||||
}} [linenumber]
|
||||
} 1
|
||||
test dict-23.7 {CompileWord OBOE} {
|
||||
apply {n {
|
||||
dict for {a b} [return [incr n -[linenumber]]] {*}{
|
||||
} {}
|
||||
}} [linenumber]
|
||||
} 2
|
||||
test dict-23.8 {CompileWord OBOE} {
|
||||
apply {n {
|
||||
dict update foo {*}{
|
||||
} [return [incr n -[linenumber]]] x {}
|
||||
}} [linenumber]
|
||||
} 1
|
||||
test dict-23.9 {CompileWord OBOE} {
|
||||
apply {n {
|
||||
dict exists {} {*}{
|
||||
} [return [incr n -[linenumber]]]
|
||||
}} [linenumber]
|
||||
} 1
|
||||
test dict-23.10 {CompileWord OBOE} {
|
||||
apply {n {
|
||||
dict with foo {*}{
|
||||
} [return [incr n -[linenumber]]] {}
|
||||
}} [linenumber]
|
||||
} 1
|
||||
test dict-23.11 {CompileWord OBOE} {
|
||||
apply {n {
|
||||
dict with ::foo {*}{
|
||||
} [return [incr n -[linenumber]]] {}
|
||||
}} [linenumber]
|
||||
} 1
|
||||
test dict-23.12 {CompileWord OBOE} {
|
||||
apply {n {
|
||||
dict with {*}{
|
||||
} [return [incr n -[linenumber]]] {}
|
||||
}} [linenumber]
|
||||
} 1
|
||||
test dict-23.13 {CompileWord OBOE} {
|
||||
apply {n {
|
||||
dict with {*}{
|
||||
} [return [incr n -[linenumber]]] {bar}
|
||||
}} [linenumber]
|
||||
} 1
|
||||
test dict-23.14 {CompileWord OBOE} {
|
||||
apply {n {
|
||||
dict with foo {*}{
|
||||
} [return [incr n -[linenumber]]] {bar}
|
||||
}} [linenumber]
|
||||
} 1
|
||||
|
||||
rename linenumber {}
|
||||
test dict-24.22 {dict map results (non-compiled)} {
|
||||
dict map {k v} [dict map {k v} {a 1 b 2 c 3 d 4} { list $v $k }] {
|
||||
|
||||
@@ -291,6 +291,29 @@ test env-6.1 {corner cases - add lots of env variables} {} {
|
||||
expr {[array size env] - $size}
|
||||
} 100
|
||||
|
||||
test env-7.1 {[219226]: whole env array should not be unset by read} {
|
||||
set n [array size env]
|
||||
set s [array startsearch env]
|
||||
while {[array anymore env $s]} {
|
||||
array nextelement env $s
|
||||
incr n -1
|
||||
}
|
||||
array donesearch env $s
|
||||
return $n
|
||||
} 0
|
||||
test env-7.2 {[219226]: links to env elements should not be removed by read} {
|
||||
apply {{} {
|
||||
set ::env(test7_2) ok
|
||||
upvar env(test7_2) elem
|
||||
set ::env(PATH)
|
||||
try {
|
||||
return $elem
|
||||
} finally {
|
||||
unset ::env(test7_2)
|
||||
}
|
||||
}}
|
||||
} ok
|
||||
|
||||
# Restore the environment variables at the end of the test.
|
||||
|
||||
foreach name [array names env] {
|
||||
|
||||
@@ -182,6 +182,16 @@ test error-4.7 {errorstack via options dict } -body {
|
||||
catch {f 12} m d
|
||||
dict get $d -errorstack
|
||||
} -match glob -result {INNER * CALL {g 1212} CALL {f 12} UP 1}
|
||||
test error-4.8 {errorstack from exec traces} -body {
|
||||
proc foo args {}
|
||||
proc goo {} foo
|
||||
trace add execution foo enter {error bar;#}
|
||||
catch goo m d
|
||||
dict get $d -errorstack
|
||||
} -cleanup {
|
||||
rename goo {}; rename foo {}
|
||||
unset -nocomplain m d
|
||||
} -result {INNER {error bar} CALL goo UP 1}
|
||||
|
||||
# Errors in error command itself
|
||||
|
||||
|
||||
+242
@@ -942,6 +942,248 @@ test for-7.8 {Bug 3614226: ensure that continue only cleans up the right amount}
|
||||
expr {$end - $tmp}
|
||||
}}
|
||||
} 0
|
||||
test for-7.9 {Bug 3614226: ensure that break from invoked command cleans up the stack} memory {
|
||||
apply {{} {
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
for {set x 0} {$x < 5} {incr x} {
|
||||
list a b c [apply {{} {return -code break}}] d e f
|
||||
}
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}}
|
||||
} 0
|
||||
test for-7.10 {Bug 3614226: ensure that continue from invoked command cleans up the stack} memory {
|
||||
apply {{} {
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
for {set x 0} {$x < 5} {incr x} {
|
||||
list a b c [apply {{} {return -code continue}}] d e f
|
||||
}
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}}
|
||||
} 0
|
||||
test for-7.11 {Bug 3614226: ensure that break from invoked command cleans up the expansion stack} memory {
|
||||
apply {{} {
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
for {set x 0} {[incr x]<50} {} {
|
||||
puts {*}[puts a b c {*}[apply {{} {return -code break}}] d e f]
|
||||
}
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}}
|
||||
} 0
|
||||
test for-7.12 {Bug 3614226: ensure that continue from invoked command cleans up the expansion stack} memory {
|
||||
apply {{} {
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
for {set x 0} {[incr x]<50} {} {
|
||||
puts {*}[puts a b c {*}[apply {{} {
|
||||
return -code continue
|
||||
}}] d e f]
|
||||
}
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}}
|
||||
} 0
|
||||
test for-7.13 {Bug 3614226: ensure that break from invoked command cleans up the combination of main and expansion stack} memory {
|
||||
apply {{} {
|
||||
set l [lrepeat 50 p q r]
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
for {set x 0} {[incr x]<50} {} {
|
||||
puts [puts {*}$l {*}[puts a b c {*}$l {*}[apply {{} {
|
||||
return -code break
|
||||
}}] d e f]]
|
||||
}
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}}
|
||||
} 0
|
||||
test for-7.14 {Bug 3614226: ensure that continue from invoked command cleans up the combination of main and expansion stack} memory {
|
||||
apply {{} {
|
||||
set l [lrepeat 50 p q r]
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
for {set x 0} {[incr x]<50} {} {
|
||||
puts [puts {*}$l {*}[puts a b c {*}$l {*}[apply {{} {
|
||||
return -code continue
|
||||
}}] d e f]]
|
||||
}
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}}
|
||||
} 0
|
||||
test for-7.15 {Bug 3614226: ensure that break from invoked command only cleans up the right amount} memory {
|
||||
apply {{} {
|
||||
set l [lrepeat 50 p q r]
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
unset -nocomplain {*}[for {set x 0} {[incr x]<50} {} {
|
||||
puts [puts {*}$l {*}[puts a b c {*}$l {*}[apply {{} {
|
||||
return -code break
|
||||
}}] d e f]]
|
||||
}]
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}}
|
||||
} 0
|
||||
test for-7.16 {Bug 3614226: ensure that continue from invoked command only cleans up the right amount} memory {
|
||||
apply {{} {
|
||||
set l [lrepeat 50 p q r]
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
unset -nocomplain {*}[for {set x 0} {[incr x]<50} {} {
|
||||
puts [puts {*}$l {*}[puts a b c {*}$l {*}[apply {{} {
|
||||
return -code continue
|
||||
}}] d e f]]
|
||||
}]
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}}
|
||||
} 0
|
||||
test for-7.17 {Bug 3614226: ensure that break from expanded command cleans up the stack} memory {
|
||||
apply {op {
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
for {set x 0} {$x < 5} {incr x} {
|
||||
list a b c [{*}$op] d e f
|
||||
}
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}} {return -level 0 -code break}
|
||||
} 0
|
||||
test for-7.18 {Bug 3614226: ensure that continue from expanded command cleans up the stack} memory {
|
||||
apply {op {
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
for {set x 0} {$x < 5} {incr x} {
|
||||
list a b c [{*}$op] d e f
|
||||
}
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}} {return -level 0 -code continue}
|
||||
} 0
|
||||
test for-7.19 {Bug 3614226: ensure that break from expanded command cleans up the expansion stack} memory {
|
||||
apply {op {
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
for {set x 0} {[incr x]<50} {} {
|
||||
puts {*}[puts a b c {*}[{*}$op] d e f]
|
||||
}
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}} {return -level 0 -code break}
|
||||
} 0
|
||||
test for-7.20 {Bug 3614226: ensure that continue from expanded command cleans up the expansion stack} memory {
|
||||
apply {op {
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
for {set x 0} {[incr x]<50} {} {
|
||||
puts {*}[puts a b c {*}[{*}$op] d e f]
|
||||
}
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}} {return -level 0 -code continue}
|
||||
} 0
|
||||
test for-7.21 {Bug 3614226: ensure that break from expanded command cleans up the combination of main and expansion stack} memory {
|
||||
apply {op {
|
||||
set l [lrepeat 50 p q r]
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
for {set x 0} {[incr x]<50} {} {
|
||||
puts [puts {*}$l {*}[puts a b c {*}$l {*}[{*}$op] d e f]]
|
||||
}
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}} {return -level 0 -code break}
|
||||
} 0
|
||||
test for-7.22 {Bug 3614226: ensure that continue from expanded command cleans up the combination of main and expansion stack} memory {
|
||||
apply {op {
|
||||
set l [lrepeat 50 p q r]
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
for {set x 0} {[incr x]<50} {} {
|
||||
puts [puts {*}$l {*}[puts a b c {*}$l {*}[{*}$op] d e f]]
|
||||
}
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}} {return -level 0 -code continue}
|
||||
} 0
|
||||
test for-7.23 {Bug 3614226: ensure that break from expanded command only cleans up the right amount} memory {
|
||||
apply {op {
|
||||
set l [lrepeat 50 p q r]
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
unset -nocomplain {*}[for {set x 0} {[incr x]<50} {} {
|
||||
puts [puts {*}$l {*}[puts a b c {*}$l {*}[{*}$op] d e f]]
|
||||
}]
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}} {return -level 0 -code break}
|
||||
} 0
|
||||
test for-7.24 {Bug 3614226: ensure that continue from expanded command only cleans up the right amount} memory {
|
||||
apply {op {
|
||||
set l [lrepeat 50 p q r]
|
||||
# Can't use [memtest]; must be careful when we change stack frames
|
||||
set end [meminfo]
|
||||
for {set i 0} {$i < 5} {incr i} {
|
||||
unset -nocomplain {*}[for {set x 0} {[incr x]<50} {} {
|
||||
puts [puts {*}$l {*}[puts a b c {*}$l {*}[{*}$op] d e f]]
|
||||
}]
|
||||
set tmp $end
|
||||
set end [meminfo]
|
||||
}
|
||||
expr {$end - $tmp}
|
||||
}} {return -level 0 -code continue}
|
||||
} 0
|
||||
|
||||
# cleanup
|
||||
::tcltest::cleanupTests
|
||||
|
||||
@@ -254,6 +254,17 @@ test foreach-9.1 {compiled empty var list} {
|
||||
list [catch { foo } msg] $msg
|
||||
} {1 {foreach varlist is empty}}
|
||||
|
||||
test foreach-9.2 {line numbers} -setup {
|
||||
proc linenumber {} {dict get [info frame -1] line}
|
||||
} -body {
|
||||
apply {n {
|
||||
foreach x y {*}{
|
||||
} {return [incr n -[linenumber]]}
|
||||
}} [linenumber]
|
||||
} -cleanup {
|
||||
rename linenumber {}
|
||||
} -result 1
|
||||
|
||||
test foreach-10.1 {foreach: [Bug 1671087]} -setup {
|
||||
proc demo {} {
|
||||
set vals {1 2 3 4}
|
||||
|
||||
+32
-2
@@ -2,12 +2,12 @@
|
||||
# Sourcing this file into Tcl runs the tests and generates output for errors.
|
||||
# No output means no errors were found.
|
||||
#
|
||||
# Copyright (c) 2006-2012 Donal K. Fellows
|
||||
# Copyright (c) 2006-2013 Donal K. Fellows
|
||||
#
|
||||
# See the file "license.terms" for information on usage and redistribution of
|
||||
# this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
|
||||
package require TclOO 1.0
|
||||
package require TclOO 1.0.1
|
||||
package require tcltest 2
|
||||
if {"::tcltest" in [namespace children]} {
|
||||
namespace import -force ::tcltest::*
|
||||
@@ -1839,6 +1839,36 @@ test oo-15.9 {ensemble rewriting must not bleed through oo::copy} -setup {
|
||||
} -returnCodes error -cleanup {
|
||||
Foo destroy
|
||||
} -result {wrong # args: should be "::bar <cloned> a b"}
|
||||
test oo-15.10 {variable binding must not bleed through oo::copy} -setup {
|
||||
oo::class create FooClass
|
||||
set result {}
|
||||
} -body {
|
||||
set obj1 [FooClass new]
|
||||
oo::objdefine $obj1 {
|
||||
variable var
|
||||
method m {} {
|
||||
set var foo
|
||||
}
|
||||
method get {} {
|
||||
return $var
|
||||
}
|
||||
export eval
|
||||
}
|
||||
|
||||
$obj1 m
|
||||
lappend result [$obj1 get]
|
||||
set obj2 [oo::copy $obj1]
|
||||
$obj2 eval {
|
||||
set var bar
|
||||
}
|
||||
lappend result [$obj2 get]
|
||||
$obj1 eval {
|
||||
set var grill
|
||||
}
|
||||
lappend result [$obj1 get] [$obj2 get]
|
||||
} -cleanup {
|
||||
FooClass destroy
|
||||
} -result {foo bar grill bar}
|
||||
|
||||
test oo-16.1 {OO: object introspection} -body {
|
||||
info object
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
# See the file "license.terms" for information on usage and redistribution of
|
||||
# this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
|
||||
package require TclOO 1.0
|
||||
package require TclOO 1.0.1
|
||||
package require tcltest 2
|
||||
if {"::tcltest" in [namespace children]} {
|
||||
namespace import -force ::tcltest::*
|
||||
|
||||
@@ -187,6 +187,16 @@ test source-3.5 {return with special code etc.} -setup {
|
||||
invoked from within
|
||||
"source $sourcefile"} {a b c}}
|
||||
|
||||
test source-4.1 {continuation line parsing} -setup {
|
||||
set sourcefile [makeFile [string map {CL \\\n} {
|
||||
format %s "[dict get [info frame 0] type]:CL[dict get [info frame 0] line]CL[dict get [info frame 0] line]CL[dict get [info frame 0] line]"
|
||||
}] source.file]
|
||||
} -body {
|
||||
source $sourcefile
|
||||
} -cleanup {
|
||||
removeFile source.file
|
||||
} -result {source: 3 4 5}
|
||||
|
||||
test source-6.1 {source is binary ok} -setup {
|
||||
# Note [makeFile] writes in the system encoding.
|
||||
# [source] defaults to reading in the system encoding.
|
||||
|
||||
@@ -414,6 +414,17 @@ test upvar-9.7 {Tcl_UpVar procedure} testupvar {
|
||||
} {1234}
|
||||
catch {unset a}
|
||||
|
||||
test upvar-10.1 {CompileWord OBOE} -setup {
|
||||
proc linenumber {} {dict get [info frame -1] line}
|
||||
} -body {
|
||||
apply {n {
|
||||
upvar 1 {*}{
|
||||
} [return [incr n -[linenumber]]] x
|
||||
}} [linenumber]
|
||||
} -cleanup {
|
||||
rename linenumber {}
|
||||
} -result 1
|
||||
|
||||
#
|
||||
# Tests for 'namespace upvar'. As the implementation is essentially the same as
|
||||
# for 'upvar', we only test that the variables are linked correctly, i.e., we
|
||||
@@ -536,6 +547,38 @@ test upvar-NS-2.2 {TIP 323} -setup {
|
||||
} -cleanup {
|
||||
namespace delete test_ns_1
|
||||
} -result {}
|
||||
|
||||
test upvar-NS-3.1 {CompileWord OBOE} -setup {
|
||||
proc linenumber {} {dict get [info frame -1] line}
|
||||
} -body {
|
||||
apply {n {
|
||||
namespace upvar {*}{
|
||||
} [return [incr n -[linenumber]]] x y
|
||||
}} [linenumber]
|
||||
} -cleanup {
|
||||
rename linenumber {}
|
||||
} -result 1
|
||||
test upvar-NS-3.2 {CompileWord OBOE} -setup {
|
||||
proc linenumber {} {dict get [info frame -1] line}
|
||||
} -body {
|
||||
apply {n {
|
||||
namespace upvar :: {*}{
|
||||
} [return [incr n -[linenumber]]] x
|
||||
}} [linenumber]
|
||||
} -cleanup {
|
||||
rename linenumber {}
|
||||
} -result 1
|
||||
test upvar-NS-3.3 {CompileWord OBOE} -setup {
|
||||
proc linenumber {} {dict get [info frame -1] line}
|
||||
} -body {
|
||||
apply {n {
|
||||
variable x {*}{
|
||||
} [return [incr n -[linenumber]]]
|
||||
}} [linenumber]
|
||||
} -cleanup {
|
||||
rename linenumber {}
|
||||
} -result 1
|
||||
|
||||
|
||||
# cleanup
|
||||
::tcltest::cleanupTests
|
||||
|
||||
@@ -748,6 +748,9 @@ test var-15.1 {segfault in [unset], [Bug 735335]} {
|
||||
namespace eval test A useSomeUnlikelyNameHere
|
||||
namespace eval test unset useSomeUnlikelyNameHere
|
||||
} {}
|
||||
test var-15.2 {compiled unset evaluation order, Bug 3970f54c4e} {
|
||||
apply {{} {unset foo [return ok]}}
|
||||
} ok
|
||||
|
||||
test var-16.1 {CallVarTraces: save/restore interp error state} {
|
||||
trace add variable ::errorCode write " ;#"
|
||||
@@ -862,6 +865,19 @@ test var-20.8 {array set compilation correctness: Bug 3603163} -setup {
|
||||
}}
|
||||
array size x
|
||||
} -result 0
|
||||
|
||||
test var-21.0 {PushVarNameWord OBOE in compiled unset} -setup {
|
||||
proc linenumber {} {dict get [info frame -1] line}
|
||||
} -body {
|
||||
apply {n {
|
||||
set foo bar
|
||||
unset foo {*}{
|
||||
} [return [incr n -[linenumber]]]
|
||||
}} [linenumber]
|
||||
} -cleanup {
|
||||
rename linenumber {}
|
||||
} -result 1
|
||||
|
||||
|
||||
catch {namespace delete ns}
|
||||
catch {unset arr}
|
||||
|
||||
+12
-9
@@ -233,7 +233,7 @@ test zlib-8.7 {transformation and fconfigure} -setup {
|
||||
# Dictionary is that which is proposed _in_ SPDY draft
|
||||
set spdyHeaders "HTTP/1.0 200 OK\r\nContent-Type: text/html; charset=utf-8\r\nX-Robots-Tag: noarchive\r\nLast-Modified: Tue, 05 Jun 2012 02:43:25 GMT\r\nETag: \"1338864205129|#public|0|en|||0\"\r\nExpires: Tue, 05 Jun 2012 16:17:11 GMT\r\nDate: Tue, 05 Jun 2012 16:17:06 GMT\r\nCache-Control: public, max-age=5\r\nX-Content-Type-Options: nosniff\r\nX-XSS-Protection: 1; mode=block\r\nServer: GSE\r\n"
|
||||
set spdyDict "optionsgetheadpostputdeletetraceacceptaccept-charsetaccept-encodingaccept-languageauthorizationexpectfromhostif-modified-sinceif-matchif-none-matchif-rangeif-unmodifiedsincemax-forwardsproxy-authorizationrangerefererteuser-agent100101200201202203204205206300301302303304305306307400401402403404405406407408409410411412413414415416417500501502503504505accept-rangesageetaglocationproxy-authenticatepublicretry-afterservervarywarningwww-authenticateallowcontent-basecontent-encodingcache-controlconnectiondatetrailertransfer-encodingupgradeviawarningcontent-languagecontent-lengthcontent-locationcontent-md5content-rangecontent-typeetagexpireslast-modifiedset-cookieMondayTuesdayWednesdayThursdayFridaySaturdaySundayJanFebMarAprMayJunJulAugSepOctNovDecchunkedtext/htmlimage/pngimage/jpgimage/gifapplication/xmlapplication/xhtmltext/plainpublicmax-agecharset=iso-8859-1utf-8gzipdeflateHTTP/1.1statusversionurl"
|
||||
test zlib-8.8 {transformtion and fconfigure} -setup {
|
||||
test zlib-8.8 {transformation and fconfigure} -setup {
|
||||
lassign [chan pipe] inSide outSide
|
||||
} -constraints zlib -body {
|
||||
zlib push compress $outSide -dictionary $spdyDict
|
||||
@@ -250,7 +250,7 @@ test zlib-8.8 {transformtion and fconfigure} -setup {
|
||||
catch {close $outSide}
|
||||
catch {close $inSide}
|
||||
} -result {260 222 {need dictionary} {TCL ZLIB NEED_DICT 2381337010} 2381337010}
|
||||
test zlib-8.9 {transformtion and fconfigure} -setup {
|
||||
test zlib-8.9 {transformation and fconfigure} -setup {
|
||||
lassign [chan pipe] inSide outSide
|
||||
set strm [zlib stream decompress]
|
||||
} -constraints zlib -body {
|
||||
@@ -267,7 +267,7 @@ test zlib-8.9 {transformtion and fconfigure} -setup {
|
||||
catch {close $inSide}
|
||||
catch {$strm close}
|
||||
} -result {3064818174 358 358}
|
||||
test zlib-8.10 {transformtion and fconfigure} -setup {
|
||||
test zlib-8.10 {transformation and fconfigure} -setup {
|
||||
lassign [chan pipe] inSide outSide
|
||||
} -constraints zlib -body {
|
||||
zlib push deflate $outSide -dictionary $spdyDict
|
||||
@@ -276,7 +276,10 @@ test zlib-8.10 {transformtion and fconfigure} -setup {
|
||||
puts -nonewline $outSide $spdyHeaders
|
||||
chan pop $outSide
|
||||
set compressed [read $inSide]
|
||||
catch {zlib inflate $compressed} err opt
|
||||
catch {
|
||||
zlib inflate $compressed
|
||||
throw UNREACHABLE "should be unreachable"
|
||||
} err opt
|
||||
list [string length [zlib deflate $spdyHeaders]] \
|
||||
[string length $compressed] \
|
||||
$err [dict get $opt -errorcode]
|
||||
@@ -284,7 +287,7 @@ test zlib-8.10 {transformtion and fconfigure} -setup {
|
||||
catch {close $outSide}
|
||||
catch {close $inSide}
|
||||
} -result {254 212 {data error} {TCL ZLIB DATA}}
|
||||
test zlib-8.11 {transformtion and fconfigure} -setup {
|
||||
test zlib-8.11 {transformation and fconfigure} -setup {
|
||||
lassign [chan pipe] inSide outSide
|
||||
set strm [zlib stream inflate]
|
||||
} -constraints zlib -body {
|
||||
@@ -300,7 +303,7 @@ test zlib-8.11 {transformtion and fconfigure} -setup {
|
||||
catch {close $inSide}
|
||||
catch {$strm close}
|
||||
} -result {358 358}
|
||||
test zlib-8.12 {transformtion and fconfigure} -setup {
|
||||
test zlib-8.12 {transformation and fconfigure} -setup {
|
||||
lassign [chan pipe] inSide outSide
|
||||
set strm [zlib stream compress]
|
||||
} -constraints zlib -body {
|
||||
@@ -317,7 +320,7 @@ test zlib-8.12 {transformtion and fconfigure} -setup {
|
||||
catch {close $inSide}
|
||||
catch {$strm close}
|
||||
} -result {358 358 3064818174}
|
||||
test zlib-8.13 {transformtion and fconfigure} -setup {
|
||||
test zlib-8.13 {transformation and fconfigure} -setup {
|
||||
lassign [chan pipe] inSide outSide
|
||||
set strm [zlib stream compress]
|
||||
} -constraints zlib -body {
|
||||
@@ -334,7 +337,7 @@ test zlib-8.13 {transformtion and fconfigure} -setup {
|
||||
catch {close $inSide}
|
||||
catch {$strm close}
|
||||
} -result {358 358 3064818174}
|
||||
test zlib-8.14 {transformtion and fconfigure} -setup {
|
||||
test zlib-8.14 {transformation and fconfigure} -setup {
|
||||
lassign [chan pipe] inSide outSide
|
||||
set strm [zlib stream deflate]
|
||||
} -constraints zlib -body {
|
||||
@@ -350,7 +353,7 @@ test zlib-8.14 {transformtion and fconfigure} -setup {
|
||||
catch {close $inSide}
|
||||
catch {$strm close}
|
||||
} -result {358 358}
|
||||
test zlib-8.15 {transformtion and fconfigure} -setup {
|
||||
test zlib-8.15 {transformation and fconfigure} -setup {
|
||||
lassign [chan pipe] inSide outSide
|
||||
set strm [zlib stream deflate]
|
||||
} -constraints zlib -body {
|
||||
|
||||
+9
-3
@@ -850,8 +850,8 @@ install-libraries: libraries
|
||||
done;
|
||||
@echo "Installing package msgcat 1.5.2 as a Tcl Module";
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/msgcat/msgcat.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/msgcat-1.5.2.tm;
|
||||
@echo "Installing package tcltest 2.3.5 as a Tcl Module";
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/tcltest/tcltest.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/tcltest-2.3.5.tm;
|
||||
@echo "Installing package tcltest 2.3.6 as a Tcl Module";
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/tcltest/tcltest.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/tcltest-2.3.6.tm;
|
||||
|
||||
@echo "Installing package platform 1.0.12 as a Tcl Module";
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/platform/platform.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.4/platform-1.0.12.tm;
|
||||
@@ -2076,6 +2076,9 @@ alldist: dist
|
||||
# build of this HTML documentation that has already been placed online. As
|
||||
# such, this rule is not guaranteed to work well on all systems; it only needs
|
||||
# to function on those of the Tcl/Tk maintainers.
|
||||
#
|
||||
# Also note that the 8.6 tool build requires an installed 8.6 native Tcl
|
||||
# interpreter in order to be able to run.
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
html: ${NATIVE_TCLSH}
|
||||
@@ -2088,9 +2091,12 @@ html-tk: ${NATIVE_TCLSH}
|
||||
$(BUILD_HTML) --tk
|
||||
@EXTRA_BUILD_HTML@
|
||||
|
||||
# You'd better have these programs or you will have problems creating Makefile
|
||||
# from Makefile.in in the first place...
|
||||
HTML_VERSION = `basename $(TOP_DIR) | sed s/tcl//`
|
||||
BUILD_HTML = \
|
||||
@${NATIVE_TCLSH} $(TOOL_DIR)/tcltk-man2html.tcl \
|
||||
--htmldir="$(HTML_INSTALL_DIR)" \
|
||||
--useversion=$(HTML_VERSION) --htmldir="$(HTML_INSTALL_DIR)" \
|
||||
--srcdir=$(TOP_DIR)/.. $(BUILD_HTML_FLAGS)
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
Vendored
+1
-1
@@ -1335,7 +1335,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
TCL_VERSION=8.6
|
||||
TCL_MAJOR_VERSION=8
|
||||
TCL_MINOR_VERSION=6
|
||||
TCL_PATCH_LEVEL=".0"
|
||||
TCL_PATCH_LEVEL=".1"
|
||||
VERSION=${TCL_VERSION}
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ m4_ifdef([SC_USE_CONFIG_HEADERS], [
|
||||
TCL_VERSION=8.6
|
||||
TCL_MAJOR_VERSION=8
|
||||
TCL_MINOR_VERSION=6
|
||||
TCL_PATCH_LEVEL=".0"
|
||||
TCL_PATCH_LEVEL=".1"
|
||||
VERSION=${TCL_VERSION}
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
|
||||
Name: tcl
|
||||
Summary: Tcl scripting language development environment
|
||||
Version: 8.6.0
|
||||
Version: 8.6.1
|
||||
Release: 2
|
||||
License: BSD
|
||||
Group: Development/Languages
|
||||
|
||||
+3
-3
@@ -115,6 +115,9 @@
|
||||
/* Define to 1 if you have the `gmtime_r' function. */
|
||||
#undef HAVE_GMTIME_R
|
||||
|
||||
/* Compiler support for module scope symbols */
|
||||
#undef HAVE_HIDDEN
|
||||
|
||||
/* Do we have the intptr_t type? */
|
||||
#undef HAVE_INTPTR_T
|
||||
|
||||
@@ -343,9 +346,6 @@
|
||||
/* Do we have <values.h>? */
|
||||
#undef NO_VALUES_H
|
||||
|
||||
/* Compiler support for module scope symbols */
|
||||
#undef HAVE_HIDDEN
|
||||
|
||||
/* Do we have wait3() */
|
||||
#undef NO_WAIT3
|
||||
|
||||
|
||||
+2
-2
@@ -462,10 +462,10 @@ DoCopyFile(
|
||||
switch ((int) (statBufPtr->st_mode & S_IFMT)) {
|
||||
#ifndef DJGPP
|
||||
case S_IFLNK: {
|
||||
char linkBuf[MAXPATHLEN];
|
||||
char linkBuf[MAXPATHLEN+1];
|
||||
int length;
|
||||
|
||||
length = readlink(src, linkBuf, sizeof(linkBuf));
|
||||
length = readlink(src, linkBuf, MAXPATHLEN);
|
||||
/* INTL: Native. */
|
||||
if (length == -1) {
|
||||
return TCL_ERROR;
|
||||
|
||||
+4
-4
@@ -194,7 +194,7 @@ static Tcl_ThreadId notifierThread;
|
||||
|
||||
#ifdef TCL_THREADS
|
||||
static void NotifierThreadProc(ClientData clientData);
|
||||
#ifdef HAVE_PTHREAD_ATFORK
|
||||
#if defined(HAVE_PTHREAD_ATFORK) && !defined(__APPLE__)
|
||||
static int atForkInit = 0;
|
||||
static void AtForkPrepare(void);
|
||||
static void AtForkParent(void);
|
||||
@@ -290,7 +290,7 @@ Tcl_InitNotifier(void)
|
||||
*/
|
||||
|
||||
Tcl_MutexLock(¬ifierMutex);
|
||||
#ifdef HAVE_PTHREAD_ATFORK
|
||||
#if defined(HAVE_PTHREAD_ATFORK) && !defined(__APPLE__)
|
||||
/*
|
||||
* Install pthread_atfork handlers to reinitialize the notifier in the
|
||||
* child of a fork.
|
||||
@@ -304,7 +304,7 @@ Tcl_InitNotifier(void)
|
||||
}
|
||||
atForkInit = 1;
|
||||
}
|
||||
#endif
|
||||
#endif /* HAVE_PTHREAD_ATFORK */
|
||||
/*
|
||||
* Check if my process id changed, e.g. I was forked
|
||||
* In this case, restart the notifier thread and close the
|
||||
@@ -1313,7 +1313,7 @@ NotifierThreadProc(
|
||||
TclpThreadExit(0);
|
||||
}
|
||||
|
||||
#ifdef HAVE_PTHREAD_ATFORK
|
||||
#if defined(HAVE_PTHREAD_ATFORK) && !defined(__APPLE__)
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user