mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-17 00:03:03 +00:00
* src/closure.c (closure): Use arrays instead of pointers to clarify.
This commit is contained in:
@@ -1,3 +1,8 @@
|
|||||||
|
2001-11-19 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
|
* src/closure.c (closure): Use arrays instead of pointers to clarify.
|
||||||
|
|
||||||
|
|
||||||
2001-11-19 Akim Demaille <akim@epita.fr>
|
2001-11-19 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* src/closure.c, src/derives.c, src/nullable.c: Adjust various
|
* src/closure.c, src/derives.c, src/nullable.c: Adjust various
|
||||||
|
|||||||
@@ -229,50 +229,37 @@ void
|
|||||||
closure (short *core, int n)
|
closure (short *core, int n)
|
||||||
{
|
{
|
||||||
int ruleno;
|
int ruleno;
|
||||||
unsigned word;
|
|
||||||
short *csp;
|
short *csp;
|
||||||
unsigned *dsp;
|
|
||||||
unsigned *rsp;
|
|
||||||
|
|
||||||
short *csend;
|
|
||||||
unsigned *rsend;
|
|
||||||
int symbol;
|
|
||||||
int itemno;
|
int itemno;
|
||||||
|
int i;
|
||||||
|
|
||||||
if (trace_flag)
|
if (trace_flag)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
fprintf (stderr, "Entering closure (items = {");
|
fprintf (stderr, "Entering closure (items = {");
|
||||||
for (i = 0; i < n; ++i)
|
for (i = 0; i < n; ++i)
|
||||||
fprintf (stderr, " %d ", core[i]);
|
fprintf (stderr, " %d ", core[i]);
|
||||||
fprintf (stderr, "}, nitems = %d)\n", n);
|
fprintf (stderr, "}, nitems = %d)\n", n);
|
||||||
}
|
}
|
||||||
|
|
||||||
rsp = ruleset;
|
|
||||||
rsend = ruleset + rulesetsize;
|
|
||||||
csend = core + n;
|
|
||||||
|
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
{
|
{
|
||||||
dsp = FDERIVES (start_symbol);
|
for (i = 0; i < rulesetsize; ++i)
|
||||||
while (rsp < rsend)
|
ruleset[i] = FDERIVES (start_symbol)[i];
|
||||||
*rsp++ = *dsp++;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while (rsp < rsend)
|
for (i = 0; i < rulesetsize; ++i)
|
||||||
*rsp++ = 0;
|
ruleset[i] = 0;
|
||||||
|
|
||||||
csp = core;
|
for (i = 0; i < n; ++i)
|
||||||
while (csp < csend)
|
|
||||||
{
|
{
|
||||||
symbol = ritem[*csp++];
|
int symbol = ritem[core[i]];
|
||||||
if (ISVAR (symbol))
|
if (ISVAR (symbol))
|
||||||
{
|
{
|
||||||
dsp = FDERIVES (symbol);
|
int j;
|
||||||
rsp = ruleset;
|
for (j = 0; j < rulesetsize; ++j)
|
||||||
while (rsp < rsend)
|
ruleset[j] |= FDERIVES (symbol)[j];
|
||||||
*rsp++ |= *dsp++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -280,10 +267,9 @@ closure (short *core, int n)
|
|||||||
ruleno = 0;
|
ruleno = 0;
|
||||||
itemsetend = itemset;
|
itemsetend = itemset;
|
||||||
csp = core;
|
csp = core;
|
||||||
rsp = ruleset;
|
for (i= 0; i < rulesetsize; ++i)
|
||||||
while (rsp < rsend)
|
|
||||||
{
|
{
|
||||||
word = *rsp++;
|
int word = ruleset[i];
|
||||||
if (word == 0)
|
if (word == 0)
|
||||||
{
|
{
|
||||||
ruleno += BITS_PER_WORD;
|
ruleno += BITS_PER_WORD;
|
||||||
@@ -297,7 +283,7 @@ closure (short *core, int n)
|
|||||||
if (word & (1 << b))
|
if (word & (1 << b))
|
||||||
{
|
{
|
||||||
itemno = rule_table[ruleno].rhs;
|
itemno = rule_table[ruleno].rhs;
|
||||||
while (csp < csend && *csp < itemno)
|
while (csp < (core + n ) && *csp < itemno)
|
||||||
*itemsetend++ = *csp++;
|
*itemsetend++ = *csp++;
|
||||||
*itemsetend++ = itemno;
|
*itemsetend++ = itemno;
|
||||||
}
|
}
|
||||||
@@ -307,7 +293,7 @@ closure (short *core, int n)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (csp < csend)
|
while (csp < (core + n))
|
||||||
*itemsetend++ = *csp++;
|
*itemsetend++ = *csp++;
|
||||||
|
|
||||||
if (trace_flag)
|
if (trace_flag)
|
||||||
|
|||||||
Reference in New Issue
Block a user