From 78f186f057733ac5c7ac2b524a31960f77935958 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Thu, 30 Jan 2014 16:54:07 -0800 Subject: * eval.c (expand_op): When the variant is do, and the symbol is an operator, then suppress the addition of the rest parameter in the dotted cons position at the end of the form, since this mechanism for applying additional arguments is only supported by function calls, not by special forms. * lib.h (and2, and3): New macros. --- eval.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 1d8c5ce4..3d4ebbfd 100644 --- a/eval.c +++ b/eval.c @@ -1656,6 +1656,8 @@ static val expand_op(val sym, val body) val max = if3(nums, maxv(car(nums), cdr(nums)), zero); val min = if3(nums, minv(car(nums), cdr(nums)), zero); 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))); if (!eql(max, length(nums)) && !zerop(min)) ssyms = supplement_op_syms(ssyms, max); @@ -1665,8 +1667,7 @@ static val expand_op(val sym, val body) { uses_or2; val dwim_body = rlcp(cons(dwim_s, - if3(or3(has_rest, - ssyms, + if3(or4(is_op, has_rest, ssyms, nullp(proper_listp(body_trans))), body_trans, append2(body_trans, rest_gensym))), -- cgit v1.2.3