mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-17 00:03:03 +00:00
Merge remote-tracking branch 'origin/maint'
* origin/maint: headers: move CPP guards into YY_*_INCLUDED to avoid collisions minor changes. Conflicts: doc/bison.texi tests/headers.at
This commit is contained in:
13
NEWS
13
NEWS
@@ -250,7 +250,7 @@ GNU Bison NEWS
|
|||||||
Incorrect definitions of YY_, issued by yacc.c when no parser header is
|
Incorrect definitions of YY_, issued by yacc.c when no parser header is
|
||||||
generated, are removed.
|
generated, are removed.
|
||||||
|
|
||||||
** Changes in the format of errors and exceptions output
|
** Changes in the format of error messages
|
||||||
|
|
||||||
This used to be the format of many error reports:
|
This used to be the format of many error reports:
|
||||||
|
|
||||||
@@ -262,6 +262,17 @@ GNU Bison NEWS
|
|||||||
foo.y:5.10-25: result type clash on merge function 'merge': <t3> != <t2>
|
foo.y:5.10-25: result type clash on merge function 'merge': <t3> != <t2>
|
||||||
foo.y:4.13-27: previous declaration
|
foo.y:4.13-27: previous declaration
|
||||||
|
|
||||||
|
** Header guards (yacc.c, glr.c, glr.cc)
|
||||||
|
|
||||||
|
In order to avoid collisions, the header guards are now
|
||||||
|
YY_<PREFIX>_<FILE>_INCLUDED, instead of merely <PREFIX>_<FILE>.
|
||||||
|
For instance the header generated from
|
||||||
|
|
||||||
|
%define api.prefix "calc"
|
||||||
|
%defines "lib/parse.h"
|
||||||
|
|
||||||
|
will use YY_CALC_LIB_PARSE_H_INCLUDED as guard.
|
||||||
|
|
||||||
* Noteworthy changes in release 2.6.2 (2012-08-03) [stable]
|
* Noteworthy changes in release 2.6.2 (2012-08-03) [stable]
|
||||||
|
|
||||||
** Bug fixes
|
** Bug fixes
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ m4_define([b4_tocpp],
|
|||||||
# ------------------
|
# ------------------
|
||||||
# A valid C macro name to use as a CPP header guard for FILE.
|
# A valid C macro name to use as a CPP header guard for FILE.
|
||||||
m4_define([b4_cpp_guard],
|
m4_define([b4_cpp_guard],
|
||||||
[b4_tocpp(m4_defn([b4_prefix])/[$1])])
|
[[YY_]b4_tocpp(m4_defn([b4_prefix])/[$1])[_INCLUDED]])
|
||||||
|
|
||||||
|
|
||||||
# b4_cpp_guard_open(FILE)
|
# b4_cpp_guard_open(FILE)
|
||||||
|
|||||||
@@ -5204,6 +5204,23 @@ Values, ,Semantic Values of Tokens}.
|
|||||||
If you have declared @code{%code requires} or @code{%code provides}, the output
|
If you have declared @code{%code requires} or @code{%code provides}, the output
|
||||||
header also contains their code.
|
header also contains their code.
|
||||||
@xref{%code Summary}.
|
@xref{%code Summary}.
|
||||||
|
|
||||||
|
@cindex Header guard
|
||||||
|
The generated header is protected against multiple inclusions with a C
|
||||||
|
preprocessor guard: @samp{YY_@var{PREFIX}_@var{FILE}_INCLUDED}, where
|
||||||
|
@var{PREFIX} and @var{FILE} are the prefix (@pxref{Multiple Parsers,
|
||||||
|
,Multiple Parsers in the Same Program}) and generated file name turned
|
||||||
|
uppercase, with each series of non alphanumerical characters converted to a
|
||||||
|
single underscore.
|
||||||
|
|
||||||
|
For instance with @samp{%define api.prefix "calc"} and @samp{%defines
|
||||||
|
"lib/parse.h"}, the header will be guarded as follows.
|
||||||
|
@example
|
||||||
|
#ifndef YY_CALC_LIB_PARSE_H_INCLUDED
|
||||||
|
# define YY_CALC_LIB_PARSE_H_INCLUDED
|
||||||
|
...
|
||||||
|
#endif /* ! YY_CALC_LIB_PARSE_H_INCLUDED */
|
||||||
|
@end example
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Directive} %defines @var{defines-file}
|
@deffn {Directive} %defines @var{defines-file}
|
||||||
@@ -8824,8 +8841,8 @@ Prologue}).
|
|||||||
If the @code{%define} variable @code{api.prefix} is used (@pxref{Multiple
|
If the @code{%define} variable @code{api.prefix} is used (@pxref{Multiple
|
||||||
Parsers, ,Multiple Parsers in the Same Program}), for instance @samp{%define
|
Parsers, ,Multiple Parsers in the Same Program}), for instance @samp{%define
|
||||||
api.prefix x}, then if @code{CDEBUG} is defined, its value controls the
|
api.prefix x}, then if @code{CDEBUG} is defined, its value controls the
|
||||||
tracing feature (enabled iff nonzero); otherwise tracing is enabled iff
|
tracing feature (enabled if and only if nonzero); otherwise tracing is
|
||||||
@code{YYDEBUG} is nonzero.
|
enabled if and only if @code{YYDEBUG} is nonzero.
|
||||||
|
|
||||||
@item the option @option{-t} (POSIX Yacc compliant)
|
@item the option @option{-t} (POSIX Yacc compliant)
|
||||||
@itemx the option @option{--debug} (Bison extension)
|
@itemx the option @option{--debug} (Bison extension)
|
||||||
@@ -12449,10 +12466,11 @@ London, Department of Computer Science, TR-00-12 (December 2000).
|
|||||||
@c LocalWords: toString deftypeivar deftypeivarx deftypeop YYParser strictfp
|
@c LocalWords: toString deftypeivar deftypeivarx deftypeop YYParser strictfp
|
||||||
@c LocalWords: superclasses boolean getErrorVerbose setErrorVerbose deftypecv
|
@c LocalWords: superclasses boolean getErrorVerbose setErrorVerbose deftypecv
|
||||||
@c LocalWords: getDebugStream setDebugStream getDebugLevel setDebugLevel url
|
@c LocalWords: getDebugStream setDebugStream getDebugLevel setDebugLevel url
|
||||||
@c LocalWords: bisonVersion deftypecvx bisonSkeleton getStartPos getEndPos
|
@c LocalWords: bisonVersion deftypecvx bisonSkeleton getStartPos getEndPos uint
|
||||||
@c LocalWords: getLVal defvar deftypefn deftypefnx gotos msgfmt Corbett LALR's
|
@c LocalWords: getLVal defvar deftypefn deftypefnx gotos msgfmt Corbett LALR's
|
||||||
@c LocalWords: subdirectory Solaris nonassociativity perror schemas Malloy
|
@c LocalWords: subdirectory Solaris nonassociativity perror schemas Malloy ints
|
||||||
@c LocalWords: Scannerless ispell american
|
@c LocalWords: Scannerless ispell american ChangeLog smallexample CSTYPE CLTYPE
|
||||||
|
@c LocalWords: clval CDEBUG cdebug deftypeopx yyterminate
|
||||||
|
|
||||||
@c Local Variables:
|
@c Local Variables:
|
||||||
@c ispell-dictionary: "american"
|
@c ispell-dictionary: "american"
|
||||||
|
|||||||
@@ -126,8 +126,8 @@ AT_SETUP([Several parsers])
|
|||||||
|
|
||||||
# AT_TEST([PREFIX], [DIRECTIVES])
|
# AT_TEST([PREFIX], [DIRECTIVES])
|
||||||
# -------------------------------
|
# -------------------------------
|
||||||
# Generate and compile to *.o. Make sure there is no YY* nor yy* in
|
# Generate and compile to *.o. Make sure there is no (allowed) YY*
|
||||||
# the header (but YYDEBUG).
|
# nor yy* identifiers in the header.
|
||||||
m4_pushdef([AT_TEST],
|
m4_pushdef([AT_TEST],
|
||||||
[AT_BISON_OPTION_PUSHDEFS([%define api.prefix "$1_" $2])
|
[AT_BISON_OPTION_PUSHDEFS([%define api.prefix "$1_" $2])
|
||||||
AT_DATA_GRAMMAR([$1.AT_SKEL_CC_IF([yy], [y])],
|
AT_DATA_GRAMMAR([$1.AT_SKEL_CC_IF([yy], [y])],
|
||||||
@@ -161,21 +161,24 @@ exp:
|
|||||||
]])
|
]])
|
||||||
|
|
||||||
AT_BISON_CHECK([-d -o AT_SKEL_CC_IF([$1.cc $1.yy], [$1.c $1.y])])
|
AT_BISON_CHECK([-d -o AT_SKEL_CC_IF([$1.cc $1.yy], [$1.c $1.y])])
|
||||||
|
|
||||||
|
# Check there is no 'yy' left.
|
||||||
# C++ output relies on namespaces and still uses yy a lot.
|
# C++ output relies on namespaces and still uses yy a lot.
|
||||||
AT_SKEL_CC_IF([],
|
AT_SKEL_CC_IF([],
|
||||||
[AT_CHECK([$EGREP yy $1.h], [1])])
|
[AT_CHECK([$EGREP yy $1.h], [1])])
|
||||||
|
|
||||||
# Ignore comments. Ignore YYPUSH_MORE(_DEFINED)? (whose definition
|
# Check there is not 'YY' left.
|
||||||
# is constant).
|
# Ignore comments, YYPUSH_MORE(_DEFINED)? (constant definition),
|
||||||
|
# YY_\w+_INCLUDED (header guards).
|
||||||
#
|
#
|
||||||
# YYDEBUG (not renamed) can be read, but not changed.
|
# YYDEBUG (not renamed) can be read, but not changed.
|
||||||
AT_CHECK([[$PERL -0777 -e 's{/\*.*?\*/}{}sg;s,//.*,,;' \
|
AT_CHECK([[$PERL -0777 -e 's{/\*.*?\*/}{}sg;s,//.*,,;' \
|
||||||
]$1.AT_SKEL_CC_IF([hh], [h])[ |
|
]$1.AT_SKEL_CC_IF([hh], [h])[ |
|
||||||
grep 'YY' |
|
grep 'YY' |
|
||||||
$EGREP -wv 'YYPUSH_MORE(_DEFINED)?|(defined|if) YYDEBUG']],
|
$EGREP -wv 'YY(PUSH_MORE(_DEFINED)?|_[0-9A-Z_]+_INCLUDED)|(defined|if) YYDEBUG']],
|
||||||
[1])
|
[1])
|
||||||
AT_LANG_COMPILE([$1.o])
|
|
||||||
|
|
||||||
|
AT_LANG_COMPILE([$1.o])
|
||||||
AT_CHECK([[echo "$1" >>expout]])
|
AT_CHECK([[echo "$1" >>expout]])
|
||||||
|
|
||||||
AT_BISON_OPTION_POPDEFS
|
AT_BISON_OPTION_POPDEFS
|
||||||
|
|||||||
Reference in New Issue
Block a user