]> git.saurik.com Git - bison.git/blobdiff - src/conflicts.c
Various DJGGP specific issues in /djgpp.
[bison.git] / src / conflicts.c
index ede39690c3aaeb7fcc9604965f2b6060dc873bbb..e2e9855f513d44197b52ce8411bfbcd19c13635b 100644 (file)
@@ -1,6 +1,6 @@
 /* Find and resolve or report look-ahead conflicts for bison,
 
 /* Find and resolve or report look-ahead conflicts for bison,
 
-   Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2003, 2004
+   Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2003, 2004, 2005, 2006
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -20,6 +20,7 @@
    Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.  */
 
    Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.  */
 
+#include <config.h>
 #include "system.h"
 
 #include <bitset.h>
 #include "system.h"
 
 #include <bitset.h>
@@ -215,6 +216,9 @@ resolve_sr_conflict (state *s, int ruleno, symbol **errors)
 
          switch (symbols[i]->assoc)
            {
 
          switch (symbols[i]->assoc)
            {
+           default:
+             abort ();
+
            case right_assoc:
              log_resolution (redrule, i, right_resolution);
              flush_reduce (look_ahead_tokens, i);
            case right_assoc:
              log_resolution (redrule, i, right_resolution);
              flush_reduce (look_ahead_tokens, i);
@@ -232,9 +236,6 @@ resolve_sr_conflict (state *s, int ruleno, symbol **errors)
              /* Record an explicit error for this token.  */
              errors[nerrs++] = symbols[i];
              break;
              /* Record an explicit error for this token.  */
              errors[nerrs++] = symbols[i];
              break;
-
-           case undef_assoc:
-             abort ();
            }
       }
 
            }
       }
 
@@ -464,11 +465,13 @@ conflicts_print (void)
   /* Is the number of SR conflicts OK?  Either EXPECTED_CONFLICTS is
      not set, and then we want 0 SR, or else it is specified, in which
      case we want equality.  */
   /* Is the number of SR conflicts OK?  Either EXPECTED_CONFLICTS is
      not set, and then we want 0 SR, or else it is specified, in which
      case we want equality.  */
-  bool src_ok = false;
-  bool rrc_ok = false;
+  bool src_ok;
+  bool rrc_ok;
 
   int src_total = 0;
   int rrc_total = 0;
 
   int src_total = 0;
   int rrc_total = 0;
+  int src_expected;
+  int rrc_expected;
 
   /* Conflicts by state.  */
   {
 
   /* Conflicts by state.  */
   {
@@ -488,33 +491,36 @@ conflicts_print (void)
       expected_rr_conflicts = -1;
     }
 
       expected_rr_conflicts = -1;
     }
 
-  src_ok =
-    src_total == (expected_sr_conflicts == -1 ? 0 : expected_sr_conflicts);
-  rrc_ok =
-    rrc_total == (expected_rr_conflicts == -1 ? 0 : expected_rr_conflicts);
+  src_expected = expected_sr_conflicts == -1 ? 0 : expected_sr_conflicts;
+  rrc_expected = expected_rr_conflicts == -1 ? 0 : expected_rr_conflicts;
+  src_ok = src_total == src_expected;
+  rrc_ok = rrc_total == rrc_expected;
 
   /* If there are as many RR conflicts and SR conflicts as
      expected, then there is nothing to report.  */
 
   /* If there are as many RR conflicts and SR conflicts as
      expected, then there is nothing to report.  */
-  if (rrc_ok && src_ok)
+  if (rrc_ok & src_ok)
     return;
 
   /* Report the total number of conflicts on STDERR.  */
     return;
 
   /* Report the total number of conflicts on STDERR.  */
-  if (! yacc_flag)
-    fprintf (stderr, "%s: ", current_file);
-  conflict_report (stderr, src_total, rrc_total);
+  if (src_total | rrc_total)
+    {
+      if (! yacc_flag)
+       fprintf (stderr, "%s: ", current_file);
+      conflict_report (stderr, src_total, rrc_total);
+    }
 
   if (expected_sr_conflicts != -1 || expected_rr_conflicts != -1)
     {
 
   if (expected_sr_conflicts != -1 || expected_rr_conflicts != -1)
     {
-      int sr = expected_sr_conflicts == -1 ? 0 : expected_sr_conflicts;
-      int rr = expected_rr_conflicts == -1 ? 0 : expected_rr_conflicts;
       if (! src_ok)
       if (! src_ok)
-       warn (ngettext ("expected %d shift/reduce conflict",
-                       "expected %d shift/reduce conflicts",
-                       sr), sr);
+       complain (ngettext ("expected %d shift/reduce conflict",
+                           "expected %d shift/reduce conflicts",
+                           src_expected),
+                 src_expected);
       if (! rrc_ok)
       if (! rrc_ok)
-       warn (ngettext ("expected %d reduce/reduce conflict",
-                       "expected %d reduce/reduce conflicts",
-                       rr), rr);
+       complain (ngettext ("expected %d reduce/reduce conflict",
+                           "expected %d reduce/reduce conflicts",
+                           rrc_expected),
+                 rrc_expected);
     }
 }
 
     }
 }