glr.c, yacc.c: declare yydebug in the header.

* data/c.m4 (b4_declare_yydebug): New.
* data/glr.c, data/yacc.c (b4_shared_declarations): Use it.
Remove the corresponding code from the parser body.
* NEWS: Doc this.
This commit is contained in:
Akim Demaille
2012-06-15 15:19:16 +02:00
parent c3e9f08f93
commit 56ca3d8fce
4 changed files with 33 additions and 13 deletions

18
NEWS
View File

@@ -14,7 +14,9 @@ GNU Bison NEWS
YYSTYPE, yyltype etc.), the generated parser now includes it, as was YYSTYPE, yyltype etc.), the generated parser now includes it, as was
already the case for GLR or C++ parsers. already the case for GLR or C++ parsers.
** Header guards (yacc.c, glr.c, glr.cc) ** Headers (yacc.c, glr.c, glr.cc)
*** Guards
The generated headers are now guarded, as is already the case for C++ The generated headers are now guarded, as is already the case for C++
parsers (lalr1.cc). For intance, with --defines=foo.h: parsers (lalr1.cc). For intance, with --defines=foo.h:
@@ -24,6 +26,20 @@ GNU Bison NEWS
... ...
#endif /* !YY_FOO_H */ #endif /* !YY_FOO_H */
*** New declarations
The generated header now declares yydebug and yyparse. Both honor
--name-prefix=bar_, and yield
int bar_parse (void);
rather than
#define yyparse bar_parse
int yyparse (void);
in order to facilitate the inclusion of several parser headers inside a
single compilation unit.
* Noteworthy changes in release 2.5.1 (2012-06-05) [stable] * Noteworthy changes in release 2.5.1 (2012-06-05) [stable]

View File

@@ -567,3 +567,15 @@ typedef struct YYLTYPE
# define YYLTYPE_IS_TRIVIAL 1 # define YYLTYPE_IS_TRIVIAL 1
#endif]]) #endif]])
]) ])
# b4_declare_yydebug
# ------------------
m4_define([b4_declare_yydebug],
[[/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG ]b4_debug_flag[
#endif
#if YYDEBUG
extern int ]b4_prefix[debug;
#endif][]dnl
])

View File

@@ -163,7 +163,8 @@ m4_define([b4_rhs_location],
# Declaration that might either go into the header (if --defines) # Declaration that might either go into the header (if --defines)
# or open coded in the parser body. # or open coded in the parser body.
m4_define([b4_shared_declarations], m4_define([b4_shared_declarations],
[b4_percent_code_get([[requires]])[ [b4_declare_yydebug[
]b4_percent_code_get([[requires]])[
]b4_token_enums(b4_tokens)[ ]b4_token_enums(b4_tokens)[
]b4_declare_yylstype[ ]b4_declare_yylstype[
]b4_c_ansi_function_decl(b4_prefix[parse], [int], b4_parse_param)[ ]b4_c_ansi_function_decl(b4_prefix[parse], [int], b4_parse_param)[
@@ -206,11 +207,6 @@ m4_if(b4_prefix, [yy], [],
]b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]], ]b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]],
[b4_shared_declarations])[ [b4_shared_declarations])[
/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG ]b4_debug_flag[
#endif
/* Enabling verbose error messages. */ /* Enabling verbose error messages. */
#ifdef YYERROR_VERBOSE #ifdef YYERROR_VERBOSE
# undef YYERROR_VERBOSE # undef YYERROR_VERBOSE

View File

@@ -272,7 +272,8 @@ m4_define([b4_declare_yyparse],
# Declaration that might either go into the header (if --defines) # Declaration that might either go into the header (if --defines)
# or open coded in the parser body. # or open coded in the parser body.
m4_define([b4_shared_declarations], m4_define([b4_shared_declarations],
[b4_percent_code_get([[requires]])[ [b4_declare_yydebug[
]b4_percent_code_get([[requires]])[
]b4_token_enums_defines(b4_tokens)[ ]b4_token_enums_defines(b4_tokens)[
]b4_declare_yylstype[ ]b4_declare_yylstype[
]b4_declare_yyparse[ ]b4_declare_yyparse[
@@ -323,11 +324,6 @@ m4_if(b4_prefix, [yy], [],
]b4_null_define[ ]b4_null_define[
/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG ]b4_debug_flag[
#endif
/* Enabling verbose error messages. */ /* Enabling verbose error messages. */
#ifdef YYERROR_VERBOSE #ifdef YYERROR_VERBOSE
# undef YYERROR_VERBOSE # undef YYERROR_VERBOSE