summaryrefslogtreecommitdiffstats
path: root/parser.y
diff options
context:
space:
mode:
Diffstat (limited to 'parser.y')
-rw-r--r--parser.y16
1 files changed, 16 insertions, 0 deletions
diff --git a/parser.y b/parser.y
index 6abd646d..071a090f 100644
--- a/parser.y
+++ b/parser.y
@@ -1206,6 +1206,22 @@ static val expand_meta(val form, val menv)
menv = default_arg(menv, make_env(nil, nil, nil));
+ if ((sym = car(form)) == quasi_s) {
+ list_collect_decl (out, ptail);
+
+ for (; consp(form); form = cdr(form)) {
+ val subform = car(form);
+ if (consp(subform) && car(subform) == expr_s)
+ ptail = list_collect(ptail, expand_meta(subform, menv));
+ else
+ ptail = list_collect(ptail, subform);
+ }
+
+ ptail = list_collect_nconc(ptail, form);
+
+ return rlcp(out, form);
+ }
+
if ((sym = car(form)) == expr_s) {
val exp_x = expand(rest(form), menv);
if (!bindable(exp_x))