• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Declaration for error-reporting function for Bison.
2 
3    Copyright (C) 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
4 
5    This program is free software; you can redistribute it and/or modify it
6    under the terms of the GNU General Public License as published by the
7    Free Software Foundation; either version 2, or (at your option) any
8    later version.
9 
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14 
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software
17    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
18    USA.  */
19 
20 /* Based on error.c and error.h,
21    written by David MacKenzie <djm@gnu.ai.mit.edu>.  */
22 
23 #include <config.h>
24 #include "system.h"
25 
26 #include <stdarg.h>
27 
28 #include "complain.h"
29 #include "files.h"
30 
31 /* The calling program should define program_name and set it to the
32    name of the executing program.  */
33 extern char *program_name;
34 
35 /* This variable is set each time `warn' is called.  */
36 bool warning_issued;
37 
38 /* This variable is set each time `complain' is called.  */
39 bool complaint_issued;
40 
41 
42 /*--------------------------------.
43 | Report a warning, and proceed.  |
44 `--------------------------------*/
45 
46 void
warn_at(location loc,const char * message,...)47 warn_at (location loc, const char *message, ...)
48 {
49   va_list args;
50 
51   location_print (stderr, loc);
52   fputs (": ", stderr);
53   fputs (_("warning: "), stderr);
54 
55   va_start (args, message);
56   vfprintf (stderr, message, args);
57   va_end (args);
58 
59   warning_issued = true;
60   putc ('\n', stderr);
61 }
62 
63 void
warn(const char * message,...)64 warn (const char *message, ...)
65 {
66   va_list args;
67 
68   fprintf (stderr, "%s: %s", current_file ? current_file : program_name, _("warning: "));
69 
70   va_start (args, message);
71   vfprintf (stderr, message, args);
72   va_end (args);
73 
74   warning_issued = true;
75   putc ('\n', stderr);
76 }
77 
78 /*-----------------------------------------------------------.
79 | An error has occurred, but we can proceed, and die later.  |
80 `-----------------------------------------------------------*/
81 
82 void
complain_at(location loc,const char * message,...)83 complain_at (location loc, const char *message, ...)
84 {
85   va_list args;
86 
87   location_print (stderr, loc);
88   fputs (": ", stderr);
89 
90   va_start (args, message);
91   vfprintf (stderr, message, args);
92   va_end (args);
93 
94   complaint_issued = true;
95   putc ('\n', stderr);
96 }
97 
98 void
complain(const char * message,...)99 complain (const char *message, ...)
100 {
101   va_list args;
102 
103   fprintf (stderr, "%s: ", current_file ? current_file : program_name);
104 
105   va_start (args, message);
106   vfprintf (stderr, message, args);
107   va_end (args);
108 
109   complaint_issued = true;
110   putc ('\n', stderr);
111 }
112 
113 /*-------------------------------------------------.
114 | A severe error has occurred, we cannot proceed.  |
115 `-------------------------------------------------*/
116 
117 void
fatal_at(location loc,const char * message,...)118 fatal_at (location loc, const char *message, ...)
119 {
120   va_list args;
121 
122   location_print (stderr, loc);
123   fputs (": ", stderr);
124   fputs (_("fatal error: "), stderr);
125 
126   va_start (args, message);
127   vfprintf (stderr, message, args);
128   va_end (args);
129   putc ('\n', stderr);
130   exit (EXIT_FAILURE);
131 }
132 
133 void
fatal(const char * message,...)134 fatal (const char *message, ...)
135 {
136   va_list args;
137 
138   fprintf (stderr, "%s: ", current_file ? current_file : program_name);
139 
140   fputs (_("fatal error: "), stderr);
141 
142   va_start (args, message);
143   vfprintf (stderr, message, args);
144   va_end (args);
145   putc ('\n', stderr);
146   exit (EXIT_FAILURE);
147 }
148