]> git.saurik.com Git - bison.git/blobdiff - data/glr.c
* doc/bison.texinfo: minor typo fixes
[bison.git] / data / glr.c
index 9dc6be1938d0c2baf47cea94d2d11dd81b2bfaac..0a0638a351d82d693cefb116bc95fa273188af38 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
@@ -208,8 +207,8 @@ typedef struct YYLTYPE
 /* Default (constant) value used for initialization for null
    right-hand sides.  Unlike the standard yacc.c template,
    here we set the default value of $$ to a zeroed-out value.
-   Since the default value of these quantities is undefined,
-   this behavior is technically correct. */
+   Since the default value is undefined, this behavior is
+   technically correct. */
 static YYSTYPE yyval_default;
 
 /* Copy the second part of user declarations.  */
@@ -424,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
@@ -454,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
 ])[
 
@@ -536,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
@@ -611,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;
@@ -704,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);
@@ -734,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;
@@ -1702,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;
@@ -1719,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])[);
@@ -1734,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])[);
          }
@@ -1781,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],
@@ -1793,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])[);
@@ -1892,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;
                }
@@ -1923,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;
                }
@@ -1950,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;
            }