X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/da2a7671e11663b9ad941aa3e1f3014d6ad950cb..d6b771c345a389742bfcd73ff13dac1d4f016c88:/src/conflicts.c diff --git a/src/conflicts.c b/src/conflicts.c index bcd6c846..13121f6e 100644 --- a/src/conflicts.c +++ b/src/conflicts.c @@ -1,6 +1,6 @@ /* 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. @@ -17,9 +17,10 @@ You should have received a copy of the GNU General Public License along with Bison; see the file COPYING. If not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ + Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ +#include #include "system.h" #include @@ -39,7 +40,7 @@ int expected_sr_conflicts = -1; int expected_rr_conflicts = -1; static char *conflicts; -struct obstack solved_conflicts_obstack; +static struct obstack solved_conflicts_obstack; static bitset shift_set; static bitset look_ahead_set; @@ -215,6 +216,9 @@ resolve_sr_conflict (state *s, int ruleno, symbol **errors) switch (symbols[i]->assoc) { + default: + abort (); + 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; - - 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. */ - bool src_ok = false; - bool rrc_ok = false; + bool src_ok; + bool rrc_ok; int src_total = 0; int rrc_total = 0; + int src_expected; + int rrc_expected; /* Conflicts by state. */ { @@ -488,33 +491,36 @@ conflicts_print (void) 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 (rrc_ok && src_ok) + if (rrc_ok & src_ok) 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) { - int sr = expected_sr_conflicts == -1 ? 0 : expected_sr_conflicts; - int rr = expected_rr_conflicts == -1 ? 0 : expected_rr_conflicts; 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) - 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); } }