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. */ 33extern char *program_name; 34 35/* This variable is set each time `warn' is called. */ 36bool warning_issued; 37 38/* This variable is set each time `complain' is called. */ 39bool complaint_issued; 40 41 42/*--------------------------------. 43| Report a warning, and proceed. | 44`--------------------------------*/ 45 46void 47warn_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 63void 64warn (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 82void 83complain_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 98void 99complain (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 117void 118fatal_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 133void 134fatal (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