From 9e7c9e367271266aa61475d3fb6c4e6833e6ae76 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 18 Jan 2017 14:49:47 -0800 Subject: Muffle expansion warning in op macro. * eval.c (me_op): Install handler to intercept warnings and route them to uw_muffle_warning. --- eval.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 75f82584..db5ac987 100644 --- a/eval.c +++ b/eval.c @@ -3278,10 +3278,13 @@ static val supplement_op_syms(val ssyms, val max) static val me_op(val form, val menv) { cons_bind (sym, body, form); + uw_frame_t uw_handler; val new_menv = make_var_shadowing_env(menv, cons(rest_s, nil)); - val body_ex = if3(sym == op_s, + val body_ex = (uw_push_handler(&uw_handler, cons(warning_s, nil), + func_n1v(uw_muffle_warning)), + if3(sym == op_s, expand_forms_lisp1(body, new_menv), - expand(body, new_menv)); + expand(body, new_menv))); val rest_gensym = gensym(lit("rest-")); cons_bind (syms, body_trans, transform_op(body_ex, nil, rest_gensym)); val ssyms = sort(syms, func_n2(lt), car_f); @@ -3291,6 +3294,7 @@ static val me_op(val form, val menv) val has_rest = cons_find(rest_gensym, body_trans, eq_f); val is_op = and3(sym == do_s, consp(body_trans), gethash(op_table, car(body_trans))); + uw_pop_frame(&uw_handler); if (c_num(max) > 1024) eval_error(form, lit("~a: @~a calls for function with too many arguments"), -- cgit v1.2.3