]>
git.saurik.com Git - bison.git/blob - src/complain.c
933b402c9e9ed0743bb33aadf74348fef4290c8c
   1 /* Declaration for error-reporting function for Bison. 
   3    Copyright (C) 2000-2002, 2004-2006, 2009-2012 Free Software 
   6    This program is free software: you can redistribute it and/or modify 
   7    it under the terms of the GNU General Public License as published by 
   8    the Free Software Foundation, either version 3 of the License, or 
   9    (at your option) any later version. 
  11    This program is distributed in the hope that it will be useful, 
  12    but WITHOUT ANY WARRANTY; without even the implied warranty of 
  13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  14    GNU General Public License for more details. 
  16    You should have received a copy of the GNU General Public License 
  17    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ 
  19 /* Based on error.c and error.h, 
  20    written by David MacKenzie <djm@gnu.ai.mit.edu>.  */ 
  32 warnings warnings_flag 
= Wconflicts_sr 
| Wconflicts_rr 
| Wother
; 
  34 bool complaint_issued
; 
  35 static unsigned *indent_ptr 
= 0; 
  39 /** Report an error message. 
  41  * \param loc     the location, defaulting to the current file, 
  42  *                or the program name. 
  43  * \param flags   the category for this message. 
  44  * \param prefix  put before the message (e.g., "warning"). 
  45  * \param message the error message, a printf format string.  Iff it 
  46  *                ends with ": ", then no trailing newline is printed, 
  47  *                and the caller should print the remaining 
  48  *                newline-terminated message to stderr. 
  49  * \param args    the arguments of the format string. 
  53 error_message (const location 
*loc
, warnings flags
, const char *prefix
, 
  54                const char *message
, va_list args
) 
  60     pos 
+= location_print (stderr
, *loc
); 
  62     pos 
+= fprintf(stderr
, "%s", current_file 
? current_file 
: program_name
); 
  63   pos 
+= fprintf(stderr
, ": "); 
  69       else if (*indent_ptr 
> pos
) 
  70         fprintf (stderr
, "%*s", *indent_ptr 
- pos
, ""); 
  75     fprintf (stderr
, "%s: ", prefix
); 
  77   vfprintf (stderr
, message
, args
); 
  79     size_t l 
= strlen (message
); 
  80     if (l 
< 2 || message
[l
-2] != ':' || message
[l
-1] != ' ') 
  88 /** Raise a complaint. That can be a fatal error, a complaint or just a 
  92 complains (const location 
*loc
, warnings flags
, const char *message
, 
  95   if (flags 
& complaint
) 
  97       error_message (loc
, complaint
, NULL
, message
, args
); 
  98       complaint_issued 
= true; 
 100   else if (flags 
& fatal
) 
 102       error_message (loc
, fatal
, _("fatal error"), message
, args
); 
 105   else if (flags 
& Wyacc
) 
 109           error_message (loc
, flags
, NULL
, message
, args
); 
 110           complaint_issued 
= true; 
 112       else if (warnings_flag 
& Wyacc
) 
 114           set_warning_issued (); 
 115           error_message (loc
, flags
, _("warning"), message
, args
); 
 120       if (! (warnings_flag 
& flags
)) 
 122       set_warning_issued (); 
 123       error_message (loc
, flags
, _("warning"), message
, args
); 
 128 complain (warnings flags
, const char *message
, ...) 
 131   va_start (args
, message
); 
 132   complains (NULL
, flags
, message
, args
); 
 137 complain_at (location loc
, warnings flags
, const char *message
, ...) 
 140   va_start (args
, message
); 
 141   complains (&loc
, flags
, message
, args
); 
 145 void complain_at_indent (location loc
, warnings flags
, unsigned *indent
, 
 146                          const char *message
, ...) 
 151   va_start (args
, message
); 
 152   complains (&loc
, flags
, message
, args
); 
 156 /*--------------------------------. 
 157 | Report a warning, and proceed.  | 
 158 `--------------------------------*/ 
 161 set_warning_issued (void) 
 163   static bool warning_issued 
= false; 
 164   if (!warning_issued 
&& (warnings_flag 
& Werror
)) 
 166       fprintf (stderr
, "%s: warnings being treated as errors\n", program_name
); 
 167       complaint_issued 
= true; 
 169   warning_issued 
= true;