]> git.saurik.com Git - bison.git/commitdiff
* src/LR0.c (allocate_itemsets): Don't loop over ritem: loop over
authorAkim Demaille <akim@epita.fr>
Sun, 7 Apr 2002 17:38:37 +0000 (17:38 +0000)
committerAkim Demaille <akim@epita.fr>
Sun, 7 Apr 2002 17:38:37 +0000 (17:38 +0000)
the RHS of the rules.
* src/output.c (output_gram): Likewise.

ChangeLog
src/LR0.c
src/output.c

index bf4d384eb952899b3becf64180267844a5565422..8a8721a641ff4d4fc612668e5d36ad8c370a1a22 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+       * src/LR0.c (allocate_itemsets): Don't loop over ritem: loop over
+       the RHS of the rules.
+       * src/output.c (output_gram): Likewise.
+
 2002-04-07  Akim Demaille  <akim@epita.fr>
 
        * src/gram.h (rule_t): `lhs' is now a pointer to the symbol's
index 02798cd9eb6c77203407eb692caf16f177d56262..15b29f3010d851ddf2228de254c23bccbefd621e 100644 (file)
--- a/src/LR0.c
+++ b/src/LR0.c
@@ -68,7 +68,8 @@ static state_t **state_hash = NULL;
 static void
 allocate_itemsets (void)
 {
-  int i;
+  int i, r;
+  short *rhsp;
 
   /* Count the number of occurrences of all the symbols in RITEMS.
      Note that useless productions (hence useless nonterminals) are
@@ -77,11 +78,11 @@ allocate_itemsets (void)
   int count = 0;
   short *symbol_count = XCALLOC (short, nsyms + nuseless_nonterminals);
 
-  for (i = 0; i < nritems; ++i)
-    if (ritem[i] >= 0)
+  for (r = 1; r < nrules + 1; ++r)
+    for (rhsp = rules[r].rhs; *rhsp >= 0; ++rhsp)
       {
        count++;
-       symbol_count[ritem[i]]++;
+       symbol_count[*rhsp]++;
       }
 
   /* See comments before new_itemsets.  All the vectors of items
index acb453c63f496514ab269f9d164d2c506292c878..4018fba3f8530976b5050b8f69174dd4f9b07630 100644 (file)
@@ -202,14 +202,18 @@ output_gram (void)
   muscle_insert ("prhs", obstack_finish (&format_obstack));
 
   {
-    short *yyrhs;
-    int i;
-
-    yyrhs = XMALLOC (short, nritems);
-
-    for (i = 1; i < nritems; ++i)
-      yyrhs[i] = ritem[i] >= 0 ? ritem[i] : -1;
+    short *rhsp;
+    int r;
+    int i = 0;
+    short *yyrhs = XMALLOC (short, nritems);
 
+    for (r = 1; r < nrules + 1; ++r)
+      {
+       for (rhsp = rules[r].rhs; *rhsp >= 0; ++rhsp)
+         yyrhs[i++] = *rhsp;
+       yyrhs[i++] = -1;
+      }
+    assert (i == nritems);
     output_table_data (&format_obstack, yyrhs,
                       ritem[0], 1, nritems);
     muscle_insert ("rhs", obstack_finish (&format_obstack));