]> git.saurik.com Git - bison.git/blobdiff - src/bison.simple
* src/bison.simple (YYSTACK_REALLOC): New.
[bison.git] / src / bison.simple
index eb94f301b29121b7a4717ec580eb7884f7ead5aa..d08be3ff7cfeb2a424b01470c9d16d85244c13b5 100644 (file)
 # define YYSTACK_USE_ALLOCA 0
 #endif
 
+/* Realloc WHAT from SIZE to YYSTACKSIZE elements of TYPE.
+   If WHAT was malloc'ed (not the original automatic ARRAY), free it. */
 #if YYSTACK_USE_ALLOCA
-# define YYSTACK_ALLOC alloca
+# define YYSTACK_REALLOC(Type, What, Array)                            \
+do {                                                                   \
+  Type *old = What;                                                    \
+  What = (Type *) malloc (yystacksize * sizeof (Type));                        \
+  __yy_memcpy ((char *) What, (char *) old,                            \
+              (size) * (unsigned int) sizeof (Type));                  \
+  yyfree_stacks = 1;                                                   \
+  if (old != Array)                                                    \
+    free (old);                                                                \
+} while (0)
 #else
-# define YYSTACK_ALLOC malloc
+# define YYSTACK_REALLOC(Type, What, Array)                            \
+do {                                                                   \
+  Type *old = What;                                                    \
+  What = (Type *) alloca (yystacksize * sizeof (Type));                        \
+  __yy_memcpy ((char *) What, (char *) old,                            \
+              (size) * (unsigned int) sizeof (Type));                  \
+} while (0)
 #endif
 
 #define YYBISON        1       /* Identify Bison output.  */
@@ -452,7 +469,7 @@ yyparse (YYPARSE_PARAM_ARG)
 
   /* Three stacks and their tools:
      `yyss': related to states,
-     `yysv': related to semantic values,
+     `yyvs': related to semantic values,
      `yyls': related to locations.
 
      Refer to the stacks thru separate pointers, to allow yyoverflow
@@ -580,19 +597,11 @@ yyparse (YYPARSE_PARAM_ARG)
       yystacksize *= 2;
       if (yystacksize > YYMAXDEPTH)
        yystacksize = YYMAXDEPTH;
-# if !YYSTACK_USE_ALLOCA
-      yyfree_stacks = 1;
-# endif
-      yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
-      __yy_memcpy ((char *)yyss, (char *)yyss1,
-                  size * (unsigned int) sizeof (*yyssp));
-      yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
-      __yy_memcpy ((char *)yyvs, (char *)yyvs1,
-                  size * (unsigned int) sizeof (*yyvsp));
+
+      YYSTACK_REALLOC (short, yyss, yyssa);
+      YYSTACK_REALLOC (YYSTYPE, yyvs, yyvsa);
 # if YYLSP_NEEDED
-      yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
-      __yy_memcpy ((char *)yyls, (char *)yyls1,
-                  size * (unsigned int) sizeof (*yylsp));
+      YYSTACK_REALLOC (YYLTYPE, yyls, yylsa);
 # endif
 #endif /* no yyoverflow */