]> git.saurik.com Git - bison.git/commitdiff
* src/closure.c (closure): Instead of looping over word in array
authorAkim Demaille <akim@epita.fr>
Wed, 28 Nov 2001 14:57:16 +0000 (14:57 +0000)
committerAkim Demaille <akim@epita.fr>
Wed, 28 Nov 2001 14:57:16 +0000 (14:57 +0000)
then bits in words, loop over bits in array.

ChangeLog
src/closure.c

index 291d78936c7fc24a30ee19be2f7a2a86f7d7a0c6..b89a11cb3927152460f6c110bce77a370a6af800 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,10 +1,14 @@
+2001-11-28  Akim Demaille  <akim@epita.fr>
+
+       * src/closure.c (closure): Instead of looping over word in array
+       then bits in words, loop over bits in array.
+
 2001-11-28  Akim Demaille  <akim@epita.fr>
 
        * src/closure.c (closure): No longer optimize the special case
        where all the bits of `ruleset[r]' are set to 0, to make the code
        clearer.
 
 2001-11-28  Akim Demaille  <akim@epita.fr>
 
        * src/closure.c (closure): No longer optimize the special case
        where all the bits of `ruleset[r]' are set to 0, to make the code
        clearer.
 
-       
 2001-11-28  Akim Demaille  <akim@epita.fr>
 
        * src/closure.c (closure): `r' and `c' are new variables, used to
 2001-11-28  Akim Demaille  <akim@epita.fr>
 
        * src/closure.c (closure): `r' and `c' are new variables, used to
index ad3a5be7af70a3870d6cbed9905646518285cd22..874bbbd5540d9ceae1221f0edcc552fd40a7e8d0 100644 (file)
@@ -242,7 +242,8 @@ closure (short *core, int n)
   /* Index over RULESET. */
   int r;
 
   /* Index over RULESET. */
   int r;
 
-  int itemno;
+  /* A bit index over RULESET. */
+  int b;
 
   if (trace_flag)
     {
 
   if (trace_flag)
     {
@@ -271,27 +272,22 @@ closure (short *core, int n)
   ruleno = 0;
   itemsetsize = 0;
   c = 0;
   ruleno = 0;
   itemsetsize = 0;
   c = 0;
-  for (r = 0; r < rulesetsize; ++r)
+  for (b = 0; b < rulesetsize * BITS_PER_WORD; ++b)
     {
     {
-      int b;
-
-      for (b = 0; b < BITS_PER_WORD; b++)
+      if (BITISSET (ruleset, b))
        {
        {
-         if (ruleset[r] & (1 << b))
+         int itemno = rule_table[ruleno].rhs;
+         while (c < n && core[c] < itemno)
            {
            {
-             itemno = rule_table[ruleno].rhs;
-             while (c < n && core[c] < itemno)
-               {
-                 itemset[itemsetsize] = core[c];
-                 itemsetsize++;
-                 c++;
-               }
-             itemset[itemsetsize] = itemno;
+             itemset[itemsetsize] = core[c];
              itemsetsize++;
              itemsetsize++;
+             c++;
            }
            }
-
-         ruleno++;
+         itemset[itemsetsize] = itemno;
+         itemsetsize++;
        }
        }
+
+      ruleno++;
     }
 
   while (c < n)
     }
 
   while (c < n)