summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiguel Sofer <miguel.sofer@gmail.com>2010-08-18 15:54:06 (GMT)
committerMiguel Sofer <miguel.sofer@gmail.com>2010-08-18 15:54:06 (GMT)
commit5e0a6ec0e20184698f7b2b98a7b8a62ef04e2c1a (patch)
tree06f643e1b0af8689f4abf52d68c64cbc2d038cee
parent096e06e4b8606abecd8fe11c9919df4f35cf4d52 (diff)
downloadtcl-5e0a6ec0e20184698f7b2b98a7b8a62ef04e2c1a.zip
tcl-5e0a6ec0e20184698f7b2b98a7b8a62ef04e2c1a.tar.gz
tcl-5e0a6ec0e20184698f7b2b98a7b8a62ef04e2c1a.tar.bz2
* generic/tclCmdAH.c (TclNRTryObjCmd): block tailcalling out of
the body of a non-bc'ed [try], #3046594
-rw-r--r--ChangeLog5
-rw-r--r--generic/tclCmdMZ.c6
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 <msofer@users.sf.net>
+ * 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 <dkf@users.sf.net>
* 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);
}