From 3ae831b4137245b9f7015f45223ca9abf35f25c1 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 13 Jan 2003 15:42:31 +0000 Subject: [PATCH] Quoc Peyrot , Robert Anisko * 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. --- ChangeLog | 11 +++++++++++ data/lalr1.cc | 7 +++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 33b038c2..15d9871d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2003-01-13 Akim Demaille , + Quoc Peyrot , + Robert Anisko + + * 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 * NEWS: %expect-violations are now just warnings, reverting diff --git a/data/lalr1.cc b/data/lalr1.cc index bab5e5f6..a2329e3a 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -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 -- 2.50.0