Robert Anisko <anisko_r@lrde.epita.fr>
* data/lalr1.cc (parse::yyerrlab1): When popping the stack, stop
when the stacks contain one element, as the loop would otherwise
free the last state, and then use the top state (the one we just
popped).  This means that the initial elements will not be freed
explicitly, as is the case in yacc.c; it is not a problem, as
these elements have fake values.
This commit is contained in:
Akim Demaille
2003-01-13 15:42:31 +00:00
parent 0692b77351
commit 3ae831b413
2 changed files with 16 additions and 2 deletions

View File

@@ -1,3 +1,14 @@
2003-01-13 Akim Demaille <akim@epita.fr>,
Quoc Peyrot <chojin@lrde.epita.fr>,
Robert Anisko <anisko_r@lrde.epita.fr>
* data/lalr1.cc (parse::yyerrlab1): When popping the stack, stop
when the stacks contain one element, as the loop would otherwise
free the last state, and then use the top state (the one we just
popped). This means that the initial elements will not be freed
explicitly, as is the case in yacc.c; it is not a problem, as
these elements have fake values.
2003-01-11 Paul Eggert <eggert@twinsun.com>
* NEWS: %expect-violations are now just warnings, reverting

View File

@@ -302,7 +302,10 @@ yy::]b4_parser_class_name[::parse ()
int nerrs = 0;
int errstatus = 0;
/* Initialize stack. */
/* Initialize the stacks. The initial state will be pushed in
yynewstate, since the latter expects the semantical and the
location values to have been already stored, initialize these
stacks with a primary value. */
state_stack_ = StateStack (0);
semantic_stack_ = SemanticStack (1);
location_stack_ = LocationStack (1);
@@ -545,7 +548,7 @@ b4_syncline([@oline@], [@ofile@])[
}
/* Pop the current state because it cannot handle the error token. */
if (!state_stack_.height ())
if (state_stack_.height () == 1)
goto yyabortlab;
#if YYDEBUG