aboutsummaryrefslogtreecommitdiff
path: root/contrib/byacc/closure.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/byacc/closure.c')
-rw-r--r--contrib/byacc/closure.c36
1 files changed, 16 insertions, 20 deletions
diff --git a/contrib/byacc/closure.c b/contrib/byacc/closure.c
index 61848ebf5658..53a81e40d515 100644
--- a/contrib/byacc/closure.c
+++ b/contrib/byacc/closure.c
@@ -1,4 +1,4 @@
-/* $Id: closure.c,v 1.11 2014/09/18 00:40:07 tom Exp $ */
+/* $Id: closure.c,v 1.14 2022/01/09 16:22:58 tom Exp $ */
#include "defs.h"
@@ -6,7 +6,6 @@ Value_t *itemset;
Value_t *itemsetend;
unsigned *ruleset;
-static unsigned *first_base;
static unsigned *first_derives;
static unsigned *EFF;
@@ -21,7 +20,6 @@ set_EFF(void)
{
unsigned *row;
int symbol;
- Value_t *sp;
int rowsize;
int i;
int rule;
@@ -32,7 +30,7 @@ set_EFF(void)
row = EFF;
for (i = start_symbol; i < nsyms; i++)
{
- sp = derives[i];
+ Value_t *sp = derives[i];
for (rule = *sp; rule > 0; rule = *++sp)
{
symbol = ritem[rrhs[rule]];
@@ -56,9 +54,7 @@ void
set_first_derives(void)
{
unsigned *rrow;
- unsigned *vrow;
int j;
- unsigned k;
unsigned cword = 0;
Value_t *rp;
@@ -69,16 +65,16 @@ set_first_derives(void)
rulesetsize = WORDSIZE(nrules);
varsetsize = WORDSIZE(nvars);
- first_base = NEW2(nvars * rulesetsize, unsigned);
- first_derives = first_base - ntokens * rulesetsize;
+ first_derives = NEW2(nvars * rulesetsize, unsigned);
set_EFF();
- rrow = first_derives + ntokens * rulesetsize;
+ rrow = first_derives;
for (i = start_symbol; i < nsyms; i++)
{
- vrow = EFF + ((i - ntokens) * varsetsize);
- k = BITS_PER_WORD;
+ unsigned *vrow = EFF + ((i - ntokens) * varsetsize);
+ unsigned k = BITS_PER_WORD;
+
for (j = start_symbol; j < nsyms; k++, j++)
{
if (k >= BITS_PER_WORD)
@@ -87,7 +83,7 @@ set_first_derives(void)
k = 0;
}
- if (cword & (1u << k))
+ if (cword & (1U << k))
{
rp = derives[j];
while ((rule = *rp++) >= 0)
@@ -111,7 +107,6 @@ void
closure(Value_t *nucleus, int n)
{
unsigned ruleno;
- unsigned word;
unsigned i;
Value_t *csp;
unsigned *dsp;
@@ -120,7 +115,6 @@ closure(Value_t *nucleus, int n)
Value_t *csend;
unsigned *rsend;
- int symbol;
Value_t itemno;
rulesetsize = WORDSIZE(nrules);
@@ -131,10 +125,11 @@ closure(Value_t *nucleus, int n)
csend = nucleus + n;
for (csp = nucleus; csp < csend; ++csp)
{
- symbol = ritem[*csp];
+ int symbol = ritem[*csp];
+
if (ISVAR(symbol))
{
- dsp = first_derives + symbol * rulesetsize;
+ dsp = first_derives + (symbol - ntokens) * rulesetsize;
rsp = ruleset;
while (rsp < rsend)
*rsp++ |= *dsp++;
@@ -146,12 +141,13 @@ closure(Value_t *nucleus, int n)
csp = nucleus;
for (rsp = ruleset; rsp < rsend; ++rsp)
{
- word = *rsp;
+ unsigned word = *rsp;
+
if (word)
{
for (i = 0; i < BITS_PER_WORD; ++i)
{
- if (word & (1u << i))
+ if (word & (1U << i))
{
itemno = rrhs[ruleno + i];
while (csp < csend && *csp < itemno)
@@ -178,7 +174,7 @@ finalize_closure(void)
{
FREE(itemset);
FREE(ruleset);
- FREE(first_base);
+ FREE(first_derives);
}
#ifdef DEBUG
@@ -238,7 +234,7 @@ print_first_derives(void)
for (i = start_symbol; i < nsyms; i++)
{
printf("\n%s derives\n", symbol_name[i]);
- rp = first_derives + i * WORDSIZE(nrules);
+ rp = first_derives + (i - ntokens) * WORDSIZE(nrules);
k = BITS_PER_WORD;
for (j = 0; j <= nrules; k++, j++)
{