mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
glr2.cc: being pure is not an option
Remove the useless conditional b4_pure_if: the skeleton is, of course, pure (no global variables). Make glr2.cc intrinsically pure. * data/skeletons/glr2.cc (b4_pure_if): Remove definition and uses. (b4_lex): New. Stolen from lalr1.cc to avoid needing to use the one from c.m4.
This commit is contained in:
@@ -73,6 +73,18 @@ m4_defn([b4_initial_action])]))])[
|
|||||||
b4_namespace_ref[::]b4_parser_class[::symbol_kind::]b4_symbol($1, kind_base))
|
b4_namespace_ref[::]b4_parser_class[::symbol_kind::]b4_symbol($1, kind_base))
|
||||||
])
|
])
|
||||||
|
|
||||||
|
# b4_lex
|
||||||
|
# ------
|
||||||
|
# Call yylex.
|
||||||
|
m4_define([b4_lex],
|
||||||
|
[b4_token_ctor_if(
|
||||||
|
[b4_function_call([yylex],
|
||||||
|
[symbol_type], m4_ifdef([b4_lex_param], b4_lex_param))],
|
||||||
|
[b4_function_call([yylex], [int],
|
||||||
|
[b4_api_PREFIX[STYPE*], [&yylval]][]dnl
|
||||||
|
b4_locations_if([, [[location*], [&yylloc]]])dnl
|
||||||
|
m4_ifdef([b4_lex_param], [, ]b4_lex_param))])])
|
||||||
|
|
||||||
|
|
||||||
# b4_shared_declarations(hh|cc)
|
# b4_shared_declarations(hh|cc)
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
@@ -314,11 +326,9 @@ m4_define_default([b4_stack_depth_init], [200])
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## ------------------------ ##
|
## ------------ ##
|
||||||
## Pure/impure interfaces. ##
|
## Interfaces. ##
|
||||||
## ------------------------ ##
|
## ------------ ##
|
||||||
|
|
||||||
b4_define_flag_if([pure])
|
|
||||||
|
|
||||||
# b4_user_formals
|
# b4_user_formals
|
||||||
# ---------------
|
# ---------------
|
||||||
@@ -421,11 +431,7 @@ b4_copyright([Skeleton implementation for Bison GLR parsers in C],
|
|||||||
#define yyparse ]b4_prefix[parse
|
#define yyparse ]b4_prefix[parse
|
||||||
#define yylex ]b4_prefix[lex
|
#define yylex ]b4_prefix[lex
|
||||||
#define yyerror ]b4_prefix[error
|
#define yyerror ]b4_prefix[error
|
||||||
#define yydebug ]b4_prefix[debug]]b4_pure_if([], [[
|
#define yydebug ]b4_prefix[debug]])[
|
||||||
#define yylval ]b4_prefix[lval
|
|
||||||
#define yychar ]b4_prefix[char
|
|
||||||
#define yynerrs ]b4_prefix[nerrs]b4_locations_if([[
|
|
||||||
#define yylloc ]b4_prefix[lloc]])]))[
|
|
||||||
|
|
||||||
]b4_user_pre_prologue[
|
]b4_user_pre_prologue[
|
||||||
|
|
||||||
@@ -613,8 +619,6 @@ dnl We probably ought to introduce a type for confl.
|
|||||||
# define YYRHSLOC(Rhs, K) ((Rhs)[K].getState().yyloc)
|
# define YYRHSLOC(Rhs, K) ((Rhs)[K].getState().yyloc)
|
||||||
]])[
|
]])[
|
||||||
|
|
||||||
]b4_pure_if(
|
|
||||||
[
|
|
||||||
#undef yynerrs
|
#undef yynerrs
|
||||||
#define yynerrs (yystackp->yyerrcnt)
|
#define yynerrs (yystackp->yyerrcnt)
|
||||||
#undef yychar
|
#undef yychar
|
||||||
@@ -623,16 +627,12 @@ dnl We probably ought to introduce a type for confl.
|
|||||||
#define yylval (yystackp->yyval)
|
#define yylval (yystackp->yyval)
|
||||||
#undef yylloc
|
#undef yylloc
|
||||||
#define yylloc (yystackp->yyloc)
|
#define yylloc (yystackp->yyloc)
|
||||||
m4_if(b4_prefix[], [yy], [],
|
|
||||||
[#define b4_prefix[]nerrs yynerrs
|
|
||||||
#define b4_prefix[]char yychar
|
|
||||||
#define b4_prefix[]lval yylval
|
|
||||||
#define b4_prefix[]lloc yylloc])],
|
|
||||||
[YYSTYPE yylval;]b4_locations_if([[
|
|
||||||
YYLTYPE yylloc;]])[
|
|
||||||
|
|
||||||
int yynerrs;
|
]m4_if(b4_prefix[], [yy], [],
|
||||||
int yychar;])[
|
[[#define ]b4_prefix[nerrs yynerrs
|
||||||
|
#define ]b4_prefix[char yychar
|
||||||
|
#define ]b4_prefix[lval yylval
|
||||||
|
#define ]b4_prefix[lloc yylloc]])[
|
||||||
|
|
||||||
enum YYRESULTTAG { yyok, yyaccept, yyabort, yyerr };
|
enum YYRESULTTAG { yyok, yyaccept, yyabort, yyerr };
|
||||||
|
|
||||||
@@ -728,10 +728,10 @@ state_set_index create_state_set_index(std::ptrdiff_t value) {
|
|||||||
]b4_table_value_equals([[table]], [[Yytable_value]], [b4_table_ninf], [YYTABLE_NINF])[
|
]b4_table_value_equals([[table]], [[Yytable_value]], [b4_table_ninf], [YYTABLE_NINF])[
|
||||||
|
|
||||||
]m4_define([b4_yygetToken_call],
|
]m4_define([b4_yygetToken_call],
|
||||||
[[yygetToken (yychar, yyparser][]b4_pure_if([, yystackp])[]b4_user_args[)]])[
|
[[yygetToken (yychar, yyparser, yystackp]b4_user_args[)]])[
|
||||||
|
|
||||||
static inline yysymbol_kind_t
|
static inline yysymbol_kind_t
|
||||||
yygetToken (int& yycharp, ]b4_namespace_ref[::]b4_parser_class[& yyparser][]b4_pure_if([, glr_stack* yystackp])[]b4_user_formals[);
|
yygetToken (int& yycharp, ]b4_namespace_ref[::]b4_parser_class[& yyparser, glr_stack* yystackp]b4_user_formals[);
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
yyisShiftAction (int yyaction)
|
yyisShiftAction (int yyaction)
|
||||||
@@ -1876,14 +1876,11 @@ public:
|
|||||||
int yyerrState;
|
int yyerrState;
|
||||||
]b4_locations_if([[ /* To compute the location of the error token. */
|
]b4_locations_if([[ /* To compute the location of the error token. */
|
||||||
glr_stack_item yyerror_range[3];]])[
|
glr_stack_item yyerror_range[3];]])[
|
||||||
]b4_pure_if(
|
|
||||||
[
|
|
||||||
state_stack yystateStack;
|
state_stack yystateStack;
|
||||||
int yyerrcnt;
|
int yyerrcnt;
|
||||||
int yyrawchar;
|
int yyrawchar;
|
||||||
YYSTYPE yyval;]b4_locations_if([[
|
YYSTYPE yyval;]b4_locations_if([[
|
||||||
YYLTYPE yyloc;]])[
|
YYLTYPE yyloc;]])[
|
||||||
])[
|
|
||||||
YYJMP_BUF yyexception_buffer;
|
YYJMP_BUF yyexception_buffer;
|
||||||
]b4_namespace_ref[::]b4_parser_class[& yyparser;
|
]b4_namespace_ref[::]b4_parser_class[& yyparser;
|
||||||
|
|
||||||
@@ -2695,7 +2692,7 @@ public:
|
|||||||
|
|
||||||
/** If yychar is empty, fetch the next token. */
|
/** If yychar is empty, fetch the next token. */
|
||||||
static inline yysymbol_kind_t
|
static inline yysymbol_kind_t
|
||||||
yygetToken (int& yycharp, ]b4_namespace_ref[::]b4_parser_class[& yyparser][]b4_pure_if([, glr_stack* yystackp])[]b4_user_formals[)
|
yygetToken (int& yycharp, ]b4_namespace_ref[::]b4_parser_class[& yyparser, glr_stack* yystackp]b4_user_formals[)
|
||||||
{
|
{
|
||||||
yysymbol_kind_t yytoken;
|
yysymbol_kind_t yytoken;
|
||||||
]b4_parse_param_use()dnl
|
]b4_parse_param_use()dnl
|
||||||
@@ -2962,13 +2959,13 @@ b4_dollar_popdef])[]dnl
|
|||||||
on yylval in the event of memory exhaustion. */
|
on yylval in the event of memory exhaustion. */
|
||||||
|
|
||||||
for (state_set_index yys = create_state_set_index(0); yys.uget() < yystack.yystateStack.numTops(); ++yys)
|
for (state_set_index yys = create_state_set_index(0); yys.uget() < yystack.yystateStack.numTops(); ++yys)
|
||||||
YYCHK1 (yystack.yyprocessOneStack (yys, yyposn]b4_pure_if([b4_locations_if([, &yylloc])])[));
|
YYCHK1 (yystack.yyprocessOneStack (yys, yyposn]b4_locations_if([, &yylloc])[));
|
||||||
yystack.yystateStack.yytops.yyremoveDeletes ();
|
yystack.yystateStack.yytops.yyremoveDeletes ();
|
||||||
if (yystack.yystateStack.yytops.size() == 0)
|
if (yystack.yystateStack.yytops.size() == 0)
|
||||||
{
|
{
|
||||||
yystack.yystateStack.yytops.yyundeleteLastStack ();
|
yystack.yystateStack.yytops.yyundeleteLastStack ();
|
||||||
if (yystack.yystateStack.yytops.size() == 0)
|
if (yystack.yystateStack.yytops.size() == 0)
|
||||||
yystack.yyFail (]b4_pure_if([b4_locations_if([&yylloc, ])])[YY_("syntax error"));
|
yystack.yyFail (]b4_locations_if([&yylloc, ])[YY_("syntax error"));
|
||||||
YYCHK1 (yystack.yyresolveStack ());
|
YYCHK1 (yystack.yyresolveStack ());
|
||||||
YY_DEBUG_STREAM << "Returning to deterministic operation.\n";]b4_locations_if([[
|
YY_DEBUG_STREAM << "Returning to deterministic operation.\n";]b4_locations_if([[
|
||||||
yystack.yyerror_range[1].getState().yyloc = yylloc;]])[
|
yystack.yyerror_range[1].getState().yyloc = yylloc;]])[
|
||||||
@@ -3009,7 +3006,7 @@ b4_dollar_popdef])[]dnl
|
|||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
yyuser_error:
|
yyuser_error:
|
||||||
yystack.yyrecoverSyntaxError (]b4_pure_if([b4_locations_if([&yylloc])])[);
|
yystack.yyrecoverSyntaxError (]b4_locations_if([&yylloc])[);
|
||||||
yyposn = yystack.firstTopState()->yyposn;
|
yyposn = yystack.firstTopState()->yyposn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user