]> git.saurik.com Git - bison.git/blobdiff - data/glr.c
* data/lalr1.cc (parser::token_number_type, parser::rhs_number_type)
[bison.git] / data / glr.c
index 0f92dc4aa05c4493f64af8df866d043102167c6b..97c43bc795d6e75e10673ddd487a57f687027fe4 100644 (file)
@@ -103,7 +103,7 @@ m4_define([b4_lpure_formals],
 # --------------------
 # Expansion of $<TYPE>$.
 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 $<TYPE>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
@@ -430,17 +429,17 @@ static const ]b4_int_type_for([b4_stos])[ yystos[] =
     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;        \
+         (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;                                 \
+           YYRHSLOC (Rhs, 0).last_line;                                \
          (Current).first_column = (Current).last_column =              \
-           YYRHSLOC(Rhs, 0).last_column;                               \
+           YYRHSLOC (Rhs, 0).last_column;                              \
        }                                                               \
     while (0)
 
@@ -612,8 +611,8 @@ union yyGLRStackItem {
 struct yyGLRStack {
   int yyerrflag;
   int yyerrState;
-]b4_location_if([[  /* To compute the location of the error token,  */
-  yyGLRStackItem yyerror_range[2];]])[
+]b4_location_if([[  /* To compute the location of the error token.  */
+  yyGLRStackItem yyerror_range[3];]])[
 ]b4_pure_if(
 [
   int yyerrcnt;
@@ -1722,7 +1721,7 @@ yyrecoverSyntaxError (yyGLRStack* yystack,
            while (yystack->yytops.yystates[0] != NULL)
              {
                yyGLRState *yys = yystack->yytops.yystates[0];
-]b4_location_if([[             yystack->yyerror_range[0].yystate.yyloc = 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])[);
@@ -1737,8 +1736,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])[);
          }
@@ -1784,8 +1785,8 @@ yyrecoverSyntaxError (yyGLRStack* yystack,
            {
              /* Shift the error token having adjusted its location.  */
              YYLTYPE yyerrloc;]b4_location_if([[
-             yystack->yyerror_range[1].yystate.yyloc = *yyllocp;
-             YYLLOC_DEFAULT (yyerrloc, yystack->yyerror_range - 1, 2);]])[
+             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 +1795,7 @@ yyrecoverSyntaxError (yyGLRStack* yystack,
              break;
            }
        }
-]b4_location_if([[      yystack->yyerror_range[0].yystate.yyloc = 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 +1894,7 @@ b4_syncline([@oline@], [@ofile@])])dnl
              yyrule = yydefaultAction (yystate);
              if (yyrule == 0)
                {
-]b4_location_if([[               yystack.yyerror_range[0].yystate.yyloc = *yyllocp;]])[
+]b4_location_if([[               yystack.yyerror_range[1].yystate.yyloc = *yyllocp;]])[
                  yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[);
                  goto yyuser_error;
                }
@@ -1924,7 +1925,7 @@ b4_syncline([@oline@], [@ofile@])])dnl
                }
              else if (yyisErrorAction (yyaction))
                {
-]b4_location_if([[               yystack.yyerror_range[0].yystate.yyloc = *yyllocp;]])[
+]b4_location_if([[               yystack.yyerror_range[1].yystate.yyloc = *yyllocp;]])[
                  yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[);
                  goto yyuser_error;
                }
@@ -1950,7 +1951,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].yystate.yyloc = *yyllocp;]])[
+]b4_location_if([[           yystack.yyerror_range[1].yystate.yyloc = *yyllocp;]])[
              yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[);
              goto yyuser_error;
            }