]> git.saurik.com Git - bison.git/blobdiff - src/parse-gram.c
* data/glr.c (yyexpandGLRStack): Declare only if defined.
[bison.git] / src / parse-gram.c
index 86dc29c513116136dfeb13feeedca2351af128df..b62ba6bb3468479e2bc3d273fcbb0dd599a7c9e5 100644 (file)
@@ -289,12 +289,25 @@ typedef struct YYLTYPE
 /* Line 219 of yacc.c.  */
 #line 291 "../../src/parse-gram.c"
 
+/* Define YYMODERN_C if this compiler supports C89 or better.  If
+   __STDC__ is defined, the compiler is modern.  IBM xlc 7.0 when run
+   as 'cc' doesn't define __STDC__ (or __STDC_VERSION__) for pedantic
+   reasons, but it defines __C99__FUNC__ so check that as well.
+   Consider a C++ compiler to be modern if it defines __cplusplus.  */
+#ifndef YYMODERN_C
+# if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
+#  define YYMODERN_C 1
+# else
+#  define YYMODERN_C 0
+# endif
+#endif
+
 #ifndef YYSIZE_T
 # if defined (__SIZE_TYPE__)
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined (size_t)
 #  define YYSIZE_T size_t
-# elif ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
+# elif ! defined (YYSIZE_T) && YYMODERN_C
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
@@ -316,6 +329,9 @@ typedef struct YYLTYPE
 # endif
 #endif
 
+/* Suppress unused-variable warnings by "using" E.  */
+#define YYUSE(e) do {;} while (/*CONSTCOND*/ 0 && (e))
+
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
@@ -333,8 +349,7 @@ typedef struct YYLTYPE
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if (! defined (_ALLOCA_H) && ! defined (_STDLIB_H) \
-        && (defined (__STDC__) || defined (__cplusplus)))
+#    if ! defined (_ALLOCA_H) && ! defined (_STDLIB_H) && YYMODERN_C
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
 #     ifndef _STDLIB_H
 #      define _STDLIB_H 1
@@ -365,15 +380,13 @@ extern "C" {
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if (! defined (malloc) && ! defined (_STDLIB_H) \
-       && (defined (__STDC__) || defined (__cplusplus)))
+#   if ! defined (malloc) && ! defined (_STDLIB_H) && YYMODERN_C
 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE free
-#   if (! defined (free) && ! defined (_STDLIB_H) \
-       && (defined (__STDC__) || defined (__cplusplus)))
+#   if ! defined (free) && ! defined (_STDLIB_H)  && YYMODERN_C
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
@@ -420,7 +433,7 @@ union yyalloc
          for (yyi = 0; yyi < (Count); yyi++)   \
            (To)[yyi] = (From)[yyi];            \
        }                                       \
-      while (0)
+      while (/*CONSTCOND*/ 0)
 #  endif
 # endif
 
@@ -438,11 +451,11 @@ union yyalloc
        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
        yyptr += yynewbytes / sizeof (*yyptr);                          \
       }                                                                        \
-    while (0)
+    while (/*CONSTCOND*/ 0)
 
 #endif
 
-#if defined (__STDC__) || defined (__cplusplus)
+#if YYMODERN_C
    typedef signed char yysigned_char;
 #else
    typedef short int yysigned_char;
@@ -780,7 +793,7 @@ do                                                          \
       yyerror (YY_("syntax error: cannot back up")); \
       YYERROR;                                                 \
     }                                                          \
-while (0)
+while (/*CONSTCOND*/ 0)
 
 
 #define YYTERROR       1
@@ -809,7 +822,7 @@ while (0)
          (Current).first_column = (Current).last_column =              \
            YYRHSLOC (Rhs, 0).last_column;                              \
        }                                                               \
-    while (0)
+    while (/*CONSTCOND*/ 0)
 #endif
 
 
@@ -849,25 +862,25 @@ while (0)
 do {                                           \
   if (yydebug)                                 \
     YYFPRINTF Args;                            \
-} while (0)
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)         \
-do {                                                           \
-  if (yydebug)                                                 \
-    {                                                          \
-      YYFPRINTF (stderr, "%s ", Title);                                \
-      yysymprint (stderr,                                      \
-                  Type, Value, Location);      \
-      YYFPRINTF (stderr, "\n");                                        \
-    }                                                          \
-} while (0)
+} while (/*CONSTCOND*/ 0)
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
+do {                                                                     \
+  if (yydebug)                                                           \
+    {                                                                    \
+      YYFPRINTF (stderr, "%s ", Title);                                          \
+      yysymprint (stderr,                                                \
+                  Type, Value, Location); \
+      YYFPRINTF (stderr, "\n");                                                  \
+    }                                                                    \
+} while (/*CONSTCOND*/ 0)
 
 /*------------------------------------------------------------------.
 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
 | TOP (included).                                                   |
 `------------------------------------------------------------------*/
 
-#if defined (__STDC__) || defined (__cplusplus)
+#if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
 static void
 yy_stack_print (short int *bottom, short int *top)
 #else
