the handling of squeue.
`symbol >= 0' is wrong now, use `rule_table[ruleno].useful'.
+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
2001-12-05 Akim Demaille <akim@epita.fr>
Because useless nonterminals are now kept alive (instead of being
- {
- 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);
XFREE (squeue);
XFREE (rcount);