X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/9c2c67e6fee0853016620cfa0addd00c79d0b8e7..7c6b64d02355fa26b3a256906327ab3edbbee8b7:/src/nullable.c diff --git a/src/nullable.c b/src/nullable.c index 000b8b1b..0b6d614f 100644 --- a/src/nullable.c +++ b/src/nullable.c @@ -57,8 +57,8 @@ set_nullable (void) Hence we must allocate room for useless nonterminals too. */ shorts **rsets = XCALLOC (shorts *, nvars) - ntokens; /* This is said to be more elements than we actually use. - Supposedly nitems - nrules is enough. But why take the risk? */ - shorts *relts = XCALLOC (shorts, nitems + nvars + 1); + Supposedly NRITEMS - NRULES is enough. But why take the risk? */ + shorts *relts = XCALLOC (shorts, nritems + nvars + 1); if (trace_flag) fprintf (stderr, "Entering set_nullable\n"); @@ -71,19 +71,19 @@ set_nullable (void) for (ruleno = 1; ruleno < nrules + 1; ++ruleno) if (rule_table[ruleno].useful) { - if (ritem[rule_table[ruleno].rhs] > 0) + if (ritem[rule_table[ruleno].rhs] >= 0) { /* This rule has a non empty RHS. */ short *r; int any_tokens = 0; - for (r = ritem + rule_table[ruleno].rhs; *r > 0; ++r) + for (r = &ritem[rule_table[ruleno].rhs]; *r >= 0; ++r) if (ISTOKEN (*r)) any_tokens = 1; /* This rule has only nonterminals: schedule it for the second pass. */ if (!any_tokens) - for (r = ritem + rule_table[ruleno].rhs; *r > 0; ++r) + for (r = &ritem[rule_table[ruleno].rhs]; *r >= 0; ++r) { rcount[ruleno]++; p->next = rsets[*r];