bison-patches
[Top][All Lists]
Advanced

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

21-fyi-disable-shift.patch


From: Akim Demaille
Subject: 21-fyi-disable-shift.patch
Date: Wed, 05 Dec 2001 08:25:47 +0100

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        * src/state.h (SHIFT_DISABLE, SHIFT_IS_DISABLED): New.
        * src/conflicts.c: Use it.
        Restore a few missing `if (!SHIFT_IS_DISABLED)' which were
        incorrectly ``simplified''.
        
        
Index: src/conflicts.c
--- src/conflicts.c Sat, 01 Dec 2001 19:24:44 +0100 akim
+++ src/conflicts.c Sat, 01 Dec 2001 19:36:14 +0100 akim
@@ -62,8 +62,8 @@
 
   if (shiftp)
     for (i = 0; i < shiftp->nshifts; i++)
-      if (shiftp->shifts[i] && SHIFT_SYMBOL (shiftp, i) == token)
-       shiftp->shifts[i] = 0;
+      if (!SHIFT_IS_DISABLED (shiftp, i) && SHIFT_SYMBOL (shiftp, i) == token)
+       SHIFT_DISABLE (shiftp, i);
 }
 
 
@@ -176,7 +176,8 @@
   shiftp = state_table[state].shift_table;
   if (shiftp)
     for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
-      SETBIT (lookaheadset, SHIFT_SYMBOL (shiftp, i));
+      if (!SHIFT_IS_DISABLED (shiftp, i))
+       SETBIT (lookaheadset, SHIFT_SYMBOL (shiftp, i));
 
   /* Loop over all rules which require lookahead in this state.  First
      check for shift-reduce conflict, and try to resolve using
@@ -245,7 +246,8 @@
     }
 
   for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
-    SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
+    if (!SHIFT_IS_DISABLED (shiftp, i))
+      SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
 
   for (i = state_table[state].lookaheads;
        i < state_table[state + 1].lookaheads;
@@ -436,13 +438,14 @@
   shiftp = state_table[state].shift_table;
   if (shiftp)
     for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
-      {
-       /* if this state has a shift for the error token, don't use a
-          default rule.  */
-       if (SHIFT_IS_ERROR (shiftp, i))
-         nodefault = 1;
-       SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
-      }
+      if (!SHIFT_IS_DISABLED (shiftp, i))
+       {
+         /* if this state has a shift for the error token, don't use a
+            default rule.  */
+         if (SHIFT_IS_ERROR (shiftp, i))
+           nodefault = 1;
+         SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
+       }
 
   errp = err_table[state];
   if (errp)
@@ -506,7 +509,8 @@
 
       if (shiftp)
        for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
-         SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
+         if (!SHIFT_IS_DISABLED (shiftp, i))
+           SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
 
       for (i = 0; i < ntokens; i++)
        {
Index: src/state.h
--- src/state.h Sat, 01 Dec 2001 19:13:37 +0100 akim
+++ src/state.h Sat, 01 Dec 2001 19:29:32 +0100 akim
@@ -146,6 +146,15 @@
 #define SHIFT_IS_ERROR(Shifts, Shift) \
   (SHIFT_SYMBOL (Shifts, Shift) == error_token_number)
 
+/* When resolving a SR conflicts, if the reduction wins, the shift is
+   disabled.  */
+
+#define SHIFT_DISABLE(Shifts, Shift) \
+  (Shifts->shifts[Shift] = 0)
+
+#define SHIFT_IS_DISABLED(Shifts, Shift) \
+  (Shifts->shifts[Shift] == 0)
+
 
 /*-------.
 | Errs.  |



reply via email to

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