diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2016-03-02 09:06:08 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2016-03-02 09:06:08 (GMT) |
commit | d0aa04bdb0fbf47e5564be76ef196934474f7fe1 (patch) | |
tree | bcceb6ef5832e9250aa7728e24957e2a16ddb41a /generic/tclVar.c | |
parent | 56b912b40ad10b788e76b9f3dad2cf9599beabda (diff) | |
parent | 8815f9f3c32c06e9f2d1d2b8ea69e1810988c5a4 (diff) | |
download | tcl-d0aa04bdb0fbf47e5564be76ef196934474f7fe1.zip tcl-d0aa04bdb0fbf47e5564be76ef196934474f7fe1.tar.gz tcl-d0aa04bdb0fbf47e5564be76ef196934474f7fe1.tar.bz2 |
Merge trunk
Diffstat (limited to 'generic/tclVar.c')
-rw-r--r-- | generic/tclVar.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/generic/tclVar.c b/generic/tclVar.c index 1048917..7139114 100644 --- a/generic/tclVar.c +++ b/generic/tclVar.c @@ -697,13 +697,16 @@ TclObjLookupVarEx( /* * An indexed local variable. */ + Tcl_Obj *cachedNamePtr = localName(iPtr->varFramePtr, index); part1Ptr->typePtr = &localVarNameType; - if (part1Ptr != localName(iPtr->varFramePtr, index)) { - part1Ptr->internalRep.twoPtrValue.ptr1 = - localName(iPtr->varFramePtr, index); - Tcl_IncrRefCount((Tcl_Obj *) - part1Ptr->internalRep.twoPtrValue.ptr1); + if (part1Ptr != cachedNamePtr) { + part1Ptr->internalRep.twoPtrValue.ptr1 = cachedNamePtr; + Tcl_IncrRefCount(cachedNamePtr); + if (cachedNamePtr->typePtr != &localVarNameType + || cachedNamePtr->internalRep.twoPtrValue.ptr1 != NULL) { + TclFreeIntRep(cachedNamePtr); + } } else { part1Ptr->internalRep.twoPtrValue.ptr1 = NULL; } |