void
closure (short *core, int n)
{
- int ruleno;
/* Index over CORE. */
int c;
/* Index over RULESET. */
int r;
- int itemno;
+ /* A bit index over RULESET. */
+ int ruleno;
if (trace_flag)
{
ruleset[r] |= FDERIVES (ritem[core[c]])[r];
}
- ruleno = 0;
itemsetsize = 0;
c = 0;
- for (r = 0; r < rulesetsize; ++r)
- {
- int b;
-
- for (b = 0; b < BITS_PER_WORD; b++)
- {
- if (ruleset[r] & (1 << b))
- {
- itemno = rule_table[ruleno].rhs;
- while (c < n && core[c] < itemno)
- {
- itemset[itemsetsize] = core[c];
- itemsetsize++;
- c++;
- }
- itemset[itemsetsize] = itemno;
- itemsetsize++;
- }
-
- ruleno++;
- }
- }
+ for (ruleno = 0; ruleno < rulesetsize * BITS_PER_WORD; ++ruleno)
+ if (BITISSET (ruleset, ruleno))
+ {
+ int itemno = rule_table[ruleno].rhs;
+ while (c < n && core[c] < itemno)
+ {
+ itemset[itemsetsize] = core[c];
+ itemsetsize++;
+ c++;
+ }
+ itemset[itemsetsize] = itemno;
+ itemsetsize++;
+ }
while (c < n)
{