Compare commits

...
Author SHA1 Message Date
dgp 13ef1cf7dd Report pc value when VERIFY fails. 2013-10-23 15:34:57 +00:00
dgp 4d1c31595c Avoid stack verificaton steps in macros when called by assembler. It uses
them differently.  Also suspend optimization pass.
2013-10-23 14:58:04 +00:00
dgp c6a601218a Merge assemble revert. 2013-10-22 20:11:59 +00:00
dgp 200e6994c3 merge trunk 2013-10-22 17:37:53 +00:00
dkf 2ffe17a9b3 Fix for assemble.test; problem was a total assumption failure caused by way that the assembler works. 2013-10-22 17:34:55 +00:00
dgp cb3ef498d7 Complete the repair on the INST_POP removal. 2013-10-22 17:17:39 +00:00
dgp f125eeb86e Conditionalize size of INST_POP removal. 2013-10-22 14:53:00 +00:00
dgp c63b2f08e0 Merge e9c8ef 2013-10-22 14:30:59 +00:00
dkf fb7a292613 Fix problems in for.test 2013-10-22 14:29:03 +00:00
dgp e10a837108 Merge 15882 2013-10-22 12:53:13 +00:00
dgp 950dd1945d Merge 78341 2013-10-22 12:42:47 +00:00
dgp 3f1625e0e9 Merge d1cc50 2013-10-22 12:24:31 +00:00
dgp 56a099f664 Merge af7ffd 2013-10-22 12:10:36 +00:00
dgp d7ad7cb438 Merge 2718a16 2013-10-22 04:39:58 +00:00
dgp bdb60f815e Merge to TCS rewrite merge point. 2013-10-21 22:59:44 +00:00
dgp bf3f488989 Merge 97f680 2013-10-21 21:32:26 +00:00
dgp 9522800ec3 Merge to pre-TCS branch. 2013-10-21 19:47:25 +00:00
dgp 7a42d12716 silence compiler warnings 2013-10-21 14:35:02 +00:00
dkf 8d4b93ccb7 [2835313] Ensure correct stack balance when break and continue exceptions are about: the hard cases with potential concealed exception generation. 2013-10-20 18:15:08 +00:00
dkf d9096d1ada And the last bits that need fixing; the code is still less efficient than desired but should now not crash. 2013-10-20 18:11:35 +00:00
dkf fc106439d4 Fix handling of 'invokeExpanded' and start to do 'returnStk'. 2013-10-19 14:11:28 +00:00
dkf c0d3a447bc Added missing exception range finalize. 2013-10-19 12:29:06 +00:00
dkf 0981d85b0c Improve coverage of [error] compilation. 2013-10-19 11:20:46 +00:00
dkf 443ca84a71 Tackle evalStk by reusing existing machinery. 2013-10-18 07:08:46 +00:00
jan.nijtmans c10d93603c Fix execute permission on many files which shouldn't have it. 2013-10-17 09:40:27 +00:00
jan.nijtmans edbfaa468e Fix execute permission on many files which shouldn't have it. 2013-10-17 09:28:11 +00:00
jan.nijtmans 2d9a87e3f1 -I${BUILD_DIR}/.. doesn't work when BUILD_DIR != "unix".
Reported by Matthias Kraft
2013-10-15 21:09:19 +00:00
dkf 2aaf426036 Do jump generation at places where INST_RETURN_IMM might occur. 2013-10-15 00:27:56 +00:00
jan.nijtmans d6d11c65a3 Tcl_SetResult -> Tcl_SetObjResult in two places (for Cygwin64 only). 2013-10-14 08:34:48 +00:00
jan.nijtmans 87660da586 Fix comment in tclOO.decls: tclOOStubLib.c is not generated by "make genstubs".
In pkgooa.c, check whether the internal TclOO stub table is initialized correctly as well, some internal simplifications and improved comments.
2013-10-14 08:11:59 +00:00
dkf e15b769c9d Added the tests I want to pass... 2013-10-13 13:57:27 +00:00
dkf d197994bd2 update comments 2013-10-13 13:34:01 +00:00
dkf 19e7a90783 Stop crashing in interactive testing. (The unknown and history mechanisms tend
to exercise some parts of the bytecode compiler very well.)
2013-10-13 12:09:22 +00:00
jan.nijtmans 9ad995c1bb Allow loading of pkgooa.so in Tcl 8.5 for (regression) test purposes.
Better error messages in stead of crashes in some (hypothetical) error situations.
2013-10-13 10:45:08 +00:00
jan.nijtmans 31d188239f Even though TCLOO_PATCHLEVEL is equal to TCLOO_VERSION, using "patchlevel" is more appropriate in those two places. 2013-10-11 10:26:35 +00:00
dkf 976d7cab2f [98c8b3ec12] Use constraint to work around failing test; it's just a bug in the
underlying library, and one that appears fixed in later versions. Not our fault
if some OSes don't update. (It's also in a very esoteric spot.)
2013-10-10 21:24:15 +00:00
jan.nijtmans 74f3e06000 Fix for bug [f51efe99a7]: MinGW build fails on current checkin. And a new test-case which makes the problem visible on UNIX as well. 2013-10-10 14:13:51 +00:00
jan.nijtmans f4c238d6a7 Update to Unicode 6.3 tables 2013-10-09 22:03:28 +00:00
jan.nijtmans 9d1312440e Update to Unicode 6.3 tables 2013-10-09 21:57:26 +00:00
dkf daab595dea Working towards better handling of stack balance with break and continue exceptions. 2013-10-08 09:02:50 +00:00
jan.nijtmans f86d726f85 Fix for [d4e464ae48]: tcl 8.5.15/8.6.1 breaks python make check on darwin 2013-10-07 14:25:21 +00:00
jan.nijtmans 3ad87b0a02 Fix for [d4e464ae48]: tcl 8.5.15/8.6.1 breaks python make check on darwin 2013-10-07 14:23:00 +00:00
jan.nijtmans c83af8f8d4 First attempt to fix bug [d4e464ae48]: tcl 8.5.15/8.61 breaks python make check on darwin 2013-10-06 19:27:50 +00:00
dkf d6e62aeb84 [3381085] Improved way of detecting what version of the documentation to build.
Set the HTML_VERSION environment variable to override the (sensible) default.
2013-10-06 19:17:20 +00:00
Kevin B Kenny eb7a25fe2b mark merge 2013-10-05 16:30:16 +00:00
Kevin B Kenny 560c2dcbe1 Advance to tzdata2013g 2013-10-05 16:28:52 +00:00
Kevin B Kenny 7413854f34 Advance to tzdata2013g 2013-10-05 16:22:16 +00:00
dkf 28552e2e35 Added missing documentation. Corrected result of Tcl_OOInitStubs in non-stub case. 2013-10-04 13:12:22 +00:00
jan.nijtmans c3651154a7 When compiling with MSVC++, no longer link the stub library with msvcrt??.dll.
This way, workarounds in extensions like [http://core.tcl.tk/itcl/info/a961f0729c] are no longer necessary.
2013-10-03 20:41:03 +00:00
jan.nijtmans 73b02508fa When compiling with MSVC++, no longer link the stub library with msvcrt??.dll.
This way, workarounds in extensions like [http://core.tcl.tk/itcl/info/a961f0729c] are no longer necessary.
2013-10-03 15:17:43 +00:00
dkf 4759be8760 minor: whitespace correction (my bad!) 2013-10-02 14:35:30 +00:00
dkf 4b54ec077b neater 2013-10-02 13:16:10 +00:00
dkf 76ca8e7008 silence warnings with clang 2013-10-02 13:14:29 +00:00
jan.nijtmans 31d38b0701 Fix compilation of Itcl and Tdbc 2013-10-02 10:30:19 +00:00
dkf e104cccd94 Turn Tcl_OOInitStubs into a no-op in non-stub-enabled usage. 2013-10-02 10:01:50 +00:00
dkf 8789461a94 Fix TclOO API export rules. 2013-10-02 09:41:01 +00:00
jan.nijtmans ec1dceef35 Fix compilation with latest MinGW-w64 version 3.0: Conflict on EXCEPTION_REGISTRATION typedef, which means something completely different in MinGW-w64. 2013-10-02 08:08:10 +00:00
jan.nijtmans 5e1eaa44bc Fix compilation with latest MinGW-w64 version 3.0: Conflict on EXCEPTION_REGISTRATION typedef, which means something completely different in MinGW-w64. 2013-10-02 07:58:50 +00:00
jan.nijtmans a403e2663e Disable command line globbing on MinGW compiles: this saves startup time, since the result of the glob is not used anywhere. 2013-09-30 14:07:20 +00:00
jan.nijtmans c5f68dde5c Disable command line globbing on MinGW compiles: this saves startup time, since the result of the glob is not used anywhere. 2013-09-30 14:03:56 +00:00
jan.nijtmans 868c2951dc Restore copyright assignments and some improved comments in tclOO.decls: previous commit was a blind revert of [371bcd0714], but those changes should not have been reverted. 2013-09-30 09:38:49 +00:00
jan.nijtmans e438509c68 Fix [f51efe99a7] by reverting [371bcd0714] 2013-09-30 09:03:20 +00:00
dkf 4f19f86513 typo; spotted by stu 2013-09-28 22:52:11 +00:00
dkf fd38147f32 [dfc08326e3]: Corrected symbol export for TclOO to match Tcl so things work as
expected in a static build.
2013-09-28 21:10:22 +00:00
dgp ce33f01bf1 Fix test source-4.1 2013-09-27 17:33:17 +00:00
dgp bfb7ea0e46 merge 8.5 2013-09-27 16:10:43 +00:00
dgp 694bd3ba73 Merge forward new test, marked as knownBug, so other merges are no longer held back. 2013-09-27 15:34:09 +00:00
dkf 067ef1dcea [219226]: Rewrote how ::env is synchronized to the environment so it no longer
smashes the array or its elements flat, This affects traces on env, links to
env, and iterations over env: it makes them work as naïvely expected.
2013-09-27 10:29:43 +00:00
jan.nijtmans 878c0cff52 Cherrypick [87d1313df3] from trunk:
Workaround for [http://sourceforge.net/p/mingw/bugs/2065/|MinGW bug #2065]. 
Both MinGW and MinGW-w64 (32-bit) are affected. 
Even though Win64 is not affected, adding -static-libgcc doesn't harm there, and we don't want to distrubute additional dll's with MinGW-compiled Tcl anyway.
2013-09-27 09:35:05 +00:00
jan.nijtmans 9bdcf8e201 Workaround for [http://sourceforge.net/p/mingw/bugs/2065/|MinGW bug #2065].
Both MinGW and MinGW-w64 (32-bit) are affected. 
Even though Win64 is not affected, adding -static-libgcc doesn't harm there, and we don't want to distrubute additional dll's with MinGW-compiled Tcl anyway.
2013-09-27 09:18:36 +00:00
jan.nijtmans 09a4760ba3 Tcl_SetResult -> Tcl_SetObjResult 2013-09-26 14:27:37 +00:00
dkf ce9b84204c [d614d63989] Ensure that there are no trailing colons as that causes chaos when a deleteProc is specified. 2013-09-25 22:54:29 +00:00
dgp e929b91222 Test demonstrating need for "adjust" manipulation in TclSubstTokens. 2013-09-25 16:39:26 +00:00
dgp 1d119413f6 revert mistaken commit of experiment 2013-09-23 12:18:45 +00:00
jan.nijtmans 1fce20754c workaround for mingw bug [http://comments.gmane.org/gmane.comp.gnu.mingw.user/41724] 2013-09-23 11:27:47 +00:00
jan.nijtmans 96fec1a88c workaround for mingw bug [http://comments.gmane.org/gmane.comp.gnu.mingw.user/41724] 2013-09-23 11:12:12 +00:00
dgp 4639bb95bb Leave behind the stack depth estimate testing machinery in this branch. It verifies
instruction by instruction that the stack depth estimated by the compiler is matched
by the stack depth at execution time.  Use a --enable-symbols=all build to perform
the testing.  In this checkin, a pass through the test suite validates all but
the assembler.
2013-06-11 23:05:30 +00:00
dgp b52ea3cedb merge trunk 2013-06-11 20:45:51 +00:00
dgp 226cb39a8b merge trunk 2013-06-11 19:51:10 +00:00
dgp 9fcbd30ea6 Make compiled [if] stack depth estimation simpler and more accurate. 2013-06-11 19:21:17 +00:00
dgp f1c5939b5e merge trunk 2013-06-11 18:10:08 +00:00
dgp b05ec10b3b simpler stack management 2013-06-11 16:57:10 +00:00
dgp 60d493021c More tidying of stack management code. 2013-06-11 05:26:04 +00:00
dgp 69a57e77d2 Tidy up the stack depth management code. 2013-06-11 04:54:03 +00:00
dgp 936bce600d Fix stack estimates for INST_EXPAND_DROP. 2013-06-10 16:25:48 +00:00
dgp 817548a251 Repair stack estimates. 2013-06-10 15:24:54 +00:00
dgp da517832be Merge trunk (creates new stack estimate breakage). 2013-06-10 04:09:34 +00:00
dgp 00fa47f88b undo mistaken commit 2013-06-10 03:29:18 +00:00
dgp 6e0e870c0b merge near trunk 2013-06-10 03:25:22 +00:00
dgp 2fe7243297 merge trunk 2013-06-07 15:26:19 +00:00
dgp 577f909dd0 Repaid debug compile of [array unset]. 2013-06-07 04:24:41 +00:00
dgp 5238eb91f9 Repair debug compile of [info commands]. 2013-06-07 04:09:07 +00:00
dgp b70228c537 Fix up the stack estimates for dict.test again 2013-06-06 23:26:39 +00:00
dgp 7800111ce9 merge trunk 2013-06-06 22:15:17 +00:00
dgp 1179a55b0b Progress getting more stack estimates correct. Exceptions are still the hard part. 2013-06-06 19:29:11 +00:00
dgp feea8024fb Stack estimates corrected for dict.test 2013-06-06 18:24:25 +00:00
dgp 15ad0ff2f3 merge trunk 2013-06-06 17:24:01 +00:00
dgp 2231d4f8f1 merge trunk 2013-06-06 10:51:51 +00:00
dkf 708f97410d merge trunk 2013-06-05 21:44:10 +00:00
dgp eae09f9b3d debug reporting fix 2013-06-05 20:25:32 +00:00
dgp aab8a14ed7 Progress fixing up the stack management of compiled [dict]. 2013-06-05 20:15:08 +00:00
dgp 239f08f04c Get stack depth adjustments right for INST_DONE opimized [return] compile. 2013-06-05 18:12:12 +00:00
dgp d5a42fa9c0 Compiled [subst] properly track stack adjustments. 2013-06-05 17:23:23 +00:00
dgp b1a38c3e79 Debug printing for [subst] compiles 2013-06-05 16:09:15 +00:00
dgp 4f79cc95e6 Repair merge of instruction table 2013-06-05 16:07:31 +00:00
dgp 15950a709c Get a proper merge from the trunk going again. 2013-06-05 15:35:54 +00:00
dgp 89760fbaf8 repair error.test 2013-06-03 22:43:06 +00:00
dgp 40f6d3ee82 merge trunk 2013-06-03 22:38:33 +00:00
dgp cf0124589c Work in progress auditing the stack usage estimates of the bytecode
compiler routines.  Much of this code is ugly and will never find a
place on the trunk, but the problems it pinpoints will be fixed there.

This is now at the point where the test suite of a --enable-symbols=all
build will usefully panic on those tests where stack estimates are
not correct (or where the auditing code itself is still faulty).
2013-06-01 04:05:14 +00:00
dgp 120b9e8366 Experimental super-stack-estimate checker. 2013-05-30 23:29:30 +00:00
dgp 7c5c2954aa Set up to (ab)use INST_EXPAND_STKTOP to debug compiler stack estimates. 2013-05-30 22:46:46 +00:00
dgp bf1b3702bd Tighten up expansion a bit. 2013-05-30 20:37:44 +00:00
dgp a71d301fff Back on track. 2013-05-30 20:03:03 +00:00
dgp 3ffeb15b98 Oops! Don't forget nested script substitution! 2013-05-30 18:58:38 +00:00
dgp d1ba3dff8f More robust expansion calculation. Look Ma! No operand! 2013-05-30 18:51:44 +00:00
85 changed files with 2042 additions and 1900 deletions
+1 -1
View File
@@ -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
+54
View File
@@ -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:
+10 -9
View File
@@ -118,7 +118,7 @@ static const struct cname {
* Unicode character-class tables.
*/
typedef struct crange {
typedef struct {
chr start;
chr end;
} crange;
@@ -260,7 +260,7 @@ static const chr alphaCharTable[] = {
static const crange controlRangeTable[] = {
{0x0, 0x1f}, {0x7f, 0x9f}, {0x600, 0x604}, {0x200b, 0x200f},
{0x202a, 0x202e}, {0x2060, 0x2064}, {0x206a, 0x206f}, {0xe000, 0xf8ff},
{0x202a, 0x202e}, {0x2060, 0x2064}, {0x2066, 0x206f}, {0xe000, 0xf8ff},
{0xfff9, 0xfffb}
#if TCL_UTF_MAX > 4
,{0x1d173, 0x1d17a}, {0xe0020, 0xe007f}, {0xf0000, 0xffffd}, {0x100000, 0x10fffd}
@@ -270,7 +270,7 @@ static const crange controlRangeTable[] = {
#define NUM_CONTROL_RANGE (sizeof(controlRangeTable)/sizeof(crange))
static const chr controlCharTable[] = {
0xad, 0x6dd, 0x70f, 0xfeff
0xad, 0x61c, 0x6dd, 0x70f, 0x180e, 0xfeff
#if TCL_UTF_MAX > 4
,0x110bd, 0xe0001
#endif
@@ -316,12 +316,13 @@ static const crange punctRangeTable[] = {
{0x17d8, 0x17da}, {0x1800, 0x180a}, {0x1aa0, 0x1aa6}, {0x1aa8, 0x1aad},
{0x1b5a, 0x1b60}, {0x1bfc, 0x1bff}, {0x1c3b, 0x1c3f}, {0x1cc0, 0x1cc7},
{0x2010, 0x2027}, {0x2030, 0x2043}, {0x2045, 0x2051}, {0x2053, 0x205e},
{0x2768, 0x2775}, {0x27e6, 0x27ef}, {0x2983, 0x2998}, {0x29d8, 0x29db},
{0x2cf9, 0x2cfc}, {0x2e00, 0x2e2e}, {0x2e30, 0x2e3b}, {0x3001, 0x3003},
{0x3008, 0x3011}, {0x3014, 0x301f}, {0xa60d, 0xa60f}, {0xa6f2, 0xa6f7},
{0xa874, 0xa877}, {0xa8f8, 0xa8fa}, {0xa9c1, 0xa9cd}, {0xaa5c, 0xaa5f},
{0xfe10, 0xfe19}, {0xfe30, 0xfe52}, {0xfe54, 0xfe61}, {0xff01, 0xff03},
{0xff05, 0xff0a}, {0xff0c, 0xff0f}, {0xff3b, 0xff3d}, {0xff5f, 0xff65}
{0x2308, 0x230b}, {0x2768, 0x2775}, {0x27e6, 0x27ef}, {0x2983, 0x2998},
{0x29d8, 0x29db}, {0x2cf9, 0x2cfc}, {0x2e00, 0x2e2e}, {0x2e30, 0x2e3b},
{0x3001, 0x3003}, {0x3008, 0x3011}, {0x3014, 0x301f}, {0xa60d, 0xa60f},
{0xa6f2, 0xa6f7}, {0xa874, 0xa877}, {0xa8f8, 0xa8fa}, {0xa9c1, 0xa9cd},
{0xaa5c, 0xaa5f}, {0xfe10, 0xfe19}, {0xfe30, 0xfe52}, {0xfe54, 0xfe61},
{0xff01, 0xff03}, {0xff05, 0xff0a}, {0xff0c, 0xff0f}, {0xff3b, 0xff3d},
{0xff5f, 0xff65}
#if TCL_UTF_MAX > 4
,{0x10100, 0x10102}, {0x10a50, 0x10a58}, {0x10b39, 0x10b3f}, {0x11047, 0x1104d},
{0x110be, 0x110c1}, {0x11140, 0x11143}, {0x111c5, 0x111c8}, {0x12470, 0x12473}
+5 -3
View File
@@ -28,6 +28,8 @@
*- returnCodeBranch
*/
#define TCL_ASSEMBLE
#include "tclInt.h"
#include "tclCompile.h"
#include "tclOOInt.h"
@@ -682,7 +684,7 @@ BBEmitInstInt4(
* BBEmitInst1or4 --
*
* Emits a 1- or 4-byte operation according to the magnitude of the
* operand
* operand.
*
*-----------------------------------------------------------------------------
*/
@@ -1363,7 +1365,7 @@ AssembleOneLine(
|| CheckStrictlyPositive(interp, opnd) != TCL_OK) {
goto cleanup;
}
BBEmitInstInt4(assemEnvPtr, tblIdx, opnd, opnd+1);
BBEmitInstInt4(assemEnvPtr, tblIdx, opnd+1, opnd+1);
break;
case ASSEM_DICT_SET:
@@ -1379,7 +1381,7 @@ AssembleOneLine(
if (localVar < 0) {
goto cleanup;
}
BBEmitInstInt4(assemEnvPtr, tblIdx, opnd, opnd+1);
BBEmitInstInt4(assemEnvPtr, tblIdx, opnd+1, opnd+1);
TclEmitInt4(localVar, envPtr);
break;
+4 -2
View File
@@ -2500,7 +2500,8 @@ BinaryEncode64(
return TCL_ERROR;
}
if (maxlen < 0) {
Tcl_SetResult(interp, "line length out of range", TCL_STATIC);
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"line length out of range", -1));
Tcl_SetErrorCode(interp, "TCL", "BINARY", "ENCODE",
"LINE_LENGTH", NULL);
return TCL_ERROR;
@@ -2606,7 +2607,8 @@ BinaryEncodeUu(
return TCL_ERROR;
}
if (lineLength < 3 || lineLength > 85) {
Tcl_SetResult(interp, "line length out of range", TCL_STATIC);
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"line length out of range", -1));
Tcl_SetErrorCode(interp, "TCL", "BINARY", "ENCODE",
"LINE_LENGTH", NULL);
return TCL_ERROR;
+97 -34
View File
@@ -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;
}
@@ -303,9 +303,17 @@ TclCompileArraySetCmd(
} else {
TclEmitOpcode( INST_DUP, envPtr);
TclEmitOpcode( INST_ARRAY_EXISTS_STK, envPtr);
TclEmitInstInt1(INST_JUMP_TRUE1, 5, envPtr);
TclEmitInstInt1(INST_JUMP_TRUE1, 5
#ifdef TCL_COMPILE_DEBUG
+10
#endif
, envPtr);
TclEmitOpcode( INST_ARRAY_MAKE_STK, envPtr);
TclEmitInstInt1(INST_JUMP1, 3, envPtr);
TclEmitInstInt1(INST_JUMP1, 3
#ifdef TCL_COMPILE_DEBUG
+10
#endif
, envPtr);
/* Each branch decrements stack depth, but we only take one. */
TclAdjustStackDepth(1, envPtr);
TclEmitOpcode( INST_POP, envPtr);
@@ -354,7 +362,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;
@@ -383,7 +391,11 @@ TclCompileArraySetCmd(
} else {
TclEmitOpcode( INST_DUP, envPtr);
TclEmitOpcode( INST_ARRAY_EXISTS_STK, envPtr);
TclEmitInstInt1(INST_JUMP_TRUE1, 4, envPtr);
TclEmitInstInt1(INST_JUMP_TRUE1, 4
#ifdef TCL_COMPILE_DEBUG
+15
#endif
, envPtr);
TclEmitOpcode( INST_DUP, envPtr);
TclEmitOpcode( INST_ARRAY_MAKE_STK, envPtr);
TclEmitInstInt4(INST_FOREACH_START4, infoIndex, envPtr);
@@ -437,15 +449,27 @@ TclCompileArrayUnsetCmd(
if (localIndex >= 0) {
TclEmitInstInt4(INST_ARRAY_EXISTS_IMM, localIndex, envPtr);
TclEmitInstInt1(INST_JUMP_FALSE1, 8, envPtr);
TclEmitInstInt1(INST_JUMP_FALSE1, 8
#ifdef TCL_COMPILE_DEBUG
+5
#endif
, envPtr);
TclEmitInstInt1(INST_UNSET_SCALAR, 1, envPtr);
TclEmitInt4( localIndex, envPtr);
} else {
TclEmitOpcode( INST_DUP, envPtr);
TclEmitOpcode( INST_ARRAY_EXISTS_STK, envPtr);
TclEmitInstInt1(INST_JUMP_FALSE1, 6, envPtr);
TclEmitInstInt1(INST_JUMP_FALSE1, 6
#ifdef TCL_COMPILE_DEBUG
+10
#endif
, envPtr);
TclEmitInstInt1(INST_UNSET_STK, 1, envPtr);
TclEmitInstInt1(INST_JUMP1, 3, envPtr);
TclEmitInstInt1(INST_JUMP1, 3
#ifdef TCL_COMPILE_DEBUG
+10
#endif
, envPtr);
/* Each branch decrements stack depth, but we only take one. */
TclAdjustStackDepth(1, envPtr);
TclEmitOpcode( INST_POP, envPtr);
@@ -620,7 +644,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
@@ -637,7 +661,11 @@ TclCompileCatchCmd(
TclEmitOpcode( INST_POP, envPtr);
PushStringLiteral(envPtr, "0");
TclEmitInstInt1( INST_JUMP1, 3, envPtr);
TclEmitInstInt1( INST_JUMP1, 3
#ifdef TCL_COMPILE_DEBUG
+10
#endif
, envPtr);
TclAdjustStackDepth(-1, envPtr);
ExceptionRangeTarget(envPtr, range, catchOffset);
TclEmitOpcode( INST_PUSH_RETURN_CODE, envPtr);
@@ -877,9 +905,8 @@ TclCompileDictSetCmd(
* Now emit the instruction to do the dict manipulation.
*/
TclEmitInstInt4( INST_DICT_SET, parsePtr->numWords-3, envPtr);
TclEmitInstInt4( INST_DICT_SET, parsePtr->numWords-2, envPtr);
TclEmitInt4( dictVarIndex, envPtr);
TclAdjustStackDepth(-1, envPtr);
return TCL_OK;
}
@@ -987,8 +1014,7 @@ TclCompileDictGetCmd(
CompileWord(envPtr, tokenPtr, interp, i);
tokenPtr = TokenAfter(tokenPtr);
}
TclEmitInstInt4(INST_DICT_GET, parsePtr->numWords-2, envPtr);
TclAdjustStackDepth(-1, envPtr);
TclEmitInstInt4(INST_DICT_GET, parsePtr->numWords-1, envPtr);
return TCL_OK;
}
@@ -1024,8 +1050,7 @@ TclCompileDictExistsCmd(
CompileWord(envPtr, tokenPtr, interp, i);
tokenPtr = TokenAfter(tokenPtr);
}
TclEmitInstInt4(INST_DICT_EXISTS, parsePtr->numWords-2, envPtr);
TclAdjustStackDepth(-1, envPtr);
TclEmitInstInt4(INST_DICT_EXISTS, parsePtr->numWords-1, envPtr);
return TCL_OK;
}
@@ -1164,9 +1189,8 @@ TclCompileDictCreateCmd(
tokenPtr = TokenAfter(tokenPtr);
CompileWord(envPtr, tokenPtr, interp, i+1);
tokenPtr = TokenAfter(tokenPtr);
TclEmitInstInt4( INST_DICT_SET, 1, envPtr);
TclEmitInstInt4( INST_DICT_SET, 2, envPtr);
TclEmitInt4( worker, envPtr);
TclAdjustStackDepth(-1, envPtr);
TclEmitOpcode( INST_POP, envPtr);
}
Emit14Inst( INST_LOAD_SCALAR, worker, envPtr);
@@ -1245,14 +1269,21 @@ TclCompileDictMergeCmd(
tokenPtr = TokenAfter(tokenPtr);
CompileWord(envPtr, tokenPtr, interp, i);
TclEmitInstInt4( INST_DICT_FIRST, infoIndex, envPtr);
TclEmitInstInt1( INST_JUMP_TRUE1, 24, envPtr);
TclEmitInstInt1( INST_JUMP_TRUE1, 24
#ifdef TCL_COMPILE_DEBUG
+25
#endif
, envPtr);
TclEmitInstInt4( INST_REVERSE, 2, envPtr);
TclEmitInstInt4( INST_DICT_SET, 1, envPtr);
TclEmitInstInt4( INST_DICT_SET, 2, envPtr);
TclEmitInt4( workerIndex, envPtr);
TclAdjustStackDepth(-1, envPtr);
TclEmitOpcode( INST_POP, envPtr);
TclEmitInstInt4( INST_DICT_NEXT, infoIndex, envPtr);
TclEmitInstInt1( INST_JUMP_FALSE1, -20, envPtr);
TclEmitInstInt1( INST_JUMP_FALSE1, -20
#ifdef TCL_COMPILE_DEBUG
-15
#endif
, envPtr);
TclEmitOpcode( INST_POP, envPtr);
TclEmitOpcode( INST_POP, envPtr);
TclEmitInstInt1( INST_UNSET_SCALAR, 0, envPtr);
@@ -1268,7 +1299,11 @@ TclCompileDictMergeCmd(
Emit14Inst( INST_LOAD_SCALAR, workerIndex, envPtr);
TclEmitInstInt1( INST_UNSET_SCALAR, 0, envPtr);
TclEmitInt4( workerIndex, envPtr);
TclEmitInstInt1( INST_JUMP1, 18, envPtr);
TclEmitInstInt1( INST_JUMP1, 18
#ifdef TCL_COMPILE_DEBUG
+20
#endif
, envPtr);
/*
* If an exception happens when starting to iterate over the second (and
@@ -1463,9 +1498,8 @@ CompileDictEachCmd(
if (collect == TCL_EACH_COLLECT) {
Emit14Inst( INST_LOAD_SCALAR, keyVarIndex, envPtr);
TclEmitInstInt4(INST_OVER, 1, envPtr);
TclEmitInstInt4(INST_DICT_SET, 1, envPtr);
TclEmitInstInt4(INST_DICT_SET, 2, envPtr);
TclEmitInt4( collectVar, envPtr);
TclAdjustStackDepth(-1, envPtr);
TclEmitOpcode( INST_POP, envPtr);
}
TclEmitOpcode( INST_POP, envPtr);
@@ -1675,7 +1709,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",
@@ -2033,7 +2067,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.
@@ -2135,19 +2169,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;
}
+29 -4
View File
@@ -592,7 +592,11 @@ TclCompileInfoCommandsCmd(
TclEmitOpcode( INST_RESOLVE_COMMAND, envPtr);
TclEmitOpcode( INST_DUP, envPtr);
TclEmitOpcode( INST_STR_LEN, envPtr);
TclEmitInstInt1( INST_JUMP_FALSE1, 7, envPtr);
TclEmitInstInt1( INST_JUMP_FALSE1, 7
#ifdef TCL_COMPILE_DEBUG
+10
#endif
, envPtr);
TclEmitInstInt4( INST_LIST, 1, envPtr);
return TCL_OK;
@@ -2367,7 +2371,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;
}
@@ -2381,6 +2385,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++) {
@@ -2388,7 +2396,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--) {
@@ -2509,7 +2517,7 @@ TclCompileReturnCmd(
* Issue the RETURN itself.
*/
TclEmitOpcode(INST_RETURN_STK, envPtr);
TclEmitInvoke(envPtr, INST_RETURN_STK);
return TCL_OK;
}
@@ -2521,6 +2529,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);
+39 -22
View File
@@ -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);
@@ -1963,9 +1965,13 @@ TclCompileThrowCmd(
OP4( REVERSE, 3);
OP( DUP);
OP( LIST_LENGTH);
OP1( JUMP_FALSE1, 16);
OP1( JUMP_FALSE1, 16
#ifdef TCL_COMPILE_DEBUG
+20
#endif
);
OP4( LIST, 2);
OP44( RETURN_IMM, 1, 0);
OP44( RETURN_IMM, TCL_ERROR, 0);
TclAdjustStackDepth(2, envPtr);
OP( POP);
OP( POP);
@@ -1974,7 +1980,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;
}
@@ -2284,7 +2290,11 @@ IssueTryClausesInstructions(
} else {
PUSH( "0");
OP4( REVERSE, 2);
OP1( JUMP1, 4);
OP1( JUMP1, 4
#ifdef TCL_COMPILE_DEBUG
+10
#endif
);
TclAdjustStackDepth(-2, envPtr);
}
ExceptionRangeTarget(envPtr, range, catchOffset);
@@ -2325,8 +2335,7 @@ IssueTryClausesInstructions(
LOAD( optionsVar);
PUSH( "-errorcode");
OP4( DICT_GET, 1);
TclAdjustStackDepth(-1, envPtr);
OP4( DICT_GET, 2);
OP44( LIST_RANGE_IMM, 0, len-1);
p = Tcl_GetStringFromObj(matchClauses[i], &len);
PushLiteral(envPtr, p, len);
@@ -2392,11 +2401,10 @@ IssueTryClausesInstructions(
OP( POP);
PUSH( "-during");
OP4( REVERSE, 2);
OP44( DICT_SET, 1, optionsVar);
TclAdjustStackDepth(-1, envPtr);
OP44( DICT_SET, 2, optionsVar);
FIXJUMP1( dontChangeOptions);
OP4( REVERSE, 2);
OP( RETURN_STK);
INVOKE( RETURN_STK);
}
JUMP4( JUMP, addrsToFix[i]);
@@ -2415,7 +2423,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
@@ -2495,7 +2503,11 @@ IssueTryClausesFinallyInstructions(
} else {
PUSH( "0");
OP4( REVERSE, 2);
OP1( JUMP1, 4);
OP1( JUMP1, 4
#ifdef TCL_COMPILE_DEBUG
+15
#endif
);
TclAdjustStackDepth(-2, envPtr);
}
ExceptionRangeTarget(envPtr, range, catchOffset);
@@ -2535,8 +2547,7 @@ IssueTryClausesFinallyInstructions(
LOAD( optionsVar);
PUSH( "-errorcode");
OP4( DICT_GET, 1);
TclAdjustStackDepth(-1, envPtr);
OP4( DICT_GET, 2);
OP44( LIST_RANGE_IMM, 0, len-1);
p = Tcl_GetStringFromObj(matchClauses[i], &len);
PushLiteral(envPtr, p, len);
@@ -2616,7 +2627,11 @@ IssueTryClausesFinallyInstructions(
PUSH( "0");
OP( PUSH_RETURN_OPTIONS);
OP4( REVERSE, 3);
OP1( JUMP1, 5);
OP1( JUMP1, 5
#ifdef TCL_COMPILE_DEBUG
+20
#endif
);
TclAdjustStackDepth(-3, envPtr);
forwardsToFix[i] = -1;
@@ -2643,8 +2658,7 @@ IssueTryClausesFinallyInstructions(
OP4( REVERSE, 3);
STORE( optionsVar);
OP( POP);
OP44( DICT_SET, 1, optionsVar);
TclAdjustStackDepth(-1, envPtr);
OP44( DICT_SET, 2, optionsVar);
JUMP1( JUMP, trapError);
FIXJUMP1( noTrapError);
STORE( optionsVar);
@@ -2710,8 +2724,7 @@ IssueTryClausesFinallyInstructions(
OP4( REVERSE, 3);
STORE( optionsVar);
OP( POP);
OP44( DICT_SET, 1, optionsVar);
TclAdjustStackDepth(-1, envPtr);
OP44( DICT_SET, 2, optionsVar);
OP( POP);
JUMP1( JUMP, finalError);
TclAdjustStackDepth(1, envPtr);
@@ -2724,7 +2737,7 @@ IssueTryClausesFinallyInstructions(
FIXJUMP1( finalOK);
LOAD( optionsVar);
LOAD( resultVar);
OP( RETURN_STK);
INVOKE( RETURN_STK);
return TCL_OK;
}
@@ -2749,7 +2762,11 @@ IssueTryFinallyInstructions(
ExceptionRangeStarts(envPtr, range);
BODY( bodyToken, 1);
ExceptionRangeEnds(envPtr, range);
OP1( JUMP1, 3);
OP1( JUMP1, 3
#ifdef TCL_COMPILE_DEBUG
+10
#endif
);
TclAdjustStackDepth(-1, envPtr);
ExceptionRangeTarget(envPtr, range, catchOffset);
OP( PUSH_RESULT);
@@ -2783,7 +2800,7 @@ IssueTryFinallyInstructions(
OP1( JUMP1, 7);
FIXJUMP1( jumpOK);
OP4( REVERSE, 2);
OP( RETURN_STK);
INVOKE( RETURN_STK);
return TCL_OK;
}
+2 -2
View File
@@ -2335,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);
}
/*
+266 -77
View File
@@ -540,11 +540,14 @@ InstructionDesc const tclInstructionTable[] = {
/* Concatenates the two lists at the top of the stack into a single
* list and pushes that resulting list onto the stack.
* Stack: ... list1 list2 => ... [lconcat list1 list2] */
{"expandDrop", 1, 0, 0, {OPERAND_NONE}},
/* Drops an element from the auxiliary stack, popping stack elements
* until the matching stack depth is reached. */
{"verify", 5, 0, 1, {OPERAND_UINT4}},
/* Verify the predicted stack depth (operand) is true during
* bytecode execution. */
{NULL, 0, 0, 0, {OPERAND_NONE}}
};
@@ -732,7 +735,7 @@ TclSetByteCodeFromAny(
* faster code in some cases, and more compact code in more.
*/
if (Tcl_GetMaster(interp) == NULL &&
if (0 && Tcl_GetMaster(interp) == NULL &&
!Tcl_LimitTypeEnabled(interp, TCL_LIMIT_COMMANDS|TCL_LIMIT_TIME)
&& IsCompactibleCompileEnv(interp, &compEnv)) {
TclFreeCompileEnv(&compEnv);
@@ -1738,9 +1741,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);
}
}
@@ -1755,7 +1758,6 @@ CompileExpanded(
int wordIdx = 0;
DefineLineInformation;
StartExpanding(envPtr);
if (cmdObj) {
CompileCmdLiteral(interp, cmdObj, envPtr);
@@ -1787,24 +1789,20 @@ CompileExpanded(
}
/*
* The stack depth during argument expansion can only be
* managed at runtime, as the number of elements in the
* expanded lists is not known at compile time. We adjust here
* the stack depth estimate so that it is correct after the
* command with expanded arguments returns.
* The stack depth during argument expansion can only be managed at
* runtime, as the number of elements in the expanded lists is not known
* at compile time. We adjust here the stack depth estimate so that it is
* correct after the command with expanded arguments returns.
*
* The end effect of this command's invocation is that all the
* words of the command are popped from the stack, and the
* result is pushed: the stack top changes by (1-wordIdx).
* The end effect of this command's invocation is that all the words of
* the command are popped from the stack, and the result is pushed: the
* stack top changes by (1-wordIdx).
*
* Note that the estimates are not correct while the command
* is being prepared and run, INST_EXPAND_STKTOP is not
* stack-neutral in general.
* Note that the estimates are not correct while the command is being
* prepared and run, INST_EXPAND_STKTOP is not stack-neutral in general.
*/
TclEmitOpcode(INST_INVOKE_EXPANDED, envPtr);
envPtr->expandCount--;
TclAdjustStackDepth(1 - wordIdx, envPtr);
TclEmitInvoke(envPtr, INST_INVOKE_EXPANDED, wordIdx);
}
static int
@@ -1818,8 +1816,8 @@ CompileCmdCompileProc(
DefineLineInformation;
/*
* Emit of the INST_START_CMD instruction is controlled by
* the value of envPtr->atCmdStart:
* Emit of the INST_START_CMD instruction is controlled by the value of
* envPtr->atCmdStart:
*
* atCmdStart == 2 : We are not using the INST_START_CMD instruction.
* atCmdStart == 1 : INST_START_CMD was the last instruction emitted.
@@ -1850,9 +1848,10 @@ CompileCmdCompileProc(
if (TCL_OK == TclAttemptCompileProc(interp, parsePtr, 1, cmdPtr, envPtr)) {
if (incrOffset >= 0) {
/*
* We successfully compiled a command. Increment the number
* of commands that start at the currently active INST_START_CMD.
* We successfully compiled a command. Increment the number of
* commands that start at the currently active INST_START_CMD.
*/
unsigned char *incrPtr = envPtr->codeStart + incrOffset;
unsigned char *startPtr = incrPtr - 5;
@@ -1868,9 +1867,9 @@ CompileCmdCompileProc(
envPtr->codeNext -= unwind; /* Unwind INST_START_CMD */
/*
* Throw out any line information generated by the failed
* compile attempt.
* Throw out any line information generated by the failed compile attempt.
*/
while (mapPtr->nuloc - 1 > eclIndex) {
mapPtr->nuloc--;
ckfree(mapPtr->loc[mapPtr->nuloc].line);
@@ -1878,11 +1877,11 @@ CompileCmdCompileProc(
}
/*
* Reset the index of next command.
* Toss out any from failed nested partial compiles.
* Reset the index of next command. Toss out any from failed nested
* partial compiles.
*/
envPtr->numCommands = mapPtr->nuloc;
envPtr->numCommands = mapPtr->nuloc;
return TCL_ERROR;
}
@@ -1914,11 +1913,10 @@ CompileCommandTokens(
parsePtr->commandStart - envPtr->source, startCodeOffset);
/*
* TIP #280. Scan the words and compute the extended location
* information. The map first contain full per-word line
* information for use by the compiler. This is later replaced by
* a reduced form which signals non-literal words, stored in
* 'wlines'.
* TIP #280. Scan the words and compute the extended location information.
* The map first contain full per-word line information for use by the
* compiler. This is later replaced by a reduced form which signals
* non-literal words, stored in 'wlines'.
*/
EnterCmdWordData(eclPtr, parsePtr->commandStart - envPtr->source,
@@ -1940,8 +1938,8 @@ CompileCommandTokens(
cmdPtr = (Command *) Tcl_GetCommandFromObj(interp, cmdObj);
if (cmdPtr) {
/*
* Found a command. Test the ways we can be told
* not to attempt to compile it.
* Found a command. Test the ways we can be told not to attempt
* to compile it.
*/
if ((cmdPtr->compileProc == NULL)
|| (cmdPtr->nsPtr->flags & NS_SUPPRESS_COMPILATION)
@@ -1985,8 +1983,8 @@ CompileCommandTokens(
(envPtr->codeNext-envPtr->codeStart) - startCodeOffset);
/*
* TIP #280: Free full form of per-word line data and insert the
* reduced form now
* TIP #280: Free full form of per-word line data and insert the reduced
* form now
*/
envPtr->line = cmdLine;
@@ -2071,20 +2069,20 @@ TclCompileScript(
if (parse.numWords == 0) {
/*
* The "command" parsed has no words. In this case
* we can skip the rest of the loop body. With no words,
* clearly CompileCommandTokens() has nothing to do. Since
* the parser aggressively sucks up leading comment and white
* space, including newlines, parse.commandStart must be
* pointing at either the end of script, or a command-terminating
* semi-colon. In either case, the TclAdvance*() calls have
* nothing to do. Finally, when no words are parsed, no
* tokens have been allocated at parse.tokenPtr so there's
* also nothing for Tcl_FreeParse() to do.
* The "command" parsed has no words. In this case we can skip
* the rest of the loop body. With no words, clearly
* CompileCommandTokens() has nothing to do. Since the parser
* aggressively sucks up leading comment and white space,
* including newlines, parse.commandStart must be pointing at
* either the end of script, or a command-terminating semi-colon.
* In either case, the TclAdvance*() calls have nothing to do.
* Finally, when no words are parsed, no tokens have been
* allocated at parse.tokenPtr so there's also nothing for
* Tcl_FreeParse() to do.
*
* The advantage of this shortcut is that CompileCommandTokens()
* can be written with an assumption that parse.numWords > 0,
* with the implication the CCT() always generates bytecode.
* can be written with an assumption that parse.numWords > 0, with
* the implication the CCT() always generates bytecode.
*/
continue;
}
@@ -2103,25 +2101,31 @@ TclCompileScript(
if (lastCmdIdx == -1) {
/*
* Compiling the script yielded no bytecode. The script must be
* all whitespace, comments, and empty commands. Such scripts
* are defined to successfully produce the empty string result,
* so we emit the simple bytecode that makes that happen.
* Compiling the script yielded no bytecode. The script must be all
* whitespace, comments, and empty commands. Such scripts are defined
* to successfully produce the empty string result, so we emit the
* simple bytecode that makes that happen.
*/
PushStringLiteral(envPtr, "");
} else {
/*
* We compiled at least one command to bytecode. The routine
* CompileCommandTokens() follows the bytecode of each compiled
* command with an INST_POP, so that stack balance is maintained
* when several commands are in sequence. (The result of each
* command is thrown away before moving on to the next command).
* For the last command compiled, we need to undo that INST_POP
* so that the result of the last command becomes the result of
* the script. The code here removes that trailing INST_POP.
* command with an INST_POP, so that stack balance is maintained when
* several commands are in sequence. (The result of each command is
* thrown away before moving on to the next command). For the last
* command compiled, we need to undo that INST_POP so that the result
* of the last command becomes the result of the script. The code
* here removes that trailing INST_POP.
*/
envPtr->cmdMapPtr[lastCmdIdx].numCodeBytes--;
envPtr->codeNext--;
#ifdef TCL_COMPILE_DEBUG
envPtr->cmdMapPtr[lastCmdIdx].numCodeBytes -= 5;
envPtr->codeNext -= 5;
#endif
envPtr->currStackDepth++;
}
}
@@ -2229,7 +2233,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 +2270,7 @@ TclCompileTokens(
clPosition = ckalloc(maxNumCL * sizeof(int));
}
adjust = 0;
Tcl_DStringInit(&textBuffer);
numObjsToConcat = 0;
for ( ; count > 0; count--, tokenPtr++) {
@@ -2309,6 +2314,7 @@ TclCompileTokens(
clPosition[numCL] = clPos;
numCL ++;
}
adjust++;
}
break;
@@ -2331,8 +2337,10 @@ TclCompileTokens(
numCL = 0;
}
envPtr->line += adjust;
TclCompileScript(interp, tokenPtr->start+1,
tokenPtr->size-2, envPtr);
envPtr->line -= adjust;
numObjsToConcat++;
break;
@@ -2454,7 +2462,7 @@ TclCompileCmdWord(
*/
TclCompileTokens(interp, tokenPtr, count, envPtr);
TclEmitOpcode(INST_EVAL_STK, envPtr);
TclEmitInvoke(envPtr, INST_EVAL_STK);
}
}
@@ -3351,9 +3359,9 @@ TclAddLoopContinueFixup(
*
* TclCleanupStackForBreakContinue --
*
* Ditch the extra elements from the auxiliary stack and the main
* stack. How to do this exactly depends on whether there are any
* elements on the auxiliary stack to pop.
* Ditch the extra elements from the auxiliary stack and the main stack.
* How to do this exactly depends on whether there are any elements on
* the auxiliary stack to pop.
*
* ---------------------------------------------------------------------
*/
@@ -3367,23 +3375,16 @@ TclCleanupStackForBreakContinue(
int toPop = envPtr->expandCount - auxPtr->expandTarget;
if (toPop > 0) {
while (toPop > 0) {
while (toPop --> 0) {
TclEmitOpcode(INST_EXPAND_DROP, envPtr);
toPop--;
}
TclAdjustStackDepth(auxPtr->expandTargetDepth - envPtr->currStackDepth,
envPtr);
toPop = auxPtr->expandTargetDepth - auxPtr->stackDepth;
while (toPop > 0) {
TclEmitOpcode(INST_POP, envPtr);
toPop--;
}
} else {
toPop = envPtr->currStackDepth - auxPtr->stackDepth;
while (toPop > 0) {
TclEmitOpcode(INST_POP, envPtr);
toPop--;
}
envPtr->currStackDepth = auxPtr->expandTargetDepth;
}
toPop = envPtr->currStackDepth - auxPtr->stackDepth;
while (toPop --> 0) {
TclEmitOpcode(INST_POP, envPtr);
}
envPtr->currStackDepth = savedStackDepth;
}
@@ -3897,6 +3898,194 @@ 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 = 0, breakRange = 0, continueRange = 0;
/*
* 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+1, 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);
ExceptionRangeTarget(envPtr, loopRange, breakOffset);
TclCleanupStackForBreakContinue(envPtr, auxBreakPtr);
TclAddLoopBreakFixup(envPtr, auxBreakPtr);
envPtr->currStackDepth = savedStackDepth;
envPtr->expandCount = savedExpandCount;
}
if (auxContinuePtr != NULL) {
TclAdjustStackDepth(-1, envPtr);
ExceptionRangeTarget(envPtr, loopRange, continueOffset);
TclCleanupStackForBreakContinue(envPtr, auxContinuePtr);
TclAddLoopContinueFixup(envPtr, auxContinuePtr);
envPtr->currStackDepth = savedStackDepth;
envPtr->expandCount = savedExpandCount;
}
TclFinalizeLoopExceptionRange(envPtr, loopRange);
TclFixupForwardJumpToHere(envPtr, &nonTrapFixup, 127);
}
}
/*
*----------------------------------------------------------------------
*
+74 -1
View File
@@ -768,8 +768,10 @@ typedef struct ByteCode {
#define INST_EXPAND_DROP 165
#define INST_VERIFY 166
/* The last opcode */
#define LAST_INST_OPCODE 165
#define LAST_INST_OPCODE 166
/*
* Table describing the Tcl bytecode instructions: their name (for displaying
@@ -1021,6 +1023,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);
@@ -1152,6 +1155,27 @@ MODULE_SCOPE Tcl_Obj *TclNewInstNameObj(unsigned char inst);
* void TclAdjustStackDepth(int delta, CompileEnv *envPtr);
*/
#if defined(TCL_COMPILE_DEBUG)
#define VerifyStackDepth(envPtr) \
do { \
int i = (envPtr)->currStackDepth; \
if (((envPtr)->codeNext + 5) > (envPtr)->codeEnd) { \
TclExpandCodeArray(envPtr); \
} \
*(envPtr)->codeNext++ = (unsigned char) INST_VERIFY; \
*(envPtr)->codeNext++ = \
(unsigned char) ((unsigned int) (i) >> 24); \
*(envPtr)->codeNext++ = \
(unsigned char) ((unsigned int) (i) >> 16); \
*(envPtr)->codeNext++ = \
(unsigned char) ((unsigned int) (i) >> 8); \
*(envPtr)->codeNext++ = \
(unsigned char) ((unsigned int) (i) ); \
} while (0)
#else
#define VerifyStackDepth(envPtr)
#endif
#define TclAdjustStackDepth(delta, envPtr) \
do { \
if ((delta) < 0) { \
@@ -1160,6 +1184,7 @@ MODULE_SCOPE Tcl_Obj *TclNewInstNameObj(unsigned char inst);
} \
} \
(envPtr)->currStackDepth += (delta); \
VerifyStackDepth(envPtr); \
} while (0)
/*
@@ -1220,6 +1245,23 @@ MODULE_SCOPE Tcl_Obj *TclNewInstNameObj(unsigned char inst);
* void TclEmitInt4(int i, CompileEnv *envPtr);
*/
#if defined(TCL_COMPILE_DEBUG) && !defined(TCL_ASSEMBLE)
#define TclEmitInt1(i, envPtr) \
do { \
if ((envPtr)->codeNext == (envPtr)->codeEnd) { \
TclExpandCodeArray(envPtr); \
} \
if ((envPtr)->codeNext[-5] == INST_VERIFY) { \
memmove((envPtr)->codeNext-4, (envPtr)->codeNext-5, 5); \
(envPtr)->codeNext[-5] = \
(unsigned char) ((unsigned int) (i)); \
(envPtr)->codeNext++; \
break; \
} \
*(envPtr)->codeNext++ = (unsigned char) ((unsigned int) (i)); \
} while (0)
#else
#define TclEmitInt1(i, envPtr) \
do { \
if ((envPtr)->codeNext == (envPtr)->codeEnd) { \
@@ -1227,7 +1269,37 @@ MODULE_SCOPE Tcl_Obj *TclNewInstNameObj(unsigned char inst);
} \
*(envPtr)->codeNext++ = (unsigned char) ((unsigned int) (i)); \
} while (0)
#endif
#if defined(TCL_COMPILE_DEBUG) && !defined(TCL_ASSEMBLE)
#define TclEmitInt4(i, envPtr) \
do { \
if (((envPtr)->codeNext + 4) > (envPtr)->codeEnd) { \
TclExpandCodeArray(envPtr); \
} \
if ((envPtr)->codeNext[-5] == INST_VERIFY) { \
memmove((envPtr)->codeNext-1, (envPtr)->codeNext-5, 5); \
(envPtr)->codeNext[-5] = \
(unsigned char) ((unsigned int) (i) >> 24); \
(envPtr)->codeNext[-4] = \
(unsigned char) ((unsigned int) (i) >> 16); \
(envPtr)->codeNext[-3] = \
(unsigned char) ((unsigned int) (i) >> 8); \
(envPtr)->codeNext[-2] = \
(unsigned char) ((unsigned int) (i) ); \
(envPtr)->codeNext += 4; \
break; \
} \
*(envPtr)->codeNext++ = \
(unsigned char) ((unsigned int) (i) >> 24); \
*(envPtr)->codeNext++ = \
(unsigned char) ((unsigned int) (i) >> 16); \
*(envPtr)->codeNext++ = \
(unsigned char) ((unsigned int) (i) >> 8); \
*(envPtr)->codeNext++ = \
(unsigned char) ((unsigned int) (i) ); \
} while (0)
#else
#define TclEmitInt4(i, envPtr) \
do { \
if (((envPtr)->codeNext + 4) > (envPtr)->codeEnd) { \
@@ -1242,6 +1314,7 @@ MODULE_SCOPE Tcl_Obj *TclNewInstNameObj(unsigned char inst);
*(envPtr)->codeNext++ = \
(unsigned char) ((unsigned int) (i) ); \
} while (0)
#endif
/*
* Macros to emit an instruction with signed or unsigned integer operands.
+1 -3
View File
@@ -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
View File
@@ -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);
+55 -13
View File
@@ -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;
@@ -1539,7 +1543,7 @@ CompileExprObj(
codePtr->localCachePtr->refCount++;
}
#ifdef TCL_COMPILE_DEBUG
if (tclTraceCompile == 2) {
if (tclTraceCompile >= 2) {
TclPrintByteCodeObj(interp, objPtr);
fflush(stdout);
}
@@ -2728,6 +2732,23 @@ TEBCresume(
PUSH_TAUX_OBJ(objPtr);
NEXT_INST_F(1, 0, 0);
case INST_VERIFY : {
#ifdef TCL_COMPILE_DEBUG
/*
* This is how deep the compiler thought the stack would be,
* assuming no expansion.
*/
int estimate = TclGetUInt4AtPtr(pc+1);
if (CURR_DEPTH != estimate + (auxObjList ? auxObjList->length : 0)) {
Tcl_Panic("(%d) Bad stack estimate = %d; truth = %ld",
(int)(pc - TD->pc), estimate,
CURR_DEPTH - (auxObjList ? auxObjList->length : 0));
}
#endif
NEXT_INST_F(5, 0, 0);
}
case INST_EXPAND_DROP:
/*
* Drops an element of the auxObjList, popping stack elements to
@@ -2748,6 +2769,18 @@ TEBCresume(
int i;
ptrdiff_t moved;
#ifdef TCL_COMPILE_DEBUG
/*
* This is how deep the compiler thought the stack would be,
* assuming no expansion.
*/
int estimate = TclGetInt4AtPtr(pc+1);
if (CURR_DEPTH != estimate + auxObjList->length) {
Tcl_Panic("Bad stack estimate = %d; truth = %ld", estimate,
CURR_DEPTH - auxObjList->length);
}
#endif
/*
* Make sure that the element at stackTop is a list; if not, just
* leave with an error. Note that the element from the expand list
@@ -2993,7 +3026,7 @@ TEBCresume(
#endif
case INST_INVOKE_REPLACE:
objc = TclGetUInt4AtPtr(pc+1);
objc = TclGetUInt4AtPtr(pc+1) - 1;
opnd = TclGetUInt1AtPtr(pc+5);
objPtr = POP_OBJECT();
objv = &OBJ_AT_DEPTH(objc-1);
@@ -6171,6 +6204,11 @@ TEBCresume(
*/
pc += 5;
#ifdef TCL_COMPILE_DEBUG
if (*pc == INST_VERIFY) {
pc +=5;
}
#endif
if (*pc == INST_JUMP_FALSE1) {
NEXT_INST_F((continueLoop? 2 : TclGetInt1AtPtr(pc+1)), 0, 0);
} else {
@@ -6237,7 +6275,11 @@ TEBCresume(
if (code < TCL_ERROR || code > TCL_CONTINUE) {
code = TCL_CONTINUE + 1;
}
NEXT_INST_F(2*code -1, 1, 0);
NEXT_INST_F(2*code -1
#ifdef TCL_COMPILE_DEBUG
+ (code != TCL_ERROR)*10
#endif
, 1, 0);
}
/*
@@ -6267,7 +6309,7 @@ TEBCresume(
case INST_DICT_EXISTS: {
register Tcl_Interp *interp2 = interp;
opnd = TclGetUInt4AtPtr(pc+1);
opnd = TclGetUInt4AtPtr(pc+1) - 1;
TRACE(("%u => ", opnd));
dictPtr = OBJ_AT_DEPTH(opnd);
if (*pc == INST_DICT_EXISTS) {
@@ -6323,7 +6365,7 @@ TEBCresume(
case INST_DICT_SET:
case INST_DICT_UNSET:
case INST_DICT_INCR_IMM:
opnd = TclGetUInt4AtPtr(pc+1);
opnd = TclGetUInt4AtPtr(pc+1) - (*pc == INST_DICT_SET);
opnd2 = TclGetUInt4AtPtr(pc+5);
varPtr = LOCAL(opnd2);
+1 -1
View File
@@ -1944,7 +1944,7 @@ TclNREvalFile(
iPtr->evalFlags |= TCL_EVAL_FILE;
TclNRAddCallback(interp, EvalFileCallback, oldScriptFile, pathPtr, objPtr,
NULL);
return TclNREvalObjEx(interp, objPtr, TCL_EVAL_DIRECT, NULL, INT_MIN);
return TclNREvalObjEx(interp, objPtr, 0, NULL, INT_MIN);
}
static int
+2
View File
@@ -3857,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.
+65 -30
View File
@@ -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
+1 -1
View File
@@ -271,7 +271,7 @@ TclOOInit(
return TCL_ERROR;
}
return Tcl_PkgProvideEx(interp, "TclOO", TCLOO_VERSION,
return Tcl_PkgProvideEx(interp, "TclOO", TCLOO_PATCHLEVEL,
(ClientData) &tclOOStubs);
}
+16 -3
View File
@@ -1,12 +1,23 @@
# 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 and tclOOStubInit.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 +127,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
+21 -15
View File
@@ -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
@@ -42,6 +27,24 @@ extern const char *TclOOInitializeStubs(
#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
extern const char *TclOOInitializeStubs(
Tcl_Interp *, const char *version);
#define Tcl_OOInitStubs(interp) \
TclOOInitializeStubs((interp), TCLOO_VERSION)
#ifndef USE_TCL_STUBS
# define TclOOInitializeStubs(interp, version) (TCLOO_PATCHLEVEL)
#endif
/*
* These are opaque types.
*/
@@ -130,6 +133,9 @@ typedef struct {
#include "tclOODecls.h"
#ifdef __cplusplus
}
#endif
#endif
/*
+45 -29
View File
@@ -5,6 +5,19 @@
#ifndef _TCLOODECLS
#define _TCLOODECLS
#undef TCL_STORAGE_CLASS
#ifdef BUILD_tcl
# define TCL_STORAGE_CLASS DLLEXPORT
#else
# ifdef USE_TCL_STUBS
# undef USE_TCLOO_STUBS
# define USE_TCLOO_STUBS
# define TCL_STORAGE_CLASS
# else
# define TCL_STORAGE_CLASS DLLIMPORT
# endif
#endif
/* !BEGIN!: Do not edit below this line. */
/*
@@ -12,92 +25,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 +228,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 */
+30 -16
View File
@@ -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 */
+2
View File
@@ -27,6 +27,8 @@ const TclOOIntStubs *tclOOIntStubsPtr = NULL;
*----------------------------------------------------------------------
*/
#undef TclOOInitializeStubs
MODULE_SCOPE const char *
TclOOInitializeStubs(
Tcl_Interp *interp,
+17 -1
View File
@@ -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;
}
+4 -6
View File
@@ -234,9 +234,8 @@ static int exprInt(Tcl_Interp *interp, const char *expr, int *ptr){
&& (longValue <= (long)(UINT_MAX))) {
*ptr = (int)longValue;
} else {
Tcl_SetResult(interp,
"integer value too large to represent as non-long integer",
TCL_STATIC);
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"integer value too large to represent as non-long integer", -1));
result = TCL_ERROR;
}
}
@@ -251,9 +250,8 @@ static int exprIntObj(Tcl_Interp *interp, Tcl_Obj*expr, int *ptr){
&& (longValue <= (long)(UINT_MAX))) {
*ptr = (int)longValue;
} else {
Tcl_SetResult(interp,
"integer value too large to represent as non-long integer",
TCL_STATIC);
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"integer value too large to represent as non-long integer", -1));
result = TCL_ERROR;
}
}
-58
View File
@@ -1,58 +0,0 @@
/*
* tclStubLibTbl.c --
*
* Stub object that will be statically linked into extensions that want
* to access Tcl.
*
* Copyright (c) 1998-1999 by Scriptics Corporation.
* Copyright (c) 1998 Paul Duffin.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
#include "tclInt.h"
/*
*----------------------------------------------------------------------
*
* TclInitStubTable --
*
* Initialize the stub table, using the structure pointed at
* by the "version" argument.
*
* Results:
* Outputs the value of the "version" argument.
*
* Side effects:
* Sets the stub table pointers.
*
*----------------------------------------------------------------------
*/
MODULE_SCOPE const char *
TclInitStubTable(
const char *version) /* points to the version field of a
TclStubInfoType structure variable. */
{
tclStubsPtr = ((const TclStubInfoType *) version)->stubs;
if (tclStubsPtr->hooks) {
tclPlatStubsPtr = tclStubsPtr->hooks->tclPlatStubs;
tclIntStubsPtr = tclStubsPtr->hooks->tclIntStubs;
tclIntPlatStubsPtr = tclStubsPtr->hooks->tclIntPlatStubs;
} else {
tclPlatStubsPtr = NULL;
tclIntStubsPtr = NULL;
tclIntPlatStubsPtr = NULL;
}
return version;
}
/*
* Local Variables:
* mode: c
* c-basic-offset: 4
* fill-column: 78
* End:
*/
+95 -95
View File
@@ -624,7 +624,7 @@ static const unsigned char groupMap[] = {
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 15, 15, 15, 3, 3, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 0, 7, 7, 7, 3, 3,
4, 3, 3, 14, 14, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 3, 0,
4, 3, 3, 14, 14, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 3, 17,
0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
85, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 86, 86, 86, 86, 86, 86,
@@ -792,118 +792,118 @@ static const unsigned char groupMap[] = {
116, 86, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 3, 3,
3, 85, 3, 3, 3, 4, 15, 86, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0,
0, 3, 3, 3, 3, 3, 3, 8, 3, 3, 3, 3, 86, 86, 86, 2, 0, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, 15, 15, 85, 15, 15, 15, 15, 15,
0, 3, 3, 3, 3, 3, 3, 8, 3, 3, 3, 3, 86, 86, 86, 17, 0, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, 15, 15, 85, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0,
0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 86, 15, 0, 0, 0, 0, 0,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0,
0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 86, 15, 0, 0, 0, 0,
0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 86, 86, 86, 116, 116, 116, 116,
86, 86, 116, 116, 116, 0, 0, 0, 0, 116, 116, 86, 116, 116, 116, 116,
116, 116, 86, 86, 86, 0, 0, 0, 0, 14, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 0, 0, 0, 86, 86, 86, 116, 116, 116, 116, 86,
86, 116, 116, 116, 0, 0, 0, 0, 116, 116, 86, 116, 116, 116, 116, 116,
116, 86, 86, 86, 0, 0, 0, 0, 14, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15,
15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 15, 15, 15,
15, 15, 15, 15, 116, 116, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
0, 0, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 116, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
15, 15, 15, 15, 15, 15, 15, 116, 116, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 86, 86, 116, 116, 116,
0, 0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 116, 86, 116, 86, 86, 86, 86, 86, 86, 86,
0, 86, 116, 86, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86, 116, 116,
116, 116, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 0, 0, 86,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 85, 3, 3, 3, 3, 3,
3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86,
86, 116, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 86, 86, 116,
116, 86, 0, 0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 116, 86, 116, 86, 86, 86, 86, 86,
86, 86, 0, 86, 116, 86, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86, 116,
116, 116, 116, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 0,
0, 86, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 85, 3, 3,
3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,
86, 86, 86, 116, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 86, 116,
86, 86, 86, 86, 86, 116, 86, 116, 116, 116, 116, 116, 86, 116, 116,
15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 3, 3, 3, 3, 3, 3, 3, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 86,
86, 86, 86, 86, 86, 86, 86, 86, 14, 14, 14, 14, 14, 14, 14, 14, 14,
0, 0, 0, 86, 86, 116, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 116, 86, 86, 86, 86, 116, 116, 86, 86, 116, 86, 116, 116, 15, 15,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 86, 116, 86, 86, 116, 116, 116, 86, 116, 86, 86, 86, 116, 116,
0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 15, 15, 15, 15, 116, 116, 116,
116, 116, 116, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86, 116, 116,
86, 86, 0, 0, 0, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
0, 15, 15, 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15,
86, 116, 86, 86, 86, 86, 86, 116, 86, 116, 116, 116, 116, 116, 86,
116, 116, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 86, 86, 86, 86, 86, 86, 86, 86, 86, 14, 14, 14, 14, 14, 14, 14,
14, 14, 0, 0, 0, 86, 86, 116, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 85, 85, 85, 85, 85, 85, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 3, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 116, 86, 86, 86, 86, 86, 86, 86,
15, 15, 15, 15, 86, 15, 15, 15, 15, 116, 116, 86, 15, 15, 0, 0, 0,
0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
15, 15, 15, 116, 86, 86, 86, 86, 116, 116, 86, 86, 116, 86, 116, 116,
15, 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 86, 116, 86, 86, 116, 116, 116, 86, 116, 86, 86, 86,
116, 116, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 15, 15, 15, 15, 116,
116, 116, 116, 116, 116, 116, 116, 86, 86, 86, 86, 86, 86, 86, 86,
116, 116, 86, 86, 0, 0, 0, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 0, 0, 0, 15, 15, 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 85, 85, 85, 85, 85, 85, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 3, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 116, 86, 86, 86, 86, 86,
86, 86, 15, 15, 15, 15, 86, 15, 15, 15, 15, 116, 116, 86, 15, 15, 0,
0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 85, 85, 85,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 85,
85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
85, 85, 85, 85, 85, 85, 85, 85, 85, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 85, 119, 21, 21, 21, 120, 21, 21, 21, 21, 21, 21,
85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 85, 119, 21, 21, 21, 120, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86,
86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
86, 86, 86, 86, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23,
24, 23, 24, 23, 24, 23, 24, 23, 24, 21, 21, 21, 21, 21, 121, 21, 21,
122, 21, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124,
124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 0, 0, 124, 124, 124,
124, 124, 124, 0, 0, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124,
124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123,
124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123,
0, 0, 124, 124, 124, 124, 124, 124, 0, 0, 21, 123, 21, 123, 21, 123,
21, 123, 0, 124, 0, 124, 0, 124, 0, 124, 123, 123, 123, 123, 123, 123,
123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 126, 126,
126, 126, 127, 127, 128, 128, 129, 129, 130, 130, 0, 0, 123, 123, 123,
123, 123, 123, 123, 123, 131, 131, 131, 131, 131, 131, 131, 131, 123,
123, 123, 123, 123, 123, 123, 123, 131, 131, 131, 131, 131, 131, 131,
131, 123, 123, 123, 123, 123, 123, 123, 123, 131, 131, 131, 131, 131,
131, 131, 131, 123, 123, 21, 132, 21, 0, 21, 21, 124, 124, 133, 133,
134, 11, 135, 11, 11, 11, 21, 132, 21, 0, 21, 21, 136, 136, 136, 136,
134, 11, 11, 11, 123, 123, 21, 21, 0, 0, 21, 21, 124, 124, 137, 137,
0, 11, 11, 11, 123, 123, 21, 21, 21, 106, 21, 21, 124, 124, 138, 138,
109, 11, 11, 11, 0, 0, 21, 132, 21, 0, 21, 21, 139, 139, 140, 140,
134, 11, 11, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 17, 17,
8, 8, 8, 8, 8, 8, 3, 3, 16, 20, 5, 16, 16, 20, 5, 16, 3, 3, 3, 3, 3,
3, 3, 3, 141, 142, 17, 17, 17, 17, 17, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3,
16, 20, 3, 3, 3, 3, 12, 12, 3, 3, 3, 7, 5, 6, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 7, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 17, 17, 17,
17, 17, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 18, 85, 0, 0, 18, 18,
18, 18, 18, 18, 7, 7, 7, 5, 6, 85, 18, 18, 18, 18, 18, 18, 18, 18,
18, 18, 7, 7, 7, 5, 6, 0, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
85, 85, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 111, 111, 111, 111, 86, 111, 111, 111, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 14, 14, 100, 14, 14, 14, 14, 100, 14, 14, 21, 100, 100, 100,
21, 21, 100, 100, 100, 21, 14, 100, 14, 14, 7, 100, 100, 100, 100,
100, 14, 14, 14, 14, 14, 14, 100, 14, 143, 14, 100, 14, 144, 145, 100,
100, 14, 21, 100, 100, 146, 100, 21, 15, 15, 15, 15, 21, 14, 14, 21,
21, 100, 100, 7, 7, 7, 7, 7, 100, 21, 21, 21, 21, 14, 7, 14, 14, 147,
14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
149, 149, 149, 149, 118, 118, 118, 23, 24, 118, 118, 118, 118, 18,
0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 7, 7, 14, 14,
14, 14, 7, 14, 14, 7, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 7, 14,
21, 21, 21, 21, 21, 21, 21, 21, 85, 85, 85, 85, 85, 86, 86, 86, 86,
86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 86, 86, 86, 86, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24,
23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 21, 21, 21, 21, 21, 121, 21,
21, 122, 21, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124,
124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 0, 0, 124, 124,
124, 124, 124, 124, 0, 0, 123, 123, 123, 123, 123, 123, 123, 123, 124,
124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123,
123, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123,
123, 0, 0, 124, 124, 124, 124, 124, 124, 0, 0, 21, 123, 21, 123, 21,
123, 21, 123, 0, 124, 0, 124, 0, 124, 0, 124, 123, 123, 123, 123, 123,
123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 126,
126, 126, 126, 127, 127, 128, 128, 129, 129, 130, 130, 0, 0, 123, 123,
123, 123, 123, 123, 123, 123, 131, 131, 131, 131, 131, 131, 131, 131,
123, 123, 123, 123, 123, 123, 123, 123, 131, 131, 131, 131, 131, 131,
131, 131, 123, 123, 123, 123, 123, 123, 123, 123, 131, 131, 131, 131,
131, 131, 131, 131, 123, 123, 21, 132, 21, 0, 21, 21, 124, 124, 133,
133, 134, 11, 135, 11, 11, 11, 21, 132, 21, 0, 21, 21, 136, 136, 136,
136, 134, 11, 11, 11, 123, 123, 21, 21, 0, 0, 21, 21, 124, 124, 137,
137, 0, 11, 11, 11, 123, 123, 21, 21, 21, 106, 21, 21, 124, 124, 138,
138, 109, 11, 11, 11, 0, 0, 21, 132, 21, 0, 21, 21, 139, 139, 140,
140, 134, 11, 11, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 17,
17, 8, 8, 8, 8, 8, 8, 3, 3, 16, 20, 5, 16, 16, 20, 5, 16, 3, 3, 3,
3, 3, 3, 3, 3, 141, 142, 17, 17, 17, 17, 17, 2, 3, 3, 3, 3, 3, 3, 3,
3, 3, 16, 20, 3, 3, 3, 3, 12, 12, 3, 3, 3, 7, 5, 6, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 7, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 17, 17,
17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 85, 0, 0,
18, 18, 18, 18, 18, 18, 7, 7, 7, 5, 6, 85, 18, 18, 18, 18, 18, 18,
18, 18, 18, 18, 7, 7, 7, 5, 6, 0, 85, 85, 85, 85, 85, 85, 85, 85, 85,
85, 85, 85, 85, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 111, 111, 111, 111, 86, 111, 111, 111, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 14, 14, 100, 14, 14, 14, 14, 100, 14, 14, 21, 100, 100,
100, 21, 21, 100, 100, 100, 21, 14, 100, 14, 14, 7, 100, 100, 100,
100, 100, 14, 14, 14, 14, 14, 14, 100, 14, 143, 14, 100, 14, 144, 145,
100, 100, 14, 21, 100, 100, 146, 100, 21, 15, 15, 15, 15, 21, 14, 14,
21, 21, 100, 100, 7, 7, 7, 7, 7, 100, 21, 21, 21, 21, 14, 7, 14, 14,
147, 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
18, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
149, 149, 149, 149, 149, 118, 118, 118, 23, 24, 118, 118, 118, 118,
18, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 7, 7, 14,
14, 14, 14, 7, 14, 14, 7, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 7,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 14, 14, 7,
14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 14, 14,
7, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14,
14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 5, 6, 5, 6, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 14, 14, 14, 14,
14, 14, 14, 5, 6, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+47
View File
@@ -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);
}
}
/*
*----------------------------------------------------------------------
*
+114 -170
View File
@@ -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}
}
+3 -37
View File
@@ -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)
+3 -4
View File
@@ -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)
+1 -173
View File
@@ -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}
}
+1 -1
View File
@@ -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}
}
+3 -5
View File
@@ -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 -2
View File
@@ -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}
}
+3 -4
View File
@@ -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 -2
View File
@@ -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}
+3 -4
View File
@@ -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)
+3 -4
View File
@@ -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)
+3 -3
View File
@@ -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}
+3 -3
View File
@@ -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)
+3 -4
View File
@@ -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)
+3 -3
View File
@@ -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)
+3 -4
View File
@@ -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)
+3 -5
View File
@@ -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)
+3 -4
View File
@@ -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)
+3 -5
View File
@@ -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)
+3 -4
View File
@@ -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)
+3 -3
View File
@@ -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)
+3 -255
View File
@@ -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)
+3 -3
View File
@@ -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
View File
@@ -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}
}
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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}
}
+6 -6
View File
@@ -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 -2
View File
@@ -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}
}
+2 -2
View File
@@ -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}
}
+6 -6
View File
@@ -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
View File
@@ -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 -2
View File
@@ -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
View File
@@ -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}
}
+3 -3
View File
@@ -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)
+64
View File
@@ -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
+23
View File
@@ -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] {
+242
View File
@@ -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
+6
View File
@@ -215,6 +215,12 @@ test load-10.1 {load from vfs} \
-body {list [catch {load simplefs:/pkgd$ext pkgd} msg] $msg} \
-result {0 {}} \
-cleanup {testsimplefilesystem 0; cd $dir; unset dir}
test load-11.1 {Load TclOO extension using Stubs (Bug [f51efe99a7])} \
[list $dll $loaded] {
load [file join $testDir pkgooa$ext]
list [pkgooa_stubsok] [lsort [info commands pkgooa_*]]
} {1 pkgooa_stubsok}
# cleanup
unset ext
+1 -1
View File
@@ -101,7 +101,7 @@ test oo-0.8 {leak in variable management} -setup {
test oo-0.9 {various types of presence of the TclOO package} {
list [lsearch -nocase -all -inline [package names] tcloo] \
[package present TclOO] [package versions TclOO]
} [list TclOO $::oo::version $::oo::version]
} [list TclOO $::oo::patchlevel $::oo::patchlevel]
test oo-1.1 {basic test of OO functionality: no classes} {
set result {}
+10
View File
@@ -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.
+8 -1
View File
@@ -16,6 +16,13 @@ if {"::tcltest" ni [namespace children]} {
}
testConstraint zlib [llength [info commands zlib]]
testConstraint recentZlib 0
catch {
# Work around a bug in some versions of zlib; known to manifest on at
# least Mac OS X Mountain Lion...
testConstraint recentZlib \
[package vsatisfies [zlib::pkgconfig get zlibVersion] 1.2.6]
}
test zlib-1.1 {zlib basics} -constraints zlib -returnCodes error -body {
zlib
@@ -269,7 +276,7 @@ test zlib-8.9 {transformation and fconfigure} -setup {
} -result {3064818174 358 358}
test zlib-8.10 {transformation and fconfigure} -setup {
lassign [chan pipe] inSide outSide
} -constraints zlib -body {
} -constraints {zlib recentZlib} -body {
zlib push deflate $outSide -dictionary $spdyDict
fconfigure $outSide -blocking 0 -translation binary -buffering none
fconfigure $inSide -blocking 0 -translation binary
+7 -1
View File
@@ -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)
#--------------------------------------------------------------------------
+12 -3
View File
@@ -22,14 +22,14 @@ LDFLAGS_DEBUG = @LDFLAGS_DEBUG@
LDFLAGS_OPTIMIZE = @LDFLAGS_OPTIMIZE@
LDFLAGS = @LDFLAGS_DEFAULT@ @LDFLAGS@
CC_SWITCHES = $(CFLAGS) -I${SRC_DIR}/../../generic -I${BUILD_DIR}/.. -DTCL_MEM_DEBUG \
CC_SWITCHES = $(CFLAGS) -I${SRC_DIR}/../../generic -DTCL_MEM_DEBUG \
${SHLIB_CFLAGS} -DUSE_TCL_STUBS ${AC_FLAGS}
all: pkga${SHLIB_SUFFIX} pkgb${SHLIB_SUFFIX} pkgc${SHLIB_SUFFIX} pkgd${SHLIB_SUFFIX} pkge${SHLIB_SUFFIX} pkgua${SHLIB_SUFFIX}
all: pkga${SHLIB_SUFFIX} pkgb${SHLIB_SUFFIX} pkgc${SHLIB_SUFFIX} pkgd${SHLIB_SUFFIX} pkge${SHLIB_SUFFIX} pkgua${SHLIB_SUFFIX} pkgooa${SHLIB_SUFFIX}
@if test -n "$(DLTEST_SUFFIX)"; then $(MAKE) dltest_suffix; fi
@touch ../dltest.marker
dltest_suffix: pkga${DLTEST_SUFFIX} pkgb${DLTEST_SUFFIX} pkgc${DLTEST_SUFFIX} pkgd${DLTEST_SUFFIX} pkge${DLTEST_SUFFIX} pkgua${DLTEST_SUFFIX}
dltest_suffix: pkga${DLTEST_SUFFIX} pkgb${DLTEST_SUFFIX} pkgc${DLTEST_SUFFIX} pkgd${DLTEST_SUFFIX} pkge${DLTEST_SUFFIX} pkgua${DLTEST_SUFFIX} pkgooa${DLTEST_SUFFIX}
@touch ../dltest.marker
pkga.o: $(SRC_DIR)/pkga.c
@@ -50,6 +50,9 @@ pkge.o: $(SRC_DIR)/pkge.c
pkgua.o: $(SRC_DIR)/pkgua.c
$(CC) -c $(CC_SWITCHES) $(SRC_DIR)/pkgua.c
pkgooa.o: $(SRC_DIR)/pkgooa.c
$(CC) -c $(CC_SWITCHES) $(SRC_DIR)/pkgooa.c
pkga${SHLIB_SUFFIX}: pkga.o
${SHLIB_LD} -o pkga${SHLIB_SUFFIX} pkga.o ${SHLIB_LD_LIBS}
@@ -68,6 +71,9 @@ pkge${SHLIB_SUFFIX}: pkge.o
pkgua${SHLIB_SUFFIX}: pkgua.o
${SHLIB_LD} -o pkgua${SHLIB_SUFFIX} pkgua.o ${SHLIB_LD_LIBS}
pkgooa${SHLIB_SUFFIX}: pkgooa.o
${SHLIB_LD} -o pkgooa${SHLIB_SUFFIX} pkgooa.o ${SHLIB_LD_LIBS}
pkga${DLTEST_SUFFIX}: pkga.o
${DLTEST_LD} -o pkga${DLTEST_SUFFIX} pkga.o ${SHLIB_LD_LIBS}
@@ -86,6 +92,9 @@ pkge${DLTEST_SUFFIX}: pkge.o
pkgua${DLTEST_SUFFIX}: pkgua.o
${DLTEST_LD} -o pkgua${DLTEST_SUFFIX} pkgua.o ${SHLIB_LD_LIBS}
pkgooa${DLTEST_SUFFIX}: pkgooa.o
${DLTEST_LD} -o pkgooa${DLTEST_SUFFIX} pkgooa.o ${SHLIB_LD_LIBS}
clean:
rm -f *.o lib.exp ../dltest.marker
@if test "$(SHLIB_SUFFIX)" != ""; then \
+141
View File
@@ -0,0 +1,141 @@
/*
* pkgooa.c --
*
* This file contains a simple Tcl package "pkgooa" that is intended for
* testing the Tcl dynamic loading facilities.
*
* Copyright (c) 1995 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
#undef STATIC_BUILD
#include "tclOO.h"
#include <string.h>
/*
*----------------------------------------------------------------------
*
* Pkgooa_StubsOKObjCmd --
*
* This procedure is invoked to process the "pkgooa_stubsok" Tcl command.
* It gives 1 if stubs are used correctly, 0 if stubs are not OK.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* See the user documentation.
*
*----------------------------------------------------------------------
*/
static int
Pkgooa_StubsOKObjCmd(
ClientData dummy, /* Not used. */
Tcl_Interp *interp, /* Current interpreter. */
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
if (objc != 1) {
Tcl_WrongNumArgs(interp, 1, objv, "");
return TCL_ERROR;
}
Tcl_SetObjResult(interp, Tcl_NewIntObj(
Tcl_CopyObjectInstance == tclOOStubsPtr->tcl_CopyObjectInstance));
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* Pkgooa_Init --
*
* This is a package initialization procedure, which is called by Tcl
* when this package is to be added to an interpreter.
*
* Results:
* None.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
extern void *tclOOIntStubsPtr;
static TclOOStubs stubsCopy = {
TCL_STUB_MAGIC,
NULL,
/* It doesn't really matter what implementation of
* Tcl_CopyObjectInstance is put in the "pseudo"
* stub table, since the test-case never actually
* calls this function. All that matters is that it's
* a function with a different memory address than
* the real Tcl_CopyObjectInstance function in Tcl. */
(Tcl_Object (*) (Tcl_Interp *, Tcl_Object, const char *,
const char *t)) Pkgooa_StubsOKObjCmd
/* More entries could be here, but those are not used
* for this test-case. So, being NULL is OK. */
};
extern DLLEXPORT int
Pkgooa_Init(
Tcl_Interp *interp) /* Interpreter in which the package is to be
* made available. */
{
int code;
/* Any TclOO extension which uses stubs, calls
* both Tcl_InitStubs and Tcl_OOInitStubs() and
* does not use any Tcl 8.6 features should be
* loadable in Tcl 8.5 as well, provided the
* TclOO extension (for Tcl 8.5) is installed.
* This worked in Tcl 8.6.0, and is expected
* to keep working in all future Tcl 8.x releases.
*/
if (Tcl_InitStubs(interp, "8.5", 0) == NULL) {
return TCL_ERROR;
}
if (tclStubsPtr == NULL) {
Tcl_AppendResult(interp, "Tcl stubs are not inialized, "
"did you compile using -DUSE_TCL_STUBS? ");
return TCL_ERROR;
}
if (Tcl_OOInitStubs(interp) == NULL) {
return TCL_ERROR;
}
if (tclOOStubsPtr == NULL) {
Tcl_AppendResult(interp, "TclOO stubs are not inialized");
return TCL_ERROR;
}
if (tclOOIntStubsPtr == NULL) {
Tcl_AppendResult(interp, "TclOO internal stubs are not inialized");
return TCL_ERROR;
}
/* Test case for Bug [f51efe99a7].
*
* Let tclOOStubsPtr point to an alternate stub table
* (with only a single function, that's enough for
* this test). This way, the function "pkgooa_stubsok"
* can check whether the TclOO function calls really
* use the stub table, or only pretend to.
*
* On platforms without backlinking (Windows, Cygwin,
* AIX), this code doesn't even compile without using
* stubs, but on UNIX ELF systems, the problem is
* less visible.
*/
tclOOStubsPtr = &stubsCopy;
code = Tcl_PkgProvide(interp, "Pkgooa", "1.0");
if (code != TCL_OK) {
return code;
}
Tcl_CreateObjCommand(interp, "pkgooa_stubsok", Pkgooa_StubsOKObjCmd, NULL, NULL);
return TCL_OK;
}
+4 -4
View File
@@ -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(&notifierMutex);
#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__)
/*
*----------------------------------------------------------------------
*
+2 -2
View File
@@ -566,8 +566,8 @@ TestforkObjCmd(
"Cannot fork", NULL);
return TCL_ERROR;
}
#if !defined(HAVE_PTHREAD_ATFORK) || defined(MAC_OSX_TCL)
/* Only needed when pthread_atfork is not present or on OSX. */
#if !defined(HAVE_PTHREAD_ATFORK)
/* Only needed when pthread_atfork is not present. */
if (pid==0) {
Tcl_InitNotifier();
}
+1 -1
View File
@@ -433,7 +433,7 @@ $(CAT32): cat32.$(OBJEXT)
${TCL_STUB_LIB_FILE}: ${STUB_OBJS}
@$(RM) ${TCL_STUB_LIB_FILE}
@MAKE_LIB@ ${STUB_OBJS}
@MAKE_STUB_LIB@ ${STUB_OBJS}
@POST_MAKE_LIB@
${TCL_DLL_FILE}: ${TCL_OBJS} tcl.$(RES) @ZLIB_DLL_FILE@
+9 -7
View File
@@ -309,7 +309,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP AR ac_ct_AR RANLIB ac_ct_RANLIB RC ac_ct_RC SET_MAKE TCL_THREADS CYGPATH CELIB_DIR DL_LIBS CFLAGS_DEBUG CFLAGS_OPTIMIZE CFLAGS_WARNING ZLIB_DLL_FILE ZLIB_LIBS ZLIB_OBJS CFLAGS_DEFAULT LDFLAGS_DEFAULT VC_MANIFEST_EMBED_DLL VC_MANIFEST_EMBED_EXE TCL_VERSION TCL_MAJOR_VERSION TCL_MINOR_VERSION TCL_PATCH_LEVEL PKG_CFG_ARGS TCL_EXE TCL_LIB_FILE TCL_LIB_FLAG TCL_STATIC_LIB_FILE TCL_STATIC_LIB_FLAG TCL_IMPORT_LIB_FILE TCL_IMPORT_LIB_FLAG TCL_LIB_SPEC TCL_STUB_LIB_FILE TCL_STUB_LIB_FLAG TCL_STUB_LIB_SPEC TCL_STUB_LIB_PATH TCL_INCLUDE_SPEC TCL_BUILD_STUB_LIB_SPEC TCL_BUILD_STUB_LIB_PATH TCL_DLL_FILE TCL_SRC_DIR TCL_BIN_DIR TCL_DBGX CFG_TCL_SHARED_LIB_SUFFIX CFG_TCL_UNSHARED_LIB_SUFFIX CFG_TCL_EXPORT_FILE_SUFFIX EXTRA_CFLAGS DEPARG CC_OBJNAME CC_EXENAME LDFLAGS_DEBUG LDFLAGS_OPTIMIZE LDFLAGS_CONSOLE LDFLAGS_WINDOW STLIB_LD SHLIB_LD SHLIB_LD_LIBS SHLIB_CFLAGS SHLIB_SUFFIX TCL_SHARED_BUILD LIBS_GUI DLLSUFFIX LIBPREFIX LIBSUFFIX EXESUFFIX LIBRARIES MAKE_LIB POST_MAKE_LIB MAKE_DLL MAKE_EXE TCL_BUILD_LIB_SPEC TCL_LD_SEARCH_FLAGS TCL_NEEDS_EXP_FILE TCL_BUILD_EXP_FILE TCL_EXP_FILE TCL_LIB_VERSIONS_OK TCL_PACKAGE_PATH TCL_DDE_VERSION TCL_DDE_MAJOR_VERSION TCL_DDE_MINOR_VERSION TCL_REG_VERSION TCL_REG_MAJOR_VERSION TCL_REG_MINOR_VERSION RC_OUT RC_TYPE RC_INCLUDE RC_DEFINE RC_DEFINES RES LIBOBJS LTLIBOBJS'
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP AR ac_ct_AR RANLIB ac_ct_RANLIB RC ac_ct_RC SET_MAKE TCL_THREADS CYGPATH CELIB_DIR DL_LIBS CFLAGS_DEBUG CFLAGS_OPTIMIZE CFLAGS_WARNING ZLIB_DLL_FILE ZLIB_LIBS ZLIB_OBJS CFLAGS_DEFAULT LDFLAGS_DEFAULT VC_MANIFEST_EMBED_DLL VC_MANIFEST_EMBED_EXE TCL_VERSION TCL_MAJOR_VERSION TCL_MINOR_VERSION TCL_PATCH_LEVEL PKG_CFG_ARGS TCL_EXE TCL_LIB_FILE TCL_LIB_FLAG TCL_STATIC_LIB_FILE TCL_STATIC_LIB_FLAG TCL_IMPORT_LIB_FILE TCL_IMPORT_LIB_FLAG TCL_LIB_SPEC TCL_STUB_LIB_FILE TCL_STUB_LIB_FLAG TCL_STUB_LIB_SPEC TCL_STUB_LIB_PATH TCL_INCLUDE_SPEC TCL_BUILD_STUB_LIB_SPEC TCL_BUILD_STUB_LIB_PATH TCL_DLL_FILE TCL_SRC_DIR TCL_BIN_DIR TCL_DBGX CFG_TCL_SHARED_LIB_SUFFIX CFG_TCL_UNSHARED_LIB_SUFFIX CFG_TCL_EXPORT_FILE_SUFFIX EXTRA_CFLAGS DEPARG CC_OBJNAME CC_EXENAME LDFLAGS_DEBUG LDFLAGS_OPTIMIZE LDFLAGS_CONSOLE LDFLAGS_WINDOW STLIB_LD SHLIB_LD SHLIB_LD_LIBS SHLIB_CFLAGS SHLIB_SUFFIX TCL_SHARED_BUILD LIBS_GUI DLLSUFFIX LIBPREFIX LIBSUFFIX EXESUFFIX LIBRARIES MAKE_LIB MAKE_STUB_LIB POST_MAKE_LIB MAKE_DLL MAKE_EXE TCL_BUILD_LIB_SPEC TCL_LD_SEARCH_FLAGS TCL_NEEDS_EXP_FILE TCL_BUILD_EXP_FILE TCL_EXP_FILE TCL_LIB_VERSIONS_OK TCL_PACKAGE_PATH TCL_DDE_VERSION TCL_DDE_MAJOR_VERSION TCL_DDE_MINOR_VERSION TCL_REG_VERSION TCL_REG_MAJOR_VERSION TCL_REG_MINOR_VERSION RC_OUT RC_TYPE RC_INCLUDE RC_DEFINE RC_DEFINES RES LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -3449,6 +3449,8 @@ echo "${ECHO_T}yes" >&6
# set various compiler flags depending on whether we are using gcc or cl
if test "${GCC}" = "yes" ; then
extra_cflags="-pipe"
extra_ldflags="-pipe -static-libgcc"
echo "$as_me:$LINENO: checking for mingw32 version of gcc" >&5
echo $ECHO_N "checking for mingw32 version of gcc... $ECHO_C" >&6
if test "${ac_cv_win32+set}" = set; then
@@ -3595,13 +3597,11 @@ echo $ECHO_N "checking compiler flags... $ECHO_C" >&6
RC_DEFINE=--define
RES=res.o
MAKE_LIB="\${STLIB_LD} \$@"
MAKE_STUB_LIB="\${STLIB_LD} \$@"
POST_MAKE_LIB="\${RANLIB} \$@"
MAKE_EXE="\${CC} -o \$@"
LIBPREFIX="lib"
extra_cflags="$extra_cflags -pipe"
extra_ldflags="$extra_ldflags -pipe"
if test "${SHARED_BUILD}" = "0" ; then
# static
echo "$as_me:$LINENO: result: using static flags" >&5
@@ -3630,9 +3630,8 @@ echo "$as_me: error: ${CC} does not support the -shared option.
LIBRARIES="\${SHARED_LIBRARIES}"
fi
# Link with gcc since ld does not link to default libs like
# -luser32 and -lmsvcrt by default. Make sure CFLAGS is
# included so -mno-cygwin passed the correct libs to the linker.
SHLIB_LD='${CC} -shared ${CFLAGS}'
# -luser32 and -lmsvcrt by default.
SHLIB_LD='${CC} -shared'
SHLIB_LD_LIBS='${LIBS}'
MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -o \$@ ${extra_ldflags} \
-Wl,--out-implib,\$(patsubst %.dll,lib%.a,\$@)"
@@ -4004,6 +4003,7 @@ _ACEOF
RC_DEFINE=-d
RES=res
MAKE_LIB="\${STLIB_LD} -out:\$@"
MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\$@"
POST_MAKE_LIB=
MAKE_EXE="\${CC} -Fe\$@"
LIBPREFIX=""
@@ -5233,6 +5233,7 @@ fi
# empty on win, but needs sub'ing
@@ -5976,6 +5977,7 @@ s,@LIBSUFFIX@,$LIBSUFFIX,;t t
s,@EXESUFFIX@,$EXESUFFIX,;t t
s,@LIBRARIES@,$LIBRARIES,;t t
s,@MAKE_LIB@,$MAKE_LIB,;t t
s,@MAKE_STUB_LIB@,$MAKE_STUB_LIB,;t t
s,@POST_MAKE_LIB@,$POST_MAKE_LIB,;t t
s,@MAKE_DLL@,$MAKE_DLL,;t t
s,@MAKE_EXE@,$MAKE_EXE,;t t
+1
View File
@@ -413,6 +413,7 @@ AC_SUBST(LIBSUFFIX)
AC_SUBST(EXESUFFIX)
AC_SUBST(LIBRARIES)
AC_SUBST(MAKE_LIB)
AC_SUBST(MAKE_STUB_LIB)
AC_SUBST(POST_MAKE_LIB)
AC_SUBST(MAKE_DLL)
AC_SUBST(MAKE_EXE)
+1 -1
View File
@@ -622,7 +622,7 @@ $**
!endif
$(TCLSTUBLIB): $(TCLSTUBOBJS)
$(lib32) -nologo $(LINKERFLAGS) -out:$@ $(TCLSTUBOBJS)
$(lib32) -nologo $(LINKERFLAGS) -nodefaultlib -out:$@ $(TCLSTUBOBJS)
$(TCLSH): $(TCLSHOBJS) $(TCLSTUBLIB) $(TCLIMPLIB)
$(link32) $(conlflags) -stack:2300000 -out:$@ $(baselibs) $**
+7 -6
View File
@@ -523,6 +523,7 @@ AC_DEFUN([SC_ENABLE_SYMBOLS], [
# RES
#
# MAKE_LIB
# MAKE_STUB_LIB
# MAKE_EXE
# MAKE_DLL
#
@@ -633,6 +634,8 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
# set various compiler flags depending on whether we are using gcc or cl
if test "${GCC}" = "yes" ; then
extra_cflags="-pipe"
extra_ldflags="-pipe -static-libgcc"
AC_CACHE_CHECK(for mingw32 version of gcc,
ac_cv_win32,
AC_TRY_COMPILE([
@@ -680,13 +683,11 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
RC_DEFINE=--define
RES=res.o
MAKE_LIB="\${STLIB_LD} \[$]@"
MAKE_STUB_LIB="\${STLIB_LD} \[$]@"
POST_MAKE_LIB="\${RANLIB} \[$]@"
MAKE_EXE="\${CC} -o \[$]@"
LIBPREFIX="lib"
extra_cflags="$extra_cflags -pipe"
extra_ldflags="$extra_ldflags -pipe"
if test "${SHARED_BUILD}" = "0" ; then
# static
AC_MSG_RESULT([using static flags])
@@ -710,9 +711,8 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
LIBRARIES="\${SHARED_LIBRARIES}"
fi
# Link with gcc since ld does not link to default libs like
# -luser32 and -lmsvcrt by default. Make sure CFLAGS is
# included so -mno-cygwin passed the correct libs to the linker.
SHLIB_LD='${CC} -shared ${CFLAGS}'
# -luser32 and -lmsvcrt by default.
SHLIB_LD='${CC} -shared'
SHLIB_LD_LIBS='${LIBS}'
MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -o \[$]@ ${extra_ldflags} \
-Wl,--out-implib,\$(patsubst %.dll,lib%.a,\[$]@)"
@@ -961,6 +961,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
RC_DEFINE=-d
RES=res
MAKE_LIB="\${STLIB_LD} -out:\[$]@"
MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@"
POST_MAKE_LIB=
MAKE_EXE="\${CC} -Fe\[$]@"
LIBPREFIX=""
+1
View File
@@ -34,6 +34,7 @@ extern Tcl_PackageInitProc Dde_SafeInit;
#endif
#ifdef TCL_BROKEN_MAINARGS
int _CRT_glob = 0;
static void setargv(int *argcPtr, TCHAR ***argvPtr);
#endif /* TCL_BROKEN_MAINARGS */
+6 -23
View File
@@ -25,23 +25,6 @@
static HINSTANCE hInstance; /* HINSTANCE of this DLL. */
static int platformId; /* Running under NT, or 95/98? */
#ifdef HAVE_NO_SEH
/*
* Unlike Borland and Microsoft, we don't register exception handlers by
* pushing registration records onto the runtime stack. Instead, we register
* them by creating an EXCEPTION_REGISTRATION within the activation record.
*/
typedef struct EXCEPTION_REGISTRATION {
struct EXCEPTION_REGISTRATION *link;
EXCEPTION_DISPOSITION (*handler)(
struct _EXCEPTION_RECORD*, void*, struct _CONTEXT*, void*);
void *ebp;
void *esp;
int status;
} EXCEPTION_REGISTRATION;
#endif
/*
* VC++ 5.x has no 'cpuid' assembler instruction, so we must emulate it
*/
@@ -662,7 +645,7 @@ TclWinCPUID(
# else
EXCEPTION_REGISTRATION registration;
TCLEXCEPTION_REGISTRATION registration;
/*
* Execute the CPUID instruction with the given index, and store results
@@ -671,7 +654,7 @@ TclWinCPUID(
__asm__ __volatile__(
/*
* Construct an EXCEPTION_REGISTRATION to protect the CPUID
* Construct an TCLEXCEPTION_REGISTRATION to protect the CPUID
* instruction (early 486's don't have CPUID)
*/
@@ -685,7 +668,7 @@ TclWinCPUID(
"movl %[error], 0x10(%%edx)" "\n\t" /* status */
/*
* Link the EXCEPTION_REGISTRATION on the chain
* Link the TCLEXCEPTION_REGISTRATION on the chain
*/
"movl %%edx, %%fs:0" "\n\t"
@@ -704,7 +687,7 @@ TclWinCPUID(
"movl %%edx, 0xc(%%edi)" "\n\t"
/*
* Come here on a normal exit. Recover the EXCEPTION_REGISTRATION and
* Come here on a normal exit. Recover the TCLEXCEPTION_REGISTRATION and
* store a TCL_OK status.
*/
@@ -714,7 +697,7 @@ TclWinCPUID(
"jmp 2f" "\n"
/*
* Come here on an exception. Get the EXCEPTION_REGISTRATION that we
* Come here on an exception. Get the TCLEXCEPTION_REGISTRATION that we
* previously put on the chain.
*/
@@ -724,7 +707,7 @@ TclWinCPUID(
/*
* Come here however we exited. Restore context from the
* EXCEPTION_REGISTRATION in case the stack is unbalanced.
* TCLEXCEPTION_REGISTRATION in case the stack is unbalanced.
*/
"2:" "\t"
+6 -23
View File
@@ -119,23 +119,6 @@ static const Tcl_ChannelType fileChannelType = {
FileThreadActionProc, /* Thread action proc. */
FileTruncateProc /* Truncate proc. */
};
#ifdef HAVE_NO_SEH
/*
* Unlike Borland and Microsoft, we don't register exception handlers by
* pushing registration records onto the runtime stack. Instead, we register
* them by creating an EXCEPTION_REGISTRATION within the activation record.
*/
typedef struct EXCEPTION_REGISTRATION {
struct EXCEPTION_REGISTRATION *link;
EXCEPTION_DISPOSITION (*handler)(
struct _EXCEPTION_RECORD*, void*, struct _CONTEXT*, void*);
void *ebp;
void *esp;
int status;
} EXCEPTION_REGISTRATION;
#endif
/*
*----------------------------------------------------------------------
@@ -1030,7 +1013,7 @@ Tcl_MakeFileChannel(
* TCL_WRITABLE to indicate file mode. */
{
#if defined(HAVE_NO_SEH) && !defined(_WIN64)
EXCEPTION_REGISTRATION registration;
TCLEXCEPTION_REGISTRATION registration;
#endif
char channelName[16 + TCL_INTEGER_SPACE];
Tcl_Channel channel = NULL;
@@ -1111,7 +1094,7 @@ Tcl_MakeFileChannel(
"movl %[dupedHandle], %%ebx" "\n\t"
/*
* Construct an EXCEPTION_REGISTRATION to protect the call to
* Construct an TCLEXCEPTION_REGISTRATION to protect the call to
* CloseHandle.
*/
@@ -1125,7 +1108,7 @@ Tcl_MakeFileChannel(
"movl $0, 0x10(%%edx)" "\n\t" /* status */
/*
* Link the EXCEPTION_REGISTRATION on the chain.
* Link the TCLEXCEPTION_REGISTRATION on the chain.
*/
"movl %%edx, %%fs:0" "\n\t"
@@ -1138,7 +1121,7 @@ Tcl_MakeFileChannel(
"call _CloseHandle@4" "\n\t"
/*
* Come here on normal exit. Recover the EXCEPTION_REGISTRATION
* Come here on normal exit. Recover the TCLEXCEPTION_REGISTRATION
* and put a TRUE status return into it.
*/
@@ -1148,7 +1131,7 @@ Tcl_MakeFileChannel(
"jmp 2f" "\n"
/*
* Come here on an exception. Recover the EXCEPTION_REGISTRATION
* Come here on an exception. Recover the TCLEXCEPTION_REGISTRATION
*/
"1:" "\t"
@@ -1157,7 +1140,7 @@ Tcl_MakeFileChannel(
/*
* Come here however we exited. Restore context from the
* EXCEPTION_REGISTRATION in case the stack is unbalanced.
* TCLEXCEPTION_REGISTRATION in case the stack is unbalanced.
*/
"2:" "\t"
+12 -31
View File
@@ -67,25 +67,6 @@ const TclFileAttrProcs tclpFileAttrProcs[] = {
{GetWinFileShortName, CannotSetAttribute},
{GetWinFileAttributes, SetWinFileAttributes}};
#ifdef HAVE_NO_SEH
/*
* Unlike Borland and Microsoft, we don't register exception handlers by
* pushing registration records onto the runtime stack. Instead, we register
* them by creating an EXCEPTION_REGISTRATION within the activation record.
*/
typedef struct EXCEPTION_REGISTRATION {
struct EXCEPTION_REGISTRATION *link;
EXCEPTION_DISPOSITION (*handler)(
struct _EXCEPTION_RECORD *, void *, struct _CONTEXT *, void *);
void *ebp;
void *esp;
int status;
} EXCEPTION_REGISTRATION;
#endif
/*
* Prototype for the TraverseWinTree callback function.
*/
@@ -176,7 +157,7 @@ DoRenameFile(
* (native). */
{
#if defined(HAVE_NO_SEH) && !defined(_WIN64)
EXCEPTION_REGISTRATION registration;
TCLEXCEPTION_REGISTRATION registration;
#endif
DWORD srcAttr, dstAttr;
int retval = -1;
@@ -213,7 +194,7 @@ DoRenameFile(
"movl %[nativeSrc], %%ecx" "\n\t"
/*
* Construct an EXCEPTION_REGISTRATION to protect the call to
* Construct an TCLEXCEPTION_REGISTRATION to protect the call to
* MoveFile.
*/
@@ -227,7 +208,7 @@ DoRenameFile(
"movl $0, 0x10(%%edx)" "\n\t" /* status */
/*
* Link the EXCEPTION_REGISTRATION on the chain.
* Link the TCLEXCEPTION_REGISTRATION on the chain.
*/
"movl %%edx, %%fs:0" "\n\t"
@@ -242,7 +223,7 @@ DoRenameFile(
"call *%%eax" "\n\t"
/*
* Come here on normal exit. Recover the EXCEPTION_REGISTRATION and
* Come here on normal exit. Recover the TCLEXCEPTION_REGISTRATION and
* put the status return from MoveFile into it.
*/
@@ -251,7 +232,7 @@ DoRenameFile(
"jmp 2f" "\n"
/*
* Come here on an exception. Recover the EXCEPTION_REGISTRATION
* Come here on an exception. Recover the TCLEXCEPTION_REGISTRATION
*/
"1:" "\t"
@@ -260,7 +241,7 @@ DoRenameFile(
/*
* Come here however we exited. Restore context from the
* EXCEPTION_REGISTRATION in case the stack is unbalanced.
* TCLEXCEPTION_REGISTRATION in case the stack is unbalanced.
*/
"2:" "\t"
@@ -563,7 +544,7 @@ DoCopyFile(
const TCHAR *nativeDst) /* Pathname of file to copy to (native). */
{
#if defined(HAVE_NO_SEH) && !defined(_WIN64)
EXCEPTION_REGISTRATION registration;
TCLEXCEPTION_REGISTRATION registration;
#endif
int retval = -1;
@@ -600,7 +581,7 @@ DoCopyFile(
"movl %[nativeSrc], %%ecx" "\n\t"
/*
* Construct an EXCEPTION_REGISTRATION to protect the call to
* Construct an TCLEXCEPTION_REGISTRATION to protect the call to
* CopyFile.
*/
@@ -614,7 +595,7 @@ DoCopyFile(
"movl $0, 0x10(%%edx)" "\n\t" /* status */
/*
* Link the EXCEPTION_REGISTRATION on the chain.
* Link the TCLEXCEPTION_REGISTRATION on the chain.
*/
"movl %%edx, %%fs:0" "\n\t"
@@ -630,7 +611,7 @@ DoCopyFile(
"call *%%eax" "\n\t"
/*
* Come here on normal exit. Recover the EXCEPTION_REGISTRATION and
* Come here on normal exit. Recover the TCLEXCEPTION_REGISTRATION and
* put the status return from CopyFile into it.
*/
@@ -639,7 +620,7 @@ DoCopyFile(
"jmp 2f" "\n"
/*
* Come here on an exception. Recover the EXCEPTION_REGISTRATION
* Come here on an exception. Recover the TCLEXCEPTION_REGISTRATION
*/
"1:" "\t"
@@ -648,7 +629,7 @@ DoCopyFile(
/*
* Come here however we exited. Restore context from the
* EXCEPTION_REGISTRATION in case the stack is unbalanced.
* TCLEXCEPTION_REGISTRATION in case the stack is unbalanced.
*/
"2:" "\t"
+17
View File
@@ -14,6 +14,23 @@
#include "tclInt.h"
#ifdef HAVE_NO_SEH
/*
* Unlike Borland and Microsoft, we don't register exception handlers by
* pushing registration records onto the runtime stack. Instead, we register
* them by creating an TCLEXCEPTION_REGISTRATION within the activation record.
*/
typedef struct TCLEXCEPTION_REGISTRATION {
struct TCLEXCEPTION_REGISTRATION *link;
EXCEPTION_DISPOSITION (*handler)(
struct _EXCEPTION_RECORD*, void*, struct _CONTEXT*, void*);
void *ebp;
void *esp;
int status;
} TCLEXCEPTION_REGISTRATION;
#endif
/*
* Some versions of Borland C have a define for the OSVERSIONINFO for
* Win32s and for NT, but not for Windows 95.