]> git.saurik.com Git - bison.git/commitdiff
warnings: be ready to print warnings categories
authorVictor Santet <victor.santet@epita.fr>
Fri, 29 Jun 2012 13:22:09 +0000 (15:22 +0200)
committerAkim Demaille <akim@lrde.epita.fr>
Fri, 29 Jun 2012 14:34:22 +0000 (16:34 +0200)
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
src/complain.h
src/getargs.c
src/output.c
src/system.h

index a84718bef001b66c77b6ac8c1c580eec4dd1201a..0f00358a261ad04058cafed7bae37027b9007260 100644 (file)
@@ -34,7 +34,32 @@ warnings warnings_flag = Wconflicts_sr | Wconflicts_rr | Wother;
 bool complaint_issued;
 static unsigned *indent_ptr = 0;
 
-\f
+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.
  *
index 79f2017eb658f372f780e613e05cc923c9e5ae01..e8c26d16ae1440a087f32f8afdca6e59bee698d5 100644 (file)
@@ -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.
index f5d37676093f128afa8e39caf82c1bf5b9d9e6d1..8596958cf5a8eea4f76e028f3989ef4f774d8281 100644 (file)
@@ -251,7 +251,6 @@ static const int warnings_types[] =
 
 ARGMATCH_VERIFY (warnings_args, warnings_types);
 
-
 /*-------------------------------------------.
 | Display the help message and exit STATUS.  |
 `-------------------------------------------*/
index 723870de6216fa4e46876877091c8ba207143da7..d65609707d0cc721b1432f52d1ddb7d6c859bcb3 100644 (file)
@@ -42,8 +42,6 @@
 #include "symtab.h"
 #include "tables.h"
 
-# define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))
-
 static struct obstack format_obstack;
 
 
index 0d69e93e32a98c5f360ce1d90c52a88030b01001..5613a92f711777a5ac9fb96ebd37b2ac3d5db392 100644 (file)
@@ -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))