summaryrefslogtreecommitdiffstats
path: root/generic/tclNamesp.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2016-09-08 03:29:09 (GMT)
committerdgp <dgp@users.sourceforge.net>2016-09-08 03:29:09 (GMT)
commitdfe46aaba1d57b828a9378ec10f20818087a70c8 (patch)
treee815efa8acc0da957800726b75db7c03ed46595e /generic/tclNamesp.c
parent748dc22dd27974e2548c7ef94bd8e09a8f921cda (diff)
parentc088b6c59a66d5a20ea5ebff150030eb453fa0a9 (diff)
downloadtcl-dfe46aaba1d57b828a9378ec10f20818087a70c8.zip
tcl-dfe46aaba1d57b828a9378ec10f20818087a70c8.tar.gz
tcl-dfe46aaba1d57b828a9378ec10f20818087a70c8.tar.bz2
merge trunk
Diffstat (limited to 'generic/tclNamesp.c')
-rw-r--r--generic/tclNamesp.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/generic/tclNamesp.c b/generic/tclNamesp.c
index ff9b2c3..fc2d63d 100644
--- a/generic/tclNamesp.c
+++ b/generic/tclNamesp.c
@@ -399,19 +399,6 @@ Tcl_PopCallFrame(
register CallFrame *framePtr = iPtr->framePtr;
Namespace *nsPtr;
- /*
- * It's important to remove the call frame from the interpreter's stack of
- * call frames before deleting local variables, so that traces invoked by
- * the variable deletion don't see the partially-deleted frame.
- */
-
- if (framePtr->callerPtr) {
- iPtr->framePtr = framePtr->callerPtr;
- iPtr->varFramePtr = framePtr->callerVarPtr;
- } else {
- /* Tcl_PopCallFrame: trying to pop rootCallFrame! */
- }
-
if (framePtr->varTablePtr != NULL) {
TclDeleteVars(iPtr, framePtr->varTablePtr);
ckfree(framePtr->varTablePtr);
@@ -439,6 +426,13 @@ Tcl_PopCallFrame(
}
framePtr->nsPtr = NULL;
+ if (framePtr->callerPtr) {
+ iPtr->framePtr = framePtr->callerPtr;
+ iPtr->varFramePtr = framePtr->callerVarPtr;
+ } else {
+ /* Tcl_PopCallFrame: trying to pop rootCallFrame! */
+ }
+
if (framePtr->tailcallPtr) {
TclSetTailcall(interp, framePtr->tailcallPtr);
}
@@ -2583,7 +2577,9 @@ Tcl_FindCommand(
}
if (result == TCL_OK) {
+ ((Command *)cmd)->flags |= CMD_VIA_RESOLVER;
return cmd;
+
} else if (result != TCL_CONTINUE) {
return NULL;
}
@@ -2675,6 +2671,7 @@ Tcl_FindCommand(
}
if (cmdPtr != NULL) {
+ cmdPtr->flags &= ~CMD_VIA_RESOLVER;
return (Tcl_Command) cmdPtr;
}