]> git.saurik.com Git - bison.git/commitdiff
* src/LR0.h (first_shift, first_reduction): Remove.
authorAkim Demaille <akim@epita.fr>
Mon, 10 Dec 2001 09:08:28 +0000 (09:08 +0000)
committerAkim Demaille <akim@epita.fr>
Mon, 10 Dec 2001 09:08:28 +0000 (09:08 +0000)
* src/lalr.c: Don't use first_shift: find shifts through the
states.

ChangeLog
src/LR0.h
src/lalr.c

index f80e35c6e0a77b90769643ac4a1437f8ef36aa3f..0285745c45ce73096a963986fed57555c6378179 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+       * src/LR0.h (first_shift, first_reduction): Remove.
+       * src/lalr.c: Don't use first_shift: find shifts through the
+       states.
+
+       
 2001-12-10  Akim Demaille  <akim@epita.fr>
 
        * src/LR0.c: Attach shifts to states as soon as they are
index f6f3696a56884fde3a4f760b8fecaf3aa0c1026c..14a0fb254eaa86f7d4a0eae094714e0e12d1341b 100644 (file)
--- a/src/LR0.h
+++ b/src/LR0.h
@@ -1,5 +1,5 @@
 /* Generate the nondeterministic finite state machine for bison,
-   Copyright 1984, 1986, 1989, 2000 Free Software Foundation, Inc.
+   Copyright 1984, 1986, 1989, 2000, 2001  Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -28,7 +28,5 @@ void generate_states PARAMS ((void));
 extern int nstates;
 extern int final_state;
 extern state_t *first_state;
-extern shifts *first_shift;
-extern reductions *first_reduction;
 
 #endif /* !LR0_H_ */
index 2a5156ac19c38a134b746ada12cabb4e8de7db56..6042eca8f8d7e658b4f505c74dc8d93072677a74 100644 (file)
@@ -150,12 +150,6 @@ set_state_table (void)
       state_table[sp->number] = sp;
   }
 
-  {
-    shifts *sp;
-    for (sp = first_shift; sp; sp = sp->next)
-      assert (state_table[sp->number]->shifts == sp);
-  }
-
   /* Pessimization, but simplification of the code: make sure all the
      states have a shifts, even if reduced to 0 shifts.  */
   {
@@ -228,29 +222,31 @@ initialize_LA (void)
 static void
 set_goto_map (void)
 {
-  shifts *sp;
+  int state;
   int i;
   int symbol;
   int k;
   short *temp_map;
   int state2;
-  int state1;
 
   goto_map = XCALLOC (short, nvars + 1) - ntokens;
   temp_map = XCALLOC (short, nvars + 1) - ntokens;
 
   ngotos = 0;
-  for (sp = first_shift; sp; sp = sp->next)
-    for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
-      {
-       symbol = state_table[sp->shifts[i]]->accessing_symbol;
+  for (state = 0; state < nstates; ++state)
+    {
+      shifts *sp = state_table[state]->shifts;
+      for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
+       {
+         symbol = state_table[sp->shifts[i]]->accessing_symbol;
 
-       if (ngotos == MAXSHORT)
-         fatal (_("too many gotos (max %d)"), MAXSHORT);
+         if (ngotos == MAXSHORT)
+           fatal (_("too many gotos (max %d)"), MAXSHORT);
 
-       ngotos++;
-       goto_map[symbol]++;
-      }
+         ngotos++;
+         goto_map[symbol]++;
+       }
+    }
 
   k = 0;
   for (i = ntokens; i < nsyms; i++)
@@ -268,17 +264,20 @@ set_goto_map (void)
   from_state = XCALLOC (short, ngotos);
   to_state = XCALLOC (short, ngotos);
 
-  for (sp = first_shift; sp; sp = sp->next)
+  for (state = 0; state < nstates; ++state)
     {
-      state1 = sp->number;
+      shifts *sp = state_table[state]->shifts;
       for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
        {
-         state2 = sp->shifts[i];
-         symbol = state_table[state2]->accessing_symbol;
+         for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
+           {
+             state2 = sp->shifts[i];
+             symbol = state_table[state2]->accessing_symbol;
 
-         k = temp_map[symbol]++;
-         from_state[k] = state1;
-         to_state[k] = state2;
+             k = temp_map[symbol]++;
+             from_state[k] = state;
+             to_state[k] = state2;
+           }
        }
     }