bison-patches
[Top][All Lists]
Advanced

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

[PATCH 2/6] warnings: fusion of complain and complain_at


From: Theophile Ranquet
Subject: [PATCH 2/6] warnings: fusion of complain and complain_at
Date: Mon, 1 Oct 2012 15:00:59 +0000

These functions are very similar, and keeping them seperate makes
future improvements difficult, so merge them.

This impacts 89 calls.

* NEWS: Document this change.
* src/bootrap.conf: Adjust.
* src/complain.c (complain, complain_at): Merge into one function,
'complain', that take an additional location pointer as an argument.
(complain_args): Adjust.
* src/complain.h, src/conflicts.c, src/files.c, src/getargs.c,
src/gram.c, src/location.c, src/muscle-tab.c, src/parse-gram.y,
src/reader.c, src/reduce.c, src/scan-code.l, src/scan-gram.l,
src/scan-skel.l, src/symlist.c, src/symtab.c: Adjust.
---
 NEWS             | 14 ++++++++++++++
 bootstrap.conf   |  3 +--
 src/complain.c   | 17 ++++-------------
 src/complain.h   |  8 ++------
 src/conflicts.c  | 10 +++++-----
 src/files.c      |  4 ++--
 src/getargs.c    |  6 +++---
 src/gram.c       |  2 +-
 src/location.c   |  4 ++--
 src/muscle-tab.c | 20 ++++++++++----------
 src/parse-gram.c | 13 ++++++-------
 src/parse-gram.h |  2 +-
 src/parse-gram.y |  9 ++++-----
 src/reader.c     | 52 ++++++++++++++++++++++++++--------------------------
 src/reduce.c     | 24 ++++++++++++------------
 src/scan-code.l  | 30 ++++++++++++++----------------
 src/scan-gram.l  | 42 +++++++++++++++++++++---------------------
 src/scan-skel.l  | 28 ++++++++++++++--------------
 src/symlist.c    |  2 +-
 src/symtab.c     | 52 ++++++++++++++++++++++++++--------------------------
 20 files changed, 169 insertions(+), 173 deletions(-)

diff --git a/NEWS b/NEWS
index ee1b095..96f13a0 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,20 @@ GNU Bison NEWS
 
 * Noteworthy changes in release ?.? (????-??-??) [?]
 
