summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--eval.c17
1 files 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 {