summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-02-27 00:07:46 -0800
committerKaz Kylheku <kaz@kylheku.com>2014-02-27 00:07:46 -0800
commit056e40ff3187e6807de9420e9d8d2f687017ce0e (patch)
treed64159f551761d97305bc4b0fdb3d6ccdd1fd2d9
parent419532e133f79c256893e6a57e883ad9de7b034e (diff)
downloadtxr-056e40ff3187e6807de9420e9d8d2f687017ce0e.tar.gz
txr-056e40ff3187e6807de9420e9d8d2f687017ce0e.tar.bz2
txr-056e40ff3187e6807de9420e9d8d2f687017ce0e.zip
* eval.c (maybe_progn): New function.
(expand_macrolet, expand_symacrolet): Use maybe_progn to eliminate unnecessary progn wrapping.
-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));
}
/*