summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2024-09-23 16:38:30 (GMT)
committerdgp <dgp@users.sourceforge.net>2024-09-23 16:38:30 (GMT)
commitcd91553ab5cce8811e9e68bf920f14063a85c7d3 (patch)
treed3c0da39fbd9e23d2cb9ef29166124ea1f4a6aad
parent6db25dbb4a9efbd48d795450836aeeb3ccfd6580 (diff)
parent74097337fcadf1c614db88a4ef9952825d68e86b (diff)
downloadtcl-cd91553ab5cce8811e9e68bf920f14063a85c7d3.zip
tcl-cd91553ab5cce8811e9e68bf920f14063a85c7d3.tar.gz
tcl-cd91553ab5cce8811e9e68bf920f14063a85c7d3.tar.bz2
Merge trunk; Remove "Known Bugs" that are now fixed; changes file wordsmithing
-rw-r--r--changes.md14
-rw-r--r--doc/clock.n8
-rw-r--r--doc/coroutine.n6
-rw-r--r--doc/msgcat.n2
-rw-r--r--generic/tclBasic.c2
-rw-r--r--generic/tclBinary.c2
-rw-r--r--generic/tclCkalloc.c2
-rw-r--r--generic/tclCmdIL.c2
-rw-r--r--generic/tclCompile.c5
-rw-r--r--generic/tclEncoding.c2
-rw-r--r--generic/tclIO.c2
-rw-r--r--generic/tclIORChan.c4
-rw-r--r--generic/tclIORTrans.c4
-rw-r--r--generic/tclIOUtil.c22
-rw-r--r--generic/tclIndexObj.c2
-rw-r--r--generic/tclListObj.c14
-rw-r--r--generic/tclLoad.c2
-rw-r--r--generic/tclOOProp.c2
-rw-r--r--generic/tclProc.c2
-rw-r--r--generic/tclStrToD.c4
-rw-r--r--generic/tclStringObj.c6
-rw-r--r--generic/tclTest.c4
-rw-r--r--generic/tclTestABSList.c2
-rw-r--r--generic/tclThreadAlloc.c2
-rw-r--r--generic/tclTrace.c2
-rw-r--r--generic/tclUtil.c4
-rw-r--r--generic/tclVar.c4
-rw-r--r--tests/list.test10
-rw-r--r--unix/tclUnixFCmd.c4
-rw-r--r--win/tclWinConsole.c4
30 files changed, 79 insertions, 66 deletions
diff --git a/changes.md b/changes.md
index f387ffc..3dc9636 100644
--- a/changes.md
+++ b/changes.md
@@ -50,7 +50,7 @@ writing Tcl scripts.
(If you need a particular precision, use `format`.)
- Removed pre-Tcl 8 legacies: `case`, `puts` and `read` variant syntaxes.
- Removed subcommands [`trace variable`|`vdelete`|`vinfo`]
- - No `-eofchar` option for channels anymore for writing.
+ - Removed `-eofchar` option for write channels.
- On Windows 10+ (Version 1903 or higher), system encoding is always utf-8.
- `%b`/`%d`/`%o`/`%x` format modifiers (without size modifier) for `format`
and `scan` always truncate to 32-bits on all platforms.
@@ -60,6 +60,9 @@ writing Tcl scripts.
more comprehensible semantics.)
## Incompatibilities in C public interface
+ - Extensions built against Tcl 8.6 and before will not work with Tcl 9.0;
+ ABI compatibility was a non-goal for 9.0. In _most_ cases, rebuilding
+ against Tcl 9.0 should work except when a removed API function is used.
- Many arguments expanded type from `int` to `Tcl_Size`, a signed integer type
large enough to support 64-bit sized memory objects.
The constant `TCL_AUTO_LENGTH` is a value of that type that indicates that
@@ -68,7 +71,7 @@ writing Tcl scripts.
- Introduced versioning of the `Tcl_ObjType` struct
- Removed macros `CONST*`: Tcl 9 support means dropping Tcl 8.3 support.
(Replaced with standard C `const` keyword going forward.)
- - Removed routines:
+ - Removed API functions:
`Tcl_Backslash()`,
`Tcl_*VA()`,
@@ -80,9 +83,6 @@ writing Tcl scripts.
`Tcl_UniCharN(case)cmp()`,
`Tcl_UniCharCaseMatch()`
-Note that builds of extensions against Tcl 8.6 and before are expected to not work with Tcl 9.0; ABI compatibility was a non-goal for 9.0.
-In _most_ cases, rebuilding the code against Tcl 9.0 should work except when a removed API function is used.
-
# New Features
## New commands
@@ -136,10 +136,8 @@ In _most_ cases, rebuilding the code against Tcl 9.0 should work except when a r
- `method -export`, `method -unexport`
# Known bugs
- - [Command line built with list not properly quoted](https://core.tcl-lang.org/tcl/tktview/e38dce)
- [changed behaviour wrt command names, namespaces and resolution](https://core.tcl-lang.org/tcl/tktview/f14b33)
- - [classmethod fails if no argument supplied to class create](https://core.tcl-lang.org/tcl/tktview/680503)
- [windows dos device paths inconsistencies and missing functionality](https://core.tcl-lang.org/tcl/tktview/d8f121)
- [zlib-8.8, zlib-8.16 fail on Fedora 40, gcc 14.1.1](https://core.tcl-lang.org/tcl/tktview/73d5cb)
- [Temporary folder with file "tcl9registry13.dll" remains after "exit"](https://core.tcl-lang.org/tcl/tktview/6ce3c0)
- \ No newline at end of file
+
diff --git a/doc/clock.n b/doc/clock.n
index e8031de..a28254e 100644
--- a/doc/clock.n
+++ b/doc/clock.n
@@ -584,7 +584,7 @@ On input, accepts a string of digits (or floating point with the time fraction)
and interprets it as an Astronomical Julian Day Number (JDN/JD).
The Astronomical Julian Date is a count of the number of calendar days
that have elapsed since 1 January, 4713 BCE of the proleptic
-Julian calendar, which contains also the time fraktion (after floating point).
+Julian calendar, which contains also the time fraction (after floating point).
The epoch time of 1 January 1970 corresponds to Astronomical JDN 2440587.5.
This value corresponds the julian day used in sqlite-database, and is the same
as result of \fBselect julianday(:seconds, 'unixepoch')\fR.
@@ -596,7 +596,7 @@ On input, accepts a string of digits (or floating point with the time fraction)
and interprets it as a Calendar Julian Day Number.
The Calendar Julian Date is a count of the number of calendar days
that have elapsed since 1 January, 4713 BCE of the proleptic
-Julian calendar, which contains also the time fraktion (after floating point).
+Julian calendar, which contains also the time fraction (after floating point).
The epoch time of 1 January 1970 corresponds to Astronomical JDN 2440588.
.IP \fB%Es\fR
This affects similar to \fB%s\fR, but in opposition to \fB%s\fR it parses
@@ -642,7 +642,7 @@ On output, produces a two-digit number giving the hour of the day
On output, produces a three-digit number giving the day of the year
(001-366). On input, accepts such a number.
.IP \fB%J\fR
-On output, produces a string of digits giving the calendar Julian Day Number.
+On output, produces a string of digits giving the Julian Day Number.
On input, accepts a string of digits and interprets it as a Julian Day Number.
The Julian Day Number is a count of the number of calendar days
that have elapsed since 1 January, 4713 BCE of the proleptic
@@ -933,7 +933,7 @@ acceptable formats are
.QW "\fIdd monthname yy\fR" ,
.QW "?\fICC\fR?\fIyymmdd\fR" ,
and
-.QW "\fIdd\fB\-\fImonthname\fB\-\fR?\fICC\fR?\fIyy\fR" .
+.QW "\fIdd\fB-\fImonthname\fB-\fR?\fICC\fR?\fIyy\fR" .
The default year is the current year. If the year is less
than 100, we treat the years 00-68 as 2000-2068 and the years 69-99
as 1969-1999. Not all platforms can represent the years 38-70, so
diff --git a/doc/coroutine.n b/doc/coroutine.n
index cb4d3dd..6dae482 100644
--- a/doc/coroutine.n
+++ b/doc/coroutine.n
@@ -98,7 +98,7 @@ with quite a bit of similarity to \fBcoroprobe\fR. However, with
.VS "8.7, TIP383"
The coroutine is not immediately resumed after the injection has been done. A
consequence of this is that multiple injections may be done before the
-coroutine is resumed. There injected commands are performed in \fIreverse
+coroutine is resumed. The injected commands are performed in \fIreverse
order of definition\fR (that is, they are internally stored on a stack).
.VE "8.7, TIP383"
.IP \(bu
@@ -245,10 +245,6 @@ puts [\fBcoroprobe \fIcollect\fR set accumulator]
puts [\fIcollect\fR]
# ==> 123 {abc def} 456 pqr RST xyz
.CE
-.PP
-This example shows a simple coroutine that collects non-empty values and
-returns a list of them when not given an argument. It also shows how we can
-look inside the coroutine to find out what it is doing.
.VE "8.7, TIP383"
.SS "DETAILED SEMANTICS"
.PP
diff --git a/doc/msgcat.n b/doc/msgcat.n
index ad341c1..18b6da3 100644
--- a/doc/msgcat.n
+++ b/doc/msgcat.n
@@ -98,7 +98,7 @@ use the result. If an application is written for a single language in
this fashion, then it is easy to add support for additional languages
later simply by defining new message catalog entries.
.RE
-.\" COMMAND: mcc
+.\" COMMAND: mcn
.TP
\fB::msgcat::mcn \fInamespace src-string\fR ?\fIarg arg ...\fR?
.VS "TIP 490"
diff --git a/generic/tclBasic.c b/generic/tclBasic.c
index a979ab9..dca1088 100644
--- a/generic/tclBasic.c
+++ b/generic/tclBasic.c
@@ -9756,7 +9756,7 @@ TclNRCoroutineObjCmd(
/*
* #280.
* Provide the new coroutine with its own copy of the lineLABCPtr
- * hashtable for literal command arguments in bytecode. Note that that
+ * hashtable for literal command arguments in bytecode. Note that
* CFWordBC chains are not duplicated, only the entrypoints to them. This
* means that in the presence of coroutines each chain is potentially a
* tree. Like the chain -> tree conversion of the CmdFrame stack.
diff --git a/generic/tclBinary.c b/generic/tclBinary.c
index a78f955..d8feab7 100644
--- a/generic/tclBinary.c
+++ b/generic/tclBinary.c
@@ -2399,7 +2399,7 @@ DeleteScanNumberCache(
*
* NOTES --
*
- * Some measurements show that it is faster to use a table to to perform
+ * Some measurements show that it is faster to use a table to perform
* uuencode and base64 value encoding than to calculate the output (at
* least on intel P4 arch).
*
diff --git a/generic/tclCkalloc.c b/generic/tclCkalloc.c
index be741a3..bf2b12c 100644
--- a/generic/tclCkalloc.c
+++ b/generic/tclCkalloc.c
@@ -1274,7 +1274,7 @@ TclAllocElemsEx(
*
* Attempts to allocate (oldPtr == NULL) or reallocate memory of the
* requested size plus some more for future growth. The amount of
- * reallocation is adjusted depending on on failure.
+ * reallocation is adjusted depending on failure.
*
*
* Results:
diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c
index 19a6226..225f634 100644
--- a/generic/tclCmdIL.c
+++ b/generic/tclCmdIL.c
@@ -2295,7 +2295,7 @@ Tcl_LassignObjCmd(
}
/*
* Must incrref elemObj. If the var name being set is same as the
- * the list value, ObjSetVar2 will shimmer the list to a VAR freeing
+ * list value, ObjSetVar2 will shimmer the list to a VAR freeing
* the elements in the list (in case list refCount was 1) BEFORE
* the elemObj is stored in the var. See tests 6.{25,26}
*/
diff --git a/generic/tclCompile.c b/generic/tclCompile.c
index db5a5fd..edf1ca7 100644
--- a/generic/tclCompile.c
+++ b/generic/tclCompile.c
@@ -2493,7 +2493,7 @@ TclCompileTokens(
* commands. See the branch below for TCL_TOKEN_COMMAND, where the
* adjustment being tracked here is taken into account. The good
* thing is a table of everything is not needed, just the number of
- * lines to to add as correction.
+ * lines to add as correction.
*/
if ((length == 1) && (buffer[0] == ' ') &&
@@ -2688,8 +2688,7 @@ void
TclCompileExprWords(
Tcl_Interp *interp, /* Used for error and status reporting. */
Tcl_Token *tokenPtr, /* Points to first in an array of word tokens
- * tokens for the expression to compile
- * inline. */
+ * for the expression to compile inline. */
size_t numWords1, /* Number of word tokens starting at tokenPtr.
* Must be at least 1. Each word token
* contains one or more subtokens. */
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c
index 97f9f2b..ab53e6d 100644
--- a/generic/tclEncoding.c
+++ b/generic/tclEncoding.c
@@ -1922,7 +1922,7 @@ LoadEncodingFile(
* little-endian systems.
*
* Results:
- * Returns the new Tcl_Encoding, or NULL if it could could
+ * Returns the new Tcl_Encoding, or NULL if it could
* not be created because the file contained invalid data.
*
* Side effects:
diff --git a/generic/tclIO.c b/generic/tclIO.c
index b89f415..7e3f575 100644
--- a/generic/tclIO.c
+++ b/generic/tclIO.c
@@ -10563,7 +10563,7 @@ Tcl_GetChannelNames(
*
* Tcl_GetChannelNamesEx --
*
- * Return the names of open channels in the interp filtered filtered
+ * Return the names of open channels in the interp filtered
* through a pattern. If pattern is NULL, it returns all the open
* channels.
*
diff --git a/generic/tclIORChan.c b/generic/tclIORChan.c
index 859366f..beb4d2c 100644
--- a/generic/tclIORChan.c
+++ b/generic/tclIORChan.c
@@ -706,7 +706,7 @@ TclChanCreateObjCmd(
}
/*
- * Register the channel in the I/O system, and in our our map for 'chan
+ * Register the channel in the I/O system, and in our map for 'chan
* postevent'.
*/
@@ -2983,7 +2983,7 @@ ForwardProc(
* quiescent. Because of this we can treat the data as belonging to us,
* without fear of race conditions. I.e. we can read and write as we like.
*
- * The only thing we cannot be sure of is the resultPtr. This can be be
+ * The only thing we cannot be sure of is the resultPtr. This can be
* NULLed if the originating thread went away while the event is handled
* here now.
*/
diff --git a/generic/tclIORTrans.c b/generic/tclIORTrans.c
index d2853e2..16c357f 100644
--- a/generic/tclIORTrans.c
+++ b/generic/tclIORTrans.c
@@ -683,7 +683,7 @@ TclChanPushObjCmd(
rtPtr->parent);
/*
- * Register the transform in our our map for proper handling of deleted
+ * Register the transform in our map for proper handling of deleted
* interpreters and/or threads.
*/
@@ -2470,7 +2470,7 @@ ForwardProc(
* quiescent. Because of this we can treat the data as belonging to us,
* without fear of race conditions. I.e. we can read and write as we like.
*
- * The only thing we cannot be sure of is the resultPtr. This can be be
+ * The only thing we cannot be sure of is the resultPtr. This can be
* NULLed if the originating thread went away while the event is handled
* here now.
*/
diff --git a/generic/tclIOUtil.c b/generic/tclIOUtil.c
index 4f34053..26d7303 100644
--- a/generic/tclIOUtil.c
+++ b/generic/tclIOUtil.c
@@ -1223,7 +1223,7 @@ FsAddMountsToGlobResult(
*
* The reason for the exception in 2,3 for the native filesystem is that
* the native filesystem claims every file without determining whether
- * whether the file exists, or even whether the pathname makes sense.
+ * the file exists, or even whether the pathname makes sense.
*
*----------------------------------------------------------------------
*/
@@ -2018,7 +2018,7 @@ Tcl_GetErrno(void)
* None.
*
* Side effects:
- * Modifies the the Tcl error code value.
+ * Modifies the Tcl error code value.
*
*----------------------------------------------------------------------
*/
@@ -2769,7 +2769,7 @@ Tcl_FSGetCwd(
if (retVal == NULL) {
/*
- * The current directory could not not determined. Reset the
+ * The current directory could not be determined. Reset the
* current direcory to ensure, for example, that 'pwd' does actually
* throw the correct error in Tcl. This is tested for in the test
* suite on unix.
@@ -2944,7 +2944,7 @@ Tcl_FSChdir(
if (cd != oldcd) {
/*
* Call getCwdProc() and store the resulting internal handle to
- * compare things with it later. This might might not be
+ * compare things with it later. This might not be
* exactly the same string as that of the fully normalized
* pathname. For example, for the Windows internal handle the
* separator is the backslash character. On Unix it might well
@@ -3512,7 +3512,7 @@ DivertUnloadFile(
if (tvdlPtr->divertedFilesystem == NULL) {
/*
- * Use the function for the native filsystem, which works works even at
+ * Use the function for the native filsystem, which works even at
* this late stage.
*/
@@ -3575,7 +3575,7 @@ void *
Tcl_FindSymbol(
Tcl_Interp *interp, /* The relevant interpreter. */
Tcl_LoadHandle loadHandle, /* A handle for the loaded object. */
- const char *symbol) /* The name name of the symbol to resolve. */
+ const char *symbol) /* The name of the symbol to resolve. */
{
return loadHandle->findSymbolProcPtr(interp, loadHandle, symbol);
}
@@ -3954,7 +3954,7 @@ TclFSNonnativePathType(
/* If not NULL, a place to store the length of
* the volume name if the pathname is absolute. */
Tcl_Obj **driveNameRef) /* If not NULL, a place to store a pointer to
- * an object having its its refCount already
+ * an object having its refCount already
* incremented, and contining the name of the
* volume if the pathname is absolute. */
{
@@ -3970,7 +3970,7 @@ TclFSNonnativePathType(
Claim();
while (fsRecPtr != NULL) {
/*
- * Skip the the native filesystem because otherwise some of the tests
+ * Skip the native filesystem because otherwise some of the tests
* in the Tcl testsuite might fail because some of the tests
* artificially change the current platform (between win, unix) but the
* list of volumes obtained by calling fsRecPtr->fsPtr->listVolumesProc
@@ -4033,7 +4033,7 @@ TclFSNonnativePathType(
Tcl_DecrRefCount(thisFsVolumes);
if (type == TCL_PATH_ABSOLUTE) {
/*
- * No need to to examine additional filesystems.
+ * No need to examine additional filesystems.
*/
break;
@@ -4284,7 +4284,7 @@ Tcl_FSCreateDirectory(
*
* Tcl_FSCopyDirectory --
*
- * If both pathnames correspond to the the same filesystem, calls
+ * If both pathnames correspond to the same filesystem, calls
* 'copyDirectoryProc' of that filesystem.
*
* Results:
@@ -4348,7 +4348,7 @@ Tcl_FSRemoveDirectory(
* Otherwise, removes the directory and all its
* contents. */
Tcl_Obj **errorPtr) /* If not NULL and an error occurs, stores a
- * place to store a a pointer to a new
+ * place to store a pointer to a new
* object having a refCount of 1 and containing
* the name of the file that produced an error. */
{
diff --git a/generic/tclIndexObj.c b/generic/tclIndexObj.c
index 3e92b5a..2dbc6f6 100644
--- a/generic/tclIndexObj.c
+++ b/generic/tclIndexObj.c
@@ -829,7 +829,7 @@ Tcl_WrongNumArgs(
}
/*
- * If processing an an ensemble implementation, rewrite the results in
+ * If processing an ensemble implementation, rewrite the results in
* terms of how the ensemble was invoked.
*/
diff --git a/generic/tclListObj.c b/generic/tclListObj.c
index 975bc2e..36914bc 100644
--- a/generic/tclListObj.c
+++ b/generic/tclListObj.c
@@ -1616,8 +1616,8 @@ TclListObjRange(
* TclListObjGetElement --
*
* Returns a single element from the array of the elements in a list
- * object, without doing doing any bounds checking. Caller must ensure
- * that ObjPtr of of type 'tclListType' and that index is valid for the
+ * object, without doing any bounds checking. Caller must ensure
+ * that ObjPtr of type 'tclListType' and that index is valid for the
* list.
*
*----------------------------------------------------------------------
@@ -1776,6 +1776,16 @@ Tcl_ListObjAppendList(
}
if (elemCount <= 0) {
+ /*
+ * Note that when elemCount <= 0, this routine is logically a
+ * no-op, removing and adding no elements to the list. However, by removing
+ * the string representation, we get the important side effect that the
+ * resulting listPtr is a list in canonical form. This is important.
+ * Resist any temptation to optimize this case further. See bug [e38dce74e2].
+ */
+ if (!ListObjIsCanonical(toObj)) {
+ TclInvalidateStringRep(toObj);
+ }
/* Nothing to do. Note AFTER check for list above */
return TCL_OK;
}
diff --git a/generic/tclLoad.c b/generic/tclLoad.c
index dd4d470..95f9c22 100644
--- a/generic/tclLoad.c
+++ b/generic/tclLoad.c
@@ -535,7 +535,7 @@ Tcl_LoadObjCmd(
*
* Tcl_UnloadObjCmd --
*
- * Implements the the "unload" Tcl command. See the
+ * Implements the "unload" Tcl command. See the
* user documentation for details on what it does.
*
* Results:
diff --git a/generic/tclOOProp.c b/generic/tclOOProp.c
index a8b2002..7a66f7b 100644
--- a/generic/tclOOProp.c
+++ b/generic/tclOOProp.c
@@ -736,7 +736,7 @@ SortPropList(
*
* TclOOGetAllObjectProperties --
*
- * Get the sorted list of all properties known to a object, including to its
+ * Get the sorted list of all properties known to an object, including to
* its classes. Manages a cache so this operation is usually cheap.
*
* ----------------------------------------------------------------------
diff --git a/generic/tclProc.c b/generic/tclProc.c
index 4add38e..52ca08e 100644
--- a/generic/tclProc.c
+++ b/generic/tclProc.c
@@ -2395,7 +2395,7 @@ ProcBodyFree(
*
* How to manage the internal representations of lambda term objects.
* Syntactically they look like a two- or three-element list, where the
- * first element is the formal arguments, the second is the the body, and
+ * first element is the formal arguments, the second is the body, and
* the (optional) third is the namespace to execute the lambda term
* within (the global namespace is assumed if it is absent).
*
diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c
index f6e0e3c..c6778ce 100644
--- a/generic/tclStrToD.c
+++ b/generic/tclStrToD.c
@@ -3174,7 +3174,7 @@ ShorteningInt64Conversion(
/*
* Does the current digit put us on the low side of the exact value
- * but within within roundoff of being exact?
+ * but within roundoff of being exact?
*/
if (b < mplus || (b == mplus
@@ -3572,7 +3572,7 @@ ShorteningBignumConversionPowD(
/*
* Does the current digit put us on the low side of the exact value
- * but within within roundoff of being exact?
+ * but within roundoff of being exact?
*/
r1 = mp_cmp_mag(&b, (m2plus > m2minus)? &mplus : &mminus);
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c
index f4428d1..059f8dd 100644
--- a/generic/tclStringObj.c
+++ b/generic/tclStringObj.c
@@ -597,15 +597,15 @@ TclGetUniChar(
}
/*
- * Optimize the ByteArray case: N need need to convert to a string to
- * perform the indexing operation.
+ * Optimize the ByteArray case: no need to convert to a string to
+ * perform the indexing operation.
*/
if (TclIsPureByteArray(objPtr)) {
Tcl_Size length = 0;
unsigned char *bytes = Tcl_GetBytesFromObj(NULL, objPtr, &length);
if (index >= length) {
- return -1;
+ return -1;
}
return bytes[index];
diff --git a/generic/tclTest.c b/generic/tclTest.c
index 6c25770..d2e2aaa 100644
--- a/generic/tclTest.c
+++ b/generic/tclTest.c
@@ -8378,7 +8378,7 @@ InterpCmdResolver(
* compilation (e.g. in TclProcCompileProc)
*
* When these conditions hold, this function resolves the
- * passed-in cmd literal into a cmd "y", which is taken from the
+ * passed-in cmd literal into a cmd "y", which is taken from
* the global namespace (for simplicity).
*/
@@ -8404,7 +8404,7 @@ InterpCmdResolver(
*
* When these conditions hold, this function resolves the
* passed-in cmd literal into a cmd "y" or "Y" depending on the
- * context. The resolved procs are taken from the the global
+ * context. The resolved procs are taken from the global
* namespace (for simplicity).
*/
diff --git a/generic/tclTestABSList.c b/generic/tclTestABSList.c
index 2e554e7..7e853e4 100644
--- a/generic/tclTestABSList.c
+++ b/generic/tclTestABSList.c
@@ -480,7 +480,7 @@ static int my_LStringObjRange(
*
* my_LStringObjReverse --
*
- * Creates a new Obj with the the order of the elements in the lstring
+ * Creates a new Obj with the order of the elements in the lstring
* value reversed, where first is last and last is first, etc.
*
* Results:
diff --git a/generic/tclThreadAlloc.c b/generic/tclThreadAlloc.c
index 124f655..152b43d 100644
--- a/generic/tclThreadAlloc.c
+++ b/generic/tclThreadAlloc.c
@@ -69,7 +69,7 @@ typedef union Block {
#define blockReqSize b.reqSize
/*
- * The following defines the minimum and and maximum block sizes and the number
+ * The following defines the minimum and maximum block sizes and the number
* of buckets in the bucket cache.
*/
diff --git a/generic/tclTrace.c b/generic/tclTrace.c
index 18eb1cc..24f4d31 100644
--- a/generic/tclTrace.c
+++ b/generic/tclTrace.c
@@ -1455,7 +1455,7 @@ TclCheckInterpTraces(
if (!(tracePtr->flags & TCL_TRACE_EXEC_IN_PROGRESS)) {
/*
- * The proc invoked might delete the traced command which which
+ * The proc invoked might delete the traced command which
* might try to free tracePtr. We want to use tracePtr until the
* end of this if section, so we use Tcl_Preserve() and
* Tcl_Release() to be sure it is not freed while we still need
diff --git a/generic/tclUtil.c b/generic/tclUtil.c
index 9145a95..178df5f 100644
--- a/generic/tclUtil.c
+++ b/generic/tclUtil.c
@@ -3415,7 +3415,7 @@ GetWideForIndex(
* Results:
* TCL_OK
*
- * The index is stored at the address given by by 'indexPtr'.
+ * The index is stored at the address given by 'indexPtr'.
*
* TCL_ERROR
*
@@ -3700,7 +3700,7 @@ GetEndOffsetFromObj(
* Encodes end+1. This is distinguished from end+n as noted
* in function header.
* NOTE: this may wrap around if the caller passes (as lset does)
- * listLen-1 as endValue and and listLen is 0. The -1 will be
+ * listLen-1 as endValue and listLen is 0. The -1 will be
* interpreted as FF...FF and adding 1 will result in 0 which
* is what we want. Callers like lset which pass in listLen-1 == -1
* as endValue will have to adjust accordingly.
diff --git a/generic/tclVar.c b/generic/tclVar.c
index 74647ee..5320950 100644
--- a/generic/tclVar.c
+++ b/generic/tclVar.c
@@ -745,7 +745,7 @@ TclObjLookupVarEx(
TclFreeInternalRep(cachedNamePtr);
/*
- * Now go ahead and convert it the the "localVarName" type,
+ * Now go ahead and convert it to the "localVarName" type,
* since we suspect at least some use of the value as a
* varname and we want to resolve it quickly.
*/
@@ -2990,7 +2990,7 @@ Tcl_LappendObjCmd(
*
* These functions implement the "array for" Tcl command.
* array for {k v} a {}
- * The array for command iterates over the array, setting the the
+ * The array for command iterates over the array, setting the
* specified loop variables, and executing the body each iteration.
*
* ArrayForObjCmd() is the standard wrapper around ArrayForNRCmd().
diff --git a/tests/list.test b/tests/list.test
index 905a3d3..a4689ae 100644
--- a/tests/list.test
+++ b/tests/list.test
@@ -64,6 +64,16 @@ test list-1.30 {basic null treatment} {
set e "\x00abc xyz"
string equal $l $e
} 1
+test list-1.31 {bug [e38dce74e2]} {
+ set l #foo
+ set e {}
+ list {*}$l {*}$e
+} {{#foo}}
+test list-1.32 {bug [e38dce74e2]} {
+ set l " #foo"
+ set e {}
+ list {*}$l {*}$e
+} {{#foo}}
# For the next round of tests create a list and then pick it apart
# with "index" to make sure that we get back exactly what went in.
diff --git a/unix/tclUnixFCmd.c b/unix/tclUnixFCmd.c
index fab9c32..d9429c8 100644
--- a/unix/tclUnixFCmd.c
+++ b/unix/tclUnixFCmd.c
@@ -2066,7 +2066,7 @@ TclpObjNormalizePath(
if (haveRealpath) {
if (nextCheckpoint == 0) {
/*
- * The path contains at most one component, e.g. '/foo' or '/', so
+ * The path contains at most one component, e.g. '/foo' or '/',
* so there is nothing to resolve. Also, on some platforms
* 'Realpath' transforms an empty string into the normalized pwd,
* which is the wrong answer.
@@ -2097,7 +2097,7 @@ TclpObjNormalizePath(
* Uncommenting this would mean that this native filesystem
* routine claims the path is normalized if the file exists,
* which would permit the caller to avoid iterating through
- * other filesystems filesystems. Saving lots of calls is
+ * other filesystems. Saving lots of calls is
* probably worth the extra access() time, but in the common
* case that no other filesystems are registered this is an
* unnecessary expense.
diff --git a/win/tclWinConsole.c b/win/tclWinConsole.c
index ee04b05..7b73780 100644
--- a/win/tclWinConsole.c
+++ b/win/tclWinConsole.c
@@ -1482,7 +1482,7 @@ static void
ConsoleWatchProc(
void *instanceData, /* Console state. */
int newMask) /* What events to watch for, one of
- * of TCL_READABLE, TCL_WRITABLE */
+ * TCL_READABLE, TCL_WRITABLE */
{
ConsoleChannelInfo **nextPtrPtr, *ptr;
ConsoleChannelInfo *chanInfoPtr = (ConsoleChannelInfo *)instanceData;
@@ -1719,7 +1719,7 @@ ConsoleReaderThread(
/*
* Loop back to recheck for exit conditions changes while the
- * the lock was not held.
+ * lock was not held.
*/
continue;
}