* NEWS (2.5): Document.
* data/lalr1.java (parser::YYStack::YYFAIL): Rename to YYERRLAB,
and make it private. Update all uses.
* src/scan-code.l (SC_RULE_ACTION): Implement warning.
(cherry picked from commit
4395a9ff4fd518580b9abe9482783e8eba192f34)
Conflicts:
data/lalr1.java
+2009-12-21 Joel E. Denny <jdenny@clemson.edu>
+
+ YYFAIL: warn about uses and remove from lalr1.java.
+ * NEWS (2.5): Document.
+ * data/lalr1.java (parser::YYStack::YYFAIL): Rename to YYERRLAB,
+ and make it private. Update all uses.
+ * src/scan-code.l (SC_RULE_ACTION): Implement warning.
+
2009-12-21 Joel E. Denny <jdenny@clemson.edu>
YYFAIL: deprecate.
POSIX Yacc whose use is reported by -Wyacc, and rejected in Yacc
mode (--yacc).
+** YYFAIL now produces warnings and Java parsers no longer implement it.
+
+ YYFAIL has existed for many years as an undocumented feature of
+ deterministic parsers in C generated by Bison. More recently, it was
+ a documented feature of Bison's experimental Java parsers. As
+ promised in Bison 2.4.2's NEWS entry, any appearance of YYFAIL in a
+ semantic action now produces a deprecation warning, and Java parsers
+ no longer implement YYFAIL at all. For further details, including a
+ discussion of how to suppress C preprocessor warnings about YYFAIL
+ being unused, see the Bison 2.4.2 NEWS entry.
+
** Temporary hack for adding a semicolon to the user action.
Previously, Bison appended a semicolon to every user action for
* printing an error message. */
public static final int YYERROR = 2;
- /**
- * Returned by a Bison action in order to print an error message and start
- * error recovery. Formally deprecated in Bison 2.4.2's NEWS entry, where
- * a plan to phase it out is discussed. */
- public static final int YYFAIL = 3;
-
+ // Internal return codes that are not supported for user semantic
+ // actions.
+ private static final int YYERRLAB = 3;
private static final int YYNEWSTATE = 4;
private static final int YYDEFAULT = 5;
private static final int YYREDUCE = 6;
else if ((yyn = yytable_[yyn]) <= 0)
{
if (yy_table_value_is_error_ (yyn))
- label = YYFAIL;
+ label = YYERRLAB;
else
{
yyn = -yyn;
case YYDEFAULT:
yyn = yydefact_[yystate];
if (yyn == 0)
- label = YYFAIL;
+ label = YYERRLAB;
else
label = YYREDUCE;
break;
/*------------------------------------.
| yyerrlab -- here on detecting error |
`------------------------------------*/
- case YYFAIL:
+ case YYERRLAB:
/* If not already recovering from an error, report this error. */
if (yyerrstatus_ == 0)
{
{splice} STRING_GROW;
[\n\r] STRING_GROW; if (in_cpp) in_cpp = need_semicolon = false;
[ \t\f] STRING_GROW;
- . STRING_GROW; need_semicolon = true;
+
+ /* YYFAIL is undocumented and was formally deprecated in Bison
+ 2.4.2. */
+ YYFAIL {
+ STRING_GROW; need_semicolon = true;
+ warn_at (*loc, _("use of YYFAIL, which is deprecated and will be"
+ " removed"));
+ }
+
+ /* The sole purpose of this is to make sure identifiers that merely
+ contain YYFAIL don't produce the above warning. */
+ [A-Za-z_][0-9A-Za-z_]* STRING_GROW; need_semicolon = true;
+
+ . STRING_GROW; need_semicolon = true;
}
<SC_SYMBOL_ACTION>