diff options
-rw-r--r-- | parser.y | 14 | ||||
-rw-r--r-- | y.tab.c.shipped | 14 |
2 files changed, 18 insertions, 10 deletions
@@ -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); |