]> git.saurik.com Git - bison.git/commitdiff
* src/closure.c (ruleset): Be a bitset.
authorAkim Demaille <akim@epita.fr>
Mon, 4 Mar 2002 11:59:18 +0000 (11:59 +0000)
committerAkim Demaille <akim@epita.fr>
Mon, 4 Mar 2002 11:59:18 +0000 (11:59 +0000)
(rulesetsize): Remove.

ChangeLog
src/closure.c

index 70a04ba0b0fdb214c885037c535d2d16819e9158..6d4176116a7440ceb5b2a7aae9d54ddbe4419f59 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+       * src/closure.c (ruleset): Be a bitset.
+       (rulesetsize): Remove.
+
+       
 2002-03-04  Akim Demaille  <akim@epita.fr>
 
        * lib/bitset-int.h, lib/bitset.c, lib/bitset.h, lib/bitsetv.c,
index a90b867047119b96c0855f3b0ed9c6ef0ebe11d5..03222cac8cc34015d384d9cca692d8f926fceed8 100644 (file)
@@ -32,7 +32,7 @@
 short *itemset;
 int nitemset;
 
-static unsigned *ruleset;
+static bitset ruleset;
 
 /* internal data.  See comments before set_fderives and set_firsts.  */
 static bitset *fderives;
@@ -42,9 +42,6 @@ static unsigned int *firsts;
 #define FDERIVES(Var)   fderives[(Var) - ntokens]
 #define   FIRSTS(Var)   (firsts   + ((Var) - ntokens) * varsetsize)
 
-/* number of words required to hold a bit for each rule */
-static int rulesetsize;
-
 /* number of words required to hold a bit for each variable */
 static int varsetsize;
 \f
@@ -188,8 +185,8 @@ new_closure (int n)
 {
   itemset = XCALLOC (short, n);
 
-  rulesetsize = WORDSIZE (nrules + 1);
-  ruleset = XCALLOC (unsigned, rulesetsize);
+  ruleset = bitset_create (nrules + 1, BITSET_FIXED);
+  bitset_zero (ruleset);
 
   set_fderives ();
 }
@@ -213,28 +210,21 @@ closure (short *core, int n)
 
   if (n == 0)
     {
-      for (ruleno = 0; ruleno < nrules + 1; ++ruleno)
-       if (bitset_test (FDERIVES (start_symbol), ruleno))
-         SETBIT (ruleset, ruleno);
-       else
-         RESETBIT (ruleset, ruleno);
+      bitset_copy (ruleset, FDERIVES (start_symbol));
     }
   else
     {
-      for (r = 0; r < rulesetsize; ++r)
-       ruleset[r] = 0;
+      bitset_zero (ruleset);
 
       for (c = 0; c < n; ++c)
        if (ISVAR (ritem[core[c]]))
-         for (ruleno = 0; ruleno < nrules + 1; ++ruleno)
-           if (bitset_test (FDERIVES (ritem[core[c]]), ruleno))
-             SETBIT (ruleset, ruleno);
+         bitset_or (ruleset, ruleset, FDERIVES (ritem[core[c]]));
     }
 
   nitemset = 0;
   c = 0;
   for (ruleno = 0; ruleno < nrules + 1; ++ruleno)
-    if (BITISSET (ruleset, ruleno))
+    if (bitset_test (ruleset, ruleno))
       {
        int itemno = rules[ruleno].rhs;
        while (c < n && core[c] < itemno)
@@ -264,7 +254,8 @@ free_closure (void)
 {
   int i;
   XFREE (itemset);
-  XFREE (ruleset);
+
+  bitset_free (ruleset);
 
   for (i = 0 ; i < nvars; ++i)
     bitset_free (fderives[i]);