From 49701457c2728ad7c77528205aa0bd1cb3379128 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 10 Dec 2001 09:06:48 +0000 Subject: [PATCH] Now that states have a complete set of members, the linked list of reductions is useless: just fill directly the state's reductions member. * src/state.h (struct reductions): Remove member `number' and `next'. * src/LR0.c (first_reduction, last_reduction): Remove. (save_reductions): Don't link the new reductions, store them in this_state. * src/lalr.c (set_state_table): No need to attach reductions to states, it's already done. * src/output.c (output_actions): No longer free the shifts, then the reductions, then the states: free all the states and their members. --- ChangeLog | 18 ++++++++++++++++++ src/LR0.c | 12 ++---------- src/lalr.c | 6 ------ src/output.c | 12 +++++++++--- src/state.h | 2 -- 5 files changed, 29 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index e394f349..d47c6480 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2001-12-10 Akim Demaille + + Now that states have a complete set of members, the linked list of + reductions is useless: just fill directly the state's reductions + member. + + * src/state.h (struct reductions): Remove member `number' and + `next'. + * src/LR0.c (first_reduction, last_reduction): Remove. + (save_reductions): Don't link the new reductions, store them in + this_state. + * src/lalr.c (set_state_table): No need to attach reductions to + states, it's already done. + * src/output.c (output_actions): No longer free the shifts, then + the reductions, then the states: free all the states and their + members. + + 2001-12-10 Akim Demaille * src/options.c (OPTN, DRTV, BOTH): New. diff --git a/src/LR0.c b/src/LR0.c index ff5fdb61..2dbd91e4 100644 --- a/src/LR0.c +++ b/src/LR0.c @@ -30,18 +30,17 @@ #include "complain.h" #include "closure.h" #include "LR0.h" +#include "lalr.h" #include "reduce.h" int nstates; int final_state; state_t *first_state = NULL; shifts *first_shift = NULL; -reductions *first_reduction = NULL; static state_t *this_state = NULL; static state_t *last_state = NULL; static shifts *last_shift = NULL; -static reductions *last_reduction = NULL; static int nshifts; static short *shift_symbol = NULL; @@ -551,17 +550,10 @@ save_reductions (void) if (count) { reductions *p = REDUCTIONS_ALLOC (count); - - p->number = this_state->number; p->nreds = count; - shortcpy (p->rules, redset, count); - if (last_reduction) - last_reduction->next = p; - else - first_reduction = p; - last_reduction = p; + this_state->reductions = p; } } diff --git a/src/lalr.c b/src/lalr.c index 0b269255..c7807f5e 100644 --- a/src/lalr.c +++ b/src/lalr.c @@ -156,12 +156,6 @@ set_state_table (void) state_table[sp->number]->shifts = sp; } - { - reductions *rp; - for (rp = first_reduction; rp; rp = rp->next) - state_table[rp->number]->reductions = rp; - } - /* Pessimization, but simplification of the code: make sure all the states have a shifts, even if reduced to 0 shifts. */ { diff --git a/src/output.c b/src/output.c index dbcfbf01..cf5c0593 100644 --- a/src/output.c +++ b/src/output.c @@ -885,6 +885,7 @@ output_check (void) static void output_actions (void) { + int i; nvectors = nstates + nvars; froms = XCALLOC (short *, nvectors); @@ -893,8 +894,6 @@ output_actions (void) width = XCALLOC (short, nvectors); token_actions (); - LIST_FREE (shifts, first_shift); - LIST_FREE (reductions, first_reduction); XFREE (LA); XFREE (LAruleno); @@ -910,7 +909,14 @@ output_actions (void) output_table (); output_check (); - LIST_FREE (state_t, first_state); + + for (i = 0; i < nstates; ++i) + { + XFREE (state_table[i]->shifts); + XFREE (state_table[i]->reductions); + XFREE (state_table[i]->errs); + free (state_table[i]); + } XFREE (state_table); } diff --git a/src/state.h b/src/state.h index b407e886..d505565a 100644 --- a/src/state.h +++ b/src/state.h @@ -162,8 +162,6 @@ typedef struct errs typedef struct reductions { - struct reductions *next; - short number; short nreds; short rules[1]; } reductions; -- 2.47.2