* src/complain.c (error_message, ERROR_MESSAGE): New.

To factor...
(fatal_at, fatal, warn_at, warn, complain_at, complain): these.
* src/complain.h, src/complain.c (warning_issued): Remove, unused.
This commit is contained in:
Akim Demaille
2006-07-10 19:36:31 +00:00
parent b321737f20
commit 23eb2a692f
3 changed files with 63 additions and 76 deletions

View File

@@ -1,3 +1,10 @@
2006-07-10 Akim Demaille <akim@lrde.epita.fr>
* src/complain.c (error_message, ERROR_MESSAGE): New.
To factor...
(fatal_at, fatal, warn_at, warn, complain_at, complain): these.
* src/complain.h, src/complain.c (warning_issued): Remove, unused.
2006-07-09 Paul Eggert <eggert@cs.ucla.edu>
* NEWS: Instead of %union, you can define and use your own union type

View File

@@ -1,6 +1,7 @@
/* Declaration for error-reporting function for Bison.
Copyright (C) 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -32,13 +33,48 @@
name of the executing program. */
extern char *program_name;
/* This variable is set each time `warn' is called. */
bool warning_issued;
/* This variable is set each time `complain' is called. */
bool complaint_issued;
/** Report an error message.
*
* \param loc the location, defaulting to the current file,
* or the program name.
* \param prefix put before the message (e.g., "warning").
* \param message the error message, a printf format string.
* \param args the arguments of the format string.
*/
static
void
error_message (location *loc,
const char *prefix,
const char *message, va_list args)
{
if (loc)
location_print (stderr, *loc);
else
fputs (current_file ? current_file : program_name, stderr);
fputs (": ", stderr);
if (prefix)
fprintf (stderr, "%s: ", prefix);
vfprintf (stderr, message, args);
va_end (args);
putc ('\n', stderr);
fflush (stderr);
}
/** Wrap error_message() with varargs handling. */
#define ERROR_MESSAGE(Loc, Prefix, Message) \
{ \
va_list args; \
va_start (args, Message); \
error_message (Loc, Prefix, Message, args); \
}
/*--------------------------------.
| Report a warning, and proceed. |
`--------------------------------*/
@@ -46,35 +82,16 @@ bool complaint_issued;
void
warn_at (location loc, const char *message, ...)
{
va_list args;
location_print (stderr, loc);
fputs (": ", stderr);
fputs (_("warning: "), stderr);
va_start (args, message);
vfprintf (stderr, message, args);
va_end (args);
warning_issued = true;
putc ('\n', stderr);
ERROR_MESSAGE (&loc, _("warning"), message);
}
void
warn (const char *message, ...)
{
va_list args;
fprintf (stderr, "%s: %s", current_file ? current_file : program_name, _("warning: "));
va_start (args, message);
vfprintf (stderr, message, args);
va_end (args);
warning_issued = true;
putc ('\n', stderr);
ERROR_MESSAGE (NULL, _("warning"), message);
}
/*-----------------------------------------------------------.
| An error has occurred, but we can proceed, and die later. |
`-----------------------------------------------------------*/
@@ -82,34 +99,18 @@ warn (const char *message, ...)
void
complain_at (location loc, const char *message, ...)
{
va_list args;
location_print (stderr, loc);
fputs (": ", stderr);
va_start (args, message);
vfprintf (stderr, message, args);
va_end (args);
ERROR_MESSAGE (&loc, NULL, message);
complaint_issued = true;
putc ('\n', stderr);
}
void
complain (const char *message, ...)
{
va_list args;
fprintf (stderr, "%s: ", current_file ? current_file : program_name);
va_start (args, message);
vfprintf (stderr, message, args);
va_end (args);
ERROR_MESSAGE (NULL, NULL, message);
complaint_issued = true;
putc ('\n', stderr);
}
/*-------------------------------------------------.
| A severe error has occurred, we cannot proceed. |
`-------------------------------------------------*/
@@ -117,31 +118,13 @@ complain (const char *message, ...)
void
fatal_at (location loc, const char *message, ...)
{
va_list args;
location_print (stderr, loc);
fputs (": ", stderr);
fputs (_("fatal error: "), stderr);
va_start (args, message);
vfprintf (stderr, message, args);
va_end (args);
putc ('\n', stderr);
ERROR_MESSAGE (&loc, _("fatal error"), message);
exit (EXIT_FAILURE);
}
void
fatal (const char *message, ...)
{
va_list args;
fprintf (stderr, "%s: ", current_file ? current_file : program_name);
fputs (_("fatal error: "), stderr);
va_start (args, message);
vfprintf (stderr, message, args);
va_end (args);
putc ('\n', stderr);
ERROR_MESSAGE (NULL, _("fatal error"), message);
exit (EXIT_FAILURE);
}

View File

@@ -1,5 +1,5 @@
/* Declaration for error-reporting function for Bison.
Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
Copyright (C) 2000, 2001, 2002, 2006 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -25,7 +25,7 @@
extern "C" {
# endif
/* Informative messages, but we proceed. */
/** Informative messages, but we proceed. */
void warn (char const *format, ...)
__attribute__ ((__format__ (__printf__, 1, 2)));
@@ -33,7 +33,7 @@ void warn (char const *format, ...)
void warn_at (location loc, char const *format, ...)
__attribute__ ((__format__ (__printf__, 2, 3)));
/* Something bad happened, but let's continue and die later. */
/** An error, but we continue and die later. */
void complain (char const *format, ...)
__attribute__ ((__format__ (__printf__, 1, 2)));
@@ -41,7 +41,7 @@ void complain (char const *format, ...)
void complain_at (location loc, char const *format, ...)
__attribute__ ((__format__ (__printf__, 2, 3)));
/* Something bad happened, and let's die now. */
/** A fatal error, causing immediate exit. */
void fatal (char const *format, ...)
__attribute__ ((__noreturn__, __format__ (__printf__, 1, 2)));
@@ -49,10 +49,7 @@ void fatal (char const *format, ...)
void fatal_at (location loc, char const *format, ...)
__attribute__ ((__noreturn__, __format__ (__printf__, 2, 3)));
/* This variable is set each time `warn' is called. */
extern bool warning_issued;
/* This variable is set each time `complain' is called. */
/** Whether an error was reported. */
extern bool complaint_issued;
# ifdef __cplusplus