]> git.saurik.com Git - bison.git/commitdiff
* src/state.h (SHIFT_DISABLE, SHIFT_IS_DISABLED): New.
authorAkim Demaille <akim@epita.fr>
Wed, 5 Dec 2001 09:32:23 +0000 (09:32 +0000)
committerAkim Demaille <akim@epita.fr>
Wed, 5 Dec 2001 09:32:23 +0000 (09:32 +0000)
* src/conflicts.c: Use it.
Restore a few missing `if (!SHIFT_IS_DISABLED)' which were
incorrectly ``simplified''.

ChangeLog
src/conflicts.c
src/state.h

index 316fd5b95eb484763ed0dc93506042c6c7b0d37f..eb53eab6ff0d6e05feb31f2e46f8646367546f18 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+       * 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''.
+
+       
 2001-12-05  Akim Demaille  <akim@epita.fr>
 
        * src/conflicts.c (flush_shift, resolve_sr_conflict): De-obfuscate
index b8689dadc48c293f679218523eccbe48b4f43c06..a9bf9519c3bd011d64470dbbd8583282a61fa233 100644 (file)
@@ -62,8 +62,8 @@ flush_shift (int state, int token)
 
   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 @@ set_conflicts (int state)
   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 @@ count_sr_conflicts (int state)
     }
 
   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 @@ print_reductions (FILE *out, int state)
   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 @@ print_reductions (FILE *out, int state)
 
       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 535742971c0ecdddfeebab424db58e484eecad70..3bf9022f0135189204c079d518eaf6a1515c17e0 100644 (file)
@@ -146,6 +146,15 @@ typedef struct shifts
 #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.  |