* data/bison.simple (m4_location_if): New.

Use it instead of #ifdef YYLSP_NEEDED.
This commit is contained in:
Akim Demaille
2002-06-19 09:07:36 +00:00
parent 02097d3eab
commit 58612f1de0
2 changed files with 65 additions and 94 deletions

View File

@@ -33,6 +33,20 @@ m4_define([b4_rhs_value],
[yyvsp@<:@m4_eval([$2 - $1])@:>@m4_ifval([$3], [.$3])])
## ----------- ##
## Locations. ##
## ----------- ##
# b4_location_if(IF-TRUE, IF-FALSE)
# ---------------------------------
# Expand IF-TRUE, if locations are used, IF-FALSE otherwise.
m4_define([b4_location_if],
[m4_if(b4_locations_flag, [1],
[$1],
[$2])])
# b4_lhs_location()
# -----------------
# Expansion of @$.
@@ -48,6 +62,11 @@ m4_define([b4_rhs_location],
[yylsp@<:@m4_eval([$2 - $1])@:>@])
## ------------------- ##
## Output file names. ##
## ------------------- ##
m4_define_default([b4_input_suffix], [.y])
m4_define_default([b4_output_parser_suffix],
@@ -171,10 +190,7 @@ m4_if(b4_prefix[], [yy], [],
#define yychar b4_prefix[]char
#define yydebug b4_prefix[]debug
#define yynerrs b4_prefix[]nerrs
#if YYLSP_NEEDED
# define yylloc b4_prefix[]lloc
#endif
])
b4_location_if([#define yylloc b4_prefix[]lloc])])
/* Copy the first part of user declarations. */
b4_pre_prologue
@@ -264,9 +280,8 @@ union yyalloc
{
short yyss;
YYSTYPE yyvs;
# if YYLSP_NEEDED
YYLTYPE yyls;
# endif
b4_location_if([ YYLTYPE yyls;
])dnl
};
/* The size of the maximum gap between one aligned stack and the next. */
@@ -274,15 +289,13 @@ union yyalloc
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# if YYLSP_NEEDED
# define YYSTACK_BYTES(N) \
b4_location_if(
[# define YYSTACK_BYTES(N) \
((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
+ 2 * YYSTACK_GAP_MAX)
# else
# define YYSTACK_BYTES(N) \
+ 2 * YYSTACK_GAP_MAX)],
[# define YYSTACK_BYTES(N) \
((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAX)
# endif
+ YYSTACK_GAP_MAX)])
/* Copy COUNT objects from FROM to TO. The source and destination do
not overlap. */
@@ -510,21 +523,13 @@ while (0)
/* YYLEX -- calling `yylex' with the right arguments. */
#if YYPURE
# if YYLSP_NEEDED
# ifdef YYLEX_PARAM
# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
# else
# define YYLEX yylex (&yylval, &yylloc)
# endif
# else /* !YYLSP_NEEDED */
# ifdef YYLEX_PARAM
# define YYLEX yylex (&yylval, YYLEX_PARAM)
# else
# define YYLEX yylex (&yylval)
# endif
# endif /* !YYLSP_NEEDED */
# ifdef YYLEX_PARAM
# define YYLEX yylex (&yylval, b4_location_if([&yylloc, ])YYLEX_PARAM)
# else
# define YYLEX yylex (&yylval, b4_location_if([&yylloc, ]))
# endif
#else /* !YYPURE */
# define YYLEX yylex ()
# define YYLEX yylex ()
#endif /* !YYPURE */
/* Enable debugging if requested. */
@@ -656,7 +661,7 @@ static void yydestructor (int symbol_type, YYSTYPE symbol_value);
/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
variables are global, or local to YYPARSE. */
#define YY_DECL_NON_LSP_VARIABLES \
#define YY_DECL_VARIABLES \
/* The lookahead symbol. */ \
int yychar; \
\
@@ -664,18 +669,10 @@ int yychar; \
YYSTYPE yylval; \
\
/* Number of parse errors so far. */ \
int yynerrs;
int yynerrs;b4_location_if([ \
/* Location data for the lookahead symbol. */ \
YYLTYPE yylloc;])
#if YYLSP_NEEDED
# define YY_DECL_VARIABLES \
YY_DECL_NON_LSP_VARIABLES \
\
/* Location data for the lookahead symbol. */ \
YYLTYPE yylloc;
#else
# define YY_DECL_VARIABLES \
YY_DECL_NON_LSP_VARIABLES
#endif
/* If nonreentrant, generate the variables here. */
@@ -718,27 +715,20 @@ yyparse (YYPARSE_PARAM_ARG)
YYSTYPE *yyvs = yyvsa;
register YYSTYPE *yyvsp;
#if YYLSP_NEEDED
/* The location stack. */
]b4_location_if(
[[ /* The location stack. */
YYLTYPE yylsa[YYINITDEPTH];
YYLTYPE *yyls = yylsa;
YYLTYPE *yylsp;
#endif
YYLTYPE *yylsp;]])[
#if YYLSP_NEEDED
# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
#else
# define YYPOPSTACK (yyvsp--, yyssp--)
#endif
#define YYPOPSTACK (yyvsp--, yyssp--]b4_location_if([, yylsp--])[)
YYSIZE_T yystacksize = YYINITDEPTH;
/* The variables used to return semantic value and location from the
action routines. */
YYSTYPE yyval;
#if YYLSP_NEEDED
YYLTYPE yyloc;
#endif
]b4_location_if([ YYLTYPE yyloc;])[
/* When reducing, the number of symbols on the RHS of the reduced
rule. */
@@ -758,9 +748,7 @@ yyparse (YYPARSE_PARAM_ARG)
yyssp = yyss;
yyvsp = yyvs;
#if YYLSP_NEEDED
yylsp = yyls;
#endif
]b4_location_if([ yylsp = yyls;])[
goto yysetstate;
/*------------------------------------------------------------.
@@ -787,25 +775,18 @@ yyparse (YYPARSE_PARAM_ARG)
memory. */
YYSTYPE *yyvs1 = yyvs;
short *yyss1 = yyss;
]b4_location_if([ YYLTYPE *yyls1 = yyls;])[
/* Each stack pointer address is followed by the size of the
data in use in that stack, in bytes. */
# if YYLSP_NEEDED
YYLTYPE *yyls1 = yyls;
/* This used to be a conditional around just the two extra args,
but that might be undefined if yyoverflow is a macro. */
data in use in that stack, in bytes. This used to be a
conditional around just the two extra args, but that might
be undefined if yyoverflow is a macro. */
yyoverflow ("parser stack overflow",
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
&yyls1, yysize * sizeof (*yylsp),
]b4_location_if([ &yyls1, yysize * sizeof (*yylsp),])[
&yystacksize);
yyls = yyls1;
# else
yyoverflow ("parser stack overflow",
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
&yystacksize);
# endif
]b4_location_if([ yyls = yyls1;])[
yyss = yyss1;
yyvs = yyvs1;
}
@@ -828,9 +809,7 @@ yyparse (YYPARSE_PARAM_ARG)
goto yyoverflowlab;
YYSTACK_RELOCATE (yyss);
YYSTACK_RELOCATE (yyvs);
# if YYLSP_NEEDED
YYSTACK_RELOCATE (yyls);
# endif
]b4_location_if([ YYSTACK_RELOCATE (yyls);])[
# undef YYSTACK_RELOCATE
if (yyss1 != yyssa)
YYSTACK_FREE (yyss1);
@@ -840,9 +819,7 @@ yyparse (YYPARSE_PARAM_ARG)
yyssp = yyss + yysize - 1;
yyvsp = yyvs + yysize - 1;
#if YYLSP_NEEDED
yylsp = yyls + yysize - 1;
#endif
]b4_location_if([ yylsp = yyls + yysize - 1;])[
YYDPRINTF ((stderr, "Stack size increased to %lu\n",
(unsigned long int) yystacksize));
@@ -946,9 +923,7 @@ yybackup:
yychar = YYEMPTY;
*++yyvsp = yylval;
#if YYLSP_NEEDED
*++yylsp = yylloc;
#endif
]b4_location_if([ *++yylsp = yylloc;])[
/* Count tokens shifted since error; after three, turn off error
status. */
@@ -986,10 +961,9 @@ yyreduce:
GCC warning that YYVAL may be used uninitialized. */
yyval = yyvsp[1-yylen];
#if YYLSP_NEEDED
/* Default location. */
YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
#endif
]b4_location_if(
[ /* Default location. */
YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);])[
#if YYDEBUG
/* We have to keep this `#if YYDEBUG', since we use variables which
@@ -1017,9 +991,7 @@ yyreduce:
[ yyvsp -= yylen;
yyssp -= yylen;
#if YYLSP_NEEDED
yylsp -= yylen;
#endif
]b4_location_if([ yylsp -= yylen;])[
#if YYDEBUG
if (yydebug)
@@ -1033,9 +1005,7 @@ yyreduce:
#endif
*++yyvsp = yyval;
#if YYLSP_NEEDED
*++yylsp = yyloc;
#endif
]b4_location_if([ *++yylsp = yyloc;])[
/* Now `shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
@@ -1207,9 +1177,7 @@ yyerrlab1:
yydestructor (yystos[yystate], *yyvsp);
yyvsp--;
yystate = *--yyssp;
#if YYLSP_NEEDED
yylsp--;
#endif
]b4_location_if([ yylsp--;])[
#if YYDEBUG
if (yydebug)
@@ -1229,9 +1197,7 @@ yyerrlab1:
YYDPRINTF ((stderr, "Shifting error token, "));
*++yyvsp = yylval;
#if YYLSP_NEEDED
*++yylsp = yylloc;
#endif
]b4_location_if([ *++yylsp = yylloc;])[
yystate = yyn;
goto yynewstate;
@@ -1321,7 +1287,7 @@ typedef union b4_stype yystype;
m4_if(b4_pure, [0],
[extern YYSTYPE b4_prefix[]lval;])
m4_if(b4_locations_flag, [0], [],
b4_location_if(
[#ifndef YYLTYPE
typedef struct yyltype
{