diff options
author | Miguel Sofer <miguel.sofer@gmail.com> | 2009-12-13 17:11:47 (GMT) |
---|---|---|
committer | Miguel Sofer <miguel.sofer@gmail.com> | 2009-12-13 17:11:47 (GMT) |
commit | 64cd452abe0622edb368d64ef22b368689b6cc86 (patch) | |
tree | 308535394c93daef6801a789aefdf38a27605407 /generic/tclExecute.c | |
parent | eb5b16a4cf09bf5b1a7d496074935db1ed60eed2 (diff) | |
download | tcl-64cd452abe0622edb368d64ef22b368689b6cc86.zip tcl-64cd452abe0622edb368d64ef22b368689b6cc86.tar.gz tcl-64cd452abe0622edb368d64ef22b368689b6cc86.tar.bz2 |
* generic/tclBasic.c: Release TclPopCallFrame() from its
* generic/tclExecute.c: tailcall-management duties
* generic/tclNamesp.c:
Diffstat (limited to 'generic/tclExecute.c')
-rw-r--r-- | generic/tclExecute.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c index a8a979d..e553356 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -14,7 +14,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.467 2009/12/13 16:41:37 msofer Exp $ + * RCS: @(#) $Id: tclExecute.c,v 1.468 2009/12/13 17:11:47 msofer Exp $ */ #include "tclInt.h" @@ -2856,10 +2856,7 @@ TclExecuteByteCode( TclArgumentBCRelease((Tcl_Interp *) iPtr, bcFramePtr); if (catchTop != initCatchTop) { - TEOV_callback *tailcallPtr = - iPtr->varFramePtr->tailcallPtr; - - TclClearTailcall(interp, tailcallPtr); + TclClearTailcall(interp, param); iPtr->varFramePtr->tailcallPtr = NULL; TRESULT = TCL_ERROR; Tcl_SetResult(interp, @@ -2870,6 +2867,8 @@ TclExecuteByteCode( pc--; goto checkForCatch; } + iPtr->varFramePtr->tailcallPtr = param; + TclSpliceTailcall(interp, param); goto abnormalReturn; case TCL_NR_YIELD_TYPE: { /* [yield] */ CoroutineData *corPtr = iPtr->execEnvPtr->corPtr; |