mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
api.prefix: also rename YYDEBUG.
The testsuite in master has shown weird errors for the "Mulitple Parsers" tests: the caller of p5.parse() received some apparently random value, while tracing p5.parse() showed that the function was consistently returning 0. It happens when mixing several parser headers, some generated without %debug, others with. In particular the C++ parser was generated with %debug, i.e., with: #ifndef YYDEBUG # define YYDEBUG 1 #endif and compiled separatedly. Yet, its header was included after the one of another parser, this time without %debug, i.e., with #ifndef YYDEBUG # define YYDEBUG 0 #endif in its header. As a result, the parser was compiled with YYDEBUG set, but its header was used without. Since the layout of the objects are then completely different, boom. Therefore, do not change the value of YYDEBUG. Rather, use it as a default value for <API.PREFIX>DEBUG. * data/c.m4 (b4_YYDEBUG_define): New. (b4_declare_yydebug): Rename as... (b4_yydebug_declare): this, for consistency. * data/glr.c, data/glr.cc, data/lalr1.cc, data/yacc.c: Use it. * NEWS: Document it.
This commit is contained in:
28
data/c.m4
28
data/c.m4
@@ -581,14 +581,32 @@ b4_pure_if([], [[extern ]b4_api_PREFIX[STYPE ]b4_prefix[lval;
|
||||
]b4_locations_if([[extern ]b4_api_PREFIX[LTYPE ]b4_prefix[lloc;]])])[]dnl
|
||||
])
|
||||
|
||||
# b4_YYDEBUG_define
|
||||
# ------------------
|
||||
m4_define([b4_YYDEBUG_define],
|
||||
[[/* Enabling traces. */
|
||||
]m4_if(b4_api_prefix, [yy],
|
||||
[[#ifndef YYDEBUG
|
||||
# define YYDEBUG ]b4_debug_flag[
|
||||
#endif]],
|
||||
[[#ifndef ]b4_api_PREFIX[DEBUG
|
||||
# if defined YYDEBUG
|
||||
# if YYDEBUG
|
||||
# define ]b4_api_PREFIX[DEBUG 1
|
||||
# else
|
||||
# define ]b4_api_PREFIX[DEBUG 0
|
||||
# endif
|
||||
# else /* ! defined YYDEBUG */
|
||||
# define ]b4_api_PREFIX[DEBUG ]b4_debug_flag[
|
||||
# endif /* ! defined ]b4_api_PREFIX[DEBUG */
|
||||
#endif /* ! defined ]b4_api_PREFIX[DEBUG */]])[]dnl
|
||||
])
|
||||
|
||||
# b4_declare_yydebug
|
||||
# ------------------
|
||||
m4_define([b4_declare_yydebug],
|
||||
[[/* Enabling traces. */
|
||||
#ifndef YYDEBUG
|
||||
# define YYDEBUG ]b4_debug_flag[
|
||||
#endif
|
||||
#if YYDEBUG
|
||||
[b4_YYDEBUG_define[
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
extern int ]b4_prefix[debug;
|
||||
#endif][]dnl
|
||||
])
|
||||
|
||||
22
data/glr.c
22
data/glr.c
@@ -349,7 +349,7 @@ static const ]b4_int_type_for([b4_translate])[ yytranslate[] =
|
||||
]b4_translate[
|
||||
};
|
||||
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
|
||||
YYRHS. */
|
||||
static const ]b4_int_type_for([b4_prhs])[ yyprhs[] =
|
||||
@@ -370,7 +370,7 @@ static const ]b4_int_type_for([b4_rline])[ yyrline[] =
|
||||
};
|
||||
#endif
|
||||
|
||||
#if YYDEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[
|
||||
#if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[
|
||||
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
|
||||
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
|
||||
static const char *const yytname[] =
|
||||
@@ -553,7 +553,7 @@ typedef enum { yyok, yyaccept, yyabort, yyerr } YYRESULTTAG;
|
||||
do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
|
||||
while (YYID (0))
|
||||
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
|
||||
# ifndef YYFPRINTF
|
||||
# define YYFPRINTF fprintf
|
||||
@@ -581,12 +581,12 @@ do { \
|
||||
multiple parsers can coexist. */
|
||||
int yydebug;
|
||||
|
||||
#else /* !YYDEBUG */
|
||||
#else /* !]b4_api_PREFIX[DEBUG */
|
||||
|
||||
# define YYDPRINTF(Args)
|
||||
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
|
||||
|
||||
#endif /* !YYDEBUG */
|
||||
#endif /* !]b4_api_PREFIX[DEBUG */
|
||||
|
||||
/* YYINITDEPTH -- initial size of the parser's stacks. */
|
||||
#ifndef YYINITDEPTH
|
||||
@@ -825,7 +825,7 @@ yyMemoryExhausted (yyGLRStack* yystackp)
|
||||
YYLONGJMP (yystackp->yyexception_buffer, 2);
|
||||
}
|
||||
|
||||
#if YYDEBUG || YYERROR_VERBOSE
|
||||
#if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE
|
||||
/** A printable representation of TOKEN. */
|
||||
static inline const char*
|
||||
yytokenName (yySymbol yytoken)
|
||||
@@ -962,7 +962,7 @@ yydestroyGLRState (char const *yymsg, yyGLRState *yys]b4_user_formals[)
|
||||
&yys->yysemantics.yysval]b4_locuser_args([&yys->yyloc])[);
|
||||
else
|
||||
{
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
if (yydebug)
|
||||
{
|
||||
if (yys->yysemantics.yyfirstVal)
|
||||
@@ -1391,7 +1391,7 @@ yydoAction (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
|
||||
}
|
||||
}
|
||||
|
||||
#if !YYDEBUG
|
||||
#if !]b4_api_PREFIX[DEBUG
|
||||
# define YY_REDUCE_PRINT(Args)
|
||||
#else
|
||||
# define YY_REDUCE_PRINT(Args) \
|
||||
@@ -1712,7 +1712,7 @@ yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystackp,
|
||||
return yyflag;
|
||||
}
|
||||
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
static void
|
||||
yyreportTree (yySemanticOption* yyx, int yyindent)
|
||||
{
|
||||
@@ -1767,7 +1767,7 @@ yyreportAmbiguity (yySemanticOption* yyx0,
|
||||
YYUSE (yyx0);
|
||||
YYUSE (yyx1);
|
||||
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
YYFPRINTF (stderr, "Ambiguity detected.\n");
|
||||
YYFPRINTF (stderr, "Option 1,\n");
|
||||
yyreportTree (yyx0, 2);
|
||||
@@ -2551,7 +2551,7 @@ m4_popdef([b4_at_dollar])])dnl
|
||||
}
|
||||
|
||||
/* DEBUGGING ONLY */
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
static void yypstack (yyGLRStack* yystackp, size_t yyk)
|
||||
__attribute__ ((__unused__));
|
||||
static void yypdumpstack (yyGLRStack* yystackp) __attribute__ ((__unused__));
|
||||
|
||||
13
data/glr.cc
13
data/glr.cc
@@ -127,7 +127,7 @@ m4_pushdef([b4_parse_param], m4_defn([b4_parse_param_orig]))dnl
|
||||
[ /// Build a parser object.
|
||||
]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)]m4_ifset([b4_parse_param], [
|
||||
:])[
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
]m4_ifset([b4_parse_param], [ ], [ :])[yydebug_ (false),
|
||||
yycdebug_ (&std::cerr)]m4_ifset([b4_parse_param], [,])[
|
||||
#endif]b4_parse_param_cons[
|
||||
@@ -144,7 +144,7 @@ m4_pushdef([b4_parse_param], m4_defn([b4_parse_param_orig]))dnl
|
||||
return ::yyparse (*this]b4_user_args[);
|
||||
}
|
||||
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
/*--------------------.
|
||||
| Print this symbol. |
|
||||
`--------------------*/
|
||||
@@ -239,10 +239,7 @@ b4_copyright([Skeleton interface for Bison GLR parsers in C++],
|
||||
]b4_percent_define_ifdef([[location_type]], [],
|
||||
[[#include "location.hh"]])[
|
||||
|
||||
/* Enabling traces. */
|
||||
#ifndef YYDEBUG
|
||||
# define YYDEBUG ]b4_debug_flag[
|
||||
#endif
|
||||
]b4_YYDEBUG_define[
|
||||
|
||||
/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
|
||||
If N is 0, then set CURRENT to the empty location which ends
|
||||
@@ -321,7 +318,7 @@ b4_user_stype
|
||||
virtual void error (const location_type& loc, const std::string& msg);
|
||||
private:
|
||||
|
||||
#if YYDEBUG
|
||||
# if ]b4_api_PREFIX[DEBUG
|
||||
public:
|
||||
/// \brief Report a symbol value on the debug stream.
|
||||
/// \param yytype The token type.
|
||||
@@ -341,7 +338,7 @@ b4_user_stype
|
||||
/* Debugging. */
|
||||
int yydebug_;
|
||||
std::ostream* yycdebug_;
|
||||
#endif
|
||||
# endif
|
||||
|
||||
]b4_parse_param_vars[
|
||||
};
|
||||
|
||||
@@ -57,10 +57,7 @@ b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++],
|
||||
|
||||
]b4_null_define[
|
||||
|
||||
/* Enabling traces. */
|
||||
#ifndef YYDEBUG
|
||||
# define YYDEBUG ]b4_debug_flag[
|
||||
#endif
|
||||
]b4_YYDEBUG_define[
|
||||
|
||||
]b4_namespace_open[
|
||||
|
||||
@@ -100,7 +97,7 @@ b4_user_stype
|
||||
/// \returns 0 iff parsing succeeded.
|
||||
virtual int parse ();
|
||||
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
/// The current debugging stream.
|
||||
std::ostream& debug_stream () const;
|
||||
/// Set the current debugging stream.
|
||||
@@ -125,7 +122,7 @@ b4_user_stype
|
||||
/// \param tok the lookahead token.
|
||||
virtual std::string yysyntax_error_ (int yystate, int tok);
|
||||
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
/// \brief Report a symbol value on the debug stream.
|
||||
/// \param yytype The token type.
|
||||
/// \param yyvaluep Its semantic value.
|
||||
@@ -203,10 +200,10 @@ b4_user_stype
|
||||
/// Convert the symbol name \a n to a form suitable for a diagnostic.
|
||||
static std::string yytnamerr_ (const char *n);])[
|
||||
|
||||
]b4_token_table_if([], [[#if YYDEBUG]])[
|
||||
]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
|
||||
/// For a symbol, its name in clear.
|
||||
static const char* const yytname_[];
|
||||
]b4_token_table_if([[#if YYDEBUG]])[
|
||||
]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
|
||||
/// A type to store symbol numbers and -1.
|
||||
typedef ]b4_int_type_for([b4_rhs])[ rhs_number_type;
|
||||
/// A `-1'-separated list of the rules' RHS.
|
||||
@@ -325,7 +322,7 @@ b4_percent_code_get[]dnl
|
||||
#define YYUSE(e) ((void) (e))
|
||||
|
||||
/* Enable debugging if requested. */
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
|
||||
/* A pseudo ostream that takes yydebug_ into account. */
|
||||
# define YYCDEBUG if (yydebug_) (*yycdebug_)
|
||||
@@ -352,14 +349,14 @@ do { \
|
||||
yystack_print_ (); \
|
||||
} while (false)
|
||||
|
||||
#else /* !YYDEBUG */
|
||||
#else /* !]b4_api_PREFIX[DEBUG */
|
||||
|
||||
# define YYCDEBUG if (false) std::cerr
|
||||
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
|
||||
# define YY_REDUCE_PRINT(Rule)
|
||||
# define YY_STACK_PRINT()
|
||||
|
||||
#endif /* !YYDEBUG */
|
||||
#endif /* !]b4_api_PREFIX[DEBUG */
|
||||
|
||||
#define yyerrok (yyerrstatus_ = 0)
|
||||
#define yyclearin (yychar = yyempty_)
|
||||
@@ -412,7 +409,7 @@ do { \
|
||||
/// Build a parser object.
|
||||
]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)]m4_ifset([b4_parse_param], [
|
||||
:])[
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
]m4_ifset([b4_parse_param], [ ], [ :])[yydebug_ (false),
|
||||
yycdebug_ (&std::cerr)]m4_ifset([b4_parse_param], [,])[
|
||||
#endif]b4_parse_param_cons[
|
||||
@@ -423,7 +420,7 @@ do { \
|
||||
{
|
||||
}
|
||||
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
/*--------------------------------.
|
||||
| Print this symbol on YYOUTPUT. |
|
||||
`--------------------------------*/
|
||||
@@ -484,7 +481,7 @@ do { \
|
||||
yylocation_stack_.pop (n);
|
||||
}
|
||||
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
std::ostream&
|
||||
]b4_parser_class_name[::debug_stream () const
|
||||
{
|
||||
@@ -1012,7 +1009,7 @@ b4_error_verbose_if([int yystate, int yytoken],
|
||||
]b4_stos[
|
||||
};
|
||||
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
/* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding
|
||||
to YYLEX-NUM. */
|
||||
const ]b4_int_type_for([b4_toknum])[
|
||||
@@ -1036,7 +1033,7 @@ b4_error_verbose_if([int yystate, int yytoken],
|
||||
]b4_r2[
|
||||
};
|
||||
|
||||
]b4_token_table_if([], [[#if YYDEBUG]])[
|
||||
]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
|
||||
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
|
||||
First, the terminals, then, starting at \a yyntokens_, nonterminals. */
|
||||
const char*
|
||||
@@ -1045,7 +1042,7 @@ b4_error_verbose_if([int yystate, int yytoken],
|
||||
]b4_tname[
|
||||
};
|
||||
|
||||
]b4_token_table_if([[#if YYDEBUG]])[
|
||||
]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
|
||||
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
|
||||
const ]b4_parser_class_name[::rhs_number_type
|
||||
]b4_parser_class_name[::yyrhs_[] =
|
||||
@@ -1095,7 +1092,7 @@ b4_error_verbose_if([int yystate, int yytoken],
|
||||
&]b4_rhs_value(yynrhs, yyi + 1)[,
|
||||
&]b4_rhs_location(yynrhs, yyi + 1)[);
|
||||
}
|
||||
#endif // YYDEBUG
|
||||
#endif // ]b4_api_PREFIX[DEBUG
|
||||
|
||||
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
|
||||
]b4_parser_class_name[::token_number_type
|
||||
|
||||
18
data/yacc.c
18
data/yacc.c
@@ -589,7 +589,7 @@ static const ]b4_int_type_for([b4_translate])[ yytranslate[] =
|
||||
]b4_translate[
|
||||
};
|
||||
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
|
||||
YYRHS. */
|
||||
static const ]b4_int_type_for([b4_prhs])[ yyprhs[] =
|
||||
@@ -610,7 +610,7 @@ static const ]b4_int_type_for([b4_rline])[ yyrline[] =
|
||||
};
|
||||
#endif
|
||||
|
||||
#if YYDEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[
|
||||
#if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[
|
||||
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
|
||||
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
|
||||
static const char *const yytname[] =
|
||||
@@ -803,7 +803,7 @@ while (YYID (0))
|
||||
#endif
|
||||
|
||||
/* Enable debugging if requested. */
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
|
||||
# ifndef YYFPRINTF
|
||||
# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
|
||||
@@ -890,12 +890,12 @@ do { \
|
||||
/* Nonzero means print parse trace. It is left uninitialized so that
|
||||
multiple parsers can coexist. */
|
||||
int yydebug;
|
||||
#else /* !YYDEBUG */
|
||||
#else /* !]b4_api_PREFIX[DEBUG */
|
||||
# define YYDPRINTF(Args)
|
||||
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
|
||||
# define YY_STACK_PRINT(Bottom, Top)
|
||||
# define YY_REDUCE_PRINT(Rule)
|
||||
#endif /* !YYDEBUG */
|
||||
#endif /* !]b4_api_PREFIX[DEBUG */
|
||||
|
||||
|
||||
/* YYINITDEPTH -- initial size of the parser's stacks. */
|
||||
@@ -926,7 +926,7 @@ int yydebug;
|
||||
required. Return 1 if memory is exhausted. */
|
||||
static int
|
||||
yy_lac_stack_realloc (YYSIZE_T *yycapacity, YYSIZE_T yyadd,
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
char const *yydebug_prefix,
|
||||
char const *yydebug_suffix,
|
||||
#endif
|
||||
@@ -1032,7 +1032,7 @@ do { \
|
||||
the parser stacks to try to find a new initial context in which the
|
||||
current lookahead is syntactically acceptable. If it fails to find
|
||||
such a context, it discards the lookahead. */
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
# define YY_LAC_DISCARD(Event) \
|
||||
do { \
|
||||
if (yy_lac_established) \
|
||||
@@ -1135,7 +1135,7 @@ yy_lac (yytype_int16 *yyesa, yytype_int16 **yyes,
|
||||
else
|
||||
{
|
||||
if (yy_lac_stack_realloc (yyes_capacity, 1,
|
||||
#if YYDEBUG
|
||||
#if ]b4_api_PREFIX[DEBUG
|
||||
" (", ")",
|
||||
#endif
|
||||
yyes, yyesa, &yyesp, yyes_prev))
|
||||
@@ -1342,7 +1342,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
|
||||
yysize = yysize1;
|
||||
}
|
||||
}]b4_lac_if([[
|
||||
# if YYDEBUG
|
||||
# if ]b4_api_PREFIX[DEBUG
|
||||
else if (yydebug)
|
||||
YYFPRINTF (stderr, "No expected tokens.\n");
|
||||
# endif]])[
|
||||
|
||||
Reference in New Issue
Block a user