Tcl Source Code

Artifact [5a1f83347b]
Login

Artifact 5a1f83347b5ec98d31e0f854f3a4852c2a6f7eed:

Attachment "expand2.diff" to ticket [1589629fff] added by hobbs 2006-11-03 07:25:52.
? bgexec.patch
? expand.diff
? expand2.diff
? pkgs
? unix/Makefile.in.pkgs
Index: doc/ParseCmd.3
===================================================================
RCS file: /cvsroot/tcl/tcl/doc/ParseCmd.3,v
retrieving revision 1.23
diff -u -r1.23 ParseCmd.3
--- doc/ParseCmd.3	9 Aug 2006 10:06:28 -0000	1.23
+++ doc/ParseCmd.3	3 Nov 2006 00:25:28 -0000
@@ -291,7 +291,7 @@
 .VS 8.5
 This token has the same meaning as \fBTCL_TOKEN_WORD\fR, except that
 the command parser notes this word began with the expansion
-prefix \fB{expand}\fR, indicating that after substitution,
+prefix \fB{*}\fR, indicating that after substitution,
 the list value of this word should be expanded to form multiple
 arguments in command evaluation.  This
 token type can only be created by Tcl_ParseCommand.
Index: doc/Tcl.n
===================================================================
RCS file: /cvsroot/tcl/tcl/doc/Tcl.n,v
retrieving revision 1.13
diff -u -r1.13 Tcl.n
--- doc/Tcl.n	19 Dec 2005 10:05:29 -0000	1.13
+++ doc/Tcl.n	3 Nov 2006 00:25:28 -0000
@@ -51,12 +51,12 @@
 The double-quotes are not retained as part of the word.
 .VS 8.5 br
 .IP "[5] \fBArgument expansion.\fR"
-If a word starts with the string ``{expand}'' followed by a 
-non-whitespace character, then the leading ``{expand}'' is removed
+If a word starts with the string ``{*}'' followed by a 
+non-whitespace character, then the leading ``{*}'' is removed
 and the rest of the word is parsed and substituted as any other  
 word. After substitution, the word is parsed again without
 substitutions, and its words are added to the command being
-substituted. For instance, ``cmd a {expand}{b c} d {expand}{e f}'' is
+substituted. For instance, ``cmd a {*}{b c} d {*}{e f}'' is
 equivalent to ``cmd a b c d e f''. 
 .VE 8.5
 .IP "[6] \fBBraces.\fR"
Index: doc/eval.n
===================================================================
RCS file: /cvsroot/tcl/tcl/doc/eval.n,v
retrieving revision 1.6
diff -u -r1.6 eval.n
--- doc/eval.n	27 Oct 2004 09:36:58 -0000	1.6
+++ doc/eval.n	3 Nov 2006 00:25:28 -0000
@@ -53,7 +53,7 @@
 .VS 8.5
 Note that in the most common case (where the script fragment is
 actually just a list of words forming a command prefix), it is better
-to use \fB{expand}$script\fR when doing this sort of invokation
+to use \fB{*}$script\fR when doing this sort of invokation
 pattern.  It is less general than the \fBeval\fR command, and hence
 easier to make robust in practice.
 .VE 8.5
@@ -73,7 +73,7 @@
 However, the last line would now normally be written without
 \fBeval\fR, like this:
 .CS
-set var [linsert $var 0 {expand}$args]
+set var [linsert $var 0 {*}$args]
 .CE
 .VE 8.5
 
Index: doc/exec.n
===================================================================
RCS file: /cvsroot/tcl/tcl/doc/exec.n,v
retrieving revision 1.13
diff -u -r1.13 exec.n
--- doc/exec.n	20 Nov 2004 00:17:32 -0000	1.13
+++ doc/exec.n	3 Nov 2006 00:25:28 -0000
@@ -367,7 +367,7 @@
 multiple arguments by default.  Instead you should write things like
 this:
 .CS
-\fBexec\fR ls -l {expand}[glob *.tcl]
+\fBexec\fR ls -l {*}[glob *.tcl]
 .CE
 .PP
 .SH "WINDOWS EXAMPLES"
@@ -407,7 +407,7 @@
 \fIdir\fR from a Tcl script (if you just want to list filenames, use
 the \fBglob\fR command.)  To do that, use this:
 .CS
-\fBexec\fR {expand}[auto_execok dir] *.tcl
+\fBexec\fR {*}[auto_execok dir] *.tcl
 .CE
 
 .SH "SEE ALSO"
Index: doc/fconfigure.n
===================================================================
RCS file: /cvsroot/tcl/tcl/doc/fconfigure.n,v
retrieving revision 1.15
diff -u -r1.15 fconfigure.n
--- doc/fconfigure.n	14 Mar 2006 22:52:17 -0000	1.15
+++ doc/fconfigure.n	3 Nov 2006 00:25:28 -0000
@@ -256,7 +256,7 @@
 while {[llength $words] < 3} {
    gets $f line
    if {[string match "#*" $line]} continue
-   lappend words {expand}[join [scan $line %d%d%d]]
+   lappend words {*}[join [scan $line %d%d%d]]
 }
 
 # Those words supply the size of the image and its
Index: doc/interp.n
===================================================================
RCS file: /cvsroot/tcl/tcl/doc/interp.n,v
retrieving revision 1.24
diff -u -r1.24 interp.n
--- doc/interp.n	10 May 2005 18:34:00 -0000	1.24
+++ doc/interp.n	3 Nov 2006 00:25:28 -0000
@@ -769,7 +769,7 @@
 \fBinterp alias\fR $i lappend {} loggedLappend $i
 proc loggedLappend {i args} {
    puts "logged invokation of lappend $args"
-   \fBinterp invokehidden\fR $i lappend {expand}$args
+   \fBinterp invokehidden\fR $i lappend {*}$args
 }
 \fBinterp eval\fR $i $someUntrustedScript
 .CE
Index: doc/unknown.n
===================================================================
RCS file: /cvsroot/tcl/tcl/doc/unknown.n,v
retrieving revision 1.6
diff -u -r1.6 unknown.n
--- doc/unknown.n	1 Feb 2006 18:27:43 -0000	1.6
+++ doc/unknown.n	3 Nov 2006 00:25:28 -0000
@@ -85,7 +85,7 @@
 # Provide our own implementation
 proc \fBunknown\fR args {
     puts stderr "WARNING: unknown command: $args"
-    uplevel 1 [list _original_unknown {expand}$args]
+    uplevel 1 [list _original_unknown {*}$args]
 }
 .CE
 
Index: generic/tclParse.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclParse.c,v
retrieving revision 1.47
diff -u -r1.47 tclParse.c
--- generic/tclParse.c	24 Sep 2006 19:13:43 -0000	1.47
+++ generic/tclParse.c	3 Nov 2006 00:25:28 -0000
@@ -18,6 +18,13 @@
 #include "tclInt.h"
 
 /*
+ * For now, we enable the {expand} although it is deprecated - remove by final
+ */
+#ifndef ALLOW_EXPAND
+#define ALLOW_EXPAND 1
+#endif
+
+/*
  * The following table provides parsing information about each possible 8-bit
  * character. The table is designed to be referenced with either signed or
  * unsigned characters, so it has 384 entries. The first 128 entries
@@ -359,8 +366,6 @@
 	    src = termPtr;
 	    numBytes = parsePtr->end - src;
 	} else if (*src == '{') {
-	    static char expPfx[] = "expand";
-	    CONST size_t expPfxLen = sizeof(expPfx) - 1;
 	    int expIdx = wordIndex + 1;
 	    Tcl_Token *expPtr;
 
@@ -372,7 +377,7 @@
 	    numBytes = parsePtr->end - src;
 
 	    /*
-	     * Check whether the braces contained the word expansion prefix.
+	     * Check whether the braces contained the word expansion prefix {*}
 	     */
 
 	    expPtr = &parsePtr->tokenPtr[expIdx];
@@ -381,14 +386,15 @@
 		/* Haven't seen prefix already */
 		&& (1 == parsePtr->numTokens - expIdx)
 		/* Only one token */
-		&& (((expPfxLen == (size_t) expPtr->size)
+		&& (((1 == (size_t) expPtr->size)
 			    /* Same length as prefix */
-			    && (0 == strncmp(expPfx,expPtr->start,expPfxLen)))
-#ifdef ALLOW_EMPTY_EXPAND
+			    && (expPtr->start[0] == '*'))
+#if defined(ALLOW_EXPAND) && ALLOW_EXPAND == 1
 			/*
-			 * Allow {} in addition to {expand}
+			 * Allow {expand} in addition to {*}
 			 */
-			|| (0 == (size_t) expPtr->size)
+			|| ((6 == (size_t) expPtr->size)
+				&& (0 == memcmp("expand",expPtr->start,6)))
 #endif
 		    )
 		/* Is the prefix */
Index: library/auto.tcl
===================================================================
RCS file: /cvsroot/tcl/tcl/library/auto.tcl,v
retrieving revision 1.27
diff -u -r1.27 auto.tcl
--- library/auto.tcl	23 Jul 2005 04:12:48 -0000	1.27
+++ library/auto.tcl	3 Nov 2006 00:25:28 -0000
@@ -212,7 +212,7 @@
     }
 
     auto_mkindex_parser::init
