summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--parser.y14
-rw-r--r--y.tab.c.shipped14
2 files changed, 18 insertions, 10 deletions
diff --git a/parser.y b/parser.y
index 409400f0..9c352bba 100644
--- a/parser.y
+++ b/parser.y
@@ -1488,13 +1488,17 @@ static val extract_vars(val output_spec)
if (consp(output_spec)) {
val sym = first(output_spec);
if (sym == var_s) {
- val name = second(output_spec);
+ val expr = second(output_spec);
val modifiers = third(output_spec);
- if (bindable(name))
- tai = list_collect(tai, name);
- else
- tai = list_collect_nconc(tai, extract_vars(name));
+ if (bindable(expr)) {
+ tai = list_collect(tai, expr);
+ } else if (opt_compat && opt_compat <= 128) {
+ tai = list_collect_nconc(tai, extract_vars(expr));
+ } else {
+ val frefs = expand_with_free_refs(expr, nil, nil);
+ tai = list_collect_nconc(tai, second(frefs));
+ }
for (; modifiers; modifiers = cdr(modifiers)) {
val mod = car(modifiers);
diff --git a/y.tab.c.shipped b/y.tab.c.shipped
index 2345cb9a..a148a9b3 100644
--- a/y.tab.c.shipped
+++ b/y.tab.c.shipped
@@ -6767,13 +6767,17 @@ static val extract_vars(val output_spec)
if (consp(output_spec)) {
val sym = first(output_spec);
if (sym == var_s) {
- val name = second(output_spec);
+ val expr = second(output_spec);
val modifiers = third(output_spec);
- if (bindable(name))
- tai = list_collect(tai, name);
- else
- tai = list_collect_nconc(tai, extract_vars(name));
+ if (bindable(expr)) {
+ tai = list_collect(tai, expr);
+ } else if (opt_compat && opt_compat <= 128) {
+ tai = list_collect_nconc(tai, extract_vars(expr));
+ } else {
+ val frefs = expand_with_free_refs(expr, nil, nil);
+ tai = list_collect_nconc(tai, second(frefs));
+ }
for (; modifiers; modifiers = cdr(modifiers)) {
val mod = car(modifiers);