From 35c830aa764e6e456530ed9d18ff5a686d10d96c Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 9 Oct 2015 22:10:35 -0700 Subject: Improve progn expansion. * eval.c (do_expand): Reduce (progn) to nil, and (progn single) to single. --- eval.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/eval.c b/eval.c index 23afd828..6708fd2a 100644 --- a/eval.c +++ b/eval.c @@ -3176,11 +3176,20 @@ tail: goto tail; } else if (sym == progn_s) { val args = rest(form); - val args_ex = expand_progn(args, menv); - if (args == args_ex) - return form; - return rlcp(cons(sym, args_ex), form); + if (cdr(args)) { + val args_ex = expand_progn(args, menv); + + if (args == args_ex) + return form; + + if (cdr(args_ex)) + return rlcp(cons(sym, args_ex), form); + + return car(args_ex); + } + form = first(args); + goto tail; } else if (sym == sys_lisp1_value_s) { return expand_lisp1_value(form, menv); } else { -- cgit v1.2.3