From 91a41bd5ac1dc7fe5e7d316924ff3d4ba8736644 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Mon, 28 Nov 2016 22:34:39 -0800 Subject: bugfix: awk macro spews warnings. Rather than fix this in the awk macro, let's just have sys:expand block warnings. * eval.c (warning_continue, no_warn_expand): New static function. (eval_init): Change registration of sys:expand to point to no_warn_expand. * share/txr/stdlib/place.tl (call-update-expander, call-clobber-expander, call-delete-expander, sys:placelet-1): Remove ignwarn wrapping from sys:expand calls. --- eval.c | 17 ++++++++++++++++- share/txr/stdlib/place.tl | 13 +++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/eval.c b/eval.c index 8b56cbda..d1396f4c 100644 --- a/eval.c +++ b/eval.c @@ -3929,6 +3929,21 @@ val expand(val form, val menv) return ret; } +static val warning_continue(val exc, val arg) +{ + uw_throw(continue_s, nil); +} + +static val no_warn_expand(val form, val menv) +{ + val ret; + uw_frame_t uw_handler; + uw_push_handler(&uw_handler, cons(warning_s, nil), func_n2(warning_continue)); + ret = expand(form, menv); + uw_pop_frame(&uw_handler); + return ret; +} + val macro_form_p(val form, val menv) { menv = default_bool_arg(menv); @@ -5315,7 +5330,7 @@ void eval_init(void) reg_fun(intern(lit("load"), user_package), func_n1(load)); reg_var(load_path_s, nil); reg_symacro(intern(lit("self-load-path"), user_package), load_path_s); - reg_fun(intern(lit("expand"), system_package), func_n2o(expand, 1)); + reg_fun(intern(lit("expand"), system_package), func_n2o(no_warn_expand, 1)); reg_fun(intern(lit("macro-form-p"), user_package), func_n2o(macro_form_p, 1)); reg_fun(intern(lit("macroexpand-1"), user_package), func_n2o(macroexpand_1, 1)); diff --git a/share/txr/stdlib/place.tl b/share/txr/stdlib/place.tl index 76ca95e2..7bd9acf5 100644 --- a/share/txr/stdlib/place.tl +++ b/share/txr/stdlib/place.tl @@ -183,7 +183,7 @@ (expander (get-update-expander place)) (sys:*pl-env* env) (expansion [expander getter setter place body]) - (expansion-ex (ignwarn (sys:expand expansion env)))) + (expansion-ex (sys:expand expansion env))) (sys:cp-origin expansion-ex place))) (defun call-clobber-expander (ssetter unex-place env body) @@ -191,7 +191,7 @@ (expander (get-clobber-expander place)) (sys:*pl-env* env) (expansion [expander ssetter place body]) - (expansion-ex (ignwarn (sys:expand expansion env)))) + (expansion-ex (sys:expand expansion env))) (sys:cp-origin expansion-ex place))) (defun call-delete-expander (deleter unex-place env body) @@ -199,7 +199,7 @@ (expander (get-delete-expander place)) (sys:*pl-env* env) (expansion [expander deleter place body]) - (expansion-ex (ignwarn (sys:expand expansion env)))) + (expansion-ex (sys:expand expansion env))) (sys:cp-origin expansion-ex place)))) (defmacro with-update-expander ((getter setter) unex-place env body) @@ -885,11 +885,8 @@ ,tmp-body))) (call-update-expander pl-getter pl-setter place env ^(macrolet ((,tmp-place () ^(,',pl-getter))) - ,(ignwarn - (sys:expand - ^(symacrolet ((,sym (,tmp-place))) - ,*body) - env))))) + ,(sys:expand ^(symacrolet ((,sym (,tmp-place))) + ,*body) env)))) (remhash *place-update-expander* tmp-place)))) (defmacro placelet* (sym-place-pairs . body) -- cgit v1.2.3