* src/nullable.c (set_nullable): Use a for loop to de-obfuscate

the handling of squeue.
`symbol >= 0' is wrong now, use `rule_table[ruleno].useful'.
This commit is contained in:
Akim Demaille
2001-12-05 09:16:51 +00:00
parent fa7f94f217
commit 4b412c9eca
2 changed files with 15 additions and 15 deletions

View File

@@ -1,3 +1,10 @@
2001-12-05 Akim Demaille <akim@epita.fr>
* src/nullable.c (set_nullable): Use a for loop to de-obfuscate
the handling of squeue.
`symbol >= 0' is wrong now, use `rule_table[ruleno].useful'.
2001-12-05 Akim Demaille <akim@epita.fr>
Because useless nonterminals are now kept alive (instead of being

View File

@@ -107,23 +107,16 @@ set_nullable (void)
}
while (s1 < s2)
{
p = rsets[*s1++];
while (p)
{
int ruleno = p->value;
p = p->next;
if (--rcount[ruleno] == 0)
for (p = rsets[*s1++]; p; p = p->next)
{
int ruleno = p->value;
if (--rcount[ruleno] == 0)
if (rule_table[ruleno].useful && !nullable[rule_table[ruleno].lhs])
{
int symbol = rule_table[ruleno].lhs;
if (symbol >= 0 && !nullable[symbol])
{
nullable[symbol] = 1;
*s2++ = symbol;
}
nullable[rule_table[ruleno].lhs] = 1;
*s2++ = rule_table[ruleno].lhs;
}
}
}
}
XFREE (squeue);
XFREE (rcount);