diff options
author | dgp <dgp@users.sourceforge.net> | 2007-09-06 18:13:19 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2007-09-06 18:13:19 (GMT) |
commit | fa9ca5327da10d6516693b272a082e03a255c835 (patch) | |
tree | 21db3085afb048eebeefccee941778b5e8733f74 /generic/tclInterp.c | |
parent | d5f98c3ef4786469dfaedb23c4deeffd2973be05 (diff) | |
download | tcl-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.c | 10 |
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); } |