diff options
author | pooryorick <com.digitalsmarties@pooryorick.com> | 2016-10-03 16:55:56 (GMT) |
---|---|---|
committer | pooryorick <com.digitalsmarties@pooryorick.com> | 2016-10-03 16:55:56 (GMT) |
commit | 8826c4b5dc048432fbed200da55eef080c75b32c (patch) | |
tree | 630235c89d7d920a856d6b575a4c28ec3f917fdb /generic/tclExecute.c | |
parent | 79732cb7bfe403d288455d98bc70bf3c73e09e8f (diff) | |
parent | 2735ae8a8f3cd9a14778858d17f195bf54fc3303 (diff) | |
download | tcl-8826c4b5dc048432fbed200da55eef080c75b32c.zip tcl-8826c4b5dc048432fbed200da55eef080c75b32c.tar.gz tcl-8826c4b5dc048432fbed200da55eef080c75b32c.tar.bz2 |
merge trunk
Diffstat (limited to 'generic/tclExecute.c')
-rw-r--r-- | generic/tclExecute.c | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c index f74c468..556ec55 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -1554,7 +1554,7 @@ CompileExprObj( */ if (compEnv.codeNext == compEnv.codeStart) { - TclEmitPush(TclRegisterNewLiteral(&compEnv, "0", 1), + TclEmitPush(TclRegisterLiteral(&compEnv, "0", 1, 0), &compEnv); } @@ -2071,6 +2071,13 @@ TclNRExecuteByteCode( #endif /* + * Test namespace-50.9 demonstrates the need for this call. + * Use a --enable-symbols=mem bug to see. + */ + + TclResetRewriteEnsemble(interp, 1); + + /* * Push the callback for bytecode execution */ @@ -3166,7 +3173,7 @@ TEBCresume( Tcl_Obj *copyPtr = Tcl_NewListObj(objc - opnd + 1, NULL); Tcl_ListObjAppendElement(NULL, copyPtr, objPtr); - Tcl_ListObjReplace(NULL, copyPtr, LIST_MAX, 0, + Tcl_ListObjReplace(NULL, copyPtr, LIST_MAX, 0, objc - opnd, objv + opnd); Tcl_DecrRefCount(objPtr); objPtr = copyPtr; @@ -5276,23 +5283,10 @@ TEBCresume( toIdx = objc-1; } if (fromIdx == 0 && toIdx != objc-1 && !Tcl_IsShared(valuePtr)) { - /* - * BEWARE! This is looking inside the implementation of the - * list type. - */ - - List *listPtr = valuePtr->internalRep.twoPtrValue.ptr1; - - if (listPtr->refCount == 1) { - for (index=toIdx+1; index<objc ; index++) { - TclDecrRefCount(objv[index]); - } - listPtr->elemCount = toIdx+1; - listPtr->canonicalFlag = 1; - TclInvalidateStringRep(valuePtr); - TRACE_APPEND(("%.30s\n", O2S(valuePtr))); - NEXT_INST_F(9, 0, 0); - } + Tcl_ListObjReplace(interp, valuePtr, + toIdx + 1, LIST_MAX, 0, NULL); + TRACE_APPEND(("%.30s\n", O2S(valuePtr))); + NEXT_INST_F(9, 0, 0); } objResultPtr = Tcl_NewListObj(toIdx-fromIdx+1, objv+fromIdx); } else { |