summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-11-28 22:34:39 -0800
committerKaz Kylheku <kaz@kylheku.com>2016-11-28 22:34:39 -0800
commit8417226897c20af924807ae2804d6d0749941d6f (patch)
tree407cdad7dd8778ceb75bc57202e297ad5aaf3332
parentc5a734db255b4e7102a7e321720c54762c060f3e (diff)
downloadtxr-8417226897c20af924807ae2804d6d0749941d6f.tar.gz
txr-8417226897c20af924807ae2804d6d0749941d6f.tar.bz2
txr-8417226897c20af924807ae2804d6d0749941d6f.zip
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.
-rw-r--r--eval.c17
-rw-r--r--share/txr/stdlib/place.tl13
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)