summaryrefslogtreecommitdiffstats
path: root/generic/tclInterp.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2007-09-06 18:13:19 (GMT)
committerdgp <dgp@users.sourceforge.net>2007-09-06 18:13:19 (GMT)
commitfa9ca5327da10d6516693b272a082e03a255c835 (patch)
tree21db3085afb048eebeefccee941778b5e8733f74 /generic/tclInterp.c
parentd5f98c3ef4786469dfaedb23c4deeffd2973be05 (diff)
downloadtcl-fa9ca5327da10d6516693b272a082e03a255c835.zip
tcl-fa9ca5327da10d6516693b272a082e03a255c835.tar.gz
tcl-fa9ca5327da10d6516693b272a082e03a255c835.tar.bz2
* generic/tclInt.decls: New internal routine TclBackgroundException()
* generic/tclEvent.c: that for the first time permits non-TCL_ERROR exceptions to trigger [interp bgerror] handling. Closes a gap in TIP 221. When falling back to [bgerror] (which is designed only to handle TCL_ERROR), convert exceptions into errors complaining about the exception. * generic/tclInterp.c: Convert Tcl_BackgroundError() callers to call * generic/tclIO.c: TclBackgroundException(). * generic/tclIOCmd.c: * generic/tclTimer.c: * generic/tclIntDecls.h: make genstubs * generic/tclStubInit.c:
Diffstat (limited to 'generic/tclInterp.c')
-rw-r--r--generic/tclInterp.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/generic/tclInterp.c b/generic/tclInterp.c
index 1d28a95..a42c339 100644
--- a/generic/tclInterp.c
+++ b/generic/tclInterp.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: tclInterp.c,v 1.76 2007/06/20 18:46:13 dgp Exp $
+ * RCS: @(#) $Id: tclInterp.c,v 1.77 2007/09/06 18:13:20 dgp Exp $
*/
#include "tclInt.h"
@@ -3615,12 +3615,14 @@ TimeLimitCallback(
ClientData clientData)
{
Tcl_Interp *interp = (Tcl_Interp *) clientData;
+ int code;
Tcl_Preserve((ClientData) interp);
((Interp *)interp)->limit.timeEvent = NULL;
- if (Tcl_LimitCheck(interp) != TCL_OK) {
+ code = Tcl_LimitCheck(interp);
+ if (code != TCL_OK) {
Tcl_AddErrorInfo(interp, "\n (while waiting for event)");
- Tcl_BackgroundError(interp);
+ TclBackgroundException(interp, code);
}
Tcl_Release((ClientData) interp);
}
@@ -3788,7 +3790,7 @@ CallScriptLimitCallback(
code = Tcl_EvalObjEx(limitCBPtr->interp, limitCBPtr->scriptObj,
TCL_EVAL_GLOBAL);
if (code != TCL_OK && !Tcl_InterpDeleted(limitCBPtr->interp)) {
- Tcl_BackgroundError(limitCBPtr->interp);
+ TclBackgroundException(limitCBPtr->interp, code);
}
Tcl_Release(limitCBPtr->interp);
}