diff --git a/src/complain.c b/src/complain.c index 97af2f95..a42b6a06 100644 --- a/src/complain.c +++ b/src/complain.c @@ -72,8 +72,13 @@ begin_use_class (const char *s, FILE *out) { if (out == stderr) { - styled_ostream_begin_use_class (errstream, s); - styled_ostream_flush_to_current_style (errstream); + if (style_debug) + fprintf (out, "<%s>", s); + else + { + styled_ostream_begin_use_class (errstream, s); + styled_ostream_flush_to_current_style (errstream); + } } } @@ -82,8 +87,13 @@ end_use_class (const char *s, FILE *out) { if (out == stderr) { - styled_ostream_end_use_class (errstream, s); - styled_ostream_flush_to_current_style (errstream); + if (style_debug) + fprintf (out, "", s); + else + { + styled_ostream_end_use_class (errstream, s); + styled_ostream_flush_to_current_style (errstream); + } } } diff --git a/src/getargs.c b/src/getargs.c index 2a0493a1..d93020c5 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -45,6 +45,7 @@ bool no_lines_flag = false; bool token_table_flag = false; location yacc_loc = EMPTY_LOCATION_INIT; bool update_flag = false; /* for -u */ +bool style_debug = false; /* --style=debug. */ bool nondeterministic_parser = false; bool glr_parser = false; @@ -595,7 +596,13 @@ getargs_colors (int argc, char *argv[]) if (STRPREFIX_LIT ("--color=", arg)) handle_color_option (arg + strlen ("--color=")); else if (STRPREFIX_LIT ("--style=", arg)) - handle_style_option (arg + strlen ("--style=")); + { + const char *style = arg + strlen ("--style="); + if (STREQ (style, "debug")) + style_debug = true; + else + handle_style_option (style); + } } complain_init_color (); } diff --git a/src/getargs.h b/src/getargs.h index 2037c00a..58f082f8 100644 --- a/src/getargs.h +++ b/src/getargs.h @@ -41,7 +41,7 @@ extern bool no_lines_flag; /* for -l */ extern bool token_table_flag; /* for -k */ extern location yacc_loc; /* for -y */ extern bool update_flag; /* for -u */ - +extern bool style_debug; /* --style=debug. */ /* GLR_PARSER is true if the input file says to use the GLR (Generalized LR) parser, and to output some additional information used by the GLR algorithm. */ diff --git a/tests/diagnostics.at b/tests/diagnostics.at new file mode 100644 index 00000000..41bbe8a7 --- /dev/null +++ b/tests/diagnostics.at @@ -0,0 +1,71 @@ +# Checking diagnotics. -*- Autotest -*- + +# Copyright (C) 2019 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +AT_BANNER([[Diagnostics.]]) + +# AT_TEST([TITLE], [GRAMMAR], [OUTPUT-WITH-STYLE]) +m4_pushdef([AT_TEST], +[ +AT_SETUP([$1]) +AT_KEYWORDS([diagnostics]) + +AT_BISON_OPTION_PUSHDEFS + +AT_DATA_GRAMMAR([[input.y]], [$2]) + +AT_DATA([experr], [$3]) +AT_BISON_CHECK([-fcaret --style=debug -Wother input.y], [], [], [experr]) + +# When no style, same messages, except the style. +AT_CHECK([perl -pi -e 's{}{}g' experr]) +AT_BISON_CHECK([-fcaret -Wother input.y], [], [], [experr]) + +AT_BISON_OPTION_POPDEFS + +AT_CLEANUP +]) + + +## ---------- ## +## Warnings. ## +## ---------- ## + +AT_TEST([[Warnings]], +[[%token FOO FOO FOO +%token FOO FOO FOO +%% +exp:; +]], +[[input.y:9.12-14: warning: symbol FOO redeclared [-Wother] + %token FOO FOO FOO + ^~~ +input.y:9.16-18: warning: symbol FOO redeclared [-Wother] + %token FOO FOO FOO + ^~~ +input.y:10.8-10: warning: symbol FOO redeclared [-Wother] + %token FOO FOO FOO + ^~~ +input.y:10.13-15: warning: symbol FOO redeclared [-Wother] + %token FOO FOO FOO + ^~~ +input.y:10.18-20: warning: symbol FOO redeclared [-Wother] + %token FOO FOO FOO + ^~~ +]]) + + +m4_popdef([AT_TEST]) \ No newline at end of file diff --git a/tests/local.mk b/tests/local.mk index 03a29e5e..c8ee3f02 100644 --- a/tests/local.mk +++ b/tests/local.mk @@ -48,6 +48,7 @@ TESTSUITE_AT = \ %D%/calc.at \ %D%/conflicts.at \ %D%/cxx-type.at \ + %D%/diagnostics.at \ %D%/existing.at \ %D%/glr-regression.at \ %D%/headers.at \ diff --git a/tests/testsuite.at b/tests/testsuite.at index 71df4881..54f494fa 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -26,6 +26,9 @@ m4_include([named-refs.at]) # Output file names. m4_include([output.at]) +# Diagnostics. +m4_include([diagnostics.at]) + # Skeleton support. m4_include([skeletons.at])