]> git.saurik.com Git - bison.git/blobdiff - data/glr.c
Update copyright.
[bison.git] / data / glr.c
index d332c866cb1f0c0445db09ac81ac50e76ecf4415..c6fe4c3d9eb9b298a606a69e5fd03eb2a67d83b1 100644 (file)
@@ -218,6 +218,18 @@ b4_syncline([@oline@], [@ofile@])
 #include <stdarg.h>
 #include <setjmp.h>
 
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
 #ifndef YYFREE
 # define YYFREE free
 #endif
@@ -556,13 +568,14 @@ int yydebug;
    properly redirected to new data. */
 #define YYHEADROOM 2
 
-#if (! defined (YYSTACKEXPANDABLE) \
-     && (! defined (__cplusplus) \
-        || (]b4_location_if([[defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \
-            && ]])[defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
-#define YYSTACKEXPANDABLE 1
-#else
-#define YYSTACKEXPANDABLE 0
+#ifndef YYSTACKEXPANDABLE
+# if (! defined (__cplusplus) \
+      || (]b4_location_if([[defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \
+         && ]])[defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))
+#  define YYSTACKEXPANDABLE 1
+# else
+#  define YYSTACKEXPANDABLE 0
+# endif
 #endif
 
 #if YYERROR_VERBOSE
@@ -656,7 +669,6 @@ union yyGLRStackItem {
 };
 
 struct yyGLRStack {
-  int yyerrflag;
   int yyerrState;
 ]b4_location_if([[  /* To compute the location of the error token.  */
   yyGLRStackItem yyerror_range[3];]])[
@@ -680,7 +692,6 @@ static void yyexpandGLRStack (yyGLRStack* yystack]b4_pure_formals[);
 static void
 yyFail (yyGLRStack* yystack]b4_pure_formals[, const char* yymsg)
 {
-  yystack->yyerrflag = 1;
   if (yymsg != NULL)
     yyerror (]b4_yyerror_args[yymsg);
   longjmp (yystack->yyexception_buffer, 1);
@@ -689,7 +700,7 @@ yyFail (yyGLRStack* yystack]b4_pure_formals[, const char* yymsg)
 static void
 yyStackOverflow (yyGLRStack* yystack]b4_pure_formals[)
 {
-  yyFail (yystack]b4_pure_args[, "parser stack overflow");
+  longjmp (yystack->yyexception_buffer, 2);
 }
 
 #if YYDEBUG || YYERROR_VERBOSE
@@ -772,7 +783,7 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp,
 # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
 # undef YYBACKUP
 # define YYBACKUP(Token, Value)                                                     \
-  return yyerror (]b4_yyerror_args["syntax error: cannot back up"),         \
+  return yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")),     \
         yyerrok, yyerr
 
   yylow = 1;
@@ -781,7 +792,8 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp,
   else
     *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval;
   YYLLOC_DEFAULT (*yylocp, yyvsp - yyrhslen, yyrhslen);
-]
+]b4_location_if([[  yystack->yyerror_range[1].yystate.yyloc = *yylocp;
+]])
   switch (yyn)
     {
       b4_actions
@@ -811,6 +823,7 @@ yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1)
   switch (yyn)
     {
       b4_mergers
+      default: break;
     }
 }
 [
@@ -954,7 +967,6 @@ static void yyfreeStateSet (yyGLRStateSet* yyset)
 static yybool
 yyinitGLRStack (yyGLRStack* yystack, size_t yysize)
 {
-  yystack->yyerrflag = 0;
   yystack->yyerrState = 0;
   yynerrs = 0;
   yystack->yyspaceLeft = yysize;
@@ -1524,7 +1536,7 @@ yyreportAmbiguity (yySemanticOption* yyx0, yySemanticOption* yyx1,
   yyreportTree (yyx1, 2);
   YYFPRINTF (stderr, "\n");
 #endif
-  yyFail (yystack][]b4_pure_args[, "ambiguity detected");
+  yyFail (yystack][]b4_pure_args[, YY_("ambiguity detected"));
 }
 
 
@@ -1774,8 +1786,8 @@ yyreportSyntaxError (yyGLRStack* yystack,
                yyprefix = yyor;
              }
 
-         yyf = yyformat;
-         yysize1 = yysize + (yyfmt - yyformat);
+         yyf = YY_(yyformat);
+         yysize1 = yysize + strlen (yyf);
          yysize_overflow |= yysize1 < yysize;
          yysize = yysize1;
 
@@ -1803,11 +1815,11 @@ yyreportSyntaxError (yyGLRStack* yystack,
              YYFREE (yymsg);
            }
          else
-           yyerror (]b4_lyyerror_args["syntax error; also virtual memory exhausted");
+           yyerror (]b4_lyyerror_args[YY_("syntax error; also memory exhausted"));
        }
       else
 #endif /* YYERROR_VERBOSE */
-       yyerror (]b4_lyyerror_args["syntax error");
+       yyerror (]b4_lyyerror_args[YY_("syntax error"));
       yynerrs += 1;
     }
 }