@@ -887,14 +900,14 @@ yy_stack_print (bottom, top)
 do {                                                           \
   if (yydebug)                                                 \
     yy_stack_print ((Bottom), (Top));                          \
-} while (0)
+} while (/*CONSTCOND*/ 0)
 
 
 /*------------------------------------------------.
 | Report that the YYRULE is going to be reduced.  |
 `------------------------------------------------*/
 
-#if defined (__STDC__) || defined (__cplusplus)
+#if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
 static void
 yy_reduce_print (int yyrule)
 #else
@@ -917,7 +930,7 @@ yy_reduce_print (yyrule)
 do {                                   \
   if (yydebug)                         \
     yy_reduce_print (Rule);            \
-} while (0)
+} while (/*CONSTCOND*/ 0)
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
@@ -956,7 +969,7 @@ int yydebug;
 #  else
 /* Return the length of YYSTR.  */
 static YYSIZE_T
-#   if defined (__STDC__) || defined (__cplusplus)
+#   if YYMODERN_C
 yystrlen (const char *yystr)
 #   else
 yystrlen (yystr)
@@ -980,7 +993,7 @@ yystrlen (yystr)
 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    YYDEST.  */
 static char *
-#   if defined (__STDC__) || defined (__cplusplus)
+#   if YYMODERN_C
 yystpcpy (char *yydest, const char *yysrc)
 #   else
 yystpcpy (yydest, yysrc)
@@ -1162,7 +1175,7 @@ yysyntax_error (char *yyresult, int yystate, int yychar)
 | Print this symbol on YYOUTPUT.  |
 `--------------------------------*/
 
-#if defined (__STDC__) || defined (__cplusplus)
+#if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
 static void
 yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
 #else
@@ -1174,9 +1187,8 @@ yysymprint (yyoutput, yytype, yyvaluep, yylocationp)
     YYLTYPE *yylocationp;
 #endif
 {
-  /* Pacify ``unused variable'' warnings.  */
-  (void) yyvaluep;
-  (void) yylocationp;
+  YYUSE (yyvaluep);
+  YYUSE (yylocationp);
 
   if (yytype < YYNTOKENS)
     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
@@ -1195,105 +1207,104 @@ yysymprint (yyoutput, yytype, yyvaluep, yylocationp)
       case 3: /* "\"string\"" */
 #line 169 "../../src/parse-gram.y"
         { fprintf (stderr, "\"%s\"", (yyvaluep->chars)); };
-#line 1199 "../../src/parse-gram.c"
+#line 1211 "../../src/parse-gram.c"
         break;
       case 4: /* "\"integer\"" */
 #line 182 "../../src/parse-gram.y"
         { fprintf (stderr, "%d", (yyvaluep->integer)); };
-#line 1204 "../../src/parse-gram.c"
+#line 1216 "../../src/parse-gram.c"
         break;
       case 8: /* "\"%destructor {...}\"" */
 #line 171 "../../src/parse-gram.y"
         { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1209 "../../src/parse-gram.c"
+#line 1221 "../../src/parse-gram.c"
         break;
       case 9: /* "\"%printer {...}\"" */
 #line 175 "../../src/parse-gram.y"
         { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1214 "../../src/parse-gram.c"
+#line 1226 "../../src/parse-gram.c"
         break;
       case 10: /* "\"%union {...}\"" */
 #line 176 "../../src/parse-gram.y"
         { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1219 "../../src/parse-gram.c"
+#line 1231 "../../src/parse-gram.c"
         break;
       case 26: /* "\"%initial-action {...}\"" */
 #line 172 "../../src/parse-gram.y"
         { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1224 "../../src/parse-gram.c"
+#line 1236 "../../src/parse-gram.c"
         break;
       case 27: /* "\"%lex-param {...}\"" */
 #line 173 "../../src/parse-gram.y"
         { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1229 "../../src/parse-gram.c"
+#line 1241 "../../src/parse-gram.c"
         break;
       case 34: /* "\"%parse-param {...}\"" */
 #line 174 "../../src/parse-gram.y"
         { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1234 "../../src/parse-gram.c"
+#line 1246 "../../src/parse-gram.c"
         break;
       case 42: /* "\"type\"" */
 #line 180 "../../src/parse-gram.y"
         { fprintf (stderr, "<%s>", (yyvaluep->uniqstr)); };
-#line 1239 "../../src/parse-gram.c"
+#line 1251 "../../src/parse-gram.c"
         break;
       case 46: /* "\"identifier\"" */
 #line 184 "../../src/parse-gram.y"
         { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
-#line 1244 "../../src/parse-gram.c"
+#line 1256 "../../src/parse-gram.c"
         break;
       case 47: /* "\"identifier:\"" */
 #line 186 "../../src/parse-gram.y"
         { fprintf (stderr, "%s:", (yyvaluep->symbol)->tag); };
-#line 1249 "../../src/parse-gram.c"
+#line 1261 "../../src/parse-gram.c"
         break;
       case 49: /* "\"%{...%}\"" */
 #line 178 "../../src/parse-gram.y"
         { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1254 "../../src/parse-gram.c"
+#line 1266 "../../src/parse-gram.c"
         break;
       case 50: /* "\"epilogue\"" */
 #line 178 "../../src/parse-gram.y"
         { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1259 "../../src/parse-gram.c"
+#line 1271 "../../src/parse-gram.c"
         break;
       case 51: /* "\"{...}\"" */
 #line 177 "../../src/parse-gram.y"
         { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1264 "../../src/parse-gram.c"
+#line 1276 "../../src/parse-gram.c"
         break;
       case 72: /* "symbol" */
 #line 184 "../../src/parse-gram.y"
         { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
-#line 1269 "../../src/parse-gram.c"
+#line 1281 "../../src/parse-gram.c"
         break;
       case 73: /* "action" */
 #line 177 "../../src/parse-gram.y"
         { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1274 "../../src/parse-gram.c"
+#line 1286 "../../src/parse-gram.c"
         break;
       case 74: /* "string_as_id" */
 #line 184 "../../src/parse-gram.y"
         { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
-#line 1279 "../../src/parse-gram.c"
+#line 1291 "../../src/parse-gram.c"
         break;
       case 75: /* "string_content" */
 #line 169 "../../src/parse-gram.y"
         { fprintf (stderr, "\"%s\"", (yyvaluep->chars)); };
-#line 1284 "../../src/parse-gram.c"
+#line 1296 "../../src/parse-gram.c"
         break;
       default:
         break;
     }
   YYFPRINTF (yyoutput, ")");
 }
-
 #endif /* ! YYDEBUG */
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
-#if defined (__STDC__) || defined (__cplusplus)
+#if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
 static void
 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
 #else
@@ -1305,9 +1316,8 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp)
     YYLTYPE *yylocationp;
 #endif
 {
-  /* Pacify ``unused variable'' warnings.  */
-  (void) yyvaluep;
-  (void) yylocationp;
+  YYUSE (yyvaluep);
+  YYUSE (yylocationp);
 
   if (!yymsg)
     yymsg = "Deleting";
@@ -1325,7 +1335,7 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp)
 /* Prevent warnings from -Wmissing-prototypes.  */
 
 #ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
+# if YYMODERN_C
 int yyparse (void *YYPARSE_PARAM);
 # else
 int yyparse ();
@@ -1348,20 +1358,20 @@ int yyparse ();
 `----------*/
 
 #ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
