summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--eval.c10
2 files changed, 14 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 07ab3da3..4a0e5677 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-02-27 Kaz Kylheku <kaz@kylheku.com>
+
+ * eval.c (maybe_progn): New function.
+ (expand_macrolet, expand_symacrolet): Use maybe_progn
+ to eliminate unnecessary progn wrapping.
+
2014-02-26 Kaz Kylheku <kaz@kylheku.com>
* eval.c (gun_s): New global variable.
diff --git a/eval.c b/eval.c
index 9f5c2d0a..a1566c4c 100644
--- a/eval.c
+++ b/eval.c
@@ -1299,6 +1299,12 @@ static val expand_macro(val form, val expander, val menv)
}
}
+static val maybe_progn(val forms)
+{
+ return if3(cdr(forms), cons(progn_s, forms), car(forms));
+}
+
+
static val expand_macrolet(val form, val menv)
{
val body = cdr(form);
@@ -1319,7 +1325,7 @@ static val expand_macrolet(val form, val menv)
env_fbind(new_env, name, cons(nil, cons(params, cons(block, nil))));
}
- return cons(progn_s, expand_forms(body, new_env));
+ return maybe_progn(expand_forms(body, new_env));
}
static val expand_symacrolet(val form, val menv)
@@ -1336,7 +1342,7 @@ static val expand_symacrolet(val form, val menv)
env_vbind(new_env, name, repl_ex);
}
- return cons(progn_s, expand_forms(body, new_env));
+ return maybe_progn(expand_forms(body, new_env));
}
/*