From 62efdd2a85847c8b7559d312e7cada6ca03a2779 Mon Sep 17 00:00:00 2001 From: "Joel E. Denny" Date: Mon, 21 Dec 2009 14:58:48 -0500 Subject: [PATCH] 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. (cherry picked from commit 4395a9ff4fd518580b9abe9482783e8eba192f34) Conflicts: data/lalr1.java --- ChangeLog | 8 ++++++++ NEWS | 11 +++++++++++ data/lalr1.java | 15 ++++++--------- src/scan-code.l | 15 ++++++++++++++- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index d36938c..312796a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2009-12-21 Joel E. Denny + 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 + YYFAIL: deprecate. * NEWS (2.4.2): Document deprecation and the phase-out plan. * data/lalr1.java (parser::YYStack::YYFAIL): Add comment about diff --git a/NEWS b/NEWS index 492aa87..d6eed91 100644 --- a/NEWS +++ b/NEWS @@ -119,6 +119,17 @@ Bison News 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 diff --git a/data/lalr1.java b/data/lalr1.java index 0ba0312..25bb1bd 100644 --- a/data/lalr1.java +++ b/data/lalr1.java @@ -308,12 +308,9 @@ b4_lexer_if([[ * 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; @@ -530,7 +527,7 @@ m4_popdef([b4_at_dollar])])dnl else if ((yyn = yytable_[yyn]) <= 0) { if (yy_table_value_is_error_ (yyn)) - label = YYFAIL; + label = YYERRLAB; else { yyn = -yyn; @@ -564,7 +561,7 @@ m4_popdef([b4_at_dollar])])dnl case YYDEFAULT: yyn = yydefact_[yystate]; if (yyn == 0) - label = YYFAIL; + label = YYERRLAB; else label = YYREDUCE; break; @@ -581,7 +578,7 @@ m4_popdef([b4_at_dollar])])dnl /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ - case YYFAIL: + case YYERRLAB: /* If not already recovering from an error, report this error. */ if (yyerrstatus_ == 0) { diff --git a/src/scan-code.l b/src/scan-code.l index a84b4c1..e2eb76a 100644 --- a/src/scan-code.l +++ b/src/scan-code.l @@ -245,7 +245,20 @@ ref -?[0-9]+|{id}|"["{id}"]"|"$" {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; } -- 2.7.4