diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2016-09-07 13:34:41 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2016-09-07 13:34:41 (GMT) |
commit | 126933978f910cb47d9bf73c99e1c9eacb57ed04 (patch) | |
tree | 8eefd8a982aaa8cb93031d34bb939751e833acb4 /generic/tclEnsemble.c | |
parent | 5a3911451c1076781c85ddc9c055b12f7a718f37 (diff) | |
parent | ea21bb5de3ca09b64d101656f0613cd10f877aa6 (diff) | |
download | tcl-126933978f910cb47d9bf73c99e1c9eacb57ed04.zip tcl-126933978f910cb47d9bf73c99e1c9eacb57ed04.tar.gz tcl-126933978f910cb47d9bf73c99e1c9eacb57ed04.tar.bz2 |
Fix [d4e7780ca1681cd095dbd81fe264feff75c988f7|d4e7780ca1]: "global" cmd literal sharing vs. per-interp resolvers
Diffstat (limited to 'generic/tclEnsemble.c')
-rw-r--r-- | generic/tclEnsemble.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/generic/tclEnsemble.c b/generic/tclEnsemble.c index 2766769..43813f1 100644 --- a/generic/tclEnsemble.c +++ b/generic/tclEnsemble.c @@ -3306,7 +3306,7 @@ CompileToInvokedCommand( Tcl_Token *tokPtr; Tcl_Obj *objPtr, **words; char *bytes; - int length, i, numWords, cmdLit; + int length, i, numWords, cmdLit, extraLiteralFlags = LITERAL_CMD_NAME; DefineLineInformation; /* @@ -3326,8 +3326,8 @@ CompileToInvokedCommand( SetLineInformation(i); if (tokPtr->type == TCL_TOKEN_SIMPLE_WORD) { - int literal = TclRegisterNewLiteral(envPtr, - tokPtr[1].start, tokPtr[1].size); + int literal = TclRegisterLiteral(envPtr, + tokPtr[1].start, tokPtr[1].size, 0); if (envPtr->clNext) { TclContinuationsEnterDerived( @@ -3348,8 +3348,11 @@ CompileToInvokedCommand( objPtr = Tcl_NewObj(); Tcl_GetCommandFullName(interp, (Tcl_Command) cmdPtr, objPtr); - bytes = TclGetStringFromObj(objPtr, &length); - cmdLit = TclRegisterNewCmdLiteral(envPtr, bytes, length); + bytes = Tcl_GetStringFromObj(objPtr, &length); + if ((cmdPtr != NULL) && (cmdPtr->flags & CMD_VIA_RESOLVER)) { + extraLiteralFlags |= LITERAL_UNSHARED; + } + cmdLit = TclRegisterLiteral(envPtr, bytes, length, extraLiteralFlags); TclSetCmdNameObj(interp, TclFetchLiteral(envPtr, cmdLit), cmdPtr); TclEmitPush(cmdLit, envPtr); TclDecrRefCount(objPtr); |