From 3dba6ca7c542fefb2124340f948a0b10eea94b91 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 7 Apr 2020 06:36:04 -0700 Subject: exceptions: use uw_rthrow for non-error exceptions. * eval.c (eval_exception): This function is shared by warnings and errors. Use uw_throw. The eval_error caller already has an abort() after its eval_exception call, which makes that code path continue to be equivalent to uw_throw. The behavior changes for the other caller, eval_warn, which will now return if the warning is not handled. (eval_defr_warn, gather_free_refs, gather_free_refs_nw): Throw non-error exception with uw_rthrow. * match.c (v_throw, v_assert, h_assert): Use uw_rthrow for these directives, just like the throw function. * parser.c (repl_intr, repl_warning): Use uw_rthrow. * unwind.c (uw_muffle_warning, uw_release_deferred_warnings): Likewise. --- eval.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 997ddf08..b2954e91 100644 --- a/eval.c +++ b/eval.c @@ -283,7 +283,7 @@ val ctx_name(val obj) return nil; } -noreturn static void eval_exception(val sym, val ctx, val fmt, va_list vl) +static void eval_exception(val sym, val ctx, val fmt, va_list vl) { uses_or2; val form = ctx_form(ctx); @@ -298,7 +298,7 @@ noreturn static void eval_exception(val sym, val ctx, val fmt, va_list vl) uw_release_deferred_warnings(); - uw_throw(sym, get_string_from_stream(stream)); + uw_rthrow(sym, get_string_from_stream(stream)); } noreturn val eval_error(val ctx, val fmt, ...) @@ -349,8 +349,8 @@ static val eval_defr_warn(val ctx, val tag, val fmt, ...) (void) vformat(stream, fmt, vl); - uw_throw(defr_warning_s, - cons(get_string_from_stream(stream), cons(tag, nil))); + uw_rthrow(defr_warning_s, + cons(get_string_from_stream(stream), cons(tag, nil))); } uw_catch(exsym, exvals) { (void) exsym; (void) exvals; } @@ -5022,7 +5022,7 @@ static val gather_free_refs(val info_cons, val exc, struct args *args) if (!memq(sym, deref(dl))) mpush(sym, dl); } - uw_throw(continue_s, nil); + uw_rthrow(continue_s, nil); } return nil; @@ -5032,7 +5032,7 @@ static val gather_free_refs_nw(val info_cons, val exc, struct args *args) { gather_free_refs(info_cons, exc, args); - uw_throw(continue_s, nil); + return uw_rthrow(continue_s, nil); } static val expand_with_free_refs(val form, val menv_in, val upto_menv_in) -- cgit v1.2.3