diff options
author | dgp <dgp@users.sourceforge.net> | 2016-09-08 03:29:09 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2016-09-08 03:29:09 (GMT) |
commit | dfe46aaba1d57b828a9378ec10f20818087a70c8 (patch) | |
tree | e815efa8acc0da957800726b75db7c03ed46595e /generic/tclNamesp.c | |
parent | 748dc22dd27974e2548c7ef94bd8e09a8f921cda (diff) | |
parent | c088b6c59a66d5a20ea5ebff150030eb453fa0a9 (diff) | |
download | tcl-dfe46aaba1d57b828a9378ec10f20818087a70c8.zip tcl-dfe46aaba1d57b828a9378ec10f20818087a70c8.tar.gz tcl-dfe46aaba1d57b828a9378ec10f20818087a70c8.tar.bz2 |
merge trunk
Diffstat (limited to 'generic/tclNamesp.c')
-rw-r--r-- | generic/tclNamesp.c | 23 |
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; } |