X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/38609c34559fb86f2fb827dfed929ba9c396dc6f..43ca804096bad13b12d0933d14499c142f451af9:/src/conflicts.c diff --git a/src/conflicts.c b/src/conflicts.c index 98959cff..ba0b6ed3 100644 --- a/src/conflicts.c +++ b/src/conflicts.c @@ -1,7 +1,7 @@ /* Find and resolve or report lookahead conflicts for bison, - Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2003, 2004, 2005, - 2006, 2007, 2009 Free Software Foundation, Inc. + Copyright (C) 1984, 1989, 1992, 2000-2007, 2009-2012 Free Software + Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -73,7 +73,7 @@ log_resolution (rule *r, symbol_number token, { case shift_resolution: case right_resolution: - obstack_fgrow2 (&solved_conflicts_obstack, + obstack_printf (&solved_conflicts_obstack, _(" Conflict between rule %d and token %s" " resolved as shift"), r->number, @@ -82,7 +82,7 @@ log_resolution (rule *r, symbol_number token, case reduce_resolution: case left_resolution: - obstack_fgrow2 (&solved_conflicts_obstack, + obstack_printf (&solved_conflicts_obstack, _(" Conflict between rule %d and token %s" " resolved as reduce"), r->number, @@ -90,7 +90,7 @@ log_resolution (rule *r, symbol_number token, break; case nonassoc_resolution: - obstack_fgrow2 (&solved_conflicts_obstack, + obstack_printf (&solved_conflicts_obstack, _(" Conflict between rule %d and token %s" " resolved as an error"), r->number, @@ -102,33 +102,33 @@ log_resolution (rule *r, symbol_number token, switch (resolution) { case shift_resolution: - obstack_fgrow2 (&solved_conflicts_obstack, + obstack_printf (&solved_conflicts_obstack, " (%s < %s)", r->prec->tag, symbols[token]->tag); break; case reduce_resolution: - obstack_fgrow2 (&solved_conflicts_obstack, + obstack_printf (&solved_conflicts_obstack, " (%s < %s)", symbols[token]->tag, r->prec->tag); break; case left_resolution: - obstack_fgrow1 (&solved_conflicts_obstack, + obstack_printf (&solved_conflicts_obstack, " (%%left %s)", symbols[token]->tag); break; case right_resolution: - obstack_fgrow1 (&solved_conflicts_obstack, + obstack_printf (&solved_conflicts_obstack, " (%%right %s)", symbols[token]->tag); break; case nonassoc_resolution: - obstack_fgrow1 (&solved_conflicts_obstack, + obstack_printf (&solved_conflicts_obstack, " (%%nonassoc %s)", symbols[token]->tag); break; @@ -145,7 +145,7 @@ log_resolution (rule *r, symbol_number token, { case shift_resolution: case right_resolution: - obstack_fgrow2 (&solved_conflicts_xml_obstack, + obstack_printf (&solved_conflicts_xml_obstack, " ", r->number, @@ -154,7 +154,7 @@ log_resolution (rule *r, symbol_number token, case reduce_resolution: case left_resolution: - obstack_fgrow2 (&solved_conflicts_xml_obstack, + obstack_printf (&solved_conflicts_xml_obstack, " ", r->number, @@ -162,7 +162,7 @@ log_resolution (rule *r, symbol_number token, break; case nonassoc_resolution: - obstack_fgrow2 (&solved_conflicts_xml_obstack, + obstack_printf (&solved_conflicts_xml_obstack, " ", r->number, @@ -174,33 +174,33 @@ log_resolution (rule *r, symbol_number token, switch (resolution) { case shift_resolution: - obstack_fgrow2 (&solved_conflicts_xml_obstack, + obstack_printf (&solved_conflicts_xml_obstack, "%s < %s", xml_escape_n (0, r->prec->tag), xml_escape_n (1, symbols[token]->tag)); break; case reduce_resolution: - obstack_fgrow2 (&solved_conflicts_xml_obstack, + obstack_printf (&solved_conflicts_xml_obstack, "%s < %s", xml_escape_n (0, symbols[token]->tag), xml_escape_n (1, r->prec->tag)); break; case left_resolution: - obstack_fgrow1 (&solved_conflicts_xml_obstack, + obstack_printf (&solved_conflicts_xml_obstack, "%%left %s", xml_escape (symbols[token]->tag)); break; case right_resolution: - obstack_fgrow1 (&solved_conflicts_xml_obstack, + obstack_printf (&solved_conflicts_xml_obstack, "%%right %s", xml_escape (symbols[token]->tag)); break; case nonassoc_resolution: - obstack_fgrow1 (&solved_conflicts_xml_obstack, + obstack_printf (&solved_conflicts_xml_obstack, "%%nonassoc %s", xml_escape (symbols[token]->tag)); break; @@ -594,8 +594,17 @@ conflicts_print (void) return; /* Report the total number of conflicts on STDERR. */ + if (expected_sr_conflicts == -1 && expected_rr_conflicts == -1) + { + if (!(warnings_flag & warnings_conflicts_sr)) + src_total = 0; + if (!(warnings_flag & warnings_conflicts_rr)) + rrc_total = 0; + } if (src_total | rrc_total) { + if (expected_sr_conflicts == -1 && expected_rr_conflicts == -1) + set_warning_issued (); if (! yacc_flag) fprintf (stderr, "%s: ", current_file); conflict_report (stderr, src_total, rrc_total);