bison-patches
[Top][All Lists]
Advanced

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

18-fyi-unlink-shifts.patch


From: Akim Demaille
Subject: 18-fyi-unlink-shifts.patch
Date: Mon, 10 Dec 2001 09:36:45 +0100

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        Now that states have a complete set of members, the linked list of
        shifts is useless: just fill directly the state's shifts member.
        
        * src/state.h (shifts): Remove the `next' member.
        * src/LR0.c (first_state, last_state): Remove.
        Adjust the callers.
        (augment_automaton): Don't look for the shifts that must be added
        a shift on EOF: it is those of the state we looked for!  But now,
        since shifts are attached, it is no longer needed to looking
        merely by its id: its number.
        
        
Index: src/LR0.c
--- src/LR0.c Sat, 08 Dec 2001 22:07:28 +0100 akim
+++ src/LR0.c Sat, 08 Dec 2001 22:25:42 +0100 akim
@@ -36,11 +36,9 @@
 int nstates;
 int final_state;
 static state_t *first_state = NULL;
-static shifts *first_shift = NULL;
 
 static state_t *this_state = NULL;
 static state_t *last_state = NULL;
-static shifts *last_shift = NULL;
 
 static int nshifts;
 static short *shift_symbol = NULL;
@@ -322,12 +320,6 @@
   p->number = this_state->number;
   shortcpy (p->shifts, shiftset, nshifts);
   this_state->shifts = p;
-
-  if (last_shift)
-    last_shift->next = p;
-  else
-    first_shift = p;
-  last_shift = p;
 }
 
 
@@ -364,9 +356,6 @@
   statep->shifts = sp;
   sp->number = nstates++;
   sp->shifts[0] = nstates;
-
-  last_shift->next = sp;
-  last_shift = sp;
 }
 
 
@@ -396,9 +385,6 @@
   statep->shifts = sp;
   sp->number = nstates++;
   sp->shifts[0] = nstates;
-
-  last_shift->next = sp;
-  last_shift = sp;
 }
 
 
@@ -446,10 +432,6 @@
       first_state->shifts = sp;
       sp->shifts[0] = nstates;
 
-      /* Initialize the chain of shifts with sp.  */
-      first_shift = sp;
-      last_shift = sp;
-
       /* Create the next-to-final state, with shift to
          what will be the final state.  */
       insert_start_shifting_state ();
@@ -473,29 +455,16 @@
             the final state.  */
          int i;
 
-         /* Find the shift that leads to this STATEP. */
-         shifts *sp = first_state->shifts;
-         shifts *sp1 = NULL;
-         shifts *sp2 = NULL;
-         while (sp->number < statep->number)
-           {
-             sp1 = sp;
-             sp = sp->next;
-           }
+         /* Find the shift of the inital state that leads to STATEP.  */
+         shifts *sp = statep->shifts;
 
-         sp2 = shifts_new (sp->nshifts + 1);
-         sp2->number = statep->number;
-         statep->shifts = sp2;
-         sp2->shifts[0] = nstates;
+         shifts *sp1 = shifts_new (sp->nshifts + 1);
+         sp1->number = statep->number;
+         statep->shifts = sp1;
+         sp1->shifts[0] = nstates;
          for (i = sp->nshifts; i > 0; i--)
-           sp2->shifts[i] = sp->shifts[i - 1];
+           sp1->shifts[i] = sp->shifts[i - 1];
 
-         /* Patch sp2 into the chain of shifts in place of sp,
-            following sp1.  */
-         sp2->next = sp->next;
-         sp1->next = sp2;
-         if (sp == last_shift)
-           last_shift = sp2;
          XFREE (sp);
 
          insert_eof_shifting_state ();
@@ -505,31 +474,23 @@
          /* There is no state for `start: start . ...'. */
          int i, k;
          shifts *sp = first_state->shifts;
-         shifts *sp2 = NULL;
+         shifts *sp1 = NULL;
 
-         /* There is no next-to-final state as yet.  */
-         /* Add one more shift in first_shift,
-            going to the next-to-final state (yet to be made).  */
-         sp2 = shifts_new (sp->nshifts + 1);
-         first_state->shifts = sp2;
+         /* Add one more shift to the initial state, going to the
+            next-to-final state (yet to be made).  */
+         sp1 = shifts_new (sp->nshifts + 1);
+         first_state->shifts = sp1;
          /* Stick this shift into the vector at the proper place.  */
          statep = first_state->next;
          for (k = 0, i = 0; i < sp->nshifts; k++, i++)
            {
              if (statep->accessing_symbol > start_symbol && i == k)
-               sp2->shifts[k++] = nstates;
-             sp2->shifts[k] = sp->shifts[i];
+               sp1->shifts[k++] = nstates;
+             sp1->shifts[k] = sp->shifts[i];
              statep = statep->next;
            }
          if (i == k)
-           sp2->shifts[k++] = nstates;
-
-         /* Patch sp2 into the chain of shifts
-            in place of sp, at the beginning.  */
-         sp2->next = sp->next;
-         first_shift = sp2;
-         if (last_shift == sp)
-           last_shift = sp2;
+           sp1->shifts[k++] = nstates;
 
          XFREE (sp);
 
Index: src/state.h
--- src/state.h Sat, 08 Dec 2001 15:51:17 +0100 akim
+++ src/state.h Sat, 08 Dec 2001 22:26:02 +0100 akim
@@ -95,7 +95,6 @@
 
 typedef struct shifts
 {
-  struct shifts *next;
   short number;
   short nshifts;
   short shifts[1];



reply via email to

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