diff options
-rw-r--r-- | eval.c | 4 | ||||
-rw-r--r-- | share/txr/stdlib/error.tl | 5 |
2 files changed, 5 insertions, 4 deletions
@@ -298,8 +298,6 @@ static void eval_exception(val sym, val ctx, val fmt, va_list vl) (void) vformat(stream, fmt, vl); - uw_release_deferred_warnings(); - uw_rthrow(sym, get_string_from_stream(stream)); } @@ -393,6 +391,8 @@ void error_trace(val exsym, val exvals, val out_stream, val prefix) val xlast = uw_last_form_expanded(); val info = source_loc_str(last, nil); + uw_dump_deferred_warnings(out_stream); + if (cdr(exvals) || !stringp(car(exvals))) format(out_stream, lit("~a exception args: ~!~s\n"), prefix, exvals, nao); diff --git a/share/txr/stdlib/error.tl b/share/txr/stdlib/error.tl index a7885c3f..7f70391e 100644 --- a/share/txr/stdlib/error.tl +++ b/share/txr/stdlib/error.tl @@ -38,9 +38,10 @@ (let* ((nctx (sys:dig ctx)) (loc (sys:loc nctx)) (name (sys:ctx-name nctx))) - (dump-deferred-warnings *stderr*) (let ((msg (fmt `@loc: ~s: @fmt` name . args))) - (when *load-recursive* + (when (and *load-recursive* + (null (find-frame 'error 'catch-frame))) + (dump-deferred-warnings *stderr*) (put-line msg *stderr*)) (throw 'eval-error msg)))) |