bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 3/4] warnings: be ready to print warnings categories


From: Akim Demaille
Subject: [PATCH 3/4] warnings: be ready to print warnings categories
Date: Fri, 29 Jun 2012 16:41:26 +0200

From: Victor Santet <address@hidden>

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 a84718b..0f00358 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 79f2017..e8c26d1 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 <tt>warnings_flag & Werror</tt>.  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 f5d3767..8596958 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 723870d..d656097 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 0d69e93..5613a92 100644
--- a/src/system.h
+++ b/src/system.h
@@ -39,6 +39,7 @@
 #include <stdlib.h>
 #include <string.h>
 
+#define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))
 #define STREQ(L, R)  (strcmp(L, R) == 0)
 #define STRNEQ(L, R) (!STREQ(L, R))
 
-- 
1.7.11.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]