From b6403170609485abe21038a65255ae4d3825ec00 Mon Sep 17 00:00:00 2001 From: Victor Santet Date: Fri, 29 Jun 2012 15:22:09 +0200 Subject: [PATCH] warnings: be ready to print warnings categories A function to print warnings categories, like -Wyacc, -Wother, etc. * src/complain.h, src/complain.c (print_warning_categories): New function. * src/output.c (ARRAY_CARDINALITY): Move it to file 'src/system.h'. * src/complain.h (enum warnings): New value, 'silent', "complain" must not display the warning type. --- src/complain.c | 27 ++++++++++++++++++++++++++- src/complain.h | 25 +++++++++++++++---------- src/getargs.c | 1 - src/output.c | 2 -- src/system.h | 1 + 5 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/complain.c b/src/complain.c index a84718be..0f00358a 100644 --- a/src/complain.c +++ b/src/complain.c @@ -34,7 +34,32 @@ warnings warnings_flag = Wconflicts_sr | Wconflicts_rr | Wother; bool complaint_issued; static unsigned *indent_ptr = 0; - +void +warnings_print_categories (warnings warn_flags) +{ + if (! (warn_flags & silent)) + { + char const *warn_names[] = + { + "midrule-values", + "yacc", + "conflicts-sr", + "conflicts-rr", + "other" + }; + + bool any = false; + int i; + for (i = 0; i < ARRAY_CARDINALITY (warn_names); ++i) + if (warn_flags & 1 << i) + { + fprintf (stderr, "%s-W%s", any ? ", " : " [", warn_names[i]); + any = true; + } + if (any) + fprintf (stderr, "]"); + } +} /** Report an error message. * diff --git a/src/complain.h b/src/complain.h index 79f2017e..e8c26d16 100644 --- a/src/complain.h +++ b/src/complain.h @@ -31,21 +31,26 @@ extern "C" { typedef enum { - Wnone = 0, /**< Issue no warnings. */ - Werror = 1 << 0, /**< Warnings are treated as errors. */ - Wmidrule_values = 1 << 1, /**< Unset or unused midrule values. */ - Wyacc = 1 << 2, /**< POSIXME. */ - Wconflicts_sr = 1 << 3, /**< S/R conflicts. */ - Wconflicts_rr = 1 << 4, /**< R/R conflicts. */ - Wother = 1 << 5, /**< All other warnings. */ - complaint = 1 << 6, /**< All complaints. */ - fatal = 1 << 7, /**< All fatal errors. */ - Wall = ~Werror /**< All above warnings. */ + Wnone = 0, /**< Issue no warnings. */ + Wmidrule_values = 1 << 0, /**< Unset or unused midrule values. */ + Wyacc = 1 << 1, /**< POSIXME. */ + Wconflicts_sr = 1 << 2, /**< S/R conflicts. */ + Wconflicts_rr = 1 << 3, /**< R/R conflicts. */ + Wother = 1 << 4, /**< All other warnings. */ + + Werror = 1 << 10, /**< Warnings are treated as errors. */ + complaint = 1 << 11, /**< All complaints. */ + fatal = 1 << 12, /**< All fatal errors. */ + silent = 1 << 13, /**< Do not display the warning type. */ + Wall = ~Werror /**< All above warnings. */ } warnings; /** What warnings are issued. */ extern warnings warnings_flag; +/** Display a "[-Wyacc]" like message on stderr. */ +void warnings_print_categories (warnings warn_flags); + /** Record that a warning is about to be issued, and treat it as an error if warnings_flag & Werror. This is exported only for the sake of Yacc-compatible conflict reports in conflicts.c. diff --git a/src/getargs.c b/src/getargs.c index f5d37676..8596958c 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -251,7 +251,6 @@ static const int warnings_types[] = ARGMATCH_VERIFY (warnings_args, warnings_types); - /*-------------------------------------------. | Display the help message and exit STATUS. | `-------------------------------------------*/ diff --git a/src/output.c b/src/output.c index 723870de..d6560970 100644 --- a/src/output.c +++ b/src/output.c @@ -42,8 +42,6 @@ #include "symtab.h" #include "tables.h" -# define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) - static struct obstack format_obstack; diff --git a/src/system.h b/src/system.h index 0d69e93e..5613a92f 100644 --- a/src/system.h +++ b/src/system.h @@ -39,6 +39,7 @@ #include #include +#define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) #define STREQ(L, R) (strcmp(L, R) == 0) #define STRNEQ(L, R) (!STREQ(L, R)) -- 2.47.2