mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-18 08:43:03 +00:00
yychar cannot be empty in yyerrlab.
* TODO (yychar == yyempty_): New. * data/lalr1.cc: Remove the handling of this case. This eases forthcoming changes related to yychar and yytranslate.
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
|
2008-11-11 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
|
yychar cannot be empty in yyerrlab.
|
||||||
|
* TODO (yychar == yyempty_): New.
|
||||||
|
* data/lalr1.cc: Remove the handling of this case.
|
||||||
|
This eases forthcoming changes related to yychar and yytranslate.
|
||||||
|
|
||||||
2008-11-11 Akim Demaille <demaille@gostai.com>
|
2008-11-11 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
Bench: syntactic sugar for %define/#define.
|
Bench: syntactic sugar for %define/#define.
|
||||||
|
|||||||
16
TODO
16
TODO
@@ -54,6 +54,22 @@ what it should look like. For instance what follows crashes.
|
|||||||
return yyparse ();
|
return yyparse ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
** yychar == yyempty_
|
||||||
|
The code in yyerrlab reads:
|
||||||
|
|
||||||
|
if (yychar <= YYEOF)
|
||||||
|
{
|
||||||
|
/* Return failure if at end of input. */
|
||||||
|
if (yychar == YYEOF)
|
||||||
|
YYABORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
There are only two yychar that can be <= YYEOF: YYEMPTY and YYEOF.
|
||||||
|
But I can't produce the situation where yychar is YYEMPTY here, is it
|
||||||
|
really possible? The test suite does not exercise this case.
|
||||||
|
|
||||||
|
This shows that it would be interesting to manage to install skeleton
|
||||||
|
coverage analysis to the test suite.
|
||||||
|
|
||||||
* Header guards
|
* Header guards
|
||||||
|
|
||||||
|
|||||||
@@ -1281,18 +1281,19 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
|
|||||||
if (yyerrstatus_ == 3)
|
if (yyerrstatus_ == 3)
|
||||||
{
|
{
|
||||||
/* If just tried and failed to reuse lookahead token after an
|
/* If just tried and failed to reuse lookahead token after an
|
||||||
error, discard it. */
|
error, discard it. */
|
||||||
|
|
||||||
if (yychar <= yyeof_)
|
/* Return failure if at end of input. */
|
||||||
{
|
if (yychar == yyeof_)
|
||||||
/* Return failure if at end of input. */
|
YYABORT;
|
||||||
if (yychar == yyeof_)
|
else
|
||||||
YYABORT;
|
{]b4_assert_if([
|
||||||
}
|
// Previous version of this code was ready to handle
|
||||||
else
|
// yychar == yyempty_ (actually yychar <= yyeof_). Can it
|
||||||
{
|
// really be triggered?
|
||||||
yy_destroy_ ("Error: discarding", yyla);
|
assert (yychar != yyempty_);])[
|
||||||
yychar = yyempty_;
|
yy_destroy_ ("Error: discarding", yyla);
|
||||||
|
yychar = yyempty_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user