mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-20 17:53:02 +00:00
tests: check the location of the right-hand side symbols
The D skeleton was not properly supporting @1 etc. Reported by Adela Vais. https://lists.gnu.org/r/bison-patches/2020-09/msg00049.html * data/skeletons/d.m4 (b4_rhs_location): Fix it. * tests/calc.at: Check the support of @n for all the skeletons.
This commit is contained in:
@@ -345,7 +345,7 @@ m4_define([b4_lhs_location],
|
|||||||
# Expansion of @POS, where the current rule has RULE-LENGTH symbols
|
# Expansion of @POS, where the current rule has RULE-LENGTH symbols
|
||||||
# on RHS.
|
# on RHS.
|
||||||
m4_define([b4_rhs_location],
|
m4_define([b4_rhs_location],
|
||||||
[yystack.locationAt ([$1], [$2])])
|
[yystack.locationAt (b4_subtract($@))])
|
||||||
|
|
||||||
|
|
||||||
# b4_lex_param
|
# b4_lex_param
|
||||||
|
|||||||
@@ -577,7 +577,7 @@ exp:
|
|||||||
[c], [[
|
[c], [[
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
snprintf (buf, sizeof buf, "calc: error: %d != %d", $1, $3);]AT_YYERROR_ARG_LOC_IF([[
|
snprintf (buf, sizeof buf, "error: %d != %d", $1, $3);]AT_YYERROR_ARG_LOC_IF([[
|
||||||
yyerror (&@$, ]AT_PARAM_IF([result, count, nerrs, ])[buf);]], [[
|
yyerror (&@$, ]AT_PARAM_IF([result, count, nerrs, ])[buf);]], [[
|
||||||
{
|
{
|
||||||
YYLTYPE old_yylloc = yylloc;
|
YYLTYPE old_yylloc = yylloc;
|
||||||
@@ -590,17 +590,39 @@ exp:
|
|||||||
[c++], [[
|
[c++], [[
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
snprintf (buf, sizeof buf, "calc: error: %d != %d", $1, $3);
|
snprintf (buf, sizeof buf, "error: %d != %d", $1, $3);
|
||||||
]AT_GLR_IF([[yyparser.]])[error (]AT_LOCATION_IF([[@$, ]])[buf);
|
]AT_GLR_IF([[yyparser.]])[error (]AT_LOCATION_IF([[@$, ]])[buf);
|
||||||
}]],
|
}]],
|
||||||
[d], [[
|
[d], [[
|
||||||
yyerror (]AT_LOCATION_IF([[@$, ]])[format ("calc: error: %d != %d", $1, $3));]])[
|
yyerror (]AT_LOCATION_IF([[@$, ]])[format ("error: %d != %d", $1, $3));]])[
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
}
|
}
|
||||||
| exp '+' exp { $$ = $1 + $3; }
|
| exp '+' exp { $$ = $1 + $3; }
|
||||||
| exp '-' exp { $$ = $1 - $3; }
|
| exp '-' exp { $$ = $1 - $3; }
|
||||||
| exp '*' exp { $$ = $1 * $3; }
|
| exp '*' exp { $$ = $1 * $3; }
|
||||||
| exp '/' exp { $$ = $1 / $3; }
|
| exp '/' exp
|
||||||
|
{
|
||||||
|
if ($3 == 0)]AT_LANG_CASE(
|
||||||
|
[c], [[
|
||||||
|
{]AT_YYERROR_ARG_LOC_IF([[
|
||||||
|
yyerror (&@3, ]AT_PARAM_IF([result, count, nerrs, ])["error: null divisor");]], [[
|
||||||
|
{
|
||||||
|
YYLTYPE old_yylloc = yylloc;
|
||||||
|
yylloc = @3;
|
||||||
|
yyerror (]AT_PARAM_IF([result, count, nerrs, ])["error: null divisor");
|
||||||
|
yylloc = old_yylloc;
|
||||||
|
}
|
||||||
|
]])[
|
||||||
|
}]],
|
||||||
|
[c++], [[
|
||||||
|
{
|
||||||
|
]AT_GLR_IF([[yyparser.]])[error (]AT_LOCATION_IF([[@3, ]])["error: null divisor");
|
||||||
|
}]],
|
||||||
|
[d], [[
|
||||||
|
yyerror (]AT_LOCATION_IF([[@3, ]])["error: null divisor");]])[
|
||||||
|
else
|
||||||
|
$$ = $1 / $3;
|
||||||
|
}
|
||||||
| '-' exp %prec NEG { $$ = -$2; }
|
| '-' exp %prec NEG { $$ = -$2; }
|
||||||
| exp '^' exp { $$ = power ($1, $3); }
|
| exp '^' exp { $$ = power ($1, $3); }
|
||||||
| '(' exp ')' { $$ = $2; }
|
| '(' exp ')' { $$ = $2; }
|
||||||
@@ -728,12 +750,18 @@ exp:
|
|||||||
| exp '=' exp
|
| exp '=' exp
|
||||||
{
|
{
|
||||||
if ($1.intValue () != $3.intValue ())
|
if ($1.intValue () != $3.intValue ())
|
||||||
yyerror (]AT_LOCATION_IF([[@$, ]])["calc: error: " + $1 + " != " + $3);
|
yyerror (]AT_LOCATION_IF([[@$, ]])["error: " + $1 + " != " + $3);
|
||||||
}
|
}
|
||||||
| exp '+' exp { $$ = $1 + $3; }
|
| exp '+' exp { $$ = $1 + $3; }
|
||||||
| exp '-' exp { $$ = $1 - $3; }
|
| exp '-' exp { $$ = $1 - $3; }
|
||||||
| exp '*' exp { $$ = $1 * $3; }
|
| exp '*' exp { $$ = $1 * $3; }
|
||||||
| exp '/' exp { $$ = $1 / $3; }
|
| exp '/' exp
|
||||||
|
{
|
||||||
|
if ($3.intValue () == 0)
|
||||||
|
yyerror (]AT_LOCATION_IF([[@3, ]])["error: null divisor");
|
||||||
|
else
|
||||||
|
$$ = $1 / $3;
|
||||||
|
}
|
||||||
| '-' exp %prec NEG { $$ = -$2; }
|
| '-' exp %prec NEG { $$ = -$2; }
|
||||||
| exp '^' exp { $$ = (int) Math.pow ($1, $3); }
|
| exp '^' exp { $$ = (int) Math.pow ($1, $3); }
|
||||||
| '(' exp ')' { $$ = $2; }
|
| '(' exp ')' { $$ = $2; }
|
||||||
@@ -1003,7 +1031,7 @@ _AT_CHECK_CALC_ERROR([$1], [0],
|
|||||||
]AT_JAVA_IF([1.18-1.19], [1.18])[: syntax error on token [')'] (expected: [number] ['-'] ['('] ['!'])
|
]AT_JAVA_IF([1.18-1.19], [1.18])[: syntax error on token [')'] (expected: [number] ['-'] ['('] ['!'])
|
||||||
]AT_JAVA_IF([1.23-1.24], [1.23])[: syntax error on token ['*'] (expected: [number] ['-'] ['('] ['!'])
|
]AT_JAVA_IF([1.23-1.24], [1.23])[: syntax error on token ['*'] (expected: [number] ['-'] ['('] ['!'])
|
||||||
]AT_JAVA_IF([1.41-1.42], [1.41])[: syntax error on token ['*'] (expected: [number] ['-'] ['('] ['!'])
|
]AT_JAVA_IF([1.41-1.42], [1.41])[: syntax error on token ['*'] (expected: [number] ['-'] ['('] ['!'])
|
||||||
]AT_JAVA_IF([1.1-1.47], [1.1-46])[: calc: error: 4444 != 1]])
|
]AT_JAVA_IF([1.1-1.47], [1.1-46])[: error: 4444 != 1]])
|
||||||
|
|
||||||
# The same, but this time exercising explicitly triggered syntax errors.
|
# The same, but this time exercising explicitly triggered syntax errors.
|
||||||
# POSIX says the lookahead causing the error should not be discarded.
|
# POSIX says the lookahead causing the error should not be discarded.
|
||||||
@@ -1011,14 +1039,14 @@ _AT_CHECK_CALC_ERROR([$1], [0], [(!) + (1 2) = 1],
|
|||||||
[[final: 2222 0 2]],
|
[[final: 2222 0 2]],
|
||||||
[102],
|
[102],
|
||||||
[AT_JAVA_IF([1.10-1.11], [1.10])[: syntax error on token [number] (expected: ['='] ['-'] ['+'] ['*'] ['/'] ['^'] [')'])
|
[AT_JAVA_IF([1.10-1.11], [1.10])[: syntax error on token [number] (expected: ['='] ['-'] ['+'] ['*'] ['/'] ['^'] [')'])
|
||||||
]AT_JAVA_IF([1.1-1.16], [1.1-15])[: calc: error: 2222 != 1]])
|
]AT_JAVA_IF([1.1-1.16], [1.1-15])[: error: 2222 != 1]])
|
||||||
|
|
||||||
_AT_CHECK_CALC_ERROR([$1], [0], [(- *) + (1 2) = 1],
|
_AT_CHECK_CALC_ERROR([$1], [0], [(- *) + (1 2) = 1],
|
||||||
[[final: 2222 0 3]],
|
[[final: 2222 0 3]],
|
||||||
[113],
|
[113],
|
||||||
[AT_JAVA_IF([1.4-1.5], [1.4])[: syntax error on token ['*'] (expected: [number] ['-'] ['('] ['!'])
|
[AT_JAVA_IF([1.4-1.5], [1.4])[: syntax error on token ['*'] (expected: [number] ['-'] ['('] ['!'])
|
||||||
]AT_JAVA_IF([1.12-1.13], [1.12])[: syntax error on token [number] (expected: ['='] ['-'] ['+'] ['*'] ['/'] ['^'] [')'])
|
]AT_JAVA_IF([1.12-1.13], [1.12])[: syntax error on token [number] (expected: ['='] ['-'] ['+'] ['*'] ['/'] ['^'] [')'])
|
||||||
]AT_JAVA_IF([1.1-1.18], [1.1-17])[: calc: error: 2222 != 1]])
|
]AT_JAVA_IF([1.1-1.18], [1.1-17])[: error: 2222 != 1]])
|
||||||
|
|
||||||
# Check that yyerrok works properly: second error is not reported,
|
# Check that yyerrok works properly: second error is not reported,
|
||||||
# third and fourth are. Parse status is successful.
|
# third and fourth are. Parse status is successful.
|
||||||
@@ -1056,7 +1084,10 @@ _AT_CHECK_CALC_ERROR([$1], [0], [(1 + # + 1) = 1111],
|
|||||||
[102],
|
[102],
|
||||||
[[1.6: syntax error: invalid character: '#']])
|
[[1.6: syntax error: invalid character: '#']])
|
||||||
|
|
||||||
|
_AT_CHECK_CALC_ERROR([$1], [0], [(1 + 1) / (1 - 1)],
|
||||||
|
[[final: 2 0 1]],
|
||||||
|
[102],
|
||||||
|
[AT_JAVA_IF([1.11-1.18], [1.11-17])[: error: null divisor]])
|
||||||
|
|
||||||
AT_BISON_OPTION_POPDEFS
|
AT_BISON_OPTION_POPDEFS
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user