summaryrefslogtreecommitdiffstats
path: root/parser.y
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-01-21 00:49:21 -0800
committerKaz Kylheku <kaz@kylheku.com>2017-01-21 00:49:21 -0800
commit9cac065f8374ed008bf8274909b3f431dd9e8da6 (patch)
treebb27c7872bc2092b642defe79f4b1901f3b3568f /parser.y
parentbe971d4b348c735523e9324240825ef87c24a2d9 (diff)
downloadtxr-9cac065f8374ed008bf8274909b3f431dd9e8da6.tar.gz
txr-9cac065f8374ed008bf8274909b3f431dd9e8da6.tar.bz2
txr-9cac065f8374ed008bf8274909b3f431dd9e8da6.zip
bugfix: expand dest arg of @(output).
* parser.y (expand_form_ver): New inline function. (output_clause): If exprs are present, expand first one.
Diffstat (limited to 'parser.y')
-rw-r--r--parser.y13
1 files changed, 12 insertions, 1 deletions
diff --git a/parser.y b/parser.y
index dfc501df..40e36f47 100644
--- a/parser.y
+++ b/parser.y
@@ -89,6 +89,13 @@ INLINE val expand_forms_ver(val forms, int ver)
return forms;
}
+INLINE val expand_form_ver(val form, int ver)
+{
+ if (!opt_compat || opt_compat >= ver)
+ return expand(form, nil);
+ return form;
+}
+
%}
%pure-parser
@@ -574,7 +581,11 @@ output_clause : OUTPUT ')' o_elems '\n'
END newl { $$ = rl(list(output_s, $4, nao), num($1)); }
| OUTPUT exprs ')' newl
out_clauses
- END newl { $$ = list(output_s, $5, $2, nao);
+ END newl { cons_bind (dest, rest, $2);
+ val dest_ex = expand_form_ver(dest, 166);
+ val args = if3(dest_ex == dest,
+ $2, cons(dest_ex, rest));
+ $$ = list(output_s, $5, args, nao);
rl($$, num($1)); }
| OUTPUT exprs ')' o_elems '\n'