@@ -1930,11 +1942,9 @@ yyrecoverSyntaxError (yyGLRStack* yystack,
     default:                                                                \
       break;                                                                \
     case yyabort:                                                           \
-      yystack.yyerrflag = 1;                                                \
-      goto yyDone;                                                          \
+      goto yyabortlab;                                                      \
     case yyaccept:                                                          \
-      yystack.yyerrflag = 0;                                                \
-      goto yyDone;                                                          \
+      goto yyacceptlab;                                                             \
     case yyerr:                                                                     \
       goto yyuser_error;                                                    \
     }                                                                       \
@@ -1947,6 +1957,7 @@ yyrecoverSyntaxError (yyGLRStack* yystack,
 
 ]b4_c_ansi_function_def([yyparse], [int], b4_parse_param)[
 {
+  int yyresult;
   yySymbol yytoken;
   yyGLRStack yystack;
   size_t yyposn;
@@ -1964,14 +1975,6 @@ yyrecoverSyntaxError (yyGLRStack* yystack,
   YYDPRINTF ((stderr, "Starting parse\n"));
 
   yytoken = YYEMPTY;
-
-  if (setjmp (yystack.yyexception_buffer) != 0)
-    goto yyDone;
-
-  if (! yyinitGLRStack (&yystack, YYINITDEPTH))
-    goto yyDone;
-  yystack.yytokenp = &yytoken;
-
   yylval = yyval_default;
 ]b4_location_if([
 #if YYLTYPE_IS_TRIVIAL
@@ -1989,6 +1992,14 @@ m4_popdef([b4_at_dollar])dnl
 /* Line __line__ of glr.c.  */
 b4_syncline([@oline@], [@ofile@])])dnl
 [
+  if (! yyinitGLRStack (&yystack, YYINITDEPTH))
+    goto yyoverflowlab;
+  switch (setjmp (yystack.yyexception_buffer))
+    {
+    case 1: goto yyabortlab;
+    case 2: goto yyoverflowlab;
+    }
+  yystack.yytokenp = &yytoken;
   yyglrShift (&yystack, 0, 0, 0, yylval, &yylloc]b4_user_args[);
   yyposn = 0;
 
@@ -2007,7 +2018,7 @@ b4_syncline([@oline@], [@ofile@])])dnl
          yyStateNum yystate = yystack.yytops.yystates[0]->yylrState;
           YYDPRINTF ((stderr, "Entering state %d\n", yystate));
          if (yystate == YYFINAL)
-           goto yyDone;
+           goto yyacceptlab;
          if (yyisDefaultedState (yystate))
            {
              yyrule = yydefaultAction (yystate);
@@ -2069,7 +2080,7 @@ b4_syncline([@oline@], [@ofile@])])dnl
            {
              yyundeleteLastStack (&yystack);
              if (yystack.yytops.yysize == 0)
-               yyFail (&yystack][]b4_lpure_args[, "syntax error");
+               yyFail (&yystack][]b4_lpure_args[, YY_("syntax error"));
              YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
              YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
 ]b4_location_if([[           yystack.yyerror_range[1].yystate.yyloc = *yyllocp;]])[
@@ -2089,14 +2100,27 @@ b4_syncline([@oline@], [@ofile@])])dnl
       yyrecoverSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[);
       yyposn = yystack.yytops.yystates[0]->yyposn;
     }
- yyDone:
-  /* On YYABORT, free the lookahead. */
-  if (yystack.yyerrflag == 1 && yytoken != YYEMPTY)
+
+ yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+ yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+ yyoverflowlab:
+  yyerror (]b4_lyyerror_args[YY_("parser stack overflow"));
+  yyresult = 2;
+  /* Fall through.  */
+
+ yyreturn:
+  if (yytoken != YYEOF && yytoken != YYEMPTY)
     yydestruct ("Error: discarding lookahead",
                 yytoken, yylvalp]b4_location_if([, yyllocp])[);
 
   yyfreeGLRStack (&yystack);
-  return yystack.yyerrflag;
+  return yyresult;
 }
 
 /* DEBUGGING ONLY */