/** 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. Iff it * ends with ": ", then no trailing newline is printed, * and the caller should print the remaining * newline-terminated message to stderr. * \param args the arguments of the format string. */ static void error_message (location *loc, const char *prefix, const char *message, va_list args) { unsigned pos = 0; if (loc) pos += location_print (stderr, *loc); else pos += fprintf(stderr, "%s", current_file ? current_file : program_name); pos += fprintf(stderr, ": "); if (indent_ptr) { if (!*indent_ptr) *indent_ptr = pos; else if (*indent_ptr > pos) fprintf (stderr, "%*s", *indent_ptr - pos, ""); indent_ptr = 0; } if (prefix) fprintf (stderr, "%s: ", prefix); vfprintf (stderr, message, args); { size_t l = strlen (message); if (l < 2 || message[l-2] != ':' || message[l-1] != ' ') { putc ('\n', stderr); fflush (stderr); } } }
void grammar_rules_never_reduced_report (const char *message) { rule_number r; for (r = 0; r < nrules ; ++r) if (!rules[r].useful) { location_print (stderr, rules[r].location); fprintf (stderr, ": %s: %s: ", _("warning"), message); rule_print (&rules[r], stderr); } }
/** Report an error message. * * \param loc the location, defaulting to the current file, * or the program name. * \param flags the category for this message. * \param prefix put before the message (e.g., "warning"). * \param message the error message, a printf format string. Iff it * ends with ": ", then no trailing newline is printed, * and the caller should print the remaining * newline-terminated message to stderr. * \param args the arguments of the format string. */ static void error_message (const location *loc, warnings flags, const char *prefix, const char *message, va_list args) { unsigned pos = 0; if (loc) pos += location_print (*loc, stderr); else pos += fprintf (stderr, "%s", current_file ? current_file : program_name); pos += fprintf (stderr, ": "); if (indent_ptr) { if (*indent_ptr) prefix = NULL; if (!*indent_ptr) *indent_ptr = pos; else if (*indent_ptr > pos) fprintf (stderr, "%*s", *indent_ptr - pos, ""); indent_ptr = 0; } if (prefix) fprintf (stderr, "%s: ", prefix); vfprintf (stderr, message, args); if (! (flags & silent)) warnings_print_categories (flags, stderr); { size_t l = strlen (message); if (l < 2 || message[l - 2] != ':' || message[l - 1] != ' ') { putc ('\n', stderr); fflush (stderr); if (loc && feature_flag & feature_caret && !(flags & no_caret)) location_caret (*loc, stderr); } } fflush (stderr); }