235 |
void |
void |
236 |
closure (short *core, int n) |
closure (short *core, int n) |
237 |
{ |
{ |
|
int ruleno; |
|
238 |
/* Index over CORE. */ |
/* Index over CORE. */ |
239 |
int c; |
int c; |
240 |
|
|
242 |
int r; |
int r; |
243 |
|
|
244 |
/* A bit index over RULESET. */ |
/* A bit index over RULESET. */ |
245 |
int b; |
int ruleno; |
246 |
|
|
247 |
if (trace_flag) |
if (trace_flag) |
248 |
{ |
{ |
268 |
ruleset[r] |= FDERIVES (ritem[core[c]])[r]; |
ruleset[r] |= FDERIVES (ritem[core[c]])[r]; |
269 |
} |
} |
270 |
|
|
|
ruleno = 0; |
|
271 |
itemsetsize = 0; |
itemsetsize = 0; |
272 |
c = 0; |
c = 0; |
273 |
for (b = 0; b < rulesetsize * BITS_PER_WORD; ++b) |
for (ruleno = 0; ruleno < rulesetsize * BITS_PER_WORD; ++ruleno) |
274 |
{ |
if (BITISSET (ruleset, ruleno)) |
275 |
if (BITISSET (ruleset, b)) |
{ |
276 |
{ |
int itemno = rule_table[ruleno].rhs; |
277 |
int itemno = rule_table[ruleno].rhs; |
while (c < n && core[c] < itemno) |
278 |
while (c < n && core[c] < itemno) |
{ |
279 |
{ |
itemset[itemsetsize] = core[c]; |
280 |
itemset[itemsetsize] = core[c]; |
itemsetsize++; |
281 |
itemsetsize++; |
c++; |
282 |
c++; |
} |
283 |
} |
itemset[itemsetsize] = itemno; |
284 |
itemset[itemsetsize] = itemno; |
itemsetsize++; |
285 |
itemsetsize++; |
} |
|
} |
|
|
|
|
|
ruleno++; |
|
|
} |
|
286 |
|
|
287 |
while (c < n) |
while (c < n) |
288 |
{ |
{ |