Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0bd09c4106 | ||
|
|
ff91f80124 | ||
|
|
e802927981 | ||
|
|
9d4d161834 | ||
|
|
111f52def6 | ||
|
|
9dd792a540 | ||
|
|
20bbe0a790 | ||
|
|
94b624f11c | ||
|
|
5a9014a650 | ||
|
|
a6a61c4ca6 | ||
|
|
121654ecd8 | ||
|
|
d0e9170c39 | ||
|
|
75a121d773 | ||
|
|
adc8a8bbdf | ||
|
|
466e0f29c3 | ||
|
|
de0ff2272e | ||
|
|
b9216a9c1f | ||
|
|
43f411afeb | ||
|
|
a35ad3e794 | ||
|
|
cd80622d5e | ||
|
|
26c5e61700 | ||
|
|
de9a7da4ba | ||
|
|
0faadee83c | ||
|
|
c1f627b31e | ||
|
|
4ed027b7bc | ||
|
|
258b9f4333 | ||
|
|
a31c699833 | ||
|
|
9c9ce91ef5 | ||
|
|
ed20823380 | ||
|
|
e82d7fb753 | ||
|
|
3b989eefe0 | ||
|
|
a982dd11fa | ||
|
|
2c1224dce7 | ||
|
|
c1e89d73fd | ||
|
|
c38755a732 | ||
|
|
47b333303e | ||
|
|
27e8f4db3d | ||
|
|
9b30058284 | ||
|
|
8c4d8a4f14 | ||
|
|
d52223f024 | ||
|
|
88451d16ba | ||
|
|
3691ae66b6 | ||
|
|
203cbf2ea0 | ||
|
|
b6c2770a30 | ||
|
|
1a0c2e24eb | ||
|
|
9c75e1c5f8 | ||
|
|
b0a9f6c55b | ||
|
|
9a322ef016 | ||
|
|
312263821f | ||
|
|
9e80ee005e | ||
|
|
3aa68b1a0b | ||
|
|
6642181b9d | ||
|
|
a67fec7324 | ||
|
|
fcc5b3486f | ||
|
|
172896b15a | ||
|
|
08553f531f | ||
|
|
7e7ec63c2c | ||
|
|
e354aa0e3d | ||
|
|
0957b2c850 | ||
|
|
57665b295c | ||
|
|
dfff588886 | ||
|
|
ca7c7ce1b7 | ||
|
|
4349c08e31 | ||
|
|
bb71951f1a | ||
|
|
4f37f05a9c | ||
|
|
abc5015131 | ||
|
|
f50166e4fc | ||
|
|
2c163978e7 | ||
|
|
4acf174468 | ||
|
|
e8b3de6a75 | ||
|
|
6fa4858662 | ||
|
|
dd7709baa2 | ||
|
|
c67bfbf1a4 | ||
|
|
b0bf6914f1 | ||
|
|
330e115d11 | ||
|
|
03c4df2e30 | ||
|
|
ff878198ef | ||
|
|
84707cf702 | ||
|
|
d8b1866404 | ||
|
|
45c9d1dc2c | ||
|
|
a3100689bc | ||
|
|
014e7b1951 | ||
|
|
ad5f7e5464 | ||
|
|
3b0f6c1c31 | ||
|
|
4198cbe8cd | ||
|
|
3e3a85339f | ||
|
|
adf3bedc0c | ||
|
|
c260fedf0c | ||
|
|
1c58938f2c | ||
|
|
051f9006ef | ||
|
|
361141a857 | ||
|
|
75194c3206 | ||
|
|
04a740f5c6 | ||
|
|
6aa85ad35f | ||
|
|
6797693d1b | ||
|
|
aef36bf11d | ||
|
|
0dc45b9fe3 | ||
|
|
e65b021050 | ||
|
|
b5100ee98f | ||
|
|
2951fec86b | ||
|
|
d07793f49c | ||
|
|
2acbdb0493 | ||
|
|
e00ad288cc | ||
|
|
5b8ce14566 | ||
|
|
facce70703 | ||
|
|
26f4ba76ca | ||
|
|
aaf8665696 | ||
|
|
e4dd07e735 | ||
|
|
e98a68549d | ||
|
|
1fc4f8eaa3 | ||
|
|
70bccae334 | ||
|
|
052f5d50c9 | ||
|
|
5815a325af | ||
|
|
3ff398393a | ||
|
|
ef0bb68bcb | ||
|
|
382a840e23 | ||
|
|
1e6fd4531c | ||
|
|
21e80b3a25 | ||
|
|
8e6efd7026 | ||
|
|
39365ed3c0 | ||
|
|
f52f05c3b1 | ||
|
|
388741b7d0 | ||
|
|
b2ca802381 | ||
|
|
b05600e60a | ||
|
|
98a8b3604f | ||
|
|
905d1e5d03 | ||
|
|
cb7c84c310 | ||
|
|
03bdf41de2 | ||
|
|
206428d2cf | ||
|
|
bc0d613154 | ||
|
|
1d6f003314 | ||
|
|
e81a4abd60 | ||
|
|
06ebe62a5e | ||
|
|
0d78d389e1 | ||
|
|
eea64f8d90 | ||
|
|
4c5cc88bdf | ||
|
|
a1cee7cd20 | ||
|
|
3327979282 | ||
|
|
8c19725a30 | ||
|
|
0a224ddfc8 | ||
|
|
9a7c011683 | ||
|
|
44427fccaa | ||
|
|
c4cf77f310 | ||
|
|
9b00a63b22 | ||
|
|
91d9bd02c0 | ||
|
|
56b69c4e9a | ||
|
|
d2b1e66352 | ||
|
|
d29d888dc6 | ||
|
|
f4ed4079b7 | ||
|
|
dde5a2565e | ||
|
|
e59a1e0b14 | ||
|
|
c4b5bfbd50 | ||
|
|
44869c9e35 | ||
|
|
e5463e8ec8 | ||
|
|
bddf737714 | ||
|
|
ef0fd808de | ||
|
|
f4fb1d1752 | ||
|
|
59ea8cb145 | ||
|
|
e9cf99c212 | ||
|
|
80630f4ec9 | ||
|
|
e63dcc2677 | ||
|
|
9bbc90b227 | ||
|
|
8e5dbc8a27 | ||
|
|
29c6b72a83 | ||
|
|
fd5b3bb085 | ||
|
|
2fda7e49a0 | ||
|
|
27256fcd71 | ||
|
|
e702454abe | ||
|
|
9423df2491 | ||
|
|
05b1764f74 | ||
|
|
bff7817ec0 | ||
|
|
13bc69a8a4 | ||
|
|
9aa711e8e0 | ||
|
|
b339d4bf03 | ||
|
|
1e58e8e42d | ||
|
|
91af7f6f90 | ||
|
|
68191ded75 | ||
|
|
ac3d0b69d3 | ||
|
|
96f611f896 | ||
|
|
ec9c29c80d |
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>tcl8</name>
|
||||
<name>tcl9</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
README: Tcl
|
||||
This is the Tcl 8.7a2 source distribution.
|
||||
This is the Tcl 9.0a0 source distribution.
|
||||
http://sourceforge.net/projects/tcl/files/Tcl/
|
||||
You can get any source release of Tcl from the URL above.
|
||||
|
||||
@@ -49,7 +49,7 @@ and selling it either in whole or in part. See the file
|
||||
|
||||
Extensive documentation is available at our website.
|
||||
The home page for this release, including new features, is
|
||||
http://www.tcl.tk/software/tcltk/8.7.html
|
||||
http://www.tcl.tk/software/tcltk/9.0.html
|
||||
|
||||
Detailed release notes can be found at the file distributions page
|
||||
by clicking on the relevant version.
|
||||
@@ -61,9 +61,9 @@ Information about Tcl itself can be found at
|
||||
There have been many Tcl books on the market. Many are mentioned in the Wiki:
|
||||
http://wiki.tcl.tk/_/ref?N=25206
|
||||
|
||||
To view the complete set of reference manual entries for Tcl 8.7 online,
|
||||
To view the complete set of reference manual entries for Tcl 9.0 online,
|
||||
visit the URL:
|
||||
http://www.tcl.tk/man/tcl8.7/
|
||||
http://www.tcl.tk/man/tcl9.0/
|
||||
|
||||
2a. Unix Documentation
|
||||
----------------------
|
||||
|
||||
+1
-6
@@ -9,7 +9,7 @@
|
||||
.so man.macros
|
||||
.BS
|
||||
.SH NAME
|
||||
Tcl_GetReturnOptions, Tcl_SetReturnOptions, Tcl_AddErrorInfo, Tcl_AppendObjToErrorInfo, Tcl_AddObjErrorInfo, Tcl_SetObjErrorCode, Tcl_SetErrorCode, Tcl_SetErrorCodeVA, Tcl_SetErrorLine, Tcl_GetErrorLine, Tcl_PosixError, Tcl_LogCommandInfo \- retrieve or record information about errors and other return options
|
||||
Tcl_GetReturnOptions, Tcl_SetReturnOptions, Tcl_AddErrorInfo, Tcl_AppendObjToErrorInfo, Tcl_AddObjErrorInfo, Tcl_SetObjErrorCode, Tcl_SetErrorCode, Tcl_SetErrorLine, Tcl_GetErrorLine, Tcl_PosixError, Tcl_LogCommandInfo \- retrieve or record information about errors and other return options
|
||||
.SH SYNOPSIS
|
||||
.nf
|
||||
\fB#include <tcl.h>\fR
|
||||
@@ -30,8 +30,6 @@ int
|
||||
.sp
|
||||
\fBTcl_SetErrorCode\fR(\fIinterp, element, element, ... \fB(char *) NULL\fR)
|
||||
.sp
|
||||
\fBTcl_SetErrorCodeVA\fR(\fIinterp, argList\fR)
|
||||
.sp
|
||||
\fBTcl_GetErrorLine\fR(\fIinterp\fR)
|
||||
.sp
|
||||
\fBTcl_SetErrorLine\fR(\fIinterp, lineNum\fR)
|
||||
@@ -245,9 +243,6 @@ The procedure \fBTcl_SetErrorCode\fR is also used to set the
|
||||
record instead of a value. Otherwise, it is similar to
|
||||
\fBTcl_SetObjErrorCode\fR in behavior.
|
||||
.PP
|
||||
\fBTcl_SetErrorCodeVA\fR is the same as \fBTcl_SetErrorCode\fR except that
|
||||
instead of taking a variable number of arguments it takes an argument list.
|
||||
.PP
|
||||
The procedure \fBTcl_GetErrorLine\fR is used to read the integer value
|
||||
of the \fB\-errorline\fR return option without the overhead of a full
|
||||
call to \fBTcl_GetReturnOptions\fR. Likewise, \fBTcl_SetErrorLine\fR
|
||||
|
||||
+1
-2
@@ -30,8 +30,7 @@ or \fBTCL_RETURN\fR, then Tcl normally converts this into a \fBTCL_ERROR\fR
|
||||
return with an appropriate message. The particular script
|
||||
evaluation procedures of Tcl that act in the manner are
|
||||
\fBTcl_EvalObjEx\fR, \fBTcl_EvalObjv\fR, \fBTcl_Eval\fR, \fBTcl_EvalEx\fR,
|
||||
\fBTcl_GlobalEval\fR, \fBTcl_GlobalEvalObj\fR, \fBTcl_VarEval\fR and
|
||||
\fBTcl_VarEvalVA\fR.
|
||||
\fBTcl_GlobalEval\fR, \fBTcl_GlobalEvalObj\fR and \fBTcl_VarEval\fR.
|
||||
.PP
|
||||
However, if \fBTcl_AllowExceptions\fR is invoked immediately before
|
||||
calling one of those a procedures, then arbitrary completion
|
||||
|
||||
+1
-11
@@ -10,7 +10,7 @@
|
||||
.so man.macros
|
||||
.BS
|
||||
.SH NAME
|
||||
Tcl_EvalObjEx, Tcl_EvalFile, Tcl_EvalObjv, Tcl_Eval, Tcl_EvalEx, Tcl_GlobalEval, Tcl_GlobalEvalObj, Tcl_VarEval, Tcl_VarEvalVA \- execute Tcl scripts
|
||||
Tcl_EvalObjEx, Tcl_EvalFile, Tcl_EvalObjv, Tcl_Eval, Tcl_EvalEx, Tcl_GlobalEval, Tcl_GlobalEvalObj, Tcl_VarEval \- execute Tcl scripts
|
||||
.SH SYNOPSIS
|
||||
.nf
|
||||
\fB#include <tcl.h>\fR
|
||||
@@ -38,9 +38,6 @@ int
|
||||
.sp
|
||||
int
|
||||
\fBTcl_VarEval\fR(\fIinterp, part, part, ... \fB(char *) NULL\fR)
|
||||
.sp
|
||||
int
|
||||
\fBTcl_VarEvalVA\fR(\fIinterp, argList\fR)
|
||||
.SH ARGUMENTS
|
||||
.AS Tcl_Interp **termPtr
|
||||
.AP Tcl_Interp *interp in
|
||||
@@ -67,9 +64,6 @@ first null byte are used.
|
||||
Points to first byte of script to execute (null-terminated and UTF-8).
|
||||
.AP char *part in
|
||||
String forming part of a Tcl script.
|
||||
.AP va_list argList in
|
||||
An argument list which must have been initialized using
|
||||
\fBva_start\fR, and cleared using \fBva_end\fR.
|
||||
.BE
|
||||
|
||||
.SH DESCRIPTION
|
||||
@@ -153,10 +147,6 @@ It returns the result of the command and also modifies
|
||||
\fIinterp->result\fR in the same way as \fBTcl_Eval\fR.
|
||||
The last argument to \fBTcl_VarEval\fR must be NULL to indicate the end
|
||||
of arguments. \fBTcl_VarEval\fR is now deprecated.
|
||||
.PP
|
||||
\fBTcl_VarEvalVA\fR is the same as \fBTcl_VarEval\fR except that
|
||||
instead of taking a variable number of arguments it takes an argument
|
||||
list. Like \fBTcl_VarEval\fR, \fBTcl_VarEvalVA\fR is deprecated.
|
||||
|
||||
.SH "FLAG BITS"
|
||||
.PP
|
||||
|
||||
+2
-5
@@ -64,12 +64,9 @@ if the first such characters are
|
||||
then \fIsrc\fR is expected to be in octal form; otherwise,
|
||||
if the first such characters are
|
||||
.QW \fB0b\fR
|
||||
then \fIsrc\fR is expected to be in binary form; otherwise,
|
||||
if the first such character is
|
||||
.QW \fB0\fR
|
||||
then \fIsrc\fR
|
||||
is expected to be in octal form; otherwise, \fIsrc\fR
|
||||
is expected to be in decimal form.
|
||||
is expected to be in binary form; otherwise, \fIsrc\fR is
|
||||
expected to be in decimal form.
|
||||
.PP
|
||||
\fBTcl_GetDouble\fR expects \fIsrc\fR to consist of a floating-point
|
||||
number, which is: white space; a sign; a sequence of digits; a
|
||||
|
||||
+3
-3
@@ -63,9 +63,9 @@ Define the \fBUSE_TCL_STUBS\fR symbol. Typically, you would include the
|
||||
\fB\-DUSE_TCL_STUBS\fR flag when compiling the extension.
|
||||
.IP 3) 5
|
||||
Link the extension with the Tcl stubs library instead of the standard
|
||||
Tcl library. For example, to use the Tcl 8.6 ABI on Unix platforms,
|
||||
the library name is \fIlibtclstub8.6.a\fR; on Windows platforms, the
|
||||
library name is \fItclstub86.lib\fR.
|
||||
Tcl library. For example, to use the Tcl 9.0 ABI on Unix platforms,
|
||||
the library name is \fIlibtclstub9.0.a\fR; on Windows platforms, the
|
||||
library name is \fItclstub90.lib\fR.
|
||||
.PP
|
||||
If the extension also requires the Tk API, it must also call
|
||||
\fBTk_InitStubs\fR to initialize the Tk stubs interface and link
|
||||
|
||||
@@ -33,19 +33,6 @@ the pointer as described below is no longer supported. The supported
|
||||
public routines \fBTcl_SetResult\fR, \fBTcl_GetResult\fR,
|
||||
\fBTcl_SetErrorLine\fR, \fBTcl_GetErrorLine\fR must be used instead.
|
||||
.PP
|
||||
For legacy programs and extensions no longer being maintained, compiles
|
||||
against the Tcl 8.6 header files are only possible with the compiler
|
||||
directives
|
||||
.CS
|
||||
#define USE_INTERP_RESULT
|
||||
.CE
|
||||
and/or
|
||||
.CS
|
||||
#define USE_INTERP_ERRORLINE
|
||||
.CE
|
||||
depending on which fields of the \fBTcl_Interp\fR struct are accessed.
|
||||
These directives may be embedded in code or supplied via compiler options.
|
||||
.PP
|
||||
The \fIresult\fR and \fIfreeProc\fR fields are used to return
|
||||
results or error messages from commands.
|
||||
This information is returned by command procedures back to \fBTcl_Eval\fR,
|
||||
|
||||
+1
-7
@@ -7,7 +7,7 @@
|
||||
.BS
|
||||
'\" Note: do not modify the .SH NAME line immediately below!
|
||||
.SH NAME
|
||||
Tcl_Panic, Tcl_PanicVA, Tcl_SetPanicProc \- report fatal error and abort
|
||||
Tcl_Panic, Tcl_SetPanicProc \- report fatal error and abort
|
||||
.SH SYNOPSIS
|
||||
.nf
|
||||
\fB#include <tcl.h>\fR
|
||||
@@ -16,9 +16,6 @@ void
|
||||
\fBTcl_Panic\fR(\fIformat\fR, \fIarg\fR, \fIarg\fR, \fI...\fR)
|
||||
.sp
|
||||
void
|
||||
\fBTcl_PanicVA\fR(\fIformat\fR, \fIargList\fR)
|
||||
.sp
|
||||
void
|
||||
\fBTcl_SetPanicProc\fR(\fIpanicProc\fR)
|
||||
.sp
|
||||
.SH ARGUMENTS
|
||||
@@ -80,9 +77,6 @@ the Tcl library, \fBTcl_Panic\fR is a public function and may be called
|
||||
by any extension or application that wishes to abort the process and
|
||||
have a panic message displayed the same way that panic messages from Tcl
|
||||
will be displayed.
|
||||
.PP
|
||||
\fBTcl_PanicVA\fR is the same as \fBTcl_Panic\fR except that instead of
|
||||
taking a variable number of arguments it takes an argument list.
|
||||
.SH "SEE ALSO"
|
||||
abort(3), printf(3), exec(n), format(n)
|
||||
.SH KEYWORDS
|
||||
|
||||
+2
-7
@@ -18,10 +18,7 @@ Tcl_PrintDouble \- Convert floating value to string
|
||||
.SH ARGUMENTS
|
||||
.AS Tcl_Interp *interp out
|
||||
.AP Tcl_Interp *interp in
|
||||
Before Tcl 8.0, the \fBtcl_precision\fR variable in this interpreter
|
||||
controlled the conversion. As of Tcl 8.0, this argument is ignored and
|
||||
the conversion is controlled by the \fBtcl_precision\fR variable
|
||||
that is now shared by all interpreters.
|
||||
This argument is ignored.
|
||||
.AP double value in
|
||||
Floating-point value to be converted.
|
||||
.AP char *dst out
|
||||
@@ -41,9 +38,7 @@ so that it does not look like an integer. Where \fB%g\fR would
|
||||
generate an integer with no decimal point, \fBTcl_PrintDouble\fR adds
|
||||
.QW .0 .
|
||||
.PP
|
||||
If the \fBtcl_precision\fR value is non-zero, the result will have
|
||||
precisely that many digits of significance. If the value is zero
|
||||
(the default), the result will have the fewest digits needed to
|
||||
The result will have the fewest digits needed to
|
||||
represent the number in such a way that \fBTcl_NewDoubleObj\fR
|
||||
will generate the same number when presented with the given string.
|
||||
IEEE semantics of rounding to even apply to the conversion.
|
||||
|
||||
+1
-19
@@ -9,7 +9,7 @@
|
||||
.so man.macros
|
||||
.BS
|
||||
.SH NAME
|
||||
Tcl_SetObjResult, Tcl_GetObjResult, Tcl_SetResult, Tcl_GetStringResult, Tcl_AppendResult, Tcl_AppendResultVA, Tcl_AppendElement, Tcl_ResetResult, Tcl_TransferResult, Tcl_FreeResult \- manipulate Tcl result
|
||||
Tcl_SetObjResult, Tcl_GetObjResult, Tcl_SetResult, Tcl_GetStringResult, Tcl_AppendResult, Tcl_AppendElement, Tcl_ResetResult, Tcl_TransferResult, Tcl_FreeResult \- manipulate Tcl result
|
||||
.SH SYNOPSIS
|
||||
.nf
|
||||
\fB#include <tcl.h>\fR
|
||||
@@ -26,8 +26,6 @@ const char *
|
||||
.sp
|
||||
\fBTcl_AppendResult\fR(\fIinterp, result, result, ... , \fB(char *) NULL\fR)
|
||||
.sp
|
||||
\fBTcl_AppendResultVA\fR(\fIinterp, argList\fR)
|
||||
.sp
|
||||
\fBTcl_ResetResult\fR(\fIinterp\fR)
|
||||
.sp
|
||||
.VS 8.6
|
||||
@@ -152,9 +150,6 @@ extensions.
|
||||
Any number of \fIresult\fR arguments may be passed in a single
|
||||
call; the last argument in the list must be a NULL pointer.
|
||||
.PP
|
||||
\fBTcl_AppendResultVA\fR is the same as \fBTcl_AppendResult\fR except that
|
||||
instead of taking a variable number of arguments it takes an argument list.
|
||||
.PP
|
||||
.VS 8.6
|
||||
\fBTcl_TransferResult\fR moves a result from one interpreter to another,
|
||||
optionally (dependent on the \fIresult\fR parameter) including the error
|
||||
@@ -197,19 +192,6 @@ It also sets \fIinterp->freeProc\fR to zero, but does not
|
||||
change \fIinterp->result\fR or clear error state.
|
||||
\fBTcl_FreeResult\fR is most commonly used when a procedure
|
||||
is about to replace one result value with another.
|
||||
.SS "DIRECT ACCESS TO INTERP->RESULT"
|
||||
.PP
|
||||
It used to be legal for programs to
|
||||
directly read and write \fIinterp->result\fR
|
||||
to manipulate the interpreter result. The Tcl headers no longer
|
||||
permit this access by default, and C code still doing this must
|
||||
be updated to use supported routines \fBTcl_GetObjResult\fR,
|
||||
\fBTcl_GetStringResult\fR, \fBTcl_SetObjResult\fR, and \fBTcl_SetResult\fR.
|
||||
As a migration aid, access can be restored with the compiler directive
|
||||
.CS
|
||||
#define USE_INTERP_RESULT
|
||||
.CE
|
||||
but this is meant only to offer life support to otherwise dead code.
|
||||
.SH "THE TCL_FREEPROC ARGUMENT TO TCL_SETRESULT"
|
||||
.PP
|
||||
\fBTcl_SetResult\fR's \fIfreeProc\fR argument specifies how
|
||||
|
||||
+1
-8
@@ -8,7 +8,7 @@
|
||||
.so man.macros
|
||||
.BS
|
||||
.SH NAME
|
||||
Tcl_NewStringObj, Tcl_NewUnicodeObj, Tcl_SetStringObj, Tcl_SetUnicodeObj, Tcl_GetStringFromObj, Tcl_GetString, Tcl_GetUnicodeFromObj, Tcl_GetUnicode, Tcl_GetUniChar, Tcl_GetCharLength, Tcl_GetRange, Tcl_AppendToObj, Tcl_AppendUnicodeToObj, Tcl_AppendObjToObj, Tcl_AppendStringsToObj, Tcl_AppendStringsToObjVA, Tcl_AppendLimitedToObj, Tcl_Format, Tcl_AppendFormatToObj, Tcl_ObjPrintf, Tcl_AppendPrintfToObj, Tcl_SetObjLength, Tcl_AttemptSetObjLength, Tcl_ConcatObj \- manipulate Tcl values as strings
|
||||
Tcl_NewStringObj, Tcl_NewUnicodeObj, Tcl_SetStringObj, Tcl_SetUnicodeObj, Tcl_GetStringFromObj, Tcl_GetString, Tcl_GetUnicodeFromObj, Tcl_GetUnicode, Tcl_GetUniChar, Tcl_GetCharLength, Tcl_GetRange, Tcl_AppendToObj, Tcl_AppendUnicodeToObj, Tcl_AppendObjToObj, Tcl_AppendStringsToObj, Tcl_AppendLimitedToObj, Tcl_Format, Tcl_AppendFormatToObj, Tcl_ObjPrintf, Tcl_AppendPrintfToObj, Tcl_SetObjLength, Tcl_AttemptSetObjLength, Tcl_ConcatObj \- manipulate Tcl values as strings
|
||||
.SH SYNOPSIS
|
||||
.nf
|
||||
\fB#include <tcl.h>\fR
|
||||
@@ -59,9 +59,6 @@ void
|
||||
\fBTcl_AppendStringsToObj\fR(\fIobjPtr, string, string, ... \fB(char *) NULL\fR)
|
||||
.sp
|
||||
void
|
||||
\fBTcl_AppendStringsToObjVA\fR(\fIobjPtr, argList\fR)
|
||||
.sp
|
||||
void
|
||||
\fBTcl_AppendLimitedToObj\fR(\fIobjPtr, bytes, length, limit, ellipsis\fR)
|
||||
.sp
|
||||
Tcl_Obj *
|
||||
@@ -246,10 +243,6 @@ values may contain internal null characters). Any number of
|
||||
\fIstring\fR arguments may be provided, but the last argument
|
||||
must be a NULL pointer to indicate the end of the list.
|
||||
.PP
|
||||
\fBTcl_AppendStringsToObjVA\fR is the same as \fBTcl_AppendStringsToObj\fR
|
||||
except that instead of taking a variable number of arguments it takes an
|
||||
argument list.
|
||||
.PP
|
||||
\fBTcl_AppendLimitedToObj\fR is similar to \fBTcl_AppendToObj\fR
|
||||
except that it imposes a limit on how many bytes are appended.
|
||||
This can be handy when the string to be appended might be
|
||||
|
||||
+1
-3
@@ -50,9 +50,7 @@ An integer operand may be specified in decimal (the normal case, the optional
|
||||
first two characters are \fB0d\fR), binary
|
||||
(the first two characters are \fB0b\fR), octal
|
||||
(the first two characters are \fB0o\fR), or hexadecimal
|
||||
(the first two characters are \fB0x\fR) form. For
|
||||
compatibility with older Tcl releases, an operand that begins with \fB0\fR is
|
||||
interpreted as an octal integer even if the second character is not \fBo\fR.
|
||||
(the first two characters are \fB0x\fR) form.
|
||||
A floating-point number may be specified in any of several
|
||||
common decimal formats, and may use the decimal point \fB.\fR,
|
||||
\fBe\fR or \fBE\fR for scientific notation, and
|
||||
|
||||
+2
-4
@@ -224,12 +224,10 @@ set string "#08D03F"
|
||||
\fBscan\fR $string "#%2x%2x%2x" r g b
|
||||
.CE
|
||||
.PP
|
||||
Parse a \fIHH:MM\fR time string, noting that this avoids problems with
|
||||
octal numbers by forcing interpretation as decimals (if we did not
|
||||
care, we would use the \fB%i\fR conversion instead):
|
||||
Parse a \fIHH:MM\fR time string:
|
||||
.PP
|
||||
.CS
|
||||
set string "08:08" ;# *Not* octal!
|
||||
set string "08:08"
|
||||
if {[\fBscan\fR $string "%d:%d" hours minutes] != 2} {
|
||||
error "not a valid time string"
|
||||
}
|
||||
|
||||
+1
-65
@@ -10,7 +10,7 @@
|
||||
.BS
|
||||
'\" Note: do not modify the .SH NAME line immediately below!
|
||||
.SH NAME
|
||||
argc, argv, argv0, auto_path, env, errorCode, errorInfo, tcl_interactive, tcl_library, tcl_nonwordchars, tcl_patchLevel, tcl_pkgPath, tcl_platform, tcl_precision, tcl_rcFileName, tcl_traceCompile, tcl_traceExec, tcl_wordchars, tcl_version \- Variables used by Tcl
|
||||
argc, argv, argv0, auto_path, env, errorCode, errorInfo, tcl_interactive, tcl_library, tcl_nonwordchars, tcl_patchLevel, tcl_pkgPath, tcl_platform, tcl_rcFileName, tcl_traceCompile, tcl_traceExec, tcl_wordchars, tcl_version \- Variables used by Tcl
|
||||
.BE
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
@@ -356,70 +356,6 @@ This gives the size of the native-machine word in bytes (strictly, it
|
||||
is same as the result of evaluating \fIsizeof(long)\fR in C.)
|
||||
.RE
|
||||
.TP
|
||||
\fBtcl_precision\fR
|
||||
.
|
||||
This variable controls the number of digits to generate
|
||||
when converting floating-point values to strings. It defaults
|
||||
to 0. \fIApplications should not change this value;\fR it is
|
||||
provided for compatibility with legacy code.
|
||||
.PP
|
||||
.RS
|
||||
The default value of 0 is special, meaning that Tcl should
|
||||
convert numbers using as few digits as possible while still
|
||||
distinguishing any floating point number from its nearest
|
||||
neighbours. It differs from using an arbitrarily high value
|
||||
for \fItcl_precision\fR in that an inexact number like \fI1.4\fR
|
||||
will convert as \fI1.4\fR rather than \fI1.3999999999999999\fR
|
||||
even though the latter is nearer to the exact value of the
|
||||
binary number.
|
||||
.RE
|
||||
.PP
|
||||
.RS
|
||||
If \fBtcl_precision\fR is not zero, then when Tcl converts a floating
|
||||
point number, it creates a decimal representation of at most
|
||||
\fBtcl_precision\fR significant digits; the result may be shorter if
|
||||
the shorter result represents the original number exactly. If no
|
||||
result of at most \fBtcl_precision\fR digits is an exact representation
|
||||
of the original number, the one that is closest to the original
|
||||
number is chosen.
|
||||
If the original number lies precisely between two equally accurate
|
||||
decimal representations, then the one with an even value for the least
|
||||
significant digit is chosen; for instance, if \fBtcl_precision\fR is 3, then
|
||||
0.3125 will convert to 0.312, not 0.313, while 0.6875 will convert to
|
||||
0.688, not 0.687. Any string of trailing zeroes that remains is trimmed.
|
||||
.RE
|
||||
.PP
|
||||
.RS
|
||||
a \fBtcl_precision\fR value of 17 digits is
|
||||
.QW perfect
|
||||
for IEEE floating-point in that it allows
|
||||
double-precision values to be converted to strings and back to
|
||||
binary with no loss of information. For this reason, you will often
|
||||
see it as a value in legacy code that must run on Tcl versions before
|
||||
8.5. It is no longer recommended; as noted above, a zero value is the
|
||||
preferred method.
|
||||
.RE
|
||||
.PP
|
||||
.RS
|
||||
All interpreters in a thread share a single \fBtcl_precision\fR value:
|
||||
changing it in one interpreter will affect all other interpreters as
|
||||
well. Safe interpreters are not allowed to modify the
|
||||
variable.
|
||||
.RE
|
||||
.PP
|
||||
.RS
|
||||
Valid values for \fBtcl_precision\fR range from 0 to 17.
|
||||
.RE
|
||||
.TP
|
||||
\fBtcl_rcFileName\fR
|
||||
.
|
||||
This variable is used during initialization to indicate the name of a
|
||||
user-specific startup file. If it is set by application-specific
|
||||
initialization, then the Tcl startup code will check for the existence
|
||||
of this file and \fBsource\fR it if it exists. For example, for \fBwish\fR
|
||||
the variable is set to \fB~/.wishrc\fR for Unix and \fB~/wishrc.tcl\fR
|
||||
for Windows.
|
||||
.TP
|
||||
\fBtcl_traceCompile\fR
|
||||
.
|
||||
The value of this variable can be set to control
|
||||
|
||||
+36
-27
@@ -472,9 +472,10 @@ declare 129 {
|
||||
declare 130 {
|
||||
int Tcl_EvalFile(Tcl_Interp *interp, const char *fileName)
|
||||
}
|
||||
declare 131 {
|
||||
int Tcl_EvalObj(Tcl_Interp *interp, Tcl_Obj *objPtr)
|
||||
}
|
||||
# Removed in 9.0, replaced by macro.
|
||||
#declare 131 {
|
||||
# int Tcl_EvalObj(Tcl_Interp *interp, Tcl_Obj *objPtr)
|
||||
#}
|
||||
declare 132 {
|
||||
void Tcl_EventuallyFree(ClientData clientData, Tcl_FreeProc *freeProc)
|
||||
}
|
||||
@@ -635,9 +636,10 @@ declare 176 {
|
||||
declare 177 {
|
||||
int Tcl_GlobalEval(Tcl_Interp *interp, const char *command)
|
||||
}
|
||||
declare 178 {
|
||||
int Tcl_GlobalEvalObj(Tcl_Interp *interp, Tcl_Obj *objPtr)
|
||||
}
|
||||
# Removed in 9.0, replaced by macro.
|
||||
#declare 178 {
|
||||
# int Tcl_GlobalEvalObj(Tcl_Interp *interp, Tcl_Obj *objPtr)
|
||||
#}
|
||||
declare 179 {
|
||||
int Tcl_HideCommand(Tcl_Interp *interp, const char *cmdName,
|
||||
const char *hiddenCmdToken)
|
||||
@@ -779,9 +781,10 @@ declare 218 {
|
||||
declare 219 {
|
||||
int Tcl_ScanCountedElement(const char *src, int length, int *flagPtr)
|
||||
}
|
||||
declare 220 {deprecated {}} {
|
||||
int Tcl_SeekOld(Tcl_Channel chan, int offset, int mode)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 220 {
|
||||
# int Tcl_SeekOld(Tcl_Channel chan, int offset, int mode)
|
||||
#}
|
||||
declare 221 {
|
||||
int Tcl_ServiceAll(void)
|
||||
}
|
||||
@@ -866,9 +869,10 @@ declare 244 {
|
||||
declare 245 {
|
||||
int Tcl_StringMatch(const char *str, const char *pattern)
|
||||
}
|
||||
declare 246 {deprecated {}} {
|
||||
int Tcl_TellOld(Tcl_Channel chan)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 246 {
|
||||
# int Tcl_TellOld(Tcl_Channel chan)
|
||||
#}
|
||||
declare 247 {
|
||||
int Tcl_TraceVar(Tcl_Interp *interp, const char *varName, int flags,
|
||||
Tcl_VarTraceProc *proc, ClientData clientData)
|
||||
@@ -942,12 +946,14 @@ declare 265 {
|
||||
declare 266 {
|
||||
void Tcl_ValidateAllMemory(const char *file, int line)
|
||||
}
|
||||
declare 267 {deprecated {see TIP #422}} {
|
||||
void Tcl_AppendResultVA(Tcl_Interp *interp, va_list argList)
|
||||
}
|
||||
declare 268 {deprecated {see TIP #422}} {
|
||||
void Tcl_AppendStringsToObjVA(Tcl_Obj *objPtr, va_list argList)
|
||||
}
|
||||
# Removed in 9.0
|
||||
#declare 267 {
|
||||
# void Tcl_AppendResultVA(Tcl_Interp *interp, va_list argList)
|
||||
#}
|
||||
# Removed in 9.0
|
||||
#declare 268 {
|
||||
# void Tcl_AppendStringsToObjVA(Tcl_Obj *objPtr, va_list argList)
|
||||
#}
|
||||
declare 269 {
|
||||
char *Tcl_HashStats(Tcl_HashTable *tablePtr)
|
||||
}
|
||||
@@ -973,18 +979,21 @@ declare 274 {
|
||||
CONST84_RETURN char *Tcl_PkgRequire(Tcl_Interp *interp, const char *name,
|
||||
const char *version, int exact)
|
||||
}
|
||||
declare 275 {deprecated {see TIP #422}} {
|
||||
void Tcl_SetErrorCodeVA(Tcl_Interp *interp, va_list argList)
|
||||
}
|
||||
declare 276 {deprecated {see TIP #422}} {
|
||||
int Tcl_VarEvalVA(Tcl_Interp *interp, va_list argList)
|
||||
}
|
||||
# Removed in 9.0
|
||||
#declare 275 {
|
||||
# void Tcl_SetErrorCodeVA(Tcl_Interp *interp, va_list argList)
|
||||
#}
|
||||
# Removed in 9.0
|
||||
#declare 276 {
|
||||
# int Tcl_VarEvalVA(Tcl_Interp *interp, va_list argList)
|
||||
#}
|
||||
declare 277 {
|
||||
Tcl_Pid Tcl_WaitPid(Tcl_Pid pid, int *statPtr, int options)
|
||||
}
|
||||
declare 278 {deprecated {see TIP #422}} {
|
||||
TCL_NORETURN void Tcl_PanicVA(const char *format, va_list argList)
|
||||
}
|
||||
# Removed in 9.0
|
||||
#declare 278 {
|
||||
# TCL_NORETURN void Tcl_PanicVA(const char *format, va_list argList)
|
||||
#}
|
||||
declare 279 {
|
||||
void Tcl_GetVersion(int *major, int *minor, int *patchLevel, int *type)
|
||||
}
|
||||
|
||||
+11
-67
@@ -52,13 +52,13 @@ extern "C" {
|
||||
* tools/tcl.hpj.in (not patchlevel, for windows installer)
|
||||
*/
|
||||
|
||||
#define TCL_MAJOR_VERSION 8
|
||||
#define TCL_MINOR_VERSION 7
|
||||
#define TCL_MAJOR_VERSION 9
|
||||
#define TCL_MINOR_VERSION 0
|
||||
#define TCL_RELEASE_LEVEL TCL_ALPHA_RELEASE
|
||||
#define TCL_RELEASE_SERIAL 2
|
||||
#define TCL_RELEASE_SERIAL 0
|
||||
|
||||
#define TCL_VERSION "8.7"
|
||||
#define TCL_PATCH_LEVEL "8.7a2"
|
||||
#define TCL_VERSION "9.0"
|
||||
#define TCL_PATCH_LEVEL "9.0a0"
|
||||
|
||||
#if !defined(TCL_NO_DEPRECATED) || defined(RC_INVOKED)
|
||||
/*
|
||||
@@ -125,18 +125,6 @@ extern "C" {
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------------
|
||||
* Support for functions with a variable number of arguments.
|
||||
*
|
||||
* The following TCL_VARARGS* macros are to support old extensions
|
||||
* written for older versions of Tcl where the macros permitted
|
||||
* support for the varargs.h system as well as stdarg.h .
|
||||
*
|
||||
* New code should just directly be written to use stdarg.h conventions.
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
# define TCL_VARARGS(type, name) (type name, ...)
|
||||
# define TCL_VARARGS_DEF(type, name) (type name, ...)
|
||||
@@ -492,39 +480,7 @@ typedef unsigned TCL_WIDE_INT_TYPE Tcl_WideUInt;
|
||||
* accessed with Tcl_GetObjResult() and Tcl_SetObjResult().
|
||||
*/
|
||||
|
||||
typedef struct Tcl_Interp
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
{
|
||||
/* TIP #330: Strongly discourage extensions from using the string
|
||||
* result. */
|
||||
#ifdef USE_INTERP_RESULT
|
||||
char *result TCL_DEPRECATED_API("use Tcl_GetStringResult/Tcl_SetResult");
|
||||
/* If the last command returned a string
|
||||
* result, this points to it. */
|
||||
void (*freeProc) (char *blockPtr)
|
||||
TCL_DEPRECATED_API("use Tcl_GetStringResult/Tcl_SetResult");
|
||||
/* Zero means the string result is statically
|
||||
* allocated. TCL_DYNAMIC means it was
|
||||
* allocated with ckalloc and should be freed
|
||||
* with ckfree. Other values give the address
|
||||
* of function to invoke to free the result.
|
||||
* Tcl_Eval must free it before executing next
|
||||
* command. */
|
||||
#else
|
||||
char *resultDontUse; /* Don't use in extensions! */
|
||||
void (*freeProcDontUse) (char *); /* Don't use in extensions! */
|
||||
#endif
|
||||
#ifdef USE_INTERP_ERRORLINE
|
||||
int errorLine TCL_DEPRECATED_API("use Tcl_GetErrorLine/Tcl_SetErrorLine");
|
||||
/* When TCL_ERROR is returned, this gives the
|
||||
* line number within the command where the
|
||||
* error occurred (1 if first line). */
|
||||
#else
|
||||
int errorLineDontUse; /* Don't use in extensions! */
|
||||
#endif
|
||||
}
|
||||
#endif /* !TCL_NO_DEPRECATED */
|
||||
Tcl_Interp;
|
||||
typedef struct Tcl_Interp Tcl_Interp;
|
||||
|
||||
typedef struct Tcl_AsyncHandler_ *Tcl_AsyncHandler;
|
||||
typedef struct Tcl_Channel_ *Tcl_Channel;
|
||||
@@ -673,8 +629,6 @@ typedef struct stat *Tcl_OldStat_;
|
||||
#define TCL_BREAK 3
|
||||
#define TCL_CONTINUE 4
|
||||
|
||||
#define TCL_RESULT_SIZE 200
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------------
|
||||
* Flags to control what substitutions are performed by Tcl_SubstObj():
|
||||
@@ -859,20 +813,11 @@ int Tcl_IsShared(Tcl_Obj *objPtr);
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------------
|
||||
* The following structure contains the state needed by Tcl_SaveResult. No-one
|
||||
* outside of Tcl should access any of these fields. This structure is
|
||||
* typically allocated on the stack.
|
||||
* The following type contains the state needed by Tcl_SaveResult. It
|
||||
* is typically allocated on the stack.
|
||||
*/
|
||||
|
||||
typedef struct Tcl_SavedResult {
|
||||
char *result;
|
||||
Tcl_FreeProc *freeProc;
|
||||
Tcl_Obj *objResultPtr;
|
||||
char *appendResult;
|
||||
int appendAvl;
|
||||
int appendUsed;
|
||||
char resultSpace[TCL_RESULT_SIZE+1];
|
||||
} Tcl_SavedResult;
|
||||
typedef Tcl_Obj *Tcl_SavedResult;
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------------
|
||||
@@ -1003,8 +948,8 @@ typedef struct Tcl_DString {
|
||||
|
||||
/*
|
||||
* Definitions for the maximum number of digits of precision that may be
|
||||
* specified in the "tcl_precision" variable, and the number of bytes of
|
||||
* buffer space required by Tcl_PrintDouble.
|
||||
* produced by Tcl_PrintDouble, and the number of bytes of buffer space
|
||||
* required by Tcl_PrintDouble.
|
||||
*/
|
||||
|
||||
#define TCL_MAX_PREC 17
|
||||
@@ -2642,7 +2587,6 @@ EXTERN void Tcl_GetMemoryInfo(Tcl_DString *dsPtr);
|
||||
#if !defined(__APPLE__) /* On OSX, there is a conflict with "mach/mach.h" */
|
||||
# define panic Tcl_Panic
|
||||
#endif
|
||||
# define panicVA Tcl_PanicVA
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------------
|
||||
|
||||
+23
-179
@@ -514,13 +514,12 @@ Tcl_CreateInterp(void)
|
||||
iPtr = ckalloc(sizeof(Interp));
|
||||
interp = (Tcl_Interp *) iPtr;
|
||||
|
||||
#ifdef TCL_NO_DEPRECATED
|
||||
iPtr->result = &tclEmptyString;
|
||||
#else
|
||||
iPtr->result = iPtr->resultSpace;
|
||||
#endif
|
||||
iPtr->freeProc = NULL;
|
||||
iPtr->legacyResult = NULL;
|
||||
/* Special invalid value: Any attempt to free the legacy result
|
||||
* will cause a crash. */
|
||||
iPtr->legacyFreeProc = (void (*) (void))-1;
|
||||
iPtr->errorLine = 0;
|
||||
iPtr->stubTable = &tclStubs;
|
||||
iPtr->objResultPtr = Tcl_NewObj();
|
||||
Tcl_IncrRefCount(iPtr->objResultPtr);
|
||||
iPtr->handle = TclHandleCreate(iPtr);
|
||||
@@ -528,8 +527,7 @@ Tcl_CreateInterp(void)
|
||||
iPtr->hiddenCmdTablePtr = NULL;
|
||||
iPtr->interpInfo = NULL;
|
||||
|
||||
TCL_CT_ASSERT(sizeof(iPtr->extra) <= sizeof(Tcl_HashTable));
|
||||
iPtr->extra.optimizer = TclOptimizeBytecode;
|
||||
iPtr->optimizer = TclOptimizeBytecode;
|
||||
|
||||
iPtr->numLevels = 0;
|
||||
iPtr->maxNestingDepth = MAX_NESTING_DEPTH;
|
||||
@@ -578,12 +576,6 @@ Tcl_CreateInterp(void)
|
||||
iPtr->rootFramePtr = NULL; /* Initialise as soon as :: is available */
|
||||
iPtr->lookupNsPtr = NULL;
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
iPtr->appendResult = NULL;
|
||||
iPtr->appendAvl = 0;
|
||||
iPtr->appendUsed = 0;
|
||||
#endif
|
||||
|
||||
Tcl_InitHashTable(&iPtr->packageTable, TCL_STRING_KEYS);
|
||||
iPtr->packageUnknown = NULL;
|
||||
|
||||
@@ -612,9 +604,6 @@ Tcl_CreateInterp(void)
|
||||
iPtr->emptyObjPtr = Tcl_NewObj();
|
||||
/* Another empty object. */
|
||||
Tcl_IncrRefCount(iPtr->emptyObjPtr);
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
iPtr->resultSpace[0] = 0;
|
||||
#endif
|
||||
iPtr->threadId = Tcl_GetCurrentThread();
|
||||
|
||||
/* TIP #378 */
|
||||
@@ -724,12 +713,6 @@ Tcl_CreateInterp(void)
|
||||
memset(statsPtr->literalCount, 0, sizeof(statsPtr->literalCount));
|
||||
#endif /* TCL_COMPILE_STATS */
|
||||
|
||||
/*
|
||||
* Initialise the stub table pointer.
|
||||
*/
|
||||
|
||||
iPtr->stubTable = &tclStubs;
|
||||
|
||||
/*
|
||||
* Initialize the ensemble error message rewriting support.
|
||||
*/
|
||||
@@ -954,9 +937,6 @@ Tcl_CreateInterp(void)
|
||||
|
||||
Tcl_SetVar2(interp, "tcl_patchLevel", NULL, TCL_PATCH_LEVEL, TCL_GLOBAL_ONLY);
|
||||
Tcl_SetVar2(interp, "tcl_version", NULL, TCL_VERSION, TCL_GLOBAL_ONLY);
|
||||
Tcl_TraceVar2(interp, "tcl_precision", NULL,
|
||||
TCL_GLOBAL_ONLY|TCL_TRACE_READS|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,
|
||||
TclPrecTraceProc, NULL);
|
||||
TclpSetVariables(interp);
|
||||
|
||||
#ifdef TCL_THREADS
|
||||
@@ -1525,7 +1505,6 @@ DeleteInterpProc(
|
||||
*/
|
||||
|
||||
Tcl_FreeResult(interp);
|
||||
iPtr->result = NULL;
|
||||
Tcl_DecrRefCount(iPtr->objResultPtr);
|
||||
iPtr->objResultPtr = NULL;
|
||||
Tcl_DecrRefCount(iPtr->ecVar);
|
||||
@@ -1547,12 +1526,6 @@ DeleteInterpProc(
|
||||
if (iPtr->returnOpts) {
|
||||
Tcl_DecrRefCount(iPtr->returnOpts);
|
||||
}
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
if (iPtr->appendResult != NULL) {
|
||||
ckfree(iPtr->appendResult);
|
||||
iPtr->appendResult = NULL;
|
||||
}
|
||||
#endif
|
||||
TclFreePackageInfo(iPtr);
|
||||
while (iPtr->tracePtr != NULL) {
|
||||
Tcl_DeleteTrace((Tcl_Interp *) iPtr, (Tcl_Trace) iPtr->tracePtr);
|
||||
@@ -2509,7 +2482,7 @@ TclInvokeStringCommand(
|
||||
* in the Command structure.
|
||||
*
|
||||
* Results:
|
||||
* A standard Tcl string result value.
|
||||
* A standard Tcl result value.
|
||||
*
|
||||
* Side effects:
|
||||
* Besides those side effects of the called Tcl_ObjCmdProc,
|
||||
@@ -2549,13 +2522,6 @@ TclInvokeObjectCommand(
|
||||
cmdPtr->objClientData, argc, objv);
|
||||
}
|
||||
|
||||
/*
|
||||
* Move the interpreter's object result to the string result, then reset
|
||||
* the object result.
|
||||
*/
|
||||
|
||||
(void) Tcl_GetStringResult(interp);
|
||||
|
||||
/*
|
||||
* Decrement the ref counts for the argument objects created above, then
|
||||
* free the objv array if malloc'ed storage was used.
|
||||
@@ -3610,7 +3576,6 @@ OldMathFuncProc(
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(
|
||||
"argument to math function didn't have numeric value",
|
||||
-1));
|
||||
TclCheckBadOctal(interp, TclGetString(valuePtr));
|
||||
ckfree(args);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
@@ -3860,7 +3825,7 @@ Tcl_ListMathFuncs(
|
||||
* otherwise.
|
||||
*
|
||||
* Side effects:
|
||||
* The interpreters object and string results are cleared.
|
||||
* The interpreter's result is cleared.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -3872,8 +3837,8 @@ TclInterpReady(
|
||||
register Interp *iPtr = (Interp *) interp;
|
||||
|
||||
/*
|
||||
* Reset both the interpreter's string and object results and clear out
|
||||
* any previous error information.
|
||||
* Reset the interpreter's result and clear out any previous error
|
||||
* information.
|
||||
*/
|
||||
|
||||
Tcl_ResetResult(interp);
|
||||
@@ -4453,24 +4418,9 @@ TclNRRunCallbacks(
|
||||
/* All callbacks down to rootPtr not inclusive
|
||||
* are to be run. */
|
||||
{
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
NRE_callback *callbackPtr;
|
||||
Tcl_NRPostProc *procPtr;
|
||||
|
||||
/*
|
||||
* If the interpreter has a non-empty string result, the result object is
|
||||
* either empty or stale because some function set interp->result
|
||||
* directly. If so, move the string result to the result object, then
|
||||
* reset the string result.
|
||||
*
|
||||
* This only needs to be done for the first item in the list: all other
|
||||
* are for NR function calls, and those are Tcl_Obj based.
|
||||
*/
|
||||
|
||||
if (*(iPtr->result) != 0) {
|
||||
(void) Tcl_GetObjResult(interp);
|
||||
}
|
||||
|
||||
while (TOP_CB(interp) != rootPtr) {
|
||||
callbackPtr = TOP_CB(interp);
|
||||
procPtr = callbackPtr->procPtr;
|
||||
@@ -5938,50 +5888,7 @@ Tcl_Eval(
|
||||
* previous call to Tcl_CreateInterp). */
|
||||
const char *script) /* Pointer to TCL command to execute. */
|
||||
{
|
||||
int code = Tcl_EvalEx(interp, script, -1, 0);
|
||||
|
||||
/*
|
||||
* For backwards compatibility with old C code that predates the object
|
||||
* system in Tcl 8.0, we have to mirror the object result back into the
|
||||
* string result (some callers may expect it there).
|
||||
*/
|
||||
|
||||
(void) Tcl_GetStringResult(interp);
|
||||
return code;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tcl_EvalObj, Tcl_GlobalEvalObj --
|
||||
*
|
||||
* These functions are deprecated but we keep them around for backwards
|
||||
* compatibility reasons.
|
||||
*
|
||||
* Results:
|
||||
* See the functions they call.
|
||||
*
|
||||
* Side effects:
|
||||
* See the functions they call.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#undef Tcl_EvalObj
|
||||
int
|
||||
Tcl_EvalObj(
|
||||
Tcl_Interp *interp,
|
||||
Tcl_Obj *objPtr)
|
||||
{
|
||||
return Tcl_EvalObjEx(interp, objPtr, 0);
|
||||
}
|
||||
#undef Tcl_GlobalEvalObj
|
||||
int
|
||||
Tcl_GlobalEvalObj(
|
||||
Tcl_Interp *interp,
|
||||
Tcl_Obj *objPtr)
|
||||
{
|
||||
return Tcl_EvalObjEx(interp, objPtr, TCL_EVAL_GLOBAL);
|
||||
return Tcl_EvalEx(interp, script, -1, 0);
|
||||
}
|
||||
#endif /* TCL_NO_DEPRECATED */
|
||||
|
||||
@@ -6370,9 +6277,6 @@ Tcl_ExprLong(
|
||||
Tcl_IncrRefCount(exprPtr);
|
||||
result = Tcl_ExprLongObj(interp, exprPtr, ptr);
|
||||
Tcl_DecrRefCount(exprPtr);
|
||||
if (result != TCL_OK) {
|
||||
(void) Tcl_GetStringResult(interp);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -6399,9 +6303,6 @@ Tcl_ExprDouble(
|
||||
result = Tcl_ExprDoubleObj(interp, exprPtr, ptr);
|
||||
Tcl_DecrRefCount(exprPtr);
|
||||
/* Discard the expression object. */
|
||||
if (result != TCL_OK) {
|
||||
(void) Tcl_GetStringResult(interp);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -6427,14 +6328,6 @@ Tcl_ExprBoolean(
|
||||
Tcl_IncrRefCount(exprPtr);
|
||||
result = Tcl_ExprBooleanObj(interp, exprPtr, ptr);
|
||||
Tcl_DecrRefCount(exprPtr);
|
||||
if (result != TCL_OK) {
|
||||
/*
|
||||
* Move the interpreter's object result to the string result, then
|
||||
* reset the object result.
|
||||
*/
|
||||
|
||||
(void) Tcl_GetStringResult(interp);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -6749,12 +6642,6 @@ Tcl_ExprString(
|
||||
Tcl_DecrRefCount(resultPtr);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Force the string rep of the interp result.
|
||||
*/
|
||||
|
||||
(void) Tcl_GetStringResult(interp);
|
||||
return code;
|
||||
}
|
||||
|
||||
@@ -6861,19 +6748,7 @@ Tcl_AddObjErrorInfo(
|
||||
|
||||
iPtr->flags |= ERR_LEGACY_COPY;
|
||||
if (iPtr->errorInfo == NULL) {
|
||||
if (iPtr->result[0] != 0) {
|
||||
/*
|
||||
* The interp's string result is set, apparently by some extension
|
||||
* making a deprecated direct write to it. That extension may
|
||||
* expect interp->result to continue to be set, so we'll take
|
||||
* special pains to avoid clearing it, until we drop support for
|
||||
* interp->result completely.
|
||||
*/
|
||||
|
||||
iPtr->errorInfo = Tcl_NewStringObj(iPtr->result, -1);
|
||||
} else {
|
||||
iPtr->errorInfo = iPtr->objResultPtr;
|
||||
}
|
||||
iPtr->errorInfo = iPtr->objResultPtr;
|
||||
Tcl_IncrRefCount(iPtr->errorInfo);
|
||||
if (!iPtr->errorCode) {
|
||||
Tcl_SetErrorCode(interp, "NONE", NULL);
|
||||
@@ -6895,32 +6770,34 @@ Tcl_AddObjErrorInfo(
|
||||
}
|
||||
|
||||
/*
|
||||
*---------------------------------------------------------------------------
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tcl_VarEvalVA --
|
||||
* Tcl_VarEval --
|
||||
*
|
||||
* Given a variable number of string arguments, concatenate them all
|
||||
* together and execute the result as a Tcl command.
|
||||
*
|
||||
* Results:
|
||||
* A standard Tcl return result. An error message or other result may be
|
||||
* left in the interp's result.
|
||||
* left in the interp.
|
||||
*
|
||||
* Side effects:
|
||||
* Depends on what was done by the command.
|
||||
*
|
||||
*---------------------------------------------------------------------------
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* ARGSUSED */
|
||||
int
|
||||
Tcl_VarEvalVA(
|
||||
Tcl_Interp *interp, /* Interpreter in which to evaluate command */
|
||||
va_list argList) /* Variable argument list. */
|
||||
Tcl_VarEval(
|
||||
Tcl_Interp *interp,
|
||||
...)
|
||||
{
|
||||
va_list argList;
|
||||
int result;
|
||||
Tcl_DString buf;
|
||||
char *string;
|
||||
int result;
|
||||
|
||||
va_start(argList, interp);
|
||||
/*
|
||||
* Copy the strings one after the other into a single larger string. Use
|
||||
* stack-allocated space for small commands, but if the command gets too
|
||||
@@ -6941,39 +6818,6 @@ Tcl_VarEvalVA(
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tcl_VarEval --
|
||||
*
|
||||
* Given a variable number of string arguments, concatenate them all
|
||||
* together and execute the result as a Tcl command.
|
||||
*
|
||||
* Results:
|
||||
* A standard Tcl return result. An error message or other result may be
|
||||
* left in interp->result.
|
||||
*
|
||||
* Side effects:
|
||||
* Depends on what was done by the command.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
int
|
||||
Tcl_VarEval(
|
||||
Tcl_Interp *interp,
|
||||
...)
|
||||
{
|
||||
va_list argList;
|
||||
int result;
|
||||
|
||||
va_start(argList, interp);
|
||||
result = Tcl_VarEvalVA(interp, argList);
|
||||
va_end(argList);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
|
||||
@@ -853,8 +853,8 @@ TclSetByteCodeFromAny(
|
||||
* instruction generator boundaries.
|
||||
*/
|
||||
|
||||
if (iPtr->extra.optimizer) {
|
||||
(iPtr->extra.optimizer)(&compEnv);
|
||||
if (iPtr->optimizer) {
|
||||
(iPtr->optimizer)(&compEnv);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+32
-66
@@ -420,8 +420,7 @@ EXTERN int Tcl_Eval(Tcl_Interp *interp, const char *script);
|
||||
/* 130 */
|
||||
EXTERN int Tcl_EvalFile(Tcl_Interp *interp,
|
||||
const char *fileName);
|
||||
/* 131 */
|
||||
EXTERN int Tcl_EvalObj(Tcl_Interp *interp, Tcl_Obj *objPtr);
|
||||
/* Slot 131 is reserved */
|
||||
/* 132 */
|
||||
EXTERN void Tcl_EventuallyFree(ClientData clientData,
|
||||
Tcl_FreeProc *freeProc);
|
||||
@@ -557,9 +556,7 @@ EXTERN CONST84_RETURN char * Tcl_GetVar2(Tcl_Interp *interp,
|
||||
/* 177 */
|
||||
EXTERN int Tcl_GlobalEval(Tcl_Interp *interp,
|
||||
const char *command);
|
||||
/* 178 */
|
||||
EXTERN int Tcl_GlobalEvalObj(Tcl_Interp *interp,
|
||||
Tcl_Obj *objPtr);
|
||||
/* Slot 178 is reserved */
|
||||
/* 179 */
|
||||
EXTERN int Tcl_HideCommand(Tcl_Interp *interp,
|
||||
const char *cmdName,
|
||||
@@ -668,9 +665,7 @@ EXTERN int Tcl_ScanElement(const char *src, int *flagPtr);
|
||||
/* 219 */
|
||||
EXTERN int Tcl_ScanCountedElement(const char *src, int length,
|
||||
int *flagPtr);
|
||||
/* 220 */
|
||||
TCL_DEPRECATED("")
|
||||
int Tcl_SeekOld(Tcl_Channel chan, int offset, int mode);
|
||||
/* Slot 220 is reserved */
|
||||
/* 221 */
|
||||
EXTERN int Tcl_ServiceAll(void);
|
||||
/* 222 */
|
||||
@@ -741,9 +736,7 @@ EXTERN void Tcl_StaticPackage(Tcl_Interp *interp,
|
||||
Tcl_PackageInitProc *safeInitProc);
|
||||
/* 245 */
|
||||
EXTERN int Tcl_StringMatch(const char *str, const char *pattern);
|
||||
/* 246 */
|
||||
TCL_DEPRECATED("")
|
||||
int Tcl_TellOld(Tcl_Channel chan);
|
||||
/* Slot 246 is reserved */
|
||||
/* 247 */
|
||||
EXTERN int Tcl_TraceVar(Tcl_Interp *interp, const char *varName,
|
||||
int flags, Tcl_VarTraceProc *proc,
|
||||
@@ -813,14 +806,8 @@ EXTERN void Tcl_WrongNumArgs(Tcl_Interp *interp, int objc,
|
||||
EXTERN int Tcl_DumpActiveMemory(const char *fileName);
|
||||
/* 266 */
|
||||
EXTERN void Tcl_ValidateAllMemory(const char *file, int line);
|
||||
/* 267 */
|
||||
TCL_DEPRECATED("see TIP #422")
|
||||
void Tcl_AppendResultVA(Tcl_Interp *interp,
|
||||
va_list argList);
|
||||
/* 268 */
|
||||
TCL_DEPRECATED("see TIP #422")
|
||||
void Tcl_AppendStringsToObjVA(Tcl_Obj *objPtr,
|
||||
va_list argList);
|
||||
/* Slot 267 is reserved */
|
||||
/* Slot 268 is reserved */
|
||||
/* 269 */
|
||||
EXTERN char * Tcl_HashStats(Tcl_HashTable *tablePtr);
|
||||
/* 270 */
|
||||
@@ -841,18 +828,11 @@ EXTERN int Tcl_PkgProvide(Tcl_Interp *interp, const char *name,
|
||||
EXTERN CONST84_RETURN char * Tcl_PkgRequire(Tcl_Interp *interp,
|
||||
const char *name, const char *version,
|
||||
int exact);
|
||||
/* 275 */
|
||||
TCL_DEPRECATED("see TIP #422")
|
||||
void Tcl_SetErrorCodeVA(Tcl_Interp *interp,
|
||||
va_list argList);
|
||||
/* 276 */
|
||||
TCL_DEPRECATED("see TIP #422")
|
||||
int Tcl_VarEvalVA(Tcl_Interp *interp, va_list argList);
|
||||
/* Slot 275 is reserved */
|
||||
/* Slot 276 is reserved */
|
||||
/* 277 */
|
||||
EXTERN Tcl_Pid Tcl_WaitPid(Tcl_Pid pid, int *statPtr, int options);
|
||||
/* 278 */
|
||||
TCL_DEPRECATED("see TIP #422")
|
||||
TCL_NORETURN void Tcl_PanicVA(const char *format, va_list argList);
|
||||
/* Slot 278 is reserved */
|
||||
/* 279 */
|
||||
EXTERN void Tcl_GetVersion(int *major, int *minor,
|
||||
int *patchLevel, int *type);
|
||||
@@ -1996,7 +1976,7 @@ typedef struct TclStubs {
|
||||
CONST84_RETURN char * (*tcl_ErrnoMsg) (int err); /* 128 */
|
||||
int (*tcl_Eval) (Tcl_Interp *interp, const char *script); /* 129 */
|
||||
int (*tcl_EvalFile) (Tcl_Interp *interp, const char *fileName); /* 130 */
|
||||
int (*tcl_EvalObj) (Tcl_Interp *interp, Tcl_Obj *objPtr); /* 131 */
|
||||
void (*reserved131)(void);
|
||||
void (*tcl_EventuallyFree) (ClientData clientData, Tcl_FreeProc *freeProc); /* 132 */
|
||||
TCL_NORETURN1 void (*tcl_Exit) (int status); /* 133 */
|
||||
int (*tcl_ExposeCommand) (Tcl_Interp *interp, const char *hiddenCmdToken, const char *cmdName); /* 134 */
|
||||
@@ -2051,7 +2031,7 @@ typedef struct TclStubs {
|
||||
CONST84_RETURN char * (*tcl_GetVar) (Tcl_Interp *interp, const char *varName, int flags); /* 175 */
|
||||
CONST84_RETURN char * (*tcl_GetVar2) (Tcl_Interp *interp, const char *part1, const char *part2, int flags); /* 176 */
|
||||
int (*tcl_GlobalEval) (Tcl_Interp *interp, const char *command); /* 177 */
|
||||
int (*tcl_GlobalEvalObj) (Tcl_Interp *interp, Tcl_Obj *objPtr); /* 178 */
|
||||
void (*reserved178)(void);
|
||||
int (*tcl_HideCommand) (Tcl_Interp *interp, const char *cmdName, const char *hiddenCmdToken); /* 179 */
|
||||
int (*tcl_Init) (Tcl_Interp *interp); /* 180 */
|
||||
void (*tcl_InitHashTable) (Tcl_HashTable *tablePtr, int keyType); /* 181 */
|
||||
@@ -2093,7 +2073,7 @@ typedef struct TclStubs {
|
||||
void (*tcl_ResetResult) (Tcl_Interp *interp); /* 217 */
|
||||
int (*tcl_ScanElement) (const char *src, int *flagPtr); /* 218 */
|
||||
int (*tcl_ScanCountedElement) (const char *src, int length, int *flagPtr); /* 219 */
|
||||
TCL_DEPRECATED_API("") int (*tcl_SeekOld) (Tcl_Channel chan, int offset, int mode); /* 220 */
|
||||
void (*reserved220)(void);
|
||||
int (*tcl_ServiceAll) (void); /* 221 */
|
||||
int (*tcl_ServiceEvent) (int flags); /* 222 */
|
||||
void (*tcl_SetAssocData) (Tcl_Interp *interp, const char *name, Tcl_InterpDeleteProc *proc, ClientData clientData); /* 223 */
|
||||
@@ -2119,7 +2099,7 @@ typedef struct TclStubs {
|
||||
void (*tcl_SplitPath) (const char *path, int *argcPtr, CONST84 char ***argvPtr); /* 243 */
|
||||
void (*tcl_StaticPackage) (Tcl_Interp *interp, const char *pkgName, Tcl_PackageInitProc *initProc, Tcl_PackageInitProc *safeInitProc); /* 244 */
|
||||
int (*tcl_StringMatch) (const char *str, const char *pattern); /* 245 */
|
||||
TCL_DEPRECATED_API("") int (*tcl_TellOld) (Tcl_Channel chan); /* 246 */
|
||||
void (*reserved246)(void);
|
||||
int (*tcl_TraceVar) (Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *proc, ClientData clientData); /* 247 */
|
||||
int (*tcl_TraceVar2) (Tcl_Interp *interp, const char *part1, const char *part2, int flags, Tcl_VarTraceProc *proc, ClientData clientData); /* 248 */
|
||||
char * (*tcl_TranslateFileName) (Tcl_Interp *interp, const char *name, Tcl_DString *bufferPtr); /* 249 */
|
||||
@@ -2140,18 +2120,18 @@ typedef struct TclStubs {
|
||||
void (*tcl_WrongNumArgs) (Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], const char *message); /* 264 */
|
||||
int (*tcl_DumpActiveMemory) (const char *fileName); /* 265 */
|
||||
void (*tcl_ValidateAllMemory) (const char *file, int line); /* 266 */
|
||||
TCL_DEPRECATED_API("see TIP #422") void (*tcl_AppendResultVA) (Tcl_Interp *interp, va_list argList); /* 267 */
|
||||
TCL_DEPRECATED_API("see TIP #422") void (*tcl_AppendStringsToObjVA) (Tcl_Obj *objPtr, va_list argList); /* 268 */
|
||||
void (*reserved267)(void);
|
||||
void (*reserved268)(void);
|
||||
char * (*tcl_HashStats) (Tcl_HashTable *tablePtr); /* 269 */
|
||||
CONST84_RETURN char * (*tcl_ParseVar) (Tcl_Interp *interp, const char *start, CONST84 char **termPtr); /* 270 */
|
||||
CONST84_RETURN char * (*tcl_PkgPresent) (Tcl_Interp *interp, const char *name, const char *version, int exact); /* 271 */
|
||||
CONST84_RETURN char * (*tcl_PkgPresentEx) (Tcl_Interp *interp, const char *name, const char *version, int exact, void *clientDataPtr); /* 272 */
|
||||
int (*tcl_PkgProvide) (Tcl_Interp *interp, const char *name, const char *version); /* 273 */
|
||||
CONST84_RETURN char * (*tcl_PkgRequire) (Tcl_Interp *interp, const char *name, const char *version, int exact); /* 274 */
|
||||
TCL_DEPRECATED_API("see TIP #422") void (*tcl_SetErrorCodeVA) (Tcl_Interp *interp, va_list argList); /* 275 */
|
||||
TCL_DEPRECATED_API("see TIP #422") int (*tcl_VarEvalVA) (Tcl_Interp *interp, va_list argList); /* 276 */
|
||||
void (*reserved275)(void);
|
||||
void (*reserved276)(void);
|
||||
Tcl_Pid (*tcl_WaitPid) (Tcl_Pid pid, int *statPtr, int options); /* 277 */
|
||||
TCL_DEPRECATED_API("see TIP #422") TCL_NORETURN1 void (*tcl_PanicVA) (const char *format, va_list argList); /* 278 */
|
||||
void (*reserved278)(void);
|
||||
void (*tcl_GetVersion) (int *major, int *minor, int *patchLevel, int *type); /* 279 */
|
||||
void (*tcl_InitMemory) (Tcl_Interp *interp); /* 280 */
|
||||
Tcl_Channel (*tcl_StackChannel) (Tcl_Interp *interp, const Tcl_ChannelType *typePtr, ClientData instanceData, int mask, Tcl_Channel prevChan); /* 281 */
|
||||
@@ -2793,8 +2773,7 @@ extern const TclStubs *tclStubsPtr;
|
||||
(tclStubsPtr->tcl_Eval) /* 129 */
|
||||
#define Tcl_EvalFile \
|
||||
(tclStubsPtr->tcl_EvalFile) /* 130 */
|
||||
#define Tcl_EvalObj \
|
||||
(tclStubsPtr->tcl_EvalObj) /* 131 */
|
||||
/* Slot 131 is reserved */
|
||||
#define Tcl_EventuallyFree \
|
||||
(tclStubsPtr->tcl_EventuallyFree) /* 132 */
|
||||
#define Tcl_Exit \
|
||||
@@ -2893,8 +2872,7 @@ extern const TclStubs *tclStubsPtr;
|
||||
(tclStubsPtr->tcl_GetVar2) /* 176 */
|
||||
#define Tcl_GlobalEval \
|
||||
(tclStubsPtr->tcl_GlobalEval) /* 177 */
|
||||
#define Tcl_GlobalEvalObj \
|
||||
(tclStubsPtr->tcl_GlobalEvalObj) /* 178 */
|
||||
/* Slot 178 is reserved */
|
||||
#define Tcl_HideCommand \
|
||||
(tclStubsPtr->tcl_HideCommand) /* 179 */
|
||||
#define Tcl_Init \
|
||||
@@ -2976,8 +2954,7 @@ extern const TclStubs *tclStubsPtr;
|
||||
(tclStubsPtr->tcl_ScanElement) /* 218 */
|
||||
#define Tcl_ScanCountedElement \
|
||||
(tclStubsPtr->tcl_ScanCountedElement) /* 219 */
|
||||
#define Tcl_SeekOld \
|
||||
(tclStubsPtr->tcl_SeekOld) /* 220 */
|
||||
/* Slot 220 is reserved */
|
||||
#define Tcl_ServiceAll \
|
||||
(tclStubsPtr->tcl_ServiceAll) /* 221 */
|
||||
#define Tcl_ServiceEvent \
|
||||
@@ -3028,8 +3005,7 @@ extern const TclStubs *tclStubsPtr;
|
||||
(tclStubsPtr->tcl_StaticPackage) /* 244 */
|
||||
#define Tcl_StringMatch \
|
||||
(tclStubsPtr->tcl_StringMatch) /* 245 */
|
||||
#define Tcl_TellOld \
|
||||
(tclStubsPtr->tcl_TellOld) /* 246 */
|
||||
/* Slot 246 is reserved */
|
||||
#define Tcl_TraceVar \
|
||||
(tclStubsPtr->tcl_TraceVar) /* 247 */
|
||||
#define Tcl_TraceVar2 \
|
||||
@@ -3070,10 +3046,8 @@ extern const TclStubs *tclStubsPtr;
|
||||
(tclStubsPtr->tcl_DumpActiveMemory) /* 265 */
|
||||
#define Tcl_ValidateAllMemory \
|
||||
(tclStubsPtr->tcl_ValidateAllMemory) /* 266 */
|
||||
#define Tcl_AppendResultVA \
|
||||
(tclStubsPtr->tcl_AppendResultVA) /* 267 */
|
||||
#define Tcl_AppendStringsToObjVA \
|
||||
(tclStubsPtr->tcl_AppendStringsToObjVA) /* 268 */
|
||||
/* Slot 267 is reserved */
|
||||
/* Slot 268 is reserved */
|
||||
#define Tcl_HashStats \
|
||||
(tclStubsPtr->tcl_HashStats) /* 269 */
|
||||
#define Tcl_ParseVar \
|
||||
@@ -3086,14 +3060,11 @@ extern const TclStubs *tclStubsPtr;
|
||||
(tclStubsPtr->tcl_PkgProvide) /* 273 */
|
||||
#define Tcl_PkgRequire \
|
||||
(tclStubsPtr->tcl_PkgRequire) /* 274 */
|
||||
#define Tcl_SetErrorCodeVA \
|
||||
(tclStubsPtr->tcl_SetErrorCodeVA) /* 275 */
|
||||
#define Tcl_VarEvalVA \
|
||||
(tclStubsPtr->tcl_VarEvalVA) /* 276 */
|
||||
/* Slot 275 is reserved */
|
||||
/* Slot 276 is reserved */
|
||||
#define Tcl_WaitPid \
|
||||
(tclStubsPtr->tcl_WaitPid) /* 277 */
|
||||
#define Tcl_PanicVA \
|
||||
(tclStubsPtr->tcl_PanicVA) /* 278 */
|
||||
/* Slot 278 is reserved */
|
||||
#define Tcl_GetVersion \
|
||||
(tclStubsPtr->tcl_GetVersion) /* 279 */
|
||||
#define Tcl_InitMemory \
|
||||
@@ -3833,9 +3804,6 @@ extern const TclStubs *tclStubsPtr;
|
||||
#undef TCL_STORAGE_CLASS
|
||||
#define TCL_STORAGE_CLASS DLLIMPORT
|
||||
|
||||
#undef Tcl_SeekOld
|
||||
#undef Tcl_TellOld
|
||||
|
||||
#undef Tcl_PkgPresent
|
||||
#define Tcl_PkgPresent(interp, name, version, exact) \
|
||||
Tcl_PkgPresentEx(interp, name, version, exact, NULL)
|
||||
@@ -3895,20 +3863,20 @@ extern const TclStubs *tclStubsPtr;
|
||||
#undef Tcl_SaveResult
|
||||
#define Tcl_SaveResult(interp, statePtr) \
|
||||
do { \
|
||||
(statePtr)->objResultPtr = Tcl_GetObjResult(interp); \
|
||||
Tcl_IncrRefCount((statePtr)->objResultPtr); \
|
||||
*(statePtr) = Tcl_GetObjResult(interp); \
|
||||
Tcl_IncrRefCount(*(statePtr)); \
|
||||
Tcl_SetObjResult(interp, Tcl_NewObj()); \
|
||||
} while(0)
|
||||
#undef Tcl_RestoreResult
|
||||
#define Tcl_RestoreResult(interp, statePtr) \
|
||||
do { \
|
||||
Tcl_ResetResult(interp); \
|
||||
Tcl_SetObjResult(interp, (statePtr)->objResultPtr); \
|
||||
Tcl_DecrRefCount((statePtr)->objResultPtr); \
|
||||
Tcl_SetObjResult(interp, *(statePtr)); \
|
||||
Tcl_DecrRefCount(*(statePtr)); \
|
||||
} while(0)
|
||||
#undef Tcl_DiscardResult
|
||||
#define Tcl_DiscardResult(statePtr) \
|
||||
Tcl_DecrRefCount((statePtr)->objResultPtr)
|
||||
Tcl_DecrRefCount(*(statePtr))
|
||||
#undef Tcl_SetResult
|
||||
#define Tcl_SetResult(interp, result, freeProc) \
|
||||
do { \
|
||||
@@ -3977,10 +3945,8 @@ extern const TclStubs *tclStubsPtr;
|
||||
* Deprecated Tcl procedures:
|
||||
*/
|
||||
|
||||
#undef Tcl_EvalObj
|
||||
#define Tcl_EvalObj(interp, objPtr) \
|
||||
Tcl_EvalObjEx(interp, objPtr, 0)
|
||||
#undef Tcl_GlobalEvalObj
|
||||
#define Tcl_GlobalEvalObj(interp, objPtr) \
|
||||
Tcl_EvalObjEx(interp, objPtr, TCL_EVAL_GLOBAL)
|
||||
|
||||
|
||||
+3
-11
@@ -9624,16 +9624,7 @@ IllegalExprOperandType(
|
||||
}
|
||||
|
||||
if (GetNumberFromObj(NULL, opndPtr, &ptr, &type) != TCL_OK) {
|
||||
int numBytes;
|
||||
const char *bytes = TclGetStringFromObj(opndPtr, &numBytes);
|
||||
|
||||
if (numBytes == 0) {
|
||||
description = "empty string";
|
||||
} else if (TclCheckBadOctal(NULL, bytes)) {
|
||||
description = "invalid octal number";
|
||||
} else {
|
||||
description = "non-numeric string";
|
||||
}
|
||||
description = "non-numeric string";
|
||||
} else if (type == TCL_NUMBER_NAN) {
|
||||
description = "non-numeric floating-point value";
|
||||
} else if (type == TCL_NUMBER_DOUBLE) {
|
||||
@@ -9644,7 +9635,8 @@ IllegalExprOperandType(
|
||||
}
|
||||
|
||||
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
|
||||
"can't use %s as operand of \"%s\"", description, operator));
|
||||
"can't use %s \"%s\" as operand of \"%s\"", description,
|
||||
Tcl_GetString(opndPtr), operator));
|
||||
Tcl_SetErrorCode(interp, "ARITH", "DOMAIN", description, NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -73,13 +73,6 @@ Tcl_RecordAndEval(
|
||||
Tcl_IncrRefCount(cmdPtr);
|
||||
result = Tcl_RecordAndEvalObj(interp, cmdPtr, flags);
|
||||
|
||||
/*
|
||||
* Move the interpreter's object result to the string result, then
|
||||
* reset the object result.
|
||||
*/
|
||||
|
||||
(void) Tcl_GetStringResult(interp);
|
||||
|
||||
/*
|
||||
* Discard the Tcl object created to hold the command.
|
||||
*/
|
||||
|
||||
@@ -9032,20 +9032,6 @@ ZeroTransferTimerProc(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#if !defined(TCL_NO_DEPRECATED)
|
||||
int
|
||||
TclCopyChannelOld(
|
||||
Tcl_Interp *interp, /* Current interpreter. */
|
||||
Tcl_Channel inChan, /* Channel to read from. */
|
||||
Tcl_Channel outChan, /* Channel to write to. */
|
||||
int toRead, /* Amount of data to copy, or -1 for all. */
|
||||
Tcl_Obj *cmdPtr) /* Pointer to script to execute or NULL. */
|
||||
{
|
||||
return TclCopyChannel(interp, inChan, outChan, (Tcl_WideInt) toRead,
|
||||
cmdPtr);
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
TclCopyChannel(
|
||||
Tcl_Interp *interp, /* Current interpreter. */
|
||||
|
||||
+168
-130
@@ -50,10 +50,11 @@ declare 6 {
|
||||
declare 7 {
|
||||
int TclCopyAndCollapse(int count, const char *src, char *dst)
|
||||
}
|
||||
declare 8 {deprecated {}} {
|
||||
int TclCopyChannelOld(Tcl_Interp *interp, Tcl_Channel inChan,
|
||||
Tcl_Channel outChan, int toRead, Tcl_Obj *cmdPtr)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 8 {
|
||||
# int TclCopyChannelOld(Tcl_Interp *interp, Tcl_Channel inChan,
|
||||
# Tcl_Channel outChan, int toRead, Tcl_Obj *cmdPtr)
|
||||
#}
|
||||
|
||||
# TclCreatePipeline unofficially exported for use by BLT.
|
||||
|
||||
@@ -313,9 +314,11 @@ declare 75 {
|
||||
declare 76 {
|
||||
unsigned long TclpGetSeconds(void)
|
||||
}
|
||||
declare 77 {deprecated {}} {
|
||||
void TclpGetTime(Tcl_Time *time)
|
||||
}
|
||||
|
||||
# Removed in 9.0:
|
||||
#declare 77 {
|
||||
# void TclpGetTime(Tcl_Time *time)
|
||||
#}
|
||||
# Removed in 8.6:
|
||||
#declare 78 {
|
||||
# int TclpGetTimeZone(unsigned long time)
|
||||
@@ -355,10 +358,11 @@ declare 81 {
|
||||
# declare 87 {
|
||||
# void TclPlatformInit(Tcl_Interp *interp)
|
||||
# }
|
||||
declare 88 {
|
||||
char *TclPrecTraceProc(ClientData clientData, Tcl_Interp *interp,
|
||||
const char *name1, const char *name2, int flags)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 88 {
|
||||
# char *TclPrecTraceProc(ClientData clientData, Tcl_Interp *interp,
|
||||
# const char *name1, const char *name2, int flags)
|
||||
#}
|
||||
declare 89 {
|
||||
int TclPreventAliasLoop(Tcl_Interp *interp, Tcl_Interp *cmdInterp,
|
||||
Tcl_Command cmd)
|
||||
@@ -417,9 +421,10 @@ declare 103 {
|
||||
int TclSockGetPort(Tcl_Interp *interp, const char *str, const char *proto,
|
||||
int *portPtr)
|
||||
}
|
||||
declare 104 {deprecated {}} {
|
||||
int TclSockMinimumBuffersOld(int sock, int size)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 104 {
|
||||
# int TclSockMinimumBuffersOld(int sock, int size)
|
||||
#}
|
||||
# Replaced by Tcl_FSStat in 8.4:
|
||||
#declare 105 {
|
||||
# int TclStat(const char *path, Tcl_StatBuf *buf)
|
||||
@@ -452,29 +457,35 @@ declare 111 {
|
||||
Tcl_ResolveCmdProc *cmdProc, Tcl_ResolveVarProc *varProc,
|
||||
Tcl_ResolveCompiledVarProc *compiledVarProc)
|
||||
}
|
||||
declare 112 {
|
||||
int TclAppendExportList(Tcl_Interp *interp, Tcl_Namespace *nsPtr,
|
||||
Tcl_Obj *objPtr)
|
||||
}
|
||||
declare 113 {
|
||||
Tcl_Namespace *TclCreateNamespace(Tcl_Interp *interp, const char *name,
|
||||
ClientData clientData, Tcl_NamespaceDeleteProc *deleteProc)
|
||||
}
|
||||
declare 114 {
|
||||
void TclDeleteNamespace(Tcl_Namespace *nsPtr)
|
||||
}
|
||||
declare 115 {
|
||||
int TclExport(Tcl_Interp *interp, Tcl_Namespace *nsPtr,
|
||||
const char *pattern, int resetListFirst)
|
||||
}
|
||||
declare 116 {
|
||||
Tcl_Command TclFindCommand(Tcl_Interp *interp, const char *name,
|
||||
Tcl_Namespace *contextNsPtr, int flags)
|
||||
}
|
||||
declare 117 {
|
||||
Tcl_Namespace *TclFindNamespace(Tcl_Interp *interp, const char *name,
|
||||
Tcl_Namespace *contextNsPtr, int flags)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 112 {
|
||||
# int Tcl_AppendExportList(Tcl_Interp *interp, Tcl_Namespace *nsPtr,
|
||||
# Tcl_Obj *objPtr)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 113 {
|
||||
# Tcl_Namespace *Tcl_CreateNamespace(Tcl_Interp *interp, const char *name,
|
||||
# ClientData clientData, Tcl_NamespaceDeleteProc *deleteProc)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 114 {
|
||||
# void Tcl_DeleteNamespace(Tcl_Namespace *nsPtr)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 115 {
|
||||
# int Tcl_Export(Tcl_Interp *interp, Tcl_Namespace *nsPtr,
|
||||
# const char *pattern, int resetListFirst)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 116 {
|
||||
# Tcl_Command Tcl_FindCommand(Tcl_Interp *interp, const char *name,
|
||||
# Tcl_Namespace *contextNsPtr, int flags)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 117 {
|
||||
# Tcl_Namespace *Tcl_FindNamespace(Tcl_Interp *interp, const char *name,
|
||||
# Tcl_Namespace *contextNsPtr, int flags)
|
||||
#}
|
||||
declare 118 {
|
||||
int Tcl_GetInterpResolvers(Tcl_Interp *interp, const char *name,
|
||||
Tcl_ResolverInfo *resInfo)
|
||||
@@ -487,31 +498,37 @@ declare 120 {
|
||||
Tcl_Var Tcl_FindNamespaceVar(Tcl_Interp *interp, const char *name,
|
||||
Tcl_Namespace *contextNsPtr, int flags)
|
||||
}
|
||||
declare 121 {
|
||||
int TclForgetImport(Tcl_Interp *interp, Tcl_Namespace *nsPtr,
|
||||
const char *pattern)
|
||||
}
|
||||
declare 122 {
|
||||
Tcl_Command TclGetCommandFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr)
|
||||
}
|
||||
declare 123 {
|
||||
void TclGetCommandFullName(Tcl_Interp *interp, Tcl_Command command,
|
||||
Tcl_Obj *objPtr)
|
||||
}
|
||||
declare 124 {
|
||||
Tcl_Namespace *TclGetCurrentNamespace_(Tcl_Interp *interp)
|
||||
}
|
||||
declare 125 {
|
||||
Tcl_Namespace *TclGetGlobalNamespace_(Tcl_Interp *interp)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 121 {
|
||||
# int Tcl_ForgetImport(Tcl_Interp *interp, Tcl_Namespace *nsPtr,
|
||||
# const char *pattern)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 122 {
|
||||
# Tcl_Command Tcl_GetCommandFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 123 {
|
||||
# void Tcl_GetCommandFullName(Tcl_Interp *interp, Tcl_Command command,
|
||||
# Tcl_Obj *objPtr)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 124 {
|
||||
# Tcl_Namespace *Tcl_GetCurrentNamespace(Tcl_Interp *interp)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 125 {
|
||||
# Tcl_Namespace *Tcl_GetGlobalNamespace(Tcl_Interp *interp)
|
||||
#}
|
||||
declare 126 {
|
||||
void Tcl_GetVariableFullName(Tcl_Interp *interp, Tcl_Var variable,
|
||||
Tcl_Obj *objPtr)
|
||||
}
|
||||
declare 127 {
|
||||
int TclImport(Tcl_Interp *interp, Tcl_Namespace *nsPtr,
|
||||
const char *pattern, int allowOverwrite)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 127 {
|
||||
# int Tcl_Import(Tcl_Interp *interp, Tcl_Namespace *nsPtr,
|
||||
# const char *pattern, int allowOverwrite)
|
||||
#}
|
||||
declare 128 {
|
||||
void Tcl_PopCallFrame(Tcl_Interp *interp)
|
||||
}
|
||||
@@ -530,9 +547,10 @@ declare 131 {
|
||||
declare 132 {
|
||||
int TclpHasSockets(Tcl_Interp *interp)
|
||||
}
|
||||
declare 133 {deprecated {}} {
|
||||
struct tm *TclpGetDate(const time_t *time, int useGMT)
|
||||
}
|
||||
# Removed in 9.0
|
||||
#declare 133 {
|
||||
# struct tm *TclpGetDate(const time_t *time, int useGMT)
|
||||
#}
|
||||
# Removed in 8.5
|
||||
#declare 134 {
|
||||
# size_t TclpStrftime(char *s, size_t maxsize, const char *format,
|
||||
@@ -623,12 +641,14 @@ declare 156 {
|
||||
declare 157 {
|
||||
Var *TclVarTraceExists(Tcl_Interp *interp, const char *varName)
|
||||
}
|
||||
declare 158 {deprecated {use public Tcl_SetStartupScript()}} {
|
||||
void TclSetStartupScriptFileName(const char *filename)
|
||||
}
|
||||
declare 159 {deprecated {use public Tcl_GetStartupScript()}} {
|
||||
const char *TclGetStartupScriptFileName(void)
|
||||
}
|
||||
# REMOVED - use public Tcl_SetStartupScript()
|
||||
#declare 158 {
|
||||
# void TclSetStartupScriptFileName(const char *filename)
|
||||
#}
|
||||
# REMOVED - use public Tcl_GetStartupScript()
|
||||
#declare 159 {
|
||||
# const char *TclGetStartupScriptFileName(void)
|
||||
#}
|
||||
#declare 160 {
|
||||
# int TclpMatchFilesTypes(Tcl_Interp *interp, char *separators,
|
||||
# Tcl_DString *dirPtr, char *pattern, char *tail,
|
||||
@@ -672,12 +692,15 @@ declare 166 {
|
||||
int index, Tcl_Obj *valuePtr)
|
||||
}
|
||||
|
||||
declare 167 {deprecated {use public Tcl_SetStartupScript()}} {
|
||||
void TclSetStartupScriptPath(Tcl_Obj *pathPtr)
|
||||
}
|
||||
declare 168 {deprecated {use public Tcl_GetStartupScript()}} {
|
||||
Tcl_Obj *TclGetStartupScriptPath(void)
|
||||
}
|
||||
# VFS-aware versions of Tcl*StartupScriptFileName (158 and 159 above)
|
||||
# REMOVED - use public Tcl_SetStartupScript()
|
||||
#declare 167 {
|
||||
# void TclSetStartupScriptPath(Tcl_Obj *pathPtr)
|
||||
#}
|
||||
# REMOVED - use public Tcl_GetStartupScript()
|
||||
#declare 168 {
|
||||
# Tcl_Obj *TclGetStartupScriptPath(void)
|
||||
#}
|
||||
# variant of Tcl_UtfNCmp that takes n as bytes, not chars
|
||||
declare 169 {
|
||||
int TclpUtfNcmp2(const char *s1, const char *s2, unsigned long n)
|
||||
@@ -723,12 +746,13 @@ declare 177 {
|
||||
void TclVarErrMsg(Tcl_Interp *interp, const char *part1, const char *part2,
|
||||
const char *operation, const char *reason)
|
||||
}
|
||||
declare 178 {
|
||||
void TclSetStartupScript(Tcl_Obj *pathPtr, const char *encodingName)
|
||||
}
|
||||
declare 179 {
|
||||
Tcl_Obj *TclGetStartupScript(const char **encodingNamePtr)
|
||||
}
|
||||
# TIP 338 made these public - now declared in tcl.h
|
||||
#declare 178 {
|
||||
# void Tcl_SetStartupScript(Tcl_Obj *pathPtr, const char *encodingName)
|
||||
#}
|
||||
#declare 179 {
|
||||
# Tcl_Obj *Tcl_GetStartupScript(const char **encodingNamePtr)
|
||||
#}
|
||||
|
||||
# REMOVED
|
||||
# Allocate lists without copying arrays
|
||||
@@ -740,12 +764,14 @@ declare 179 {
|
||||
# const char *file, int line)
|
||||
#}
|
||||
|
||||
declare 182 {deprecated {}} {
|
||||
struct tm *TclpLocaltime(const time_t *clock)
|
||||
}
|
||||
declare 183 {deprecated {}} {
|
||||
struct tm *TclpGmtime(const time_t *clock)
|
||||
}
|
||||
# Removed in 9.0
|
||||
#declare 182 {
|
||||
# struct tm *TclpLocaltime(const time_t *clock)
|
||||
#}
|
||||
# Removed in 9.0
|
||||
#declare 183 {
|
||||
# struct tm *TclpGmtime(const time_t *clock)
|
||||
#}
|
||||
|
||||
# For the new "Thread Storage" subsystem.
|
||||
|
||||
@@ -927,9 +953,12 @@ declare 234 {
|
||||
declare 235 {
|
||||
void TclInitVarHashTable(TclVarHashTable *tablePtr, Namespace *nsPtr)
|
||||
}
|
||||
declare 236 {deprecated {use Tcl_BackgroundException}} {
|
||||
void TclBackgroundException(Tcl_Interp *interp, int code)
|
||||
}
|
||||
|
||||
|
||||
# TIP 337 made this one public
|
||||
#declare 236 {
|
||||
# void TclBackgroundException(Tcl_Interp *interp, int code)
|
||||
#}
|
||||
|
||||
# TIP #285: Script cancellation support.
|
||||
declare 237 {
|
||||
@@ -1038,17 +1067,20 @@ interface tclIntPlat
|
||||
declare 0 win {
|
||||
void TclWinConvertError(DWORD errCode)
|
||||
}
|
||||
declare 1 win {
|
||||
void TclWinConvertWSAError(DWORD errCode)
|
||||
}
|
||||
declare 2 win {
|
||||
struct servent *TclWinGetServByName(const char *nm,
|
||||
const char *proto)
|
||||
}
|
||||
declare 3 win {
|
||||
int TclWinGetSockOpt(SOCKET s, int level, int optname,
|
||||
char *optval, int *optlen)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 1 win {
|
||||
# void TclWinConvertWSAError(DWORD errCode)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 2 win {
|
||||
# struct servent *TclWinGetServByName(const char *nm,
|
||||
# const char *proto)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 3 win {
|
||||
# int TclWinGetSockOpt(SOCKET s, int level, int optname,
|
||||
# char *optval, int *optlen)
|
||||
#}
|
||||
declare 4 win {
|
||||
HINSTANCE TclWinGetTclInstance(void)
|
||||
}
|
||||
@@ -1060,23 +1092,25 @@ declare 5 win {
|
||||
# declare 5 win {
|
||||
# HINSTANCE TclWinLoadLibrary(char *name)
|
||||
# }
|
||||
declare 6 win {
|
||||
unsigned short TclWinNToHS(unsigned short ns)
|
||||
}
|
||||
declare 7 win {
|
||||
int TclWinSetSockOpt(SOCKET s, int level, int optname,
|
||||
const char *optval, int optlen)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 6 win {
|
||||
# unsigned short TclWinNToHS(unsigned short ns)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 7 win {
|
||||
# int TclWinSetSockOpt(SOCKET s, int level, int optname,
|
||||
# const char *optval, int optlen)
|
||||
#}
|
||||
declare 8 win {
|
||||
int TclpGetPid(Tcl_Pid pid)
|
||||
}
|
||||
declare 9 win {
|
||||
int TclWinGetPlatformId(void)
|
||||
}
|
||||
# new for 8.4.20+/8.5.12+ Cygwin only
|
||||
declare 10 win {
|
||||
Tcl_DirEntry *TclpReaddir(DIR *dir)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 10 win {
|
||||
# Tcl_DirEntry *TclpReaddir(DIR *dir)
|
||||
#}
|
||||
# Removed in 8.3.1 (for Win32s only):
|
||||
#declare 10 win {
|
||||
# int TclWinSynchSpawn(void *args, int type, void **trans, Tcl_Pid *pidPtr)
|
||||
@@ -1127,9 +1161,10 @@ declare 19 win {
|
||||
declare 20 win {
|
||||
void TclWinAddProcess(HANDLE hProcess, DWORD id)
|
||||
}
|
||||
declare 21 win {
|
||||
char *TclpInetNtoa(struct in_addr addr)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 21 win {
|
||||
# char *TclpInetNtoa(struct in_addr addr)
|
||||
#}
|
||||
# removed permanently for 8.4
|
||||
#declare 21 win {
|
||||
# void TclpAsyncMark(Tcl_AsyncHandler async)
|
||||
@@ -1150,9 +1185,10 @@ declare 24 win {
|
||||
#declare 25 win {
|
||||
# TclPlatformType *TclWinGetPlatform(void)
|
||||
#}
|
||||
declare 26 win {
|
||||
void TclWinSetInterfaces(int wide)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 26 win {
|
||||
# void TclWinSetInterfaces(int wide)
|
||||
#}
|
||||
|
||||
# Added in Tcl 8.3.3 / 8.4
|
||||
|
||||
@@ -1211,20 +1247,22 @@ declare 9 unix {
|
||||
|
||||
# Added in 8.4:
|
||||
|
||||
declare 10 unix {
|
||||
Tcl_DirEntry *TclpReaddir(DIR *dir)
|
||||
}
|
||||
# Slots 11 and 12 are forwarders for functions that were promoted to
|
||||
# generic Stubs
|
||||
declare 11 unix {
|
||||
struct tm *TclpLocaltime_unix(const time_t *clock)
|
||||
}
|
||||
declare 12 unix {
|
||||
struct tm *TclpGmtime_unix(const time_t *clock)
|
||||
}
|
||||
declare 13 unix {
|
||||
char *TclpInetNtoa(struct in_addr addr)
|
||||
}
|
||||
# Removed in 9.0:
|
||||
#declare 10 unix {
|
||||
# Tcl_DirEntry *TclpReaddir(DIR *dir)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 11 unix {
|
||||
# struct tm *TclpLocaltime_unix(const time_t *clock)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 12 unix {
|
||||
# struct tm *TclpGmtime_unix(const time_t *clock)
|
||||
#}
|
||||
# Removed in 9.0:
|
||||
#declare 13 unix {
|
||||
# char *TclpInetNtoa(struct in_addr addr)
|
||||
#}
|
||||
|
||||
# Added in 8.5:
|
||||
|
||||
|
||||
+22
-69
@@ -51,6 +51,7 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdarg.h>
|
||||
#ifdef NO_STDLIB_H
|
||||
# include "../compat/stdlib.h"
|
||||
#else
|
||||
@@ -1773,41 +1774,31 @@ typedef struct AllocCache {
|
||||
|
||||
typedef struct Interp {
|
||||
/*
|
||||
* Note: the first three fields must match exactly the fields in a
|
||||
* Tcl_Interp struct (see tcl.h). If you change one, be sure to change the
|
||||
* other.
|
||||
*
|
||||
* The interpreter's result is held in both the string and the
|
||||
* objResultPtr fields. These fields hold, respectively, the result's
|
||||
* string or object value. The interpreter's result is always in the
|
||||
* result field if that is non-empty, otherwise it is in objResultPtr.
|
||||
* The two fields are kept consistent unless some C code sets
|
||||
* interp->result directly. Programs should not access result and
|
||||
* objResultPtr directly; instead, they should always get and set the
|
||||
* result using procedures such as Tcl_SetObjResult, Tcl_GetObjResult, and
|
||||
* Tcl_GetStringResult. See the SetResult man page for details.
|
||||
* The first two fields were named "result" and "freeProc" in earlier
|
||||
* versions of Tcl. They are no longer used within Tcl, and are no
|
||||
* longer available to be accessed by extensions. However, they cannot
|
||||
* be removed. Why? There is a deployed base of stub-enabled extensions
|
||||
* that query the value of iPtr->stubTable. For them to continue to work,
|
||||
* the location of the field "stubTable" within the Interp struct cannot
|
||||
* change. The most robust way to assure that is to leave all fields up to
|
||||
* that one undisturbed.
|
||||
*/
|
||||
|
||||
char *result; /* If the last command returned a string
|
||||
* result, this points to it. Should not be
|
||||
* accessed directly; see comment above. */
|
||||
Tcl_FreeProc *freeProc; /* Zero means a string result is statically
|
||||
* allocated. TCL_DYNAMIC means string result
|
||||
* was allocated with ckalloc and should be
|
||||
* freed with ckfree. Other values give
|
||||
* address of procedure to invoke to free the
|
||||
* string result. Tcl_Eval must free it before
|
||||
* executing next command. */
|
||||
const char *legacyResult;
|
||||
void (*legacyFreeProc) (void);
|
||||
int errorLine; /* When TCL_ERROR is returned, this gives the
|
||||
* line number in the command where the error
|
||||
* occurred (1 means first line). */
|
||||
const struct TclStubs *stubTable;
|
||||
/* Pointer to the exported Tcl stub table. On
|
||||
* previous versions of Tcl this is a pointer
|
||||
* to the objResultPtr or a pointer to a
|
||||
* buckets array in a hash table. We therefore
|
||||
* have to do some careful checking before we
|
||||
* can use this. */
|
||||
/* Pointer to the exported Tcl stub table. In
|
||||
* ancient pre-8.1 versions of Tcl this was a
|
||||
* pointer to the objResultPtr or a pointer to a
|
||||
* buckets array in a hash table. Deployed stubs
|
||||
* enabled extensions check for a NULL pointer value
|
||||
* and for a TCL_STUBS_MAGIC value to verify they
|
||||
* are not [load]ing into one of those pre-stubs
|
||||
* interps.
|
||||
*/
|
||||
|
||||
TclHandle handle; /* Handle used to keep track of when this
|
||||
* interp is deleted. */
|
||||
@@ -1820,15 +1811,7 @@ typedef struct Interp {
|
||||
ClientData interpInfo; /* Information used by tclInterp.c to keep
|
||||
* track of master/slave interps on a
|
||||
* per-interp basis. */
|
||||
union {
|
||||
void (*optimizer)(void *envPtr);
|
||||
Tcl_HashTable unused2; /* No longer used (was mathFuncTable). The
|
||||
* unused space in interp was repurposed for
|
||||
* pluggable bytecode optimizers. The core
|
||||
* contains one optimizer, which can be
|
||||
* selectively overriden by extensions. */
|
||||
} extra;
|
||||
|
||||
void (*optimizer)(void *envPtr);
|
||||
/*
|
||||
* Information related to procedures and variables. See tclProc.c and
|
||||
* tclVar.c for usage.
|
||||
@@ -1857,25 +1840,6 @@ typedef struct Interp {
|
||||
Namespace *lookupNsPtr; /* Namespace to use ONLY on the next
|
||||
* TCL_EVAL_INVOKE call to Tcl_EvalObjv. */
|
||||
|
||||
/*
|
||||
* Information used by Tcl_AppendResult to keep track of partial results.
|
||||
* See Tcl_AppendResult code for details.
|
||||
*/
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
char *appendResult; /* Storage space for results generated by
|
||||
* Tcl_AppendResult. Ckalloc-ed. NULL means
|
||||
* not yet allocated. */
|
||||
int appendAvl; /* Total amount of space available at
|
||||
* partialResult. */
|
||||
int appendUsed; /* Number of non-null bytes currently stored
|
||||
* at partialResult. */
|
||||
#else
|
||||
char *appendResultDontUse;
|
||||
int appendAvlDontUse;
|
||||
int appendUsedDontUse;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Information about packages. Used only in tclPkg.c.
|
||||
*/
|
||||
@@ -1898,7 +1862,6 @@ typedef struct Interp {
|
||||
* Normally zero, but may be set before
|
||||
* calling Tcl_Eval. See below for valid
|
||||
* values. */
|
||||
int unused1; /* No longer used (was termOffset) */
|
||||
LiteralTable literalTable; /* Contains LiteralEntry's describing all Tcl
|
||||
* objects holding literals of scripts
|
||||
* compiled by the interpreter. Indexed by the
|
||||
@@ -1936,12 +1899,6 @@ typedef struct Interp {
|
||||
* string. Returned by Tcl_ObjSetVar2 when
|
||||
* variable traces change a variable in a
|
||||
* gross way. */
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
char resultSpace[TCL_RESULT_SIZE+1];
|
||||
/* Static space holding small results. */
|
||||
#else
|
||||
char resultSpaceDontUse[TCL_RESULT_SIZE+1];
|
||||
#endif
|
||||
Tcl_Obj *objResultPtr; /* If the last command returned an object
|
||||
* result, this points to it. Should not be
|
||||
* accessed directly; see comment above. */
|
||||
@@ -2902,8 +2859,6 @@ MODULE_SCOPE int TclByteArrayMatch(const unsigned char *string,
|
||||
MODULE_SCOPE double TclCeil(const mp_int *a);
|
||||
MODULE_SCOPE void TclChannelPreserve(Tcl_Channel chan);
|
||||
MODULE_SCOPE void TclChannelRelease(Tcl_Channel chan);
|
||||
MODULE_SCOPE int TclCheckBadOctal(Tcl_Interp *interp,
|
||||
const char *value);
|
||||
MODULE_SCOPE int TclChanCaughtErrorBypass(Tcl_Interp *interp,
|
||||
Tcl_Channel chan);
|
||||
MODULE_SCOPE Tcl_ObjCmdProc TclChannelNamesCmd;
|
||||
@@ -2960,10 +2915,8 @@ MODULE_SCOPE char * TclDStringAppendDString(Tcl_DString *dsPtr,
|
||||
MODULE_SCOPE Tcl_Obj * TclDStringToObj(Tcl_DString *dsPtr);
|
||||
MODULE_SCOPE Tcl_Obj *const * TclFetchEnsembleRoot(Tcl_Interp *interp,
|
||||
Tcl_Obj *const *objv, int objc, int *objcPtr);
|
||||
Tcl_Namespace * TclEnsureNamespace(
|
||||
Tcl_Interp *interp,
|
||||
MODULE_SCOPE Tcl_Namespace * TclEnsureNamespace(Tcl_Interp *interp,
|
||||
Tcl_Namespace *namespacePtr);
|
||||
|
||||
MODULE_SCOPE void TclFinalizeAllocSubsystem(void);
|
||||
MODULE_SCOPE void TclFinalizeAsync(void);
|
||||
MODULE_SCOPE void TclFinalizeDoubleConversion(void);
|
||||
|
||||
+78
-197
@@ -28,22 +28,6 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(TCL_NO_DEPRECATED) && (TCL_MAJOR_VERSION < 9)
|
||||
/* Those macro's are especially for Itcl 3.4 compatibility */
|
||||
# define tclCreateNamespace tcl_CreateNamespace
|
||||
# define tclDeleteNamespace tcl_DeleteNamespace
|
||||
# define tclAppendExportList tcl_AppendExportList
|
||||
# define tclExport tcl_Export
|
||||
# define tclImport tcl_Import
|
||||
# define tclForgetImport tcl_ForgetImport
|
||||
# define tclGetCurrentNamespace_ tcl_GetCurrentNamespace
|
||||
# define tclGetGlobalNamespace_ tcl_GetGlobalNamespace
|
||||
# define tclFindNamespace tcl_FindNamespace
|
||||
# define tclFindCommand tcl_FindCommand
|
||||
# define tclGetCommandFromObj tcl_GetCommandFromObj
|
||||
# define tclGetCommandFullName tcl_GetCommandFullName
|
||||
#endif /* !defined(TCL_NO_DEPRECATED) */
|
||||
|
||||
/*
|
||||
* WARNING: This file is automatically generated by the tools/genStubs.tcl
|
||||
* script. Any modifications to the function declarations below should be made
|
||||
@@ -74,11 +58,7 @@ EXTERN void TclCleanupCommand(Command *cmdPtr);
|
||||
/* 7 */
|
||||
EXTERN int TclCopyAndCollapse(int count, const char *src,
|
||||
char *dst);
|
||||
/* 8 */
|
||||
TCL_DEPRECATED("")
|
||||
int TclCopyChannelOld(Tcl_Interp *interp,
|
||||
Tcl_Channel inChan, Tcl_Channel outChan,
|
||||
int toRead, Tcl_Obj *cmdPtr);
|
||||
/* Slot 8 is reserved */
|
||||
/* 9 */
|
||||
EXTERN int TclCreatePipeline(Tcl_Interp *interp, int argc,
|
||||
const char **argv, Tcl_Pid **pidArrayPtr,
|
||||
@@ -218,9 +198,7 @@ EXTERN void TclpFree(char *ptr);
|
||||
EXTERN unsigned long TclpGetClicks(void);
|
||||
/* 76 */
|
||||
EXTERN unsigned long TclpGetSeconds(void);
|
||||
/* 77 */
|
||||
TCL_DEPRECATED("")
|
||||
void TclpGetTime(Tcl_Time *time);
|
||||
/* Slot 77 is reserved */
|
||||
/* Slot 78 is reserved */
|
||||
/* Slot 79 is reserved */
|
||||
/* Slot 80 is reserved */
|
||||
@@ -232,10 +210,7 @@ EXTERN char * TclpRealloc(char *ptr, unsigned int size);
|
||||
/* Slot 85 is reserved */
|
||||
/* Slot 86 is reserved */
|
||||
/* Slot 87 is reserved */
|
||||
/* 88 */
|
||||
EXTERN char * TclPrecTraceProc(ClientData clientData,
|
||||
Tcl_Interp *interp, const char *name1,
|
||||
const char *name2, int flags);
|
||||
/* Slot 88 is reserved */
|
||||
/* 89 */
|
||||
EXTERN int TclPreventAliasLoop(Tcl_Interp *interp,
|
||||
Tcl_Interp *cmdInterp, Tcl_Command cmd);
|
||||
@@ -268,9 +243,7 @@ EXTERN void TclSetupEnv(Tcl_Interp *interp);
|
||||
/* 103 */
|
||||
EXTERN int TclSockGetPort(Tcl_Interp *interp, const char *str,
|
||||
const char *proto, int *portPtr);
|
||||
/* 104 */
|
||||
TCL_DEPRECATED("")
|
||||
int TclSockMinimumBuffersOld(int sock, int size);
|
||||
/* Slot 104 is reserved */
|
||||
/* Slot 105 is reserved */
|
||||
/* Slot 106 is reserved */
|
||||
/* Slot 107 is reserved */
|
||||
@@ -286,25 +259,12 @@ EXTERN void Tcl_AddInterpResolvers(Tcl_Interp *interp,
|
||||
Tcl_ResolveCmdProc *cmdProc,
|
||||
Tcl_ResolveVarProc *varProc,
|
||||
Tcl_ResolveCompiledVarProc *compiledVarProc);
|
||||
/* 112 */
|
||||
EXTERN int TclAppendExportList(Tcl_Interp *interp,
|
||||
Tcl_Namespace *nsPtr, Tcl_Obj *objPtr);
|
||||
/* 113 */
|
||||
EXTERN Tcl_Namespace * TclCreateNamespace(Tcl_Interp *interp,
|
||||
const char *name, ClientData clientData,
|
||||
Tcl_NamespaceDeleteProc *deleteProc);
|
||||
/* 114 */
|
||||
EXTERN void TclDeleteNamespace(Tcl_Namespace *nsPtr);
|
||||
/* 115 */
|
||||
EXTERN int TclExport(Tcl_Interp *interp, Tcl_Namespace *nsPtr,
|
||||
const char *pattern, int resetListFirst);
|
||||
/* 116 */
|
||||
EXTERN Tcl_Command TclFindCommand(Tcl_Interp *interp, const char *name,
|
||||
Tcl_Namespace *contextNsPtr, int flags);
|
||||
/* 117 */
|
||||
EXTERN Tcl_Namespace * TclFindNamespace(Tcl_Interp *interp,
|
||||
const char *name,
|
||||
Tcl_Namespace *contextNsPtr, int flags);
|
||||
/* Slot 112 is reserved */
|
||||
/* Slot 113 is reserved */
|
||||
/* Slot 114 is reserved */
|
||||
/* Slot 115 is reserved */
|
||||
/* Slot 116 is reserved */
|
||||
/* Slot 117 is reserved */
|
||||
/* 118 */
|
||||
EXTERN int Tcl_GetInterpResolvers(Tcl_Interp *interp,
|
||||
const char *name, Tcl_ResolverInfo *resInfo);
|
||||
@@ -316,25 +276,15 @@ EXTERN int Tcl_GetNamespaceResolvers(
|
||||
EXTERN Tcl_Var Tcl_FindNamespaceVar(Tcl_Interp *interp,
|
||||
const char *name,
|
||||
Tcl_Namespace *contextNsPtr, int flags);
|
||||
/* 121 */
|
||||
EXTERN int TclForgetImport(Tcl_Interp *interp,
|
||||
Tcl_Namespace *nsPtr, const char *pattern);
|
||||
/* 122 */
|
||||
EXTERN Tcl_Command TclGetCommandFromObj(Tcl_Interp *interp,
|
||||
Tcl_Obj *objPtr);
|
||||
/* 123 */
|
||||
EXTERN void TclGetCommandFullName(Tcl_Interp *interp,
|
||||
Tcl_Command command, Tcl_Obj *objPtr);
|
||||
/* 124 */
|
||||
EXTERN Tcl_Namespace * TclGetCurrentNamespace_(Tcl_Interp *interp);
|
||||
/* 125 */
|
||||
EXTERN Tcl_Namespace * TclGetGlobalNamespace_(Tcl_Interp *interp);
|
||||
/* Slot 121 is reserved */
|
||||
/* Slot 122 is reserved */
|
||||
/* Slot 123 is reserved */
|
||||
/* Slot 124 is reserved */
|
||||
/* Slot 125 is reserved */
|
||||
/* 126 */
|
||||
EXTERN void Tcl_GetVariableFullName(Tcl_Interp *interp,
|
||||
Tcl_Var variable, Tcl_Obj *objPtr);
|
||||
/* 127 */
|
||||
EXTERN int TclImport(Tcl_Interp *interp, Tcl_Namespace *nsPtr,
|
||||
const char *pattern, int allowOverwrite);
|
||||
/* Slot 127 is reserved */
|
||||
/* 128 */
|
||||
EXTERN void Tcl_PopCallFrame(Tcl_Interp *interp);
|
||||
/* 129 */
|
||||
@@ -352,9 +302,7 @@ EXTERN void Tcl_SetNamespaceResolvers(
|
||||
Tcl_ResolveCompiledVarProc *compiledVarProc);
|
||||
/* 132 */
|
||||
EXTERN int TclpHasSockets(Tcl_Interp *interp);
|
||||
/* 133 */
|
||||
TCL_DEPRECATED("")
|
||||
struct tm * TclpGetDate(const time_t *time, int useGMT);
|
||||
/* Slot 133 is reserved */
|
||||
/* Slot 134 is reserved */
|
||||
/* Slot 135 is reserved */
|
||||
/* Slot 136 is reserved */
|
||||
@@ -404,12 +352,8 @@ EXTERN void TclRegError(Tcl_Interp *interp, const char *msg,
|
||||
/* 157 */
|
||||
EXTERN Var * TclVarTraceExists(Tcl_Interp *interp,
|
||||
const char *varName);
|
||||
/* 158 */
|
||||
TCL_DEPRECATED("use public Tcl_SetStartupScript()")
|
||||
void TclSetStartupScriptFileName(const char *filename);
|
||||
/* 159 */
|
||||
TCL_DEPRECATED("use public Tcl_GetStartupScript()")
|
||||
const char * TclGetStartupScriptFileName(void);
|
||||
/* Slot 158 is reserved */
|
||||
/* Slot 159 is reserved */
|
||||
/* Slot 160 is reserved */
|
||||
/* 161 */
|
||||
EXTERN int TclChannelTransform(Tcl_Interp *interp,
|
||||
@@ -427,12 +371,8 @@ EXTERN void TclpSetInitialEncodings(void);
|
||||
EXTERN int TclListObjSetElement(Tcl_Interp *interp,
|
||||
Tcl_Obj *listPtr, int index,
|
||||
Tcl_Obj *valuePtr);
|
||||
/* 167 */
|
||||
TCL_DEPRECATED("use public Tcl_SetStartupScript()")
|
||||
void TclSetStartupScriptPath(Tcl_Obj *pathPtr);
|
||||
/* 168 */
|
||||
TCL_DEPRECATED("use public Tcl_GetStartupScript()")
|
||||
Tcl_Obj * TclGetStartupScriptPath(void);
|
||||
/* Slot 167 is reserved */
|
||||
/* Slot 168 is reserved */
|
||||
/* 169 */
|
||||
EXTERN int TclpUtfNcmp2(const char *s1, const char *s2,
|
||||
unsigned long n);
|
||||
@@ -464,19 +404,12 @@ EXTERN void TclCleanupVar(Var *varPtr, Var *arrayPtr);
|
||||
EXTERN void TclVarErrMsg(Tcl_Interp *interp, const char *part1,
|
||||
const char *part2, const char *operation,
|
||||
const char *reason);
|
||||
/* 178 */
|
||||
EXTERN void TclSetStartupScript(Tcl_Obj *pathPtr,
|
||||
const char *encodingName);
|
||||
/* 179 */
|
||||
EXTERN Tcl_Obj * TclGetStartupScript(const char **encodingNamePtr);
|
||||
/* Slot 178 is reserved */
|
||||
/* Slot 179 is reserved */
|
||||
/* Slot 180 is reserved */
|
||||
/* Slot 181 is reserved */
|
||||
/* 182 */
|
||||
TCL_DEPRECATED("")
|
||||
struct tm * TclpLocaltime(const time_t *clock);
|
||||
/* 183 */
|
||||
TCL_DEPRECATED("")
|
||||
struct tm * TclpGmtime(const time_t *clock);
|
||||
/* Slot 182 is reserved */
|
||||
/* Slot 183 is reserved */
|
||||
/* Slot 184 is reserved */
|
||||
/* Slot 185 is reserved */
|
||||
/* Slot 186 is reserved */
|
||||
@@ -579,9 +512,7 @@ EXTERN Var * TclVarHashCreateVar(TclVarHashTable *tablePtr,
|
||||
/* 235 */
|
||||
EXTERN void TclInitVarHashTable(TclVarHashTable *tablePtr,
|
||||
Namespace *nsPtr);
|
||||
/* 236 */
|
||||
TCL_DEPRECATED("use Tcl_BackgroundException")
|
||||
void TclBackgroundException(Tcl_Interp *interp, int code);
|
||||
/* Slot 236 is reserved */
|
||||
/* 237 */
|
||||
EXTERN int TclResetCancellation(Tcl_Interp *interp, int force);
|
||||
/* 238 */
|
||||
@@ -663,7 +594,7 @@ typedef struct TclIntStubs {
|
||||
int (*tclCleanupChildren) (Tcl_Interp *interp, int numPids, Tcl_Pid *pidPtr, Tcl_Channel errorChan); /* 5 */
|
||||
void (*tclCleanupCommand) (Command *cmdPtr); /* 6 */
|
||||
int (*tclCopyAndCollapse) (int count, const char *src, char *dst); /* 7 */
|
||||
TCL_DEPRECATED_API("") int (*tclCopyChannelOld) (Tcl_Interp *interp, Tcl_Channel inChan, Tcl_Channel outChan, int toRead, Tcl_Obj *cmdPtr); /* 8 */
|
||||
void (*reserved8)(void);
|
||||
int (*tclCreatePipeline) (Tcl_Interp *interp, int argc, const char **argv, Tcl_Pid **pidArrayPtr, TclFile *inPipePtr, TclFile *outPipePtr, TclFile *errFilePtr); /* 9 */
|
||||
int (*tclCreateProc) (Tcl_Interp *interp, Namespace *nsPtr, const char *procName, Tcl_Obj *argsPtr, Tcl_Obj *bodyPtr, Proc **procPtrPtr); /* 10 */
|
||||
void (*tclDeleteCompiledLocalVars) (Interp *iPtr, CallFrame *framePtr); /* 11 */
|
||||
@@ -732,7 +663,7 @@ typedef struct TclIntStubs {
|
||||
void (*tclpFree) (char *ptr); /* 74 */
|
||||
unsigned long (*tclpGetClicks) (void); /* 75 */
|
||||
unsigned long (*tclpGetSeconds) (void); /* 76 */
|
||||
TCL_DEPRECATED_API("") void (*tclpGetTime) (Tcl_Time *time); /* 77 */
|
||||
void (*reserved77)(void);
|
||||
void (*reserved78)(void);
|
||||
void (*reserved79)(void);
|
||||
void (*reserved80)(void);
|
||||
@@ -743,7 +674,7 @@ typedef struct TclIntStubs {
|
||||
void (*reserved85)(void);
|
||||
void (*reserved86)(void);
|
||||
void (*reserved87)(void);
|
||||
char * (*tclPrecTraceProc) (ClientData clientData, Tcl_Interp *interp, const char *name1, const char *name2, int flags); /* 88 */
|
||||
void (*reserved88)(void);
|
||||
int (*tclPreventAliasLoop) (Tcl_Interp *interp, Tcl_Interp *cmdInterp, Tcl_Command cmd); /* 89 */
|
||||
void (*reserved90)(void);
|
||||
void (*tclProcCleanupProc) (Proc *procPtr); /* 91 */
|
||||
@@ -759,7 +690,7 @@ typedef struct TclIntStubs {
|
||||
CONST86 char * (*tclSetPreInitScript) (const char *string); /* 101 */
|
||||
void (*tclSetupEnv) (Tcl_Interp *interp); /* 102 */
|
||||
int (*tclSockGetPort) (Tcl_Interp *interp, const char *str, const char *proto, int *portPtr); /* 103 */
|
||||
TCL_DEPRECATED_API("") int (*tclSockMinimumBuffersOld) (int sock, int size); /* 104 */
|
||||
void (*reserved104)(void);
|
||||
void (*reserved105)(void);
|
||||
void (*reserved106)(void);
|
||||
void (*reserved107)(void);
|
||||
@@ -767,28 +698,28 @@ typedef struct TclIntStubs {
|
||||
int (*tclUpdateReturnInfo) (Interp *iPtr); /* 109 */
|
||||
int (*tclSockMinimumBuffers) (void *sock, int size); /* 110 */
|
||||
void (*tcl_AddInterpResolvers) (Tcl_Interp *interp, const char *name, Tcl_ResolveCmdProc *cmdProc, Tcl_ResolveVarProc *varProc, Tcl_ResolveCompiledVarProc *compiledVarProc); /* 111 */
|
||||
int (*tclAppendExportList) (Tcl_Interp *interp, Tcl_Namespace *nsPtr, Tcl_Obj *objPtr); /* 112 */
|
||||
Tcl_Namespace * (*tclCreateNamespace) (Tcl_Interp *interp, const char *name, ClientData clientData, Tcl_NamespaceDeleteProc *deleteProc); /* 113 */
|
||||
void (*tclDeleteNamespace) (Tcl_Namespace *nsPtr); /* 114 */
|
||||
int (*tclExport) (Tcl_Interp *interp, Tcl_Namespace *nsPtr, const char *pattern, int resetListFirst); /* 115 */
|
||||
Tcl_Command (*tclFindCommand) (Tcl_Interp *interp, const char *name, Tcl_Namespace *contextNsPtr, int flags); /* 116 */
|
||||
Tcl_Namespace * (*tclFindNamespace) (Tcl_Interp *interp, const char *name, Tcl_Namespace *contextNsPtr, int flags); /* 117 */
|
||||
void (*reserved112)(void);
|
||||
void (*reserved113)(void);
|
||||
void (*reserved114)(void);
|
||||
void (*reserved115)(void);
|
||||
void (*reserved116)(void);
|
||||
void (*reserved117)(void);
|
||||
int (*tcl_GetInterpResolvers) (Tcl_Interp *interp, const char *name, Tcl_ResolverInfo *resInfo); /* 118 */
|
||||
int (*tcl_GetNamespaceResolvers) (Tcl_Namespace *namespacePtr, Tcl_ResolverInfo *resInfo); /* 119 */
|
||||
Tcl_Var (*tcl_FindNamespaceVar) (Tcl_Interp *interp, const char *name, Tcl_Namespace *contextNsPtr, int flags); /* 120 */
|
||||
int (*tclForgetImport) (Tcl_Interp *interp, Tcl_Namespace *nsPtr, const char *pattern); /* 121 */
|
||||
Tcl_Command (*tclGetCommandFromObj) (Tcl_Interp *interp, Tcl_Obj *objPtr); /* 122 */
|
||||
void (*tclGetCommandFullName) (Tcl_Interp *interp, Tcl_Command command, Tcl_Obj *objPtr); /* 123 */
|
||||
Tcl_Namespace * (*tclGetCurrentNamespace_) (Tcl_Interp *interp); /* 124 */
|
||||
Tcl_Namespace * (*tclGetGlobalNamespace_) (Tcl_Interp *interp); /* 125 */
|
||||
void (*reserved121)(void);
|
||||
void (*reserved122)(void);
|
||||
void (*reserved123)(void);
|
||||
void (*reserved124)(void);
|
||||
void (*reserved125)(void);
|
||||
void (*tcl_GetVariableFullName) (Tcl_Interp *interp, Tcl_Var variable, Tcl_Obj *objPtr); /* 126 */
|
||||
int (*tclImport) (Tcl_Interp *interp, Tcl_Namespace *nsPtr, const char *pattern, int allowOverwrite); /* 127 */
|
||||
void (*reserved127)(void);
|
||||
void (*tcl_PopCallFrame) (Tcl_Interp *interp); /* 128 */
|
||||
int (*tcl_PushCallFrame) (Tcl_Interp *interp, Tcl_CallFrame *framePtr, Tcl_Namespace *nsPtr, int isProcCallFrame); /* 129 */
|
||||
int (*tcl_RemoveInterpResolvers) (Tcl_Interp *interp, const char *name); /* 130 */
|
||||
void (*tcl_SetNamespaceResolvers) (Tcl_Namespace *namespacePtr, Tcl_ResolveCmdProc *cmdProc, Tcl_ResolveVarProc *varProc, Tcl_ResolveCompiledVarProc *compiledVarProc); /* 131 */
|
||||
int (*tclpHasSockets) (Tcl_Interp *interp); /* 132 */
|
||||
TCL_DEPRECATED_API("") struct tm * (*tclpGetDate) (const time_t *time, int useGMT); /* 133 */
|
||||
void (*reserved133)(void);
|
||||
void (*reserved134)(void);
|
||||
void (*reserved135)(void);
|
||||
void (*reserved136)(void);
|
||||
@@ -813,8 +744,8 @@ typedef struct TclIntStubs {
|
||||
void (*reserved155)(void);
|
||||
void (*tclRegError) (Tcl_Interp *interp, const char *msg, int status); /* 156 */
|
||||
Var * (*tclVarTraceExists) (Tcl_Interp *interp, const char *varName); /* 157 */
|
||||
TCL_DEPRECATED_API("use public Tcl_SetStartupScript()") void (*tclSetStartupScriptFileName) (const char *filename); /* 158 */
|
||||
TCL_DEPRECATED_API("use public Tcl_GetStartupScript()") const char * (*tclGetStartupScriptFileName) (void); /* 159 */
|
||||
void (*reserved158)(void);
|
||||
void (*reserved159)(void);
|
||||
void (*reserved160)(void);
|
||||
int (*tclChannelTransform) (Tcl_Interp *interp, Tcl_Channel chan, Tcl_Obj *cmdObjPtr); /* 161 */
|
||||
void (*tclChannelEventScriptInvoker) (ClientData clientData, int flags); /* 162 */
|
||||
@@ -822,8 +753,8 @@ typedef struct TclIntStubs {
|
||||
void (*tclExpandCodeArray) (void *envPtr); /* 164 */
|
||||
void (*tclpSetInitialEncodings) (void); /* 165 */
|
||||
int (*tclListObjSetElement) (Tcl_Interp *interp, Tcl_Obj *listPtr, int index, Tcl_Obj *valuePtr); /* 166 */
|
||||
TCL_DEPRECATED_API("use public Tcl_SetStartupScript()") void (*tclSetStartupScriptPath) (Tcl_Obj *pathPtr); /* 167 */
|
||||
TCL_DEPRECATED_API("use public Tcl_GetStartupScript()") Tcl_Obj * (*tclGetStartupScriptPath) (void); /* 168 */
|
||||
void (*reserved167)(void);
|
||||
void (*reserved168)(void);
|
||||
int (*tclpUtfNcmp2) (const char *s1, const char *s2, unsigned long n); /* 169 */
|
||||
int (*tclCheckInterpTraces) (Tcl_Interp *interp, const char *command, int numChars, Command *cmdPtr, int result, int traceFlags, int objc, Tcl_Obj *const objv[]); /* 170 */
|
||||
int (*tclCheckExecutionTraces) (Tcl_Interp *interp, const char *command, int numChars, Command *cmdPtr, int result, int traceFlags, int objc, Tcl_Obj *const objv[]); /* 171 */
|
||||
@@ -833,12 +764,12 @@ typedef struct TclIntStubs {
|
||||
int (*tclCallVarTraces) (Interp *iPtr, Var *arrayPtr, Var *varPtr, const char *part1, const char *part2, int flags, int leaveErrMsg); /* 175 */
|
||||
void (*tclCleanupVar) (Var *varPtr, Var *arrayPtr); /* 176 */
|
||||
void (*tclVarErrMsg) (Tcl_Interp *interp, const char *part1, const char *part2, const char *operation, const char *reason); /* 177 */
|
||||
void (*tclSetStartupScript) (Tcl_Obj *pathPtr, const char *encodingName); /* 178 */
|
||||
Tcl_Obj * (*tclGetStartupScript) (const char **encodingNamePtr); /* 179 */
|
||||
void (*reserved178)(void);
|
||||
void (*reserved179)(void);
|
||||
void (*reserved180)(void);
|
||||
void (*reserved181)(void);
|
||||
TCL_DEPRECATED_API("") struct tm * (*tclpLocaltime) (const time_t *clock); /* 182 */
|
||||
TCL_DEPRECATED_API("") struct tm * (*tclpGmtime) (const time_t *clock); /* 183 */
|
||||
void (*reserved182)(void);
|
||||
void (*reserved183)(void);
|
||||
void (*reserved184)(void);
|
||||
void (*reserved185)(void);
|
||||
void (*reserved186)(void);
|
||||
@@ -891,7 +822,7 @@ typedef struct TclIntStubs {
|
||||
void (*tclGetSrcInfoForPc) (CmdFrame *contextPtr); /* 233 */
|
||||
Var * (*tclVarHashCreateVar) (TclVarHashTable *tablePtr, const char *key, int *newPtr); /* 234 */
|
||||
void (*tclInitVarHashTable) (TclVarHashTable *tablePtr, Namespace *nsPtr); /* 235 */
|
||||
TCL_DEPRECATED_API("use Tcl_BackgroundException") void (*tclBackgroundException) (Tcl_Interp *interp, int code); /* 236 */
|
||||
void (*reserved236)(void);
|
||||
int (*tclResetCancellation) (Tcl_Interp *interp, int force); /* 237 */
|
||||
int (*tclNRInterpProc) (ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); /* 238 */
|
||||
int (*tclNRInterpProcCore) (Tcl_Interp *interp, Tcl_Obj *procNameObj, int skip, ProcErrorProc *errorProc); /* 239 */
|
||||
@@ -938,8 +869,7 @@ extern const TclIntStubs *tclIntStubsPtr;
|
||||
(tclIntStubsPtr->tclCleanupCommand) /* 6 */
|
||||
#define TclCopyAndCollapse \
|
||||
(tclIntStubsPtr->tclCopyAndCollapse) /* 7 */
|
||||
#define TclCopyChannelOld \
|
||||
(tclIntStubsPtr->tclCopyChannelOld) /* 8 */
|
||||
/* Slot 8 is reserved */
|
||||
#define TclCreatePipeline \
|
||||
(tclIntStubsPtr->tclCreatePipeline) /* 9 */
|
||||
#define TclCreateProc \
|
||||
@@ -1046,8 +976,7 @@ extern const TclIntStubs *tclIntStubsPtr;
|
||||
(tclIntStubsPtr->tclpGetClicks) /* 75 */
|
||||
#define TclpGetSeconds \
|
||||
(tclIntStubsPtr->tclpGetSeconds) /* 76 */
|
||||
#define TclpGetTime \
|
||||
(tclIntStubsPtr->tclpGetTime) /* 77 */
|
||||
/* Slot 77 is reserved */
|
||||
/* Slot 78 is reserved */
|
||||
/* Slot 79 is reserved */
|
||||
/* Slot 80 is reserved */
|
||||
@@ -1059,8 +988,7 @@ extern const TclIntStubs *tclIntStubsPtr;
|
||||
/* Slot 85 is reserved */
|
||||
/* Slot 86 is reserved */
|
||||
/* Slot 87 is reserved */
|
||||
#define TclPrecTraceProc \
|
||||
(tclIntStubsPtr->tclPrecTraceProc) /* 88 */
|
||||
/* Slot 88 is reserved */
|
||||
#define TclPreventAliasLoop \
|
||||
(tclIntStubsPtr->tclPreventAliasLoop) /* 89 */
|
||||
/* Slot 90 is reserved */
|
||||
@@ -1086,8 +1014,7 @@ extern const TclIntStubs *tclIntStubsPtr;
|
||||
(tclIntStubsPtr->tclSetupEnv) /* 102 */
|
||||
#define TclSockGetPort \
|
||||
(tclIntStubsPtr->tclSockGetPort) /* 103 */
|
||||
#define TclSockMinimumBuffersOld \
|
||||
(tclIntStubsPtr->tclSockMinimumBuffersOld) /* 104 */
|
||||
/* Slot 104 is reserved */
|
||||
/* Slot 105 is reserved */
|
||||
/* Slot 106 is reserved */
|
||||
/* Slot 107 is reserved */
|
||||
@@ -1099,38 +1026,26 @@ extern const TclIntStubs *tclIntStubsPtr;
|
||||
(tclIntStubsPtr->tclSockMinimumBuffers) /* 110 */
|
||||
#define Tcl_AddInterpResolvers \
|
||||
(tclIntStubsPtr->tcl_AddInterpResolvers) /* 111 */
|
||||
#define TclAppendExportList \
|
||||
(tclIntStubsPtr->tclAppendExportList) /* 112 */
|
||||
#define TclCreateNamespace \
|
||||
(tclIntStubsPtr->tclCreateNamespace) /* 113 */
|
||||
#define TclDeleteNamespace \
|
||||
(tclIntStubsPtr->tclDeleteNamespace) /* 114 */
|
||||
#define TclExport \
|
||||
(tclIntStubsPtr->tclExport) /* 115 */
|
||||
#define TclFindCommand \
|
||||
(tclIntStubsPtr->tclFindCommand) /* 116 */
|
||||
#define TclFindNamespace \
|
||||
(tclIntStubsPtr->tclFindNamespace) /* 117 */
|
||||
/* Slot 112 is reserved */
|
||||
/* Slot 113 is reserved */
|
||||
/* Slot 114 is reserved */
|
||||
/* Slot 115 is reserved */
|
||||
/* Slot 116 is reserved */
|
||||
/* Slot 117 is reserved */
|
||||
#define Tcl_GetInterpResolvers \
|
||||
(tclIntStubsPtr->tcl_GetInterpResolvers) /* 118 */
|
||||
#define Tcl_GetNamespaceResolvers \
|
||||
(tclIntStubsPtr->tcl_GetNamespaceResolvers) /* 119 */
|
||||
#define Tcl_FindNamespaceVar \
|
||||
(tclIntStubsPtr->tcl_FindNamespaceVar) /* 120 */
|
||||
#define TclForgetImport \
|
||||
(tclIntStubsPtr->tclForgetImport) /* 121 */
|
||||
#define TclGetCommandFromObj \
|
||||
(tclIntStubsPtr->tclGetCommandFromObj) /* 122 */
|
||||
#define TclGetCommandFullName \
|
||||
(tclIntStubsPtr->tclGetCommandFullName) /* 123 */
|
||||
#define TclGetCurrentNamespace_ \
|
||||
(tclIntStubsPtr->tclGetCurrentNamespace_) /* 124 */
|
||||
#define TclGetGlobalNamespace_ \
|
||||
(tclIntStubsPtr->tclGetGlobalNamespace_) /* 125 */
|
||||
/* Slot 121 is reserved */
|
||||
/* Slot 122 is reserved */
|
||||
/* Slot 123 is reserved */
|
||||
/* Slot 124 is reserved */
|
||||
/* Slot 125 is reserved */
|
||||
#define Tcl_GetVariableFullName \
|
||||
(tclIntStubsPtr->tcl_GetVariableFullName) /* 126 */
|
||||
#define TclImport \
|
||||
(tclIntStubsPtr->tclImport) /* 127 */
|
||||
/* Slot 127 is reserved */
|
||||
#define Tcl_PopCallFrame \
|
||||
(tclIntStubsPtr->tcl_PopCallFrame) /* 128 */
|
||||
#define Tcl_PushCallFrame \
|
||||
@@ -1141,8 +1056,7 @@ extern const TclIntStubs *tclIntStubsPtr;
|
||||
(tclIntStubsPtr->tcl_SetNamespaceResolvers) /* 131 */
|
||||
#define TclpHasSockets \
|
||||
(tclIntStubsPtr->tclpHasSockets) /* 132 */
|
||||
#define TclpGetDate \
|
||||
(tclIntStubsPtr->tclpGetDate) /* 133 */
|
||||
/* Slot 133 is reserved */
|
||||
/* Slot 134 is reserved */
|
||||
/* Slot 135 is reserved */
|
||||
/* Slot 136 is reserved */
|
||||
@@ -1183,10 +1097,8 @@ extern const TclIntStubs *tclIntStubsPtr;
|
||||
(tclIntStubsPtr->tclRegError) /* 156 */
|
||||
#define TclVarTraceExists \
|
||||
(tclIntStubsPtr->tclVarTraceExists) /* 157 */
|
||||
#define TclSetStartupScriptFileName \
|
||||
(tclIntStubsPtr->tclSetStartupScriptFileName) /* 158 */
|
||||
#define TclGetStartupScriptFileName \
|
||||
(tclIntStubsPtr->tclGetStartupScriptFileName) /* 159 */
|
||||
/* Slot 158 is reserved */
|
||||
/* Slot 159 is reserved */
|
||||
/* Slot 160 is reserved */
|
||||
#define TclChannelTransform \
|
||||
(tclIntStubsPtr->tclChannelTransform) /* 161 */
|
||||
@@ -1200,10 +1112,8 @@ extern const TclIntStubs *tclIntStubsPtr;
|
||||
(tclIntStubsPtr->tclpSetInitialEncodings) /* 165 */
|
||||
#define TclListObjSetElement \
|
||||
(tclIntStubsPtr->tclListObjSetElement) /* 166 */
|
||||
#define TclSetStartupScriptPath \
|
||||
(tclIntStubsPtr->tclSetStartupScriptPath) /* 167 */
|
||||
#define TclGetStartupScriptPath \
|
||||
(tclIntStubsPtr->tclGetStartupScriptPath) /* 168 */
|
||||
/* Slot 167 is reserved */
|
||||
/* Slot 168 is reserved */
|
||||
#define TclpUtfNcmp2 \
|
||||
(tclIntStubsPtr->tclpUtfNcmp2) /* 169 */
|
||||
#define TclCheckInterpTraces \
|
||||
@@ -1221,16 +1131,12 @@ extern const TclIntStubs *tclIntStubsPtr;
|
||||
(tclIntStubsPtr->tclCleanupVar) /* 176 */
|
||||
#define TclVarErrMsg \
|
||||
(tclIntStubsPtr->tclVarErrMsg) /* 177 */
|
||||
#define TclSetStartupScript \
|
||||
(tclIntStubsPtr->tclSetStartupScript) /* 178 */
|
||||
#define TclGetStartupScript \
|
||||
(tclIntStubsPtr->tclGetStartupScript) /* 179 */
|
||||
/* Slot 178 is reserved */
|
||||
/* Slot 179 is reserved */
|
||||
/* Slot 180 is reserved */
|
||||
/* Slot 181 is reserved */
|
||||
#define TclpLocaltime \
|
||||
(tclIntStubsPtr->tclpLocaltime) /* 182 */
|
||||
#define TclpGmtime \
|
||||
(tclIntStubsPtr->tclpGmtime) /* 183 */
|
||||
/* Slot 182 is reserved */
|
||||
/* Slot 183 is reserved */
|
||||
/* Slot 184 is reserved */
|
||||
/* Slot 185 is reserved */
|
||||
/* Slot 186 is reserved */
|
||||
@@ -1311,8 +1217,7 @@ extern const TclIntStubs *tclIntStubsPtr;
|
||||
(tclIntStubsPtr->tclVarHashCreateVar) /* 234 */
|
||||
#define TclInitVarHashTable \
|
||||
(tclIntStubsPtr->tclInitVarHashTable) /* 235 */
|
||||
#define TclBackgroundException \
|
||||
(tclIntStubsPtr->tclBackgroundException) /* 236 */
|
||||
/* Slot 236 is reserved */
|
||||
#define TclResetCancellation \
|
||||
(tclIntStubsPtr->tclResetCancellation) /* 237 */
|
||||
#define TclNRInterpProc \
|
||||
@@ -1361,28 +1266,4 @@ extern const TclIntStubs *tclIntStubsPtr;
|
||||
#undef TCL_STORAGE_CLASS
|
||||
#define TCL_STORAGE_CLASS DLLIMPORT
|
||||
|
||||
#if defined(USE_TCL_STUBS)
|
||||
# undef TclGetStartupScriptFileName
|
||||
# undef TclSetStartupScriptFileName
|
||||
# undef TclGetStartupScriptPath
|
||||
# undef TclSetStartupScriptPath
|
||||
# undef TclBackgroundException
|
||||
# undef TclSetStartupScript
|
||||
# undef TclGetStartupScript
|
||||
# undef TclCreateNamespace
|
||||
# undef TclDeleteNamespace
|
||||
# undef TclAppendExportList
|
||||
# undef TclExport
|
||||
# undef TclImport
|
||||
# undef TclForgetImport
|
||||
# undef TclGetCurrentNamespace_
|
||||
# undef TclGetGlobalNamespace_
|
||||
# undef TclFindNamespace
|
||||
# undef TclFindCommand
|
||||
# undef TclGetCommandFromObj
|
||||
# undef TclGetCommandFullName
|
||||
# undef TclCopyChannelOld
|
||||
# undef TclSockMinimumBuffersOld
|
||||
#endif
|
||||
|
||||
#endif /* _TCLINTDECLS */
|
||||
|
||||
+49
-98
@@ -71,14 +71,10 @@ EXTERN TclFile TclpOpenFile(const char *fname, int mode);
|
||||
EXTERN int TclUnixWaitForFile(int fd, int mask, int timeout);
|
||||
/* 9 */
|
||||
EXTERN TclFile TclpCreateTempFile(const char *contents);
|
||||
/* 10 */
|
||||
EXTERN Tcl_DirEntry * TclpReaddir(DIR *dir);
|
||||
/* 11 */
|
||||
EXTERN struct tm * TclpLocaltime_unix(const time_t *clock);
|
||||
/* 12 */
|
||||
EXTERN struct tm * TclpGmtime_unix(const time_t *clock);
|
||||
/* 13 */
|
||||
EXTERN char * TclpInetNtoa(struct in_addr addr);
|
||||
/* Slot 10 is reserved */
|
||||
/* Slot 11 is reserved */
|
||||
/* Slot 12 is reserved */
|
||||
/* Slot 13 is reserved */
|
||||
/* 14 */
|
||||
EXTERN int TclUnixCopyFile(const char *src, const char *dst,
|
||||
const Tcl_StatBuf *statBufPtr,
|
||||
@@ -107,29 +103,20 @@ EXTERN int TclUnixOpenTemporaryFile(Tcl_Obj *dirObj,
|
||||
#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */
|
||||
/* 0 */
|
||||
EXTERN void TclWinConvertError(DWORD errCode);
|
||||
/* 1 */
|
||||
EXTERN void TclWinConvertWSAError(DWORD errCode);
|
||||
/* 2 */
|
||||
EXTERN struct servent * TclWinGetServByName(const char *nm,
|
||||
const char *proto);
|
||||
/* 3 */
|
||||
EXTERN int TclWinGetSockOpt(SOCKET s, int level, int optname,
|
||||
char *optval, int *optlen);
|
||||
/* Slot 1 is reserved */
|
||||
/* Slot 2 is reserved */
|
||||
/* Slot 3 is reserved */
|
||||
/* 4 */
|
||||
EXTERN HINSTANCE TclWinGetTclInstance(void);
|
||||
/* 5 */
|
||||
EXTERN int TclUnixWaitForFile(int fd, int mask, int timeout);
|
||||
/* 6 */
|
||||
EXTERN unsigned short TclWinNToHS(unsigned short ns);
|
||||
/* 7 */
|
||||
EXTERN int TclWinSetSockOpt(SOCKET s, int level, int optname,
|
||||
const char *optval, int optlen);
|
||||
/* Slot 6 is reserved */
|
||||
/* Slot 7 is reserved */
|
||||
/* 8 */
|
||||
EXTERN int TclpGetPid(Tcl_Pid pid);
|
||||
/* 9 */
|
||||
EXTERN int TclWinGetPlatformId(void);
|
||||
/* 10 */
|
||||
EXTERN Tcl_DirEntry * TclpReaddir(DIR *dir);
|
||||
/* Slot 10 is reserved */
|
||||
/* 11 */
|
||||
EXTERN void TclGetAndDetachPids(Tcl_Interp *interp,
|
||||
Tcl_Channel chan);
|
||||
@@ -158,16 +145,14 @@ EXTERN TclFile TclpMakeFile(Tcl_Channel channel, int direction);
|
||||
EXTERN TclFile TclpOpenFile(const char *fname, int mode);
|
||||
/* 20 */
|
||||
EXTERN void TclWinAddProcess(HANDLE hProcess, DWORD id);
|
||||
/* 21 */
|
||||
EXTERN char * TclpInetNtoa(struct in_addr addr);
|
||||
/* Slot 21 is reserved */
|
||||
/* 22 */
|
||||
EXTERN TclFile TclpCreateTempFile(const char *contents);
|
||||
/* Slot 23 is reserved */
|
||||
/* 24 */
|
||||
EXTERN char * TclWinNoBackslash(char *path);
|
||||
/* Slot 25 is reserved */
|
||||
/* 26 */
|
||||
EXTERN void TclWinSetInterfaces(int wide);
|
||||
/* Slot 26 is reserved */
|
||||
/* 27 */
|
||||
EXTERN void TclWinFlushDirtyChannels(void);
|
||||
/* 28 */
|
||||
@@ -205,14 +190,10 @@ EXTERN TclFile TclpOpenFile(const char *fname, int mode);
|
||||
EXTERN int TclUnixWaitForFile(int fd, int mask, int timeout);
|
||||
/* 9 */
|
||||
EXTERN TclFile TclpCreateTempFile(const char *contents);
|
||||
/* 10 */
|
||||
EXTERN Tcl_DirEntry * TclpReaddir(DIR *dir);
|
||||
/* 11 */
|
||||
EXTERN struct tm * TclpLocaltime_unix(const time_t *clock);
|
||||
/* 12 */
|
||||
EXTERN struct tm * TclpGmtime_unix(const time_t *clock);
|
||||
/* 13 */
|
||||
EXTERN char * TclpInetNtoa(struct in_addr addr);
|
||||
/* Slot 10 is reserved */
|
||||
/* Slot 11 is reserved */
|
||||
/* Slot 12 is reserved */
|
||||
/* Slot 13 is reserved */
|
||||
/* 14 */
|
||||
EXTERN int TclUnixCopyFile(const char *src, const char *dst,
|
||||
const Tcl_StatBuf *statBufPtr,
|
||||
@@ -269,10 +250,10 @@ typedef struct TclIntPlatStubs {
|
||||
TclFile (*tclpOpenFile) (const char *fname, int mode); /* 7 */
|
||||
int (*tclUnixWaitForFile) (int fd, int mask, int timeout); /* 8 */
|
||||
TclFile (*tclpCreateTempFile) (const char *contents); /* 9 */
|
||||
Tcl_DirEntry * (*tclpReaddir) (DIR *dir); /* 10 */
|
||||
struct tm * (*tclpLocaltime_unix) (const time_t *clock); /* 11 */
|
||||
struct tm * (*tclpGmtime_unix) (const time_t *clock); /* 12 */
|
||||
char * (*tclpInetNtoa) (struct in_addr addr); /* 13 */
|
||||
void (*reserved10)(void);
|
||||
void (*reserved11)(void);
|
||||
void (*reserved12)(void);
|
||||
void (*reserved13)(void);
|
||||
int (*tclUnixCopyFile) (const char *src, const char *dst, const Tcl_StatBuf *statBufPtr, int dontCopyAtts); /* 14 */
|
||||
void (*reserved15)(void);
|
||||
void (*reserved16)(void);
|
||||
@@ -293,16 +274,16 @@ typedef struct TclIntPlatStubs {
|
||||
#endif /* UNIX */
|
||||
#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */
|
||||
void (*tclWinConvertError) (DWORD errCode); /* 0 */
|
||||
void (*tclWinConvertWSAError) (DWORD errCode); /* 1 */
|
||||
struct servent * (*tclWinGetServByName) (const char *nm, const char *proto); /* 2 */
|
||||
int (*tclWinGetSockOpt) (SOCKET s, int level, int optname, char *optval, int *optlen); /* 3 */
|
||||
void (*reserved1)(void);
|
||||
void (*reserved2)(void);
|
||||
void (*reserved3)(void);
|
||||
HINSTANCE (*tclWinGetTclInstance) (void); /* 4 */
|
||||
int (*tclUnixWaitForFile) (int fd, int mask, int timeout); /* 5 */
|
||||
unsigned short (*tclWinNToHS) (unsigned short ns); /* 6 */
|
||||
int (*tclWinSetSockOpt) (SOCKET s, int level, int optname, const char *optval, int optlen); /* 7 */
|
||||
void (*reserved6)(void);
|
||||
void (*reserved7)(void);
|
||||
int (*tclpGetPid) (Tcl_Pid pid); /* 8 */
|
||||
int (*tclWinGetPlatformId) (void); /* 9 */
|
||||
Tcl_DirEntry * (*tclpReaddir) (DIR *dir); /* 10 */
|
||||
void (*reserved10)(void);
|
||||
void (*tclGetAndDetachPids) (Tcl_Interp *interp, Tcl_Channel chan); /* 11 */
|
||||
int (*tclpCloseFile) (TclFile file); /* 12 */
|
||||
Tcl_Channel (*tclpCreateCommandChannel) (TclFile readFile, TclFile writeFile, TclFile errorFile, int numPids, Tcl_Pid *pidPtr); /* 13 */
|
||||
@@ -313,12 +294,12 @@ typedef struct TclIntPlatStubs {
|
||||
TclFile (*tclpMakeFile) (Tcl_Channel channel, int direction); /* 18 */
|
||||
TclFile (*tclpOpenFile) (const char *fname, int mode); /* 19 */
|
||||
void (*tclWinAddProcess) (HANDLE hProcess, DWORD id); /* 20 */
|
||||
char * (*tclpInetNtoa) (struct in_addr addr); /* 21 */
|
||||
void (*reserved21)(void);
|
||||
TclFile (*tclpCreateTempFile) (const char *contents); /* 22 */
|
||||
void (*reserved23)(void);
|
||||
char * (*tclWinNoBackslash) (char *path); /* 24 */
|
||||
void (*reserved25)(void);
|
||||
void (*tclWinSetInterfaces) (int wide); /* 26 */
|
||||
void (*reserved26)(void);
|
||||
void (*tclWinFlushDirtyChannels) (void); /* 27 */
|
||||
void (*tclWinResetInterfaces) (void); /* 28 */
|
||||
int (*tclWinCPUID) (int index, int *regs); /* 29 */
|
||||
@@ -335,10 +316,10 @@ typedef struct TclIntPlatStubs {
|
||||
TclFile (*tclpOpenFile) (const char *fname, int mode); /* 7 */
|
||||
int (*tclUnixWaitForFile) (int fd, int mask, int timeout); /* 8 */
|
||||
TclFile (*tclpCreateTempFile) (const char *contents); /* 9 */
|
||||
Tcl_DirEntry * (*tclpReaddir) (DIR *dir); /* 10 */
|
||||
struct tm * (*tclpLocaltime_unix) (const time_t *clock); /* 11 */
|
||||
struct tm * (*tclpGmtime_unix) (const time_t *clock); /* 12 */
|
||||
char * (*tclpInetNtoa) (struct in_addr addr); /* 13 */
|
||||
void (*reserved10)(void);
|
||||
void (*reserved11)(void);
|
||||
void (*reserved12)(void);
|
||||
void (*reserved13)(void);
|
||||
int (*tclUnixCopyFile) (const char *src, const char *dst, const Tcl_StatBuf *statBufPtr, int dontCopyAtts); /* 14 */
|
||||
int (*tclMacOSXGetFileAttribute) (Tcl_Interp *interp, int objIndex, Tcl_Obj *fileName, Tcl_Obj **attributePtrPtr); /* 15 */
|
||||
int (*tclMacOSXSetFileAttribute) (Tcl_Interp *interp, int objIndex, Tcl_Obj *fileName, Tcl_Obj *attributePtr); /* 16 */
|
||||
@@ -391,14 +372,10 @@ extern const TclIntPlatStubs *tclIntPlatStubsPtr;
|
||||
(tclIntPlatStubsPtr->tclUnixWaitForFile) /* 8 */
|
||||
#define TclpCreateTempFile \
|
||||
(tclIntPlatStubsPtr->tclpCreateTempFile) /* 9 */
|
||||
#define TclpReaddir \
|
||||
(tclIntPlatStubsPtr->tclpReaddir) /* 10 */
|
||||
#define TclpLocaltime_unix \
|
||||
(tclIntPlatStubsPtr->tclpLocaltime_unix) /* 11 */
|
||||
#define TclpGmtime_unix \
|
||||
(tclIntPlatStubsPtr->tclpGmtime_unix) /* 12 */
|
||||
#define TclpInetNtoa \
|
||||
(tclIntPlatStubsPtr->tclpInetNtoa) /* 13 */
|
||||
/* Slot 10 is reserved */
|
||||
/* Slot 11 is reserved */
|
||||
/* Slot 12 is reserved */
|
||||
/* Slot 13 is reserved */
|
||||
#define TclUnixCopyFile \
|
||||
(tclIntPlatStubsPtr->tclUnixCopyFile) /* 14 */
|
||||
/* Slot 15 is reserved */
|
||||
@@ -423,26 +400,20 @@ extern const TclIntPlatStubs *tclIntPlatStubsPtr;
|
||||
#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */
|
||||
#define TclWinConvertError \
|
||||
(tclIntPlatStubsPtr->tclWinConvertError) /* 0 */
|
||||
#define TclWinConvertWSAError \
|
||||
(tclIntPlatStubsPtr->tclWinConvertWSAError) /* 1 */
|
||||
#define TclWinGetServByName \
|
||||
(tclIntPlatStubsPtr->tclWinGetServByName) /* 2 */
|
||||
#define TclWinGetSockOpt \
|
||||
(tclIntPlatStubsPtr->tclWinGetSockOpt) /* 3 */
|
||||
/* Slot 1 is reserved */
|
||||
/* Slot 2 is reserved */
|
||||
/* Slot 3 is reserved */
|
||||
#define TclWinGetTclInstance \
|
||||
(tclIntPlatStubsPtr->tclWinGetTclInstance) /* 4 */
|
||||
#define TclUnixWaitForFile \
|
||||
(tclIntPlatStubsPtr->tclUnixWaitForFile) /* 5 */
|
||||
#define TclWinNToHS \
|
||||
(tclIntPlatStubsPtr->tclWinNToHS) /* 6 */
|
||||
#define TclWinSetSockOpt \
|
||||
(tclIntPlatStubsPtr->tclWinSetSockOpt) /* 7 */
|
||||
/* Slot 6 is reserved */
|
||||
/* Slot 7 is reserved */
|
||||
#define TclpGetPid \
|
||||
(tclIntPlatStubsPtr->tclpGetPid) /* 8 */
|
||||
#define TclWinGetPlatformId \
|
||||
(tclIntPlatStubsPtr->tclWinGetPlatformId) /* 9 */
|
||||
#define TclpReaddir \
|
||||
(tclIntPlatStubsPtr->tclpReaddir) /* 10 */
|
||||
/* Slot 10 is reserved */
|
||||
#define TclGetAndDetachPids \
|
||||
(tclIntPlatStubsPtr->tclGetAndDetachPids) /* 11 */
|
||||
#define TclpCloseFile \
|
||||
@@ -463,16 +434,14 @@ extern const TclIntPlatStubs *tclIntPlatStubsPtr;
|
||||
(tclIntPlatStubsPtr->tclpOpenFile) /* 19 */
|
||||
#define TclWinAddProcess \
|
||||
(tclIntPlatStubsPtr->tclWinAddProcess) /* 20 */
|
||||
#define TclpInetNtoa \
|
||||
(tclIntPlatStubsPtr->tclpInetNtoa) /* 21 */
|
||||
/* Slot 21 is reserved */
|
||||
#define TclpCreateTempFile \
|
||||
(tclIntPlatStubsPtr->tclpCreateTempFile) /* 22 */
|
||||
/* Slot 23 is reserved */
|
||||
#define TclWinNoBackslash \
|
||||
(tclIntPlatStubsPtr->tclWinNoBackslash) /* 24 */
|
||||
/* Slot 25 is reserved */
|
||||
#define TclWinSetInterfaces \
|
||||
(tclIntPlatStubsPtr->tclWinSetInterfaces) /* 26 */
|
||||
/* Slot 26 is reserved */
|
||||
#define TclWinFlushDirtyChannels \
|
||||
(tclIntPlatStubsPtr->tclWinFlushDirtyChannels) /* 27 */
|
||||
#define TclWinResetInterfaces \
|
||||
@@ -502,14 +471,10 @@ extern const TclIntPlatStubs *tclIntPlatStubsPtr;
|
||||
(tclIntPlatStubsPtr->tclUnixWaitForFile) /* 8 */
|
||||
#define TclpCreateTempFile \
|
||||
(tclIntPlatStubsPtr->tclpCreateTempFile) /* 9 */
|
||||
#define TclpReaddir \
|
||||
(tclIntPlatStubsPtr->tclpReaddir) /* 10 */
|
||||
#define TclpLocaltime_unix \
|
||||
(tclIntPlatStubsPtr->tclpLocaltime_unix) /* 11 */
|
||||
#define TclpGmtime_unix \
|
||||
(tclIntPlatStubsPtr->tclpGmtime_unix) /* 12 */
|
||||
#define TclpInetNtoa \
|
||||
(tclIntPlatStubsPtr->tclpInetNtoa) /* 13 */
|
||||
/* Slot 10 is reserved */
|
||||
/* Slot 11 is reserved */
|
||||
/* Slot 12 is reserved */
|
||||
/* Slot 13 is reserved */
|
||||
#define TclUnixCopyFile \
|
||||
(tclIntPlatStubsPtr->tclUnixCopyFile) /* 14 */
|
||||
#define TclMacOSXGetFileAttribute \
|
||||
@@ -543,23 +508,9 @@ extern const TclIntPlatStubs *tclIntPlatStubsPtr;
|
||||
|
||||
#undef TCL_STORAGE_CLASS
|
||||
#define TCL_STORAGE_CLASS DLLIMPORT
|
||||
#undef TclpLocaltime_unix
|
||||
#undef TclpGmtime_unix
|
||||
#undef TclWinConvertWSAError
|
||||
#define TclWinConvertWSAError TclWinConvertError
|
||||
#undef TclpInetNtoa
|
||||
#define TclpInetNtoa inet_ntoa
|
||||
|
||||
#if defined(_WIN32)
|
||||
# undef TclWinNToHS
|
||||
# undef TclWinGetServByName
|
||||
# undef TclWinGetSockOpt
|
||||
# undef TclWinSetSockOpt
|
||||
# define TclWinNToHS ntohs
|
||||
# define TclWinGetServByName getservbyname
|
||||
# define TclWinGetSockOpt getsockopt
|
||||
# define TclWinSetSockOpt setsockopt
|
||||
#else
|
||||
#if !defined(_WIN32)
|
||||
# undef TclpGetPid
|
||||
# define TclpGetPid(pid) ((unsigned long) (pid))
|
||||
#endif
|
||||
|
||||
+275
-294
@@ -55,20 +55,22 @@ const Tcl_ObjType tclListType = {
|
||||
*
|
||||
* NewListIntRep --
|
||||
*
|
||||
* Creates a list internal rep with space for objc elements. objc
|
||||
* must be > 0. If objv!=NULL, initializes with the first objc values
|
||||
* in that array. If objv==NULL, initalize list internal rep to have
|
||||
* 0 elements, with space to add objc more. Flag value "p" indicates
|
||||
* Creates a 'List' structure with space for 'objc' elements. 'objc' must
|
||||
* be > 0. If 'objv' is not NULL, The list is initialized with first
|
||||
* 'objc' values in that array. Otherwise the list is initialized to have
|
||||
* 0 elements, with space to add 'objc' more. Flag value 'p' indicates
|
||||
* how to behave on failure.
|
||||
*
|
||||
* Results:
|
||||
* A new List struct with refCount 0 is returned. If some failure
|
||||
* prevents this then if p=0, NULL is returned and otherwise the
|
||||
* routine panics.
|
||||
* Value
|
||||
*
|
||||
* Side effects:
|
||||
* The ref counts of the elements in objv are incremented since the
|
||||
* resulting list now refers to them.
|
||||
* A new 'List' structure with refCount 0. If some failure
|
||||
* prevents this NULL is returned if 'p' is 0 , and 'Tcl_Panic'
|
||||
* is called if it is not.
|
||||
*
|
||||
* Effect
|
||||
*
|
||||
* The refCount of each value in 'objv' is incremented as it is added
|
||||
* to the list.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -132,21 +134,9 @@ NewListIntRep(
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* AttemptNewList --
|
||||
* AttemptNewList --
|
||||
*
|
||||
* Creates a list internal rep with space for objc elements. objc
|
||||
* must be > 0. If objv!=NULL, initializes with the first objc values
|
||||
* in that array. If objv==NULL, initalize list internal rep to have
|
||||
* 0 elements, with space to add objc more.
|
||||
*
|
||||
* Results:
|
||||
* A new List struct with refCount 0 is returned. If some failure
|
||||
* prevents this then NULL is returned, and an error message is left
|
||||
* in the interp result, unless interp is NULL.
|
||||
*
|
||||
* Side effects:
|
||||
* The ref counts of the elements in objv are incremented since the
|
||||
* resulting list now refers to them.
|
||||
* Like NewListIntRep, but additionally sets an error message on failure.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -179,23 +169,20 @@ AttemptNewList(
|
||||
*
|
||||
* Tcl_NewListObj --
|
||||
*
|
||||
* This function is normally called when not debugging: i.e., when
|
||||
* TCL_MEM_DEBUG is not defined. It creates a new list object from an
|
||||
* (objc,objv) array: that is, each of the objc elements of the array
|
||||
* referenced by objv is inserted as an element into a new Tcl object.
|
||||
* Creates a new list object and adds values to it. When TCL_MEM_DEBUG is
|
||||
* defined, 'Tcl_DbNewListObj' is called instead.
|
||||
*
|
||||
* When TCL_MEM_DEBUG is defined, this function just returns the result
|
||||
* of calling the debugging version Tcl_DbNewListObj.
|
||||
* Value
|
||||
*
|
||||
* Results:
|
||||
* A new list object is returned that is initialized from the object
|
||||
* pointers in objv. If objc is less than or equal to zero, an empty
|
||||
* object is returned. The new object's string representation is left
|
||||
* NULL. The resulting new list object has ref count 0.
|
||||
* A new list 'Tcl_Obj' to which is appended values from 'objv', or if
|
||||
* 'objc' is less than or equal to zero, a list 'Tcl_Obj' having no
|
||||
* elements. The string representation of the new 'Tcl_Obj' is set to
|
||||
* NULL. The refCount of the list is 0.
|
||||
*
|
||||
* Side effects:
|
||||
* The ref counts of the elements in objv are incremented since the
|
||||
* resulting list now refers to them.
|
||||
* Effect
|
||||
*
|
||||
* The refCount of each elements in 'objv' is incremented as it is added
|
||||
* to the list.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -246,28 +233,14 @@ Tcl_NewListObj(
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tcl_DbNewListObj --
|
||||
* Tcl_DbNewListObj --
|
||||
*
|
||||
* This function is normally called when debugging: i.e., when
|
||||
* TCL_MEM_DEBUG is defined. It creates new list objects. It is the same
|
||||
* as the Tcl_NewListObj function above except that it calls
|
||||
* Tcl_DbCkalloc directly with the file name and line number from its
|
||||
* caller. This simplifies debugging since then the [memory active]
|
||||
* command will report the correct file name and line number when
|
||||
* reporting objects that haven't been freed.
|
||||
* Like 'Tcl_NewListObj', but it calls Tcl_DbCkalloc directly with the
|
||||
* file name and line number from its caller. This simplifies debugging
|
||||
* since the [memory active] command will report the correct file
|
||||
* name and line number when reporting objects that haven't been freed.
|
||||
*
|
||||
* When TCL_MEM_DEBUG is not defined, this function just returns the
|
||||
* result of calling Tcl_NewListObj.
|
||||
*
|
||||
* Results:
|
||||
* A new list object is returned that is initialized from the object
|
||||
* pointers in objv. If objc is less than or equal to zero, an empty
|
||||
* object is returned. The new object's string representation is left
|
||||
* NULL. The new list object has ref count 0.
|
||||
*
|
||||
* Side effects:
|
||||
* The ref counts of the elements in objv are incremented since the
|
||||
* resulting list now refers to them.
|
||||
* When TCL_MEM_DEBUG is not defined, 'Tcl_NewListObj' is called instead.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -328,19 +301,8 @@ Tcl_DbNewListObj(
|
||||
*
|
||||
* Tcl_SetListObj --
|
||||
*
|
||||
* Modify an object to be a list containing each of the objc elements of
|
||||
* the object array referenced by objv.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* The object is made a list object and is initialized from the object
|
||||
* pointers in objv. If objc is less than or equal to zero, an empty
|
||||
* object is returned. The new object's string representation is left
|
||||
* NULL. The ref counts of the elements in objv are incremented since the
|
||||
* list now refers to them. The object's old string and internal
|
||||
* representations are freed and its type is set NULL.
|
||||
* Like 'Tcl_NewListObj', but operates on an existing 'Tcl_Obj'instead of
|
||||
* creating a new one.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -384,18 +346,20 @@ Tcl_SetListObj(
|
||||
*
|
||||
* TclListObjCopy --
|
||||
*
|
||||
* Makes a "pure list" copy of a list value. This provides for the C
|
||||
* level a counterpart of the [lrange $list 0 end] command, while using
|
||||
* internals details to be as efficient as possible.
|
||||
* Creates a new 'Tcl_Obj' which is a pure copy of a list value. This
|
||||
* provides for the C level a counterpart of the [lrange $list 0 end]
|
||||
* command, while using internals details to be as efficient as possible.
|
||||
*
|
||||
* Results:
|
||||
* Normally returns a pointer to a new Tcl_Obj, that contains the same
|
||||
* list value as *listPtr does. The returned Tcl_Obj has a refCount of
|
||||
* zero. If *listPtr does not hold a list, NULL is returned, and if
|
||||
* interp is non-NULL, an error message is recorded there.
|
||||
* Value
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
* The address of the new 'Tcl_Obj' which shares its internal
|
||||
* representation with 'listPtr', and whose refCount is 0. If 'listPtr'
|
||||
* is not actually a list, the value is NULL, and an error message is left
|
||||
* in 'interp' if it is not NULL.
|
||||
*
|
||||
* Effect
|
||||
*
|
||||
* 'listPtr' is converted to a list if it isn't one already.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -425,27 +389,30 @@ TclListObjCopy(
|
||||
*
|
||||
* Tcl_ListObjGetElements --
|
||||
*
|
||||
* This function returns an (objc,objv) array of the elements in a list
|
||||
* object.
|
||||
* Retreive the elements in a list 'Tcl_Obj'.
|
||||
*
|
||||
* Results:
|
||||
* The return value is normally TCL_OK; in this case *objcPtr is set to
|
||||
* the count of list elements and *objvPtr is set to a pointer to an
|
||||
* array of (*objcPtr) pointers to each list element. If listPtr does not
|
||||
* refer to a list object and the object can not be converted to one,
|
||||
* TCL_ERROR is returned and an error message will be left in the
|
||||
* interpreter's result if interp is not NULL.
|
||||
* Value
|
||||
*
|
||||
* The objects referenced by the returned array should be treated as
|
||||
* readonly and their ref counts are _not_ incremented; the caller must
|
||||
* do that if it holds on to a reference. Furthermore, the pointer and
|
||||
* length returned by this function may change as soon as any function is
|
||||
* called on the list object; be careful about retaining the pointer in a
|
||||
* local data structure.
|
||||
* TCL_OK
|
||||
*
|
||||
* Side effects:
|
||||
* The possible conversion of the object referenced by listPtr
|
||||
* to a list object.
|
||||
* A count of list elements is stored, 'objcPtr', And a pointer to the
|
||||
* array of elements in the list is stored in 'objvPtr'.
|
||||
*
|
||||
* The elements accessible via 'objvPtr' should be treated as readonly
|
||||
* and the refCount for each object is _not_ incremented; the caller
|
||||
* must do that if it holds on to a reference. Furthermore, the
|
||||
* pointer and length returned by this function may change as soon as
|
||||
* any function is called on the list object. Be careful about
|
||||
* retaining the pointer in a local data structure.
|
||||
*
|
||||
* TCL_ERROR
|
||||
*
|
||||
* 'listPtr' is not a valid list. An error message is left in the
|
||||
* interpreter's result if 'interp' is not NULL.
|
||||
*
|
||||
* Effect
|
||||
*
|
||||
* 'listPtr' is converted to a list object if it isn't one already.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -486,20 +453,27 @@ Tcl_ListObjGetElements(
|
||||
*
|
||||
* Tcl_ListObjAppendList --
|
||||
*
|
||||
* This function appends the elements in the list value referenced by
|
||||
* elemListPtr to the list value referenced by listPtr.
|
||||
* Appends the elements of elemListPtr to those of listPtr.
|
||||
*
|
||||
* Results:
|
||||
* The return value is normally TCL_OK. If listPtr or elemListPtr do not
|
||||
* refer to list values, TCL_ERROR is returned and an error message is
|
||||
* left in the interpreter's result if interp is not NULL.
|
||||
* Value
|
||||
*
|
||||
* Side effects:
|
||||
* The reference counts of the elements in elemListPtr are incremented
|
||||
* since the list now refers to them. listPtr and elemListPtr are
|
||||
* converted, if necessary, to list objects. Also, appending the new
|
||||
* elements may cause listObj's array of element pointers to grow.
|
||||
* listPtr's old string representation, if any, is invalidated.
|
||||
* TCL_OK
|
||||
*
|
||||
* Success.
|
||||
*
|
||||
* TCL_ERROR
|
||||
*
|
||||
* 'listPtr' or 'elemListPtr' are not valid lists. An error
|
||||
* message is left in the interpreter's result if 'interp' is not NULL.
|
||||
*
|
||||
* Effect
|
||||
*
|
||||
* The reference count of each element of 'elemListPtr' as it is added to
|
||||
* 'listPtr'. 'listPtr' and 'elemListPtr' are converted to 'tclListType'
|
||||
* if they are not already. Appending the new elements may cause the
|
||||
* array of element pointers in 'listObj' to grow. If any objects are
|
||||
* appended to 'listPtr'. Any preexisting string representation of
|
||||
* 'listPtr' is invalidated.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -538,24 +512,27 @@ Tcl_ListObjAppendList(
|
||||
*
|
||||
* Tcl_ListObjAppendElement --
|
||||
*
|
||||
* This function is a special purpose version of Tcl_ListObjAppendList:
|
||||
* it appends a single object referenced by objPtr to the list object
|
||||
* referenced by listPtr. If listPtr is not already a list object, an
|
||||
* attempt will be made to convert it to one.
|
||||
* Like 'Tcl_ListObjAppendList', but Appends a single value to a list.
|
||||
*
|
||||
* Results:
|
||||
* The return value is normally TCL_OK; in this case objPtr is added to
|
||||
* the end of listPtr's list. If listPtr does not refer to a list object
|
||||
* and the object can not be converted to one, TCL_ERROR is returned and
|
||||
* an error message will be left in the interpreter's result if interp is
|
||||
* not NULL.
|
||||
* Value
|
||||
*
|
||||
* Side effects:
|
||||
* The ref count of objPtr is incremented since the list now refers to
|
||||
* it. listPtr will be converted, if necessary, to a list object. Also,
|
||||
* appending the new element may cause listObj's array of element
|
||||
* pointers to grow. listPtr's old string representation, if any, is
|
||||
* invalidated.
|
||||
* TCL_OK
|
||||
*
|
||||
* 'objPtr' is appended to the elements of 'listPtr'.
|
||||
*
|
||||
* TCL_ERROR
|
||||
*
|
||||
* listPtr does not refer to a list object and the object can not be
|
||||
* converted to one. An error message will be left in the
|
||||
* interpreter's result if interp is not NULL.
|
||||
*
|
||||
* Effect
|
||||
*
|
||||
* If 'listPtr' is not already of type 'tclListType', it is converted.
|
||||
* The 'refCount' of 'objPtr' is incremented as it is added to 'listPtr'.
|
||||
* Appending the new element may cause the the array of element pointers
|
||||
* in 'listObj' to grow. Any preexisting string representation of
|
||||
* 'listPtr' is invalidated.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -706,23 +683,27 @@ Tcl_ListObjAppendElement(
|
||||
*
|
||||
* Tcl_ListObjIndex --
|
||||
*
|
||||
* This function returns a pointer to the index'th object from the list
|
||||
* referenced by listPtr. The first element has index 0. If index is
|
||||
* negative or greater than or equal to the number of elements in the
|
||||
* list, a NULL is returned. If listPtr is not a list object, an attempt
|
||||
* will be made to convert it to a list.
|
||||
* Retrieve a pointer to the element of 'listPtr' at 'index'. The index
|
||||
* of the first element is 0.
|
||||
*
|
||||
* Results:
|
||||
* The return value is normally TCL_OK; in this case objPtrPtr is set to
|
||||
* the Tcl_Obj pointer for the index'th list element or NULL if index is
|
||||
* out of range. This object should be treated as readonly and its ref
|
||||
* count is _not_ incremented; the caller must do that if it holds on to
|
||||
* the reference. If listPtr does not refer to a list and can't be
|
||||
* converted to one, TCL_ERROR is returned and an error message is left
|
||||
* in the interpreter's result if interp is not NULL.
|
||||
* Value
|
||||
*
|
||||
* Side effects:
|
||||
* listPtr will be converted, if necessary, to a list object.
|
||||
* TCL_OK
|
||||
*
|
||||
* A pointer to the element at 'index' is stored in 'objPtrPtr'. If
|
||||
* 'index' is out of range, NULL is stored in 'objPtrPtr'. This
|
||||
* object should be treated as readonly and its 'refCount' is _not_
|
||||
* incremented. The caller must do that if it holds on to the
|
||||
* reference.
|
||||
*
|
||||
* TCL_ERROR
|
||||
*
|
||||
* 'listPtr' is not a valid list. An an error message is left in the
|
||||
* interpreter's result if 'interp' is not NULL.
|
||||
*
|
||||
* Effect
|
||||
*
|
||||
* If 'listPtr' is not already of type 'tclListType', it is converted.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -764,19 +745,20 @@ Tcl_ListObjIndex(
|
||||
*
|
||||
* Tcl_ListObjLength --
|
||||
*
|
||||
* This function returns the number of elements in a list object. If the
|
||||
* object is not already a list object, an attempt will be made to
|
||||
* convert it to one.
|
||||
* Retrieve the number of elements in a list.
|
||||
*
|
||||
* Results:
|
||||
* The return value is normally TCL_OK; in this case *intPtr will be set
|
||||
* to the integer count of list elements. If listPtr does not refer to a
|
||||
* list object and the object can not be converted to one, TCL_ERROR is
|
||||
* returned and an error message will be left in the interpreter's result
|
||||
* if interp is not NULL.
|
||||
* Value
|
||||
*
|
||||
* Side effects:
|
||||
* The possible conversion of the argument object to a list object.
|
||||
* TCL_OK
|
||||
*
|
||||
* A count of list elements is stored at the address provided by
|
||||
* 'intPtr'. If 'listPtr' is not already of type 'tclListPtr', it is
|
||||
* converted.
|
||||
*
|
||||
* TCL_ERROR
|
||||
*
|
||||
* 'listPtr' is not a valid list. An error message will be left in
|
||||
* the interpreter's result if 'interp' is not NULL.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -812,35 +794,36 @@ Tcl_ListObjLength(
|
||||
*
|
||||
* Tcl_ListObjReplace --
|
||||
*
|
||||
* This function replaces zero or more elements of the list referenced by
|
||||
* listPtr with the objects from an (objc,objv) array. The objc elements
|
||||
* of the array referenced by objv replace the count elements in listPtr
|
||||
* starting at first.
|
||||
* Replace values in a list.
|
||||
*
|
||||
* If the argument first is zero or negative, it refers to the first
|
||||
* element. If first is greater than or equal to the number of elements
|
||||
* in the list, then no elements are deleted; the new elements are
|
||||
* appended to the list. Count gives the number of elements to replace.
|
||||
* If count is zero or negative then no elements are deleted; the new
|
||||
* elements are simply inserted before first.
|
||||
* If 'first' is zero or negative, it refers to the first element. If
|
||||
* 'first' outside the range of elements in the list, no elements are
|
||||
* deleted.
|
||||
*
|
||||
* The argument objv refers to an array of objc pointers to the new
|
||||
* elements to be added to listPtr in place of those that were deleted.
|
||||
* If objv is NULL, no new elements are added. If listPtr is not a list
|
||||
* object, an attempt will be made to convert it to one.
|
||||
* If 'count' is zero or negative no elements are deleted, and any new
|
||||
* elements are inserted at the beginning of the list.
|
||||
*
|
||||
* Results:
|
||||
* The return value is normally TCL_OK. If listPtr does not refer to a
|
||||
* list object and can not be converted to one, TCL_ERROR is returned and
|
||||
* an error message will be left in the interpreter's result if interp is
|
||||
* not NULL.
|
||||
* Value
|
||||
*
|
||||
* Side effects:
|
||||
* The ref counts of the objc elements in objv are incremented since the
|
||||
* resulting list now refers to them. Similarly, the ref counts for
|
||||
* replaced objects are decremented. listPtr is converted, if necessary,
|
||||
* to a list object. listPtr's old string representation, if any, is
|
||||
* freed.
|
||||
* TCL_OK
|
||||
*
|
||||
* The first 'objc' values of 'objv' replaced 'count' elements in 'listPtr'
|
||||
* starting at 'first'. If 'objc' 0, no new elements are added.
|
||||
*
|
||||
* TCL_ERROR
|
||||
*
|
||||
* 'listPtr' is not a valid list. An error message is left in the
|
||||
* interpreter's result if 'interp' is not NULL.
|
||||
*
|
||||
* Effect
|
||||
*
|
||||
* If 'listPtr' is not of type 'tclListType', it is converted if possible.
|
||||
*
|
||||
* The 'refCount' of each element appended to the list is incremented.
|
||||
* Similarly, the 'refCount' for each replaced element is decremented.
|
||||
*
|
||||
* If 'listPtr' is modified, any previous string representation is
|
||||
* invalidated.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1098,22 +1081,19 @@ Tcl_ListObjReplace(
|
||||
*
|
||||
* TclLindexList --
|
||||
*
|
||||
* This procedure handles the 'lindex' command when objc==3.
|
||||
* Implements the 'lindex' command when objc==3.
|
||||
*
|
||||
* Results:
|
||||
* Returns a pointer to the object extracted, or NULL if an error
|
||||
* occurred. The returned object already includes one reference count for
|
||||
* the pointer returned.
|
||||
* Implemented entirely as a wrapper around 'TclLindexFlat'. Reconfigures
|
||||
* the argument format into required form while taking care to manage
|
||||
* shimmering so as to tend to keep the most useful intreps
|
||||
* and/or avoid the most expensive conversions.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
* Value
|
||||
*
|
||||
* Notes:
|
||||
* This procedure is implemented entirely as a wrapper around
|
||||
* TclLindexFlat. All it does is reconfigure the argument format into the
|
||||
* form required by TclLindexFlat, while taking care to manage shimmering
|
||||
* in such a way that we tend to keep the most useful intreps and/or
|
||||
* avoid the most expensive conversions.
|
||||
* A pointer to the specified element, with its 'refCount' incremented, or
|
||||
* NULL if an error occurred.
|
||||
*
|
||||
* Notes
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1185,25 +1165,20 @@ TclLindexList(
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclLindexFlat --
|
||||
* TclLindexFlat --
|
||||
*
|
||||
* This procedure is the core of the 'lindex' command, with all index
|
||||
* arguments presented as a flat list.
|
||||
* The core of the 'lindex' command, with all index
|
||||
* arguments presented as a flat list.
|
||||
*
|
||||
* Results:
|
||||
* Returns a pointer to the object extracted, or NULL if an error
|
||||
* occurred. The returned object already includes one reference count for
|
||||
* the pointer returned.
|
||||
* Value
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
* A pointer to the object extracted, with its 'refCount' incremented, or
|
||||
* NULL if an error occurred. Thus, the calling code will usually do
|
||||
* something like:
|
||||
*
|
||||
* Tcl_SetObjResult(interp, result);
|
||||
* Tcl_DecrRefCount(result);
|
||||
*
|
||||
* Notes:
|
||||
* The reference count of the returned object includes one reference
|
||||
* corresponding to the pointer returned. Thus, the calling code will
|
||||
* usually do something like:
|
||||
* Tcl_SetObjResult(interp, result);
|
||||
* Tcl_DecrRefCount(result);
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1279,23 +1254,16 @@ TclLindexFlat(
|
||||
*
|
||||
* TclLsetList --
|
||||
*
|
||||
* Core of the 'lset' command when objc == 4. Objv[2] may be either a
|
||||
* The core of [lset] when objc == 4. Objv[2] may be either a
|
||||
* scalar index or a list of indices.
|
||||
*
|
||||
* Results:
|
||||
* Returns the new value of the list variable, or NULL if there was an
|
||||
* error. The returned object includes one reference count for the
|
||||
* pointer returned.
|
||||
* Implemented entirely as a wrapper around 'TclLindexFlat', as described
|
||||
* for 'TclLindexList'.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
* Value
|
||||
*
|
||||
* Notes:
|
||||
* This procedure is implemented entirely as a wrapper around
|
||||
* TclLsetFlat. All it does is reconfigure the argument format into the
|
||||
* form required by TclLsetFlat, while taking care to manage shimmering
|
||||
* in such a way that we tend to keep the most useful intreps and/or
|
||||
* avoid the most expensive conversions.
|
||||
* The new list, with the 'refCount' of 'valuPtr' incremented, or NULL if
|
||||
* there was an error.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1357,36 +1325,39 @@ TclLsetList(
|
||||
*
|
||||
* Core engine of the 'lset' command.
|
||||
*
|
||||
* Results:
|
||||
* Returns the new value of the list variable, or NULL if an error
|
||||
* occurred. The returned object includes one reference count for the
|
||||
* pointer returned.
|
||||
* Value
|
||||
*
|
||||
* Side effects:
|
||||
* On entry, the reference count of the variable value does not reflect
|
||||
* any references held on the stack. The first action of this function is
|
||||
* to determine whether the object is shared, and to duplicate it if it
|
||||
* is. The reference count of the duplicate is incremented. At this
|
||||
* point, the reference count will be 1 for either case, so that the
|
||||
* object will appear to be unshared.
|
||||
* The resulting list
|
||||
*
|
||||
* If an error occurs, and the object has been duplicated, the reference
|
||||
* count on the duplicate is decremented so that it is now 0: this
|
||||
* dismisses any memory that was allocated by this function.
|
||||
* The 'refCount' of 'valuePtr' is incremented. If 'listPtr' was not
|
||||
* duplicated, its 'refCount' is incremented. The reference count of
|
||||
* an unduplicated object is therefore 2 (one for the returned pointer
|
||||
* and one for the variable that holds it). The reference count of a
|
||||
* duplicate object is 1, reflecting that result is the only active
|
||||
* reference. The caller is expected to store the result in the
|
||||
* variable and decrement its reference count. (INST_STORE_* does
|
||||
* exactly this.)
|
||||
*
|
||||
* If no error occurs, the reference count of the original object is
|
||||
* incremented if the object has not been duplicated, and nothing is done
|
||||
* to a reference count of the duplicate. Now the reference count of an
|
||||
* unduplicated object is 2 (the returned pointer, plus the one stored in
|
||||
* the variable). The reference count of a duplicate object is 1,
|
||||
* reflecting that the returned pointer is the only active reference. The
|
||||
* caller is expected to store the returned value back in the variable
|
||||
* and decrement its reference count. (INST_STORE_* does exactly this.)
|
||||
* NULL
|
||||
*
|
||||
* Surgery is performed on the unshared list value to produce the result.
|
||||
* TclLsetFlat maintains a linked list of Tcl_Obj's whose string
|
||||
* An error occurred. If 'listPtr' was duplicated, the reference
|
||||
* count on the duplicate is decremented so that it is 0, causing any
|
||||
* memory allocated by this function to be freed.
|
||||
*
|
||||
*
|
||||
* Effect
|
||||
*
|
||||
* On entry, the reference count of 'listPtr' does not reflect any
|
||||
* references held on the stack. The first action of this function is to
|
||||
* determine whether 'listPtr' is shared and to create a duplicate
|
||||
* unshared copy if it is. The reference count of the duplicate is
|
||||
* incremented. At this point, the reference count is 1 in either case so
|
||||
* that the object is considered unshared.
|
||||
*
|
||||
* The unshared list is altered directly to produce the result.
|
||||
* 'TclLsetFlat' maintains a linked list of 'Tcl_Obj' values whose string
|
||||
* representations must be spoilt by threading via 'ptr2' of the
|
||||
* two-pointer internal representation. On entry to TclLsetFlat, the
|
||||
* two-pointer internal representation. On entry to 'TclLsetFlat', the
|
||||
* values of 'ptr2' are immaterial; on exit, the 'ptr2' field of any
|
||||
* Tcl_Obj that has been modified is set to NULL.
|
||||
*
|
||||
@@ -1601,26 +1572,38 @@ TclLsetFlat(
|
||||
*
|
||||
* TclListObjSetElement --
|
||||
*
|
||||
* Set a single element of a list to a specified value
|
||||
*
|
||||
* Results:
|
||||
* The return value is normally TCL_OK. If listPtr does not refer to a
|
||||
* list object and cannot be converted to one, TCL_ERROR is returned and
|
||||
* an error message will be left in the interpreter result if interp is
|
||||
* not NULL. Similarly, if index designates an element outside the range
|
||||
* [0..listLength-1], where listLength is the count of elements in the
|
||||
* list object designated by listPtr, TCL_ERROR is returned and an error
|
||||
* message is left in the interpreter result.
|
||||
*
|
||||
* Side effects:
|
||||
* Tcl_Panic if listPtr designates a shared object. Otherwise, attempts
|
||||
* to convert it to a list with a non-shared internal rep. Decrements the
|
||||
* ref count of the object at the specified index within the list,
|
||||
* replaces with the object designated by valuePtr, and increments the
|
||||
* ref count of the replacement object.
|
||||
* Set a single element of a list to a specified value.
|
||||
*
|
||||
* It is the caller's responsibility to invalidate the string
|
||||
* representation of the object.
|
||||
* representation of the 'listPtr'.
|
||||
*
|
||||
* Value
|
||||
*
|
||||
* TCL_OK
|
||||
*
|
||||
* Success.
|
||||
*
|
||||
* TCL_ERROR
|
||||
*
|
||||
* 'listPtr' does not refer to a list object and cannot be converted
|
||||
* to one. An error message will be left in the interpreter result if
|
||||
* interp is not NULL.
|
||||
*
|
||||
* TCL_ERROR
|
||||
*
|
||||
* An index designates an element outside the range [0..listLength-1],
|
||||
* where 'listLength' is the count of elements in the list object
|
||||
* designated by 'listPtr'. An error message is left in the
|
||||
* interpreter result.
|
||||
*
|
||||
* Effect
|
||||
*
|
||||
* If 'listPtr' designates a shared object, 'Tcl_Panic' is called. If
|
||||
* 'listPtr' is not already of type 'tclListType', it is converted and the
|
||||
* internal representation is unshared. The 'refCount' of the element at
|
||||
* 'index' is decremented and replaced in the list with the 'valuePtr',
|
||||
* whose 'refCount' in turn is incremented.
|
||||
*
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1738,16 +1721,14 @@ TclListObjSetElement(
|
||||
*
|
||||
* FreeListInternalRep --
|
||||
*
|
||||
* Deallocate the storage associated with a list object's internal
|
||||
* representation.
|
||||
* Deallocate the storage associated with the internal representation of a
|
||||
* a list object.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
* Effect
|
||||
*
|
||||
* Side effects:
|
||||
* Frees listPtr's List* internal representation and sets listPtr's
|
||||
* internalRep.twoPtrValue.ptr1 to NULL. Decrements the ref counts of all
|
||||
* element objects, which may free them.
|
||||
* The storage for the internal 'List' pointer of 'listPtr' is freed, the
|
||||
* 'internalRep.twoPtrValue.ptr1' of 'listPtr' is set to NULL, and the 'refCount'
|
||||
* of each element of the list is decremented.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1776,14 +1757,12 @@ FreeListInternalRep(
|
||||
*
|
||||
* DupListInternalRep --
|
||||
*
|
||||
* Initialize the internal representation of a list Tcl_Obj to share the
|
||||
* Initialize the internal representation of a list 'Tcl_Obj' to share the
|
||||
* internal representation of an existing list object.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
* Effect
|
||||
*
|
||||
* Side effects:
|
||||
* The reference count of the List internal rep is incremented.
|
||||
* The 'refCount' of the List internal rep is incremented.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1803,16 +1782,20 @@ DupListInternalRep(
|
||||
*
|
||||
* SetListFromAny --
|
||||
*
|
||||
* Attempt to generate a list internal form for the Tcl object "objPtr".
|
||||
* Convert any object to a list.
|
||||
*
|
||||
* Results:
|
||||
* The return value is TCL_OK or TCL_ERROR. If an error occurs during
|
||||
* conversion, an error message is left in the interpreter's result
|
||||
* unless "interp" is NULL.
|
||||
* Value
|
||||
*
|
||||
* TCL_OK
|
||||
*
|
||||
* Success. The internal representation of 'objPtr' is set, and the type
|
||||
* of 'objPtr' is 'tclListType'.
|
||||
*
|
||||
* TCL_ERROR
|
||||
*
|
||||
* An error occured during conversion. An error message is left in the
|
||||
* interpreter's result if 'interp' is not NULL.
|
||||
*
|
||||
* Side effects:
|
||||
* If no error occurs, a list is stored as "objPtr"s internal
|
||||
* representation.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1937,18 +1920,16 @@ SetListFromAny(
|
||||
*
|
||||
* UpdateStringOfList --
|
||||
*
|
||||
* Update the string representation for a list object. Note: This
|
||||
* function does not invalidate an existing old string rep so storage
|
||||
* will be lost if this has not already been done.
|
||||
* Update the string representation for a list object.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
* Any previously-exising string representation is not invalidated, so
|
||||
* storage is lost if this has not been taken care of.
|
||||
*
|
||||
* Side effects:
|
||||
* The object's string is set to a valid string that results from the
|
||||
* list-to-string conversion. This string will be empty if the list has
|
||||
* no elements. The list internal representation should not be NULL and
|
||||
* we assume it is not NULL.
|
||||
* Effect
|
||||
*
|
||||
* The string representation of 'listPtr' is set to the resulting string.
|
||||
* This string will be empty if the list has no elements. It is assumed
|
||||
* that the list internal representation is not NULL.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
@@ -470,6 +470,17 @@ Tcl_LoadObjCmd(
|
||||
*/
|
||||
|
||||
if (code != TCL_OK) {
|
||||
Interp *iPtr = (Interp *) target;
|
||||
if (iPtr->legacyResult && !iPtr->legacyFreeProc) {
|
||||
/*
|
||||
* A call to Tcl_InitStubs() determined the caller extension and
|
||||
* this interp are incompatible in their stubs mechanisms, and
|
||||
* recorded the error in the oldest legacy place we have to do so.
|
||||
*/
|
||||
Tcl_SetObjResult(target, Tcl_NewStringObj(iPtr->legacyResult, -1));
|
||||
iPtr->legacyResult = NULL;
|
||||
iPtr->legacyFreeProc = (void (*) (void))-1;
|
||||
}
|
||||
Tcl_TransferResult(target, code, interp);
|
||||
goto done;
|
||||
}
|
||||
|
||||
+18
-16
@@ -2349,8 +2349,7 @@ SetDoubleFromAny(
|
||||
* UpdateStringOfDouble --
|
||||
*
|
||||
* Update the string representation for a double-precision floating point
|
||||
* object. This must obey the current tcl_precision value for
|
||||
* double-to-string conversions. Note: This function does not free an
|
||||
* object. Note: This function does not free an
|
||||
* existing old string rep so storage will be lost if this has not
|
||||
* already been done.
|
||||
*
|
||||
@@ -2468,23 +2467,26 @@ Tcl_SetIntObj(
|
||||
*
|
||||
* Tcl_GetIntFromObj --
|
||||
*
|
||||
* Attempt to return an int from the Tcl object "objPtr". If the object
|
||||
* is not already an int, an attempt will be made to convert it to one.
|
||||
* Retrieve the integer value of 'objPtr'.
|
||||
*
|
||||
* Integer and long integer objects share the same "integer" type
|
||||
* implementation. We store all integers as longs and Tcl_GetIntFromObj
|
||||
* checks whether the current value of the long can be represented by an
|
||||
* int.
|
||||
* Value
|
||||
*
|
||||
* Results:
|
||||
* The return value is a standard Tcl object result. If an error occurs
|
||||
* during conversion or if the long integer held by the object can not be
|
||||
* represented by an int, an error message is left in the interpreter's
|
||||
* result unless "interp" is NULL.
|
||||
* TCL_OK
|
||||
*
|
||||
* Side effects:
|
||||
* If the object is not already an int, the conversion will free any old
|
||||
* internal representation.
|
||||
* Success.
|
||||
*
|
||||
* TCL_ERROR
|
||||
*
|
||||
* An error occurred during conversion or the integral value can not
|
||||
* be represented as an integer (it might be too large). An error
|
||||
* message is left in the interpreter's result if 'interp' is not
|
||||
* NULL.
|
||||
*
|
||||
* Effect
|
||||
*
|
||||
* 'objPtr' is converted to an integer if necessary if it is not one
|
||||
* already. The conversion frees any previously-existing internal
|
||||
* representation.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
+15
-41
@@ -63,7 +63,7 @@ Tcl_SetPanicProc(
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tcl_PanicVA --
|
||||
* Tcl_Panic --
|
||||
*
|
||||
* Print an error message and kill the process.
|
||||
*
|
||||
@@ -76,16 +76,25 @@ Tcl_SetPanicProc(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* ARGSUSED */
|
||||
/*
|
||||
* The following comment is here so that Coverity's static analizer knows that
|
||||
* a Tcl_Panic() call can never return and avoids lots of false positives.
|
||||
*/
|
||||
|
||||
/* coverity[+kill] */
|
||||
void
|
||||
Tcl_PanicVA(
|
||||
const char *format, /* Format string, suitable for passing to
|
||||
* fprintf. */
|
||||
va_list argList) /* Variable argument list. */
|
||||
Tcl_Panic(
|
||||
const char *format,
|
||||
...)
|
||||
{
|
||||
va_list argList;
|
||||
char *arg1, *arg2, *arg3; /* Additional arguments (variable in number)
|
||||
* to pass to fprintf. */
|
||||
char *arg4, *arg5, *arg6, *arg7, *arg8;
|
||||
|
||||
|
||||
va_start(argList, format);
|
||||
arg1 = va_arg(argList, char *);
|
||||
arg2 = va_arg(argList, char *);
|
||||
arg3 = va_arg(argList, char *);
|
||||
@@ -94,6 +103,7 @@ Tcl_PanicVA(
|
||||
arg6 = va_arg(argList, char *);
|
||||
arg7 = va_arg(argList, char *);
|
||||
arg8 = va_arg(argList, char *);
|
||||
va_end (argList);
|
||||
|
||||
if (panicProc != NULL) {
|
||||
panicProc(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
|
||||
@@ -125,42 +135,6 @@ Tcl_PanicVA(
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tcl_Panic --
|
||||
*
|
||||
* Print an error message and kill the process.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* The process dies, entering the debugger if possible.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* ARGSUSED */
|
||||
|
||||
/*
|
||||
* The following comment is here so that Coverity's static analizer knows that
|
||||
* a Tcl_Panic() call can never return and avoids lots of false positives.
|
||||
*/
|
||||
|
||||
/* coverity[+kill] */
|
||||
void
|
||||
Tcl_Panic(
|
||||
const char *format,
|
||||
...)
|
||||
{
|
||||
va_list argList;
|
||||
|
||||
va_start(argList, format);
|
||||
Tcl_PanicVA(format, argList);
|
||||
va_end (argList);
|
||||
}
|
||||
|
||||
/*
|
||||
* Local Variables:
|
||||
* mode: c
|
||||
|
||||
+49
-437
@@ -27,9 +27,6 @@ enum returnKeys {
|
||||
static Tcl_Obj ** GetKeys(void);
|
||||
static void ReleaseKeys(ClientData clientData);
|
||||
static void ResetObjResult(Interp *iPtr);
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
static void SetupAppendBuffer(Interp *iPtr, int newSpace);
|
||||
#endif /* !TCL_NO_DEPRECATED */
|
||||
|
||||
/*
|
||||
* This structure is used to take a snapshot of the interpreter state in
|
||||
@@ -247,47 +244,9 @@ Tcl_SaveResult(
|
||||
* reference. Put an empty object into the interpreter.
|
||||
*/
|
||||
|
||||
statePtr->objResultPtr = iPtr->objResultPtr;
|
||||
*statePtr = iPtr->objResultPtr;
|
||||
iPtr->objResultPtr = Tcl_NewObj();
|
||||
Tcl_IncrRefCount(iPtr->objResultPtr);
|
||||
|
||||
/*
|
||||
* Save the string result.
|
||||
*/
|
||||
|
||||
statePtr->freeProc = iPtr->freeProc;
|
||||
if (iPtr->result == iPtr->resultSpace) {
|
||||
/*
|
||||
* Copy the static string data out of the interp buffer.
|
||||
*/
|
||||
|
||||
statePtr->result = statePtr->resultSpace;
|
||||
strcpy(statePtr->result, iPtr->result);
|
||||
statePtr->appendResult = NULL;
|
||||
} else if (iPtr->result == iPtr->appendResult) {
|
||||
/*
|
||||
* Move the append buffer out of the interp.
|
||||
*/
|
||||
|
||||
statePtr->appendResult = iPtr->appendResult;
|
||||
statePtr->appendAvl = iPtr->appendAvl;
|
||||
statePtr->appendUsed = iPtr->appendUsed;
|
||||
statePtr->result = statePtr->appendResult;
|
||||
iPtr->appendResult = NULL;
|
||||
iPtr->appendAvl = 0;
|
||||
iPtr->appendUsed = 0;
|
||||
} else {
|
||||
/*
|
||||
* Move the dynamic or static string out of the interpreter.
|
||||
*/
|
||||
|
||||
statePtr->result = iPtr->result;
|
||||
statePtr->appendResult = NULL;
|
||||
}
|
||||
|
||||
iPtr->result = iPtr->resultSpace;
|
||||
iPtr->resultSpace[0] = 0;
|
||||
iPtr->freeProc = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -318,45 +277,12 @@ Tcl_RestoreResult(
|
||||
|
||||
Tcl_ResetResult(interp);
|
||||
|
||||
/*
|
||||
* Restore the string result.
|
||||
*/
|
||||
|
||||
iPtr->freeProc = statePtr->freeProc;
|
||||
if (statePtr->result == statePtr->resultSpace) {
|
||||
/*
|
||||
* Copy the static string data into the interp buffer.
|
||||
*/
|
||||
|
||||
iPtr->result = iPtr->resultSpace;
|
||||
strcpy(iPtr->result, statePtr->result);
|
||||
} else if (statePtr->result == statePtr->appendResult) {
|
||||
/*
|
||||
* Move the append buffer back into the interp.
|
||||
*/
|
||||
|
||||
if (iPtr->appendResult != NULL) {
|
||||
ckfree(iPtr->appendResult);
|
||||
}
|
||||
|
||||
iPtr->appendResult = statePtr->appendResult;
|
||||
iPtr->appendAvl = statePtr->appendAvl;
|
||||
iPtr->appendUsed = statePtr->appendUsed;
|
||||
iPtr->result = iPtr->appendResult;
|
||||
} else {
|
||||
/*
|
||||
* Move the dynamic or static string back into the interpreter.
|
||||
*/
|
||||
|
||||
iPtr->result = statePtr->result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Restore the object result.
|
||||
*/
|
||||
|
||||
Tcl_DecrRefCount(iPtr->objResultPtr);
|
||||
iPtr->objResultPtr = statePtr->objResultPtr;
|
||||
iPtr->objResultPtr = *statePtr;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -382,15 +308,7 @@ void
|
||||
Tcl_DiscardResult(
|
||||
Tcl_SavedResult *statePtr) /* State returned by Tcl_SaveResult. */
|
||||
{
|
||||
TclDecrRefCount(statePtr->objResultPtr);
|
||||
|
||||
if (statePtr->result == statePtr->appendResult) {
|
||||
ckfree(statePtr->appendResult);
|
||||
} else if (statePtr->freeProc == TCL_DYNAMIC) {
|
||||
ckfree(statePtr->result);
|
||||
} else if (statePtr->freeProc) {
|
||||
statePtr->freeProc(statePtr->result);
|
||||
}
|
||||
Tcl_DecrRefCount(*statePtr);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -420,49 +338,15 @@ Tcl_SetResult(
|
||||
* TCL_STATIC, TCL_VOLATILE, or the address of
|
||||
* a Tcl_FreeProc such as free. */
|
||||
{
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
register Tcl_FreeProc *oldFreeProc = iPtr->freeProc;
|
||||
char *oldResult = iPtr->result;
|
||||
|
||||
if (result == NULL) {
|
||||
iPtr->resultSpace[0] = 0;
|
||||
iPtr->result = iPtr->resultSpace;
|
||||
iPtr->freeProc = 0;
|
||||
} else if (freeProc == TCL_VOLATILE) {
|
||||
int length = strlen(result);
|
||||
|
||||
if (length > TCL_RESULT_SIZE) {
|
||||
iPtr->result = ckalloc(length + 1);
|
||||
iPtr->freeProc = TCL_DYNAMIC;
|
||||
} else {
|
||||
iPtr->result = iPtr->resultSpace;
|
||||
iPtr->freeProc = 0;
|
||||
}
|
||||
memcpy(iPtr->result, result, (unsigned) length+1);
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(result, -1));
|
||||
if (result == NULL || freeProc == NULL || freeProc == TCL_VOLATILE) {
|
||||
return;
|
||||
}
|
||||
if (freeProc == TCL_DYNAMIC) {
|
||||
ckfree(result);
|
||||
} else {
|
||||
iPtr->result = (char *) result;
|
||||
iPtr->freeProc = freeProc;
|
||||
(*freeProc)(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* If the old result was dynamically-allocated, free it up. Do it here,
|
||||
* rather than at the beginning, in case the new result value was part of
|
||||
* the old result value.
|
||||
*/
|
||||
|
||||
if (oldFreeProc != 0) {
|
||||
if (oldFreeProc == TCL_DYNAMIC) {
|
||||
ckfree(oldResult);
|
||||
} else {
|
||||
oldFreeProc(oldResult);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset the object result since we just set the string result.
|
||||
*/
|
||||
|
||||
ResetObjResult(iPtr);
|
||||
}
|
||||
#endif /* !TCL_NO_DEPRECATED */
|
||||
|
||||
@@ -488,20 +372,8 @@ Tcl_GetStringResult(
|
||||
register Tcl_Interp *interp)/* Interpreter whose result to return. */
|
||||
{
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
#ifdef TCL_NO_DEPRECATED
|
||||
return Tcl_GetString(iPtr->objResultPtr);
|
||||
#else
|
||||
/*
|
||||
* If the string result is empty, move the object result to the string
|
||||
* result, then reset the object result.
|
||||
*/
|
||||
|
||||
if (*(iPtr->result) == 0) {
|
||||
Tcl_SetResult(interp, TclGetString(Tcl_GetObjResult(interp)),
|
||||
TCL_VOLATILE);
|
||||
}
|
||||
return iPtr->result;
|
||||
#endif
|
||||
return Tcl_GetString(iPtr->objResultPtr);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -542,23 +414,6 @@ Tcl_SetObjResult(
|
||||
*/
|
||||
|
||||
TclDecrRefCount(oldObjResult);
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
/*
|
||||
* Reset the string result since we just set the result object.
|
||||
*/
|
||||
|
||||
if (iPtr->freeProc != NULL) {
|
||||
if (iPtr->freeProc == TCL_DYNAMIC) {
|
||||
ckfree(iPtr->result);
|
||||
} else {
|
||||
iPtr->freeProc(iPtr->result);
|
||||
}
|
||||
iPtr->freeProc = 0;
|
||||
}
|
||||
iPtr->result = iPtr->resultSpace;
|
||||
iPtr->resultSpace[0] = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -587,89 +442,10 @@ Tcl_GetObjResult(
|
||||
Tcl_Interp *interp) /* Interpreter whose result to return. */
|
||||
{
|
||||
register Interp *iPtr = (Interp *) interp;
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
Tcl_Obj *objResultPtr;
|
||||
int length;
|
||||
|
||||
/*
|
||||
* If the string result is non-empty, move the string result to the object
|
||||
* result, then reset the string result.
|
||||
*/
|
||||
|
||||
if (iPtr->result[0] != 0) {
|
||||
ResetObjResult(iPtr);
|
||||
|
||||
objResultPtr = iPtr->objResultPtr;
|
||||
length = strlen(iPtr->result);
|
||||
TclInitStringRep(objResultPtr, iPtr->result, length);
|
||||
|
||||
if (iPtr->freeProc != NULL) {
|
||||
if (iPtr->freeProc == TCL_DYNAMIC) {
|
||||
ckfree(iPtr->result);
|
||||
} else {
|
||||
iPtr->freeProc(iPtr->result);
|
||||
}
|
||||
iPtr->freeProc = 0;
|
||||
}
|
||||
iPtr->result = iPtr->resultSpace;
|
||||
iPtr->result[0] = 0;
|
||||
}
|
||||
#endif /* !TCL_NO_DEPRECATED */
|
||||
return iPtr->objResultPtr;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tcl_AppendResultVA --
|
||||
*
|
||||
* Append a variable number of strings onto the interpreter's result.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* The result of the interpreter given by the first argument is extended
|
||||
* by the strings in the va_list (up to a terminating NULL argument).
|
||||
*
|
||||
* If the string result is non-empty, the object result forced to be a
|
||||
* duplicate of it first. There will be a string result afterwards.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
Tcl_AppendResultVA(
|
||||
Tcl_Interp *interp, /* Interpreter with which to associate the
|
||||
* return value. */
|
||||
va_list argList) /* Variable argument list. */
|
||||
{
|
||||
Tcl_Obj *objPtr = Tcl_GetObjResult(interp);
|
||||
|
||||
if (Tcl_IsShared(objPtr)) {
|
||||
objPtr = Tcl_DuplicateObj(objPtr);
|
||||
}
|
||||
Tcl_AppendStringsToObjVA(objPtr, argList);
|
||||
Tcl_SetObjResult(interp, objPtr);
|
||||
|
||||
/*
|
||||
* Strictly we should call Tcl_GetStringResult(interp) here to make sure
|
||||
* that interp->result is correct according to the old contract, but that
|
||||
* makes the performance of much code (e.g. in Tk) absolutely awful. So we
|
||||
* leave it out; code that really wants interp->result can just insert the
|
||||
* calls to Tcl_GetStringResult() itself. [Patch 1041072 discussion]
|
||||
*/
|
||||
|
||||
#ifdef USE_INTERP_RESULT
|
||||
/*
|
||||
* Ensure that the interp->result is legal so old Tcl 7.* code still
|
||||
* works. There's still embarrasingly much of it about...
|
||||
*/
|
||||
|
||||
(void) Tcl_GetStringResult(interp);
|
||||
#endif /* USE_INTERP_RESULT */
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
@@ -696,9 +472,23 @@ Tcl_AppendResult(
|
||||
Tcl_Interp *interp, ...)
|
||||
{
|
||||
va_list argList;
|
||||
Tcl_Obj *objPtr;
|
||||
|
||||
va_start(argList, interp);
|
||||
Tcl_AppendResultVA(interp, argList);
|
||||
objPtr = Tcl_GetObjResult(interp);
|
||||
|
||||
if (Tcl_IsShared(objPtr)) {
|
||||
objPtr = Tcl_DuplicateObj(objPtr);
|
||||
}
|
||||
while (1) {
|
||||
const char *bytes = va_arg(argList, char *);
|
||||
|
||||
if (bytes == NULL) {
|
||||
break;
|
||||
}
|
||||
Tcl_AppendToObj(objPtr, bytes, -1);
|
||||
}
|
||||
Tcl_SetObjResult(interp, objPtr);
|
||||
va_end(argList);
|
||||
}
|
||||
|
||||
@@ -733,7 +523,6 @@ Tcl_AppendElement(
|
||||
* to result. */
|
||||
{
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
#ifdef TCL_NO_DEPRECATED
|
||||
Tcl_Obj *elementPtr = Tcl_NewStringObj(element, -1);
|
||||
Tcl_Obj *listPtr = Tcl_NewListObj(1, &elementPtr);
|
||||
const char *bytes;
|
||||
@@ -747,153 +536,25 @@ Tcl_AppendElement(
|
||||
}
|
||||
Tcl_AppendObjToObj(iPtr->objResultPtr, listPtr);
|
||||
Tcl_DecrRefCount(listPtr);
|
||||
#else
|
||||
char *dst;
|
||||
int size;
|
||||
int flags;
|
||||
|
||||
/*
|
||||
* If the string result is empty, move the object result to the string
|
||||
* result, then reset the object result.
|
||||
*/
|
||||
|
||||
(void) Tcl_GetStringResult(interp);
|
||||
|
||||
/*
|
||||
* See how much space is needed, and grow the append buffer if needed to
|
||||
* accommodate the list element.
|
||||
*/
|
||||
|
||||
size = Tcl_ScanElement(element, &flags) + 1;
|
||||
if ((iPtr->result != iPtr->appendResult)
|
||||
|| (iPtr->appendResult[iPtr->appendUsed] != 0)
|
||||
|| ((size + iPtr->appendUsed) >= iPtr->appendAvl)) {
|
||||
SetupAppendBuffer(iPtr, size+iPtr->appendUsed);
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert the string into a list element and copy it to the buffer that's
|
||||
* forming, with a space separator if needed.
|
||||
*/
|
||||
|
||||
dst = iPtr->appendResult + iPtr->appendUsed;
|
||||
if (TclNeedSpace(iPtr->appendResult, dst)) {
|
||||
iPtr->appendUsed++;
|
||||
*dst = ' ';
|
||||
dst++;
|
||||
|
||||
/*
|
||||
* If we need a space to separate this element from preceding stuff,
|
||||
* then this element will not lead a list, and need not have it's
|
||||
* leading '#' quoted.
|
||||
*/
|
||||
|
||||
flags |= TCL_DONT_QUOTE_HASH;
|
||||
}
|
||||
iPtr->appendUsed += Tcl_ConvertElement(element, dst, flags);
|
||||
#endif /* !TCL_NO_DEPRECATED */
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* SetupAppendBuffer --
|
||||
*
|
||||
* This function makes sure that there is an append buffer properly
|
||||
* initialized, if necessary, from the interpreter's result, and that it
|
||||
* has at least enough room to accommodate newSpace new bytes of
|
||||
* information.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
static void
|
||||
SetupAppendBuffer(
|
||||
Interp *iPtr, /* Interpreter whose result is being set up. */
|
||||
int newSpace) /* Make sure that at least this many bytes of
|
||||
* new information may be added. */
|
||||
{
|
||||
int totalSpace;
|
||||
|
||||
/*
|
||||
* Make the append buffer larger, if that's necessary, then copy the
|
||||
* result into the append buffer and make the append buffer the official
|
||||
* Tcl result.
|
||||
*/
|
||||
|
||||
if (iPtr->result != iPtr->appendResult) {
|
||||
/*
|
||||
* If an oversized buffer was used recently, then free it up so we go
|
||||
* back to a smaller buffer. This avoids tying up memory forever after
|
||||
* a large operation.
|
||||
*/
|
||||
|
||||
if (iPtr->appendAvl > 500) {
|
||||
ckfree(iPtr->appendResult);
|
||||
iPtr->appendResult = NULL;
|
||||
iPtr->appendAvl = 0;
|
||||
}
|
||||
iPtr->appendUsed = strlen(iPtr->result);
|
||||
} else if (iPtr->result[iPtr->appendUsed] != 0) {
|
||||
/*
|
||||
* Most likely someone has modified a result created by
|
||||
* Tcl_AppendResult et al. so that it has a different size. Just
|
||||
* recompute the size.
|
||||
*/
|
||||
|
||||
iPtr->appendUsed = strlen(iPtr->result);
|
||||
}
|
||||
|
||||
totalSpace = newSpace + iPtr->appendUsed;
|
||||
if (totalSpace >= iPtr->appendAvl) {
|
||||
char *new;
|
||||
|
||||
if (totalSpace < 100) {
|
||||
totalSpace = 200;
|
||||
} else {
|
||||
totalSpace *= 2;
|
||||
}
|
||||
new = ckalloc(totalSpace);
|
||||
strcpy(new, iPtr->result);
|
||||
if (iPtr->appendResult != NULL) {
|
||||
ckfree(iPtr->appendResult);
|
||||
}
|
||||
iPtr->appendResult = new;
|
||||
iPtr->appendAvl = totalSpace;
|
||||
} else if (iPtr->result != iPtr->appendResult) {
|
||||
strcpy(iPtr->appendResult, iPtr->result);
|
||||
}
|
||||
|
||||
Tcl_FreeResult((Tcl_Interp *) iPtr);
|
||||
iPtr->result = iPtr->appendResult;
|
||||
}
|
||||
#endif /* !TCL_NO_DEPRECATED */
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tcl_FreeResult --
|
||||
*
|
||||
* This function frees up the memory associated with an interpreter's
|
||||
* string result. It also resets the interpreter's result object.
|
||||
* Tcl_FreeResult is most commonly used when a function is about to
|
||||
* replace one result value with another.
|
||||
* result, resetting the interpreter's result object. Tcl_FreeResult is
|
||||
* most commonly used when a function is about to replace one result
|
||||
* value with another.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* Frees the memory associated with interp's string result and sets
|
||||
* interp->freeProc to zero, but does not change interp->result or clear
|
||||
* error state. Resets interp's result object to an unshared empty
|
||||
* object.
|
||||
* Frees the memory associated with interp's result but does not change
|
||||
* any part of the error dictionary (i.e., the errorinfo and errorcode
|
||||
* remain the same).
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -904,17 +565,6 @@ Tcl_FreeResult(
|
||||
{
|
||||
register Interp *iPtr = (Interp *) interp;
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
if (iPtr->freeProc != NULL) {
|
||||
if (iPtr->freeProc == TCL_DYNAMIC) {
|
||||
ckfree(iPtr->result);
|
||||
} else {
|
||||
iPtr->freeProc(iPtr->result);
|
||||
}
|
||||
iPtr->freeProc = 0;
|
||||
}
|
||||
|
||||
#endif /* !TCL_NO_DEPRECATED */
|
||||
ResetObjResult(iPtr);
|
||||
}
|
||||
|
||||
@@ -944,18 +594,6 @@ Tcl_ResetResult(
|
||||
register Interp *iPtr = (Interp *) interp;
|
||||
|
||||
ResetObjResult(iPtr);
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
if (iPtr->freeProc != NULL) {
|
||||
if (iPtr->freeProc == TCL_DYNAMIC) {
|
||||
ckfree(iPtr->result);
|
||||
} else {
|
||||
iPtr->freeProc(iPtr->result);
|
||||
}
|
||||
iPtr->freeProc = 0;
|
||||
}
|
||||
iPtr->result = iPtr->resultSpace;
|
||||
iPtr->resultSpace[0] = 0;
|
||||
#endif /* !TCL_NO_DEPRECATED */
|
||||
if (iPtr->errorCode) {
|
||||
/* Legacy support */
|
||||
if (iPtr->flags & ERR_LEGACY_COPY) {
|
||||
@@ -1026,48 +664,6 @@ ResetObjResult(
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tcl_SetErrorCodeVA --
|
||||
*
|
||||
* This function is called to record machine-readable information about
|
||||
* an error that is about to be returned.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* The errorCode field of the interp is modified to hold all of the
|
||||
* arguments to this function, in a list form with each argument becoming
|
||||
* one element of the list.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
Tcl_SetErrorCodeVA(
|
||||
Tcl_Interp *interp, /* Interpreter in which to set errorCode */
|
||||
va_list argList) /* Variable argument list. */
|
||||
{
|
||||
Tcl_Obj *errorObj = Tcl_NewObj();
|
||||
|
||||
/*
|
||||
* Scan through the arguments one at a time, appending them to the
|
||||
* errorCode field as list elements.
|
||||
*/
|
||||
|
||||
while (1) {
|
||||
char *elem = va_arg(argList, char *);
|
||||
|
||||
if (elem == NULL) {
|
||||
break;
|
||||
}
|
||||
Tcl_ListObjAppendElement(NULL, errorObj, Tcl_NewStringObj(elem, -1));
|
||||
}
|
||||
Tcl_SetObjErrorCode(interp, errorObj);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
@@ -1092,6 +688,7 @@ Tcl_SetErrorCode(
|
||||
Tcl_Interp *interp, ...)
|
||||
{
|
||||
va_list argList;
|
||||
Tcl_Obj *errorObj;
|
||||
|
||||
/*
|
||||
* Scan through the arguments one at a time, appending them to the
|
||||
@@ -1099,7 +696,22 @@ Tcl_SetErrorCode(
|
||||
*/
|
||||
|
||||
va_start(argList, interp);
|
||||
Tcl_SetErrorCodeVA(interp, argList);
|
||||
errorObj = Tcl_NewObj();
|
||||
|
||||
/*
|
||||
* Scan through the arguments one at a time, appending them to the
|
||||
* errorCode field as list elements.
|
||||
*/
|
||||
|
||||
while (1) {
|
||||
char *elem = va_arg(argList, char *);
|
||||
|
||||
if (elem == NULL) {
|
||||
break;
|
||||
}
|
||||
Tcl_ListObjAppendElement(NULL, errorObj, Tcl_NewStringObj(elem, -1));
|
||||
}
|
||||
Tcl_SetObjErrorCode(interp, errorObj);
|
||||
va_end(argList);
|
||||
}
|
||||
|
||||
|
||||
Regular → Executable
+4
-68
@@ -483,7 +483,7 @@ TclParseNumber(
|
||||
enum State {
|
||||
INITIAL, SIGNUM, ZERO, ZERO_X,
|
||||
ZERO_O, ZERO_B, ZERO_D, BINARY,
|
||||
HEXADECIMAL, OCTAL, BAD_OCTAL, DECIMAL,
|
||||
HEXADECIMAL, OCTAL, DECIMAL,
|
||||
LEADING_RADIX_POINT, FRACTION,
|
||||
EXPONENT_START, EXPONENT_SIGNUM, EXPONENT,
|
||||
sI, sIN, sINF, sINFI, sINFIN, sINFINI, sINFINIT, sINFINITY
|
||||
@@ -528,7 +528,6 @@ TclParseNumber(
|
||||
char d = 0; /* Last hexadecimal digit scanned; initialized
|
||||
* to avoid a compiler warning. */
|
||||
int shift = 0; /* Amount to shift when accumulating binary */
|
||||
int explicitOctal = 0;
|
||||
|
||||
#define ALL_BITS (~(Tcl_WideUInt)0)
|
||||
#define MOST_BITS (ALL_BITS >> 1)
|
||||
@@ -660,7 +659,6 @@ TclParseNumber(
|
||||
goto zerob;
|
||||
}
|
||||
if (c == 'o' || c == 'O') {
|
||||
explicitOctal = 1;
|
||||
state = ZERO_O;
|
||||
break;
|
||||
}
|
||||
@@ -668,10 +666,7 @@ TclParseNumber(
|
||||
state = ZERO_D;
|
||||
break;
|
||||
}
|
||||
#ifdef TCL_NO_DEPRECATED
|
||||
goto decimal;
|
||||
#endif
|
||||
/* FALLTHROUGH */
|
||||
|
||||
case OCTAL:
|
||||
/*
|
||||
@@ -734,58 +729,6 @@ TclParseNumber(
|
||||
state = OCTAL;
|
||||
break;
|
||||
}
|
||||
/* FALLTHROUGH */
|
||||
|
||||
case BAD_OCTAL:
|
||||
if (explicitOctal) {
|
||||
/*
|
||||
* No forgiveness for bad digits in explicitly octal numbers.
|
||||
*/
|
||||
|
||||
goto endgame;
|
||||
}
|
||||
if (flags & TCL_PARSE_INTEGER_ONLY) {
|
||||
/*
|
||||
* No seeking floating point when parsing only integer.
|
||||
*/
|
||||
|
||||
goto endgame;
|
||||
}
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
|
||||
/*
|
||||
* Scanned a number with a leading zero that contains an 8, 9,
|
||||
* radix point or E. This is an invalid octal number, but might
|
||||
* still be floating point.
|
||||
*/
|
||||
|
||||
if (c == '0') {
|
||||
numTrailZeros++;
|
||||
state = BAD_OCTAL;
|
||||
break;
|
||||
} else if (isdigit(UCHAR(c))) {
|
||||
if (objPtr != NULL) {
|
||||
significandOverflow = AccumulateDecimalDigit(
|
||||
(unsigned)(c-'0'), numTrailZeros,
|
||||
&significandWide, &significandBig,
|
||||
significandOverflow);
|
||||
}
|
||||
if (numSigDigs != 0) {
|
||||
numSigDigs += (numTrailZeros + 1);
|
||||
} else {
|
||||
numSigDigs = 1;
|
||||
}
|
||||
numTrailZeros = 0;
|
||||
state = BAD_OCTAL;
|
||||
break;
|
||||
} else if (c == '.') {
|
||||
state = FRACTION;
|
||||
break;
|
||||
} else if (c == 'E' || c == 'e') {
|
||||
state = EXPONENT_START;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
goto endgame;
|
||||
|
||||
/*
|
||||
@@ -900,9 +843,7 @@ TclParseNumber(
|
||||
* digits.
|
||||
*/
|
||||
|
||||
#ifdef TCL_NO_DEPRECATED
|
||||
decimal:
|
||||
#endif
|
||||
acceptState = state;
|
||||
acceptPoint = p;
|
||||
acceptLen = len;
|
||||
@@ -1186,7 +1127,6 @@ TclParseNumber(
|
||||
TclFreeIntRep(objPtr);
|
||||
switch (acceptState) {
|
||||
case SIGNUM:
|
||||
case BAD_OCTAL:
|
||||
case ZERO_X:
|
||||
case ZERO_O:
|
||||
case ZERO_B:
|
||||
@@ -1412,9 +1352,6 @@ TclParseNumber(
|
||||
|
||||
Tcl_AppendLimitedToObj(msg, bytes, numBytes, 50, "");
|
||||
Tcl_AppendToObj(msg, "\"", -1);
|
||||
if (state == BAD_OCTAL) {
|
||||
Tcl_AppendToObj(msg, " (looks like invalid octal number)", -1);
|
||||
}
|
||||
Tcl_SetObjResult(interp, msg);
|
||||
Tcl_SetErrorCode(interp, "TCL", "VALUE", "NUMBER", NULL);
|
||||
}
|
||||
@@ -4059,8 +3996,8 @@ StrictBignumConversion(
|
||||
* This function is a service routine that produces the string of digits for
|
||||
* floating-point-to-decimal conversion. It can do a number of things
|
||||
* according to the 'flags' argument. Valid values for 'flags' include:
|
||||
* TCL_DD_SHORTEST - This is the default for floating point conversion if
|
||||
* ::tcl_precision is 0. It constructs the shortest string of
|
||||
* TCL_DD_SHORTEST - This is the default for floating point conversion.
|
||||
* It constructs the shortest string of
|
||||
* digits that will reconvert to the given number when scanned.
|
||||
* For floating point numbers that are exactly between two
|
||||
* decimal numbers, it resolves using the 'round to even' rule.
|
||||
@@ -4075,8 +4012,7 @@ StrictBignumConversion(
|
||||
* subsequent input conversion is 'round up' or 'round down'
|
||||
* rather than 'round to nearest', but is surprising otherwise.
|
||||
* TCL_DD_E_FORMAT - This value is used to prepare numbers for %e format
|
||||
* conversion (or for default floating->string if tcl_precision
|
||||
* is not 0). It constructs a string of at most 'ndigits' digits,
|
||||
* conversion. It constructs a string of at most 'ndigits' digits,
|
||||
* choosing the one that is closest to the given number (and
|
||||
* resolving ties with 'round to even'). It is allowed to return
|
||||
* fewer than 'ndigits' if the number converts exactly; if the
|
||||
|
||||
+12
-38
@@ -1556,43 +1556,6 @@ AppendUtfToUtfRep(
|
||||
objPtr->length = newLength;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tcl_AppendStringsToObjVA --
|
||||
*
|
||||
* This function appends one or more null-terminated strings to an
|
||||
* object.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* The contents of all the string arguments are appended to the string
|
||||
* representation of objPtr.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
Tcl_AppendStringsToObjVA(
|
||||
Tcl_Obj *objPtr, /* Points to the object to append to. */
|
||||
va_list argList) /* Variable argument list. */
|
||||
{
|
||||
if (Tcl_IsShared(objPtr)) {
|
||||
Tcl_Panic("%s called with shared object", "Tcl_AppendStringsToObj");
|
||||
}
|
||||
|
||||
while (1) {
|
||||
const char *bytes = va_arg(argList, char *);
|
||||
|
||||
if (bytes == NULL) {
|
||||
break;
|
||||
}
|
||||
Tcl_AppendToObj(objPtr, bytes, -1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
@@ -1619,7 +1582,18 @@ Tcl_AppendStringsToObj(
|
||||
va_list argList;
|
||||
|
||||
va_start(argList, objPtr);
|
||||
Tcl_AppendStringsToObjVA(objPtr, argList);
|
||||
if (Tcl_IsShared(objPtr)) {
|
||||
Tcl_Panic("%s called with shared object", "Tcl_AppendStringsToObj");
|
||||
}
|
||||
|
||||
while (1) {
|
||||
const char *bytes = va_arg(argList, char *);
|
||||
|
||||
if (bytes == NULL) {
|
||||
break;
|
||||
}
|
||||
Tcl_AppendToObj(objPtr, bytes, -1);
|
||||
}
|
||||
va_end(argList);
|
||||
}
|
||||
|
||||
|
||||
+51
-215
@@ -42,70 +42,12 @@
|
||||
#undef TclpGetPid
|
||||
#undef TclSockMinimumBuffers
|
||||
#undef Tcl_SetIntObj
|
||||
#undef TclpInetNtoa
|
||||
#undef TclWinGetServByName
|
||||
#undef TclWinGetSockOpt
|
||||
#undef TclWinSetSockOpt
|
||||
#undef TclWinNToHS
|
||||
|
||||
/* See bug 510001: TclSockMinimumBuffers needs plat imp */
|
||||
#if defined(_WIN64) || defined(TCL_NO_DEPRECATED)
|
||||
# define TclSockMinimumBuffersOld 0
|
||||
#else
|
||||
#define TclSockMinimumBuffersOld sockMinimumBuffersOld
|
||||
static int TclSockMinimumBuffersOld(int sock, int size)
|
||||
{
|
||||
return TclSockMinimumBuffers(INT2PTR(sock), size);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(TCL_NO_DEPRECATED)
|
||||
# define TclSetStartupScriptPath 0
|
||||
# define TclGetStartupScriptPath 0
|
||||
# define TclSetStartupScriptFileName 0
|
||||
# define TclGetStartupScriptFileName 0
|
||||
# define TclpInetNtoa 0
|
||||
# define TclWinGetServByName 0
|
||||
# define TclWinGetSockOpt 0
|
||||
# define TclWinSetSockOpt 0
|
||||
# define TclWinNToHS 0
|
||||
# define TclBNInitBignumFromWideUInt 0
|
||||
# define TclBNInitBignumFromWideInt 0
|
||||
# define TclBNInitBignumFromLong 0
|
||||
#else
|
||||
#define TclSetStartupScriptPath setStartupScriptPath
|
||||
static void TclSetStartupScriptPath(Tcl_Obj *path)
|
||||
{
|
||||
Tcl_SetStartupScript(path, NULL);
|
||||
}
|
||||
#define TclGetStartupScriptPath getStartupScriptPath
|
||||
static Tcl_Obj *TclGetStartupScriptPath(void)
|
||||
{
|
||||
return Tcl_GetStartupScript(NULL);
|
||||
}
|
||||
#define TclSetStartupScriptFileName setStartupScriptFileName
|
||||
static void TclSetStartupScriptFileName(
|
||||
const char *fileName)
|
||||
{
|
||||
Tcl_SetStartupScript(Tcl_NewStringObj(fileName,-1), NULL);
|
||||
}
|
||||
#define TclGetStartupScriptFileName getStartupScriptFileName
|
||||
static const char *TclGetStartupScriptFileName(void)
|
||||
{
|
||||
Tcl_Obj *path = Tcl_GetStartupScript(NULL);
|
||||
if (path == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
return Tcl_GetString(path);
|
||||
}
|
||||
|
||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
||||
#undef TclWinNToHS
|
||||
#define TclWinNToHS winNToHS
|
||||
static unsigned short TclWinNToHS(unsigned short ns) {
|
||||
return ntohs(ns);
|
||||
}
|
||||
#endif
|
||||
# define TclBNInitBignumFromWideUInt TclInitBignumFromWideUInt
|
||||
# define TclBNInitBignumFromWideInt TclInitBignumFromWideInt
|
||||
# define TclBNInitBignumFromLong TclInitBignumFromLong
|
||||
@@ -115,11 +57,9 @@ static unsigned short TclWinNToHS(unsigned short ns) {
|
||||
# define TclUnixWaitForFile 0
|
||||
# define TclUnixCopyFile 0
|
||||
# define TclUnixOpenTemporaryFile 0
|
||||
# define TclpReaddir 0
|
||||
# define TclpIsAtty 0
|
||||
#elif defined(__CYGWIN__)
|
||||
# define TclpIsAtty TclPlatIsAtty
|
||||
# define TclWinSetInterfaces (void (*) (int)) doNothing
|
||||
# define TclWinAddProcess (void (*) (void *, unsigned int)) doNothing
|
||||
# define TclWinFlushDirtyChannels doNothing
|
||||
# define TclWinResetInterfaces doNothing
|
||||
@@ -149,31 +89,6 @@ void *TclWinGetTclInstance()
|
||||
return hInstance;
|
||||
}
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
#define TclWinSetSockOpt winSetSockOpt
|
||||
static int
|
||||
TclWinSetSockOpt(SOCKET s, int level, int optname,
|
||||
const char *optval, int optlen)
|
||||
{
|
||||
return setsockopt((int) s, level, optname, optval, optlen);
|
||||
}
|
||||
|
||||
#define TclWinGetSockOpt winGetSockOpt
|
||||
static int
|
||||
TclWinGetSockOpt(SOCKET s, int level, int optname,
|
||||
char *optval, int *optlen)
|
||||
{
|
||||
return getsockopt((int) s, level, optname, optval, optlen);
|
||||
}
|
||||
|
||||
#define TclWinGetServByName winGetServByName
|
||||
static struct servent *
|
||||
TclWinGetServByName(const char *name, const char *proto)
|
||||
{
|
||||
return getservbyname(name, proto);
|
||||
}
|
||||
#endif /* TCL_NO_DEPRECATED */
|
||||
|
||||
#define TclWinNoBackslash winNoBackslash
|
||||
static char *
|
||||
TclWinNoBackslash(char *path)
|
||||
@@ -312,8 +227,6 @@ static int formatInt(char *buffer, int n){
|
||||
#endif /* __CYGWIN__ */
|
||||
|
||||
#ifdef TCL_NO_DEPRECATED
|
||||
# define Tcl_SeekOld 0
|
||||
# define Tcl_TellOld 0
|
||||
# undef Tcl_SetBooleanObj
|
||||
# define Tcl_SetBooleanObj 0
|
||||
# undef Tcl_PkgPresent
|
||||
@@ -359,83 +272,6 @@ static int formatInt(char *buffer, int n){
|
||||
# define Tcl_DiscardResult 0
|
||||
# undef Tcl_SetResult
|
||||
# define Tcl_SetResult 0
|
||||
# undef Tcl_EvalObj
|
||||
# define Tcl_EvalObj 0
|
||||
# undef Tcl_GlobalEvalObj
|
||||
# define Tcl_GlobalEvalObj 0
|
||||
# define TclBackgroundException 0
|
||||
# undef TclpReaddir
|
||||
# define TclpReaddir 0
|
||||
# define TclSetStartupScript 0
|
||||
# define TclGetStartupScript 0
|
||||
# define TclCreateNamespace 0
|
||||
# define TclDeleteNamespace 0
|
||||
# define TclAppendExportList 0
|
||||
# define TclExport 0
|
||||
# define TclImport 0
|
||||
# define TclForgetImport 0
|
||||
# define TclGetCurrentNamespace_ 0
|
||||
# define TclGetGlobalNamespace_ 0
|
||||
# define TclFindNamespace 0
|
||||
# define TclFindCommand 0
|
||||
# define TclGetCommandFromObj 0
|
||||
# define TclGetCommandFullName 0
|
||||
# define TclCopyChannelOld 0
|
||||
# define Tcl_AppendResultVA 0
|
||||
# define Tcl_AppendStringsToObjVA 0
|
||||
# define Tcl_SetErrorCodeVA 0
|
||||
# define Tcl_PanicVA 0
|
||||
# define Tcl_VarEvalVA 0
|
||||
# undef TclpGetDate
|
||||
# define TclpGetDate 0
|
||||
# undef TclpLocaltime
|
||||
# define TclpLocaltime 0
|
||||
# undef TclpGmtime
|
||||
# define TclpGmtime 0
|
||||
# define TclpLocaltime_unix 0
|
||||
# define TclpGmtime_unix 0
|
||||
#else /* TCL_NO_DEPRECATED */
|
||||
# define Tcl_SeekOld seekOld
|
||||
# define Tcl_TellOld tellOld
|
||||
# define TclBackgroundException Tcl_BackgroundException
|
||||
# define TclSetStartupScript Tcl_SetStartupScript
|
||||
# define TclGetStartupScript Tcl_GetStartupScript
|
||||
# define TclCreateNamespace Tcl_CreateNamespace
|
||||
# define TclDeleteNamespace Tcl_DeleteNamespace
|
||||
# define TclAppendExportList Tcl_AppendExportList
|
||||
# define TclExport Tcl_Export
|
||||
# define TclImport Tcl_Import
|
||||
# define TclForgetImport Tcl_ForgetImport
|
||||
# define TclGetCurrentNamespace_ Tcl_GetCurrentNamespace
|
||||
# define TclGetGlobalNamespace_ Tcl_GetGlobalNamespace
|
||||
# define TclFindNamespace Tcl_FindNamespace
|
||||
# define TclFindCommand Tcl_FindCommand
|
||||
# define TclGetCommandFromObj Tcl_GetCommandFromObj
|
||||
# define TclGetCommandFullName Tcl_GetCommandFullName
|
||||
# define TclpLocaltime_unix TclpLocaltime
|
||||
# define TclpGmtime_unix TclpGmtime
|
||||
|
||||
static int
|
||||
seekOld(
|
||||
Tcl_Channel chan, /* The channel on which to seek. */
|
||||
int offset, /* Offset to seek to. */
|
||||
int mode) /* Relative to which location to seek? */
|
||||
{
|
||||
Tcl_WideInt wOffset, wResult;
|
||||
|
||||
wOffset = Tcl_LongAsWide((long) offset);
|
||||
wResult = Tcl_Seek(chan, wOffset, mode);
|
||||
return (int) Tcl_WideAsLong(wResult);
|
||||
}
|
||||
|
||||
static int
|
||||
tellOld(
|
||||
Tcl_Channel chan) /* The channel to return pos for. */
|
||||
{
|
||||
Tcl_WideInt wResult = Tcl_Tell(chan);
|
||||
|
||||
return (int) Tcl_WideAsLong(wResult);
|
||||
}
|
||||
#endif /* !TCL_NO_DEPRECATED */
|
||||
|
||||
/*
|
||||
@@ -460,7 +296,7 @@ static const TclIntStubs tclIntStubs = {
|
||||
TclCleanupChildren, /* 5 */
|
||||
TclCleanupCommand, /* 6 */
|
||||
TclCopyAndCollapse, /* 7 */
|
||||
TclCopyChannelOld, /* 8 */
|
||||
0, /* 8 */
|
||||
TclCreatePipeline, /* 9 */
|
||||
TclCreateProc, /* 10 */
|
||||
TclDeleteCompiledLocalVars, /* 11 */
|
||||
@@ -529,7 +365,7 @@ static const TclIntStubs tclIntStubs = {
|
||||
TclpFree, /* 74 */
|
||||
TclpGetClicks, /* 75 */
|
||||
TclpGetSeconds, /* 76 */
|
||||
TclpGetTime, /* 77 */
|
||||
0, /* 77 */
|
||||
0, /* 78 */
|
||||
0, /* 79 */
|
||||
0, /* 80 */
|
||||
@@ -540,7 +376,7 @@ static const TclIntStubs tclIntStubs = {
|
||||
0, /* 85 */
|
||||
0, /* 86 */
|
||||
0, /* 87 */
|
||||
TclPrecTraceProc, /* 88 */
|
||||
0, /* 88 */
|
||||
TclPreventAliasLoop, /* 89 */
|
||||
0, /* 90 */
|
||||
TclProcCleanupProc, /* 91 */
|
||||
@@ -556,7 +392,7 @@ static const TclIntStubs tclIntStubs = {
|
||||
TclSetPreInitScript, /* 101 */
|
||||
TclSetupEnv, /* 102 */
|
||||
TclSockGetPort, /* 103 */
|
||||
TclSockMinimumBuffersOld, /* 104 */
|
||||
0, /* 104 */
|
||||
0, /* 105 */
|
||||
0, /* 106 */
|
||||
0, /* 107 */
|
||||
@@ -564,28 +400,28 @@ static const TclIntStubs tclIntStubs = {
|
||||
TclUpdateReturnInfo, /* 109 */
|
||||
TclSockMinimumBuffers, /* 110 */
|
||||
Tcl_AddInterpResolvers, /* 111 */
|
||||
TclAppendExportList, /* 112 */
|
||||
TclCreateNamespace, /* 113 */
|
||||
TclDeleteNamespace, /* 114 */
|
||||
TclExport, /* 115 */
|
||||
TclFindCommand, /* 116 */
|
||||
TclFindNamespace, /* 117 */
|
||||
0, /* 112 */
|
||||
0, /* 113 */
|
||||
0, /* 114 */
|
||||
0, /* 115 */
|
||||
0, /* 116 */
|
||||
0, /* 117 */
|
||||
Tcl_GetInterpResolvers, /* 118 */
|
||||
Tcl_GetNamespaceResolvers, /* 119 */
|
||||
Tcl_FindNamespaceVar, /* 120 */
|
||||
TclForgetImport, /* 121 */
|
||||
TclGetCommandFromObj, /* 122 */
|
||||
TclGetCommandFullName, /* 123 */
|
||||
TclGetCurrentNamespace_, /* 124 */
|
||||
TclGetGlobalNamespace_, /* 125 */
|
||||
0, /* 121 */
|
||||
0, /* 122 */
|
||||
0, /* 123 */
|
||||
0, /* 124 */
|
||||
0, /* 125 */
|
||||
Tcl_GetVariableFullName, /* 126 */
|
||||
TclImport, /* 127 */
|
||||
0, /* 127 */
|
||||
Tcl_PopCallFrame, /* 128 */
|
||||
Tcl_PushCallFrame, /* 129 */
|
||||
Tcl_RemoveInterpResolvers, /* 130 */
|
||||
Tcl_SetNamespaceResolvers, /* 131 */
|
||||
TclpHasSockets, /* 132 */
|
||||
TclpGetDate, /* 133 */
|
||||
0, /* 133 */
|
||||
0, /* 134 */
|
||||
0, /* 135 */
|
||||
0, /* 136 */
|
||||
@@ -610,8 +446,8 @@ static const TclIntStubs tclIntStubs = {
|
||||
0, /* 155 */
|
||||
TclRegError, /* 156 */
|
||||
TclVarTraceExists, /* 157 */
|
||||
TclSetStartupScriptFileName, /* 158 */
|
||||
TclGetStartupScriptFileName, /* 159 */
|
||||
0, /* 158 */
|
||||
0, /* 159 */
|
||||
0, /* 160 */
|
||||
TclChannelTransform, /* 161 */
|
||||
TclChannelEventScriptInvoker, /* 162 */
|
||||
@@ -619,8 +455,8 @@ static const TclIntStubs tclIntStubs = {
|
||||
TclExpandCodeArray, /* 164 */
|
||||
TclpSetInitialEncodings, /* 165 */
|
||||
TclListObjSetElement, /* 166 */
|
||||
TclSetStartupScriptPath, /* 167 */
|
||||
TclGetStartupScriptPath, /* 168 */
|
||||
0, /* 167 */
|
||||
0, /* 168 */
|
||||
TclpUtfNcmp2, /* 169 */
|
||||
TclCheckInterpTraces, /* 170 */
|
||||
TclCheckExecutionTraces, /* 171 */
|
||||
@@ -630,12 +466,12 @@ static const TclIntStubs tclIntStubs = {
|
||||
TclCallVarTraces, /* 175 */
|
||||
TclCleanupVar, /* 176 */
|
||||
TclVarErrMsg, /* 177 */
|
||||
TclSetStartupScript, /* 178 */
|
||||
TclGetStartupScript, /* 179 */
|
||||
0, /* 178 */
|
||||
0, /* 179 */
|
||||
0, /* 180 */
|
||||
0, /* 181 */
|
||||
TclpLocaltime, /* 182 */
|
||||
TclpGmtime, /* 183 */
|
||||
0, /* 182 */
|
||||
0, /* 183 */
|
||||
0, /* 184 */
|
||||
0, /* 185 */
|
||||
0, /* 186 */
|
||||
@@ -688,7 +524,7 @@ static const TclIntStubs tclIntStubs = {
|
||||
TclGetSrcInfoForPc, /* 233 */
|
||||
TclVarHashCreateVar, /* 234 */
|
||||
TclInitVarHashTable, /* 235 */
|
||||
TclBackgroundException, /* 236 */
|
||||
0, /* 236 */
|
||||
TclResetCancellation, /* 237 */
|
||||
TclNRInterpProc, /* 238 */
|
||||
TclNRInterpProcCore, /* 239 */
|
||||
@@ -725,10 +561,10 @@ static const TclIntPlatStubs tclIntPlatStubs = {
|
||||
TclpOpenFile, /* 7 */
|
||||
TclUnixWaitForFile, /* 8 */
|
||||
TclpCreateTempFile, /* 9 */
|
||||
TclpReaddir, /* 10 */
|
||||
TclpLocaltime_unix, /* 11 */
|
||||
TclpGmtime_unix, /* 12 */
|
||||
TclpInetNtoa, /* 13 */
|
||||
0, /* 10 */
|
||||
0, /* 11 */
|
||||
0, /* 12 */
|
||||
0, /* 13 */
|
||||
TclUnixCopyFile, /* 14 */
|
||||
0, /* 15 */
|
||||
0, /* 16 */
|
||||
@@ -749,16 +585,16 @@ static const TclIntPlatStubs tclIntPlatStubs = {
|
||||
#endif /* UNIX */
|
||||
#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */
|
||||
TclWinConvertError, /* 0 */
|
||||
TclWinConvertWSAError, /* 1 */
|
||||
TclWinGetServByName, /* 2 */
|
||||
TclWinGetSockOpt, /* 3 */
|
||||
0, /* 1 */
|
||||
0, /* 2 */
|
||||
0, /* 3 */
|
||||
TclWinGetTclInstance, /* 4 */
|
||||
TclUnixWaitForFile, /* 5 */
|
||||
TclWinNToHS, /* 6 */
|
||||
TclWinSetSockOpt, /* 7 */
|
||||
0, /* 6 */
|
||||
0, /* 7 */
|
||||
TclpGetPid, /* 8 */
|
||||
TclWinGetPlatformId, /* 9 */
|
||||
TclpReaddir, /* 10 */
|
||||
0, /* 10 */
|
||||
TclGetAndDetachPids, /* 11 */
|
||||
TclpCloseFile, /* 12 */
|
||||
TclpCreateCommandChannel, /* 13 */
|
||||
@@ -769,12 +605,12 @@ static const TclIntPlatStubs tclIntPlatStubs = {
|
||||
TclpMakeFile, /* 18 */
|
||||
TclpOpenFile, /* 19 */
|
||||
TclWinAddProcess, /* 20 */
|
||||
TclpInetNtoa, /* 21 */
|
||||
0, /* 21 */
|
||||
TclpCreateTempFile, /* 22 */
|
||||
0, /* 23 */
|
||||
TclWinNoBackslash, /* 24 */
|
||||
0, /* 25 */
|
||||
TclWinSetInterfaces, /* 26 */
|
||||
0, /* 26 */
|
||||
TclWinFlushDirtyChannels, /* 27 */
|
||||
TclWinResetInterfaces, /* 28 */
|
||||
TclWinCPUID, /* 29 */
|
||||
@@ -791,10 +627,10 @@ static const TclIntPlatStubs tclIntPlatStubs = {
|
||||
TclpOpenFile, /* 7 */
|
||||
TclUnixWaitForFile, /* 8 */
|
||||
TclpCreateTempFile, /* 9 */
|
||||
TclpReaddir, /* 10 */
|
||||
TclpLocaltime_unix, /* 11 */
|
||||
TclpGmtime_unix, /* 12 */
|
||||
TclpInetNtoa, /* 13 */
|
||||
0, /* 10 */
|
||||
0, /* 11 */
|
||||
0, /* 12 */
|
||||
0, /* 13 */
|
||||
TclUnixCopyFile, /* 14 */
|
||||
TclMacOSXGetFileAttribute, /* 15 */
|
||||
TclMacOSXSetFileAttribute, /* 16 */
|
||||
@@ -1061,7 +897,7 @@ const TclStubs tclStubs = {
|
||||
Tcl_ErrnoMsg, /* 128 */
|
||||
Tcl_Eval, /* 129 */
|
||||
Tcl_EvalFile, /* 130 */
|
||||
Tcl_EvalObj, /* 131 */
|
||||
0, /* 131 */
|
||||
Tcl_EventuallyFree, /* 132 */
|
||||
Tcl_Exit, /* 133 */
|
||||
Tcl_ExposeCommand, /* 134 */
|
||||
@@ -1116,7 +952,7 @@ const TclStubs tclStubs = {
|
||||
Tcl_GetVar, /* 175 */
|
||||
Tcl_GetVar2, /* 176 */
|
||||
Tcl_GlobalEval, /* 177 */
|
||||
Tcl_GlobalEvalObj, /* 178 */
|
||||
0, /* 178 */
|
||||
Tcl_HideCommand, /* 179 */
|
||||
Tcl_Init, /* 180 */
|
||||
Tcl_InitHashTable, /* 181 */
|
||||
@@ -1158,7 +994,7 @@ const TclStubs tclStubs = {
|
||||
Tcl_ResetResult, /* 217 */
|
||||
Tcl_ScanElement, /* 218 */
|
||||
Tcl_ScanCountedElement, /* 219 */
|
||||
Tcl_SeekOld, /* 220 */
|
||||
0, /* 220 */
|
||||
Tcl_ServiceAll, /* 221 */
|
||||
Tcl_ServiceEvent, /* 222 */
|
||||
Tcl_SetAssocData, /* 223 */
|
||||
@@ -1184,7 +1020,7 @@ const TclStubs tclStubs = {
|
||||
Tcl_SplitPath, /* 243 */
|
||||
Tcl_StaticPackage, /* 244 */
|
||||
Tcl_StringMatch, /* 245 */
|
||||
Tcl_TellOld, /* 246 */
|
||||
0, /* 246 */
|
||||
Tcl_TraceVar, /* 247 */
|
||||
Tcl_TraceVar2, /* 248 */
|
||||
Tcl_TranslateFileName, /* 249 */
|
||||
@@ -1205,18 +1041,18 @@ const TclStubs tclStubs = {
|
||||
Tcl_WrongNumArgs, /* 264 */
|
||||
Tcl_DumpActiveMemory, /* 265 */
|
||||
Tcl_ValidateAllMemory, /* 266 */
|
||||
Tcl_AppendResultVA, /* 267 */
|
||||
Tcl_AppendStringsToObjVA, /* 268 */
|
||||
0, /* 267 */
|
||||
0, /* 268 */
|
||||
Tcl_HashStats, /* 269 */
|
||||
Tcl_ParseVar, /* 270 */
|
||||
Tcl_PkgPresent, /* 271 */
|
||||
Tcl_PkgPresentEx, /* 272 */
|
||||
Tcl_PkgProvide, /* 273 */
|
||||
Tcl_PkgRequire, /* 274 */
|
||||
Tcl_SetErrorCodeVA, /* 275 */
|
||||
Tcl_VarEvalVA, /* 276 */
|
||||
0, /* 275 */
|
||||
0, /* 276 */
|
||||
Tcl_WaitPid, /* 277 */
|
||||
Tcl_PanicVA, /* 278 */
|
||||
0, /* 278 */
|
||||
Tcl_GetVersion, /* 279 */
|
||||
Tcl_InitMemory, /* 280 */
|
||||
Tcl_StackChannel, /* 281 */
|
||||
|
||||
@@ -66,8 +66,8 @@ Tcl_InitStubs(
|
||||
*/
|
||||
|
||||
if (!stubsPtr || (stubsPtr->magic != (((exact&0xff00) >= 0x900) ? magic : TCL_STUB_MAGIC))) {
|
||||
iPtr->result = (char *)"interpreter uses an incompatible stubs mechanism";
|
||||
iPtr->freeProc = 0;
|
||||
iPtr->legacyResult = "interpreter uses an incompatible stubs mechanism";
|
||||
iPtr->legacyFreeProc = 0; /* TCL_STATIC */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
+2
-6
@@ -5238,7 +5238,6 @@ TestsaveresultCmd(
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* The argument objects. */
|
||||
{
|
||||
Interp* iPtr = (Interp*) interp;
|
||||
int discard, result, index;
|
||||
Tcl_SavedResult state;
|
||||
Tcl_Obj *objPtr;
|
||||
@@ -5306,12 +5305,9 @@ TestsaveresultCmd(
|
||||
}
|
||||
|
||||
switch ((enum options) index) {
|
||||
case RESULT_DYNAMIC: {
|
||||
int presentOrFreed = (iPtr->freeProc == TestsaveresultFree) ^ freeCount;
|
||||
|
||||
Tcl_AppendElement(interp, presentOrFreed ? "presentOrFreed" : "missingOrLeak");
|
||||
case RESULT_DYNAMIC:
|
||||
Tcl_AppendElement(interp, freeCount ? "freed" : "leak");
|
||||
break;
|
||||
}
|
||||
case RESULT_OBJECT:
|
||||
Tcl_AppendElement(interp, Tcl_GetObjResult(interp) == objPtr
|
||||
? "same" : "different");
|
||||
|
||||
+28
-333
@@ -93,13 +93,6 @@ static ProcessGlobalValue executableName = {
|
||||
#define CONVERT_MASK (CONVERT_BRACE | CONVERT_ESCAPE)
|
||||
#define CONVERT_ANY 16
|
||||
|
||||
/*
|
||||
* The following key is used by Tcl_PrintDouble and TclPrecTraceProc to
|
||||
* access the precision to be used for double formatting.
|
||||
*/
|
||||
|
||||
static Tcl_ThreadDataKey precisionKey;
|
||||
|
||||
/*
|
||||
* Prototypes for functions defined later in this file.
|
||||
*/
|
||||
@@ -2906,86 +2899,12 @@ Tcl_DStringGetResult(
|
||||
Tcl_DString *dsPtr) /* Dynamic string that is to become the result
|
||||
* of interp. */
|
||||
{
|
||||
#ifdef TCL_NO_DEPRECATED
|
||||
Tcl_Obj *obj = Tcl_GetObjResult(interp);
|
||||
const char *bytes = TclGetString(obj);
|
||||
int length;
|
||||
char *bytes = TclGetStringFromObj(Tcl_GetObjResult(interp), &length);
|
||||
|
||||
Tcl_DStringFree(dsPtr);
|
||||
Tcl_DStringAppend(dsPtr, bytes, obj->length);
|
||||
Tcl_DStringAppend(dsPtr, bytes, length);
|
||||
Tcl_ResetResult(interp);
|
||||
#else
|
||||
Interp *iPtr = (Interp *) interp;
|
||||
|
||||
if (dsPtr->string != dsPtr->staticSpace) {
|
||||
ckfree(dsPtr->string);
|
||||
}
|
||||
|
||||
/*
|
||||
* Do more efficient transfer when we know the result is a Tcl_Obj. When
|
||||
* there's no string result, we only have to deal with two cases:
|
||||
*
|
||||
* 1. When the string rep is the empty string, when we don't copy but
|
||||
* instead use the staticSpace in the DString to hold an empty string.
|
||||
|
||||
* 2. When the string rep is not there or there's a real string rep, when
|
||||
* we use Tcl_GetString to fetch (or generate) the string rep - which
|
||||
* we know to have been allocated with ckalloc() - and use it to
|
||||
* populate the DString space. Then, we free the internal rep. and set
|
||||
* the object's string representation back to the canonical empty
|
||||
* string.
|
||||
*/
|
||||
|
||||
if (!iPtr->result[0] && iPtr->objResultPtr
|
||||
&& !Tcl_IsShared(iPtr->objResultPtr)) {
|
||||
if (iPtr->objResultPtr->bytes == &tclEmptyString) {
|
||||
dsPtr->string = dsPtr->staticSpace;
|
||||
dsPtr->string[0] = 0;
|
||||
dsPtr->length = 0;
|
||||
dsPtr->spaceAvl = TCL_DSTRING_STATIC_SIZE;
|
||||
} else {
|
||||
dsPtr->string = TclGetString(iPtr->objResultPtr);
|
||||
dsPtr->length = iPtr->objResultPtr->length;
|
||||
dsPtr->spaceAvl = dsPtr->length + 1;
|
||||
TclFreeIntRep(iPtr->objResultPtr);
|
||||
iPtr->objResultPtr->bytes = &tclEmptyString;
|
||||
iPtr->objResultPtr->length = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the string result is empty, move the object result to the string
|
||||
* result, then reset the object result.
|
||||
*/
|
||||
|
||||
(void) Tcl_GetStringResult(interp);
|
||||
|
||||
dsPtr->length = strlen(iPtr->result);
|
||||
if (iPtr->freeProc != NULL) {
|
||||
if (iPtr->freeProc == TCL_DYNAMIC) {
|
||||
dsPtr->string = iPtr->result;
|
||||
dsPtr->spaceAvl = dsPtr->length+1;
|
||||
} else {
|
||||
dsPtr->string = ckalloc(dsPtr->length+1);
|
||||
memcpy(dsPtr->string, iPtr->result, (unsigned) dsPtr->length+1);
|
||||
iPtr->freeProc(iPtr->result);
|
||||
}
|
||||
dsPtr->spaceAvl = dsPtr->length+1;
|
||||
iPtr->freeProc = NULL;
|
||||
} else {
|
||||
if (dsPtr->length < TCL_DSTRING_STATIC_SIZE) {
|
||||
dsPtr->string = dsPtr->staticSpace;
|
||||
dsPtr->spaceAvl = TCL_DSTRING_STATIC_SIZE;
|
||||
} else {
|
||||
dsPtr->string = ckalloc(dsPtr->length+1);
|
||||
dsPtr->spaceAvl = dsPtr->length + 1;
|
||||
}
|
||||
memcpy(dsPtr->string, iPtr->result, (unsigned) dsPtr->length+1);
|
||||
}
|
||||
|
||||
iPtr->result = iPtr->resultSpace;
|
||||
iPtr->resultSpace[0] = 0;
|
||||
#endif /* !TCL_NO_DEPRECATED */
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3111,10 +3030,9 @@ Tcl_DStringEndSublist(
|
||||
* string using.
|
||||
*
|
||||
* Results:
|
||||
* The ASCII equivalent of "value" is written at "dst". It is written
|
||||
* using the current precision, and it is guaranteed to contain a decimal
|
||||
* point or exponent, so that it looks like a floating-point value and
|
||||
* not an integer.
|
||||
* The ASCII equivalent of "value" is written at "dst". It is guaranteed
|
||||
* to contain a decimal point or exponent, so that it looks like a
|
||||
* floating-point value and not an integer.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
@@ -3124,9 +3042,7 @@ Tcl_DStringEndSublist(
|
||||
|
||||
void
|
||||
Tcl_PrintDouble(
|
||||
Tcl_Interp *interp, /* Interpreter whose tcl_precision variable
|
||||
* used to be used to control printing. It's
|
||||
* ignored now. */
|
||||
Tcl_Interp *interp, /* Not used */
|
||||
double value, /* Value to print as string. */
|
||||
char *dst) /* Where to store converted value; must have
|
||||
* at least TCL_DOUBLE_SPACE characters. */
|
||||
@@ -3136,7 +3052,6 @@ Tcl_PrintDouble(
|
||||
int signum;
|
||||
char *digits;
|
||||
char *end;
|
||||
int *precisionPtr = Tcl_GetThreadData(&precisionKey, sizeof(int));
|
||||
|
||||
/*
|
||||
* Handle NaN.
|
||||
@@ -3168,53 +3083,8 @@ Tcl_PrintDouble(
|
||||
* Ordinary (normal and denormal) values.
|
||||
*/
|
||||
|
||||
if (*precisionPtr == 0) {
|
||||
digits = TclDoubleDigits(value, -1, TCL_DD_SHORTEST,
|
||||
&exponent, &signum, &end);
|
||||
} else {
|
||||
/*
|
||||
* There are at least two possible interpretations for tcl_precision.
|
||||
*
|
||||
* The first is, "choose the decimal representation having
|
||||
* $tcl_precision digits of significance that is nearest to the given
|
||||
* number, breaking ties by rounding to even, and then trimming
|
||||
* trailing zeros." This gives the greatest possible precision in the
|
||||
* decimal string, but offers the anomaly that [expr 0.1] will be
|
||||
* "0.10000000000000001".
|
||||
*
|
||||
* The second is "choose the decimal representation having at most
|
||||
* $tcl_precision digits of significance that is nearest to the given
|
||||
* number. If no such representation converts exactly to the given
|
||||
* number, choose the one that is closest, breaking ties by rounding
|
||||
* to even. If more than one such representation converts exactly to
|
||||
* the given number, choose the shortest, breaking ties in favour of
|
||||
* the nearest, breaking remaining ties in favour of the one ending in
|
||||
* an even digit."
|
||||
*
|
||||
* Tcl 8.4 implements the first of these, which gives rise to
|
||||
* anomalies in formatting:
|
||||
*
|
||||
* % expr 0.1
|
||||
* 0.10000000000000001
|
||||
* % expr 0.01
|
||||
* 0.01
|
||||
* % expr 1e-7
|
||||
* 9.9999999999999995e-08
|
||||
*
|
||||
* For human readability, it appears better to choose the second rule,
|
||||
* and let [expr 0.1] return 0.1. But for 8.4 compatibility, we prefer
|
||||
* the first (the recommended zero value for tcl_precision avoids the
|
||||
* problem entirely).
|
||||
*
|
||||
* Uncomment TCL_DD_SHORTEN_FLAG in the next call to prefer the method
|
||||
* that allows floating point values to be shortened if it can be done
|
||||
* without loss of precision.
|
||||
*/
|
||||
|
||||
digits = TclDoubleDigits(value, *precisionPtr,
|
||||
TCL_DD_E_FORMAT /* | TCL_DD_SHORTEN_FLAG */,
|
||||
&exponent, &signum, &end);
|
||||
}
|
||||
digits = TclDoubleDigits(value, -1, TCL_DD_SHORTEST,
|
||||
&exponent, &signum, &end);
|
||||
if (signum) {
|
||||
*dst++ = '-';
|
||||
}
|
||||
@@ -3234,16 +3104,7 @@ Tcl_PrintDouble(
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Tcl 8.4 appears to format with at least a two-digit exponent;
|
||||
* preserve that behaviour when tcl_precision != 0
|
||||
*/
|
||||
|
||||
if (*precisionPtr == 0) {
|
||||
sprintf(dst, "e%+d", exponent);
|
||||
} else {
|
||||
sprintf(dst, "e%+03d", exponent);
|
||||
}
|
||||
sprintf(dst, "e%+d", exponent);
|
||||
} else {
|
||||
/*
|
||||
* F format for others.
|
||||
@@ -3278,84 +3139,6 @@ Tcl_PrintDouble(
|
||||
ckfree(digits);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclPrecTraceProc --
|
||||
*
|
||||
* This function is invoked whenever the variable "tcl_precision" is
|
||||
* written.
|
||||
*
|
||||
* Results:
|
||||
* Returns NULL if all went well, or an error message if the new value
|
||||
* for the variable doesn't make sense.
|
||||
*
|
||||
* Side effects:
|
||||
* If the new value doesn't make sense then this function undoes the
|
||||
* effect of the variable modification. Otherwise it modifies the format
|
||||
* string that's used by Tcl_PrintDouble.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* ARGSUSED */
|
||||
char *
|
||||
TclPrecTraceProc(
|
||||
ClientData clientData, /* Not used. */
|
||||
Tcl_Interp *interp, /* Interpreter containing variable. */
|
||||
const char *name1, /* Name of variable. */
|
||||
const char *name2, /* Second part of variable name. */
|
||||
int flags) /* Information about what happened. */
|
||||
{
|
||||
Tcl_Obj *value;
|
||||
int prec;
|
||||
int *precisionPtr = Tcl_GetThreadData(&precisionKey, sizeof(int));
|
||||
|
||||
/*
|
||||
* If the variable is unset, then recreate the trace.
|
||||
*/
|
||||
|
||||
if (flags & TCL_TRACE_UNSETS) {
|
||||
if ((flags & TCL_TRACE_DESTROYED) && !Tcl_InterpDeleted(interp)) {
|
||||
Tcl_TraceVar2(interp, name1, name2,
|
||||
TCL_GLOBAL_ONLY|TCL_TRACE_READS|TCL_TRACE_WRITES
|
||||
|TCL_TRACE_UNSETS, TclPrecTraceProc, clientData);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* When the variable is read, reset its value from our shared value. This
|
||||
* is needed in case the variable was modified in some other interpreter
|
||||
* so that this interpreter's value is out of date.
|
||||
*/
|
||||
|
||||
|
||||
if (flags & TCL_TRACE_READS) {
|
||||
Tcl_SetVar2Ex(interp, name1, name2, Tcl_NewIntObj(*precisionPtr),
|
||||
flags & TCL_GLOBAL_ONLY);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* The variable is being written. Check the new value and disallow it if
|
||||
* it isn't reasonable or if this is a safe interpreter (we don't want
|
||||
* safe interpreters messing up the precision of other interpreters).
|
||||
*/
|
||||
|
||||
if (Tcl_IsSafe(interp)) {
|
||||
return (char *) "can't modify precision from a safe interpreter";
|
||||
}
|
||||
value = Tcl_GetVar2Ex(interp, name1, name2, flags & TCL_GLOBAL_ONLY);
|
||||
if (value == NULL
|
||||
|| Tcl_GetIntFromObj(NULL, value, &prec) != TCL_OK
|
||||
|| prec < 0 || prec > TCL_MAX_PREC) {
|
||||
return (char *) "improper value for precision";
|
||||
}
|
||||
*precisionPtr = prec;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
@@ -3536,21 +3319,26 @@ TclFormatInt(
|
||||
*
|
||||
* TclGetIntForIndex --
|
||||
*
|
||||
* This function returns an integer corresponding to the list index held
|
||||
* in a Tcl object. The Tcl object's value is expected to be in the
|
||||
* format integer([+-]integer)? or the format end([+-]integer)?.
|
||||
* Provides an integer corresponding to the list index held in a Tcl
|
||||
* object. The string value 'objPtr' is expected have the format
|
||||
* integer([+-]integer)? or end([+-]integer)?.
|
||||
*
|
||||
* Results:
|
||||
* The return value is normally TCL_OK, which means that the index was
|
||||
* successfully stored into the location referenced by "indexPtr". If the
|
||||
* Tcl object referenced by "objPtr" has the value "end", the value
|
||||
* stored is "endValue". If "objPtr"s values is not of one of the
|
||||
* expected formats, TCL_ERROR is returned and, if "interp" is non-NULL,
|
||||
* an error message is left in the interpreter's result object.
|
||||
* Value
|
||||
* TCL_OK
|
||||
*
|
||||
* Side effects:
|
||||
* The object referenced by "objPtr" might be converted to an integer,
|
||||
* wide integer, or end-based-index object.
|
||||
* The index is stored at the address given by by 'indexPtr'. If
|
||||
* 'objPtr' has the value "end", the value stored is 'endValue'.
|
||||
*
|
||||
* TCL_ERROR
|
||||
*
|
||||
* The value of 'objPtr' does not have one of the expected formats. If
|
||||
* 'interp' is non-NULL, an error message is left in the interpreter's
|
||||
* result object.
|
||||
*
|
||||
* Effect
|
||||
*
|
||||
* The object referenced by 'objPtr' is converted, as needed, to an
|
||||
* integer, wide integer, or end-based-index object.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@@ -3638,7 +3426,6 @@ TclGetIntForIndex(
|
||||
if (!strncmp(bytes, "end-", 4)) {
|
||||
bytes += 4;
|
||||
}
|
||||
TclCheckBadOctal(interp, bytes);
|
||||
Tcl_SetErrorCode(interp, "TCL", "VALUE", "INDEX", NULL);
|
||||
}
|
||||
|
||||
@@ -3779,73 +3566,6 @@ SetEndOffsetFromAny(
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclCheckBadOctal --
|
||||
*
|
||||
* This function checks for a bad octal value and appends a meaningful
|
||||
* error to the interp's result.
|
||||
*
|
||||
* Results:
|
||||
* 1 if the argument was a bad octal, else 0.
|
||||
*
|
||||
* Side effects:
|
||||
* The interpreter's result is modified.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
int
|
||||
TclCheckBadOctal(
|
||||
Tcl_Interp *interp, /* Interpreter to use for error reporting. If
|
||||
* NULL, then no error message is left after
|
||||
* errors. */
|
||||
const char *value) /* String to check. */
|
||||
{
|
||||
register const char *p = value;
|
||||
|
||||
/*
|
||||
* A frequent mistake is invalid octal values due to an unwanted leading
|
||||
* zero. Try to generate a meaningful error message.
|
||||
*/
|
||||
|
||||
while (TclIsSpaceProc(*p)) {
|
||||
p++;
|
||||
}
|
||||
if (*p == '+' || *p == '-') {
|
||||
p++;
|
||||
}
|
||||
if (*p == '0') {
|
||||
if ((p[1] == 'o') || p[1] == 'O') {
|
||||
p += 2;
|
||||
}
|
||||
while (isdigit(UCHAR(*p))) { /* INTL: digit. */
|
||||
p++;
|
||||
}
|
||||
while (TclIsSpaceProc(*p)) {
|
||||
p++;
|
||||
}
|
||||
if (*p == '\0') {
|
||||
/*
|
||||
* Reached end of string.
|
||||
*/
|
||||
|
||||
if (interp != NULL) {
|
||||
/*
|
||||
* Don't reset the result here because we want this result to
|
||||
* be added to an existing error message as extra info.
|
||||
*/
|
||||
|
||||
Tcl_AppendToObj(Tcl_GetObjResult(interp),
|
||||
" (looks like invalid octal number)", -1);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
@@ -4195,31 +3915,6 @@ Tcl_GetNameOfExecutable(void)
|
||||
return bytes;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclpGetTime --
|
||||
*
|
||||
* Deprecated synonym for Tcl_GetTime. This function is provided for the
|
||||
* benefit of extensions written before Tcl_GetTime was exported from the
|
||||
* library.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* Stores current time in the buffer designated by "timePtr"
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
TclpGetTime(
|
||||
Tcl_Time *timePtr)
|
||||
{
|
||||
Tcl_GetTime(timePtr);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
|
||||
+6
-6
@@ -816,12 +816,8 @@ TclLookupSimpleVar(
|
||||
*indexPtr = -1;
|
||||
flags = (flags | TCL_GLOBAL_ONLY) & ~TCL_NAMESPACE_ONLY;
|
||||
} else {
|
||||
if (flags & TCL_AVOID_RESOLVERS) {
|
||||
flags = (flags | TCL_NAMESPACE_ONLY);
|
||||
}
|
||||
if (flags & TCL_NAMESPACE_ONLY) {
|
||||
*indexPtr = -2;
|
||||
}
|
||||
flags = (flags | TCL_NAMESPACE_ONLY);
|
||||
*indexPtr = -2;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -5709,6 +5705,10 @@ ObjFindNamespaceVar(
|
||||
* Find the namespace(s) that contain the variable.
|
||||
*/
|
||||
|
||||
if (!(flags & TCL_GLOBAL_ONLY)) {
|
||||
flags |= TCL_NAMESPACE_ONLY;
|
||||
}
|
||||
|
||||
TclGetNamespaceForQualName(interp, name, (Namespace *) contextNsPtr,
|
||||
flags, &nsPtr[0], &nsPtr[1], &cxtNsPtr, &simpleName);
|
||||
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
if {[info commands package] == ""} {
|
||||
error "version mismatch: library\nscripts expect Tcl version 7.5b1 or later but the loaded version is\nonly [info patchlevel]"
|
||||
}
|
||||
package require -exact Tcl 8.7a2
|
||||
package require -exact Tcl 9.0a0
|
||||
|
||||
# Compute the auto path to use in this interpreter.
|
||||
# The values on the path come from several locations:
|
||||
|
||||
+1
-1
@@ -113,7 +113,7 @@ proc ::safe::CheckInterp {slave} {
|
||||
# we had the bad idea to support for the sake of user simplicity in
|
||||
# create/init but which makes life hard in configure...
|
||||
# So this will be hopefully written and some integrated with opt1.0
|
||||
# (hopefully for tcl8.1 ?)
|
||||
# (hopefully for tcl9.0 ?)
|
||||
proc ::safe::interpConfigure {args} {
|
||||
switch [llength $args] {
|
||||
1 {
|
||||
|
||||
+3
-3
@@ -113,7 +113,7 @@ The following build configurations are available:
|
||||
The Xcode projects refer to the toplevel tcl source directory via the
|
||||
TCL_SRCROOT user build setting, by default this is set to the project-relative
|
||||
path '../../tcl', if your tcl source directory is named differently, e.g.
|
||||
'../../tcl8.7', you need to manually change the TCL_SRCROOT setting by editing
|
||||
'../../tcl9.0', you need to manually change the TCL_SRCROOT setting by editing
|
||||
your ${USER}.pbxuser file (located inside the Tcl.xcodeproj bundle directory)
|
||||
with a text editor.
|
||||
|
||||
@@ -141,9 +141,9 @@ Detailed Instructions for building with macosx/GNUmakefile
|
||||
- Unpack the Tcl source release archive.
|
||||
|
||||
- The following instructions assume the Tcl source tree is named "tcl${ver}",
|
||||
(where ${ver} is a shell variable containing the Tcl version number e.g. '8.7').
|
||||
(where ${ver} is a shell variable containing the Tcl version number e.g. '9.0').
|
||||
Setup this shell variable as follows:
|
||||
ver="8.7"
|
||||
ver="9.0"
|
||||
If you are building from CVS, omit this step (CVS source tree names usually do
|
||||
not contain a version number).
|
||||
|
||||
|
||||
@@ -34,4 +34,4 @@ TCL_CONFIGURE_ARGS = --enable-threads --enable-dtrace
|
||||
TCL_LIBRARY = $(LIBDIR)/tcl$(VERSION)
|
||||
TCL_PACKAGE_PATH = "$(LIBDIR)"
|
||||
TCL_DEFS = HAVE_TCL_CONFIG_H
|
||||
VERSION = 8.7
|
||||
VERSION = 9.0
|
||||
|
||||
+1
-1
@@ -781,7 +781,7 @@ test assemble-7.43 {uplus} {
|
||||
}
|
||||
}
|
||||
-returnCodes error
|
||||
-result {can't use non-numeric floating-point value as operand of "+"}
|
||||
-result {can't use non-numeric floating-point value "NaN" as operand of "+"}
|
||||
}
|
||||
test assemble-7.43.1 {tryCvtToNumeric} {
|
||||
-body {
|
||||
|
||||
+2
-6
@@ -893,10 +893,7 @@ test basic-48.16.$noComp {expansion: testing for leaks} -setup {
|
||||
rename stress {}
|
||||
} -result 0
|
||||
|
||||
test basic-48.17.$noComp {expansion: object safety} -setup {
|
||||
set old_precision $::tcl_precision
|
||||
set ::tcl_precision 4
|
||||
} -constraints $constraints -body {
|
||||
test basic-48.17.$noComp {expansion: object safety} -constraints $constraints -body {
|
||||
set third [expr {1.0/3.0}]
|
||||
set l [list $third $third]
|
||||
set x [run {list $third {*}$l $third}]
|
||||
@@ -906,8 +903,7 @@ test basic-48.17.$noComp {expansion: object safety} -setup {
|
||||
}
|
||||
set res
|
||||
} -cleanup {
|
||||
set ::tcl_precision $old_precision
|
||||
unset old_precision res t l x third
|
||||
unset res t l x third
|
||||
} -result {1.0 1.0 1.0 1.0}
|
||||
|
||||
test basic-48.18.$noComp {expansion: list semantics} -constraints $constraints -body {
|
||||
|
||||
+12
-12
@@ -285,10 +285,10 @@ test compExpr-old-6.8 {CompileBitXorExpr: error compiling bitxor arm} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test compExpr-old-6.9 {CompileBitXorExpr: runtime error in bitxor arm} {
|
||||
list [catch {expr {24.0^3}} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "^"}}
|
||||
} {1 {can't use floating-point value "24.0" as operand of "^"}}
|
||||
test compExpr-old-6.10 {CompileBitXorExpr: runtime error in bitxor arm} {
|
||||
list [catch {expr {"a"^"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "^"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "^"}}
|
||||
|
||||
test compExpr-old-7.1 {CompileBitAndExpr: just equality expr} {expr 3==2} 0
|
||||
test compExpr-old-7.2 {CompileBitAndExpr: just equality expr} {expr 2.0==2} 1
|
||||
@@ -309,10 +309,10 @@ test compExpr-old-7.11 {CompileBitAndExpr: error compiling bitand arm} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test compExpr-old-7.12 {CompileBitAndExpr: runtime error in bitand arm} {
|
||||
list [catch {expr {24.0&3}} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "&"}}
|
||||
} {1 {can't use floating-point value "24.0" as operand of "&"}}
|
||||
test compExpr-old-7.13 {CompileBitAndExpr: runtime error in bitand arm} {
|
||||
list [catch {expr {"a"&"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "&"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "&"}}
|
||||
|
||||
test compExpr-old-8.1 {CompileEqualityExpr: just relational expr} {expr 3>=2} 1
|
||||
test compExpr-old-8.2 {CompileEqualityExpr: just relational expr} {expr 2<=2.1} 1
|
||||
@@ -377,10 +377,10 @@ test compExpr-old-10.9 {CompileShiftExpr: error compiling shift arm} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test compExpr-old-10.10 {CompileShiftExpr: runtime error} {
|
||||
list [catch {expr {24.0>>43}} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of ">>"}}
|
||||
} {1 {can't use floating-point value "24.0" as operand of ">>"}}
|
||||
test compExpr-old-10.11 {CompileShiftExpr: runtime error} {
|
||||
list [catch {expr {"a"<<"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "<<"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "<<"}}
|
||||
|
||||
test compExpr-old-11.1 {CompileAddExpr: just multiply expr} {expr 4*-2} -8
|
||||
test compExpr-old-11.2 {CompileAddExpr: just multiply expr} {expr 0xff%2} 1
|
||||
@@ -399,10 +399,10 @@ test compExpr-old-11.9 {CompileAddExpr: error compiling add arm} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test compExpr-old-11.10 {CompileAddExpr: runtime error} {
|
||||
list [catch {expr {24.0+"xx"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "xx" as operand of "+"}}
|
||||
test compExpr-old-11.11 {CompileAddExpr: runtime error} {
|
||||
list [catch {expr {"a"-"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "-"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "-"}}
|
||||
test compExpr-old-11.12 {CompileAddExpr: runtime error} {
|
||||
list [catch {expr {3/0}} msg] $msg
|
||||
} {1 {divide by zero}}
|
||||
@@ -430,10 +430,10 @@ test compExpr-old-12.9 {CompileMultiplyExpr: error compiling multiply arm} -body
|
||||
} -returnCodes error -match glob -result *
|
||||
test compExpr-old-12.10 {CompileMultiplyExpr: runtime error} {
|
||||
list [catch {expr {24.0*"xx"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "*"}}
|
||||
} {1 {can't use non-numeric string "xx" as operand of "*"}}
|
||||
test compExpr-old-12.11 {CompileMultiplyExpr: runtime error} {
|
||||
list [catch {expr {"a"/"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "/"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "/"}}
|
||||
|
||||
test compExpr-old-13.1 {CompileUnaryExpr: unary exprs} {expr -0xff} -255
|
||||
test compExpr-old-13.2 {CompileUnaryExpr: unary exprs} {expr +0o00123} 83
|
||||
@@ -451,10 +451,10 @@ test compExpr-old-13.9 {CompileUnaryExpr: error compiling unary expr} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test compExpr-old-13.10 {CompileUnaryExpr: runtime error} {
|
||||
list [catch {expr {~"xx"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "~"}}
|
||||
} {1 {can't use non-numeric string "xx" as operand of "~"}}
|
||||
test compExpr-old-13.11 {CompileUnaryExpr: runtime error} {
|
||||
list [catch {expr ~4.0} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "~"}}
|
||||
} {1 {can't use floating-point value "4.0" as operand of "~"}}
|
||||
test compExpr-old-13.12 {CompileUnaryExpr: just primary expr} {expr 0x123} 291
|
||||
test compExpr-old-13.13 {CompileUnaryExpr: just primary expr} {
|
||||
set a 27
|
||||
|
||||
+1
-1
@@ -323,7 +323,7 @@ test compile-11.2 {Tcl_Append*: ensure Tcl_ResetResult is used properly} -body {
|
||||
} -returnCodes error -result {bad index "bogus": must be integer?[+-]integer? or end?[+-]integer?}
|
||||
test compile-11.3 {Tcl_Append*: ensure Tcl_ResetResult is used properly} -body {
|
||||
apply {{} { set r [list foobar] ; string index a 0o9 }}
|
||||
} -returnCodes error -match glob -result {*invalid octal number*}
|
||||
} -returnCodes error -match glob -result {*}
|
||||
test compile-11.4 {Tcl_Append*: ensure Tcl_ResetResult is used properly} -body {
|
||||
apply {{} { set r [list foobar] ; array set var {one two many} }}
|
||||
} -returnCodes error -result {list must have an even number of elements}
|
||||
|
||||
+11
-11
@@ -174,7 +174,7 @@ test execute-3.5 {TclExecuteByteCode, INST_ADD, op1 is string double} {testobj}
|
||||
test execute-3.6 {TclExecuteByteCode, INST_ADD, op1 is non-numeric} {testobj} {
|
||||
set x [teststringobj set 0 foo]
|
||||
list [catch {expr {$x + 1}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "foo" as operand of "+"}}
|
||||
test execute-3.7 {TclExecuteByteCode, INST_ADD, op2 is int} {testobj} {
|
||||
set x [testintobj set 0 1]
|
||||
expr {1 + $x}
|
||||
@@ -199,7 +199,7 @@ test execute-3.11 {TclExecuteByteCode, INST_ADD, op2 is string double} {testobj}
|
||||
test execute-3.12 {TclExecuteByteCode, INST_ADD, op2 is non-numeric} {testobj} {
|
||||
set x [teststringobj set 0 foo]
|
||||
list [catch {expr {1 + $x}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "foo" as operand of "+"}}
|
||||
|
||||
# INST_SUB is partially tested:
|
||||
test execute-3.13 {TclExecuteByteCode, INST_SUB, op1 is int} {testobj} {
|
||||
@@ -226,7 +226,7 @@ test execute-3.17 {TclExecuteByteCode, INST_SUB, op1 is string double} {testobj}
|
||||
test execute-3.18 {TclExecuteByteCode, INST_SUB, op1 is non-numeric} {testobj} {
|
||||
set x [teststringobj set 0 foo]
|
||||
list [catch {expr {$x - 1}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "-"}}
|
||||
} {1 {can't use non-numeric string "foo" as operand of "-"}}
|
||||
test execute-3.19 {TclExecuteByteCode, INST_SUB, op2 is int} {testobj} {
|
||||
set x [testintobj set 0 1]
|
||||
expr {1 - $x}
|
||||
@@ -251,7 +251,7 @@ test execute-3.23 {TclExecuteByteCode, INST_SUB, op2 is string double} {testobj}
|
||||
test execute-3.24 {TclExecuteByteCode, INST_SUB, op2 is non-numeric} {testobj} {
|
||||
set x [teststringobj set 0 foo]
|
||||
list [catch {expr {1 - $x}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "-"}}
|
||||
} {1 {can't use non-numeric string "foo" as operand of "-"}}
|
||||
|
||||
# INST_MULT is partially tested:
|
||||
test execute-3.25 {TclExecuteByteCode, INST_MULT, op1 is int} {testobj} {
|
||||
@@ -278,7 +278,7 @@ test execute-3.29 {TclExecuteByteCode, INST_MULT, op1 is string double} {testobj
|
||||
test execute-3.30 {TclExecuteByteCode, INST_MULT, op1 is non-numeric} {testobj} {
|
||||
set x [teststringobj set 1 foo]
|
||||
list [catch {expr {$x * 1}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "*"}}
|
||||
} {1 {can't use non-numeric string "foo" as operand of "*"}}
|
||||
test execute-3.31 {TclExecuteByteCode, INST_MULT, op2 is int} {testobj} {
|
||||
set x [testintobj set 1 1]
|
||||
expr {1 * $x}
|
||||
@@ -303,7 +303,7 @@ test execute-3.35 {TclExecuteByteCode, INST_MULT, op2 is string double} {testobj
|
||||
test execute-3.36 {TclExecuteByteCode, INST_MULT, op2 is non-numeric} {testobj} {
|
||||
set x [teststringobj set 1 foo]
|
||||
list [catch {expr {1 * $x}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "*"}}
|
||||
} {1 {can't use non-numeric string "foo" as operand of "*"}}
|
||||
|
||||
# INST_DIV is partially tested:
|
||||
test execute-3.37 {TclExecuteByteCode, INST_DIV, op1 is int} {testobj} {
|
||||
@@ -330,7 +330,7 @@ test execute-3.41 {TclExecuteByteCode, INST_DIV, op1 is string double} {testobj}
|
||||
test execute-3.42 {TclExecuteByteCode, INST_DIV, op1 is non-numeric} {testobj} {
|
||||
set x [teststringobj set 1 foo]
|
||||
list [catch {expr {$x / 1}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "/"}}
|
||||
} {1 {can't use non-numeric string "foo" as operand of "/"}}
|
||||
test execute-3.43 {TclExecuteByteCode, INST_DIV, op2 is int} {testobj} {
|
||||
set x [testintobj set 1 1]
|
||||
expr {2 / $x}
|
||||
@@ -355,7 +355,7 @@ test execute-3.47 {TclExecuteByteCode, INST_DIV, op2 is string double} {testobj}
|
||||
test execute-3.48 {TclExecuteByteCode, INST_DIV, op2 is non-numeric} {testobj} {
|
||||
set x [teststringobj set 1 foo]
|
||||
list [catch {expr {1 / $x}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "/"}}
|
||||
} {1 {can't use non-numeric string "foo" as operand of "/"}}
|
||||
|
||||
# INST_UPLUS is partially tested:
|
||||
test execute-3.49 {TclExecuteByteCode, INST_UPLUS, op is int} {testobj} {
|
||||
@@ -382,7 +382,7 @@ test execute-3.53 {TclExecuteByteCode, INST_UPLUS, op is string double} {testobj
|
||||
test execute-3.54 {TclExecuteByteCode, INST_UPLUS, op is non-numeric} {testobj} {
|
||||
set x [teststringobj set 1 foo]
|
||||
list [catch {expr {+ $x}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "foo" as operand of "+"}}
|
||||
|
||||
# INST_UMINUS is partially tested:
|
||||
test execute-3.55 {TclExecuteByteCode, INST_UMINUS, op is int} {testobj} {
|
||||
@@ -409,7 +409,7 @@ test execute-3.59 {TclExecuteByteCode, INST_UMINUS, op is string double} {testob
|
||||
test execute-3.60 {TclExecuteByteCode, INST_UMINUS, op is non-numeric} {testobj} {
|
||||
set x [teststringobj set 1 foo]
|
||||
list [catch {expr {- $x}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "-"}}
|
||||
} {1 {can't use non-numeric string "foo" as operand of "-"}}
|
||||
|
||||
# INST_LNOT is partially tested:
|
||||
test execute-3.61 {TclExecuteByteCode, INST_LNOT, op is int} {testobj} {
|
||||
@@ -457,7 +457,7 @@ test execute-3.70 {TclExecuteByteCode, INST_LNOT, op is string double} {testobj}
|
||||
test execute-3.71 {TclExecuteByteCode, INST_LNOT, op is non-numeric} {testobj} {
|
||||
set x [teststringobj set 1 foo]
|
||||
list [catch {expr {! $x}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "!"}}
|
||||
} {1 {can't use non-numeric string "foo" as operand of "!"}}
|
||||
|
||||
# INST_BITNOT not tested
|
||||
# INST_CALL_BUILTIN_FUNC1 not tested
|
||||
|
||||
+32
-32
@@ -197,34 +197,34 @@ test expr-old-2.38 {floating-point operators} {
|
||||
|
||||
test expr-old-3.1 {illegal floating-point operations} {
|
||||
list [catch {expr ~4.0} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "~"}}
|
||||
} {1 {can't use floating-point value "4.0" as operand of "~"}}
|
||||
test expr-old-3.2 {illegal floating-point operations} {
|
||||
list [catch {expr 27%4.0} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "%"}}
|
||||
} {1 {can't use floating-point value "4.0" as operand of "%"}}
|
||||
test expr-old-3.3 {illegal floating-point operations} {
|
||||
list [catch {expr 27.0%4} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "%"}}
|
||||
} {1 {can't use floating-point value "27.0" as operand of "%"}}
|
||||
test expr-old-3.4 {illegal floating-point operations} {
|
||||
list [catch {expr 1.0<<3} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "<<"}}
|
||||
} {1 {can't use floating-point value "1.0" as operand of "<<"}}
|
||||
test expr-old-3.5 {illegal floating-point operations} {
|
||||
list [catch {expr 3<<1.0} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "<<"}}
|
||||
} {1 {can't use floating-point value "1.0" as operand of "<<"}}
|
||||
test expr-old-3.6 {illegal floating-point operations} {
|
||||
list [catch {expr 24.0>>3} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of ">>"}}
|
||||
} {1 {can't use floating-point value "24.0" as operand of ">>"}}
|
||||
test expr-old-3.7 {illegal floating-point operations} {
|
||||
list [catch {expr 24>>3.0} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of ">>"}}
|
||||
} {1 {can't use floating-point value "3.0" as operand of ">>"}}
|
||||
test expr-old-3.8 {illegal floating-point operations} {
|
||||
list [catch {expr 24&3.0} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "&"}}
|
||||
} {1 {can't use floating-point value "3.0" as operand of "&"}}
|
||||
test expr-old-3.9 {illegal floating-point operations} {
|
||||
list [catch {expr 24.0|3} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "|"}}
|
||||
} {1 {can't use floating-point value "24.0" as operand of "|"}}
|
||||
test expr-old-3.10 {illegal floating-point operations} {
|
||||
list [catch {expr 24.0^3} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "^"}}
|
||||
} {1 {can't use floating-point value "24.0" as operand of "^"}}
|
||||
|
||||
# Check the string operators individually.
|
||||
|
||||
@@ -265,46 +265,46 @@ test expr-old-4.32 {string operators} {expr {0?"foo":"bar"}} bar
|
||||
|
||||
test expr-old-5.1 {illegal string operations} {
|
||||
list [catch {expr {-"a"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "-"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "-"}}
|
||||
test expr-old-5.2 {illegal string operations} {
|
||||
list [catch {expr {+"a"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "+"}}
|
||||
test expr-old-5.3 {illegal string operations} {
|
||||
list [catch {expr {~"a"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "~"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "~"}}
|
||||
test expr-old-5.4 {illegal string operations} {
|
||||
list [catch {expr {!"a"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "!"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "!"}}
|
||||
test expr-old-5.5 {illegal string operations} {
|
||||
list [catch {expr {"a"*"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "*"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "*"}}
|
||||
test expr-old-5.6 {illegal string operations} {
|
||||
list [catch {expr {"a"/"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "/"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "/"}}
|
||||
test expr-old-5.7 {illegal string operations} {
|
||||
list [catch {expr {"a"%"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "%"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "%"}}
|
||||
test expr-old-5.8 {illegal string operations} {
|
||||
list [catch {expr {"a"+"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "+"}}
|
||||
test expr-old-5.9 {illegal string operations} {
|
||||
list [catch {expr {"a"-"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "-"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "-"}}
|
||||
test expr-old-5.10 {illegal string operations} {
|
||||
list [catch {expr {"a"<<"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "<<"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "<<"}}
|
||||
test expr-old-5.11 {illegal string operations} {
|
||||
list [catch {expr {"a">>"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of ">>"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of ">>"}}
|
||||
test expr-old-5.12 {illegal string operations} {
|
||||
list [catch {expr {"a"&"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "&"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "&"}}
|
||||
test expr-old-5.13 {illegal string operations} {
|
||||
list [catch {expr {"a"^"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "^"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "^"}}
|
||||
test expr-old-5.14 {illegal string operations} {
|
||||
list [catch {expr {"a"|"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "|"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "|"}}
|
||||
test expr-old-5.15 {illegal string operations} {
|
||||
list [catch {expr {"a"&&"b"}} msg] $msg
|
||||
} {1 {expected boolean value but got "a"}}
|
||||
@@ -493,7 +493,7 @@ test expr-old-25.20 {type conversions} {expr 10.0} 10.0
|
||||
|
||||
test expr-old-26.1 {error conditions} {
|
||||
list [catch {expr 2+"a"} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "+"}}
|
||||
test expr-old-26.2 {error conditions} -body {
|
||||
expr 2+4*
|
||||
} -returnCodes error -match glob -result *
|
||||
@@ -507,10 +507,10 @@ test expr-old-26.4 {error conditions} {
|
||||
set a xx
|
||||
test expr-old-26.5 {error conditions} {
|
||||
list [catch {expr {2+$a}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "xx" as operand of "+"}}
|
||||
test expr-old-26.6 {error conditions} {
|
||||
list [catch {expr {2+[set a]}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "xx" as operand of "+"}}
|
||||
test expr-old-26.7 {error conditions} -body {
|
||||
expr {2+(4}
|
||||
} -returnCodes error -match glob -result *
|
||||
@@ -534,7 +534,7 @@ test expr-old-26.12 {error conditions} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test expr-old-26.13 {error conditions} {
|
||||
list [catch {expr {"a"/"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "/"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "/"}}
|
||||
test expr-old-26.14 {error conditions} -body {
|
||||
expr 2:3
|
||||
} -returnCodes error -match glob -result *
|
||||
@@ -963,7 +963,7 @@ test expr-old-36.1 {ExprLooksLikeInt procedure} -body {
|
||||
test expr-old-36.2 {ExprLooksLikeInt procedure} {
|
||||
set x 0o289
|
||||
list [catch {expr {$x+1}} msg] $msg
|
||||
} {1 {can't use invalid octal number as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "0o289" as operand of "+"}}
|
||||
test expr-old-36.3 {ExprLooksLikeInt procedure} {
|
||||
list [catch {expr 0289.1} msg] $msg
|
||||
} {0 289.1}
|
||||
@@ -1003,11 +1003,11 @@ test expr-old-36.11 {ExprLooksLikeInt procedure} {
|
||||
test expr-old-36.12 {ExprLooksLikeInt procedure} {
|
||||
set x "10;"
|
||||
list [catch {expr {$x+1}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "10;" as operand of "+"}}
|
||||
test expr-old-36.13 {ExprLooksLikeInt procedure} {
|
||||
set x " +"
|
||||
list [catch {expr {$x+1}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "+"}}
|
||||
} {1 {can't use non-numeric string " +" as operand of "+"}}
|
||||
test expr-old-36.14 {ExprLooksLikeInt procedure} {
|
||||
set x "123456789012345678901234567890 "
|
||||
expr {$x+1}
|
||||
@@ -1015,7 +1015,7 @@ test expr-old-36.14 {ExprLooksLikeInt procedure} {
|
||||
test expr-old-36.15 {ExprLooksLikeInt procedure} {
|
||||
set x "0o99 "
|
||||
list [catch {expr {$x+1}} msg] $msg
|
||||
} {1 {can't use invalid octal number as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "0o99 " as operand of "+"}}
|
||||
test expr-old-36.16 {ExprLooksLikeInt procedure} {
|
||||
set x " 0xffffffffffffffffffffffffffffffffffffff "
|
||||
expr {$x+1}
|
||||
|
||||
+23
-23
@@ -257,7 +257,7 @@ test expr-4.9 {CompileLorExpr: long lor arm} {
|
||||
} 1
|
||||
test expr-4.10 {CompileLorExpr: error compiling ! operand} {
|
||||
list [catch {expr {!"a"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "!"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "!"}}
|
||||
test expr-4.11 {CompileLorExpr: error compiling land arms} {
|
||||
list [catch {expr {"a"||0}} msg] $msg
|
||||
} {1 {expected boolean value but got "a"}}
|
||||
@@ -304,10 +304,10 @@ test expr-6.8 {CompileBitXorExpr: error compiling bitxor arm} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test expr-6.9 {CompileBitXorExpr: runtime error in bitxor arm} {
|
||||
list [catch {expr {24.0^3}} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "^"}}
|
||||
} {1 {can't use floating-point value "24.0" as operand of "^"}}
|
||||
test expr-6.10 {CompileBitXorExpr: runtime error in bitxor arm} {
|
||||
list [catch {expr {"a"^"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "^"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "^"}}
|
||||
|
||||
test expr-7.1 {CompileBitAndExpr: just equality expr} {expr 3==2} 0
|
||||
test expr-7.2 {CompileBitAndExpr: just equality expr} {expr 2.0==2} 1
|
||||
@@ -328,10 +328,10 @@ test expr-7.11 {CompileBitAndExpr: error compiling bitand arm} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test expr-7.12 {CompileBitAndExpr: runtime error in bitand arm} {
|
||||
list [catch {expr {24.0&3}} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "&"}}
|
||||
} {1 {can't use floating-point value "24.0" as operand of "&"}}
|
||||
test expr-7.13 {CompileBitAndExpr: runtime error in bitand arm} {
|
||||
list [catch {expr {"a"&"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "&"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "&"}}
|
||||
test expr-7.14 {CompileBitAndExpr: equality expr} {expr 3eq2} 0
|
||||
test expr-7.18 {CompileBitAndExpr: equality expr} {expr {"abc" eq "abd"}} 0
|
||||
test expr-7.20 {CompileBitAndExpr: error in equality expr} -body {
|
||||
@@ -456,10 +456,10 @@ test expr-10.9 {CompileShiftExpr: error compiling shift arm} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test expr-10.10 {CompileShiftExpr: runtime error} {
|
||||
list [catch {expr {24.0>>43}} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of ">>"}}
|
||||
} {1 {can't use floating-point value "24.0" as operand of ">>"}}
|
||||
test expr-10.11 {CompileShiftExpr: runtime error} {
|
||||
list [catch {expr {"a"<<"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "<<"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "<<"}}
|
||||
|
||||
test expr-11.1 {CompileAddExpr: just multiply expr} {expr 4*-2} -8
|
||||
test expr-11.2 {CompileAddExpr: just multiply expr} {expr 0xff%2} 1
|
||||
@@ -478,10 +478,10 @@ test expr-11.9 {CompileAddExpr: error compiling add arm} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test expr-11.10 {CompileAddExpr: runtime error} {
|
||||
list [catch {expr {24.0+"xx"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "xx" as operand of "+"}}
|
||||
test expr-11.11 {CompileAddExpr: runtime error} {
|
||||
list [catch {expr {"a"-"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "-"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "-"}}
|
||||
test expr-11.12 {CompileAddExpr: runtime error} {
|
||||
list [catch {expr {3/0}} msg] $msg
|
||||
} {1 {divide by zero}}
|
||||
@@ -509,10 +509,10 @@ test expr-12.9 {CompileMultiplyExpr: error compiling multiply arm} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test expr-12.10 {CompileMultiplyExpr: runtime error} {
|
||||
list [catch {expr {24.0*"xx"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "*"}}
|
||||
} {1 {can't use non-numeric string "xx" as operand of "*"}}
|
||||
test expr-12.11 {CompileMultiplyExpr: runtime error} {
|
||||
list [catch {expr {"a"/"b"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "/"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "/"}}
|
||||
|
||||
test expr-13.1 {CompileUnaryExpr: unary exprs} {expr -0xff} -255
|
||||
test expr-13.2 {CompileUnaryExpr: unary exprs} {expr +0o00123} 83
|
||||
@@ -529,10 +529,10 @@ test expr-13.9 {CompileUnaryExpr: error compiling unary expr} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test expr-13.10 {CompileUnaryExpr: runtime error} {
|
||||
list [catch {expr {~"xx"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "~"}}
|
||||
} {1 {can't use non-numeric string "xx" as operand of "~"}}
|
||||
test expr-13.11 {CompileUnaryExpr: runtime error} {
|
||||
list [catch {expr ~4.0} msg] $msg
|
||||
} {1 {can't use floating-point value as operand of "~"}}
|
||||
} {1 {can't use floating-point value "4.0" as operand of "~"}}
|
||||
test expr-13.12 {CompileUnaryExpr: just primary expr} {expr 0x123} 291
|
||||
test expr-13.13 {CompileUnaryExpr: just primary expr} {
|
||||
set a 27
|
||||
@@ -844,15 +844,15 @@ test expr-21.13 {non-numeric boolean literals} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test expr-21.14 {non-numeric boolean literals} {
|
||||
list [catch {expr !"truef"} err] $err
|
||||
} {1 {can't use non-numeric string as operand of "!"}}
|
||||
} {1 {can't use non-numeric string "truef" as operand of "!"}}
|
||||
test expr-21.15 {non-numeric boolean variables} {
|
||||
set v truef
|
||||
list [catch {expr {!$v}} err] $err
|
||||
} {1 {can't use non-numeric string as operand of "!"}}
|
||||
} {1 {can't use non-numeric string "truef" as operand of "!"}}
|
||||
test expr-21.16 {non-numeric boolean variables} {
|
||||
set v "true "
|
||||
list [catch {expr {!$v}} err] $err
|
||||
} {1 {can't use non-numeric string as operand of "!"}}
|
||||
} {1 {can't use non-numeric string "true " as operand of "!"}}
|
||||
test expr-21.17 {non-numeric boolean variables} {
|
||||
set v "tru"
|
||||
list [catch {expr {!$v}} err] $err
|
||||
@@ -872,23 +872,23 @@ test expr-21.20 {non-numeric boolean variables} {
|
||||
test expr-21.21 {non-numeric boolean variables} {
|
||||
set v "o"
|
||||
list [catch {expr {!$v}} err] $err
|
||||
} {1 {can't use non-numeric string as operand of "!"}}
|
||||
} {1 {can't use non-numeric string "o" as operand of "!"}}
|
||||
test expr-21.22 {non-numeric boolean variables} {
|
||||
set v ""
|
||||
list [catch {expr {!$v}} err] $err
|
||||
} {1 {can't use empty string as operand of "!"}}
|
||||
} {1 {can't use non-numeric string "" as operand of "!"}}
|
||||
|
||||
# Test for non-numeric float handling.
|
||||
test expr-22.1 {non-numeric floats} {
|
||||
list [catch {expr {NaN + 1}} msg] $msg
|
||||
} {1 {can't use non-numeric floating-point value as operand of "+"}}
|
||||
} {1 {can't use non-numeric floating-point value "NaN" as operand of "+"}}
|
||||
test expr-22.2 {non-numeric floats} !ieeeFloatingPoint {
|
||||
list [catch {expr {Inf + 1}} msg] $msg
|
||||
} {1 {can't use infinite floating-point value as operand of "+"}}
|
||||
test expr-22.3 {non-numeric floats} {
|
||||
set nan NaN
|
||||
list [catch {expr {$nan + 1}} msg] $msg
|
||||
} {1 {can't use non-numeric floating-point value as operand of "+"}}
|
||||
} {1 {can't use non-numeric floating-point value "NaN" as operand of "+"}}
|
||||
test expr-22.4 {non-numeric floats} !ieeeFloatingPoint {
|
||||
set inf Inf
|
||||
list [catch {expr {$inf + 1}} msg] $msg
|
||||
@@ -901,7 +901,7 @@ test expr-22.6 {non-numeric floats} !ieeeFloatingPoint {
|
||||
} {1 {floating-point value too large to represent}}
|
||||
test expr-22.7 {non-numeric floats} {
|
||||
list [catch {expr {1 / NaN}} msg] $msg
|
||||
} {1 {can't use non-numeric floating-point value as operand of "/"}}
|
||||
} {1 {can't use non-numeric floating-point value "NaN" as operand of "/"}}
|
||||
test expr-22.8 {non-numeric floats} !ieeeFloatingPoint {
|
||||
list [catch {expr {1 / Inf}} msg] $msg
|
||||
} {1 {can't use infinite floating-point value as operand of "/"}}
|
||||
@@ -937,10 +937,10 @@ test expr-23.8 {CompileExponentialExpr: error compiling expo arm} -body {
|
||||
} -returnCodes error -match glob -result *
|
||||
test expr-23.9 {CompileExponentialExpr: runtime error} {
|
||||
list [catch {expr {24.0**"xx"}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "**"}}
|
||||
} {1 {can't use non-numeric string "xx" as operand of "**"}}
|
||||
test expr-23.10 {CompileExponentialExpr: runtime error} {
|
||||
list [catch {expr {"a"**2}} msg] $msg
|
||||
} {1 {can't use non-numeric string as operand of "**"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "**"}}
|
||||
test expr-23.11 {CompileExponentialExpr: runtime error} {
|
||||
list [catch {expr {0**-1}} msg] $msg
|
||||
} {1 {exponentiation of zero by negative power}}
|
||||
|
||||
+4
-4
@@ -98,17 +98,17 @@ test get-3.2 {Tcl_GetDouble(FromObj), bad numbers} {
|
||||
} {0 1 0 1 1 {expected floating-point number but got "++1.0"} 1 {expected floating-point number but got "+-1.0"} 1 {expected floating-point number but got "-+1.0"} 0 -1 1 {expected floating-point number but got "--1.0"} 1 {expected floating-point number but got "- +1.0"}}
|
||||
# Bug 7114ac6141
|
||||
test get-3.3 {tcl_GetInt with iffy numbers} testgetint {
|
||||
lmap x {0 " 0" "0 " " 0 " " 0xa " " 007 " " 0o10 " " 0b10 "} {
|
||||
lmap x {0 " 0" "0 " " 0 " " 0xa " " 010 " " 0o10 " " 0b10 "} {
|
||||
catch {testgetint 44 $x} x
|
||||
set x
|
||||
}
|
||||
} {44 44 44 44 54 51 52 46}
|
||||
} {44 44 44 44 54 54 52 46}
|
||||
test get-3.4 {Tcl_GetDouble with iffy numbers} testdoubleobj {
|
||||
lmap x {0 0.0 " .0" ".0 " " 0e0 " "07" "- 0" "-0" "0o12" "0b10"} {
|
||||
lmap x {0 0.0 " .0" ".0 " " 0e0 " "09" "- 0" "-0" "0o12" "0b10"} {
|
||||
catch {testdoubleobj set 1 $x} x
|
||||
set x
|
||||
}
|
||||
} {0.0 0.0 0.0 0.0 0.0 7.0 {expected floating-point number but got "- 0"} 0.0 10.0 2.0}
|
||||
} {0.0 0.0 0.0 0.0 0.0 9.0 {expected floating-point number but got "- 0"} 0.0 10.0 2.0}
|
||||
|
||||
# cleanup
|
||||
::tcltest::cleanupTests
|
||||
|
||||
+8
-8
@@ -70,11 +70,11 @@ test lindex-3.4 {integer 3} testevalex {
|
||||
test lindex-3.5 {bad octal} -constraints testevalex -body {
|
||||
set x 0o8
|
||||
list [catch { testevalex {lindex {a b c} $x} } result] $result
|
||||
} -match glob -result {1 {*invalid octal number*}}
|
||||
} -match glob -result {1 {*}}
|
||||
test lindex-3.6 {bad octal} -constraints testevalex -body {
|
||||
set x -0o9
|
||||
list [catch { testevalex {lindex {a b c} $x} } result] $result
|
||||
} -match glob -result {1 {*invalid octal number*}}
|
||||
} -match glob -result {1 {*}}
|
||||
test lindex-3.7 {indexes don't shimmer wide ints} {
|
||||
set x [expr {(wide(1)<<31) - 2}]
|
||||
list $x [lindex {1 2 3} $x] [incr x] [incr x]
|
||||
@@ -105,11 +105,11 @@ test lindex-4.5 {index = end-3} testevalex {
|
||||
test lindex-4.6 {bad octal} -constraints testevalex -body {
|
||||
set x end-0o8
|
||||
list [catch { testevalex {lindex {a b c} $x} } result] $result
|
||||
} -match glob -result {1 {*invalid octal number*}}
|
||||
} -match glob -result {1 {*}}
|
||||
test lindex-4.7 {bad octal} -constraints testevalex -body {
|
||||
set x end--0o9
|
||||
list [catch { testevalex {lindex {a b c} $x} } result] $result
|
||||
} -match glob -result {1 {*invalid octal number*}}
|
||||
} -match glob -result {1 {*}}
|
||||
test lindex-4.8 {bad integer, not octal} testevalex {
|
||||
set x end-0a2
|
||||
list [catch { testevalex {lindex {a b c} $x} } result] $result
|
||||
@@ -261,11 +261,11 @@ test lindex-11.4 {integer 3} {
|
||||
test lindex-11.5 {bad octal} -body {
|
||||
set x 0o8
|
||||
list [catch { lindex {a b c} $x } result] $result
|
||||
} -match glob -result {1 {*invalid octal number*}}
|
||||
} -match glob -result {1 {*}}
|
||||
test lindex-11.6 {bad octal} -body {
|
||||
set x -0o9
|
||||
list [catch { lindex {a b c} $x } result] $result
|
||||
} -match glob -result {1 {*invalid octal number*}}
|
||||
} -match glob -result {1 {*}}
|
||||
|
||||
# Indices relative to end
|
||||
|
||||
@@ -307,11 +307,11 @@ test lindex-12.5 {index = end-3} {
|
||||
test lindex-12.6 {bad octal} -body {
|
||||
set x end-0o8
|
||||
list [catch { lindex {a b c} $x } result] $result
|
||||
} -match glob -result {1 {*invalid octal number*}}
|
||||
} -match glob -result {1 {*}}
|
||||
test lindex-12.7 {bad octal} -body {
|
||||
set x end--0o9
|
||||
list [catch { lindex {a b c} $x } result] $result
|
||||
} -match glob -result {1 {*invalid octal number*}}
|
||||
} -match glob -result {1 {*}}
|
||||
test lindex-12.8 {bad integer, not octal} {
|
||||
set x end-0a2
|
||||
list [catch { lindex {a b c} $x } result] $result
|
||||
|
||||
+97
-97
@@ -114,22 +114,22 @@ namespace eval ::testmathop {
|
||||
test mathop-1.10 {compiled +} { + 1 2 3000000000000000000000 } 3000000000000000000003
|
||||
test mathop-1.11 {compiled +: errors} -returnCodes error -body {
|
||||
+ x 0
|
||||
} -result {can't use non-numeric string as operand of "+"}
|
||||
} -result {can't use non-numeric string "x" as operand of "+"}
|
||||
test mathop-1.12 {compiled +: errors} -returnCodes error -body {
|
||||
+ nan 0
|
||||
} -result {can't use non-numeric floating-point value as operand of "+"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "+"}
|
||||
test mathop-1.13 {compiled +: errors} -returnCodes error -body {
|
||||
+ 0 x
|
||||
} -result {can't use non-numeric string as operand of "+"}
|
||||
} -result {can't use non-numeric string "x" as operand of "+"}
|
||||
test mathop-1.14 {compiled +: errors} -returnCodes error -body {
|
||||
+ 0 nan
|
||||
} -result {can't use non-numeric floating-point value as operand of "+"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "+"}
|
||||
test mathop-1.15 {compiled +: errors} -returnCodes error -body {
|
||||
+ 0o8 0
|
||||
} -result {can't use invalid octal number as operand of "+"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "+"}
|
||||
test mathop-1.16 {compiled +: errors} -returnCodes error -body {
|
||||
+ 0 0o8
|
||||
} -result {can't use invalid octal number as operand of "+"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "+"}
|
||||
test mathop-1.17 {compiled +: errors} -returnCodes error -body {
|
||||
+ 0 [error expectedError]
|
||||
} -result expectedError
|
||||
@@ -152,22 +152,22 @@ namespace eval ::testmathop {
|
||||
test mathop-1.28 {interpreted +} { $op 1 2 3000000000000000000000 } 3000000000000000000003
|
||||
test mathop-1.29 {interpreted +: errors} -returnCodes error -body {
|
||||
$op x 0
|
||||
} -result {can't use non-numeric string as operand of "+"}
|
||||
} -result {can't use non-numeric string "x" as operand of "+"}
|
||||
test mathop-1.30 {interpreted +: errors} -returnCodes error -body {
|
||||
$op nan 0
|
||||
} -result {can't use non-numeric floating-point value as operand of "+"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "+"}
|
||||
test mathop-1.31 {interpreted +: errors} -returnCodes error -body {
|
||||
$op 0 x
|
||||
} -result {can't use non-numeric string as operand of "+"}
|
||||
} -result {can't use non-numeric string "x" as operand of "+"}
|
||||
test mathop-1.32 {interpreted +: errors} -returnCodes error -body {
|
||||
$op 0 nan
|
||||
} -result {can't use non-numeric floating-point value as operand of "+"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "+"}
|
||||
test mathop-1.33 {interpreted +: errors} -returnCodes error -body {
|
||||
$op 0o8 0
|
||||
} -result {can't use invalid octal number as operand of "+"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "+"}
|
||||
test mathop-1.34 {interpreted +: errors} -returnCodes error -body {
|
||||
$op 0 0o8
|
||||
} -result {can't use invalid octal number as operand of "+"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "+"}
|
||||
test mathop-1.35 {interpreted +: errors} -returnCodes error -body {
|
||||
$op 0 [error expectedError]
|
||||
} -result expectedError
|
||||
@@ -189,22 +189,22 @@ namespace eval ::testmathop {
|
||||
test mathop-2.10 {compiled *} { * 1 2 3000000000000000000000 } 6000000000000000000000
|
||||
test mathop-2.11 {compiled *: errors} -returnCodes error -body {
|
||||
* x 0
|
||||
} -result {can't use non-numeric string as operand of "*"}
|
||||
} -result {can't use non-numeric string "x" as operand of "*"}
|
||||
test mathop-2.12 {compiled *: errors} -returnCodes error -body {
|
||||
* nan 0
|
||||
} -result {can't use non-numeric floating-point value as operand of "*"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "*"}
|
||||
test mathop-2.13 {compiled *: errors} -returnCodes error -body {
|
||||
* 0 x
|
||||
} -result {can't use non-numeric string as operand of "*"}
|
||||
} -result {can't use non-numeric string "x" as operand of "*"}
|
||||
test mathop-2.14 {compiled *: errors} -returnCodes error -body {
|
||||
* 0 nan
|
||||
} -result {can't use non-numeric floating-point value as operand of "*"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "*"}
|
||||
test mathop-2.15 {compiled *: errors} -returnCodes error -body {
|
||||
* 0o8 0
|
||||
} -result {can't use invalid octal number as operand of "*"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "*"}
|
||||
test mathop-2.16 {compiled *: errors} -returnCodes error -body {
|
||||
* 0 0o8
|
||||
} -result {can't use invalid octal number as operand of "*"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "*"}
|
||||
test mathop-2.17 {compiled *: errors} -returnCodes error -body {
|
||||
* 0 [error expectedError]
|
||||
} -result expectedError
|
||||
@@ -227,22 +227,22 @@ namespace eval ::testmathop {
|
||||
test mathop-2.28 {interpreted *} { $op 1 2 3000000000000000000000 } 6000000000000000000000
|
||||
test mathop-2.29 {interpreted *: errors} -returnCodes error -body {
|
||||
$op x 0
|
||||
} -result {can't use non-numeric string as operand of "*"}
|
||||
} -result {can't use non-numeric string "x" as operand of "*"}
|
||||
test mathop-2.30 {interpreted *: errors} -returnCodes error -body {
|
||||
$op nan 0
|
||||
} -result {can't use non-numeric floating-point value as operand of "*"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "*"}
|
||||
test mathop-2.31 {interpreted *: errors} -returnCodes error -body {
|
||||
$op 0 x
|
||||
} -result {can't use non-numeric string as operand of "*"}
|
||||
} -result {can't use non-numeric string "x" as operand of "*"}
|
||||
test mathop-2.32 {interpreted *: errors} -returnCodes error -body {
|
||||
$op 0 nan
|
||||
} -result {can't use non-numeric floating-point value as operand of "*"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "*"}
|
||||
test mathop-2.33 {interpreted *: errors} -returnCodes error -body {
|
||||
$op 0o8 0
|
||||
} -result {can't use invalid octal number as operand of "*"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "*"}
|
||||
test mathop-2.34 {interpreted *: errors} -returnCodes error -body {
|
||||
$op 0 0o8
|
||||
} -result {can't use invalid octal number as operand of "*"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "*"}
|
||||
test mathop-2.35 {interpreted *: errors} -returnCodes error -body {
|
||||
$op 0 [error expectedError]
|
||||
} -result expectedError
|
||||
@@ -261,7 +261,7 @@ namespace eval ::testmathop {
|
||||
test mathop-3.7 {compiled !} {! 10000000000000000000000000} 0
|
||||
test mathop-3.8 {compiled !: errors} -body {
|
||||
! foobar
|
||||
} -returnCodes error -result {can't use non-numeric string as operand of "!"}
|
||||
} -returnCodes error -result {can't use non-numeric string "foobar" as operand of "!"}
|
||||
test mathop-3.9 {compiled !: errors} -body {
|
||||
! 0 0
|
||||
} -returnCodes error -result "wrong # args: should be \"! boolean\""
|
||||
@@ -278,7 +278,7 @@ namespace eval ::testmathop {
|
||||
test mathop-3.17 {interpreted !} {$op 10000000000000000000000000} 0
|
||||
test mathop-3.18 {interpreted !: errors} -body {
|
||||
$op foobar
|
||||
} -returnCodes error -result {can't use non-numeric string as operand of "!"}
|
||||
} -returnCodes error -result {can't use non-numeric string "foobar" as operand of "!"}
|
||||
test mathop-3.19 {interpreted !: errors} -body {
|
||||
$op 0 0
|
||||
} -returnCodes error -result "wrong # args: should be \"! boolean\""
|
||||
@@ -287,10 +287,10 @@ namespace eval ::testmathop {
|
||||
} -returnCodes error -result "wrong # args: should be \"! boolean\""
|
||||
test mathop-3.21 {compiled !: error} -returnCodes error -body {
|
||||
! NaN
|
||||
} -result {can't use non-numeric floating-point value as operand of "!"}
|
||||
} -result {can't use non-numeric floating-point value "NaN" as operand of "!"}
|
||||
test mathop-3.22 {interpreted !: error} -returnCodes error -body {
|
||||
$op NaN
|
||||
} -result {can't use non-numeric floating-point value as operand of "!"}
|
||||
} -result {can't use non-numeric floating-point value "NaN" as operand of "!"}
|
||||
|
||||
test mathop-4.1 {compiled ~} {~ 0} -1
|
||||
test mathop-4.2 {compiled ~} {~ 1} -2
|
||||
@@ -301,7 +301,7 @@ namespace eval ::testmathop {
|
||||
test mathop-4.7 {compiled ~} {~ 10000000000000000000000000} -10000000000000000000000001
|
||||
test mathop-4.8 {compiled ~: errors} -body {
|
||||
~ foobar
|
||||
} -returnCodes error -result {can't use non-numeric string as operand of "~"}
|
||||
} -returnCodes error -result {can't use non-numeric string "foobar" as operand of "~"}
|
||||
test mathop-4.9 {compiled ~: errors} -body {
|
||||
~ 0 0
|
||||
} -returnCodes error -result "wrong # args: should be \"~ integer\""
|
||||
@@ -310,10 +310,10 @@ namespace eval ::testmathop {
|
||||
} -returnCodes error -result "wrong # args: should be \"~ integer\""
|
||||
test mathop-4.11 {compiled ~: errors} -returnCodes error -body {
|
||||
~ 0.0
|
||||
} -result {can't use floating-point value as operand of "~"}
|
||||
} -result {can't use floating-point value "0.0" as operand of "~"}
|
||||
test mathop-4.12 {compiled ~: errors} -returnCodes error -body {
|
||||
~ NaN
|
||||
} -result {can't use non-numeric floating-point value as operand of "~"}
|
||||
} -result {can't use non-numeric floating-point value "NaN" as operand of "~"}
|
||||
set op ~
|
||||
test mathop-4.13 {interpreted ~} {$op 0} -1
|
||||
test mathop-4.14 {interpreted ~} {$op 1} -2
|
||||
@@ -324,7 +324,7 @@ namespace eval ::testmathop {
|
||||
test mathop-4.19 {interpreted ~} {$op 10000000000000000000000000} -10000000000000000000000001
|
||||
test mathop-4.20 {interpreted ~: errors} -body {
|
||||
$op foobar
|
||||
} -returnCodes error -result {can't use non-numeric string as operand of "~"}
|
||||
} -returnCodes error -result {can't use non-numeric string "foobar" as operand of "~"}
|
||||
test mathop-4.21 {interpreted ~: errors} -body {
|
||||
$op 0 0
|
||||
} -returnCodes error -result "wrong # args: should be \"~ integer\""
|
||||
@@ -333,10 +333,10 @@ namespace eval ::testmathop {
|
||||
} -returnCodes error -result "wrong # args: should be \"~ integer\""
|
||||
test mathop-4.23 {interpreted ~: errors} -returnCodes error -body {
|
||||
$op 0.0
|
||||
} -result {can't use floating-point value as operand of "~"}
|
||||
} -result {can't use floating-point value "0.0" as operand of "~"}
|
||||
test mathop-4.24 {interpreted ~: errors} -returnCodes error -body {
|
||||
$op NaN
|
||||
} -result {can't use non-numeric floating-point value as operand of "~"}
|
||||
} -result {can't use non-numeric floating-point value "NaN" as operand of "~"}
|
||||
|
||||
test mathop-5.1 {compiled eq} {eq {} a} 0
|
||||
test mathop-5.2 {compiled eq} {eq a a} 1
|
||||
@@ -377,32 +377,32 @@ namespace eval ::testmathop {
|
||||
test mathop-6.4 {compiled &} { & 3 7 6 } 2
|
||||
test mathop-6.5 {compiled &} -returnCodes error -body {
|
||||
& 1.0 2 3
|
||||
} -result {can't use floating-point value as operand of "&"}
|
||||
} -result {can't use floating-point value "1.0" as operand of "&"}
|
||||
test mathop-6.6 {compiled &} -returnCodes error -body {
|
||||
& 1 2 3.0
|
||||
} -result {can't use floating-point value as operand of "&"}
|
||||
} -result {can't use floating-point value "3.0" as operand of "&"}
|
||||
test mathop-6.7 {compiled &} { & 100000000002 18 -126 } 2
|
||||
test mathop-6.8 {compiled &} { & 0xff 0o377 333333333333 } 85
|
||||
test mathop-6.9 {compiled &} { & 1000000000000000000002 18 -126 } 2
|
||||
test mathop-6.10 {compiled &} { & 0xff 0o377 3333333333333333333333 } 85
|
||||
test mathop-6.11 {compiled &: errors} -returnCodes error -body {
|
||||
& x 0
|
||||
} -result {can't use non-numeric string as operand of "&"}
|
||||
} -result {can't use non-numeric string "x" as operand of "&"}
|
||||
test mathop-6.12 {compiled &: errors} -returnCodes error -body {
|
||||
& nan 0
|
||||
} -result {can't use non-numeric floating-point value as operand of "&"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "&"}
|
||||
test mathop-6.13 {compiled &: errors} -returnCodes error -body {
|
||||
& 0 x
|
||||
} -result {can't use non-numeric string as operand of "&"}
|
||||
} -result {can't use non-numeric string "x" as operand of "&"}
|
||||
test mathop-6.14 {compiled &: errors} -returnCodes error -body {
|
||||
& 0 nan
|
||||
} -result {can't use non-numeric floating-point value as operand of "&"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "&"}
|
||||
test mathop-6.15 {compiled &: errors} -returnCodes error -body {
|
||||
& 0o8 0
|
||||
} -result {can't use invalid octal number as operand of "&"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "&"}
|
||||
test mathop-6.16 {compiled &: errors} -returnCodes error -body {
|
||||
& 0 0o8
|
||||
} -result {can't use invalid octal number as operand of "&"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "&"}
|
||||
test mathop-6.17 {compiled &: errors} -returnCodes error -body {
|
||||
& 0 [error expectedError]
|
||||
} -result expectedError
|
||||
@@ -419,32 +419,32 @@ namespace eval ::testmathop {
|
||||
test mathop-6.22 {interpreted &} { $op 3 7 6 } 2
|
||||
test mathop-6.23 {interpreted &} -returnCodes error -body {
|
||||
$op 1.0 2 3
|
||||
} -result {can't use floating-point value as operand of "&"}
|
||||
} -result {can't use floating-point value "1.0" as operand of "&"}
|
||||
test mathop-6.24 {interpreted &} -returnCodes error -body {
|
||||
$op 1 2 3.0
|
||||
} -result {can't use floating-point value as operand of "&"}
|
||||
} -result {can't use floating-point value "3.0" as operand of "&"}
|
||||
test mathop-6.25 {interpreted &} { $op 100000000002 18 -126 } 2
|
||||
test mathop-6.26 {interpreted &} { $op 0xff 0o377 333333333333 } 85
|
||||
test mathop-6.27 {interpreted &} { $op 1000000000000000000002 18 -126 } 2
|
||||
test mathop-6.28 {interpreted &} { $op 0xff 0o377 3333333333333333333333 } 85
|
||||
test mathop-6.29 {interpreted &: errors} -returnCodes error -body {
|
||||
$op x 0
|
||||
} -result {can't use non-numeric string as operand of "&"}
|
||||
} -result {can't use non-numeric string "x" as operand of "&"}
|
||||
test mathop-6.30 {interpreted &: errors} -returnCodes error -body {
|
||||
$op nan 0
|
||||
} -result {can't use non-numeric floating-point value as operand of "&"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "&"}
|
||||
test mathop-6.31 {interpreted &: errors} -returnCodes error -body {
|
||||
$op 0 x
|
||||
} -result {can't use non-numeric string as operand of "&"}
|
||||
} -result {can't use non-numeric string "x" as operand of "&"}
|
||||
test mathop-6.32 {interpreted &: errors} -returnCodes error -body {
|
||||
$op 0 nan
|
||||
} -result {can't use non-numeric floating-point value as operand of "&"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "&"}
|
||||
test mathop-6.33 {interpreted &: errors} -returnCodes error -body {
|
||||
$op 0o8 0
|
||||
} -result {can't use invalid octal number as operand of "&"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "&"}
|
||||
test mathop-6.34 {interpreted &: errors} -returnCodes error -body {
|
||||
$op 0 0o8
|
||||
} -result {can't use invalid octal number as operand of "&"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "&"}
|
||||
test mathop-6.35 {interpreted &: errors} -returnCodes error -body {
|
||||
$op 0 [error expectedError]
|
||||
} -result expectedError
|
||||
@@ -487,32 +487,32 @@ namespace eval ::testmathop {
|
||||
test mathop-7.4 {compiled |} { | 3 7 6 } 7
|
||||
test mathop-7.5 {compiled |} -returnCodes error -body {
|
||||
| 1.0 2 3
|
||||
} -result {can't use floating-point value as operand of "|"}
|
||||
} -result {can't use floating-point value "1.0" as operand of "|"}
|
||||
test mathop-7.6 {compiled |} -returnCodes error -body {
|
||||
| 1 2 3.0
|
||||
} -result {can't use floating-point value as operand of "|"}
|
||||
} -result {can't use floating-point value "3.0" as operand of "|"}
|
||||
test mathop-7.7 {compiled |} { | 100000000002 18 -126 } -110
|
||||
test mathop-7.8 {compiled |} { | 0xff 0o377 333333333333 } 333333333503
|
||||
test mathop-7.9 {compiled |} { | 1000000000000000000002 18 -126 } -110
|
||||
test mathop-7.10 {compiled |} { | 0xff 0o377 3333333333333333333333 } 3333333333333333333503
|
||||
test mathop-7.11 {compiled |: errors} -returnCodes error -body {
|
||||
| x 0
|
||||
} -result {can't use non-numeric string as operand of "|"}
|
||||
} -result {can't use non-numeric string "x" as operand of "|"}
|
||||
test mathop-7.12 {compiled |: errors} -returnCodes error -body {
|
||||
| nan 0
|
||||
} -result {can't use non-numeric floating-point value as operand of "|"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "|"}
|
||||
test mathop-7.13 {compiled |: errors} -returnCodes error -body {
|
||||
| 0 x
|
||||
} -result {can't use non-numeric string as operand of "|"}
|
||||
} -result {can't use non-numeric string "x" as operand of "|"}
|
||||
test mathop-7.14 {compiled |: errors} -returnCodes error -body {
|
||||
| 0 nan
|
||||
} -result {can't use non-numeric floating-point value as operand of "|"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "|"}
|
||||
test mathop-7.15 {compiled |: errors} -returnCodes error -body {
|
||||
| 0o8 0
|
||||
} -result {can't use invalid octal number as operand of "|"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "|"}
|
||||
test mathop-7.16 {compiled |: errors} -returnCodes error -body {
|
||||
| 0 0o8
|
||||
} -result {can't use invalid octal number as operand of "|"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "|"}
|
||||
test mathop-7.17 {compiled |: errors} -returnCodes error -body {
|
||||
| 0 [error expectedError]
|
||||
} -result expectedError
|
||||
@@ -529,32 +529,32 @@ namespace eval ::testmathop {
|
||||
test mathop-7.22 {interpreted |} { $op 3 7 6 } 7
|
||||
test mathop-7.23 {interpreted |} -returnCodes error -body {
|
||||
$op 1.0 2 3
|
||||
} -result {can't use floating-point value as operand of "|"}
|
||||
} -result {can't use floating-point value "1.0" as operand of "|"}
|
||||
test mathop-7.24 {interpreted |} -returnCodes error -body {
|
||||
$op 1 2 3.0
|
||||
} -result {can't use floating-point value as operand of "|"}
|
||||
} -result {can't use floating-point value "3.0" as operand of "|"}
|
||||
test mathop-7.25 {interpreted |} { $op 100000000002 18 -126 } -110
|
||||
test mathop-7.26 {interpreted |} { $op 0xff 0o377 333333333333 } 333333333503
|
||||
test mathop-7.27 {interpreted |} { $op 1000000000000000000002 18 -126 } -110
|
||||
test mathop-7.28 {interpreted |} { $op 0xff 0o377 3333333333333333333333 } 3333333333333333333503
|
||||
test mathop-7.29 {interpreted |: errors} -returnCodes error -body {
|
||||
$op x 0
|
||||
} -result {can't use non-numeric string as operand of "|"}
|
||||
} -result {can't use non-numeric string "x" as operand of "|"}
|
||||
test mathop-7.30 {interpreted |: errors} -returnCodes error -body {
|
||||
$op nan 0
|
||||
} -result {can't use non-numeric floating-point value as operand of "|"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "|"}
|
||||
test mathop-7.31 {interpreted |: errors} -returnCodes error -body {
|
||||
$op 0 x
|
||||
} -result {can't use non-numeric string as operand of "|"}
|
||||
} -result {can't use non-numeric string "x" as operand of "|"}
|
||||
test mathop-7.32 {interpreted |: errors} -returnCodes error -body {
|
||||
$op 0 nan
|
||||
} -result {can't use non-numeric floating-point value as operand of "|"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "|"}
|
||||
test mathop-7.33 {interpreted |: errors} -returnCodes error -body {
|
||||
$op 0o8 0
|
||||
} -result {can't use invalid octal number as operand of "|"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "|"}
|
||||
test mathop-7.34 {interpreted |: errors} -returnCodes error -body {
|
||||
$op 0 0o8
|
||||
} -result {can't use invalid octal number as operand of "|"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "|"}
|
||||
test mathop-7.35 {interpreted |: errors} -returnCodes error -body {
|
||||
$op 0 [error expectedError]
|
||||
} -result expectedError
|
||||
@@ -597,32 +597,32 @@ namespace eval ::testmathop {
|
||||
test mathop-8.4 {compiled ^} { ^ 3 7 6 } 2
|
||||
test mathop-8.5 {compiled ^} -returnCodes error -body {
|
||||
^ 1.0 2 3
|
||||
} -result {can't use floating-point value as operand of "^"}
|
||||
} -result {can't use floating-point value "1.0" as operand of "^"}
|
||||
test mathop-8.6 {compiled ^} -returnCodes error -body {
|
||||
^ 1 2 3.0
|
||||
} -result {can't use floating-point value as operand of "^"}
|
||||
} -result {can't use floating-point value "3.0" as operand of "^"}
|
||||
test mathop-8.7 {compiled ^} { ^ 100000000002 18 -126 } -100000000110
|
||||
test mathop-8.8 {compiled ^} { ^ 0xff 0o377 333333333333 } 333333333333
|
||||
test mathop-8.9 {compiled ^} { ^ 1000000000000000000002 18 -126 } -1000000000000000000110
|
||||
test mathop-8.10 {compiled ^} { ^ 0xff 0o377 3333333333333333333333 } 3333333333333333333333
|
||||
test mathop-8.11 {compiled ^: errors} -returnCodes error -body {
|
||||
^ x 0
|
||||
} -result {can't use non-numeric string as operand of "^"}
|
||||
} -result {can't use non-numeric string "x" as operand of "^"}
|
||||
test mathop-8.12 {compiled ^: errors} -returnCodes error -body {
|
||||
^ nan 0
|
||||
} -result {can't use non-numeric floating-point value as operand of "^"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "^"}
|
||||
test mathop-8.13 {compiled ^: errors} -returnCodes error -body {
|
||||
^ 0 x
|
||||
} -result {can't use non-numeric string as operand of "^"}
|
||||
} -result {can't use non-numeric string "x" as operand of "^"}
|
||||
test mathop-8.14 {compiled ^: errors} -returnCodes error -body {
|
||||
^ 0 nan
|
||||
} -result {can't use non-numeric floating-point value as operand of "^"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "^"}
|
||||
test mathop-8.15 {compiled ^: errors} -returnCodes error -body {
|
||||
^ 0o8 0
|
||||
} -result {can't use invalid octal number as operand of "^"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "^"}
|
||||
test mathop-8.16 {compiled ^: errors} -returnCodes error -body {
|
||||
^ 0 0o8
|
||||
} -result {can't use invalid octal number as operand of "^"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "^"}
|
||||
test mathop-8.17 {compiled ^: errors} -returnCodes error -body {
|
||||
^ 0 [error expectedError]
|
||||
} -result expectedError
|
||||
@@ -639,32 +639,32 @@ namespace eval ::testmathop {
|
||||
test mathop-8.22 {interpreted ^} { $op 3 7 6 } 2
|
||||
test mathop-8.23 {interpreted ^} -returnCodes error -body {
|
||||
$op 1.0 2 3
|
||||
} -result {can't use floating-point value as operand of "^"}
|
||||
} -result {can't use floating-point value "1.0" as operand of "^"}
|
||||
test mathop-8.24 {interpreted ^} -returnCodes error -body {
|
||||
$op 1 2 3.0
|
||||
} -result {can't use floating-point value as operand of "^"}
|
||||
} -result {can't use floating-point value "3.0" as operand of "^"}
|
||||
test mathop-8.25 {interpreted ^} { $op 100000000002 18 -126 } -100000000110
|
||||
test mathop-8.26 {interpreted ^} { $op 0xff 0o377 333333333333 } 333333333333
|
||||
test mathop-8.27 {interpreted ^} { $op 1000000000000000000002 18 -126 } -1000000000000000000110
|
||||
test mathop-8.28 {interpreted ^} { $op 0xff 0o377 3333333333333333333333 } 3333333333333333333333
|
||||
test mathop-8.29 {interpreted ^: errors} -returnCodes error -body {
|
||||
$op x 0
|
||||
} -result {can't use non-numeric string as operand of "^"}
|
||||
} -result {can't use non-numeric string "x" as operand of "^"}
|
||||
test mathop-8.30 {interpreted ^: errors} -returnCodes error -body {
|
||||
$op nan 0
|
||||
} -result {can't use non-numeric floating-point value as operand of "^"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "^"}
|
||||
test mathop-8.31 {interpreted ^: errors} -returnCodes error -body {
|
||||
$op 0 x
|
||||
} -result {can't use non-numeric string as operand of "^"}
|
||||
} -result {can't use non-numeric string "x" as operand of "^"}
|
||||
test mathop-8.32 {interpreted ^: errors} -returnCodes error -body {
|
||||
$op 0 nan
|
||||
} -result {can't use non-numeric floating-point value as operand of "^"}
|
||||
} -result {can't use non-numeric floating-point value "nan" as operand of "^"}
|
||||
test mathop-8.33 {interpreted ^: errors} -returnCodes error -body {
|
||||
$op 0o8 0
|
||||
} -result {can't use invalid octal number as operand of "^"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "^"}
|
||||
test mathop-8.34 {interpreted ^: errors} -returnCodes error -body {
|
||||
$op 0 0o8
|
||||
} -result {can't use invalid octal number as operand of "^"}
|
||||
} -result {can't use non-numeric string "0o8" as operand of "^"}
|
||||
test mathop-8.35 {interpreted ^: errors} -returnCodes error -body {
|
||||
$op 0 [error expectedError]
|
||||
} -result expectedError
|
||||
@@ -775,13 +775,13 @@ test mathop-20.6 { one arg, error } {
|
||||
# skipping - for now, knownbug...
|
||||
foreach op {+ * / & | ^ **} {
|
||||
lappend res [TestOp $op {*}$vals]
|
||||
lappend exp "can't use non-numeric string as operand of \"$op\"\
|
||||
lappend exp "can't use non-numeric string \"x\" as operand of \"$op\"\
|
||||
ARITH DOMAIN {non-numeric string}"
|
||||
}
|
||||
}
|
||||
foreach op {+ * / & | ^ **} {
|
||||
lappend res [TestOp $op NaN 1]
|
||||
lappend exp "can't use non-numeric floating-point value as operand of \"$op\"\
|
||||
lappend exp "can't use non-numeric floating-point value \"NaN\" as operand of \"$op\"\
|
||||
ARITH DOMAIN {non-numeric floating-point value}"
|
||||
}
|
||||
expr {$res eq $exp ? 0 : $res}
|
||||
@@ -850,15 +850,15 @@ test mathop-21.5 { unary ops, bad values } {
|
||||
set res {}
|
||||
set exp {}
|
||||
lappend res [TestOp / x]
|
||||
lappend exp "can't use non-numeric string as operand of \"/\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend exp "can't use non-numeric string \"x\" as operand of \"/\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend res [TestOp - x]
|
||||
lappend exp "can't use non-numeric string as operand of \"-\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend exp "can't use non-numeric string \"x\" as operand of \"-\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend res [TestOp ~ x]
|
||||
lappend exp "can't use non-numeric string as operand of \"~\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend exp "can't use non-numeric string \"x\" as operand of \"~\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend res [TestOp ! x]
|
||||
lappend exp "can't use non-numeric string as operand of \"!\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend exp "can't use non-numeric string \"x\" as operand of \"!\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend res [TestOp ~ 5.0]
|
||||
lappend exp "can't use floating-point value as operand of \"~\" ARITH DOMAIN {floating-point value}"
|
||||
lappend exp "can't use floating-point value \"5.0\" as operand of \"~\" ARITH DOMAIN {floating-point value}"
|
||||
expr {$res eq $exp ? 0 : $res}
|
||||
} 0
|
||||
test mathop-21.6 { unary ops, too many } {
|
||||
@@ -965,9 +965,9 @@ test mathop-22.4 { unary ops, bad values } {
|
||||
set exp {}
|
||||
foreach op {& | ^} {
|
||||
lappend res [TestOp $op x 5]
|
||||
lappend exp "can't use non-numeric string as operand of \"$op\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend exp "can't use non-numeric string \"x\" as operand of \"$op\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend res [TestOp $op 5 x]
|
||||
lappend exp "can't use non-numeric string as operand of \"$op\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend exp "can't use non-numeric string \"x\" as operand of \"$op\" ARITH DOMAIN {non-numeric string}"
|
||||
}
|
||||
expr {$res eq $exp ? 0 : $res}
|
||||
} 0
|
||||
@@ -1080,15 +1080,15 @@ test mathop-24.3 { binary ops, bad values } {
|
||||
set exp {}
|
||||
foreach op {% << >>} {
|
||||
lappend res [TestOp $op x 1]
|
||||
lappend exp "can't use non-numeric string as operand of \"$op\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend exp "can't use non-numeric string \"x\" as operand of \"$op\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend res [TestOp $op 1 x]
|
||||
lappend exp "can't use non-numeric string as operand of \"$op\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend exp "can't use non-numeric string \"x\" as operand of \"$op\" ARITH DOMAIN {non-numeric string}"
|
||||
}
|
||||
foreach op {% << >>} {
|
||||
lappend res [TestOp $op 5.0 1]
|
||||
lappend exp "can't use floating-point value as operand of \"$op\" ARITH DOMAIN {floating-point value}"
|
||||
lappend exp "can't use floating-point value \"5.0\" as operand of \"$op\" ARITH DOMAIN {floating-point value}"
|
||||
lappend res [TestOp $op 1 5.0]
|
||||
lappend exp "can't use floating-point value as operand of \"$op\" ARITH DOMAIN {floating-point value}"
|
||||
lappend exp "can't use floating-point value \"5.0\" as operand of \"$op\" ARITH DOMAIN {floating-point value}"
|
||||
}
|
||||
foreach op {in ni} {
|
||||
lappend res [TestOp $op 5 "a b \{ c"]
|
||||
@@ -1240,9 +1240,9 @@ test mathop-25.23 { exp operator errors } {
|
||||
lappend res [TestOp ** $huge 2.1]
|
||||
lappend exp "Inf"
|
||||
lappend res [TestOp ** 2 foo]
|
||||
lappend exp "can't use non-numeric string as operand of \"**\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend exp "can't use non-numeric string \"foo\" as operand of \"**\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend res [TestOp ** foo 2]
|
||||
lappend exp "can't use non-numeric string as operand of \"**\" ARITH DOMAIN {non-numeric string}"
|
||||
lappend exp "can't use non-numeric string \"foo\" as operand of \"**\" ARITH DOMAIN {non-numeric string}"
|
||||
|
||||
expr {$res eq $exp ? 0 : $res}
|
||||
} 0
|
||||
|
||||
+14
-10
@@ -293,12 +293,13 @@ namespace eval test_ns_hier1 {
|
||||
namespace eval test_ns_hier2a {}
|
||||
namespace eval test_ns_hier2b {}
|
||||
}
|
||||
# TIP 278: secondary lookup disabled for vars, tests disabled with #
|
||||
test namespace-old-5.4 {nested namespaces can access global namespace} {
|
||||
list [namespace eval test_ns_hier1 {set test_ns_var_global}] \
|
||||
list [namespace eval test_ns_hier1 {#set test_ns_var_global}] \
|
||||
[namespace eval test_ns_hier1 {test_ns_cmd_global}] \
|
||||
[namespace eval test_ns_hier1::test_ns_hier2 {set test_ns_var_global}] \
|
||||
[namespace eval test_ns_hier1::test_ns_hier2 {#set test_ns_var_global}] \
|
||||
[namespace eval test_ns_hier1::test_ns_hier2 {test_ns_cmd_global}]
|
||||
} {{var in ::} {cmd in ::} {var in ::} {cmd in ::}}
|
||||
} {{} {cmd in ::} {} {cmd in ::}}
|
||||
test namespace-old-5.5 {variables in different namespaces don't conflict} {
|
||||
list [set test_ns_hier1::test_ns_level] \
|
||||
[set test_ns_hier1::test_ns_hier2::test_ns_level]
|
||||
@@ -468,11 +469,12 @@ test namespace-old-6.11 {commands affect all parent namespaces} {
|
||||
}
|
||||
list [test_ns_cache1::trigger] [test_ns_cache1::test_ns_cache2::trigger]
|
||||
} {{cache2 version} {cache2 version}}
|
||||
# TIP 278: secondary lookup disabled, catch added, result changed from {global version}
|
||||
test namespace-old-6.12 {define test variables} {
|
||||
variable test_ns_cache_var "global version"
|
||||
set trigger {set test_ns_cache_var}
|
||||
namespace eval test_ns_cache1 $trigger
|
||||
} {global version}
|
||||
list [catch {namespace eval test_ns_cache1 $trigger} msg] $msg
|
||||
} {1 {can't read "test_ns_cache_var": no such variable}}
|
||||
set trigger {set test_ns_cache_var}
|
||||
test namespace-old-6.13 {one-level check for variable shadowing} {
|
||||
namespace eval test_ns_cache1 {
|
||||
@@ -481,22 +483,24 @@ test namespace-old-6.13 {one-level check for variable shadowing} {
|
||||
namespace eval test_ns_cache1 $trigger
|
||||
} {cache1 version}
|
||||
variable ::test_ns_cache_var "global version"
|
||||
# TIP 278: secondary lookup disabled, catch added, result changed from {global version}
|
||||
test namespace-old-6.14 {deleting variables changes variable epoch} {
|
||||
namespace eval test_ns_cache1 {
|
||||
variable test_ns_cache_var "cache1 version"
|
||||
}
|
||||
list [namespace eval test_ns_cache1 $trigger] \
|
||||
[namespace eval test_ns_cache1 {unset test_ns_cache_var}] \
|
||||
[namespace eval test_ns_cache1 $trigger]
|
||||
} {{cache1 version} {} {global version}}
|
||||
[catch {namespace eval test_ns_cache1 $trigger}]
|
||||
} {{cache1 version} {} 1}
|
||||
# TIP 278: secondary lookup disabled, catch added, result changed
|
||||
test namespace-old-6.15 {define test namespaces} {
|
||||
namespace eval test_ns_cache2 {
|
||||
variable test_ns_cache_var "global cache2 version"
|
||||
}
|
||||
set trigger2 {set test_ns_cache2::test_ns_cache_var}
|
||||
list [namespace eval test_ns_cache1 $trigger2] \
|
||||
[namespace eval test_ns_cache1::test_ns_cache2 $trigger]
|
||||
} {{global cache2 version} {global version}}
|
||||
catch {list [namespace eval test_ns_cache1 $trigger2] \
|
||||
[namespace eval test_ns_cache1::test_ns_cache2 $trigger]}
|
||||
} 1
|
||||
set trigger2 {set test_ns_cache2::test_ns_cache_var}
|
||||
test namespace-old-6.16 {public variables affect all parent namespaces} {
|
||||
variable test_ns_cache1::test_ns_cache2::test_ns_cache_var "cache2 version"
|
||||
|
||||
+24
-12
@@ -46,9 +46,9 @@ test namespace-2.2 {Tcl_GetCurrentNamespace} {
|
||||
set l {}
|
||||
lappend l [namespace current]
|
||||
namespace eval test_ns_1 {
|
||||
lappend l [namespace current]
|
||||
lappend ::l [namespace current]
|
||||
namespace eval foo {
|
||||
lappend l [namespace current]
|
||||
lappend ::l [namespace current]
|
||||
}
|
||||
}
|
||||
lappend l [namespace current]
|
||||
@@ -633,6 +633,8 @@ test namespace-14.2 {TclGetNamespaceForQualName, invalid absolute names} -setup
|
||||
[catch {namespace children test_ns_777} msg] $msg
|
||||
}
|
||||
} -result {1 {can't read "::test_ns_777::v": no such variable} 1 {namespace "test_ns_777" not found in "::test_ns_1"}}
|
||||
|
||||
# TIP 278: secondary lookup disabled, results changed from {10 20}
|
||||
test namespace-14.3 {TclGetNamespaceForQualName, relative names} -setup {
|
||||
catch {namespace delete {*}[namespace children :: test_ns_*]}
|
||||
variable v 10
|
||||
@@ -644,9 +646,11 @@ test namespace-14.3 {TclGetNamespaceForQualName, relative names} -setup {
|
||||
}
|
||||
} -body {
|
||||
namespace eval test_ns_1 {
|
||||
list $v $test_ns_2::v
|
||||
# list $v $test_ns_2::v
|
||||
list [catch {set v} msg] $msg [catch {set test_ns_2::v} msg] $msg
|
||||
}
|
||||
} -result {10 20}
|
||||
} -result {1 {can't read "v": no such variable} 0 20}
|
||||
|
||||
test namespace-14.4 {TclGetNamespaceForQualName, relative ns names looked up only in current ns} {
|
||||
namespace eval test_ns_1::test_ns_2 {
|
||||
namespace eval foo {}
|
||||
@@ -707,15 +711,17 @@ test namespace-14.11 {TclGetNamespaceForQualName, extra ::s are significant for
|
||||
proc test_ns_1::test_ns_2:: {args} {return "\{\}: $args"}
|
||||
lappend l [test_ns_1::test_ns_2:: hello]
|
||||
} -result {1 {invalid command name "test_ns_1::test_ns_2::"} {{}: hello}}
|
||||
|
||||
# TIP 278: secondary lookup disabled, added catch, result changed from y
|
||||
test namespace-14.12 {TclGetNamespaceForQualName, extra ::s are significant for vars} -setup {
|
||||
catch {namespace delete {*}[namespace children :: test_ns_*]}
|
||||
} -body {
|
||||
namespace eval test_ns_1 {
|
||||
variable {}
|
||||
set test_ns_1::(x) y
|
||||
catch {set test_ns_1::(x) y} ::msg
|
||||
}
|
||||
set test_ns_1::(x)
|
||||
} -result y
|
||||
list $::msg [catch {set test_ns_1::(x)} msg] $msg
|
||||
} -result {{can't set "test_ns_1::(x)": parent namespace doesn't exist} 1 {can't read "test_ns_1::(x)": no such variable}}
|
||||
test namespace-14.13 {TclGetNamespaceForQualName, namespace other than global ns can't have empty name} -setup {
|
||||
catch {namespace delete {*}[namespace children :: test_ns_*]}
|
||||
} -returnCodes error -body {
|
||||
@@ -888,13 +894,15 @@ test namespace-17.6 {Tcl_FindNamespaceVar, relative name found} -setup {
|
||||
set x
|
||||
}
|
||||
} -result {777}
|
||||
|
||||
# TIP 278: secondary lookup disabled, catch added, result changed from 314159
|
||||
test namespace-17.7 {Tcl_FindNamespaceVar, relative name found} {
|
||||
namespace eval test_ns_1 {
|
||||
variable x 777
|
||||
unset x
|
||||
set x ;# must be global x now
|
||||
list [catch {set x} msg] $msg ;# must not be global x now
|
||||
}
|
||||
} {314159}
|
||||
} {1 {can't read "x": no such variable}}
|
||||
test namespace-17.8 {Tcl_FindNamespaceVar, relative name not found} -body {
|
||||
namespace eval test_ns_1 {
|
||||
set wuzzat
|
||||
@@ -906,6 +914,8 @@ test namespace-17.9 {Tcl_FindNamespaceVar, relative name and TCL_GLOBAL_ONLY} {
|
||||
}
|
||||
set test_ns_1::a
|
||||
} {hello}
|
||||
|
||||
# TIP 278: secondary lookup disabled, result changed from 1
|
||||
test namespace-17.10 {Tcl_FindNamespaceVar, interference with cached varNames} -setup {
|
||||
namespace eval test_ns_1 {}
|
||||
} -body {
|
||||
@@ -919,7 +929,7 @@ test namespace-17.10 {Tcl_FindNamespaceVar, interference with cached varNames} -
|
||||
namespace eval test_ns_1 set a 1
|
||||
namespace delete test_ns_1
|
||||
return $a
|
||||
} -result 1
|
||||
} -result 0
|
||||
catch {unset a}
|
||||
catch {unset x}
|
||||
|
||||
@@ -1540,6 +1550,8 @@ test namespace-34.6 {NamespaceWhichCmd, -command is default} -setup {
|
||||
[namespace which ::test_ns_2::cmd2]
|
||||
}
|
||||
} -result {::foreach ::test_ns_3::p ::test_ns_3::cmd1 ::test_ns_2::cmd2}
|
||||
|
||||
# TIP 278: secondary lookup disabled, catch added, result changed
|
||||
test namespace-34.7 {NamespaceWhichCmd, variable lookup} -setup {
|
||||
catch {namespace delete {*}[namespace children test_ns_*]}
|
||||
namespace eval test_ns_1 {
|
||||
@@ -1559,12 +1571,12 @@ test namespace-34.7 {NamespaceWhichCmd, variable lookup} -setup {
|
||||
}
|
||||
} -body {
|
||||
namespace eval test_ns_3 {
|
||||
list [namespace which -variable env] \
|
||||
list [catch {namespace which -variable env } msg] $msg \
|
||||
[namespace which -variable v3] \
|
||||
[namespace which -variable ::test_ns_2::v2] \
|
||||
[catch {namespace which -variable ::test_ns_2::noSuchVar} msg] $msg
|
||||
}
|
||||
} -result {::env ::test_ns_3::v3 ::test_ns_2::v2 0 {}}
|
||||
} -result {0 {} ::test_ns_3::v3 ::test_ns_2::v2 0 {}}
|
||||
|
||||
test namespace-35.1 {FreeNsNameInternalRep, resulting ref count > 0} -setup {
|
||||
catch {namespace delete {*}[namespace children :: test_ns_*]}
|
||||
|
||||
+3
-3
@@ -376,12 +376,12 @@ test parse-8.8 {Tcl_EvalObjv procedure, async handlers} -constraints {
|
||||
return "new result"
|
||||
}
|
||||
set handler1 [testasync create async1]
|
||||
set aresult xxx
|
||||
set acode yyy
|
||||
set ::aresult xxx
|
||||
set ::acode yyy
|
||||
} -cleanup {
|
||||
testasync delete
|
||||
} -body {
|
||||
list [testevalobjv 0 testasync mark $handler1 original 0] $acode $aresult
|
||||
list [testevalobjv 0 testasync mark $handler1 original 0] $::acode $::aresult
|
||||
} -result {{new result} 0 original}
|
||||
test parse-8.9 {Tcl_EvalObjv procedure, exceptional return} testevalobjv {
|
||||
list [catch {testevalobjv 0 error message} msg] $msg
|
||||
|
||||
+2
-2
@@ -31,7 +31,7 @@ test result-1.2 {Tcl_SaveInterpResult} {testsaveresult} {
|
||||
} {append result}
|
||||
test result-1.3 {Tcl_SaveInterpResult} {testsaveresult} {
|
||||
testsaveresult dynamic {set x 42} 0
|
||||
} {dynamic result presentOrFreed}
|
||||
} {dynamic result freed}
|
||||
test result-1.4 {Tcl_SaveInterpResult} {testsaveresult} {
|
||||
testsaveresult object {set x 42} 0
|
||||
} {object result same}
|
||||
@@ -43,7 +43,7 @@ test result-1.6 {Tcl_SaveInterpResult} {testsaveresult} {
|
||||
} {42}
|
||||
test result-1.7 {Tcl_SaveInterpResult} {testsaveresult} {
|
||||
testsaveresult dynamic {set x 42} 1
|
||||
} {42 presentOrFreed}
|
||||
} {42 freed}
|
||||
test result-1.8 {Tcl_SaveInterpResult} {testsaveresult} {
|
||||
testsaveresult object {set x 42} 1
|
||||
} {42 different}
|
||||
|
||||
+2
-2
@@ -292,10 +292,10 @@ test string-5.16 {string index, bytearray object with string obj shimmering} {
|
||||
} 0
|
||||
test string-5.17 {string index, bad integer} -body {
|
||||
list [catch {string index "abc" 0o8} msg] $msg
|
||||
} -match glob -result {1 {*invalid octal number*}}
|
||||
} -match glob -result {1 {*}}
|
||||
test string-5.18 {string index, bad integer} -body {
|
||||
list [catch {string index "abc" end-0o0289} msg] $msg
|
||||
} -match glob -result {1 {*invalid octal number*}}
|
||||
} -match glob -result {1 {*}}
|
||||
test string-5.19 {string index, bytearray object out of bounds} {
|
||||
string index [binary format I* {0x50515253 0x52}] -1
|
||||
} {}
|
||||
|
||||
@@ -355,11 +355,11 @@ test stringComp-5.16 {string index, bytearray object with string obj shimmering}
|
||||
test stringComp-5.17 {string index, bad integer} -body {
|
||||
proc foo {} {string index "abc" 0o8}
|
||||
list [catch {foo} msg] $msg
|
||||
} -match glob -result {1 {*invalid octal number*}}
|
||||
} -match glob -result {1 {*}}
|
||||
test stringComp-5.18 {string index, bad integer} -body {
|
||||
proc foo {} {string index "abc" end-0o0289}
|
||||
list [catch {foo} msg] $msg
|
||||
} -match glob -result {1 {*invalid octal number*}}
|
||||
} -match glob -result {1 {*}}
|
||||
test stringComp-5.19 {string index, bytearray object out of bounds} {
|
||||
proc foo {} {string index [binary format I* {0x50515253 0x52}] -1}
|
||||
foo
|
||||
|
||||
@@ -544,6 +544,7 @@ set notReadableDir [file join [temporaryDirectory] notreadable]
|
||||
set notWriteableDir [file join [temporaryDirectory] notwriteable]
|
||||
makeDirectory notreadable
|
||||
makeDirectory notwriteable
|
||||
|
||||
switch -- $::tcl_platform(platform) {
|
||||
unix {
|
||||
file attributes $notReadableDir -permissions 00333
|
||||
|
||||
-1947
File diff suppressed because it is too large
Load Diff
+5
-4
@@ -247,10 +247,11 @@ test var-3.4 {MakeUpvar, my var has TCL_NAMESPACE_ONLY specified} -setup {
|
||||
catch {unset ::test_ns_var::vv}
|
||||
proc p {} {
|
||||
# create namespace var vv linked to global a
|
||||
testupvar 1 a {} vv namespace
|
||||
testupvar 2 a {} vv namespace
|
||||
}
|
||||
p
|
||||
}
|
||||
# Modified: that should create a global var according to the docs!
|
||||
list $test_ns_var::vv [set test_ns_var::vv 123] $a
|
||||
} -result {456 123 123}
|
||||
test var-3.5 {MakeUpvar, no call frame so my var will be in global :: ns} -setup {
|
||||
@@ -442,7 +443,7 @@ test var-7.5 {Tcl_VariableObjCmd, value for last var is optional} -setup {
|
||||
set six 666
|
||||
namespace eval test_ns_var {
|
||||
variable five 5 six
|
||||
lappend a $five
|
||||
lappend ::a $five
|
||||
}
|
||||
lappend a $test_ns_var::five \
|
||||
[set test_ns_var::six 6] [set test_ns_var::six] $six
|
||||
@@ -469,9 +470,9 @@ test var-7.8 {Tcl_VariableObjCmd, if var already exists and no value is given, l
|
||||
set a ""
|
||||
namespace eval test_ns_var {
|
||||
variable eight 8
|
||||
lappend a $eight
|
||||
lappend ::a $eight
|
||||
variable eight
|
||||
lappend a $eight
|
||||
lappend ::a $eight
|
||||
}
|
||||
set a
|
||||
} {8 8}
|
||||
|
||||
@@ -92,7 +92,7 @@ test while-old-4.3 {errors in while loops} {
|
||||
test while-old-4.4 {errors in while loops} {
|
||||
set err [catch {while {"a"+"b"} {error "loop aborted"}} msg]
|
||||
list $err $msg
|
||||
} {1 {can't use non-numeric string as operand of "+"}}
|
||||
} {1 {can't use non-numeric string "a" as operand of "+"}}
|
||||
test while-old-4.5 {errors in while loops} {
|
||||
catch {unset x}
|
||||
set x 1
|
||||
|
||||
+2
-2
@@ -32,7 +32,7 @@ test while-1.2 {TclCompileWhileCmd: error in test expression} -body {
|
||||
} -match glob -result {*"while {$i<} break"}
|
||||
test while-1.3 {TclCompileWhileCmd: error in test expression} -body {
|
||||
while {"a"+"b"} {error "loop aborted"}
|
||||
} -returnCodes error -result {can't use non-numeric string as operand of "+"}
|
||||
} -returnCodes error -result {can't use non-numeric string "a" as operand of "+"}
|
||||
test while-1.4 {TclCompileWhileCmd: multiline test expr} -body {
|
||||
set value 1
|
||||
while {($tcl_platform(platform) != "foobar1") && \
|
||||
@@ -343,7 +343,7 @@ test while-4.3 {while (not compiled): error in test expression} -body {
|
||||
test while-4.4 {while (not compiled): error in test expression} -body {
|
||||
set z while
|
||||
$z {"a"+"b"} {error "loop aborted"}
|
||||
} -returnCodes error -result {can't use non-numeric string as operand of "+"}
|
||||
} -returnCodes error -result {can't use non-numeric string "a" as operand of "+"}
|
||||
test while-4.5 {while (not compiled): multiline test expr} -body {
|
||||
set value 1
|
||||
set z while
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ Generating HTML files.
|
||||
The tcl-tk-man-html.tcl script from Robert Critchlow
|
||||
generates a nice set of HTML with good cross references.
|
||||
Use it like
|
||||
tclsh tcl-tk-man-html.tcl --htmldir=/tmp/tcl8.2
|
||||
tclsh tcl-tk-man-html.tcl --htmldir=/tmp/tcl9.0
|
||||
This script is very picky about the organization of man pages,
|
||||
effectively acting as a style enforcer.
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# This script attempts to determine what APIs exist in the source base that
|
||||
# have not been documented. By grepping through all of the doc/*.3 man
|
||||
# pages, looking for "Pkg_*" (e.g., Tcl_ or Tk_), and comparing this list
|
||||
# against the list of Pkg_ APIs found in the source (e.g., tcl8.2/*/*.[ch])
|
||||
# against the list of Pkg_ APIs found in the source (e.g., tcl9.0/*/*.[ch])
|
||||
# we create six lists:
|
||||
# 1) APIs in Source not in Docs.
|
||||
# 2) APIs in Docs not in Source.
|
||||
@@ -106,7 +106,7 @@ proc main {} {
|
||||
if {($len != 2) && ($len != 3)} {
|
||||
puts "usage: $argv0 pkgName pkgDir \[outFile\]"
|
||||
puts " pkgName == Tcl,Tk"
|
||||
puts " pkgDir == /home/surles/cvs/tcl8.2"
|
||||
puts " pkgDir == /home/surles/cvs/tcl9.0"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -1681,7 +1681,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
# not, assume that its top-level directory is a sibling of ours.
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
DEF_VER=8.7
|
||||
DEF_VER=9.0
|
||||
|
||||
|
||||
# Check whether --with-tcl was given.
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ AC_PREREQ(2.69)
|
||||
# not, assume that its top-level directory is a sibling of ours.
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
DEF_VER=8.7
|
||||
DEF_VER=9.0
|
||||
|
||||
AC_ARG_WITH(tcl, [ --with-tcl=DIR use Tcl $DEF_VER binaries from DIR], TCL_BIN_DIR=$withval, TCL_BIN_DIR=`cd ../../tcl$DEF_VER$TCL_PATCH_LEVEL/unix; pwd`)
|
||||
if test ! -d $TCL_BIN_DIR; then
|
||||
|
||||
+2
-2
@@ -5,9 +5,9 @@ HCW=0
|
||||
LCID=0x409 0x0 0x0 ;English (United States)
|
||||
REPORT=Yes
|
||||
TITLE=Tcl/Tk Reference Manual
|
||||
CNT=tcl87.cnt
|
||||
CNT=tcl90.cnt
|
||||
COPYRIGHT=Copyright © 2000 Ajuba Solutions
|
||||
HLP=tcl87.hlp
|
||||
HLP=tcl90.hlp
|
||||
|
||||
[FILES]
|
||||
tcl.rtf
|
||||
|
||||
@@ -4,7 +4,7 @@ if {[catch {package require Tcl 8.6-} msg]} {
|
||||
puts stderr "ERROR: $msg"
|
||||
puts stderr "If running this script from 'make html', set the\
|
||||
NATIVE_TCLSH environment\nvariable to point to an installed\
|
||||
tclsh8.7 (or the equivalent tclsh87.exe\non Windows)."
|
||||
tclsh9.0 (or the equivalent tclsh90.exe\non Windows)."
|
||||
exit 1
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ if {[catch {package require Tcl 8.6-} msg]} {
|
||||
# Copyright (c) 1995-1997 Roger E. Critchlow Jr
|
||||
# Copyright (c) 2004-2010 Donal K. Fellows
|
||||
|
||||
set ::Version "50/8.7"
|
||||
set ::Version "50/9.0"
|
||||
set ::CSSFILE "docs.css"
|
||||
|
||||
##
|
||||
|
||||
+7
-7
@@ -829,7 +829,7 @@ install-libraries: libraries
|
||||
else true; \
|
||||
fi; \
|
||||
done;
|
||||
@for i in opt0.4 http1.0 encoding ../tcl8 ../tcl8/8.4 ../tcl8/8.4/platform ../tcl8/8.5 ../tcl8/8.6; \
|
||||
@for i in opt0.4 http1.0 encoding ../tcl9 ../tcl9/9.0 ../tcl9/9.0/platform; \
|
||||
do \
|
||||
if [ ! -d "$(SCRIPT_INSTALL_DIR)"/$$i ] ; then \
|
||||
echo "Making directory $(SCRIPT_INSTALL_DIR)/$$i"; \
|
||||
@@ -849,21 +849,21 @@ install-libraries: libraries
|
||||
$(INSTALL_DATA) $$i "$(SCRIPT_INSTALL_DIR)"/http1.0; \
|
||||
done;
|
||||
@echo "Installing package http 2.8.12 as a Tcl Module";
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/http/http.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.6/http-2.8.12.tm;
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/http/http.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl9/9.0/http-2.8.12.tm;
|
||||
@echo "Installing package opt0.4 files to $(SCRIPT_INSTALL_DIR)/opt0.4/";
|
||||
@for i in $(TOP_DIR)/library/opt/*.tcl ; \
|
||||
do \
|
||||
$(INSTALL_DATA) $$i "$(SCRIPT_INSTALL_DIR)"/opt0.4; \
|
||||
done;
|
||||
@echo "Installing package msgcat 1.6.1 as a Tcl Module";
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/msgcat/msgcat.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/msgcat-1.6.1.tm;
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/msgcat/msgcat.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl9/9.0/msgcat-1.6.1.tm;
|
||||
@echo "Installing package tcltest 2.4.1 as a Tcl Module";
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/tcltest/tcltest.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/tcltest-2.4.1.tm;
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/tcltest/tcltest.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl9/9.0/tcltest-2.4.1.tm;
|
||||
|
||||
@echo "Installing package platform 1.0.14 as a Tcl Module";
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/platform/platform.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.4/platform-1.0.14.tm;
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/platform/platform.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl9/9.0/platform-1.0.14.tm;
|
||||
@echo "Installing package platform::shell 1.1.4 as a Tcl Module";
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/platform/shell.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.4/platform/shell-1.1.4.tm;
|
||||
@$(INSTALL_DATA) $(TOP_DIR)/library/platform/shell.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl9/9.0/platform/shell-1.1.4.tm;
|
||||
|
||||
@echo "Installing encoding files to $(SCRIPT_INSTALL_DIR)/encoding/";
|
||||
@for i in $(TOP_DIR)/library/encoding/*.enc ; do \
|
||||
@@ -2097,7 +2097,7 @@ alldist: dist
|
||||
#--------------------------------------------------------------------------
|
||||
# This target creates the HTML folder for Tcl & Tk and places it in
|
||||
# DISTDIR/html. It uses the tcltk-man2html.tcl tool from the Tcl group's tool
|
||||
# workspace. It depends on the Tcl & Tk being in directories called tcl8.* &
|
||||
# workspace. It depends on the Tcl & Tk being in directories called tcl9.* &
|
||||
# tk8.* up two directories from the TOOL_DIR.
|
||||
#
|
||||
# Note that for platforms where this is important, it is more common to use a
|
||||
|
||||
Vendored
+13
-13
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for tcl 8.7.
|
||||
# Generated by GNU Autoconf 2.69 for tcl 9.0.
|
||||
#
|
||||
#
|
||||
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
|
||||
@@ -577,8 +577,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='tcl'
|
||||
PACKAGE_TARNAME='tcl'
|
||||
PACKAGE_VERSION='8.7'
|
||||
PACKAGE_STRING='tcl 8.7'
|
||||
PACKAGE_VERSION='9.0'
|
||||
PACKAGE_STRING='tcl 9.0'
|
||||
PACKAGE_BUGREPORT=''
|
||||
PACKAGE_URL=''
|
||||
|
||||
@@ -1319,7 +1319,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures tcl 8.7 to adapt to many kinds of systems.
|
||||
\`configure' configures tcl 9.0 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -1380,7 +1380,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of tcl 8.7:";;
|
||||
short | recursive ) echo "Configuration of tcl 9.0:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1494,7 +1494,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
tcl configure 8.7
|
||||
tcl configure 9.0
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
@@ -1970,7 +1970,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by tcl $as_me 8.7, which was
|
||||
It was created by tcl $as_me 9.0, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
@@ -2322,10 +2322,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
|
||||
TCL_VERSION=8.7
|
||||
TCL_MAJOR_VERSION=8
|
||||
TCL_MINOR_VERSION=7
|
||||
TCL_PATCH_LEVEL="a2"
|
||||
TCL_VERSION=9.0
|
||||
TCL_MAJOR_VERSION=9
|
||||
TCL_MINOR_VERSION=0
|
||||
TCL_PATCH_LEVEL="a0"
|
||||
VERSION=${TCL_VERSION}
|
||||
|
||||
EXTRA_INSTALL_BINARIES=${EXTRA_INSTALL_BINARIES:-"@:"}
|
||||
@@ -10946,7 +10946,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by tcl $as_me 8.7, which was
|
||||
This file was extended by tcl $as_me 9.0, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -11003,7 +11003,7 @@ _ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
tcl config.status 8.7
|
||||
tcl config.status 9.0
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
||||
+5
-5
@@ -3,7 +3,7 @@ dnl This file is an input file used by the GNU "autoconf" program to
|
||||
dnl generate the file "configure", which is run during Tcl installation
|
||||
dnl to configure the system for the local environment.
|
||||
|
||||
AC_INIT([tcl],[8.7])
|
||||
AC_INIT([tcl],[9.0])
|
||||
AC_PREREQ(2.69)
|
||||
|
||||
dnl This is only used when included from macosx/configure.ac
|
||||
@@ -22,10 +22,10 @@ m4_ifdef([SC_USE_CONFIG_HEADERS], [
|
||||
#endif /* _TCLCONFIG */])
|
||||
])
|
||||
|
||||
TCL_VERSION=8.7
|
||||
TCL_MAJOR_VERSION=8
|
||||
TCL_MINOR_VERSION=7
|
||||
TCL_PATCH_LEVEL="a2"
|
||||
TCL_VERSION=9.0
|
||||
TCL_MAJOR_VERSION=9
|
||||
TCL_MINOR_VERSION=0
|
||||
TCL_PATCH_LEVEL="a0"
|
||||
VERSION=${TCL_VERSION}
|
||||
|
||||
EXTRA_INSTALL_BINARIES=${EXTRA_INSTALL_BINARIES:-"@:"}
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
|
||||
Name: tcl
|
||||
Summary: Tcl scripting language development environment
|
||||
Version: 8.7a2
|
||||
Version: 9.0a0
|
||||
Release: 2
|
||||
License: BSD
|
||||
Group: Development/Languages
|
||||
|
||||
@@ -15,14 +15,6 @@
|
||||
|
||||
#ifdef TCL_THREADS
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
typedef struct {
|
||||
char nabuf[16];
|
||||
} ThreadSpecificData;
|
||||
|
||||
static Tcl_ThreadDataKey dataKey;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* masterLock is used to serialize creation of mutexes, condition variables,
|
||||
* and thread local storage. This is the only place that can count on the
|
||||
@@ -625,52 +617,6 @@ TclpFinalizeCondition(
|
||||
}
|
||||
#endif /* TCL_THREADS */
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclpReaddir, TclpInetNtoa --
|
||||
*
|
||||
* These procedures replace core C versions to be used in a threaded
|
||||
* environment.
|
||||
*
|
||||
* Results:
|
||||
* See documentation of C functions.
|
||||
*
|
||||
* Side effects:
|
||||
* See documentation of C functions.
|
||||
*
|
||||
* Notes:
|
||||
* TclpReaddir is no longer used by the core (see 1095909), but it
|
||||
* appears in the internal stubs table (see #589526).
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
Tcl_DirEntry *
|
||||
TclpReaddir(
|
||||
DIR * dir)
|
||||
{
|
||||
return TclOSreaddir(dir);
|
||||
}
|
||||
|
||||
#undef TclpInetNtoa
|
||||
char *
|
||||
TclpInetNtoa(
|
||||
struct in_addr addr)
|
||||
{
|
||||
#ifdef TCL_THREADS
|
||||
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
|
||||
unsigned char *b = (unsigned char*) &addr.s_addr;
|
||||
|
||||
sprintf(tsdPtr->nabuf, "%u.%u.%u.%u", b[0], b[1], b[2], b[3]);
|
||||
return tsdPtr->nabuf;
|
||||
#else
|
||||
return inet_ntoa(addr);
|
||||
#endif
|
||||
}
|
||||
#endif /* TCL_NO_DEPRECATED */
|
||||
|
||||
#ifdef TCL_THREADS
|
||||
/*
|
||||
* Additions by AOL for specialized thread memory allocator.
|
||||
|
||||
@@ -22,32 +22,6 @@
|
||||
* variable is the key to this buffer.
|
||||
*/
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
static Tcl_ThreadDataKey tmKey;
|
||||
typedef struct {
|
||||
struct tm gmtime_buf;
|
||||
struct tm localtime_buf;
|
||||
} ThreadSpecificData;
|
||||
|
||||
/*
|
||||
* If we fall back on the thread-unsafe versions of gmtime and localtime, use
|
||||
* this mutex to try to protect them.
|
||||
*/
|
||||
|
||||
TCL_DECLARE_MUTEX(tmMutex)
|
||||
|
||||
static char *lastTZ = NULL; /* Holds the last setting of the TZ
|
||||
* environment variable, or an empty string if
|
||||
* the variable was not set. */
|
||||
|
||||
/*
|
||||
* Static functions declared in this file.
|
||||
*/
|
||||
|
||||
static void SetTZIfNecessary(void);
|
||||
static void CleanupMemory(ClientData clientData);
|
||||
#endif /* TCL_NO_DEPRECATED */
|
||||
|
||||
static void NativeScaleTime(Tcl_Time *timebuf,
|
||||
ClientData clientData);
|
||||
static void NativeGetTime(Tcl_Time *timebuf,
|
||||
@@ -248,116 +222,6 @@ Tcl_GetTime(
|
||||
tclGetTimeProcPtr(timePtr, tclTimeClientData);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclpGetDate --
|
||||
*
|
||||
* This function converts between seconds and struct tm. If useGMT is
|
||||
* true, then the returned date will be in Greenwich Mean Time (GMT).
|
||||
* Otherwise, it will be in the local time zone.
|
||||
*
|
||||
* Results:
|
||||
* Returns a static tm structure.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
struct tm *
|
||||
TclpGetDate(
|
||||
const time_t *time,
|
||||
int useGMT)
|
||||
{
|
||||
if (useGMT) {
|
||||
return TclpGmtime(time);
|
||||
} else {
|
||||
return TclpLocaltime(time);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclpGmtime --
|
||||
*
|
||||
* Wrapper around the 'gmtime' library function to make it thread safe.
|
||||
*
|
||||
* Results:
|
||||
* Returns a pointer to a 'struct tm' in thread-specific data.
|
||||
*
|
||||
* Side effects:
|
||||
* Invokes gmtime or gmtime_r as appropriate.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
struct tm *
|
||||
TclpGmtime(
|
||||
const time_t *timePtr) /* Pointer to the number of seconds since the
|
||||
* local system's epoch */
|
||||
{
|
||||
/*
|
||||
* Get a thread-local buffer to hold the returned time.
|
||||
*/
|
||||
|
||||
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&tmKey);
|
||||
|
||||
#ifdef HAVE_GMTIME_R
|
||||
gmtime_r(timePtr, &tsdPtr->gmtime_buf);
|
||||
#else
|
||||
Tcl_MutexLock(&tmMutex);
|
||||
memcpy(&tsdPtr->gmtime_buf, gmtime(timePtr), sizeof(struct tm));
|
||||
Tcl_MutexUnlock(&tmMutex);
|
||||
#endif
|
||||
|
||||
return &tsdPtr->gmtime_buf;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclpLocaltime --
|
||||
*
|
||||
* Wrapper around the 'localtime' library function to make it thread
|
||||
* safe.
|
||||
*
|
||||
* Results:
|
||||
* Returns a pointer to a 'struct tm' in thread-specific data.
|
||||
*
|
||||
* Side effects:
|
||||
* Invokes localtime or localtime_r as appropriate.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
struct tm *
|
||||
TclpLocaltime(
|
||||
const time_t *timePtr) /* Pointer to the number of seconds since the
|
||||
* local system's epoch */
|
||||
{
|
||||
/*
|
||||
* Get a thread-local buffer to hold the returned time.
|
||||
*/
|
||||
|
||||
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&tmKey);
|
||||
|
||||
SetTZIfNecessary();
|
||||
#ifdef HAVE_LOCALTIME_R
|
||||
localtime_r(timePtr, &tsdPtr->localtime_buf);
|
||||
#else
|
||||
Tcl_MutexLock(&tmMutex);
|
||||
memcpy(&tsdPtr->localtime_buf, localtime(timePtr), sizeof(struct tm));
|
||||
Tcl_MutexUnlock(&tmMutex);
|
||||
#endif
|
||||
|
||||
return &tsdPtr->localtime_buf;
|
||||
}
|
||||
#endif /* TCL_NO_DEPRECATED */
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
@@ -472,72 +336,6 @@ NativeGetTime(
|
||||
timePtr->sec = tv.tv_sec;
|
||||
timePtr->usec = tv.tv_usec;
|
||||
}
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* SetTZIfNecessary --
|
||||
*
|
||||
* Determines whether a call to 'tzset' is needed prior to the next call
|
||||
* to 'localtime' or examination of the 'timezone' variable.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* If 'tzset' has never been called in the current process, or if the
|
||||
* value of the environment variable TZ has changed since the last call
|
||||
* to 'tzset', then 'tzset' is called again.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
static void
|
||||
SetTZIfNecessary(void)
|
||||
{
|
||||
const char *newTZ = getenv("TZ");
|
||||
|
||||
Tcl_MutexLock(&tmMutex);
|
||||
if (newTZ == NULL) {
|
||||
newTZ = "";
|
||||
}
|
||||
if (lastTZ == NULL || strcmp(lastTZ, newTZ)) {
|
||||
tzset();
|
||||
if (lastTZ == NULL) {
|
||||
Tcl_CreateExitHandler(CleanupMemory, NULL);
|
||||
} else {
|
||||
ckfree(lastTZ);
|
||||
}
|
||||
lastTZ = ckalloc(strlen(newTZ) + 1);
|
||||
strcpy(lastTZ, newTZ);
|
||||
}
|
||||
Tcl_MutexUnlock(&tmMutex);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* CleanupMemory --
|
||||
*
|
||||
* Releases the private copy of the TZ environment variable upon exit
|
||||
* from Tcl.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* Frees allocated memory.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static void
|
||||
CleanupMemory(
|
||||
ClientData ignored)
|
||||
{
|
||||
ckfree(lastTZ);
|
||||
}
|
||||
#endif /* TCL_NO_DEPRECATED */
|
||||
|
||||
/*
|
||||
* Local Variables:
|
||||
|
||||
+7
-7
@@ -630,7 +630,7 @@ install-libraries: libraries install-tzdata install-msgs
|
||||
else true; \
|
||||
fi; \
|
||||
done;
|
||||
@for i in http1.0 opt0.4 encoding ../tcl8 ../tcl8/8.4 ../tcl8/8.4/platform ../tcl8/8.5 ../tcl8/8.6; \
|
||||
@for i in http1.0 opt0.4 encoding ../tcl9 ../tcl9/9.0 ../tcl9/9.0/platform; \
|
||||
do \
|
||||
if [ ! -d $(SCRIPT_INSTALL_DIR)/$$i ] ; then \
|
||||
echo "Making directory $(SCRIPT_INSTALL_DIR)/$$i"; \
|
||||
@@ -658,20 +658,20 @@ install-libraries: libraries install-tzdata install-msgs
|
||||
$(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/http1.0"; \
|
||||
done;
|
||||
@echo "Installing package http 2.8.12 as a Tcl Module";
|
||||
@$(COPY) $(ROOT_DIR)/library/http/http.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.6/http-2.8.12.tm;
|
||||
@$(COPY) $(ROOT_DIR)/library/http/http.tcl $(SCRIPT_INSTALL_DIR)/../tcl9/9.0/http-2.8.12.tm;
|
||||
@echo "Installing library opt0.4 directory";
|
||||
@for j in $(ROOT_DIR)/library/opt/*.tcl; \
|
||||
do \
|
||||
$(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/opt0.4"; \
|
||||
done;
|
||||
@echo "Installing package msgcat 1.6.1 as a Tcl Module";
|
||||
@$(COPY) $(ROOT_DIR)/library/msgcat/msgcat.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.5/msgcat-1.6.1.tm;
|
||||
@$(COPY) $(ROOT_DIR)/library/msgcat/msgcat.tcl $(SCRIPT_INSTALL_DIR)/../tcl9/9.0/msgcat-1.6.1.tm;
|
||||
@echo "Installing package tcltest 2.4.0 as a Tcl Module";
|
||||
@$(COPY) $(ROOT_DIR)/library/tcltest/tcltest.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.5/tcltest-2.4.0.tm;
|
||||
@$(COPY) $(ROOT_DIR)/library/tcltest/tcltest.tcl $(SCRIPT_INSTALL_DIR)/../tcl9/9.0/tcltest-2.4.0.tm;
|
||||
@echo "Installing package platform 1.0.14 as a Tcl Module";
|
||||
@$(COPY) $(ROOT_DIR)/library/platform/platform.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.4/platform-1.0.14.tm;
|
||||
@$(COPY) $(ROOT_DIR)/library/platform/platform.tcl $(SCRIPT_INSTALL_DIR)/../tcl9/9.0/platform-1.0.14.tm;
|
||||
@echo "Installing package platform::shell 1.1.4 as a Tcl Module";
|
||||
@$(COPY) $(ROOT_DIR)/library/platform/shell.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.4/platform/shell-1.1.4.tm;
|
||||
@$(COPY) $(ROOT_DIR)/library/platform/shell.tcl $(SCRIPT_INSTALL_DIR)/../tcl9/9.0/platform/shell-1.1.4.tm;
|
||||
@echo "Installing encodings";
|
||||
@for i in $(ROOT_DIR)/library/encoding/*.enc ; do \
|
||||
$(COPY) "$$i" "$(SCRIPT_INSTALL_DIR)/encoding"; \
|
||||
@@ -858,7 +858,7 @@ genstubs:
|
||||
#
|
||||
# This target creates the HTML folder for Tcl & Tk and places it in
|
||||
# DISTDIR/html. It uses the tcltk-man2html.tcl tool from the Tcl group's tool
|
||||
# workspace. It depends on the Tcl & Tk being in directories called tcl8.* &
|
||||
# workspace. It depends on the Tcl & Tk being in directories called tcl9.* &
|
||||
# tk8.* up two directories from the TOOL_DIR.
|
||||
#
|
||||
|
||||
|
||||
+4
-4
@@ -1,4 +1,4 @@
|
||||
Tcl 8.7 for Windows
|
||||
Tcl 9.0 for Windows
|
||||
|
||||
1. Introduction
|
||||
---------------
|
||||
@@ -16,7 +16,7 @@ The information in this file is maintained on the web at:
|
||||
|
||||
In order to compile Tcl for Windows, you need the following:
|
||||
|
||||
Tcl 8.7 Source Distribution (plus any patches)
|
||||
Tcl 9.0 Source Distribution (plus any patches)
|
||||
|
||||
and
|
||||
|
||||
@@ -79,9 +79,9 @@ Use the Makefile "install" target to install Tcl. It will install it
|
||||
according to the prefix options you provided in the correct directory
|
||||
structure.
|
||||
|
||||
Note that in order to run tclsh87.exe, you must ensure that tcl87.dll is
|
||||
Note that in order to run tclsh90.exe, you must ensure that tcl90.dll is
|
||||
on your path, in the system directory, or in the directory containing
|
||||
tclsh87.exe.
|
||||
tclsh90.exe.
|
||||
|
||||
Note: Tcl no longer provides support for Win32s.
|
||||
|
||||
|
||||
Vendored
+4
-4
@@ -2099,10 +2099,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
# /bin/sh. The bash shell seems to suffer from some strange failures.
|
||||
SHELL=/bin/sh
|
||||
|
||||
TCL_VERSION=8.7
|
||||
TCL_MAJOR_VERSION=8
|
||||
TCL_MINOR_VERSION=7
|
||||
TCL_PATCH_LEVEL="a2"
|
||||
TCL_VERSION=9.0
|
||||
TCL_MAJOR_VERSION=9
|
||||
TCL_MINOR_VERSION=0
|
||||
TCL_PATCH_LEVEL="a0"
|
||||
VER=$TCL_MAJOR_VERSION$TCL_MINOR_VERSION
|
||||
|
||||
TCL_DDE_VERSION=1.4
|
||||
|
||||
+4
-4
@@ -11,10 +11,10 @@ AC_PREREQ(2.69)
|
||||
# /bin/sh. The bash shell seems to suffer from some strange failures.
|
||||
SHELL=/bin/sh
|
||||
|
||||
TCL_VERSION=8.7
|
||||
TCL_MAJOR_VERSION=8
|
||||
TCL_MINOR_VERSION=7
|
||||
TCL_PATCH_LEVEL="a2"
|
||||
TCL_VERSION=9.0
|
||||
TCL_MAJOR_VERSION=9
|
||||
TCL_MINOR_VERSION=0
|
||||
TCL_PATCH_LEVEL="a0"
|
||||
VER=$TCL_MAJOR_VERSION$TCL_MINOR_VERSION
|
||||
|
||||
TCL_DDE_VERSION=1.4
|
||||
|
||||
+11
-15
@@ -1116,16 +1116,12 @@ install-binaries:
|
||||
install-libraries: tclConfig install-msgs install-tzdata
|
||||
@if not exist "$(SCRIPT_INSTALL_DIR)$(NULL)" \
|
||||
$(MKDIR) "$(SCRIPT_INSTALL_DIR)"
|
||||
@if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8$(NULL)" \
|
||||
$(MKDIR) "$(SCRIPT_INSTALL_DIR)\..\tcl8"
|
||||
@if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.4$(NULL)" \
|
||||
$(MKDIR) "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.4"
|
||||
@if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.4\platform$(NULL)" \
|
||||
$(MKDIR) "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.4\platform"
|
||||
@if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.5$(NULL)" \
|
||||
$(MKDIR) "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.5"
|
||||
@if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.6$(NULL)" \
|
||||
$(MKDIR) "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.6"
|
||||
@if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl9$(NULL)" \
|
||||
$(MKDIR) "$(SCRIPT_INSTALL_DIR)\..\tcl9"
|
||||
@if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl9\9.0$(NULL)" \
|
||||
$(MKDIR) "$(SCRIPT_INSTALL_DIR)\..\tcl9\9.0"
|
||||
@if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl9\9.0\platform$(NULL)" \
|
||||
$(MKDIR) "$(SCRIPT_INSTALL_DIR)\..\tcl9\9.0\platform"
|
||||
@echo Installing header files
|
||||
@$(CPY) "$(GENERICDIR)\tcl.h" "$(INCLUDE_INSTALL_DIR)\"
|
||||
@$(CPY) "$(GENERICDIR)\tclDecls.h" "$(INCLUDE_INSTALL_DIR)\"
|
||||
@@ -1157,19 +1153,19 @@ install-libraries: tclConfig install-msgs install-tzdata
|
||||
"$(SCRIPT_INSTALL_DIR)\opt0.4\"
|
||||
@echo Installing package http $(PKG_HTTP_VER) as a Tcl Module
|
||||
@$(COPY) "$(ROOT)\library\http\http.tcl" \
|
||||
"$(SCRIPT_INSTALL_DIR)\..\tcl8\8.6\http-$(PKG_HTTP_VER).tm"
|
||||
"$(SCRIPT_INSTALL_DIR)\..\tcl9\9.0\http-$(PKG_HTTP_VER).tm"
|
||||
@echo Installing package msgcat $(PKG_MSGCAT_VER) as a Tcl Module
|
||||
@$(COPY) "$(ROOT)\library\msgcat\msgcat.tcl" \
|
||||
"$(SCRIPT_INSTALL_DIR)\..\tcl8\8.5\msgcat-$(PKG_MSGCAT_VER).tm"
|
||||
"$(SCRIPT_INSTALL_DIR)\..\tcl9\9.0\msgcat-$(PKG_MSGCAT_VER).tm"
|
||||
@echo Installing package tcltest $(PKG_TCLTEST_VER) as a Tcl Module
|
||||
@$(COPY) "$(ROOT)\library\tcltest\tcltest.tcl" \
|
||||
"$(SCRIPT_INSTALL_DIR)\..\tcl8\8.5\tcltest-$(PKG_TCLTEST_VER).tm"
|
||||
"$(SCRIPT_INSTALL_DIR)\..\tcl9\9.0\tcltest-$(PKG_TCLTEST_VER).tm"
|
||||
@echo Installing package platform $(PKG_PLATFORM_VER) as a Tcl Module
|
||||
@$(COPY) "$(ROOT)\library\platform\platform.tcl" \
|
||||
"$(SCRIPT_INSTALL_DIR)\..\tcl8\8.4\platform-$(PKG_PLATFORM_VER).tm"
|
||||
"$(SCRIPT_INSTALL_DIR)\..\tcl9\9.0\platform-$(PKG_PLATFORM_VER).tm"
|
||||
@echo Installing package platform::shell $(PKG_SHELL_VER) as a Tcl Module
|
||||
@$(COPY) "$(ROOT)\library\platform\shell.tcl" \
|
||||
"$(SCRIPT_INSTALL_DIR)\..\tcl8\8.4\platform\shell-$(PKG_SHELL_VER).tm"
|
||||
"$(SCRIPT_INSTALL_DIR)\..\tcl9\9.0\platform\shell-$(PKG_SHELL_VER).tm"
|
||||
@echo Installing $(TCLDDELIBNAME)
|
||||
!if $(STATIC_BUILD)
|
||||
!if !$(TCL_USE_STATIC_PACKAGES)
|
||||
|
||||
+2
-2
@@ -5,9 +5,9 @@ HCW=0
|
||||
LCID=0x409 0x0 0x0 ;English (United States)
|
||||
REPORT=Yes
|
||||
TITLE=Tcl/Tk Reference Manual
|
||||
CNT=tcl87.cnt
|
||||
CNT=tcl90.cnt
|
||||
COPYRIGHT=Copyright © 2000 Ajuba Solutions
|
||||
HLP=tcl87.hlp
|
||||
HLP=tcl90.hlp
|
||||
|
||||
[FILES]
|
||||
tcl.rtf
|
||||
|
||||
+4
-4
@@ -1126,13 +1126,13 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
AC_DEFUN([SC_WITH_TCL], [
|
||||
if test -d ../../tcl8.7$1/win; then
|
||||
TCL_BIN_DEFAULT=../../tcl8.7$1/win
|
||||
if test -d ../../tcl9.0$1/win; then
|
||||
TCL_BIN_DEFAULT=../../tcl9.0$1/win
|
||||
else
|
||||
TCL_BIN_DEFAULT=../../tcl8.7/win
|
||||
TCL_BIN_DEFAULT=../../tcl9.0/win
|
||||
fi
|
||||
|
||||
AC_ARG_WITH(tcl, [ --with-tcl=DIR use Tcl 8.7 binaries from DIR],
|
||||
AC_ARG_WITH(tcl, [ --with-tcl=DIR use Tcl 9.0 binaries from DIR],
|
||||
TCL_BIN_DIR=$withval, TCL_BIN_DIR=`cd $TCL_BIN_DEFAULT; pwd`)
|
||||
if test ! -d $TCL_BIN_DIR; then
|
||||
AC_MSG_ERROR(Tcl directory $TCL_BIN_DIR does not exist)
|
||||
|
||||
@@ -498,12 +498,6 @@ TclpSetInitialEncodings(void)
|
||||
Tcl_DStringFree(&encodingName);
|
||||
}
|
||||
|
||||
void TclWinSetInterfaces(
|
||||
int dummy) /* Not used. */
|
||||
{
|
||||
TclpSetInterfaces();
|
||||
}
|
||||
|
||||
const char *
|
||||
Tcl_GetEncodingNameFromEnvironment(
|
||||
Tcl_DString *bufPtr)
|
||||
|
||||
@@ -3401,68 +3401,6 @@ FindFDInList(
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclWinGetSockOpt, et al. --
|
||||
*
|
||||
* Those functions are historically exported by the stubs table and
|
||||
* just use the original system calls now.
|
||||
*
|
||||
* Warning:
|
||||
* Those functions are depreciated and will be removed with TCL 9.0.
|
||||
*
|
||||
* Results:
|
||||
* As defined for each function.
|
||||
*
|
||||
* Side effects:
|
||||
* As defined for each function.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
#undef TclWinGetSockOpt
|
||||
int
|
||||
TclWinGetSockOpt(
|
||||
SOCKET s,
|
||||
int level,
|
||||
int optname,
|
||||
char *optval,
|
||||
int *optlen)
|
||||
{
|
||||
|
||||
return getsockopt(s, level, optname, optval, optlen);
|
||||
}
|
||||
#undef TclWinSetSockOpt
|
||||
int
|
||||
TclWinSetSockOpt(
|
||||
SOCKET s,
|
||||
int level,
|
||||
int optname,
|
||||
const char *optval,
|
||||
int optlen)
|
||||
{
|
||||
return setsockopt(s, level, optname, optval, optlen);
|
||||
}
|
||||
|
||||
#undef TclpInetNtoa
|
||||
char *
|
||||
TclpInetNtoa(
|
||||
struct in_addr addr)
|
||||
{
|
||||
return inet_ntoa(addr);
|
||||
}
|
||||
#undef TclWinGetServByName
|
||||
struct servent *
|
||||
TclWinGetServByName(
|
||||
const char *name,
|
||||
const char *proto)
|
||||
{
|
||||
return getservbyname(name, proto);
|
||||
}
|
||||
#endif /* TCL_NO_DEPRECATED */
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
|
||||
@@ -22,27 +22,6 @@
|
||||
|
||||
#define SAMPLES 64
|
||||
|
||||
/*
|
||||
* The following arrays contain the day of year for the last day of each
|
||||
* month, where index 1 is January.
|
||||
*/
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
static const int normalDays[] = {
|
||||
-1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364
|
||||
};
|
||||
|
||||
static const int leapDays[] = {
|
||||
-1, 30, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
char tzName[64]; /* Time zone name */
|
||||
struct tm tm; /* time information */
|
||||
} ThreadSpecificData;
|
||||
static Tcl_ThreadDataKey dataKey;
|
||||
#endif /* TCL_NO_DEPRECATED */
|
||||
|
||||
/*
|
||||
* Data for managing high-resolution timers.
|
||||
*/
|
||||
@@ -115,9 +94,6 @@ static TimeInfo timeInfo = {
|
||||
* Declarations for functions defined later in this file.
|
||||
*/
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
static struct tm * ComputeGMT(const time_t *tp);
|
||||
#endif /* TCL_NO_DEPRECATED */
|
||||
static void StopCalibration(ClientData clientData);
|
||||
static DWORD WINAPI CalibrationThread(LPVOID arg);
|
||||
static void UpdateTimeEachSecond(void);
|
||||
@@ -508,229 +484,6 @@ StopCalibration(
|
||||
CloseHandle(timeInfo.calibrationThread);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclpGetDate --
|
||||
*
|
||||
* This function converts between seconds and struct tm. If useGMT is
|
||||
* true, then the returned date will be in Greenwich Mean Time (GMT).
|
||||
* Otherwise, it will be in the local time zone.
|
||||
*
|
||||
* Results:
|
||||
* Returns a static tm structure.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
struct tm *
|
||||
TclpGetDate(
|
||||
const time_t *t,
|
||||
int useGMT)
|
||||
{
|
||||
struct tm *tmPtr;
|
||||
time_t time;
|
||||
|
||||
if (!useGMT) {
|
||||
tzset();
|
||||
|
||||
/*
|
||||
* If we are in the valid range, let the C run-time library handle it.
|
||||
* Otherwise we need to fake it. Note that this algorithm ignores
|
||||
* daylight savings time before the epoch.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Hm, Borland's localtime manages to return NULL under certain
|
||||
* circumstances (e.g. wintime.test, test 1.2). Nobody tests for this,
|
||||
* since 'localtime' isn't supposed to do this, possibly leading to
|
||||
* crashes.
|
||||
*
|
||||
* Patch: We only call this function if we are at least one day into
|
||||
* the epoch, else we handle it ourselves (like we do for times < 0).
|
||||
* H. Giese, June 2003
|
||||
*/
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
#define LOCALTIME_VALIDITY_BOUNDARY SECSPERDAY
|
||||
#else
|
||||
#define LOCALTIME_VALIDITY_BOUNDARY 0
|
||||
#endif
|
||||
|
||||
if (*t >= LOCALTIME_VALIDITY_BOUNDARY) {
|
||||
return TclpLocaltime(t);
|
||||
}
|
||||
|
||||
time = *t - timezone;
|
||||
|
||||
/*
|
||||
* If we aren't near to overflowing the long, just add the bias and
|
||||
* use the normal calculation. Otherwise we will need to adjust the
|
||||
* result at the end.
|
||||
*/
|
||||
|
||||
if (*t < (LONG_MAX - 2*SECSPERDAY) && *t > (LONG_MIN + 2*SECSPERDAY)) {
|
||||
tmPtr = ComputeGMT(&time);
|
||||
} else {
|
||||
tmPtr = ComputeGMT(t);
|
||||
|
||||
tzset();
|
||||
|
||||
/*
|
||||
* Add the bias directly to the tm structure to avoid overflow.
|
||||
* Propagate seconds overflow into minutes, hours and days.
|
||||
*/
|
||||
|
||||
time = tmPtr->tm_sec - timezone;
|
||||
tmPtr->tm_sec = (int)(time % 60);
|
||||
if (tmPtr->tm_sec < 0) {
|
||||
tmPtr->tm_sec += 60;
|
||||
time -= 60;
|
||||
}
|
||||
|
||||
time = tmPtr->tm_min + time/60;
|
||||
tmPtr->tm_min = (int)(time % 60);
|
||||
if (tmPtr->tm_min < 0) {
|
||||
tmPtr->tm_min += 60;
|
||||
time -= 60;
|
||||
}
|
||||
|
||||
time = tmPtr->tm_hour + time/60;
|
||||
tmPtr->tm_hour = (int)(time % 24);
|
||||
if (tmPtr->tm_hour < 0) {
|
||||
tmPtr->tm_hour += 24;
|
||||
time -= 24;
|
||||
}
|
||||
|
||||
time /= 24;
|
||||
tmPtr->tm_mday += (int)time;
|
||||
tmPtr->tm_yday += (int)time;
|
||||
tmPtr->tm_wday = (tmPtr->tm_wday + (int)time) % 7;
|
||||
}
|
||||
} else {
|
||||
tmPtr = ComputeGMT(t);
|
||||
}
|
||||
return tmPtr;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* ComputeGMT --
|
||||
*
|
||||
* This function computes GMT given the number of seconds since the epoch
|
||||
* (midnight Jan 1 1970).
|
||||
*
|
||||
* Results:
|
||||
* Returns a (per thread) statically allocated struct tm.
|
||||
*
|
||||
* Side effects:
|
||||
* Updates the values of the static struct tm.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static struct tm *
|
||||
ComputeGMT(
|
||||
const time_t *tp)
|
||||
{
|
||||
struct tm *tmPtr;
|
||||
long tmp, rem;
|
||||
int isLeap;
|
||||
const int *days;
|
||||
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
|
||||
|
||||
tmPtr = &tsdPtr->tm;
|
||||
|
||||
/*
|
||||
* Compute the 4 year span containing the specified time.
|
||||
*/
|
||||
|
||||
tmp = (long)(*tp / SECSPER4YEAR);
|
||||
rem = (long)(*tp % SECSPER4YEAR);
|
||||
|
||||
/*
|
||||
* Correct for weird mod semantics so the remainder is always positive.
|
||||
*/
|
||||
|
||||
if (rem < 0) {
|
||||
tmp--;
|
||||
rem += SECSPER4YEAR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Compute the year after 1900 by taking the 4 year span and adjusting for
|
||||
* the remainder. This works because 2000 is a leap year, and 1900/2100
|
||||
* are out of the range.
|
||||
*/
|
||||
|
||||
tmp = (tmp * 4) + 70;
|
||||
isLeap = 0;
|
||||
if (rem >= SECSPERYEAR) { /* 1971, etc. */
|
||||
tmp++;
|
||||
rem -= SECSPERYEAR;
|
||||
if (rem >= SECSPERYEAR) { /* 1972, etc. */
|
||||
tmp++;
|
||||
rem -= SECSPERYEAR;
|
||||
if (rem >= SECSPERYEAR + SECSPERDAY) { /* 1973, etc. */
|
||||
tmp++;
|
||||
rem -= SECSPERYEAR + SECSPERDAY;
|
||||
} else {
|
||||
isLeap = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
tmPtr->tm_year = tmp;
|
||||
|
||||
/*
|
||||
* Compute the day of year and leave the seconds in the current day in the
|
||||
* remainder.
|
||||
*/
|
||||
|
||||
tmPtr->tm_yday = rem / SECSPERDAY;
|
||||
rem %= SECSPERDAY;
|
||||
|
||||
/*
|
||||
* Compute the time of day.
|
||||
*/
|
||||
|
||||
tmPtr->tm_hour = rem / 3600;
|
||||
rem %= 3600;
|
||||
tmPtr->tm_min = rem / 60;
|
||||
tmPtr->tm_sec = rem % 60;
|
||||
|
||||
/*
|
||||
* Compute the month and day of month.
|
||||
*/
|
||||
|
||||
days = (isLeap) ? leapDays : normalDays;
|
||||
for (tmp = 1; days[tmp] < tmPtr->tm_yday; tmp++) {
|
||||
/* empty body */
|
||||
}
|
||||
tmPtr->tm_mon = --tmp;
|
||||
tmPtr->tm_mday = tmPtr->tm_yday - days[tmp];
|
||||
|
||||
/*
|
||||
* Compute day of week. Epoch started on a Thursday.
|
||||
*/
|
||||
|
||||
tmPtr->tm_wday = (long)(*tp / SECSPERDAY) + 4;
|
||||
if ((*tp % SECSPERDAY) < 0) {
|
||||
tmPtr->tm_wday--;
|
||||
}
|
||||
tmPtr->tm_wday %= 7;
|
||||
if (tmPtr->tm_wday < 0) {
|
||||
tmPtr->tm_wday += 7;
|
||||
}
|
||||
|
||||
return tmPtr;
|
||||
}
|
||||
#endif /* TCL_NO_DEPRECATED */
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
@@ -1058,69 +811,6 @@ AccumulateSample(
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclpGmtime --
|
||||
*
|
||||
* Wrapper around the 'gmtime' library function to make it thread safe.
|
||||
*
|
||||
* Results:
|
||||
* Returns a pointer to a 'struct tm' in thread-specific data.
|
||||
*
|
||||
* Side effects:
|
||||
* Invokes gmtime or gmtime_r as appropriate.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef TCL_NO_DEPRECATED
|
||||
struct tm *
|
||||
TclpGmtime(
|
||||
const time_t *timePtr) /* Pointer to the number of seconds since the
|
||||
* local system's epoch */
|
||||
{
|
||||
/*
|
||||
* The MS implementation of gmtime is thread safe because it returns the
|
||||
* time in a block of thread-local storage, and Windows does not provide a
|
||||
* Posix gmtime_r function.
|
||||
*/
|
||||
|
||||
return gmtime(timePtr);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TclpLocaltime --
|
||||
*
|
||||
* Wrapper around the 'localtime' library function to make it thread
|
||||
* safe.
|
||||
*
|
||||
* Results:
|
||||
* Returns a pointer to a 'struct tm' in thread-specific data.
|
||||
*
|
||||
* Side effects:
|
||||
* Invokes localtime or localtime_r as appropriate.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
struct tm *
|
||||
TclpLocaltime(
|
||||
const time_t *timePtr) /* Pointer to the number of seconds since the
|
||||
* local system's epoch */
|
||||
{
|
||||
/*
|
||||
* The MS implementation of localtime is thread safe because it returns
|
||||
* the time in a block of thread-local storage, and Windows does not
|
||||
* provide a Posix localtime_r function.
|
||||
*/
|
||||
|
||||
return localtime(timePtr);
|
||||
}
|
||||
#endif /* TCL_NO_DEPRECATED */
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user