]> 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:53:03 +0000 (14:53 +0000)
committerAkim Demaille <akim@epita.fr>
Wed, 28 Nov 2001 14:53:03 +0000 (14:53 +0000)
then bits in words, loop over bits in array.

ChangeLog
src/closure.c

index a4cf740657f2a6e4628bdb1d2bf8a83d8dc2734c..944950d1fe6dd0e522ca529e2bffb28adbb3ab90 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+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
index ad3a5be7af70a3870d6cbed9905646518285cd22..874bbbd5540d9ceae1221f0edcc552fd40a7e8d0 100644 (file)
@@ -242,7 +242,8 @@ closure (short *core, int n)
   /* Index over RULESET. */
   int r;
 
-  int itemno;
+  /* A bit index over RULESET. */
+  int b;
 
   if (trace_flag)
     {
@@ -271,27 +272,22 @@ closure (short *core, int n)
   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++;
+             c++;
            }
-
-         ruleno++;
+         itemset[itemsetsize] = itemno;
+         itemsetsize++;
        }
+
+      ruleno++;
     }
 
   while (c < n)