* data/c.m4 (b4_yy_symbol_print_generate):

(b4_yy_symbol_print_generate): Use 'YYSTYPE const' rather than
'const YYSTYPE', and similarly for YYLTYPE.  This fixes one
of the bugs reported today by Derek M Jones in
<http://lists.gnu.org/archive/html/bug-bison/2006-05/msg00027.html>.
* doc/bison.texinfo (Value Type): Document that YYSTYPE must be
defined to be a type name without parens or brackets.
(Location Type): Similarly for YYLTYPE.
* tests/regression.at (Trivial grammars): Put in a test for this
bug that will be caught by 'make maintainer-check' (though not,
alas, by 'make check' unless your compiler is picky).
This commit is contained in:
Paul Eggert
2006-05-21 04:48:47 +00:00
parent 95c0638353
commit 50cce58e9a
4 changed files with 25 additions and 5 deletions

View File

@@ -1,3 +1,17 @@
2006-05-20 Paul Eggert <eggert@cs.ucla.edu>
* data/c.m4 (b4_yy_symbol_print_generate):
(b4_yy_symbol_print_generate): Use 'YYSTYPE const' rather than
'const YYSTYPE', and similarly for YYLTYPE. This fixes one
of the bugs reported today by Derek M Jones in
<http://lists.gnu.org/archive/html/bug-bison/2006-05/msg00027.html>.
* doc/bison.texinfo (Value Type): Document that YYSTYPE must be
defined to be a type name without parens or brackets.
(Location Type): Similarly for YYLTYPE.
* tests/regression.at (Trivial grammars): Put in a test for this
bug that will be caught by 'make maintainer-check' (though not,
alas, by 'make check' unless your compiler is picky).
2006-05-19 Paul Eggert <eggert@cs.ucla.edu> 2006-05-19 Paul Eggert <eggert@cs.ucla.edu>
* NEWS: Version 2.2. * NEWS: Version 2.2.

View File

@@ -483,8 +483,8 @@ m4_define_default([b4_yy_symbol_print_generate],
[static void], [static void],
[[FILE *yyoutput], [yyoutput]], [[FILE *yyoutput], [yyoutput]],
[[int yytype], [yytype]], [[int yytype], [yytype]],
[[const YYSTYPE * const yyvaluep], [yyvaluep]][]dnl [[YYSTYPE const * const yyvaluep], [yyvaluep]][]dnl
b4_locations_if([, [[const YYLTYPE * const yylocationp], [yylocationp]]])[]dnl b4_locations_if([, [[YYLTYPE const * const yylocationp], [yylocationp]]])[]dnl
m4_ifset([b4_parse_param], [, b4_parse_param]))[ m4_ifset([b4_parse_param], [, b4_parse_param]))[
{ {
if (!yyvaluep) if (!yyvaluep)
@@ -515,8 +515,8 @@ b4_parse_param_use[]dnl
[static void], [static void],
[[FILE *yyoutput], [yyoutput]], [[FILE *yyoutput], [yyoutput]],
[[int yytype], [yytype]], [[int yytype], [yytype]],
[[const YYSTYPE * const yyvaluep], [yyvaluep]][]dnl [[YYSTYPE const * const yyvaluep], [yyvaluep]][]dnl
b4_locations_if([, [[const YYLTYPE * const yylocationp], [yylocationp]]])[]dnl b4_locations_if([, [[YYLTYPE const * const yylocationp], [yylocationp]]])[]dnl
m4_ifset([b4_parse_param], [, b4_parse_param]))[ m4_ifset([b4_parse_param], [, b4_parse_param]))[
{ {
if (yytype < YYNTOKENS) if (yytype < YYNTOKENS)

View File

@@ -3067,6 +3067,8 @@ specify some other type, define @code{YYSTYPE} as a macro, like this:
@end example @end example
@noindent @noindent
@code{YYSTYPE}'s replacement list should be a type name
that does not contain parentheses or square brackets.
This macro definition must go in the prologue of the grammar file This macro definition must go in the prologue of the grammar file
(@pxref{Grammar Outline, ,Outline of a Bison Grammar}). (@pxref{Grammar Outline, ,Outline of a Bison Grammar}).
@@ -3463,7 +3465,9 @@ actions to take when rules are matched.
Defining a data type for locations is much simpler than for semantic values, Defining a data type for locations is much simpler than for semantic values,
since all tokens and groupings always use the same type. since all tokens and groupings always use the same type.
The type of locations is specified by defining a macro called @code{YYLTYPE}. You can specify the type of locations by defining a macro called
@code{YYLTYPE}, just as you can specify the semantic value type by
defining @code{YYSTYPE} (@pxref{Value Type}).
When @code{YYLTYPE} is not defined, Bison uses a default structure type with When @code{YYLTYPE} is not defined, Bison uses a default structure type with
four members: four members:

View File

@@ -31,6 +31,7 @@ AT_DATA_GRAMMAR([input.y],
[[%{ [[%{
void yyerror (char const *); void yyerror (char const *);
int yylex (void); int yylex (void);
#define YYSTYPE int *
%} %}
%error-verbose %error-verbose
@@ -42,6 +43,7 @@ program: 'x';
AT_CHECK([bison -o input.c input.y]) AT_CHECK([bison -o input.c input.y])
AT_COMPILE([input.o], [-c input.c]) AT_COMPILE([input.o], [-c input.c])
AT_COMPILE([input.o], [-DYYDEBUG -c input.c])
AT_CLEANUP AT_CLEANUP