]> git.saurik.com Git - bison.git/commitdiff
YYFAIL: warn about uses and remove from lalr1.java.
authorJoel E. Denny <jdenny@clemson.edu>
Mon, 21 Dec 2009 19:58:48 +0000 (14:58 -0500)
committerJoel E. Denny <jdenny@clemson.edu>
Mon, 21 Dec 2009 21:40:33 +0000 (16:40 -0500)
* 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.

ChangeLog
NEWS
data/lalr1.java
src/scan-code.l

index 2c9f3bebf419702b00c873660414200af796f767..d0e6d792d9d003e6c1957b8fd3f36605084bfa3a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+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.
diff --git a/NEWS b/NEWS
index 5bd64cc1c86bd1b5e1055615a50b8f015a24130a..b704ed528bfd0095d257f065e92a54f8d50219dd 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -169,6 +169,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
index a9ae873bfb39a1588778d0d34f427e00c5da0c53..275b97f20734c137a51b5f6bee15cf70779284b0 100644 (file)
@@ -350,12 +350,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;
@@ -574,7 +571,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;
@@ -608,7 +605,7 @@ m4_popdef([b4_at_dollar])])dnl
       case YYDEFAULT:
         yyn = yydefact_[yystate];
         if (yyn == 0)
-          label = YYFAIL;
+          label = YYERRLAB;
         else
           label = YYREDUCE;
         break;
@@ -625,7 +622,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)
           {
index 56cd7825a3c5be612d1b6e489180c7d28109d304..700488e809daeca7a7e23e88c1bca7c74745f26e 100644 (file)
@@ -246,7 +246,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;
 }
 
 <SC_SYMBOL_ACTION>