bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

13-fyi-private-first-shift.patch


From: Akim Demaille
Subject: 13-fyi-private-first-shift.patch
Date: Mon, 10 Dec 2001 09:36:19 +0100

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        * src/LR0.h (first_shift, first_reduction): Remove.
        * src/lalr.c: Don't use first_shift: find shifts through the
        states.
        
        
Index: src/LR0.h
--- src/LR0.h Sat, 08 Dec 2001 13:33:23 +0100 akim
+++ src/LR0.h Sat, 08 Dec 2001 20:34:17 +0100 akim
@@ -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 @@
 extern int nstates;
 extern int final_state;
 extern state_t *first_state;
-extern shifts *first_shift;
-extern reductions *first_reduction;
 
 #endif /* !LR0_H_ */
Index: src/lalr.c
--- src/lalr.c Sat, 08 Dec 2001 19:06:46 +0100 akim
+++ src/lalr.c Sat, 08 Dec 2001 20:31:44 +0100 akim
@@ -150,12 +150,6 @@
       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 @@
 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 @@
   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;
+           }
        }
     }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]