+** Fusion of complain and complain_at functions
+
+  While improving the code by moving the dispatch of variadic calls to
+  the complain and complain_at functions from scan-skel.l (because that
+  didn't really belong in a scanner), there was a need for the possibility
+  of passing locations as a pointer, since the call by value that was
+  being used then didn't allow convenient factorization. Hence, the use
+  of a new function, with a location pointer argument, which allows complains
+  with no location if called with NULL.
+
+  A rationale of this change is that complain (without a location) was very
+  seldom used, and complain_at already used dereferenced location pointers in
+  many places.
+
 ** Incompatible changes
 
 *** Obsolete features
diff --git a/bootstrap.conf b/bootstrap.conf
index e90cf12..190327d 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -48,8 +48,7 @@ gnulib_modules='
 XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
  --from-code=UTF-8\\\
  --flag=asprintf:2:c-format\\\
- --flag=complain:2:c-format\\\
- --flag=complain_at:3:c-format\\\
+ --flag=complain:3:c-format\\\
  --flag=complain_at_indent:4:c-format\\\
  --flag=unexpected_end:2:c-format\\\
 '
diff --git a/src/complain.c b/src/complain.c
index 4b07e18..1d43f1d 100644
--- a/src/complain.c
+++ b/src/complain.c
@@ -143,29 +143,20 @@ complains (const location *loc, warnings flags, const 
char *message,
 }
 
 void
-complain (warnings flags, const char *message, ...)
+complain (location const* loc, warnings flags, const char *message, ...)
 {
   va_list args;
   va_start (args, message);
-  complains (NULL, flags, message, args);
+  complains (loc, flags, message, args);
   va_end (args);
 }
 
 void
-complain_at (location loc, warnings flags, const char *message, ...)
+complain_at_indent (location loc, warnings flags, unsigned *indent,
+                    const char *message, ...)
 {
   va_list args;
-  va_start (args, message);
-  complains (&loc, flags, message, args);
-  va_end (args);
-}
-
-void complain_at_indent (location loc, warnings flags, unsigned *indent,
-                         const char *message, ...)
-{
   indent_ptr = indent;
-
-  va_list args;
   va_start (args, message);
   complains (&loc, flags, message, args);
   va_end (args);
diff --git a/src/complain.h b/src/complain.h
index 1d47391..31084e0 100644
--- a/src/complain.h
+++ b/src/complain.h
@@ -57,12 +57,8 @@ extern warnings errors_flag;
 /** Display a "[-Wyacc]" like message on stderr.  */
 void warnings_print_categories (warnings warn_flags);
 
-/** Make a complaint, but don't specify any location.  */
-void complain (warnings flags, char const *message, ...)
-  __attribute__ ((__format__ (__printf__, 2, 3)));
-
-/** Make a complaint with location.  */
-void complain_at (location loc, warnings flags, char const *message, ...)
+/** Make a complaint, with maybe a location.  */
+void complain (location const* loc, warnings flags, char const *message, ...)
   __attribute__ ((__format__ (__printf__, 3, 4)));
 
 /** Make a complaint with location and some indentation.  */
diff --git a/src/conflicts.c b/src/conflicts.c
index 99f096a..f8ed177 100644
--- a/src/conflicts.c
+++ b/src/conflicts.c
@@ -561,7 +561,7 @@ conflicts_print (void)
 {
   if (! glr_parser && expected_rr_conflicts != -1)
     {
-      complain (Wother, _("%%expect-rr applies only to GLR parsers"));
+      complain (NULL, Wother, _("%%expect-rr applies only to GLR parsers"));
       expected_rr_conflicts = -1;
     }
 
@@ -577,12 +577,12 @@ conflicts_print (void)
     if (expected != -1)
       {
         if (expected != total)
-          complain (complaint,
+          complain (NULL, complaint,
                     _("shift/reduce conflicts: %d found, %d expected"),
                     total, expected);
       }
     else if (total)
-      complain (Wconflicts_sr,
+      complain (NULL, Wconflicts_sr,
                 ngettext ("%d shift/reduce conflict",
                           "%d shift/reduce conflicts",
                           total),
@@ -599,12 +599,12 @@ conflicts_print (void)
     if (expected != -1)
       {
         if (expected != total)
-          complain (complaint,
+          complain (NULL, complaint,
                     _("reduce/reduce conflicts: %d found, %d expected"),
                     total, expected);
       }
     else if (total)
-      complain (Wconflicts_rr,
+      complain (NULL, Wconflicts_rr,
                 ngettext ("%d reduce/reduce conflict",
                           "%d reduce/reduce conflicts",
                           total),
diff --git a/src/files.c b/src/files.c
index ae9fc7f..7fea306 100644
--- a/src/files.c
+++ b/src/files.c
@@ -360,7 +360,7 @@ output_file_name_check (char **file_name)
   bool conflict = false;
   if (STREQ (*file_name, grammar_file))
     {
-      complain (complaint, _("refusing to overwrite the input file %s"),
+      complain (NULL, complaint, _("refusing to overwrite the input file %s"),
                 quote (*file_name));
       conflict = true;
     }
@@ -370,7 +370,7 @@ output_file_name_check (char **file_name)
       for (i = 0; i < file_names_count; i++)
         if (STREQ (file_names[i], *file_name))
           {
-            complain (Wother, _("conflicting outputs to file %s"),
+            complain (NULL, Wother, _("conflicting outputs to file %s"),
                       quote (*file_name));
             conflict = true;
           }
diff --git a/src/getargs.c b/src/getargs.c
index 695ad12..db1c386 100644
--- a/src/getargs.c
+++ b/src/getargs.c
@@ -427,8 +427,8 @@ skeleton_arg (char const *arg, int prio, location loc)
       skeleton = arg;
     }
   else if (prio == skeleton_prio)
-    complain_at (loc, complaint,
-                 _("multiple skeleton declarations are invalid"));
+    complain (&loc, complaint,
+              _("multiple skeleton declarations are invalid"));
 }
 
 void
@@ -453,7 +453,7 @@ language_argmatch (char const *arg, int prio, location loc)
   else
     return;
 
-  complain_at (loc, complaint, msg, quotearg_colon (arg));
+  complain (&loc, complaint, msg, quotearg_colon (arg));
 }
 
 /*----------------------.
diff --git a/src/gram.c b/src/gram.c
index ef5353a..f58ac3b 100644
--- a/src/gram.c
+++ b/src/gram.c
@@ -312,7 +312,7 @@ grammar_rules_useless_report (const char *message)
       for (r = 0; r < nrules ; ++r)
         if (!rules[r].useful)
           {
-            complain_at (rules[r].location, w | silent, "%s: ", message);
+            complain (&rules[r].location, w | silent, "%s: ", message);
             rule_print (&rules[r], stderr);
             warnings_print_categories (w);
             fprintf (stderr, "\n");
diff --git a/src/location.c b/src/location.c
index 9960d62..a749415 100644
--- a/src/location.c
+++ b/src/location.c
@@ -90,9 +90,9 @@ location_compute (location *loc, boundary *cur, char const 
*token, size_t size)
   loc->end = *cur;
 
   if (line == INT_MAX && loc->start.line != INT_MAX)
-    complain_at (*loc, Wother, _("line number overflow"));
+    complain (loc, Wother, _("line number overflow"));
   if (column == INT_MAX && loc->start.column != INT_MAX)
-    complain_at (*loc, Wother, _("column number overflow"));
+    complain (loc, Wother, _("column number overflow"));
 }
 
 
diff --git a/src/muscle-tab.c b/src/muscle-tab.c
index 4738fdf..be97b80 100644
--- a/src/muscle-tab.c
+++ b/src/muscle-tab.c
@@ -407,9 +407,9 @@ muscle_percent_variable_update (char const *variable, 
location variable_loc)
     if (STREQ (conversion[i].obsolete, variable))
       {
         res = conversion[i].updated;
-        complain_at (variable_loc, Wdeprecated,
-                     _("deprecated %%define variable name: %s, use %s"),
-                     quote (variable), quote_n (1, res));
+        complain (&variable_loc, Wdeprecated,
+                  _("deprecated %%define variable name: %s, use %s"),
+                  quote (variable), quote_n (1, res));
         break;
       }
   return res;
@@ -503,7 +503,7 @@ muscle_percent_define_get_loc (char const *variable)
 {
   char const *loc_name = UNIQSTR_CONCAT ("percent_define_loc(", variable, ")");
   if (!muscle_find_const (loc_name))
-    complain (fatal, _("%s: undefined %%define variable %s"),
+    complain (NULL, fatal, _("%s: undefined %%define variable %s"),
               "muscle_percent_define_get_loc", quote (variable));
   return location_decode (loc_name);
 }
@@ -515,7 +515,7 @@ muscle_percent_define_get_syncline (char const *variable)
     UNIQSTR_CONCAT ("percent_define_syncline(", variable, ")");
   char const *syncline = muscle_find_const (syncline_name);
   if (!syncline)
-    complain (fatal, _("%s: undefined %%define variable %s"),
+    complain (NULL, fatal, _("%s: undefined %%define variable %s"),
               "muscle_percent_define_get_syncline", quote (variable));
   return syncline;
 }
@@ -554,14 +554,14 @@ muscle_percent_define_flag_if (char const *variable)
         {
           muscle_insert (invalid_boolean_name, "");
           location loc = muscle_percent_define_get_loc (variable);
-          complain_at (loc, complaint,
-                       _("invalid value for %%define Boolean variable %s"),
-                       quote (variable));
+          complain (&loc, complaint,
+                    _("invalid value for %%define Boolean variable %s"),
+                    quote (variable));
         }
       free (value);
     }
   else
-    complain (fatal, _("%s: undefined %%define variable %s"),
+    complain (NULL, fatal, _("%s: undefined %%define variable %s"),
               "muscle_percent_define_flag", quote (variable));
 
   return result;
@@ -623,7 +623,7 @@ muscle_percent_define_check_values (char const * const 
*values)
           free (value);
         }
       else
-        complain (fatal, _("%s: undefined %%define variable %s"),
+        complain (NULL, fatal, _("%s: undefined %%define variable %s"),
                   "muscle_percent_define_check_values", quote (*variablep));
     }
 }
diff --git a/src/parse-gram.c b/src/parse-gram.c
index 92bb62c..c16881a 100644
--- a/src/parse-gram.c
+++ b/src/parse-gram.c
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 2.6.2.873-d87e-dirty.  */
+/* A Bison parser, made by GNU Bison 2.6.2.893-1c16f.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.6.2.873-d87e-dirty"
+#define YYBISON_VERSION "2.6.2.893-1c16f"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -3264,8 +3264,7 @@ add_param (param_type type, char *decl, location loc)
   }
 
   if (! name_start)
-    complain_at (loc, complaint,
-                 _("missing identifier in parameter declaration"));
+    complain (&loc, complaint, _("missing identifier in parameter 
declaration"));
   else
     {
       char *name = xmemdup0 (name_start, strspn (name_start, alphanum));
@@ -3285,8 +3284,8 @@ version_check (location const *loc, char const *version)
 {
   if (strverscmp (version, PACKAGE_VERSION) > 0)
     {
-      complain_at (*loc, complaint, "require bison %s, but have %s",
-                   version, PACKAGE_VERSION);
+      complain (loc, complaint, "require bison %s, but have %s",
+                version, PACKAGE_VERSION);
       exit (EX_MISMATCH);
     }
 }
@@ -3294,7 +3293,7 @@ version_check (location const *loc, char const *version)
 static void
 gram_error (location const *loc, char const *msg)
 {
-  complain_at (*loc, complaint, "%s", msg);
+  complain (loc, complaint, "%s", msg);
 }
 
 char const *
diff --git a/src/parse-gram.h b/src/parse-gram.h
index 3e03517..4c68e8b 100644
--- a/src/parse-gram.h
+++ b/src/parse-gram.h
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 2.6.2.873-d87e-dirty.  */
+/* A Bison parser, made by GNU Bison 2.6.2.893-1c16f.  */
 
 /* Bison interface for Yacc-like parsers in C
 
diff --git a/src/parse-gram.y b/src/parse-gram.y
index 46500db..f0187fb 100644
--- a/src/parse-gram.y
+++ b/src/parse-gram.y
@@ -786,8 +786,7 @@ add_param (param_type type, char *decl, location loc)
   }
 
   if (! name_start)
-    complain_at (loc, complaint,
-                 _("missing identifier in parameter declaration"));
+    complain (&loc, complaint, _("missing identifier in parameter 
declaration"));
   else
     {
       char *name = xmemdup0 (name_start, strspn (name_start, alphanum));
@@ -807,8 +806,8 @@ version_check (location const *loc, char const *version)
 {
   if (strverscmp (version, PACKAGE_VERSION) > 0)
     {
-      complain_at (*loc, complaint, "require bison %s, but have %s",
-                   version, PACKAGE_VERSION);
+      complain (loc, complaint, "require bison %s, but have %s",
+                version, PACKAGE_VERSION);
       exit (EX_MISMATCH);
     }
 }
@@ -816,7 +815,7 @@ version_check (location const *loc, char const *version)
 static void
 gram_error (location const *loc, char const *msg)
 {
-  complain_at (*loc, complaint, "%s", msg);
+  complain (loc, complaint, "%s", msg);
 }
 
 char const *
diff --git a/src/reader.c b/src/reader.c
index f658e64..a67f4c7 100644
--- a/src/reader.c
+++ b/src/reader.c
@@ -59,7 +59,7 @@ void
 grammar_start_symbol_set (symbol *sym, location loc)
 {
   if (start_flag)
-    complain_at (loc, complaint, _("multiple %s declarations"), "%start");
+    complain (&loc, complaint, _("multiple %s declarations"), "%start");
   else
     {
       start_flag = true;
@@ -202,9 +202,9 @@ assign_named_ref (symbol_list *p, named_ref *name)
 
   if (name->id == sym->tag)
     {
-      complain_at (name->loc, Wother,
-                   _("duplicated symbol name for %s ignored"),
-                   quote (sym->tag));
+      complain (&name->loc, Wother,
+                _("duplicated symbol name for %s ignored"),
+                quote (sym->tag));
       named_ref_free (name);
     }
   else
@@ -247,8 +247,8 @@ grammar_current_rule_begin (symbol *lhs, location loc,
       ++nvars;
     }
   else if (lhs->class == token_sym)
-    complain_at (loc, complaint, _("rule given for %s, which is a token"),
-                 lhs->tag);
+    complain (&loc, complaint, _("rule given for %s, which is a token"),
+              lhs->tag);
 }
 
 
@@ -302,14 +302,14 @@ grammar_rule_check (const symbol_list *r)
           const char *rhs_type =
             first_rhs->type_name ? first_rhs->type_name : "";
           if (!UNIQSTR_EQ (lhs_type, rhs_type))
-            complain_at (r->location, Wother,
-                         _("type clash on default action: <%s> != <%s>"),
-                         lhs_type, rhs_type);
+            complain (&r->location, Wother,
+                      _("type clash on default action: <%s> != <%s>"),
+                      lhs_type, rhs_type);
         }
       /* Warn if there is no default for $$ but we need one.  */
       else
-        complain_at (r->location, Wother,
-                     _("empty rule for typed nonterminal, and no action"));
+        complain (&r->location, Wother,
+                  _("empty rule for typed nonterminal, and no action"));
     }
 
   /* Check that symbol values that should be used are in fact used.  */
@@ -326,9 +326,9 @@ grammar_rule_check (const symbol_list *r)
           {
             warnings warn_flag = midrule_warning ? Wmidrule_values : Wother;
             if (n)
-              complain_at (r->location, warn_flag, _("unused value: $%d"), n);
+              complain (&r->location, warn_flag, _("unused value: $%d"), n);
             else
-              complain_at (r->location, warn_flag, _("unset value: $$"));
+              complain (&r->location, warn_flag, _("unset value: $$"));
           }
       }
   }
@@ -339,8 +339,8 @@ grammar_rule_check (const symbol_list *r)
   if (r->ruleprec
       && r->ruleprec->tag[0] != '\'' && r->ruleprec->tag[0] != '"'
       && r->ruleprec->status != declared && !r->ruleprec->prec)
-    complain_at (r->location, Wother,
-                 _("token for %%prec is not defined: %s"), r->ruleprec->tag);
+    complain (&r->location, Wother,
+              _("token for %%prec is not defined: %s"), r->ruleprec->tag);
 }
 
 
@@ -430,7 +430,7 @@ grammar_current_rule_prec_set (symbol *precsym, location 
loc)
      token.  */
   symbol_class_set (precsym, token_sym, loc, false);
   if (current_rule->ruleprec)
-    complain_at (loc, complaint, _("only one %s allowed per rule"), "%prec");
+    complain (&loc, complaint, _("only one %s allowed per rule"), "%prec");
   current_rule->ruleprec = precsym;
 }
 
@@ -440,13 +440,13 @@ void
 grammar_current_rule_dprec_set (int dprec, location loc)
 {
   if (! glr_parser)
-    complain_at (loc, Wother, _("%s affects only GLR parsers"),
-                 "%dprec");
+    complain (&loc, Wother, _("%s affects only GLR parsers"),
+              "%dprec");
   if (dprec <= 0)
-    complain_at (loc, complaint, _("%s must be followed by positive number"),
-                 "%dprec");
+    complain (&loc, complaint, _("%s must be followed by positive number"),
+              "%dprec");
   else if (current_rule->dprec != 0)
-    complain_at (loc, complaint, _("only one %s allowed per rule"), "%dprec");
+    complain (&loc, complaint, _("only one %s allowed per rule"), "%dprec");
   current_rule->dprec = dprec;
 }
 
@@ -457,10 +457,10 @@ void
 grammar_current_rule_merge_set (uniqstr name, location loc)
 {
   if (! glr_parser)
-    complain_at (loc, Wother, _("%s affects only GLR parsers"),
-                 "%merge");
+    complain (&loc, Wother, _("%s affects only GLR parsers"),
+              "%merge");
   if (current_rule->merger != 0)
-    complain_at (loc, complaint, _("only one %s allowed per rule"), "%merge");
+    complain (&loc, complaint, _("only one %s allowed per rule"), "%merge");
   current_rule->merger = get_merge_function (name);
   current_rule->merger_declaration_location = loc;
 }
@@ -559,7 +559,7 @@ packgram (void)
           /* Don't allow rule_length == INT_MAX, since that might
              cause confusion with strtol if INT_MAX == LONG_MAX.  */
           if (rule_length == INT_MAX)
-            complain_at (rules[ruleno].location, fatal, _("rule is too long"));
+            complain (&rules[ruleno].location, fatal, _("rule is too long"));
 
           /* item_number = symbol_number.
              But the former needs to contain more: negative rule numbers. */
@@ -677,7 +677,7 @@ check_and_convert_grammar (void)
 {
   /* Grammar has been read.  Do some checking.  */
   if (nrules == 0)
-    complain (fatal, _("no rules in the input grammar"));
+    complain (NULL, fatal, _("no rules in the input grammar"));
 
   /* If the user did not define her ENDTOKEN, do it now. */
   if (!endtoken)
diff --git a/src/reduce.c b/src/reduce.c
index be7f421..171af39 100644
--- a/src/reduce.c
+++ b/src/reduce.c
@@ -299,9 +299,9 @@ nonterminals_reduce (void)
       {
         nontermmap[i - ntokens] = n++;
         if (symbols[i]->status != used)
-          complain_at (symbols[i]->location, Wother,
-                       _("nonterminal useless in grammar: %s"),
-                       symbols[i]->tag);
+          complain (&symbols[i]->location, Wother,
+                    _("nonterminal useless in grammar: %s"),
+                    symbols[i]->tag);
       }
 
 
@@ -383,14 +383,14 @@ static void
 reduce_print (void)
 {
   if (nuseless_nonterminals > 0)
-    complain (Wother, ngettext ("%d nonterminal useless in grammar",
-                                "%d nonterminals useless in grammar",
-                                nuseless_nonterminals),
+    complain (NULL, Wother, ngettext ("%d nonterminal useless in grammar",
+                                      "%d nonterminals useless in grammar",
+                                      nuseless_nonterminals),
               nuseless_nonterminals);
   if (nuseless_productions > 0)
-    complain (Wother, ngettext ("%d rule useless in grammar",
-                                "%d rules useless in grammar",
-                                nuseless_productions),
+    complain (NULL, Wother, ngettext ("%d rule useless in grammar",
+                                      "%d rules useless in grammar",
+                                      nuseless_productions),
               nuseless_productions);
 }
 
@@ -416,9 +416,9 @@ reduce_grammar (void)
   reduce_print ();
 
   if (!bitset_test (N, accept->number - ntokens))
-    complain_at (startsymbol_location, fatal,
-                 _("start symbol %s does not derive any sentence"),
-                 startsymbol->tag);
+    complain (&startsymbol_location, fatal,
+              _("start symbol %s does not derive any sentence"),
+              startsymbol->tag);
 
   /* First reduce the nonterminals, as they renumber themselves in the
      whole grammar.  If you change the order, nonterms would be
diff --git a/src/scan-code.l b/src/scan-code.l
index 6244484..6d7e138 100644
--- a/src/scan-code.l
+++ b/src/scan-code.l
@@ -186,7 +186,7 @@ ref      -?[0-9]+|{id}|"["{id}"]"|"$"
     BEGIN SC_LINE_COMMENT;
   }
   address@hidden  {
-    complain_at (*loc, Wother, _("stray '%s'"), yytext);
+    complain (loc, Wother, _("stray '%s'"), yytext);
     obstack_escape (&obstack_for_string, yytext);
     need_semicolon = true;
   }
@@ -225,10 +225,8 @@ ref      -?[0-9]+|{id}|"["{id}"]"|"$"
     if (outer_brace && !yacc_flag && language_prio == default_prio
         && skeleton_prio == default_prio && need_semicolon && ! in_cpp)
       {
-        complain_at (*loc, Wdeprecated,
-                     _("a ';' might be needed at the end of action code"));
-        complain_at (*loc, Wdeprecated,
-                     _("future versions of Bison will not add the ';'"));
+        complain (loc, Wdeprecated, _("a ';' might be needed at the end of 
action code"));
+        complain (loc, Wdeprecated, _("future versions of Bison will not add 
the ';'"));
         obstack_1grow (&obstack_for_string, ';');
       }
 
@@ -499,8 +497,8 @@ parse_ref (char *cp, symbol_list *rule, int rule_length,
         return num;
       else
         {
-          complain_at (text_loc, complaint, _("integer out of range: %s"),
-                       quote (text));
+          complain (&text_loc, complaint, _("integer out of range: %s"),
+                    quote (text));
           return INVALID_REF;
         }
     }
@@ -673,8 +671,8 @@ fetch_type_name (char *cp, char const **type_name,
          'text' is needed for error messages. */
       ++cp;
       if (untyped_var_seen)
-        complain_at (dollar_loc, complaint,
-                     _("explicit type given in untyped grammar"));
+        complain (&dollar_loc, complaint,
+                  _("explicit type given in untyped grammar"));
       tag_seen = true;
     }
   return cp;
@@ -732,15 +730,15 @@ handle_action_dollar (symbol_list *rule, char *text, 
location dollar_loc)
           if (union_seen | tag_seen)
             {
               if (rule->midrule_parent_rule)
-                complain_at (dollar_loc, complaint,
+                complain (&dollar_loc, complaint,
                              _("$$ for the midrule at $%d of %s"
                                " has no declared type"),
                              rule->midrule_parent_rhs_index,
                              quote (effective_rule->content.sym->tag));
               else
-                complain_at (dollar_loc, complaint,
-                             _("$$ of %s has no declared type"),
-                             quote (rule->content.sym->tag));
+                complain (&dollar_loc, complaint,
+                          _("$$ of %s has no declared type"),
+                          quote (rule->content.sym->tag));
             }
           else
             untyped_var_seen = true;
@@ -761,9 +759,9 @@ handle_action_dollar (symbol_list *rule, char *text, 
location dollar_loc)
       if (!type_name)
         {
           if (union_seen | tag_seen)
-            complain_at (dollar_loc, complaint,
-                         _("$%s of %s has no declared type"), cp,
-                         quote (effective_rule->content.sym->tag));
+            complain (&dollar_loc, complaint,
+                      _("$%s of %s has no declared type"), cp,
+                      quote (effective_rule->content.sym->tag));
           else
             untyped_var_seen = true;
         }
diff --git a/src/scan-gram.l b/src/scan-gram.l
index 2275d02..8e48148 100644
--- a/src/scan-gram.l
+++ b/src/scan-gram.l
@@ -165,7 +165,7 @@ splice   (\\[ \f\t\v]*\n)*
 {
   /* Comments and white space.  */
   "," {
-     complain_at (*loc, Wother, _("stray ',' treated as white space"));
+     complain (loc, Wother, _("stray ',' treated as white space"));
   }
   [ \f\n\t\v]  |
   "//".*       ;
@@ -241,7 +241,7 @@ splice   (\\[ \f\t\v]*\n)*
   "%yacc"                           return PERCENT_YACC;
 
   {directive} {
-    complain_at (*loc, complaint, _("invalid directive: %s"), quote (yytext));
+    complain (loc, complaint, _("invalid directive: %s"), quote (yytext));
   }
 
   "="                     return EQUAL;
@@ -267,7 +267,7 @@ splice   (\\[ \f\t\v]*\n)*
   /* Identifiers may not start with a digit.  Yet, don't silently
      accept "1FOO" as "1 FOO".  */
   {int}{id} {
-    complain_at (*loc, complaint, _("invalid identifier: %s"), quote (yytext));
+    complain (loc, complaint, _("invalid identifier: %s"), quote (yytext));
   }
 
   /* Characters.  */
@@ -325,7 +325,7 @@ splice   (\\[ \f\t\v]*\n)*
   }
 
   . {
-    complain_at (*loc, complaint, _("invalid character: %s"), quote (yytext));
+    complain (loc, complaint, _("invalid character: %s"), quote (yytext));
   }
 
   <<EOF>> {
@@ -342,7 +342,7 @@ splice   (\\[ \f\t\v]*\n)*
 
 <SC_ESCAPED_CHARACTER,SC_ESCAPED_STRING,SC_TAG>
 {
-  \0        complain_at (*loc, complaint, _("invalid null character"));
+  \0        complain (loc, complaint, _("invalid null character"));
 }
 
 
@@ -394,9 +394,9 @@ splice   (\\[ \f\t\v]*\n)*
   {id} {
     if (bracketed_id_str)
       {
-        complain_at (*loc, complaint,
-                     _("unexpected identifier in bracketed name: %s"),
-                     quote (yytext));
+        complain (loc, complaint,
+                  _("unexpected identifier in bracketed name: %s"),
+                  quote (yytext));
       }
     else
       {
@@ -417,10 +417,10 @@ splice   (\\[ \f\t\v]*\n)*
           }
       }
     else
-      complain_at (*loc, complaint, _("an identifier expected"));
+      complain (loc, complaint, _("an identifier expected"));
   }
   . {
-    complain_at (*loc, complaint, _("invalid character in bracketed name: %s"),
+    complain (loc, complaint, _("invalid character in bracketed name: %s"),
                  quote (yytext));
   }
   <<EOF>> {
@@ -518,12 +518,12 @@ splice   (\\[ \f\t\v]*\n)*
       /* FIXME: Eventually, make these errors.  */
       if (last_string[0] == '\0')
         {
-          complain_at (*loc, Wother, _("empty character literal"));
+          complain (loc, Wother, _("empty character literal"));
           /* '\0' seems dangerous even if we are about to complain.  */
           val->character = '\'';
         }
       else if (last_string[1] != '\0')
-        complain_at (*loc, Wother,
+        complain (loc, Wother,
                   _("extra characters in character literal"));
     }
     if (yytext[0] == '\n')
@@ -540,12 +540,12 @@ splice   (\\[ \f\t\v]*\n)*
       /* FIXME: Eventually, make these errors.  */
       if (last_string[0] == '\0')
         {
-          complain_at (*loc, Wother, _("empty character literal"));
+          complain (loc, Wother, _("empty character literal"));
           /* '\0' seems dangerous even if we are about to complain.  */
           val->character = '\'';
         }
       else if (last_string[1] != '\0')
-        complain_at (*loc, Wother,
+        complain (loc, Wother,
                   _("extra characters in character literal"));
     }
     unexpected_eof (token_start, "'");
@@ -599,7 +599,7 @@ splice   (\\[ \f\t\v]*\n)*
   \\[0-7]{1,3} {
     unsigned long int c = strtoul (yytext + 1, NULL, 8);
     if (!c || UCHAR_MAX < c)
-      complain_at (*loc, complaint, _("invalid number after \\-escape: %s"),
+      complain (loc, complaint, _("invalid number after \\-escape: %s"),
                    yytext+1);
     else
       obstack_1grow (&obstack_for_string, c);
@@ -609,7 +609,7 @@ splice   (\\[ \f\t\v]*\n)*
     verify (UCHAR_MAX < ULONG_MAX);
     unsigned long int c = strtoul (yytext + 2, NULL, 16);
     if (!c || UCHAR_MAX < c)
-      complain_at (*loc, complaint, _("invalid number after \\-escape: %s"),
+      complain (loc, complaint, _("invalid number after \\-escape: %s"),
                    yytext+1);
     else
       obstack_1grow (&obstack_for_string, c);
@@ -629,7 +629,7 @@ splice   (\\[ \f\t\v]*\n)*
   \\(u|U[0-9abcdefABCDEF]{4})[0-9abcdefABCDEF]{4} {
     int c = convert_ucn_to_byte (yytext);
     if (c <= 0)
-      complain_at (*loc, complaint, _("invalid number after \\-escape: %s"),
+      complain (loc, complaint, _("invalid number after \\-escape: %s"),
                    yytext+1);
     else
       obstack_1grow (&obstack_for_string, c);
@@ -641,7 +641,7 @@ splice   (\\[ \f\t\v]*\n)*
       p = quote (p);
     else
       p = quotearg_style_mem (escape_quoting_style, p, 1);
-    complain_at (*loc, complaint, _("invalid character after \\-escape: %s"),
+    complain (loc, complaint, _("invalid character after \\-escape: %s"),
                  p);
   }
 }
@@ -873,7 +873,7 @@ scan_integer (char const *number, int base, location loc)
 
   if (INT_MAX < num)
     {
-      complain_at (loc, complaint, _("integer out of range: %s"),
+      complain (&loc, complaint, _("integer out of range: %s"),
                    quote (number));
       num = INT_MAX;
     }
@@ -952,7 +952,7 @@ handle_syncline (char *args, location loc)
   *strchr (file, '"') = '\0';
   if (INT_MAX <= lineno)
     {
-      complain_at (loc, Wother, _("line number overflow"));
+      complain (&loc, Wother, _("line number overflow"));
       lineno = INT_MAX;
     }
   current_file = uniqstr_new (file);
@@ -976,7 +976,7 @@ unexpected_end (boundary start, char const *msgid, char 
const *token_end)
   // Instead of '\'', display "'".
   if (STREQ (token_end, "'\\''"))
     token_end = "\"'\"";
-  complain_at (loc, complaint, _(msgid), token_end);
+  complain (&loc, complaint, _(msgid), token_end);
 }
 
 
diff --git a/src/scan-skel.l b/src/scan-skel.l
index 5126d5f..9854727 100644
--- a/src/scan-skel.l
+++ b/src/scan-skel.l
@@ -134,7 +134,7 @@ static void fail_for_invalid_at (char const *at);
 
 <SC_AT_DIRECTIVE_ARGS,SC_AT_DIRECTIVE_SKIP_WS>
 {
-  <<EOF>>  complain (fatal, _("unclosed %s directive in skeleton"), argv[0]);
+  <<EOF>>  complain (NULL, fatal, _("unclosed %s directive in skeleton"), 
argv[0]);
 }
 
 %%
@@ -194,19 +194,19 @@ at_directive_perform (int argc, char *argv[], char 
**outnamep, int *out_linenop)
       switch (argc)
         {
           case 2:
-            complain (w, "%s", _(argv[1]));
+            complain (NULL, w, "%s", _(argv[1]));
             break;
           case 3:
-            complain (w, _(argv[1]), argv[2]);
+            complain (NULL, w, _(argv[1]), argv[2]);
             break;
           case 4:
-            complain (w, _(argv[1]), argv[2], argv[3]);
+            complain (NULL, w, _(argv[1]), argv[2], argv[3]);
             break;
           case 5:
-            complain (w, _(argv[1]), argv[2], argv[3], argv[4]);
+            complain (NULL, w, _(argv[1]), argv[2], argv[3], argv[4]);
             break;
           case 6:
-            complain (w, _(argv[1]), argv[2], argv[3], argv[4], argv[5]);
+            complain (NULL, w, _(argv[1]), argv[2], argv[3], argv[4], argv[5]);
             break;
           default:
             fail_for_at_directive_too_many_args (argv[0]);
@@ -226,19 +226,19 @@ at_directive_perform (int argc, char *argv[], char 
**outnamep, int *out_linenop)
       switch (argc)
         {
           case 4:
-            complain_at (loc, w, "%s", _(argv[3]));
+            complain (&loc, w, "%s", _(argv[3]));
             break;
           case 5:
-            complain_at (loc, w, _(argv[3]), argv[4]);
+            complain (&loc, w, _(argv[3]), argv[4]);
             break;
           case 6:
-            complain_at (loc, w, _(argv[3]), argv[4], argv[5]);
+            complain (&loc, w, _(argv[3]), argv[4], argv[5]);
             break;
           case 7:
-            complain_at (loc, w, _(argv[3]), argv[4], argv[5], argv[6]);
+            complain (&loc, w, _(argv[3]), argv[4], argv[5], argv[6]);
             break;
           case 8:
-            complain_at (loc, w, _(argv[3]), argv[4], argv[5], argv[6],
+            complain (&loc, w, _(argv[3]), argv[4], argv[5], argv[6],
                          argv[7]);
             break;
           default:
@@ -267,19 +267,19 @@ at_directive_perform (int argc, char *argv[], char 
**outnamep, int *out_linenop)
 static void
 fail_for_at_directive_too_few_args (char const *at_directive_name)
 {
-  complain (fatal, _("too few arguments for %s directive in skeleton"),
+  complain (NULL, fatal, _("too few arguments for %s directive in skeleton"),
             at_directive_name);
 }
 
 static void
 fail_for_at_directive_too_many_args (char const *at_directive_name)
 {
-  complain (fatal, _("too many arguments for %s directive in skeleton"),
+  complain (NULL, fatal, _("too many arguments for %s directive in skeleton"),
             at_directive_name);
 }
 
 static void
 fail_for_invalid_at (char const *at)
 {
-  complain (fatal, "invalid @ in skeleton: %s", at);
+  complain (NULL, fatal, "invalid @ in skeleton: %s", at);
 }
diff --git a/src/symlist.c b/src/symlist.c
index 005331b..196db4c 100644
--- a/src/symlist.c
+++ b/src/symlist.c
@@ -175,7 +175,7 @@ symbol_list_n_type_name_get (symbol_list *l, location loc, 
int n)
   l = symbol_list_n_get (l, n);
   if (!l)
     {
-      complain_at (loc, complaint, _("invalid $ value: $%d"), n);
+      complain (&loc, complaint, _("invalid $ value: $%d"), n);
       return NULL;
     }
   aver (l->content_type == SYMLIST_SYMBOL);
diff --git a/src/symtab.c b/src/symtab.c
index 916536a..b82d5b7 100644
--- a/src/symtab.c
+++ b/src/symtab.c
@@ -61,8 +61,8 @@ symbol_new (uniqstr tag, location loc)
   /* If the tag is not a string (starts with a double quote), check
      that it is valid for Yacc. */
   if (tag[0] != '\"' && tag[0] != '\'' && strchr (tag, '-'))
-    complain_at (loc, Wyacc,
-                 _("POSIX Yacc forbids dashes in symbol names: %s"), tag);
+    complain (&loc, Wyacc,
+              _("POSIX Yacc forbids dashes in symbol names: %s"), tag);
 
   res->tag = tag;
   res->location = loc;
@@ -81,7 +81,7 @@ symbol_new (uniqstr tag, location loc)
   res->status = undeclared;
 
   if (nsyms == SYMBOL_NUMBER_MAXIMUM)
-    complain (fatal, _("too many symbols in input grammar (limit is %d)"),
+    complain (NULL, fatal, _("too many symbols in input grammar (limit is 
%d)"),
               SYMBOL_NUMBER_MAXIMUM);
   nsyms++;
   return res;
@@ -328,7 +328,7 @@ symbol_class_set (symbol *sym, symbol_class class, location 
loc, bool declaring)
   bool warned = false;
   if (sym->class != unknown_sym && sym->class != class)
     {
-      complain_at (loc, complaint, _("symbol %s redefined"), sym->tag);
+      complain (&loc, complaint, _("symbol %s redefined"), sym->tag);
       // Don't report both "redefined" and "redeclared".
       warned = true;
     }
@@ -343,7 +343,7 @@ symbol_class_set (symbol *sym, symbol_class class, location 
loc, bool declaring)
   if (declaring)
     {
       if (sym->status == declared && !warned)
-        complain_at (loc, Wother, _("symbol %s redeclared"), sym->tag);
+        complain (&loc, Wother, _("symbol %s redeclared"), sym->tag);
       sym->status = declared;
     }
 }
@@ -364,8 +364,8 @@ symbol_user_token_number_set (symbol *sym, int 
user_token_number, location loc)
     user_token_numberp = &sym->alias->user_token_number;
   if (*user_token_numberp != USER_NUMBER_UNDEFINED
       && *user_token_numberp != user_token_number)
-    complain_at (loc, complaint, _("redefining user token number of %s"),
-                 sym->tag);
+    complain (&loc, complaint, _("redefining user token number of %s"),
+              sym->tag);
 
   *user_token_numberp = user_token_number;
   /* User defined $end token? */
@@ -392,11 +392,11 @@ symbol_check_defined (symbol *sym)
   if (sym->class == unknown_sym)
     {
       assert (sym->status != declared);
-      complain_at (sym->location,
-                   sym->status == needed ? complaint : Wother,
-                   _("symbol %s is used, but is not defined as a token"
-                     " and has no rules"),
-                   sym->tag);
+      complain (&sym->location,
+                sym->status == needed ? complaint : Wother,
+                _("symbol %s is used, but is not defined as a token"
+                  " and has no rules"),
+                  sym->tag);
       sym->class = nterm_sym;
       sym->number = nvars++;
     }
@@ -427,14 +427,14 @@ semantic_type_check_defined (semantic_type *sem_type)
       for (int i = 0; i < 2; ++i)
         if (sem_type->props[i].kind != CODE_PROPS_NONE
             && ! sem_type->props[i].is_used)
-          complain_at (sem_type->location, Wother,
-                       _("useless %s for type <%s>"),
-                       code_props_type_string (i), sem_type->tag);
+          complain (&sem_type->location, Wother,
+                    _("useless %s for type <%s>"),
+                    code_props_type_string (i), sem_type->tag);
     }
   else
-    complain_at (sem_type->location, Wother,
-                 _("type <%s> is used, but is not associated to any symbol"),
-                 sem_type->tag);
+    complain (&sem_type->location, Wother,
+              _("type <%s> is used, but is not associated to any symbol"),
+              sem_type->tag);
 
   return true;
 }
@@ -457,10 +457,10 @@ void
 symbol_make_alias (symbol *sym, symbol *str, location loc)
 {
   if (str->alias)
-    complain_at (loc, Wother,
+    complain (&loc, Wother,
               _("symbol %s used more than once as a literal string"), 
str->tag);
   else if (sym->alias)
-    complain_at (loc, Wother,
+    complain (&loc, Wother,
               _("symbol %s given more than one literal string"), sym->tag);
   else
     {
@@ -949,11 +949,11 @@ symbols_pack (void)
   symbols_token_translations_init ();
 
   if (startsymbol->class == unknown_sym)
-    complain_at (startsymbol_location, fatal,
-                 _("the start symbol %s is undefined"),
-                 startsymbol->tag);
+    complain (&startsymbol_location, fatal,
+              _("the start symbol %s is undefined"),
+              startsymbol->tag);
   else if (startsymbol->class == token_sym)
-    complain_at (startsymbol_location, fatal,
-                 _("the start symbol %s is a token"),
-                 startsymbol->tag);
+    complain (&startsymbol_location, fatal,
+              _("the start symbol %s is a token"),
+              startsymbol->tag);
 }
-- 
1.7.11.4




reply via email to

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