X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/e342c3beaf9d73616e8ff6fe005b97f3a72c0476..05ac60f348b722ec6157cf57c31d8165466ec3ec:/data/glr.c diff --git a/data/glr.c b/data/glr.c index 6c2f3b12..0a0638a3 100644 --- a/data/glr.c +++ b/data/glr.c @@ -103,7 +103,7 @@ m4_define([b4_lpure_formals], # -------------------- # Expansion of $$. m4_define([b4_lhs_value], -[(*yyvalp)[]m4_ifval([$1], [.$1])]) +[((*yyvalp)[]m4_ifval([$1], [.$1]))]) # b4_rhs_value(RULE-LENGTH, NUM, [TYPE]) @@ -111,7 +111,7 @@ m4_define([b4_lhs_value], # Expansion of $NUM, where the current rule has RULE-LENGTH # symbols on RHS. m4_define([b4_rhs_value], -[((yyGLRStackItem const *)yyvsp)@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3])]) +[(((yyGLRStackItem const *)yyvsp)@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3]))]) @@ -131,7 +131,7 @@ m4_define([b4_lhs_location], # Expansion of @NUM, where the current rule has RULE-LENGTH symbols # on RHS. m4_define([b4_rhs_location], -[((yyGLRStackItem const *)yyvsp)@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yyloc]) +[(((yyGLRStackItem const *)yyvsp)@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yyloc)]) # We do want M4 expansion after # for CPP macros. m4_changecom() @@ -149,8 +149,7 @@ b4_copyright([Skeleton parser for GLR parsing with Bison], [2002, 2003, 2004]) ]b4_identification m4_if(b4_prefix[], [yy], [], -[/* If NAME_PREFIX is specified substitute the variables and functions - names. */ +[/* Substitute the variable and function names. */ #define yyparse b4_prefix[]parse #define yylex b4_prefix[]lex #define yyerror b4_prefix[]error @@ -205,13 +204,12 @@ typedef struct YYLTYPE # define YYLTYPE_IS_TRIVIAL 1 #endif -/* Default (constant) values used for initialization for null +/* Default (constant) value used for initialization for null right-hand sides. Unlike the standard yacc.c template, - here we set the default values of $$ and $@@ to zeroed-out - values. Since the default value of these quantities is undefined, - this behavior is technically correct. */ + here we set the default value of $$ to a zeroed-out value. + Since the default value is undefined, this behavior is + technically correct. */ static YYSTYPE yyval_default; -static YYLTYPE yyloc_default; /* Copy the second part of user declarations. */ ]b4_post_prologue[ @@ -425,24 +423,25 @@ static const ]b4_int_type_for([b4_stos])[ yystos[] = the previous symbol: RHS[0] (always defined). */ ]b4_location_if([[ +#define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc) #ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) \ -do { \ - if (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; \ - } \ - else \ - { \ - (yyCurrent).first_line = YYRHSLOC(yyRhs, 0).last_line; \ - (yyCurrent).first_column = YYRHSLOC(yyRhs, 0).last_column; \ - (yyCurrent).last_line = YYRHSLOC(yyRhs, 0).last_line; \ - (yyCurrent).last_column = YYRHSLOC(yyRhs, 0).last_column; \ - } \ -} while(0) +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (0) /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know @@ -455,7 +454,7 @@ do { \ #endif ]],[ #ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) ((void) 0) +# define YYLLOC_DEFAULT(Current, Rhs, N) ((void) 0) #endif ])[ @@ -537,10 +536,6 @@ int yydebug; SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem) evaluated with infinite-precision integer arithmetic. */ -#if YYMAXDEPTH == 0 -# undef YYMAXDEPTH -#endif - #ifndef YYMAXDEPTH # define YYMAXDEPTH ]b4_stack_depth_max[ #endif @@ -612,8 +607,8 @@ union yyGLRStackItem { struct yyGLRStack { int yyerrflag; int yyerrState; -]b4_location_if([[ /* To compute the location of the error token, */ - YYLTYPE yyerror_range[2];]])[ +]b4_location_if([[ /* To compute the location of the error token. */ + yyGLRStackItem yyerror_range[3];]])[ ]b4_pure_if( [ int yyerrcnt; @@ -705,7 +700,9 @@ yyfill (yyGLRStackItem *yyvsp, int *yylow, int yylow1, yybool yynormal) * yyerr for YYERROR, yyabort for YYABORT. */ static YYRESULTTAG yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, - YYSTYPE* yyvalp, YYLTYPE* yylocp, yyGLRStack* yystack + YYSTYPE* yyvalp, + YYLTYPE* yylocp]b4_location_if(, [ ATTRIBUTE_UNUSED])[, + yyGLRStack* yystack ]b4_user_formals[) { yybool yynormal ATTRIBUTE_UNUSED = (yystack->yysplitPoint == NULL); @@ -735,13 +732,12 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, *yyvalp = yyval_default; else *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval; -# define YYRHSLOC(yyRhs,YYK) ((yyRhs)[YYK].yystate.yyloc) YYLLOC_DEFAULT (*yylocp, yyvsp - yyrhslen, yyrhslen); -# undef YYRHSLOC ] switch (yyn) { b4_actions + default: break; } return yyok; @@ -1703,7 +1699,9 @@ yyreportSyntaxError (yyGLRStack* yystack, value, and location of the look-ahead. */ static void yyrecoverSyntaxError (yyGLRStack* yystack, - YYSTYPE* yylvalp, YYLTYPE* yyllocp]b4_user_formals[) + YYSTYPE* yylvalp, + YYLTYPE* yyllocp]b4_location_if(, [ ATTRIBUTE_UNUSED])[ + ]b4_user_formals[) { yySymbol* const yytokenp = yystack->yytokenp; size_t yyk; @@ -1720,7 +1718,7 @@ yyrecoverSyntaxError (yyGLRStack* yystack, while (yystack->yytops.yystates[0] != NULL) { yyGLRState *yys = yystack->yytops.yystates[0]; -]b4_location_if([[ yystack->yyerror_range[0] = yys->yyloc;]])[ +]b4_location_if([[ yystack->yyerror_range[1].yystate.yyloc = yys->yyloc;]])[ yydestruct ("Error: popping", yystos[yys->yylrState], &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[); @@ -1735,8 +1733,10 @@ yyrecoverSyntaxError (yyGLRStack* yystack, /* We throw away the lookahead, but the error range of the shifted error token must take it into account. */ yyGLRState *yys = yystack->yytops.yystates[0]; - yys->yyloc.last_line = yyllocp->last_line; - yys->yyloc.last_column = yyllocp->last_column;]])[ + yyGLRStackItem yyerror_range[3]; + yyerror_range[1].yystate.yyloc = yys->yyloc; + yyerror_range[2].yystate.yyloc = *yyllocp; + YYLLOC_DEFAULT (yys->yyloc, yyerror_range, 2);]])[ yydestruct ("Error: discarding", *yytokenp, yylvalp]b4_location_if([, yyllocp])[); } @@ -1782,10 +1782,8 @@ yyrecoverSyntaxError (yyGLRStack* yystack, { /* Shift the error token having adjusted its location. */ YYLTYPE yyerrloc;]b4_location_if([[ - yystack->yyerror_range[1] = *yyllocp; -# define YYRHSLOC(yyRhs,YYK) ((yyRhs)[YYK]) - YYLLOC_DEFAULT (yyerrloc, yystack->yyerror_range - 1, 2); -# undef YYRHSLOC]])[ + yystack->yyerror_range[2].yystate.yyloc = *yyllocp; + YYLLOC_DEFAULT (yyerrloc, yystack->yyerror_range, 2);]])[ YY_SYMBOL_PRINT ("Shifting", yystos[yytable[yyj]], yylvalp, &yyerrloc); yyglrShift (yystack, 0, yytable[yyj], @@ -1794,7 +1792,7 @@ yyrecoverSyntaxError (yyGLRStack* yystack, break; } } -]b4_location_if([[ yystack->yyerror_range[0] = yys->yyloc;]])[ +]b4_location_if([[ yystack->yyerror_range[1].yystate.yyloc = yys->yyloc;]])[ yydestruct ("Error: popping", yystos[yys->yylrState], &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[); @@ -1893,7 +1891,7 @@ b4_syncline([@oline@], [@ofile@])])dnl yyrule = yydefaultAction (yystate); if (yyrule == 0) { -]b4_location_if([[ yystack.yyerror_range[0] = *yyllocp;]])[ +]b4_location_if([[ yystack.yyerror_range[1].yystate.yyloc = *yyllocp;]])[ yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[); goto yyuser_error; } @@ -1924,8 +1922,7 @@ b4_syncline([@oline@], [@ofile@])])dnl } else if (yyisErrorAction (yyaction)) { - yyGLRState *yys = yystack.yytops.yystates[0]; -]b4_location_if([[ yystack.yyerror_range[0] = *yyllocp;]])[ +]b4_location_if([[ yystack.yyerror_range[1].yystate.yyloc = *yyllocp;]])[ yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[); goto yyuser_error; } @@ -1951,7 +1948,7 @@ b4_syncline([@oline@], [@ofile@])])dnl yyFail (&yystack][]b4_lpure_args[, "syntax error"); YYCHK1 (yyresolveStack (&yystack]b4_user_args[)); YYDPRINTF ((stderr, "Returning to deterministic operation.\n")); -]b4_location_if([[ yystack.yyerror_range[0] = *yyllocp;]])[ +]b4_location_if([[ yystack.yyerror_range[1].yystate.yyloc = *yyllocp;]])[ yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[); goto yyuser_error; }