#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
typedef struct YYLTYPE
{
+]b4_location_if([
int first_line;
int first_column;
int last_line;
int last_column;
+])[
} YYLTYPE;
# define YYLTYPE_IS_DECLARED 1
# define YYLTYPE_IS_TRIVIAL 1
#define YYNSTATES ]b4_states_number[
/* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */
#define YYMAXRHS ]b4_r2_max[
+/* YYMAXLEFT -- Maximum number of symbols to the left of a handle
+ accessed by $0, $-1, etc., in any rule. */
+#define YYMAXLEFT ]b4_max_left_semantic_context[
/* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */
#define YYUNDEFTOK ]b4_undef_token_number[
/* YYLLOC_DEFAULT -- Compute the default location (before the actions
are run). */
-#define YYRHSLOC(yyRhs,YYK) (yyRhs[YYK].yystate.yyloc)
+]b4_location_if([[
+#define YYRHSLOC(yyRhs,YYK) ((yyRhs)[YYK].yystate.yyloc)
#ifndef YYLLOC_DEFAULT
# define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) \
- yyCurrent.first_line = YYRHSLOC(yyRhs,1).first_line; \
- yyCurrent.first_column = YYRHSLOC(yyRhs,1).first_column; \
- yyCurrent.last_line = YYRHSLOC(yyRhs,YYN).last_line; \
- yyCurrent.last_column = YYRHSLOC(yyRhs,YYN).last_column;
+ (yyCurrent).first_line = YYRHSLOC(yyRhs,1).first_line; \
+ (yyCurrent).first_column = YYRHSLOC(yyRhs,1).first_column; \
+ (yyCurrent).last_line = YYRHSLOC(yyRhs,YYN).last_line; \
+ (yyCurrent).last_column = YYRHSLOC(yyRhs,YYN).last_column;
+#endif
+]],[
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN)
#endif
+])[
+
/* YYLEX -- calling `yylex' with the right arguments. */
#define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
#if (! defined (YYSTACKEXPANDABLE) \
&& (! defined (__cplusplus) \
- || (]b4_location_if([YYLTYPE_IS_TRIVIAL && ])[YYSTYPE_IS_TRIVIAL)))
+ || (]b4_location_if([[defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \
+ && ]])[defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
#define YYSTACKEXPANDABLE 1
#else
#define YYSTACKEXPANDABLE 0
/** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
* at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
* containing the pointer to the next state in the chain. Assumes
- * YYLOW1 < YYLOW0. For convenience, returns YYLOW1. */
-static int
-yyfill (yyGLRStackItem* yyvsp, int yylow0, int yylow1)
+ * YYLOW1 < YYLOW0. */
+static void yyfillin (yyGLRStackItem *, int, int) ATTRIBUTE_UNUSED;
+static void
+yyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1)
{
yyGLRState* s;
int i;
yyvsp[i].yystate.yyloc = s->yyloc;
s = yyvsp[i].yystate.yypred = s->yypred;
}
+}
+
+/* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
+ YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
+ For convenience, always return YYLOW1. */
+static inline int yyfill (yyGLRStackItem *, int *, int, yybool)
+ ATTRIBUTE_UNUSED;
+static inline int
+yyfill (yyGLRStackItem *yyvsp, int *yylow, int yylow1, yybool yynormal)
+{
+ if (!yynormal && yylow1 < *yylow)
+ {
+ yyfillin (yyvsp, *yylow, yylow1);
+ *yylow = yylow1;
+ }
return yylow1;
}
YYSTYPE* yyvalp, YYLTYPE* yylocp, yyGLRStack* yystack
]b4_user_formals[)
{
- int yynormal = (yystack->yysplitPoint == NULL);
+ yybool yynormal ATTRIBUTE_UNUSED = (yystack->yysplitPoint == NULL);
int yylow;
- if (yyrhslen == 0)
- {
- *yyvalp = yyval_default;
- *yylocp = yyloc_default;
- }
- else
- {
- *yyvalp = yyvsp[1-yyrhslen].yystate.yysemantics.yysval;
- *yylocp = yyvsp[1-yyrhslen].yystate.yyloc;
- }
# undef yyerrok
# define yyerrok (yystack->yyerrState = 0)
# undef YYACCEPT
# undef YYABORT
# define YYABORT return yyabort
# undef YYERROR
-# define YYERROR return yyerr
+# define YYERROR do { yystack->yyerrState = 0; return yyerr; } while (0)
# undef YYRECOVERING
# define YYRECOVERING (yystack->yyerrState != 0)
# undef yyclearin
# define yyclearin (yychar = *(yystack->yytokenp) = YYEMPTY)
# undef YYFILL
-# define YYFILL(N) \
- ((yynormal || yylow <= (N)) ? (N) : (yylow = yyfill (yyvsp, yylow, N)))
+# define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
# undef YYBACKUP
# define YYBACKUP(Token, Value) \
do { \
YYERROR; \
} while (0)
+ yylow = 1;
+ if (yyrhslen == 0)
+ {
+ *yyvalp = yyval_default;
+ *yylocp = yyloc_default;
+ }
+ else
+ {
+ *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval;
+ YYLLOC_DEFAULT (*yylocp, yyvsp - yyrhslen, yyrhslen);
+ }
+
]
- yylow = 1;
- switch (yyn)
- {
- b4_actions
- }
+ switch (yyn)
+ {
+ b4_actions
+ }
- return yyok;
+ return yyok;
# undef yyerrok
# undef YYABORT
# undef YYACCEPT
yystack->yynextFree -= yynrhs;
yystack->yyspaceLeft += yynrhs;
yystack->yytops.yystates[0] = & yystack->yynextFree[-1].yystate;
- if (yynrhs == 0)
- {
- *yyvalp = yyval_default;
- *yylocp = yyloc_default;
- }
- else
- {
- *yyvalp = rhs[1-yynrhs].yystate.yysemantics.yysval;
- *yylocp = rhs[1-yynrhs].yystate.yyloc;
- }
return yyuserAction (yyrule, yynrhs, rhs,
yyvalp, yylocp, yystack]b4_user_args[);
}
{
int yyi;
yyGLRState* yys;
- yyGLRStackItem yyrhsVals[YYMAXRHS+1];
- yys = yyrhsVals[YYMAXRHS].yystate.yypred = yystack->yytops.yystates[yyk];
+ yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
+ yys = yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred
+ = yystack->yytops.yystates[yyk];
for (yyi = 0; yyi < yynrhs; yyi += 1)
{
yys = yys->yypred;
}
yyupdateSplit (yystack, yys);
yystack->yytops.yystates[yyk] = yys;
- if (yynrhs == 0)
- {
- *yyvalp = yyval_default;
- *yylocp = yyloc_default;
- }
- else
- {
- *yyvalp = yyrhsVals[1].yystate.yysemantics.yysval;
- *yylocp = yyrhsVals[1].yystate.yyloc;
- }
- return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS - 1,
+ return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
yyvalp, yylocp, yystack]b4_user_args[);
}
}
yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystack,
YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
{
- yyGLRStackItem yyrhsVals[YYMAXRHS+1];
+ yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
int yynrhs;
yynrhs = yyrhsLength (yyopt->yyrule);
YYCHK (yyresolveStates (yyopt->yystate, yynrhs, yystack]b4_user_args[));
- yyrhsVals[YYMAXRHS].yystate.yypred = yyopt->yystate;
- return yyuserAction (yyopt->yyrule, yynrhs, yyrhsVals + YYMAXRHS - 1,
+ yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred = yyopt->yystate;
+ return yyuserAction (yyopt->yyrule, yynrhs,
+ yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
yyvalp, yylocp, yystack]b4_user_args[);
}
size_t yyk;
int yyj;
- if (yystack->yyerrState == 0)
- yystack->yyerrState = 3;
- else if (yystack->yyerrState == 3)
+ if (yystack->yyerrState == 3)
/* We just shifted the error token and (perhaps) took some
reductions. Skip tokens until we can proceed. */
while (yytrue)
{
if (*yytokenp == YYEOF)
{
- /* Now pop stack until we find a state that shifts the
- error token. */
+ /* Now pop stack until empty and fail. */
while (yystack->yytops.yystates[0] != NULL)
{
yyGLRState *yys = yystack->yytops.yystates[0];
YYDSYMPRINTF ("Next token is", *yytokenp, yylvalp, yyllocp);
yyj = yypact[yystack->yytops.yystates[0]->yylrState];
if (yyis_pact_ninf (yyj))
- /* Something's not right; we shouldn't be here. */
- yyFail (yystack][]b4_lpure_args[, NULL);
+ return;
yyj += *yytokenp;
if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != *yytokenp)
{
yycompressStack (yystack);
/* Now pop stack until we find a state that shifts the error token. */
+ yystack->yyerrState = 3;
while (yystack->yytops.yystates[0] != NULL)
{
yyGLRState *yys = yystack->yytops.yystates[0];
b4_pure_if([],
[extern YYSTYPE b4_prefix[]lval;])
-b4_location_if(
-[#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
+#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
typedef struct YYLTYPE
{
+b4_location_if([
int first_line;
int first_column;
int last_line;
int last_column;
+])
} YYLTYPE;
# define YYLTYPE_IS_DECLARED 1
# define YYLTYPE_IS_TRIVIAL 1
#endif
-m4_if(b4_pure, [0],
+b4_location_if([m4_if(b4_pure, [0],
[extern YYLTYPE b4_prefix[]lloc;])
])
])