From 5e0a6ec0e20184698f7b2b98a7b8a62ef04e2c1a Mon Sep 17 00:00:00 2001 From: Miguel Sofer Date: Wed, 18 Aug 2010 15:54:06 +0000 Subject: * generic/tclCmdAH.c (TclNRTryObjCmd): block tailcalling out of the body of a non-bc'ed [try], #3046594 --- ChangeLog | 5 ++++- generic/tclCmdMZ.c | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8105067..d2b8e13 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,7 @@ 2010-08-18 Miguel Sofer + * generic/tclCmdAH.c (TclNRTryObjCmd): block tailcalling out of + the body of a non-bc'ed [try], #3046594 + * generic/tclBasic.c: Redesign of [tailcall] to * generic/tclCmdAH.c: (a) fix #3047235 * generic/tclCompile.h: (b) enable fix for #3046594 @@ -6,7 +9,7 @@ * generic/tclInt.h: * generic/tclNamesp.c: * tests/tailcall.test: - + 2010-08-18 Donal K. Fellows * library/safe.tcl (AliasGlob): [Bug 3004191]: Restore safe [glob] to diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c index 0cb172e..b844dae 100644 --- a/generic/tclCmdMZ.c +++ b/generic/tclCmdMZ.c @@ -15,7 +15,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclCmdMZ.c,v 1.212 2010/04/06 08:34:52 dkf Exp $ + * RCS: @(#) $Id: tclCmdMZ.c,v 1.213 2010/08/18 15:54:06 msofer Exp $ */ #include "tclInt.h" @@ -4274,11 +4274,13 @@ TclNRTryObjCmd( } /* - * Execute the body. + * Execute the body; block tailcalling out of it. */ Tcl_NRAddCallback(interp, TryPostBody, handlersObj, finallyObj, (ClientData)objv, INT2PTR(objc)); + TclNRAddCallback(interp, TclNRBlockTailcall, NULL, NULL, NULL, + NULL); return TclNREvalObjEx(interp, bodyObj, 0, ((Interp *) interp)->cmdFramePtr, 1); } -- cgit v0.12