summaryrefslogtreecommitdiffstats
path: root/generic/tclExecute.c
diff options
context:
space:
mode:
authorMiguel Sofer <miguel.sofer@gmail.com>2007-08-09 12:20:04 (GMT)
committerMiguel Sofer <miguel.sofer@gmail.com>2007-08-09 12:20:04 (GMT)
commitfcd17ae019c89d4f1cd1f82e1c04ba022c275f77 (patch)
tree6a044cff1f717e9615f3588d0aa24be02f7fa9e5 /generic/tclExecute.c
parenta4eeb94ff4ff15234e1513f1535c79690f9ea2bc (diff)
downloadtcl-fcd17ae019c89d4f1cd1f82e1c04ba022c275f77.zip
tcl-fcd17ae019c89d4f1cd1f82e1c04ba022c275f77.tar.gz
tcl-fcd17ae019c89d4f1cd1f82e1c04ba022c275f77.tar.bz2
* generic/tclExecute.c (INST_STORE_ARRAY):
* tests/trace.test (trace-2.6): whole array write traces on compiled local variables were not firing [Bug 1770591]
Diffstat (limited to 'generic/tclExecute.c')
-rw-r--r--generic/tclExecute.c37
1 files changed, 13 insertions, 24 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index ebbd040..abb30e8 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclExecute.c,v 1.311 2007/08/08 20:52:20 dgp Exp $
+ * RCS: @(#) $Id: tclExecute.c,v 1.312 2007/08/09 12:20:07 msofer Exp $
*/
#include "tclInt.h"
@@ -2314,16 +2314,14 @@ TclExecuteByteCode(
TRACE(("%u \"%.30s\" => ", opnd, O2S(part2Ptr)));
if (TclIsVarArray(arrayPtr) && !(arrayPtr->flags & VAR_TRACED_READ)) {
varPtr = VarHashFindVar(arrayPtr->value.tablePtr, part2Ptr);
- if (varPtr) {
- if (TclIsVarDirectReadable(varPtr)) {
- /*
- * No errors, no traces: just get the value.
- */
+ if (varPtr && TclIsVarDirectReadable(varPtr)) {
+ /*
+ * No errors, no traces: just get the value.
+ */
- objResultPtr = varPtr->value.objPtr;
- TRACE_APPEND(("%.30s\n", O2S(objResultPtr)));
- NEXT_INST_F(pcAdjustment, 1, 1);
- }
+ objResultPtr = varPtr->value.objPtr;
+ TRACE_APPEND(("%.30s\n", O2S(objResultPtr)));
+ NEXT_INST_F(pcAdjustment, 1, 1);
}
}
varPtr = TclLookupArrayElement(interp, part1Ptr, part2Ptr,
@@ -2433,13 +2431,11 @@ TclExecuteByteCode(
}
if (TclIsVarArray(arrayPtr) && !(arrayPtr->flags & VAR_TRACED_WRITE)) {
varPtr = VarHashFindVar(arrayPtr->value.tablePtr, part2Ptr);
- if (varPtr) {
- if (TclIsVarDirectWritable(varPtr)) {
- tosPtr--;
- Tcl_DecrRefCount(OBJ_AT_TOS);
- OBJ_AT_TOS = valuePtr;
- goto doStoreVarDirect;
- }
+ if (varPtr && TclIsVarDirectWritable(varPtr)) {
+ tosPtr--;
+ Tcl_DecrRefCount(OBJ_AT_TOS);
+ OBJ_AT_TOS = valuePtr;
+ goto doStoreVarDirect;
}
}
cleanup = 2;
@@ -2596,13 +2592,6 @@ TclExecuteByteCode(
varPtr = TclLookupArrayElement(interp, part1Ptr, part2Ptr,
TCL_LEAVE_ERR_MSG, "set", 1, 1, arrayPtr, opnd);
if (varPtr) {
- if ((storeFlags == TCL_LEAVE_ERR_MSG) && TclIsVarDirectWritable(varPtr)) {
- tosPtr--;
- Tcl_DecrRefCount(OBJ_AT_TOS);
- OBJ_AT_TOS = valuePtr;
- goto doStoreVarDirect;
- }
- part1Ptr = NULL;
goto doCallPtrSetVar;
} else {
TRACE_APPEND(("ERROR: %.30s\n", O2S(Tcl_GetObjResult(interp))));