From e9e4c321148155fd9129b12bf5996d4b9ae15367 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 12 Nov 2001 09:24:50 +0000 Subject: [PATCH] * src/bison.simple (YYSTACK_REALLOC): New. (yyparse) [!yyoverflow]: Use it and free the old stack. Reported by FIXME: Who. --- ChangeLog | 6 ++++++ THANKS | 3 ++- src/bison.simple | 39 ++++++++++++++++++++++++--------------- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 93cc7f02..3d660360 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2001-11-12 Akim Demaille + + * src/bison.simple (YYSTACK_REALLOC): New. + (yyparse) [!yyoverflow]: Use it and free the old stack. + Reported by FIXME: Who. + 2001-11-12 Pascal Bart * src/bison.simple: Define type yystype instead of YYSTYPE, and diff --git a/THANKS b/THANKS index e74019f0..f74230bb 100644 --- a/THANKS +++ b/THANKS @@ -2,7 +2,7 @@ Bison was originally written by Robert Corbett. It would not be what it is today without the invaluable help of these people: Airy Andre Airy.Andre@edf.fr -Akim Demaille akim@epita.fr +Akim Demaille akim@freefriends.org Albert Chin-A-Young china@thewrittenword.com Alexander Belopolsky alexb@rentec.com Daniel Hagerty hag@gnu.org @@ -20,6 +20,7 @@ Neil Booth NeilB@earthling.net Noah Friedman friedman@gnu.org Pascal Bart pascal.bart@epita.fr Paul Eggert eggert@twinsun.com +Per Allansson per@appgate.com Piotr Gackiewicz gacek@intertel.com.pl Richard Stallman rms@gnu.org Robert Anisko anisko_r@epita.fr diff --git a/src/bison.simple b/src/bison.simple index eb94f301..d08be3ff 100644 --- a/src/bison.simple +++ b/src/bison.simple @@ -102,10 +102,27 @@ # 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 */ -- 2.45.2