summaryrefslogtreecommitdiffstats
path: root/parser.l
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-01-24 09:05:32 -0800
committerKaz Kylheku <kaz@kylheku.com>2021-01-24 09:05:32 -0800
commit8a5e2cba9577665a1da6c7d8a41072ca6c58fb9f (patch)
tree4fa1ecf7b264d054d19a0fd64c4a540a06e982e3 /parser.l
parent8f5156f2c9fdc393aba091b30da4c58815bc0eaf (diff)
downloadtxr-8a5e2cba9577665a1da6c7d8a41072ca6c58fb9f.tar.gz
txr-8a5e2cba9577665a1da6c7d8a41072ca6c58fb9f.tar.bz2
txr-8a5e2cba9577665a1da6c7d8a41072ca6c58fb9f.zip
parser: fix bad precedence of @ token.
Whereas @a..@b parses and transforms to (rcons @a @a), @(a)..@(a) goes to @(rcons a @(a)). * parser.l (grammar): Under 248 compatibility or lower, the @ character now produces the OLD_AT token. Otherwise it produces the '@' character, as before. * parser.y (OLD_AT): New token replaces the '@' at the old low precedence position. '@' is now at the highest precedence, together with OLD_DOTDOT. (We don't care about interactions between '@' and OLD_DOTDOT, because OLD_DOTDOT only exists in 185 compatibility, in which '@' is OLD_AT). (meta): The two rules have to be unfortunately duplicated for OLD_AT, since there is no BNF OR operator in Yacc. * txr.1: Compat note added. * lex.yy.c.shipped: Updated. * y.tab.c.shipped, y.tab.h.shipped: Likewise.
Diffstat (limited to 'parser.l')
-rw-r--r--parser.l2
1 files changed, 1 insertions, 1 deletions
diff --git a/parser.l b/parser.l
index 8536a01e..e310d1f7 100644
--- a/parser.l
+++ b/parser.l
@@ -607,7 +607,7 @@ UONLY {U2}{U}|{U3}{U}{U}|{U4}{U}{U}{U}
<NESTED,BRACED,QSPECIAL>@ {
yylval->lineno = yyextra->lineno;
- return yytext[0];
+ return (opt_compat && opt_compat <= 248) ? OLD_AT : '@';
}
<NESTED,QSPECIAL,BRACED>,[*] {