diff options
author | Miguel Sofer <miguel.sofer@gmail.com> | 2010-04-29 23:39:32 (GMT) |
---|---|---|
committer | Miguel Sofer <miguel.sofer@gmail.com> | 2010-04-29 23:39:32 (GMT) |
commit | 86ab7e21814dcb7876a4002e7bb8f582cc5fb606 (patch) | |
tree | e43c3dcb657d68ea7a183a4b50ebdd353d55a73a /generic/tclLiteral.c | |
parent | 4afa4db89195f756601d2fd640f605e4eb1896cd (diff) | |
download | tcl-86ab7e21814dcb7876a4002e7bb8f582cc5fb606.zip tcl-86ab7e21814dcb7876a4002e7bb8f582cc5fb606.tar.gz tcl-86ab7e21814dcb7876a4002e7bb8f582cc5fb606.tar.bz2 |
* generic/tclCompExpr.c: Slight change in the literal sharing
* generic/tclCompile.c: mechanism to avoid shimmering of
* generic/tclCompile.h: command names.
* generic/tclLiteral.c:
Diffstat (limited to 'generic/tclLiteral.c')
-rw-r--r-- | generic/tclLiteral.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/generic/tclLiteral.c b/generic/tclLiteral.c index a456627..b991ef3 100644 --- a/generic/tclLiteral.c +++ b/generic/tclLiteral.c @@ -13,7 +13,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclLiteral.c,v 1.42 2010/02/25 22:20:10 nijtmans Exp $ + * RCS: @(#) $Id: tclLiteral.c,v 1.43 2010/04/29 23:39:32 msofer Exp $ */ #include "tclInt.h" @@ -411,8 +411,8 @@ TclRegisterLiteral( * first null character. */ int flags) /* If LITERAL_ON_HEAP then the caller already * malloc'd bytes and ownership is passed to - * this function. If LITERAL_NS_SCOPE then - * the literal shouldnot be shared accross + * this function. If LITERAL_CMD_NAME then + * the literal should not be shared accross * namespaces. */ { Interp *iPtr = envPtr->iPtr; @@ -453,18 +453,22 @@ TclRegisterLiteral( } /* - * The literal is new to this CompileEnv. Should it be shared accross - * namespaces? If it is a fully qualified name, the namespace - * specification is not needed to avoid sharing. + * The literal is new to this CompileEnv. If it is a command name, avoid + * sharing it accross namespaces, and try not to share it with non-cmd + * literals. Note that FQ command names can be shared, so that we register + * the namespace as the interp's global NS. */ - if ((flags & LITERAL_NS_SCOPE) && iPtr->varFramePtr - && ((length <2) || (bytes[0] != ':') || (bytes[1] != ':'))) { - nsPtr = iPtr->varFramePtr->nsPtr; + if (flags & LITERAL_CMD_NAME) { + if ((length >= 2) && (bytes[0] == ':') && (bytes[1] == ':')) { + nsPtr = iPtr->globalNsPtr; + } else { + nsPtr = iPtr->varFramePtr->nsPtr; + } } else { nsPtr = NULL; } - + /* * Is it in the interpreter's global literal table? If not, create it. */ |