From: Akim Demaille Date: Wed, 5 Dec 2001 09:40:31 +0000 (+0000) Subject: * src/closure.c (FIRSTS, FDERIVES): Adjust to reality: they are X-Git-Tag: before-m4-back-end~187 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/03ec521cc59f725f9142737e8ddf9a4943c80d8a * src/closure.c (FIRSTS, FDERIVES): Adjust to reality: they are indexed by nonterminals. --- diff --git a/ChangeLog b/ChangeLog index 10cfebb7..840e1e4c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2001-12-05 Akim Demaille + + * src/closure.c (FIRSTS, FDERIVES): Adjust to reality: they are + indexed by nonterminals. + + 2001-12-05 Akim Demaille * src/warshall.c (TC, RTC): De-obsfucate (source reduced to 22% of diff --git a/src/closure.c b/src/closure.c index 83effa91..bb45ba02 100644 --- a/src/closure.c +++ b/src/closure.c @@ -36,8 +36,9 @@ static unsigned *ruleset; static unsigned *fderives; static unsigned *firsts; -#define FDERIVES(Symbol) (fderives + (Symbol) * rulesetsize) -#define FIRSTS(Symbol) (firsts + (Symbol) * varsetsize) +/* Retrieve the FDERIVES/FIRSTS sets of the nonterminals numbered Var. */ +#define FDERIVES(Var) (fderives + ((Var) - ntokens) * rulesetsize) +#define FIRSTS(Var) (firsts + ((Var) - ntokens) * varsetsize) /* number of words required to hold a bit for each rule */ static int rulesetsize; @@ -71,7 +72,7 @@ print_firsts (void) { fprintf (stderr, "\t%s firsts\n", tags[i]); for (j = 0; j < nvars; j++) - if (BITISSET (FIRSTS (i - ntokens), j)) + if (BITISSET (FIRSTS (i), j)) fprintf (stderr, "\t\t%d (%s)\n", j + ntokens, tags[j + ntokens]); } fprintf (stderr, "\n\n"); @@ -115,20 +116,18 @@ print_fderives (void) static void set_firsts (void) { - int rowsize; - int i, j; - varsetsize = rowsize = WORDSIZE (nvars); + varsetsize = WORDSIZE (nvars); - firsts = XCALLOC (unsigned, nvars * rowsize); + firsts = XCALLOC (unsigned, nvars * varsetsize); for (i = ntokens; i < nsyms; i++) for (j = 0; derives[i][j] >= 0; ++j) { int symbol = ritem[rule_table[derives[i][j]].rhs]; if (ISVAR (symbol)) - SETBIT (FIRSTS (i - ntokens), symbol - ntokens); + SETBIT (FIRSTS (i), symbol - ntokens); } RTC (firsts, nvars); @@ -152,13 +151,13 @@ set_fderives (void) { int i, j, k; - fderives = XCALLOC (unsigned, nvars * rulesetsize) - ntokens * rulesetsize; + fderives = XCALLOC (unsigned, nvars * rulesetsize); set_firsts (); for (i = ntokens; i < nsyms; ++i) for (j = ntokens; j < nsyms; ++j) - if (BITISSET (FIRSTS (i - ntokens), j - ntokens)) + if (BITISSET (FIRSTS (i), j - ntokens)) for (k = 0; derives[j][k] > 0; ++k) SETBIT (FDERIVES (i), derives[j][k]); @@ -251,5 +250,5 @@ free_closure (void) { XFREE (itemset); XFREE (ruleset); - XFREE (fderives + ntokens * rulesetsize); + XFREE (fderives); }