mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +00:00
YYFAIL: deprecate.
* NEWS (2.4.2): Document deprecation and the phase-out plan.
* data/lalr1.java (parser::YYStack::YYFAIL): Add comment about
deprecation.
* data/yacc.c (YYFAIL): Likewise, and suppress warnings about
YYFAIL from GCC cpp's -Wunused-macros.
* doc/bison.texinfo (Java Action Features): Remove YYFAIL
documentation.
(LocalWords): Remove YYFAIL.
(cherry picked from commit 1625df5b18)
Conflicts:
src/parse-gram.c
src/parse-gram.h
This commit is contained in:
39
NEWS
39
NEWS
@@ -193,6 +193,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,
|
||||
|
||||
Reference in New Issue
Block a user