]> git.saurik.com Git - bison.git/blobdiff - NEWS
YYFAIL: deprecate.
[bison.git] / NEWS
diff --git a/NEWS b/NEWS
index c80c40feddcfd58b8053a8612aa6f46b500bcea9..5bd64cc1c86bd1b5e1055615a50b8f015a24130a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -71,11 +71,11 @@ Bison News
     stmt[res] : 'if' expr[cond] 'then' stmt[then] 'else' stmt[else] ';'
     { $res = mk_if_stmt($cond, $then, $else); }
 
-  Location information is also accessible using @name syntax. When
+  Location information is also accessible using @name syntax.  When
   accessing symbol names containing dots or dashes, explicit bracketing
   ($[sym.1]) must be used.
 
-  These features are experimental in this version. More user feedback
+  These features are experimental in this version.  More user feedback
   will help to stabilize them.
 
 ** IELR(1) and Canonical LR(1) Support
@@ -216,6 +216,10 @@ Bison News
 
 ** Detection of GNU M4 1.4.6 or newer during configure is improved.
 
+** Warnings from gcc's -Wundef option about undefined YYENABLE_NLS,
+   YYLTYPE_IS_TRIVIAL, and __STRICT_ANSI__ in C/C++ parsers are now
+   avoided.
+
 ** %code is now a permanent feature.
 
   A traditional Yacc prologue directive is written in the form:
@@ -239,6 +243,45 @@ Bison News
   Bison's Java feature as a whole including its current usage of %code
   is still considered experimental.
 
+** YYFAIL is deprecated and will eventually be removed.
+
+  YYFAIL has existed for many years as an undocumented feature of
+  deterministic parsers in C generated by Bison.  Previously, it was
+  documented for Bison's experimental Java parsers.  YYFAIL is no longer
+  documented for Java parsers and is formally deprecated in both cases.
+  Users are strongly encouraged to migrate to YYERROR, which is
+  specified by POSIX.
+
+  Like YYERROR, you can invoke YYFAIL from a semantic action in order to
+  induce a syntax error.  The most obvious difference from YYERROR is
+  that YYFAIL will automatically invoke yyerror to report the syntax
+  error so that you don't have to.  However, there are several other
+  subtle differences between YYERROR and YYFAIL, and YYFAIL suffers from
+  inherent flaws when %error-verbose or `#define YYERROR_VERBOSE' is
+  used.  For a more detailed discussion, see:
+
+    http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html
+
+  The upcoming Bison 2.5 will remove YYFAIL from Java parsers, but
+  deterministic parsers in C will continue to implement it.  However,
+  because YYFAIL is already flawed, it seems futile to try to make new
+  Bison features compatible with it.  Thus, during parser generation,
+  Bison 2.5 will produce a warning whenever it discovers YYFAIL in a
+  rule action.  In a later release, YYFAIL will be disabled for
+  %error-verbose and `#define YYERROR_VERBOSE'.  Eventually, YYFAIL will
+  be removed altogether.
+
+  There exists at least one case where Bison 2.5's YYFAIL warning will
+  be a false positive.  Some projects add phony uses of YYFAIL and other
+  Bison-defined macros for the sole purpose of suppressing C
+  preprocessor warnings (from GCC cpp's -Wunused-macros, for example).
+  To avoid Bison's future warning, such YYFAIL uses can be moved to the
+  epilogue (that is, after the second `%%') in the Bison input file.  In
+  this release (2.4.2), Bison already generates its own code to suppress
+  C preprocessor warnings for YYFAIL, so projects can remove their own
+  phony uses of YYFAIL if compatibility with Bison releases prior to
+  2.4.2 is not necessary.
+
 ** Internationalization.
 
   Fix a regression introduced in Bison 2.4: Under some circumstances,