From: Akim Demaille Date: Mon, 10 Jul 2006 19:36:31 +0000 (+0000) Subject: * src/complain.c (error_message, ERROR_MESSAGE): New. X-Git-Tag: v2.3b~329 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/23eb2a692f2e966c840d5f953de4bf8e26d71225 * 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. --- diff --git a/ChangeLog b/ChangeLog index 8aecae0b..bd4ebbd8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-07-10 Akim Demaille + + * 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 * NEWS: Instead of %union, you can define and use your own union type diff --git a/src/complain.c b/src/complain.c index 927dbb63..f3cd0ec1 100644 --- a/src/complain.c +++ b/src/complain.c @@ -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,49 +33,65 @@ 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 a warning, and proceed. | -`--------------------------------*/ +/** 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 -warn_at (location loc, const char *message, ...) +error_message (location *loc, + const char *prefix, + const char *message, va_list args) { - va_list args; - - location_print (stderr, loc); + if (loc) + location_print (stderr, *loc); + else + fputs (current_file ? current_file : program_name, stderr); fputs (": ", stderr); - fputs (_("warning: "), stderr); - va_start (args, message); + if (prefix) + fprintf (stderr, "%s: ", prefix); + vfprintf (stderr, message, args); va_end (args); - - warning_issued = true; 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. | +`--------------------------------*/ + +void +warn_at (location loc, const char *message, ...) +{ + ERROR_MESSAGE (&loc, _("warning"), message); } void warn (const char *message, ...) { - va_list args; - - fprintf (stderr, "%s: %s", current_file ? current_file : program_name, _("warning: ")); + ERROR_MESSAGE (NULL, _("warning"), message); +} - va_start (args, message); - vfprintf (stderr, message, args); - va_end (args); - warning_issued = true; - putc ('\n', stderr); -} - /*-----------------------------------------------------------. | 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); } diff --git a/src/complain.h b/src/complain.h index 9ae334a4..fe23eb9f 100644 --- a/src/complain.h +++ b/src/complain.h @@ -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