From 491d594929405dd79e020f68138a10dc9ac10ae7 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 10 Feb 2017 15:32:17 -0800 Subject: Use non-hacky representation for deferrable warnings. Deferrable warnings now get their own subtype, defr-warning. The tag is a regular argument: no funny dotted argument list. * eval.c (eval_defr_warn): Throw new style deferrable warning. (me_op, no_warn_expand): Catch defr-warning rather than warning. Use uw_muffle_warning to suppress it. (gather_free_refs): Parse new representation of deferrable warning. (expand_with_free_refs): Catch defr-warning rather than warning. * lib.c (defr_warning_s): New symbol variable defined. (obj_init): Initialize defr_warning_s. * lib.h (defr_warning_s): Declared. * share/txr/stdlib/error.tl (compile-defr-warning): Throw new-style deferrable warning. * unwind.c (uw_muffle_deferrable_warning): Function removed. (uw_throw): Bugfix: handle warnings by checking by subtype rather than exactly for the warning type. Distinguish deferrable warnings by subtype rather than argument list shape. (uw_defer_warning): Take the new style args and reconstruct the (msg . tag) representation for a deferred warning, so the other functions don't have to change. (uw_late_init): Register defr-warning as exception subtype of warning. * unwind.h (uw_muffle_deferrable_warning): Decl removed. * txr.1: Adjusted all documentation touching on the subject of the representation of deferrable warnings. --- share/txr/stdlib/error.tl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'share') diff --git a/share/txr/stdlib/error.tl b/share/txr/stdlib/error.tl index f437f863..f0876ef1 100644 --- a/share/txr/stdlib/error.tl +++ b/share/txr/stdlib/error.tl @@ -45,5 +45,5 @@ (let ((loc (sys:loc ctx)) (name (sys:ctx-name ctx))) (catch - (throw 'warning (fmt `@loc~s: @fmt` name . args) . tag) + (throw 'defr-warning (fmt `@loc~s: @fmt` name . args) tag) (continue ())))) -- cgit v1.2.3