mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
Don't put the pre-prologue in the header file. For the yacc.c code
file and the glr.c header and code files, move the pre-prologue before the token definitions. Add new %before-definitions and %after-definitions to declare code that will go in both the header file and code file. Discussed at <http://lists.gnu.org/archive/html/bison-patches/2005-12/msg00000.html>, <http://lists.gnu.org/archive/html/bison-patches/2006-01/msg00016.html>, and <http://lists.gnu.org/archive/html/bison-patches/2006-06/msg00055.html>. * NEWS (2.3+): Describe these changes. * data/glr.c (b4_pre_prologue): Move from within to before... (b4_shared_declarations): ... this. Add new b4_before_definitions before b4_token_enums. Add new b4_after_definitions at the end. * data/glr.cc (b4_pre_prologue): Replace with... (b4_before_definitions): ... this in the header file. (b4_after_definitions): New near the end of the header file. * data/lalr1.cc (b4_pre_prologue): Move from the header file to the code file right before including the header file. (b4_before_definitions): New in the previous position of b4_pre_prologue in the header file. (b4_after_definitions): New near the end of the header file. * data/yacc.c: Clean up some m4 quoting especially in the header file. (b4_token_enums_defines): In the code file, move to right before YYSTYPE for consistency with the header file. (b4_before_definitions): New right before b4_token_enums_defines in both the header and code file. (b4_after_definitions): New right after YYLTYPE and yylloc in both the header and code file. * doc/bison.texinfo (Prologue): Show use of %before-definitions instead of prologues for %union dependencies. (Bison Declaration Summary): In %defines description, mention the effect of %before-definitions and %after-definitions on the header file. (Calc++ Parser): Forward declare driver in a %before-definitions rather than in the pre-prologue so that make check succeeds. (Bison Symbols): Add entries for %before-definitions and %after-definitions. * src/parse-gram.y (PERCENT_BEFORE_DEFINITIONS): New token for %before-definitions. (PERCENT_AFTER_DEFINITIONS): New token for %after-definitions. (declaration): Parse those declarations and append to b4_before_definitions and b4_after_definitions, respectively. * src/reader.c (before_definitions, after_definitions): New bools to track whether those declarations have been seen. (prologue_augment): Add to the post-prologue if %union, %before-definitions, or %after-definitions has been seen. * src/reader.h (before_definitions, after_definitions): New extern's. * src/scan-gram.l: Scan the new declarations. * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Place the second prologue block in a %before-definitions or a %after-definitions based on whether the %union is declared. * tests/regression.at (Early token definitions with --yacc, Early token definitions without --yacc): Move tests for token definitions into the post-prologue since token names are no longer defined in the pre-prologue.
This commit is contained in:
45
data/yacc.c
45
data/yacc.c
@@ -160,8 +160,6 @@ m4_if(b4_prefix, [yy], [],
|
||||
#define yynerrs b4_prefix[]nerrs
|
||||
b4_locations_if([#define yylloc b4_prefix[]lloc])])[
|
||||
|
||||
]b4_token_enums_defines(b4_tokens)[
|
||||
|
||||
/* Copy the first part of user declarations. */
|
||||
]b4_pre_prologue[
|
||||
|
||||
@@ -183,9 +181,15 @@ b4_locations_if([#define yylloc b4_prefix[]lloc])])[
|
||||
# define YYTOKEN_TABLE ]b4_token_table[
|
||||
#endif
|
||||
|
||||
]m4_ifdef([b4_before_definitions],
|
||||
[[/* Copy the %before-definitions blocks. */
|
||||
]b4_before_definitions])[]dnl
|
||||
|
||||
b4_token_enums_defines(b4_tokens)[
|
||||
|
||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||
]m4_ifdef([b4_stype],
|
||||
[typedef union b4_union_name
|
||||
[[typedef union ]b4_union_name
|
||||
b4_stype
|
||||
/* Line __line__ of yacc.c. */
|
||||
b4_syncline([@oline@], [@ofile@])
|
||||
@@ -207,14 +211,17 @@ typedef struct YYLTYPE
|
||||
# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
|
||||
# define YYLTYPE_IS_DECLARED 1
|
||||
# define YYLTYPE_IS_TRIVIAL 1
|
||||
#endif
|
||||
])[
|
||||
#endif])
|
||||
|
||||
/* Copy the second part of user declarations. */
|
||||
m4_ifdef([b4_after_definitions],
|
||||
[[/* Copy the %after-definitions blocks. */
|
||||
]b4_after_definitions])[]dnl
|
||||
|
||||
[/* Copy the second part of user declarations. */
|
||||
]b4_post_prologue
|
||||
|
||||
/* Line __line__ of yacc.c. */
|
||||
b4_syncline([@oline@], [@ofile@])[
|
||||
[/* Line __line__ of yacc.c. */
|
||||
]b4_syncline([@oline@], [@ofile@])[
|
||||
|
||||
#ifdef short
|
||||
# undef short
|
||||
@@ -1491,22 +1498,26 @@ b4_defines_if(
|
||||
b4_copyright([Skeleton interface for Bison's Yacc-like parsers in C],dnl '
|
||||
[1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006])
|
||||
|
||||
m4_ifdef([b4_before_definitions],
|
||||
[[/* Copy the %before-definitions blocks. */
|
||||
]b4_before_definitions])[]dnl
|
||||
|
||||
b4_token_enums_defines(b4_tokens)
|
||||
|
||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||
m4_ifdef([b4_stype],
|
||||
[typedef union b4_union_name
|
||||
[#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||
]m4_ifdef([b4_stype],
|
||||
[[typedef union ]b4_union_name
|
||||
b4_stype
|
||||
/* Line __line__ of yacc.c. */
|
||||
b4_syncline([@oline@], [@ofile@])
|
||||
YYSTYPE;],
|
||||
[typedef int YYSTYPE;])
|
||||
[typedef int YYSTYPE;])[
|
||||
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
||||
# define YYSTYPE_IS_DECLARED 1
|
||||
# define YYSTYPE_IS_TRIVIAL 1
|
||||
#endif
|
||||
|
||||
b4_pure_if([],
|
||||
]b4_pure_if([],
|
||||
[extern YYSTYPE b4_prefix[]lval;])
|
||||
|
||||
b4_locations_if(
|
||||
@@ -1523,7 +1534,11 @@ typedef struct YYLTYPE
|
||||
# define YYLTYPE_IS_TRIVIAL 1
|
||||
#endif
|
||||
|
||||
b4_pure_if([],
|
||||
]b4_pure_if([],
|
||||
[extern YYLTYPE b4_prefix[]lloc;])
|
||||
])dnl b4_locations_if
|
||||
)dnl b4_locations_if
|
||||
|
||||
m4_ifdef([b4_after_definitions],
|
||||
[[/* Copy the %after-definitions blocks. */
|
||||
]b4_after_definitions])[]dnl
|
||||
])dnl b4_defines_if
|
||||
|
||||
Reference in New Issue
Block a user