diff options
Diffstat (limited to 'generic/tclCmdAH.c')
-rw-r--r-- | generic/tclCmdAH.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/generic/tclCmdAH.c b/generic/tclCmdAH.c index 6456bd5..e8a249f 100644 --- a/generic/tclCmdAH.c +++ b/generic/tclCmdAH.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclCmdAH.c,v 1.124 2010/03/05 14:34:03 dkf Exp $ + * RCS: @(#) $Id: tclCmdAH.c,v 1.125 2010/08/18 15:44:12 msofer Exp $ */ #include "tclInt.h" @@ -290,13 +290,15 @@ TclNRCatchObjCmd( optionVarNamePtr = objv[3]; } + TclNRAddCallback(interp, CatchObjCmdCallback, INT2PTR(objc), + varNamePtr, optionVarNamePtr, NULL); + TclNRAddCallback(interp, TclNRBlockTailcall, NULL, NULL, NULL, + NULL); + /* * TIP #280. Make invoking context available to caught script. */ - TclNRAddCallback(interp, CatchObjCmdCallback, INT2PTR(objc), - varNamePtr, optionVarNamePtr, NULL); - return TclNREvalObjEx(interp, objv[1], 0, iPtr->cmdFramePtr, 1); } @@ -313,19 +315,6 @@ CatchObjCmdCallback( int rewind = iPtr->execEnvPtr->rewind; /* - * catch has to disable any tailcall - */ - - if (iPtr->varFramePtr->tailcallPtr) { - TclClearTailcall(interp, iPtr->varFramePtr->tailcallPtr); - iPtr->varFramePtr->tailcallPtr = NULL; - result = TCL_ERROR; - Tcl_SetResult(interp,"Tailcall called from within a catch environment", - TCL_STATIC); - } - - - /* * We disable catch in interpreters where the limit has been exceeded. */ |