-    foreach file [glob -- {expand}$args] {
+    foreach file [glob -- {*}$args] {
         if {[catch {auto_mkindex_parser::mkindex $file} msg opts] == 0} {
             append index $msg
         } else {
@@ -245,7 +245,7 @@
     if {[llength $args] == 0} {
 	set args *.tcl
     }
-    foreach file [glob -- {expand}$args] {
+    foreach file [glob -- {*}$args] {
 	set f ""
 	set error [catch {
 	    set f [open $file]
Index: library/init.tcl
===================================================================
RCS file: /cvsroot/tcl/tcl/library/init.tcl,v
retrieving revision 1.87
diff -u -r1.87 init.tcl
--- library/init.tcl	23 Oct 2006 20:26:11 -0000	1.87
+++ library/init.tcl	3 Nov 2006 00:25:28 -0000
@@ -266,7 +266,7 @@
 
     set cmd [lindex $args 0]
     if {[regexp "^:*namespace\[ \t\n\]+inscope" $cmd] && [llength $cmd] == 4} {
-	#return -code error "You need an {expand}"
+	#return -code error "You need an {*}"
         set arglist [lrange $args 1 end]
 	set ret [catch {uplevel 1 ::$cmd $arglist} result opts]
 	dict unset opts -errorinfo
@@ -809,7 +809,7 @@
 	    # can be returned in various combinations.  Anyway,
 	    # if any other file is returned, we must signal an error.
 	    set existing [glob -nocomplain -directory $dest * .*]
-	    lappend existing {expand}[glob -nocomplain -directory $dest \
+	    lappend existing {*}[glob -nocomplain -directory $dest \
 		    -type hidden * .*]
 	    foreach s $existing {
 		if {([file tail $s] ne ".") && ([file tail $s] ne "..")} {
Index: library/package.tcl
===================================================================
RCS file: /cvsroot/tcl/tcl/library/package.tcl,v
retrieving revision 1.34
diff -u -r1.34 package.tcl
--- library/package.tcl	22 Sep 2006 18:13:29 -0000	1.34
+++ library/package.tcl	3 Nov 2006 00:25:28 -0000
@@ -135,7 +135,7 @@
     }
 
     if {[catch {
-	    glob -directory $dir -tails -types {r f} -- {expand}$patternList
+	    glob -directory $dir -tails -types {r f} -- {*}$patternList
     } fileList o]} {
 	return -options $o $fileList
     }
@@ -194,7 +194,7 @@
 	    proc package {what args} {
 		switch -- $what {
 		    require { return ; # ignore transitive requires }
-		    default { __package_orig $what {expand}$args }
+		    default { __package_orig $what {*}$args }
 		}
 	    }
 	    proc tclPkgUnknown args {}
@@ -252,7 +252,7 @@
 		proc ::tcl::GetAllNamespaces {{root ::}} {
 		    set list $root
 		    foreach ns [namespace children $root] {
-			lappend list {expand}[::tcl::GetAllNamespaces $ns]
+			lappend list {*}[::tcl::GetAllNamespaces $ns]
 		    }
 		    return $list
 		}
Index: library/safe.tcl
===================================================================
RCS file: /cvsroot/tcl/tcl/library/safe.tcl,v
retrieving revision 1.15
diff -u -r1.15 safe.tcl
--- library/safe.tcl	23 Jul 2005 04:12:49 -0000	1.15
+++ library/safe.tcl	3 Nov 2006 00:25:28 -0000
@@ -517,7 +517,7 @@
 		# remove the hook now, otherwise if the hook
 		# calls us somehow, we'll loop
 		Unset $hookname
-		if {[catch {{expand}$hook $slave} err]} {
+		if {[catch {{*}$hook $slave} err]} {
 		    Log $slave "Delete hook error ($err)"
 		}
 	    }
@@ -628,15 +628,15 @@
     }
     # set/get values
     proc Set {args} {
-	Toplevel set {expand}$args
+	Toplevel set {*}$args
     }
     # lappend on toplevel vars
     proc Lappend {args} {
-	Toplevel lappend {expand}$args
+	Toplevel lappend {*}$args
     }
     # unset a var/token (currently just an global level eval)
     proc Unset {args} {
-	Toplevel unset {expand}$args
+	Toplevel unset {*}$args
     }
     # test existance 
     proc Exists {varname} {
@@ -683,7 +683,7 @@
     proc Log {slave msg {type ERROR}} {
 	variable Log
 	if {[info exists Log] && [llength $Log]} {
-	    {expand}$Log "$type for slave $slave : $msg"
+	    {*}$Log "$type for slave $slave : $msg"
 	}
     }
 
@@ -846,7 +846,7 @@
     proc Subset {slave command okpat args} {
 	set subcommand [lindex $args 0]
 	if {[regexp $okpat $subcommand]} {
-	    return [$command {expand}$args]
+	    return [$command {*}$args]
 	}
 	set msg "not allowed to invoke subcommand $subcommand of $command"
 	Log $slave $msg
@@ -881,7 +881,7 @@
 	set subcommand [lindex $args 0]
 
 	if {[regexp $okpat $subcommand]} {
-	    return [::interp invokehidden $slave encoding {expand}$args]
+	    return [::interp invokehidden $slave encoding {*}$args]
 	}
 
 	if {[string first $subcommand system] == 0} {
Index: library/tm.tcl
===================================================================
RCS file: /cvsroot/tcl/tcl/library/tm.tcl,v
retrieving revision 1.10
diff -u -r1.10 tm.tcl
--- library/tm.tcl	6 Oct 2006 00:22:30 -0000	1.10
+++ library/tm.tcl	3 Nov 2006 00:25:28 -0000
@@ -264,7 +264,7 @@
 
 		    if {
 			($pkgname eq $name) &&
-			[package vsatisfies $pkgversion {expand}$args]
+			[package vsatisfies $pkgversion {*}$args]
 		    } then {
 			set satisfied 1
 			# We do not abort the loop, and keep adding
Index: library/msgcat/msgcat.tcl
===================================================================
RCS file: /cvsroot/tcl/tcl/library/msgcat/msgcat.tcl,v
retrieving revision 1.25
diff -u -r1.25 msgcat.tcl
--- library/msgcat/msgcat.tcl	11 Sep 2006 14:38:03 -0000	1.25
+++ library/msgcat/msgcat.tcl	3 Nov 2006 00:25:28 -0000
@@ -35,7 +35,7 @@
 
     # Map of language codes used in Windows registry to those of ISO-639
     if { $::tcl_platform(platform) eq "windows" } {
-	variable WinRegToISO639 [dict create  {expand}{
+	variable WinRegToISO639 [dict create  {*}{
 	    01 ar 0401 ar_SA 0801 ar_IQ 0c01 ar_EG 1001 ar_LY 1401 ar_DZ
 		  1801 ar_MA 1c01 ar_TN 2001 ar_OM 2401 ar_YE 2801 ar_SY
 		  2c01 ar_JO 3001 ar_LB 3401 ar_KW 3801 ar_AE 3c01 ar_BH
@@ -196,7 +196,7 @@
 		if {[llength $args] == 0} {
 		    return [dict get $Msgs $loc $ns $src]
 		} else {
-		    return [format [dict get $Msgs $loc $ns $src] {expand}$args]
+		    return [format [dict get $Msgs $loc $ns $src] {*}$args]
 		}
 	    }
 	}
@@ -204,7 +204,7 @@
     }
     # we have not found the translation
     return [uplevel 1 [list [namespace origin mcunknown] \
-	    $Locale $src {expand}$args]]
+	    $Locale $src {*}$args]]
 }
 
 # msgcat::mclocale --
@@ -382,7 +382,7 @@
 
 proc msgcat::mcunknown {locale src args} {
     if {[llength $args]} {
-	return [format $src {expand}$args]
+	return [format $src {*}$args]
     } else {
 	return $src
     }
Index: tests/all.tcl
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/all.tcl,v
retrieving revision 1.18
diff -u -r1.18 all.tcl
--- tests/all.tcl	30 Oct 2004 02:16:52 -0000	1.18
+++ tests/all.tcl	3 Nov 2006 00:25:28 -0000
@@ -15,5 +15,5 @@
 package require Tcl 8.5
 package require tcltest 2.2
 namespace import tcltest::*
-configure {expand}$argv -testdir [file dir [info script]]
+configure {*}$argv -testdir [file dir [info script]]
 runAllTests
Index: tests/basic.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/basic.test,v
retrieving revision 1.42
diff -u -r1.42 basic.test
--- tests/basic.test	9 Oct 2006 19:15:44 -0000	1.42
+++ tests/basic.test	3 Nov 2006 00:25:28 -0000
@@ -202,13 +202,13 @@
 } {42 {} {} Hello {} {} 42}
 
 test basic-14.1 {Tcl_CreateCommand, new cmd goes into a namespace specified in its name, if any} {testcreatecommand} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [testcreatecommand create] \
 	 [test_ns_basic::createdcommand] \
 	 [testcreatecommand delete]
 } {{} {CreatedCommandProc in ::test_ns_basic} {}}
 test basic-14.2 {Tcl_CreateCommand, namespace code ignore single ":"s in middle or end of names} {testcreatecommand} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {rename value:at: ""}
     list [testcreatecommand create2] \
 	 [value:at:] \
@@ -216,7 +216,7 @@
 } {{} {CreatedCommandProc2 in ::} {}}
 
 test basic-15.1 {Tcl_CreateObjCommand, new cmd goes into a namespace specified in its name, if any} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_basic {}
     proc test_ns_basic::cmd {} {  ;# proc requires that ns already exist
         return [namespace current]
@@ -232,7 +232,7 @@
 } {}
 
 test basic-18.1 {TclRenameCommand, name of existing cmd can have namespace qualifiers} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {rename cmd ""}
     namespace eval test_ns_basic {
         proc p {} {
@@ -244,11 +244,11 @@
          [test_ns_basic::q] 
 } {{p in ::test_ns_basic} {} {p in ::test_ns_basic}}
 test basic-18.2 {TclRenameCommand, existing cmd must be found} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {rename test_ns_basic::p test_ns_basic::q} msg] $msg
 } {1 {can't rename "test_ns_basic::p": command doesn't exist}}
 test basic-18.3 {TclRenameCommand, delete cmd if new name is empty} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_basic {
         proc p {} {
             return "p in [namespace current]"
@@ -259,7 +259,7 @@
          [info commands test_ns_basic::*]
 } {::test_ns_basic::p {} {}}
 test basic-18.4 {TclRenameCommand, bad new name} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_basic {
         proc p {} {
             return "p in [namespace current]"
@@ -276,7 +276,7 @@
     list [catch {rename test_ns_basic::q :::george::martha} msg] $msg
 } {1 {can't rename to ":::george::martha": command already exists}}
 test basic-18.6 {TclRenameCommand, check for command shadowing by newly renamed cmd} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {rename p ""}
     catch {rename q ""}
     proc p {} {
@@ -299,7 +299,7 @@
 } {}
 
 test basic-20.1 {Tcl_GetCommandInfo, names for commands created inside namespaces} {testcmdtoken} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {rename p ""}
     catch {rename q ""}
     catch {unset x}
@@ -328,7 +328,7 @@
 } {}
 
 test basic-22.1 {Tcl_GetCommandFullName} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_basic1 {
         namespace export cmd*
         proc cmd1 {} {}
@@ -374,7 +374,7 @@
          [interp delete test_interp]
 } {123 {set called with a 123} {}}
 test basic-24.2 {Tcl_DeleteCommandFromToken, deleting commands changes command epoch} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {rename p ""}
     proc p {} {
         return "global p"
@@ -392,7 +392,7 @@
          [test_ns_basic::callP]
 } {{namespace p} {} {global p}}
 test basic-24.3 {Tcl_DeleteCommandFromToken, delete imported cmds that refer to a deleted cmd} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {rename p ""}
     namespace eval test_ns_basic {
         namespace export p
@@ -502,7 +502,7 @@
 } {}
 
 test basic-36.1 {Tcl_EvalObjv, lookup of "unknown" command} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {interp delete test_interp}
     interp create test_interp
     interp eval test_interp {
@@ -654,69 +654,69 @@
 }
 
 test basic-47.2.$noComp {Tcl_EvalEx: error during word expansion} -body {
-    run {{expand}\{}
+    run {{*}\{}
 } -constraints $constraints -returnCodes error -result {unmatched open brace in list}
 
 test basic-47.3.$noComp {Tcl_EvalEx, error during substitution} -body {
-    run {{expand}[error foo]}
+    run {{*}[error foo]}
 } -constraints $constraints -returnCodes error -result foo
 
 test basic-47.4.$noComp {Tcl_EvalEx: no expansion} $constraints {
-    run {list {expand} {expand}	{expand}}
-} {expand expand expand}
+    run {list {*} {*}	{*}}
+} {* * *}
 
 test basic-47.5.$noComp {Tcl_EvalEx: expansion} $constraints {
-    run {list {expand}{} {expand}	{expand}x {expand}"y z"}
-} {expand x y z}
+    run {list {*}{} {*}	{*}x {*}"y z"}
+} {* x y z}
 
 test basic-47.6.$noComp {Tcl_EvalEx: expansion to zero args} $constraints {
-    run {list {expand}{}}
+    run {list {*}{}}
 } {}
 
 test basic-47.7.$noComp {Tcl_EvalEx: expansion to one arg} $constraints {
-    run {list {expand}x}
+    run {list {*}x}
 } x
 
 test basic-47.8.$noComp {Tcl_EvalEx: expansion to many args} $constraints {
-    run {list {expand}"y z"}
+    run {list {*}"y z"}
 } {y z}
 
 test basic-47.9.$noComp {Tcl_EvalEx: expansion and subst order} $constraints {
     set x 0
-    run {list [incr x] {expand}[incr x] [incr x] \
-		{expand}[list [incr x] [incr x]] [incr x]}
+    run {list [incr x] {*}[incr x] [incr x] \
+		{*}[list [incr x] [incr x]] [incr x]}
 } {1 2 3 4 5 6}
 
 test basic-47.10.$noComp {Tcl_EvalEx: expand and memory management} $constraints {
-    run {concat {expand}{} a b c d e f g h i j k l m n o p q r}
+    run {concat {*}{} a b c d e f g h i j k l m n o p q r}
 } {a b c d e f g h i j k l m n o p q r}
 
 test basic-47.11.$noComp {Tcl_EvalEx: expand and memory management} $constraints {
-    run {concat {expand}1 a b c d e f g h i j k l m n o p q r}
+    run {concat {*}1 a b c d e f g h i j k l m n o p q r}
 } {1 a b c d e f g h i j k l m n o p q r}
 
 test basic-47.12.$noComp {Tcl_EvalEx: expand and memory management} $constraints {
-    run {concat {expand}{1 2} a b c d e f g h i j k l m n o p q r}
+    run {concat {*}{1 2} a b c d e f g h i j k l m n o p q r}
 } {1 2 a b c d e f g h i j k l m n o p q r}
 
 test basic-47.13.$noComp {Tcl_EvalEx: expand and memory management} $constraints {
-    run {concat {expand}{} {expand}{1 2} a b c d e f g h i j k l m n o p q}
+    run {concat {*}{} {*}{1 2} a b c d e f g h i j k l m n o p q}
 } {1 2 a b c d e f g h i j k l m n o p q}
 
 test basic-47.14.$noComp {Tcl_EvalEx: expand and memory management} $constraints {
-    run {concat {expand}{} a b c d e f g h i j k l m n o p q r s}
+    run {concat {*}{} a b c d e f g h i j k l m n o p q r s}
 } {a b c d e f g h i j k l m n o p q r s}
 
 test basic-47.15.$noComp {Tcl_EvalEx: expand and memory management} $constraints {
-    run {concat {expand}1 a b c d e f g h i j k l m n o p q r s}
+    run {concat {*}1 a b c d e f g h i j k l m n o p q r s}
 } {1 a b c d e f g h i j k l m n o p q r s}
 
 test basic-47.16.$noComp {Tcl_EvalEx: expand and memory management} $constraints {
-    run {concat {expand}{1 2} a b c d e f g h i j k l m n o p q r s}
+    run {concat {*}{1 2} a b c d e f g h i j k l m n o p q r s}
 } {1 2 a b c d e f g h i j k l m n o p q r s}
 
 test basic-47.17.$noComp {Tcl_EvalEx: expand and memory management} $constraints {
-    run {concat {expand}{} {expand}{1 2} a b c d e f g h i j k l m n o p q r}
+    run {concat {*}{} {*}{1 2} a b c d e f g h i j k l m n o p q r}
 } {1 2 a b c d e f g h i j k l m n o p q r}
 
 test basic-48.1.$noComp {expansion: parsing} $constraints {
@@ -724,7 +724,7 @@
 
 		# Another comment
 		list 1  2\
-			3   {expand}$::l1
+			3   {*}$::l1
             
 		# Comment again
 	}
@@ -735,13 +735,13 @@
 } {{a {b b} c d} {e f {g g} h} {i j k {l l}}}
 
 test basic-48.3.$noComp {expansion} $constraints {
-        run {list {expand}$::l1 $::l2 {expand}[l3]}
+        run {list {*}$::l1 $::l2 {*}[l3]}
 } {a {b b} c d {e f {g g} h} i j k {l l}}
 
 test basic-48.4.$noComp {expansion: really long cmd} $constraints {
         set cmd [list list]
         for {set t 0} {$t < 500} {incr t} {
-            lappend cmd {{expand}$::l1}
+            lappend cmd {{*}$::l1}
         }
         llength [run [join $cmd]]
 } 2000
@@ -749,31 +749,31 @@
 test basic-48.5.$noComp {expansion: error detection} -setup {
 	set l "a {a b}x y"
 } -constraints $constraints -body {
-	run {list $::l1 {expand}$l}
+	run {list $::l1 {*}$l}
 } -cleanup {
 	unset l
 } -returnCodes 1 -result {list element in braces followed by "x" instead of space}
 
 test basic-48.6.$noComp {expansion: odd usage} $constraints {
-        run {list {expand}$::l1$::l2}
+        run {list {*}$::l1$::l2}
 } {a {b b} c de f {g g} h}
 
 test basic-48.7.$noComp {expansion: odd usage} -constraints $constraints -body {
-        run {list {expand}[l3]$::l1}
+        run {list {*}[l3]$::l1}
 } -returnCodes 1 -result {list element in braces followed by "a" instead of space}
 
 test basic-48.8.$noComp {expansion: odd usage} $constraints {
-        run {list {expand}hej$::l1}
+        run {list {*}hej$::l1}
 } {heja {b b} c d}
 
-test basic-48.9.$noComp {expansion: Not all {expand} should trigger} $constraints {
-	run {list {expand}$::l1 \{expand\}$::l2 "{expand}$::l1" {{expand} i j k}}
-} {a {b b} c d {{expand}e f {g g} h} {{expand}a {b b} c d} {{expand} i j k}}
+test basic-48.9.$noComp {expansion: Not all {*} should trigger} $constraints {
+	run {list {*}$::l1 \{*\}$::l2 "{*}$::l1" {{*} i j k}}
+} {a {b b} c d {{*}e f {g g} h} {{*}a {b b} c d} {{*} i j k}}
 
 test basic-48.10.$noComp {expansion: expansion of command word} -setup {
 	set cmd [list string range jultomte]
 } -constraints $constraints -body {
-	run {{expand}$cmd 2 6}
+	run {{*}$cmd 2 6}
 } -cleanup {
 	unset cmd
 } -result ltomt
@@ -782,24 +782,24 @@
         set cmd {}
         set bar {}
 } -constraints $constraints -body {
-        run {{expand}$cmd {expand}$bar}
+        run {{*}$cmd {*}$bar}
 } -cleanup {
 	unset cmd bar
 } -result {}
 
 test basic-48.12.$noComp {expansion: odd usage} $constraints {
-	run {list {expand}$::l1 {expand}"hej hopp" {expand}$::l2}
+	run {list {*}$::l1 {*}"hej hopp" {*}$::l2}
 } {a {b b} c d hej hopp e f {g g} h}
 
 test basic-48.13.$noComp {expansion: odd usage} $constraints {
-	run {list {expand}$::l1 {expand}{hej hopp} {expand}$::l2}
+	run {list {*}$::l1 {*}{hej hopp} {*}$::l2}
 } {a {b b} c d hej hopp e f {g g} h}
 
 test basic-48.14.$noComp {expansion: hash command} -setup {
         catch {rename \# ""}
         set cmd "#"
     } -constraints $constraints -body { 
-           run { {expand}$cmd apa bepa }
+           run { {*}$cmd apa bepa }
     } -cleanup {
 	unset cmd
 } -returnCodes 1 -result {invalid command name "#"}
@@ -810,7 +810,7 @@
             set c [list {f\ g h\ i j k} x y]
             set d {0\ 1 2 3}
     } -constraints $constraints -body {
-            run { lappend d {expand}$a($b) {expand}[lindex $c 0] }
+            run { lappend d {*}$a($b) {*}[lindex $c 0] }
     } -cleanup {
 	unset a b c d
 } -result {{0 1} 2 3 a {b c} d e {f g} {h i} j k}
@@ -828,25 +828,25 @@
             # Create free objects that should disappear
             set l [list 1$a 2$a 3$a 4$a 5$a 6$a 7$a]
             # A short number of words and a short result (8)
-            set l [run {list {expand}$l $a$a}]
+            set l [run {list {*}$l $a$a}]
             # A short number of words and a longer result (27)
-            set l [run {list {expand}$l $a$a {expand}$l $a$a {expand}$l $a$a}]
+            set l [run {list {*}$l $a$a {*}$l $a$a {*}$l $a$a}]
             # A short number of words and a longer result, with an error
             # This is to stress the cleanup in the error case
-            if {![catch {run {_moo_ {expand}$l $a$a {expand}$l $a$a {expand}$l}}]} {
+            if {![catch {run {_moo_ {*}$l $a$a {*}$l $a$a {*}$l}}]} {
                 error "An error was expected in the previous statement"
             }
             # Many words
-            set l [run {list {expand}$l $a$a {expand}$l $a$a \
-                                 {expand}$l $a$a {expand}$l $a$a \
-                                 {expand}$l $a$a {expand}$l $a$a \
-                                 {expand}$l $a$a {expand}$l $a$a \
-                                 {expand}$l $a$a {expand}$l $a$a \
-                                 {expand}$l $a$a {expand}$l $a$a \
-                                 {expand}$l $a$a {expand}$l $a$a \
-                                 {expand}$l $a$a {expand}$l $a$a \
-                                 {expand}$l $a$a {expand}$l $a$a \
-                                 {expand}$l $a$a}]
+            set l [run {list {*}$l $a$a {*}$l $a$a \
+                                 {*}$l $a$a {*}$l $a$a \
+                                 {*}$l $a$a {*}$l $a$a \
+                                 {*}$l $a$a {*}$l $a$a \
+                                 {*}$l $a$a {*}$l $a$a \
+                                 {*}$l $a$a {*}$l $a$a \
+                                 {*}$l $a$a {*}$l $a$a \
+                                 {*}$l $a$a {*}$l $a$a \
+                                 {*}$l $a$a {*}$l $a$a \
+                                 {*}$l $a$a}]
 
             if {[llength $l] != 19*28} {
                 error "Bad Length: [llength $l] should be [expr {19*28}]"
@@ -872,7 +872,7 @@
     } -constraints $constraints -body { 
             set third [expr {1.0/3.0}]
             set l [list $third $third]
-            set x [run {list $third {expand}$l $third}]
+            set x [run {list $third {*}$l $third}]
 	    set res [list]
             foreach t $x {
                 lappend res [expr {$t * 3.0}]
@@ -889,7 +889,7 @@
             set apa 10
         }
         set apa 0
-        list [llength [run { {expand}$badcmd }]] $apa
+        list [llength [run { {*}$badcmd }]] $apa
     } -cleanup {
 	unset apa badcmd
 } -result {5 0}
@@ -898,38 +898,38 @@
         set badlist "a {}x y"
         set a 0
         set b 0
-        catch {run {list [incr a] {expand}$badlist [incr b]}}
+        catch {run {list [incr a] {*}$badlist [incr b]}}
         list $a $b
     } -constraints $constraints -cleanup {
 	unset badlist a b
 } -result {1 0}
 
 test basic-48.20.$noComp {expansion: odd case with word boundaries} $constraints {
-    run {list {expand}$::l1 {expand}"hej hopp" {expand}$::l2}
+    run {list {*}$::l1 {*}"hej hopp" {*}$::l2}
 } {a {b b} c d hej hopp e f {g g} h}
 
 test basic-48.21.$noComp {expansion: odd case with word boundaries} $constraints {
-    run {list {expand}$::l1 {expand}{hej hopp} {expand}$::l2}
+    run {list {*}$::l1 {*}{hej hopp} {*}$::l2}
 } {a {b b} c d hej hopp e f {g g} h}
 
 test basic-48.22.$noComp {expansion: odd case with word boundaries} -body {
-    run {list {expand}$::l1 {expand}"hej hopp {expand}$::l2}
+    run {list {*}$::l1 {*}"hej hopp {*}$::l2}
 } -constraints $constraints -returnCodes error -result {missing "}
 
 test basic-48.23.$noComp {expansion: handle return codes} -constraints $constraints -body {
         set res {}
         for {set t 0} {$t < 10} {incr t} {
-            run { {expand}break }
+            run { {*}break }
         }
         lappend res $t
 
         for {set t 0} {$t < 10} {incr t} {
-            run { {expand}continue }
+            run { {*}continue }
             set t 20
         }
         lappend res $t
 
-        lappend res [catch { run { {expand}{error Hejsan} } } err]
+        lappend res [catch { run { {*}{error Hejsan} } } err]
         lappend res $err
     } -cleanup {
 	unset res t
@@ -963,7 +963,7 @@
 rename run {}
 
  #cleanup
-catch {namespace delete {expand}[namespace children :: test_ns_*]}
+catch {namespace delete {*}[namespace children :: test_ns_*]}
 catch {namespace delete george}
 catch {interp delete test_interp}
 catch {rename p ""}
Index: tests/cmdInfo.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/cmdInfo.test,v
retrieving revision 1.9
diff -u -r1.9 cmdInfo.test
--- tests/cmdInfo.test	21 Mar 2006 11:12:29 -0000	1.9
+++ tests/cmdInfo.test	3 Nov 2006 00:25:28 -0000
@@ -69,7 +69,7 @@
     rename x1 newName
     set y [testcmdtoken name $x]
     rename newName x1
-    lappend y {expand}[testcmdtoken name $x]
+    lappend y {*}[testcmdtoken name $x]
 } {newName ::newName x1 ::x1}
 
 catch {rename newTestCmd {}}
@@ -86,7 +86,7 @@
     }]
     set y [testcmdtoken name $x]
     rename ::testCmd newTestCmd
-    lappend y {expand}[testcmdtoken name $x]
+    lappend y {*}[testcmdtoken name $x]
 } {testCmd ::testCmd newTestCmd ::newTestCmd}
 
 test cmdinfo-6.1 {Names for commands created when outside namespaces} \
@@ -94,7 +94,7 @@
     set x [testcmdtoken create cmdInfoNs1::cmdInfoNs2::testCmd]
     set y [testcmdtoken name $x]
     rename cmdInfoNs1::cmdInfoNs2::testCmd newTestCmd2
-    lappend y {expand}[testcmdtoken name $x]
+    lappend y {*}[testcmdtoken name $x]
 } {testCmd ::cmdInfoNs1::cmdInfoNs2::testCmd newTestCmd2 ::newTestCmd2}
 
 # cleanup
Index: tests/compile.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/compile.test,v
retrieving revision 1.43
diff -u -r1.43 compile.test
--- tests/compile.test	22 Aug 2006 04:03:23 -0000	1.43
+++ tests/compile.test	3 Nov 2006 00:25:28 -0000
@@ -444,81 +444,81 @@
 }
 
 test compile-16.1.$noComp {TclCompileScript: word expansion} $constraints {
-    run "list [string repeat {{expand}a } 255]"
+    run "list [string repeat {{*}a } 255]"
 } [lrepeat 255 a]
 
 test compile-16.2.$noComp {TclCompileScript: word expansion} $constraints {
-    run "list [string repeat {{expand}a } 256]"
+    run "list [string repeat {{*}a } 256]"
 } [lrepeat 256 a]
 
 test compile-16.3.$noComp {TclCompileScript: word expansion} $constraints {
-    run "list [string repeat {{expand}a } 257]"
+    run "list [string repeat {{*}a } 257]"
 } [lrepeat 257 a]
 
 test compile-16.4.$noComp {TclCompileScript: word expansion} $constraints {
-    run {{expand}list}
+    run {{*}list}
 } {}
 
 test compile-16.5.$noComp {TclCompileScript: word expansion} $constraints {
-    run {{expand}list {expand}{x y z}}
+    run {{*}list {*}{x y z}}
 } {x y z}
 
 test compile-16.6.$noComp {TclCompileScript: word expansion} $constraints {
-    run {{expand}list {expand}[list x y z]}
+    run {{*}list {*}[list x y z]}
 } {x y z}
 
 test compile-16.7.$noComp {TclCompileScript: word expansion} $constraints {
-    run {{expand}list {expand}[list x y z][list x y z]}
+    run {{*}list {*}[list x y z][list x y z]}
 } {x y zx y z}
 
 test compile-16.8.$noComp {TclCompileScript: word expansion} -body {
     set l {x y z}
-    run {{expand}list {expand}$l}
+    run {{*}list {*}$l}
 } -constraints $constraints -cleanup {
     unset l
 } -result {x y z}
 
 test compile-16.9.$noComp {TclCompileScript: word expansion} -body {
     set l {x y z}
-    run {{expand}list {expand}$l$l}
+    run {{*}list {*}$l$l}
 } -constraints $constraints -cleanup {
     unset l
 } -result {x y zx y z}
 
 test compile-16.10.$noComp {TclCompileScript: word expansion} -body {
-    run {{expand}\{}
+    run {{*}\{}
 } -constraints $constraints -returnCodes error \
 -result {unmatched open brace in list}
 
 test compile-16.11.$noComp {TclCompileScript: word expansion} -body {
     proc badList {} {return \{}
-    run {{expand}[badList]}
+    run {{*}[badList]}
 } -constraints $constraints -cleanup {
     rename badList {}
 } -returnCodes error  -result {unmatched open brace in list}
 
 test compile-16.12.$noComp {TclCompileScript: word expansion} $constraints {
-    run {{expand}list x y z}
+    run {{*}list x y z}
 } {x y z}
 
 test compile-16.13.$noComp {TclCompileScript: word expansion} $constraints {
-    run {{expand}list x y {expand}z}
+    run {{*}list x y {*}z}
 } {x y z}
 
 test compile-16.14.$noComp {TclCompileScript: word expansion} $constraints {
-    run {{expand}list x {expand}y z}
+    run {{*}list x {*}y z}
 } {x y z}
 
 test compile-16.15.$noComp {TclCompileScript: word expansion} $constraints {
-    run {list x y {expand}z}
+    run {list x y {*}z}
 } {x y z}
 
 test compile-16.16.$noComp {TclCompileScript: word expansion} $constraints {
-    run {list x {expand}y z}
+    run {list x {*}y z}
 } {x y z}
 
 test compile-16.17.$noComp {TclCompileScript: word expansion} $constraints {
-    run {list {expand}x y z}
+    run {list {*}x y z}
 } {x y z}
 
 # These tests note that expansion can in theory cause the number of
@@ -535,21 +535,21 @@
 #
 test compile-16.18.$noComp {TclCompileScript: word expansion} -body {
     proc LongList {} {return [lrepeat [expr {1<<10}] x]}
-    llength [run "list [string repeat {{expand}[LongList] } [expr {1<<10}]]"]
+    llength [run "list [string repeat {{*}[LongList] } [expr {1<<10}]]"]
 } -constraints [linsert $constraints 0 knownBug] -cleanup {
     rename LongList {}
 } -returnCodes ok  -result [expr {1<<20}]
 
 test compile-16.19.$noComp {TclCompileScript: word expansion} -body {
     proc LongList {} {return [lrepeat [expr {1<<11}] x]}
-    llength [run "list [string repeat {{expand}[LongList] } [expr {1<<11}]]"]
+    llength [run "list [string repeat {{*}[LongList] } [expr {1<<11}]]"]
 } -constraints [linsert $constraints 0 knownBug] -cleanup {
     rename LongList {}
 } -returnCodes ok  -result [expr {1<<22}]
 
 test compile-16.20.$noComp {TclCompileScript: word expansion} -body {
     proc LongList {} {return [lrepeat [expr {1<<12}] x]}
-    llength [run "list [string repeat {{expand}[LongList] } [expr {1<<12}]]"]
+    llength [run "list [string repeat {{*}[LongList] } [expr {1<<12}]]"]
 } -constraints [linsert $constraints 0 knownBug] -cleanup {
     rename LongList {}
 } -returnCodes ok  -result [expr {1<<24}]
@@ -557,7 +557,7 @@
 # This is the one that should cause overflow
 test compile-16.21.$noComp {TclCompileScript: word expansion} -body {
     proc LongList {} {return [lrepeat [expr {1<<16}] x]}
-    llength [run "list [string repeat {{expand}[LongList] } [expr {1<<16}]]"]
+    llength [run "list [string repeat {{*}[LongList] } [expr {1<<16}]]"]
 } -constraints [linsert $constraints 0 knownBug] -cleanup {
     rename LongList {}
 } -returnCodes ok  -result [expr {wide(1)<<32}]
Index: tests/encoding.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/encoding.test,v
retrieving revision 1.25
diff -u -r1.25 encoding.test
--- tests/encoding.test	5 Oct 2006 21:24:40 -0000	1.25
+++ tests/encoding.test	3 Nov 2006 00:25:28 -0000
@@ -570,7 +570,7 @@
      testsetdefenc $origDir
 } -result slappy
 
-file delete {expand}[glob -directory [temporaryDirectory] *.chars *.tcltestout]
+file delete {*}[glob -directory [temporaryDirectory] *.chars *.tcltestout]
 # ===> Cut here <===
 
 # EscapeFreeProc, GetTableEncoding, unilen
Index: tests/execute.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/execute.test,v
retrieving revision 1.23
diff -u -r1.23 execute.test
--- tests/execute.test	21 Jul 2006 10:47:19 -0000	1.23
+++ tests/execute.test	3 Nov 2006 00:25:28 -0000
@@ -21,7 +21,7 @@
     namespace import -force ::tcltest::*
 }
 
-catch {namespace delete {expand}[namespace children :: test_ns_*]}
+catch {namespace delete {*}[namespace children :: test_ns_*]}
 catch {rename foo ""}
 catch {unset x}
 catch {unset y}
@@ -506,7 +506,7 @@
 # INST_PUSH_RETURN_CODE not tested
 
 test execute-4.1 {Tcl_GetCommandFromObj, convert to tclCmdNameType} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {unset x}
     catch {unset y}
     namespace eval test_ns_1 {
@@ -524,7 +524,7 @@
          [catch {namespace which -command ${x}${y}:cmd2} msg] $msg
 } {::test_ns_1::test_ns_2::cmd1 0 {} 0 {}}
 test execute-4.2 {Tcl_GetCommandFromObj, check if cached tclCmdNameType is invalid} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {rename foo ""}
     catch {unset l}
     proc foo {} {
@@ -546,7 +546,7 @@
     set l
 } {::foo ::test_ns_1::foo}
 test execute-4.3 {Tcl_GetCommandFromObj, command never found} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {rename foo ""}
     namespace eval test_ns_1 {
         proc foo {} {
@@ -564,7 +564,7 @@
 } {::test_ns_1::foo {} 0 {}}
 
 test execute-5.1 {SetCmdNameFromAny, set cmd name to empty heap string if NULL} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {unset l}
     proc {} {} {return {}}
     {}
@@ -778,7 +778,7 @@
 if {[info commands testobj] != {}} {
    testobj freeallvars
 }
-catch {namespace delete {expand}[namespace children :: test_ns_*]}
+catch {namespace delete {*}[namespace children :: test_ns_*]}
 catch {rename foo ""}
 catch {rename p ""}
 catch {rename {} ""}
Index: tests/fCmd.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/fCmd.test,v
retrieving revision 1.55
diff -u -r1.55 fCmd.test
--- tests/fCmd.test	27 Mar 2006 18:56:25 -0000	1.55
+++ tests/fCmd.test	3 Nov 2006 00:25:28 -0000
@@ -2136,19 +2136,19 @@
     catch {file delete -force -- foo.tmp}
     createfile foo.tmp
     set attrs [file attributes foo.tmp]
-    list [catch {file attributes foo.tmp {expand}[lindex $attrs 0]}] [file delete -force -- foo.tmp]
+    list [catch {file attributes foo.tmp {*}[lindex $attrs 0]}] [file delete -force -- foo.tmp]
 } {0 {}}
 test fCmd-27.5 {TclFileAttrsCmd - setting one option} {foundGroup} {
     catch {file delete -force -- foo.tmp}
     createfile foo.tmp
     set attrs [file attributes foo.tmp]
-    list [catch {file attributes foo.tmp {expand}[lrange $attrs 0 1]} msg] $msg [file delete -force -- foo.tmp]
+    list [catch {file attributes foo.tmp {*}[lrange $attrs 0 1]} msg] $msg [file delete -force -- foo.tmp]
 } {0 {} {}}
 test fCmd-27.6 {TclFileAttrsCmd - setting more than one option} {foundGroup} {
     catch {file delete -force -- foo.tmp}
     createfile foo.tmp
     set attrs [file attributes foo.tmp]
-    list [catch {file attributes foo.tmp {expand}[lrange $attrs 0 3]} msg] $msg [file delete -force -- foo.tmp]
+    list [catch {file attributes foo.tmp {*}[lrange $attrs 0 3]} msg] $msg [file delete -force -- foo.tmp]
 } {0 {} {}}
 
 if {
Index: tests/http.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/http.test,v
retrieving revision 1.43
diff -u -r1.43 http.test
--- tests/http.test	9 Oct 2006 19:15:44 -0000	1.43
+++ tests/http.test	3 Nov 2006 00:25:28 -0000
@@ -97,7 +97,7 @@
 	-proxyfilter myFilter -useragent "Tcl Test Suite" \
 	-urlencoding iso8859-1
     set x [http::config]
-    http::config {expand}$savedconf
+    http::config {*}$savedconf
     set x
 } {-accept */* -proxyfilter myFilter -proxyhost nowhere.come -proxyport 8080 -urlencoding iso8859-1 -useragent {Tcl Test Suite}}
 test http-1.5 {http::config} {
Index: tests/init.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/init.test,v
retrieving revision 1.14
diff -u -r1.14 init.test
--- tests/init.test	24 May 2005 19:13:46 -0000	1.14
+++ tests/init.test	3 Nov 2006 00:25:28 -0000
@@ -18,7 +18,7 @@
 }
 
 # Clear out any namespaces called test_ns_*
-catch {namespace delete {expand}[namespace children :: test_ns_*]}
+catch {namespace delete {*}[namespace children :: test_ns_*]}
 
 # Six cases - white box testing
 
Index: tests/interp.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/interp.test,v
retrieving revision 1.50
diff -u -r1.50 interp.test
--- tests/interp.test	12 Oct 2006 16:24:14 -0000	1.50
+++ tests/interp.test	3 Nov 2006 00:25:28 -0000
@@ -2122,7 +2122,7 @@
     proc MyTestAlias {interp args} {
 	global aliasTrace;
 	lappend aliasTrace $args;
-	interp invokehidden $interp {expand}$args
+	interp invokehidden $interp {*}$args
     }
     foreach c {return} {
 	interp hide $interp  $c;
Index: tests/io.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/io.test,v
retrieving revision 1.72
diff -u -r1.72 io.test
--- tests/io.test	9 Oct 2006 19:15:45 -0000	1.72
+++ tests/io.test	3 Nov 2006 00:25:28 -0000
@@ -2138,7 +2138,7 @@
     close $f
     lappend l [lsort [testchannel open]]
     set x [list $consoleFileNames \
-		[lsort [list {expand}$consoleFileNames $f]] \
+		[lsort [list {*}$consoleFileNames $f]] \
 		$consoleFileNames]
     string compare $l $x
 } 0
Index: tests/ioUtil.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/ioUtil.test,v
retrieving revision 1.16
diff -u -r1.16 ioUtil.test
--- tests/ioUtil.test	21 Mar 2006 11:12:29 -0000	1.16
+++ tests/ioUtil.test	3 Nov 2006 00:25:29 -0000
@@ -189,7 +189,7 @@
 cd [temporaryDirectory]
 
 test ioUtil-3.1 {TclOpenFileChannel: Check that none of the test procs are there.} {testopenfilechannelproc} {
-    catch {file delete -force {expand}[glob *testOpenFileChannel*]}
+    catch {file delete -force {*}[glob *testOpenFileChannel*]}
     catch {file exists testOpenFileChannel1%.fil} err1
     catch {file exists testOpenFileChannel2%.fil} err2
     catch {file exists testOpenFileChannel3%.fil} err3
Index: tests/iogt.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/iogt.test,v
retrieving revision 1.14
diff -u -r1.14 iogt.test
--- tests/iogt.test	21 Mar 2006 11:12:29 -0000	1.14
+++ tests/iogt.test	3 Nov 2006 00:25:29 -0000
@@ -143,7 +143,7 @@
     set port 4000
 
     exec tclsh __echo_srv__.tcl \
-	    $port $fdelay $idelay {expand}$blocks >@stdout &
+	    $port $fdelay $idelay {*}$blocks >@stdout &
 
     after 500
 
Index: tests/namespace-old.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/namespace-old.test,v
retrieving revision 1.9
diff -u -r1.9 namespace-old.test
--- tests/namespace-old.test	27 Aug 2004 14:39:14 -0000	1.9
+++ tests/namespace-old.test	3 Nov 2006 00:25:29 -0000
@@ -22,7 +22,7 @@
 }
 
 # Clear out any namespaces called test_ns_*
-catch {namespace delete {expand}[namespace children :: test_ns_*]}
+catch {namespace delete {*}[namespace children :: test_ns_*]}
 
 test namespace-old-1.1 {usage for "namespace" command} {
     list [catch {namespace} msg] $msg
@@ -252,7 +252,7 @@
     set cmd {
         namespace eval test_ns_delete {
             namespace delete \
-                {expand}[namespace children [namespace current] ns?]
+                {*}[namespace children [namespace current] ns?]
         }
     }
     list [catch $cmd msg] $msg [namespace children test_ns_delete]
Index: tests/namespace.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/namespace.test,v
retrieving revision 1.61
diff -u -r1.61 namespace.test
--- tests/namespace.test	31 Oct 2006 13:46:33 -0000	1.61
+++ tests/namespace.test	3 Nov 2006 00:25:29 -0000
@@ -24,7 +24,7 @@
 #
 
 # Clear out any namespaces called test_ns_*
-catch {namespace delete {expand}[namespace children :: test_ns_*]}
+catch {namespace delete {*}[namespace children :: test_ns_*]}
 
 test namespace-1.1 {TclInitNamespaces, GetNamespaceFromObj, NamespaceChildrenCmd} {
     namespace children :: test_ns_*
@@ -84,7 +84,7 @@
 } {123}
 
 test namespace-6.1 {Tcl_CreateNamespace} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [lsort [namespace children :: test_ns_*]] \
         [namespace eval test_ns_1 {namespace current}] \
 	[namespace eval test_ns_2 {namespace current}] \
@@ -103,7 +103,7 @@
     list [catch {namespace eval test_ns_7::: {namespace current}} msg] $msg 
 } {0 ::test_ns_7}
 test namespace-6.4 {Tcl_CreateNamespace, trailing ::s in ns name are ignored} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1:: {
         namespace eval test_ns_2:: {}
         namespace eval test_ns_3:: {}
@@ -121,7 +121,7 @@
 } {::test_ns_1::test_ns_2 ::test_ns_1::test_ns_2}
 
 test namespace-7.1 {Tcl_DeleteNamespace, active call frames in ns} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1 {
         proc p {} {
             namespace delete [namespace current]
@@ -201,7 +201,7 @@
          [interp delete test_interp]
 } {{::test_ns_1 27} {} 1 {invalid command name "set"} {}}
 test namespace-8.2 {TclTeardownNamespace, remove deleted ns from parent} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1::test_ns_2::test_ns_3a {proc p {} {}}
     namespace eval test_ns_1::test_ns_2::test_ns_3b {proc q {} {}}
     list [namespace children test_ns_1] \
@@ -209,7 +209,7 @@
          [namespace children test_ns_1]
 } {::test_ns_1::test_ns_2 {} {}}
 test namespace-8.3 {TclTeardownNamespace, delete child namespaces} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1::test_ns_2::test_ns_3a {proc p {} {}}
     namespace eval test_ns_1::test_ns_2::test_ns_3b {proc q {} {}}
     list [namespace children test_ns_1] \
@@ -219,7 +219,7 @@
          [info commands test_ns_1::test_ns_2::test_ns_3a::*]
 } {::test_ns_1::test_ns_2 {} {} 1 {unknown namespace "test_ns_1::test_ns_2" in namespace children command} {}}
 test namespace-8.4 {TclTeardownNamespace, cmds imported from deleted ns go away} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_export {
         namespace export cmd1 cmd2
         proc cmd1 {args} {return "cmd1: $args"}
@@ -260,7 +260,7 @@
 } baz
 
 test namespace-9.1 {Tcl_Import, empty import pattern} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {namespace eval test_ns_import {namespace import {}}} msg] $msg
 } {1 {empty import pattern}}
 test namespace-9.2 {Tcl_Import, unknown namespace in import pattern} {
@@ -270,7 +270,7 @@
     list [catch {namespace eval test_ns_import {namespace import ::test_ns_import::puts}} msg] $msg
 } {1 {import pattern "::test_ns_import::puts" tries to import from namespace "test_ns_import" into itself}}
 test namespace-9.4 {Tcl_Import, simple import} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_export {
         namespace export cmd1
         proc cmd1 {args} {return "cmd1: $args"}
@@ -292,7 +292,7 @@
     }
 } {cmd1: 555}
 test namespace-9.7 {Tcl_Import, links are preserved if cmd is redefined} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_export {
         namespace export cmd1
         proc cmd1 {args} {return "cmd1: $args"}
@@ -354,7 +354,7 @@
 } -returnCodes error -match glob -result {import pattern * would create a loop*}
 
 test namespace-10.1 {Tcl_ForgetImport, check for valid namespaces} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {namespace forget xyzzy::*} msg] $msg
 } {1 {unknown namespace in namespace forget pattern "xyzzy::*"}}
 test namespace-10.2 {Tcl_ForgetImport, ignores patterns that don't match} {
@@ -494,7 +494,7 @@
 } -returnCodes error -match glob -result *
 
 test namespace-11.1 {TclGetOriginalCommand, check if not imported cmd} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_export {
         namespace export cmd1
         proc cmd1 {args} {return "cmd1: $args"}
@@ -518,7 +518,7 @@
 } {{cmd1: 123} ::test_ns_export::cmd1}
 
 test namespace-12.1 {InvokeImportedCmd} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_export {
         namespace export cmd1
         proc cmd1 {args} {namespace current}
@@ -539,7 +539,7 @@
 } {::test_ns_import::cmd1 {}}
 
 test namespace-14.1 {TclGetNamespaceForQualName, absolute names} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     variable v 10
     namespace eval test_ns_1::test_ns_2 {
         variable v 20
@@ -617,7 +617,7 @@
     lappend l [test_ns_1::test_ns_2:: hello]
 } {1 {invalid command name "test_ns_1::test_ns_2::"} {{}: hello}}
 test namespace-14.12 {TclGetNamespaceForQualName, extra ::s are significant for vars} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1 {
         variable {}
         set test_ns_1::(x) y
@@ -625,12 +625,12 @@
     set test_ns_1::(x)
 } y
 test namespace-14.13 {TclGetNamespaceForQualName, namespace other than global ns can't have empty name} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {namespace eval test_ns_1 {proc {} {} {}; namespace eval {} {}; {}}} msg] $msg
 } {1 {can't create namespace "": only global namespace can have empty name}}
 
 test namespace-15.1 {Tcl_FindNamespace, absolute name found} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_delete {
         namespace eval test_ns_delete2 {}
         proc cmd {args} {namespace current}
@@ -657,7 +657,7 @@
 } {1 {unknown namespace "test_ns_delete2" in namespace delete command}}
 
 test namespace-16.1 {Tcl_FindCommand, absolute name found} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1 {
         proc cmd {args} {return "[namespace current]::cmd: $args"}
         variable v "::test_ns_1::cmd"
@@ -725,7 +725,7 @@
 
 catch {unset x}
 test namespace-17.1 {Tcl_FindNamespaceVar, absolute name found} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     set x 314159
     namespace eval test_ns_1 {
         set ::x
@@ -802,7 +802,7 @@
 catch {unset l}
 catch {rename foo {}}
 test namespace-18.1 {TclResetShadowedCmdRefs, one-level check for command shadowing} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     proc foo {} {return "global foo"}
     namespace eval test_ns_1 {
         proc trigger {} {
@@ -843,7 +843,7 @@
 catch {rename foo {}}
 
 test namespace-19.1 {GetNamespaceFromObj, global name found} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1::test_ns_2 {}
     namespace children ::test_ns_1
 } {::test_ns_1::test_ns_2}
@@ -873,7 +873,7 @@
 } {{} ::test_ns_1::test_ns_2::test_ns_3}
 
 test namespace-20.1 {Tcl_NamespaceObjCmd, bad subcommand} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {namespace} msg] $msg
 } {1 {wrong # args: should be "namespace subcommand ?arg ...?"}}
 test namespace-20.2 {Tcl_NamespaceObjCmd, bad subcommand} -body {
@@ -884,7 +884,7 @@
 } {}
 
 test namespace-21.1 {NamespaceChildrenCmd, no args} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1::test_ns_2 {}
     expr {[string first ::test_ns_1 [namespace children]] != -1}
 } {1}
@@ -916,7 +916,7 @@
 } [lsort {::test_ns_1::test_ns_2 ::test_ns_1::test_ns_foo}]
 
 test namespace-22.1 {NamespaceCodeCmd, bad args} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {namespace code} msg] $msg \
          [catch {namespace code xxx yyy} msg] $msg
 } {1 {wrong # args: should be "namespace code arg"} 1 {wrong # args: should be "namespace code arg"}}
@@ -950,7 +950,7 @@
 } {42} 
 
 test namespace-23.1 {NamespaceCurrentCmd, bad args} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {namespace current xxx} msg] $msg \
          [catch {namespace current xxx yyy} msg] $msg
 } {1 {wrong # args: should be "namespace current"} 1 {wrong # args: should be "namespace current"}}
@@ -964,7 +964,7 @@
 } {::test_ns_1::test_ns_2}
 
 test namespace-24.1 {NamespaceDeleteCmd, no args} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace delete
 } {}
 test namespace-24.2 {NamespaceDeleteCmd, one arg} {
@@ -980,7 +980,7 @@
 } {1 {unknown namespace "::test_ns_foo" in namespace delete command}}
 
 test namespace-25.1 {NamespaceEvalCmd, bad args} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {namespace eval} msg] $msg
 } {1 {wrong # args: should be "namespace eval name arg ?arg...?"}}
 test namespace-25.2 {NamespaceEvalCmd, bad args} -body {
@@ -1033,7 +1033,7 @@
 } {namespace eval test_ns_1 info level 0}
 
 test namespace-26.1 {NamespaceExportCmd, no args and new ns} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace export
 } {}
 test namespace-26.2 {NamespaceExportCmd, just -clear arg} {
@@ -1082,7 +1082,7 @@
 } [list [lsort {::test_ns_2::cmd4 ::test_ns_2::cmd1 ::test_ns_2::cmd3}] {cmd4: hello}]
 
 test namespace-27.1 {NamespaceForgetCmd, no args} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace forget
 } {}
 test namespace-27.2 {NamespaceForgetCmd, args must be valid namespaces} {
@@ -1102,7 +1102,7 @@
 } {::test_ns_2::cmd2}
 
 test namespace-28.1 {NamespaceImportCmd, no args} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace import
 } {}
 test namespace-28.2 {NamespaceImportCmd, no args and just "-force"} {
@@ -1122,7 +1122,7 @@
 } {::test_ns_2::cmd2}
 
 test namespace-29.1 {NamespaceInscopeCmd, bad args} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {namespace inscope} msg] $msg
 } {1 {wrong # args: should be "namespace inscope name arg ?arg...?"}}
 test namespace-29.2 {NamespaceInscopeCmd, bad args} {
@@ -1151,7 +1151,7 @@
 
 
 test namespace-30.1 {NamespaceOriginCmd, bad args} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {namespace origin} msg] $msg
 } {1 {wrong # args: should be "namespace origin name"}}
 test namespace-30.2 {NamespaceOriginCmd, bad args} {
@@ -1184,7 +1184,7 @@
 } {::foreach ::test_ns_2::p ::test_ns_1::cmd1 ::test_ns_1::cmd2}
 
 test namespace-31.1 {NamespaceParentCmd, bad args} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {namespace parent a b} msg] $msg
 } {1 {wrong # args: should be "namespace parent ?name?"}}
 test namespace-31.2 {NamespaceParentCmd, no args} {
@@ -1205,7 +1205,7 @@
 } {1 {unknown namespace "test_ns_1::test_ns_foo" in namespace parent command}}
 
 test namespace-32.1 {NamespaceQualifiersCmd, bad args} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {namespace qualifiers} msg] $msg
 } {1 {wrong # args: should be "namespace qualifiers string"}}
 test namespace-32.2 {NamespaceQualifiersCmd, bad args} {
@@ -1231,7 +1231,7 @@
 } {foo}
 
 test namespace-33.1 {NamespaceTailCmd, bad args} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {namespace tail} msg] $msg
 } {1 {wrong # args: should be "namespace tail string"}}
 test namespace-33.2 {NamespaceTailCmd, bad args} {
@@ -1257,7 +1257,7 @@
 } {}
 
 test namespace-34.1 {NamespaceWhichCmd, bad args} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {namespace which} msg] $msg
 } {1 {wrong # args: should be "namespace which ?-command? ?-variable? name"}}
 test namespace-34.2 {NamespaceWhichCmd, bad args} {
@@ -1310,7 +1310,7 @@
 } {::env ::test_ns_3::v3 ::test_ns_2::v2 0 {}}
 
 test namespace-35.1 {FreeNsNameInternalRep, resulting ref count > 0} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1 {
         proc p {} {
             namespace delete [namespace current]
@@ -1333,7 +1333,7 @@
 catch {unset x}
 catch {unset y}
 test namespace-36.1 {DupNsNameInternalRep} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1 {}
     set x "::test_ns_1"
     list [namespace parent $x] [set y $x] [namespace parent $y]
@@ -1342,7 +1342,7 @@
 catch {unset y}
 
 test namespace-37.1 {SetNsNameFromAny, ns name found} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1::test_ns_2 {}
     namespace eval test_ns_1 {
         namespace children ::test_ns_1
@@ -1355,14 +1355,14 @@
 } {1 {unknown namespace "::test_ns_1::test_ns_foo" in namespace children command}}
 
 test namespace-38.1 {UpdateStringOfNsName} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     ;# Tcl_NamespaceObjCmd calls UpdateStringOfNsName to get subcmd name
     list [namespace eval {} {namespace current}] \
          [namespace eval {} {namespace current}]
 } {:: ::}
 
 test namespace-39.1 {NamespaceExistsCmd} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval ::test_ns_z::test_me { variable foo }
     list [namespace exists ::] \
 	    [namespace exists ::bogus_namespace] \
@@ -2592,7 +2592,7 @@
 catch {unset l}
 catch {unset msg}
 catch {unset trigger}
-namespace delete {expand}[namespace children :: test_ns_*]
+namespace delete {*}[namespace children :: test_ns_*]
 ::tcltest::cleanupTests
 return
 
Index: tests/parse.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/parse.test,v
retrieving revision 1.25
diff -u -r1.25 parse.test
--- tests/parse.test	9 Oct 2006 19:15:45 -0000	1.25
+++ tests/parse.test	3 Nov 2006 00:25:29 -0000
@@ -154,75 +154,75 @@
     invoked from within
 \"testparser \"a \\\"\\\\1\\\\2\\\\3\\\\4\\\\5\\\\6\\\\7\\\\8\\\\9\\\\1\\\\2\\\\3\\\\4\\\\5\\\\6\\\\7\\\\8\" 0\"}"
 
-test parse-5.11 {Tcl_ParseCommand: {expand} parsing} testparser {
+test parse-5.11 {Tcl_ParseCommand: {*} parsing} testparser {
     testparser {{expan}} 0
 } {- {{expan}} 1 simple {{expan}} 1 text expan 0 {}}
-test parse-5.12 {Tcl_ParseCommand: {expand} parsing} -constraints {
+test parse-5.12 {Tcl_ParseCommand: {*} parsing} -constraints {
     testparser
 } -body {
     testparser {{expan}x} 0
 } -returnCodes error  -result {extra characters after close-brace}
-test parse-5.13 {Tcl_ParseCommand: {expand} parsing} testparser {
-    testparser {{expandy}} 0
-} {- {{expandy}} 1 simple {{expandy}} 1 text expandy 0 {}}
-test parse-5.14 {Tcl_ParseCommand: {expand} parsing} -constraints {
+test parse-5.13 {Tcl_ParseCommand: {*} parsing} testparser {
+    testparser {{**}} 0
+} {- {{**}} 1 simple {{**}} 1 text ** 0 {}}
+test parse-5.14 {Tcl_ParseCommand: {*} parsing} -constraints {
     testparser
 } -body {
-    testparser {{expandy}x} 0
+    testparser {{**}x} 0
 } -returnCodes error  -result {extra characters after close-brace}
-test parse-5.15 {Tcl_ParseCommand: {expand} parsing} -constraints {
+test parse-5.15 {Tcl_ParseCommand: {*} parsing} -constraints {
     testparser
 } -body {
-    testparser {{expand}{123456}x} 0
+    testparser {{*}{123456}x} 0
 } -returnCodes error  -result {extra characters after close-brace}
-test parse-5.16 {Tcl_ParseCommand: {expand} parsing} testparser {
+test parse-5.16 {Tcl_ParseCommand: {*} parsing} testparser {
     testparser {{123456\
 			}} 0
 } {- {{123456 }} 1 simple {{123456 }} 1 text {123456 } 0 {}}
-test parse-5.17 {Tcl_ParseCommand: {expand} parsing} -constraints {
+test parse-5.17 {Tcl_ParseCommand: {*} parsing} -constraints {
     testparser
 } -body {
     testparser {{123456\
 			}x} 0
 } -returnCodes error  -result {extra characters after close-brace}
-test parse-5.18 {Tcl_ParseCommand: {expand} parsing} testparser {
-    testparser {{expand\
+test parse-5.18 {Tcl_ParseCommand: {*} parsing} testparser {
+    testparser {{*\
 			}} 0
-} {- {{expand }} 1 simple {{expand }} 1 text {expand } 0 {}}
-test parse-5.19 {Tcl_ParseCommand: {expand} parsing} -constraints {
+} {- {{* }} 1 simple {{* }} 1 text {* } 0 {}}
+test parse-5.19 {Tcl_ParseCommand: {*} parsing} -constraints {
     testparser
 } -body {
-    testparser {{expand\
+    testparser {{*\
 			}x} 0
 } -returnCodes error  -result {extra characters after close-brace}
-test parse-5.20 {Tcl_ParseCommand: {expand} parsing} testparser {
+test parse-5.20 {Tcl_ParseCommand: {*} parsing} testparser {
     testparser {{123456}} 0
 } {- {{123456}} 1 simple {{123456}} 1 text 123456 0 {}}
-test parse-5.21 {Tcl_ParseCommand: {expand} parsing} -constraints {
+test parse-5.21 {Tcl_ParseCommand: {*} parsing} -constraints {
     testparser
 } -body {
     testparser {{123456}x} 0
 } -returnCodes error  -result {extra characters after close-brace}
-test parse-5.22 {Tcl_ParseCommand: {expand} parsing} testparser {
-    testparser {{expand}} 0
-} {- {{expand}} 1 simple {{expand}} 1 text expand 0 {}}
-test parse-5.23 {Tcl_ParseCommand: {expand} parsing} testparser {
-    testparser {{expand} } 0
-} {- {{expand} } 1 simple {{expand}} 1 text expand 0 {}}
-test parse-5.24 {Tcl_ParseCommand: {expand} parsing} testparser {
-    testparser {{expand}x} 0
-} {- {{expand}x} 1 expand {{expand}x} 1 text x 0 {}}
-test parse-5.25 {Tcl_ParseCommand: {expand} parsing} testparser {
-    testparser {{expand}
-} 0
-} {- {{expand}
-} 1 simple {{expand}} 1 text expand 0 {}}
-test parse-5.26 {Tcl_ParseCommand: {expand} parsing} testparser {
-    testparser {{expand};} 0
-} {- {{expand};} 1 simple {{expand}} 1 text expand 0 {}}
-test parse-5.27 {Tcl_ParseCommand: {expand} parsing} testparser {
-    testparser "{expand}\\\n foo bar" 0
-} {- \{expand\}\\\n\ foo\ bar 3 simple {{expand}} 1 text expand 0 simple foo 1 text foo 0 simple bar 1 text bar 0 {}}
+test parse-5.22 {Tcl_ParseCommand: {*} parsing} testparser {
+    testparser {{*}} 0
+} {- {{*}} 1 simple {{*}} 1 text * 0 {}}
+test parse-5.23 {Tcl_ParseCommand: {*} parsing} testparser {
+    testparser {{*} } 0
+} {- {{*} } 1 simple {{*}} 1 text * 0 {}}
+test parse-5.24 {Tcl_ParseCommand: {*} parsing} testparser {
+    testparser {{*}x} 0
+} {- {{*}x} 1 expand {{*}x} 1 text x 0 {}}
+test parse-5.25 {Tcl_ParseCommand: {*} parsing} testparser {
+    testparser {{*}
+} 0
+} {- {{*}
+} 1 simple {{*}} 1 text * 0 {}}
+test parse-5.26 {Tcl_ParseCommand: {*} parsing} testparser {
+    testparser {{*};} 0
+} {- {{*};} 1 simple {{*}} 1 text * 0 {}}
+test parse-5.27 {Tcl_ParseCommand: {*} parsing} testparser {
+    testparser "{*}\\\n foo bar" 0
+} {- \{*\}\\\n\ foo\ bar 3 simple {{*}} 1 text * 0 simple foo 1 text foo 0 simple bar 1 text bar 0 {}}
 
 test parse-6.1 {ParseTokens procedure, empty word} testparser {
     testparser {""} 0
Index: tests/pkg.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/pkg.test,v
retrieving revision 1.21
diff -u -r1.21 pkg.test
--- tests/pkg.test	9 Oct 2006 19:15:45 -0000	1.21
+++ tests/pkg.test	3 Nov 2006 00:25:29 -0000
@@ -26,7 +26,7 @@
 interp eval $i [list namespace import -force ::tcltest::*]
 interp eval $i {
 
-package forget {expand}[package names]
+package forget {*}[package names]
 set oldPkgUnknown [package unknown]
 package unknown {}
 set oldPath $auto_path
Index: tests/pkgMkIndex.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/pkgMkIndex.test,v
retrieving revision 1.28
diff -u -r1.28 pkgMkIndex.test
--- tests/pkgMkIndex.test	21 Mar 2006 11:12:29 -0000	1.28
+++ tests/pkgMkIndex.test	3 Nov 2006 00:25:29 -0000
@@ -89,7 +89,7 @@
 		    set ver [lindex $args 2]
 		    set ::PKGS($pkg:$ver) [lindex $args 3]
 		} else {
-		    return [package_original {expand}$args]
+		    return [package_original {*}$args]
 		}
 	    }
 	    array set ::PKGS {}
@@ -148,7 +148,7 @@
 #    1: the error result if element 0 was 1
 
 proc pkgtest::createIndex { args } {
-    set parsed [parseArgs {expand}$args]
+    set parsed [parseArgs {*}$args]
     set options [lindex $parsed 0]
     set dirPath [lindex $parsed 1]
     set patternList [lindex $parsed 2]
@@ -157,7 +157,7 @@
 
     if {[catch {
 	file delete [file join $dirPath pkgIndex.tcl]
-	pkg_mkIndex {expand}$options $dirPath {expand}$patternList
+	pkg_mkIndex {*}$options $dirPath {*}$patternList
     } err]} {
 	return [list 1 $err]
     }
@@ -231,7 +231,7 @@
 
 proc pkgtest::runCreatedIndex {rv args} {
     if {[lindex $rv 0] == 0} {
-	set parsed [parseArgs {expand}$args]
+	set parsed [parseArgs {*}$args]
 	set dirPath [lindex $parsed 1]
 	set idxFile [file join $dirPath pkgIndex.tcl]
 
@@ -248,8 +248,8 @@
     return $result
 }
 proc pkgtest::runIndex { args } {
-    set rv [createIndex {expand}$args]
-    return [runCreatedIndex $rv {expand}$args]
+    set rv [createIndex {*}$args]
+    return [runCreatedIndex $rv {*}$args]
 }
 
 # If there is no match to the patterns, make sure the directory hasn't
Index: tests/proc.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/proc.test,v
retrieving revision 1.18
diff -u -r1.18 proc.test
--- tests/proc.test	1 Feb 2006 19:26:02 -0000	1.18
+++ tests/proc.test	3 Nov 2006 00:25:29 -0000
@@ -26,13 +26,13 @@
     testConstraint procbodytest 1
 }
 
-catch {namespace delete {expand}[namespace children :: test_ns_*]}
+catch {namespace delete {*}[namespace children :: test_ns_*]}
 catch {rename p ""}
 catch {rename {} ""}
 catch {unset msg}
 
 test proc-1.1 {Tcl_ProcObjCmd, put proc in namespace specified in name, if any} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1 {
         namespace eval baz {}
     }
@@ -44,11 +44,11 @@
          [info commands test_ns_1::baz::*]
 } {{p in ::test_ns_1::baz} {p in ::test_ns_1::baz} ::test_ns_1::baz::p}
 test proc-1.2 {Tcl_ProcObjCmd, namespace specified in proc name must exist} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     list [catch {proc test_ns_1::baz::p {} {}} msg] $msg
 } {1 {can't create procedure "test_ns_1::baz::p": unknown namespace}}
 test proc-1.3 {Tcl_ProcObjCmd, empty proc name} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     proc :: {} {
         return "empty called"
     }
@@ -58,7 +58,7 @@
         return "empty called"
     }}
 test proc-1.4 {Tcl_ProcObjCmd, simple proc name and proc defined in namespace} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1 {
         namespace eval baz {
             proc p {} {
@@ -70,7 +70,7 @@
          [info commands test_ns_1::baz::*]
 } {{p in ::test_ns_1::baz} ::test_ns_1::baz::p}
 test proc-1.5 {Tcl_ProcObjCmd, qualified proc name and proc defined in namespace} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1::baz {}
     namespace eval test_ns_1 {
         proc baz::p {} {
@@ -82,7 +82,7 @@
          [namespace eval test_ns_1::baz {namespace which p}]
 } {{p in ::test_ns_1::baz} ::test_ns_1::baz::p ::test_ns_1::baz::p}
 test proc-1.6 {Tcl_ProcObjCmd, namespace code ignores single ":"s in middle or end of command names} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1 {
         proc q: {} {return "q:"}
         proc value:at: {} {return "value:at:"}
@@ -109,13 +109,13 @@
 } {1 {formal parameter "b::a" is not a simple name}}
 
 test proc-2.1 {TclFindProc, simple proc name and proc not in namespace} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {rename p ""}
     proc p {} {return "p in [namespace current]"}
     info body p
 } {return "p in [namespace current]"}
 test proc-2.2 {TclFindProc, simple proc name and proc defined in namespace} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1 {
         namespace eval baz {
             proc p {} {return "p in [namespace current]"}
@@ -124,7 +124,7 @@
     namespace eval test_ns_1::baz {info body p}
 } {return "p in [namespace current]"}
 test proc-2.3 {TclFindProc, qualified proc name and proc defined in namespace} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1::baz {}
     namespace eval test_ns_1 {
         proc baz::p {} {return "p in [namespace current]"}
@@ -132,26 +132,26 @@
     namespace eval test_ns_1 {info body baz::p}
 } {return "p in [namespace current]"}
 test proc-2.4 {TclFindProc, global proc and executing in namespace} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {rename p ""}
     proc p {} {return "global p"}
     namespace eval test_ns_1::baz {info body p}
 } {return "global p"}
 
 test proc-3.1 {TclObjInterpProc, proc defined and executing in same namespace} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     proc p {} {return "p in [namespace current]"}
     p
 } {p in ::}
 test proc-3.2 {TclObjInterpProc, proc defined and executing in same namespace} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     namespace eval test_ns_1::baz {
         proc p {} {return "p in [namespace current]"}
         p
     }
 } {p in ::test_ns_1::baz}
 test proc-3.3 {TclObjInterpProc, proc defined and executing in different namespaces} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {rename p ""}
     proc p {} {return "p in [namespace current]"}
     namespace eval test_ns_1::baz {
@@ -159,7 +159,7 @@
     }
 } {p in ::}
 test proc-3.4 {TclObjInterpProc, procs execute in the namespace in which they were defined unless renamed into new namespace} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {rename p ""}
     namespace eval test_ns_1::baz {
         proc p {} {return "p in [namespace current]"}
@@ -177,7 +177,7 @@
     list [catch {{a b  c}} msg] $msg
 } {1 {wrong # args: should be "{a b  c} x"}}
 
-catch {namespace delete {expand}[namespace children :: test_ns_*]}
+catch {namespace delete {*}[namespace children :: test_ns_*]}
 catch {rename p ""}
 catch {rename {} ""}
 catch {rename {a b  c} {}}
Index: tests/reg.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/reg.test,v
retrieving revision 1.22
diff -u -r1.22 reg.test
--- tests/reg.test	5 Nov 2004 15:15:25 -0000	1.22
+++ tests/reg.test	3 Nov 2006 00:25:29 -0000
@@ -187,8 +187,8 @@
 	# if &, test as both BRE and ARE
 	if {[string match *&* $flags]} {
 	    set f [string map {& {}} $flags]
-	    MatchExpected $opts "$testid ARE" ${f}  $re $target {expand}$args
-	    MatchExpected $opts "$testid BRE" ${f}b $re $target {expand}$args
+	    MatchExpected $opts "$testid ARE" ${f}  $re $target {*}$args
+	    MatchExpected $opts "$testid BRE" ${f}b $re $target {*}$args
 	    return
 	}
 
@@ -207,8 +207,8 @@
 
 	set f [TestFlags $flags]
 	set infoflags [TestInfoFlags $flags]
-	set ccmd [list testregexp -about        {expand}$f $re]
-	set ecmd [list testregexp {expand}$opts {expand}$f $re $target]
+	set ccmd [list testregexp -about        {*}$f $re]
+	set ecmd [list testregexp {*}$opts {*}$f $re $target]
 
 	set nsub [expr {[llength $args] - 1}]
 	set names [list]
@@ -230,7 +230,7 @@
 	    incr nsub -1			;# the extra does not count
 	}
 	set erun "list \[[concat $ecmd $names]\] $refs"
-	set result [list [expr {![string match *!* $flags]}] {expand}$args]
+	set result [list [expr {![string match *!* $flags]}] {*}$args]
 	set info [list $nsub $infoflags]
 
 	::tcltest::test [TestNum $testid compile] [TestDesc $testid compile] \
@@ -262,7 +262,7 @@
 	    lappend constraints localeRegexp
 	}
 
-	set cmd [list testregexp -about {expand}[TestFlags $flags] $re]
+	set cmd [list testregexp -about {*}[TestFlags $flags] $re]
 	::tcltest::test [TestNum $testid error] [TestDesc $testid error] \
 		-constraints $constraints -result [list 1 REG_$err] -body \
 		"list \[catch \{$cmd\}\] \[lindex \$::errorCode 1\]"
@@ -273,8 +273,8 @@
 	# if &, test as both ARE and BRE
 	if {[string match *&* $flags]} {
 	    set f [string map {& {}} $flags]
-	    expectNomatch "$testid ARE" ${f}  $re $target {expand}$args
-	    expectNomatch "$testid BRE" ${f}b $re $target {expand}$args
+	    expectNomatch "$testid ARE" ${f}  $re $target {*}$args
+	    expectNomatch "$testid BRE" ${f}b $re $target {*}$args
 	    return
 	}
 
@@ -288,7 +288,7 @@
 
 	set f [TestFlags $flags]
 	set infoflags [TestInfoFlags $flags]
-	set ccmd [list testregexp -about {expand}$f $re]
+	set ccmd [list testregexp -about {*}$f $re]
 	set nsub [expr {[llength $args] - 1}]
 	if {$nsub == -1} {
 	    # didn't tell us number of subexps
@@ -297,7 +297,7 @@
 	} else {
 	    set info [list $nsub $infoflags]
 	}
-	set ecmd [list testregexp {expand}$f $re $target]
+	set ecmd [list testregexp {*}$f $re $target]
 
 	::tcltest::test [TestNum $testid compile] [TestDesc $testid compile] \
 		-constraints $constraints -body $ccmd -result $info
@@ -308,13 +308,13 @@
     # match expected (no missing, empty, or ambiguous submatches)
     # expectMatch testno flags re target mat submat ...
     proc expectMatch {args} {
-	MatchExpected {} {expand}$args
+	MatchExpected {} {*}$args
     }
 
     # match expected (full fanciness)
     # expectIndices testno flags re target mat submat ...
     proc expectIndices {args} {
-	MatchExpected -indices {expand}$args 
+	MatchExpected -indices {*}$args 
     }
 
     # partial match expected
@@ -322,7 +322,7 @@
     # Quirk:  number of ""s must be one more than number of subREs.
     proc expectPartial {args} {
 	lset args 1 ![lindex $args 1]	;# add ! flag
-	MatchExpected -indices {expand}$args
+	MatchExpected -indices {*}$args
     }
 
     # test is a knownBug
Index: tests/trace.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/trace.test,v
retrieving revision 1.49
diff -u -r1.49 trace.test
--- tests/trace.test	11 Apr 2006 14:37:54 -0000	1.49
+++ tests/trace.test	3 Nov 2006 00:25:29 -0000
@@ -1422,7 +1422,7 @@
 } {}
 
 proc traceDelete {cmd old new op} {
-    trace remove command $cmd {expand}[lindex [trace info command $cmd] 0]
+    trace remove command $cmd {*}[lindex [trace info command $cmd] 0]
     global info
     set info [list $old $new $op]
 }
@@ -1732,7 +1732,7 @@
 {factorial 3} 0 6 leave}
 
 proc traceDelete {cmd args} {
-    trace remove execution $cmd {expand}[lindex [trace info execution $cmd] 0]
+    trace remove execution $cmd {*}[lindex [trace info execution $cmd] 0]
     global info
     set info $args
 }
Index: tests/upvar.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/upvar.test,v
retrieving revision 1.13
diff -u -r1.13 upvar.test
--- tests/upvar.test	26 Aug 2006 13:00:39 -0000	1.13
+++ tests/upvar.test	3 Nov 2006 00:25:29 -0000
@@ -324,7 +324,7 @@
     unset x
 } -result {1 {can't set "b(2)": variable isn't array}}
 test upvar-8.9 {upvar won't create namespace variable that refers to procedure variable} {
-    catch {namespace delete {expand}[namespace children :: test_ns_*]}
+    catch {namespace delete {*}[namespace children :: test_ns_*]}
     catch {rename MakeLink ""}
     namespace eval ::test_ns_1 {}
     proc MakeLink {a} {
@@ -417,7 +417,7 @@
 #
 
 # Clear out any namespaces called test_ns_*
-catch {namespace delete {expand}[namespace children :: test_ns_*]}
+catch {namespace delete {*}[namespace children :: test_ns_*]}
 
 namespace eval test_ns_0 {
     variable x test_ns_0
Index: tests/winConsole.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/winConsole.test,v
retrieving revision 1.7
diff -u -r1.7 winConsole.test
--- tests/winConsole.test	23 Jun 2004 15:36:58 -0000	1.7
+++ tests/winConsole.test	3 Nov 2006 00:25:29 -0000
@@ -37,7 +37,7 @@
 
     #cleanup the fileevent
     fileevent stdin readable {}
-    fconfigure stdin {expand}$oldmode
+    fconfigure stdin {*}$oldmode
 
     set result
 
Index: tests/winFCmd.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/winFCmd.test,v
retrieving revision 1.40
diff -u -r1.40 winFCmd.test
--- tests/winFCmd.test	20 Mar 2006 11:39:03 -0000	1.40
+++ tests/winFCmd.test	3 Nov 2006 00:25:29 -0000
@@ -50,7 +50,7 @@
 	    set x [glob -directory $p tf* td*]
 	}
 	if {$x != ""} {
-	    catch {file delete -force -- {expand}$x}
+	    catch {file delete -force -- {*}$x}
 	}
     }
 }
Index: tools/tclZIC.tcl
===================================================================
RCS file: /cvsroot/tcl/tcl/tools/tclZIC.tcl,v
retrieving revision 1.8
diff -u -r1.8 tclZIC.tcl
--- tools/tclZIC.tcl	5 Dec 2005 20:40:42 -0000	1.8
+++ tools/tclZIC.tcl	3 Nov 2006 00:25:29 -0000
@@ -168,7 +168,7 @@
 	    # Detect continuations of a zone and flag the list appropriately
 	    lappend words ""
 	}
-	lappend words {expand}[regexp -all -inline {\S+} $line]
+	lappend words {*}[regexp -all -inline {\S+} $line]
 
 	# Switch on the directive
 
@@ -914,7 +914,7 @@
 	set untilBaseSecs [expr {
 		wide(86400) * wide($untilJCD) - 210866803200 }]
 	set untilSecs [convertTimeOfDay $untilBaseSecs $stdGMTOffset \
-		$DSTOffset {expand}$untilTimeOfDay]
+		$DSTOffset {*}$untilTimeOfDay]
     }
 
     set origStartSecs $startSecs
@@ -979,7 +979,7 @@
 
 	    if {$until ne ""} {
 		set untilSecs [convertTimeOfDay $untilBaseSecs \
-			$stdGMTOffset $DSTOffset {expand}$untilTimeOfDay]
+			$stdGMTOffset $DSTOffset {*}$untilTimeOfDay]
 	    }
 	}
 
@@ -1081,7 +1081,7 @@
 	set dayIn [eval $daySpecOn]
 	set secs [expr {wide(86400) * wide($dayIn) - 210866803200}]
 	set secs [convertTimeOfDay $secs \
-		$stdGMTOffset $DSTOffset {expand}$timeAt]
+		$stdGMTOffset $DSTOffset {*}$timeAt]
 	if {$secs < $earliest} {
 	    set earliest $secs
 	    set earliestIdx $i
@@ -1207,7 +1207,7 @@
 	    set startDay [eval $dayRule]
 	    set secs [expr {wide(86400) * wide($startDay) -210866803200}]
 	    set secs [convertTimeOfDay $secs \
-		    $stdGMTOffset $DSTOffset {expand}$timeOfDay]
+		    $stdGMTOffset $DSTOffset {*}$timeOfDay]
 	}
 	lappend dstRule \
 		$year $secs $stdGMTOffset $DSTOffset $nextGMTOffset \