mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-21 10:13:03 +00:00
* 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:
14
ChangeLog
14
ChangeLog
@@ -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.
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user