summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiguel Sofer <miguel.sofer@gmail.com>2004-07-07 22:05:56 (GMT)
committerMiguel Sofer <miguel.sofer@gmail.com>2004-07-07 22:05:56 (GMT)
commitadf2c077e4fdc5ed2becbcca261c4fc891bca5a9 (patch)
treea73df6dca3f608df7a084430cf236279ff176da1
parent80db59e20576cbaf4b35a47776c68b139b26e2f6 (diff)
downloadtcl-adf2c077e4fdc5ed2becbcca261c4fc891bca5a9.zip
tcl-adf2c077e4fdc5ed2becbcca261c4fc891bca5a9.tar.gz
tcl-adf2c077e4fdc5ed2becbcca261c4fc891bca5a9.tar.bz2
* generic/tclCompile.c (TclCompileScript): fix for [Bug 458361].
Single-word scripts are compiled with an unshared cmdName to avoid shimmering between bytecode and cmdName reps.
-rw-r--r--ChangeLog6
-rw-r--r--generic/tclCompile.c11
2 files changed, 16 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 37480f7..59da0e8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-07-07 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c (TclCompileScript): fix for [Bug 458361].
+ Single-word scripts are compiled with an unshared cmdName to avoid
+ shimmering between bytecode and cmdName reps.
+
2004-07-07 Don Porter <dgp@users.sourceforge.net>
* generic.tclCmdMZ.c (TclMergeReturnOptions): Simplified logic and
diff --git a/generic/tclCompile.c b/generic/tclCompile.c
index 92d3368..225b9cd 100644
--- a/generic/tclCompile.c
+++ b/generic/tclCompile.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclCompile.c,v 1.68 2004/07/06 21:08:36 dgp Exp $
+ * RCS: @(#) $Id: tclCompile.c,v 1.69 2004/07/07 22:05:59 msofer Exp $
*/
#include "tclInt.h"
@@ -1118,6 +1118,15 @@ TclCompileScript(interp, script, numBytes, envPtr)
envPtr->literalArrayPtr[objIndex].objPtr,
cmdPtr);
}
+ if ((wordIdx == 0) && (parse.numWords == 1)) {
+ /*
+ * Single word script: unshare the command name to
+ * avoid shimmering between bytecode and cmdName
+ * representations [Bug 458361]
+ */
+
+ TclHideLiteral(interp, envPtr, objIndex);
+ }
} else {
objIndex = TclRegisterNewLiteral(envPtr,
tokenPtr[1].start, tokenPtr[1].size);