Home | History | Annotate | Download | only in src
      1 /* Declaration for error-reporting function for Bison.
      2 
      3    Copyright (C) 2000-2002, 2006, 2009-2012 Free Software Foundation,
      4    Inc.
      5 
      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.
     10 
     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.
     15 
     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/>.  */
     18 
     19 #ifndef COMPLAIN_H_
     20 # define COMPLAIN_H_ 1
     21 
     22 # include "location.h"
     23 
     24 # ifdef	__cplusplus
     25 extern "C" {
     26 # endif
     27 
     28 /* Sub-messages indent. */
     29 #define SUB_INDENT (4)
     30 
     31 /** Record that a warning is about to be issued, and treat it as an
     32     error if <tt>warnings_flag & warnings_error</tt>.  This is exported
     33     only for the sake of Yacc-compatible conflict reports in conflicts.c.
     34     All other warnings should be implemented in complain.c and should use
     35     the normal warning format.  */
     36 void set_warning_issued (void);
     37 
     38 /** Informative messages, but we proceed.  Report iff
     39     <tt>warnings_flag & warnings_other</tt>.  */
     40 
     41 void warn (char const *format, ...)
     42   __attribute__ ((__format__ (__printf__, 1, 2)));
     43 
     44 void warn_at (location loc, char const *format, ...)
     45   __attribute__ ((__format__ (__printf__, 2, 3)));
     46 
     47 /* Generate a message aligned by an indent.
     48    When *indent == 0, assign message's indent to *indent,
     49    When *indent > 0, align the message by *indent value. */
     50 void warn_at_indent (location loc, unsigned *indent,
     51                      char const *format, ...)
     52   __attribute__ ((__format__ (__printf__, 3, 4)));
     53 
     54 /** An error, but we continue and die later.  */
     55 
     56 void complain (char const *format, ...)
     57   __attribute__ ((__format__ (__printf__, 1, 2)));
     58 
     59 void complain_at (location loc, char const *format, ...)
     60   __attribute__ ((__format__ (__printf__, 2, 3)));
     61 
     62 /* Generate a message aligned by an indent.
     63    When *indent == 0, assign message's indent to *indent,
     64    When *indent > 0, align the message by *indent value. */
     65 void complain_at_indent (location loc, unsigned *indent,
     66                          char const *format, ...)
     67   __attribute__ ((__format__ (__printf__, 3, 4)));
     68 
     69 /** An incompatibility with POSIX Yacc: mapped either to warn* or
     70     complain* depending on yacc_flag. */
     71 
     72 void yacc_at (location loc, char const *format, ...)
     73   __attribute__ ((__format__ (__printf__, 2, 3)));
     74 
     75 /** A midrule-value warning.  Report iff
     76     <tt>warnings_flag & warnings_midrule_values</tt>.  */
     77 
     78 void midrule_value_at (location loc, char const *format, ...)
     79   __attribute__ ((__format__ (__printf__, 2, 3)));
     80 
     81 /** A fatal error, causing immediate exit.  */
     82 
     83 void fatal (char const *format, ...)
     84   __attribute__ ((__noreturn__, __format__ (__printf__, 1, 2)));
     85 
     86 void fatal_at (location loc, char const *format, ...)
     87   __attribute__ ((__noreturn__, __format__ (__printf__, 2, 3)));
     88 
     89 /** Whether an error was reported.  */
     90 extern bool complaint_issued;
     91 
     92 # ifdef	__cplusplus
     93 }
     94 # endif
     95 
     96 #endif /* !COMPLAIN_H_ */
     97