+# if YYMODERN_C
 int yyparse (void *YYPARSE_PARAM)
 # else
 int yyparse (YYPARSE_PARAM)
   void *YYPARSE_PARAM;
 # endif
 #else /* ! YYPARSE_PARAM */
-#if defined (__STDC__) || defined (__cplusplus)
+#if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
 int
 yyparse (void)
 #else
 int
 yyparse ()
-    ;
+
 #endif
 #endif
 {
@@ -1459,8 +1469,8 @@ YYLTYPE yylloc;
   yylloc.start.line   = yylloc.end.line   = 1;
   yylloc.start.column = yylloc.end.column = 0;
 }
-/* Line 1053 of yacc.c.  */
-#line 1464 "../../src/parse-gram.c"
+/* Line 1066 of yacc.c.  */
+#line 1474 "../../src/parse-gram.c"
   yylsp[0] = yylloc;
   goto yysetstate;
 
@@ -2052,8 +2062,8 @@ yyreduce:
       default: break;
     }
 
-/* Line 1249 of yacc.c.  */
-#line 2057 "../../src/parse-gram.c"
+/* Line 1262 of yacc.c.  */
+#line 2067 "../../src/parse-gram.c"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -2139,7 +2149,8 @@ yyerrlab:
         }
       else
        {
-         yydestruct ("Error: discarding", yytoken, &yylval, &yylloc);
+         yydestruct ("Error: discarding",
+                      yytoken, &yylval, &yylloc);
          yychar = YYEMPTY;
        }
     }
@@ -2157,7 +2168,7 @@ yyerrorlab:
   /* Pacify compilers like GCC when the user code never invokes
      YYERROR and the label yyerrorlab therefore never appears in user
      code.  */
-  if (0)
+  if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
   yyerror_range[0] = yylsp[1-yylen];
@@ -2193,7 +2204,8 @@ yyerrlab1:
        YYABORT;
 
       yyerror_range[0] = *yylsp;
-      yydestruct ("Error: popping", yystos[yystate], yyvsp, yylsp);
+      yydestruct ("Error: popping",
+                  yystos[yystate], yyvsp, yylsp);
       YYPOPSTACK;
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
@@ -2352,8 +2364,11 @@ static void
 version_check (location const *loc, char const *version)
 {
   if (strverscmp (version, PACKAGE_VERSION) > 0)
-    complain_at (*loc, "require bison %s, but have %s",
-                version, PACKAGE_VERSION);
+    {
+      complain_at (*loc, "require bison %s, but have %s",
+                  version, PACKAGE_VERSION);
+      exit (63);
+    }
 }
 
 static void