aboutsummaryrefslogtreecommitdiff
path: root/gcc/diagnostic.h
diff options
context:
space:
mode:
authorGabriel Dos Reis <gdr@integrable-solutions.net>2003-07-25 09:52:32 +0000
committerGabriel Dos Reis <gdr@integrable-solutions.net>2003-07-25 09:52:32 +0000
commit0e9804cbaecd034ef3396eb18abd3701389a7423 (patch)
tree0cd9e2817d3c1f65316bb57b92b7f8d6cd0f1864 /gcc/diagnostic.h
parent68dd7069646b0da06b0ae982621f5833812cdb07 (diff)
Remove pedwarn_with_decl, warning_with_decl and error_with_decl
from GCC. * calls.c (try_to_integrate): Don't use xxx_with_decl. (expand_call): Likewise. * dwarfout.c (output_reg_number): Likewise. * expr.c (expand_expr): Likewise. * function.c (assign_temp): Likewise. (uninitialized_vars_warning): Likewise. (setjmp_args_warning): Likewise. (expand_function_end): Likewise. * stmt.c (fixup_gotos): Likewise. (warn_about_unused_variables): Likewise. (expand_end_bindings): Likewise. * stor-layout.c (layout_decl): Likewise. (place_field): Likewise. * toplev.c (check_global_declarations): Likewise. (rest_of_handle_inlining): Likewise. (default_tree_printer): New function. (general_init): Initialize diagnostic machinery before routing signals to the ICE machinery. Set default tree printer. * toplev.h (pedwarn_with_decl): Remove declaration. (warning_with_decl): Likewise. (error_with_decl): Likewise. (pedwarn): Remove attribute for the time being. * tree-inline.c (expand_call_inline): Don't use xxx_with_decl. * varasm.c (named_section): Likewise. (make_decl_rtl): Likewise. (assemble_variable): Likewise. (merge_weak): Likewise. (declare_weak): Likewise. * diagnostic.h: Move non-diagnostic stuff into pretty-print.h. * diagnostic.c: Move non-diagnostic stuff into pretty-print.c. (format_with_decl): Remove. (diagnostic_for_decl): Likewise. (pedwarn_with_decl): Likewise. (warning_with_decl): Likewise. (error_with_decl): Likewise. (diagnostic_initialize): Adjust. (diagnostic_count_diagnostic): Likewise. (announce_function): Likewise. (lhd_print_error_function): Likewise. (diagnostic_report_current_module): Likewise. (default_diagnostic_starter): Likewise. (diagnostic_report_diagnostic): Likewise. (default_diagnostic_finalizer): Likewise. (verbatim): Likewise. (error): Likewise. (warning): Likewise. * opts.c (common_handle_option): Likewise. * pretty-print.c: New file. * c-pretty-print.h (pp_base): Override. * c-pretty-print.c: Adjust use of macros throughout. (pp_buffer): New macro. (pp_newline): Likewise. * c-objc-common.c (c_tree_printer): Adjust prototype. Tidy. * Makefile.in (DIAGNOSTIC_H): New variable. (c-errors.o): Use it. (c-objc-common.o): Likewise. (c-common.o): Likewise. (c-opts.o): Likewise. (c-format.o): Likewise. (diagnostic.o): Likewise. (opts.o): Likewise. (toplev.o): Likewise. (rtl-error.o): Likewise. (dwarf2out.o): Likewise. (jump.o): Likewise. (pretty-print.o): New rule. cp/ * Make-lang.in (cp/error.o): Depend on DIAGNOSTIC_H. * error.c: Use the new pretty-printer fraamework. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@69773 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/diagnostic.h')
-rw-r--r--gcc/diagnostic.h162
1 files changed, 9 insertions, 153 deletions
diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h
index cd0cebaf1bd..1a26553f9a2 100644
--- a/gcc/diagnostic.h
+++ b/gcc/diagnostic.h
@@ -22,17 +22,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#ifndef GCC_DIAGNOSTIC_H
#define GCC_DIAGNOSTIC_H
-#include "obstack.h"
-#include "input.h"
-
-/* The type of a text to be formatted according a format specification
- along with a list of things. */
-typedef struct
-{
- const char *format_spec;
- va_list *args_ptr;
- int err_no; /* for %m */
-} text_info;
+#include "pretty-print.h"
/* Constants used to discriminate diagnostics. */
typedef enum
@@ -56,118 +46,6 @@ typedef struct
#define pedantic_error_kind() (flag_pedantic_errors ? DK_ERROR : DK_WARNING)
-/* How often diagnostics are prefixed by their locations:
- o DIAGNOSTICS_SHOW_PREFIX_NEVER: never - not yet supported;
- o DIAGNOSTICS_SHOW_PREFIX_ONCE: emit only once;
- o DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE: emit each time a physical
- line is started. */
-typedef enum
-{
- DIAGNOSTICS_SHOW_PREFIX_ONCE = 0x0,
- DIAGNOSTICS_SHOW_PREFIX_NEVER = 0x1,
- DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE = 0x2
-} diagnostic_prefixing_rule_t;
-
-/* This data structure encapsulates an output_buffer's state. */
-typedef struct
-{
- /* The prefix for each new line. */
- const char *prefix;
-
- /* The real upper bound of number of characters per line, taking into
- account the case of a very very looong prefix. */
- int maximum_length;
-
- /* The ideal upper bound of number of characters per line, as suggested
- by front-end. */
- int ideal_maximum_length;
-
- /* Indentation count. */
- int indent_skip;
-
- /* Nonzero if current PREFIX was emitted at least once. */
- bool emitted_prefix_p;
-
- /* Nonzero means one should emit a newline before outputting anything. */
- bool need_newline_p;
-
- /* Current prefixing rule. */
- diagnostic_prefixing_rule_t prefixing_rule;
-} output_state;
-
-/* The type of a hook that formats client-specific data (trees mostly) into
- an output_buffer. A client-supplied formatter returns true if everything
- goes well. */
-typedef struct output_buffer output_buffer;
-typedef bool (*printer_fn) (output_buffer *, text_info *);
-
-/* The output buffer datatype. This is best seen as an abstract datatype
- whose fields should not be accessed directly by clients. */
-struct output_buffer
-{
- /* The current state of the buffer. */
- output_state state;
-
- /* Where to output formatted text. */
- FILE* stream;
-
- /* The obstack where the text is built up. */
- struct obstack obstack;
-
- /* The amount of characters output so far. */
- int line_length;
-
- /* This must be large enough to hold any printed integer or
- floating-point value. */
- char digit_buffer[128];
-
- /* If non-NULL, this function formats a TEXT into the BUFFER. When called,
- TEXT->format_spec points to a format code. FORMAT_DECODER should call
- output_add_string (and related functions) to add data to the BUFFER.
- FORMAT_DECODER can read arguments from *TEXT->args_pts using VA_ARG.
- If the BUFFER needs additional characters from the format string, it
- should advance the TEXT->format_spec as it goes. When FORMAT_DECODER
- returns, TEXT->format_spec should point to the last character processed.
- */
- printer_fn format_decoder;
-} ;
-
-#define output_prefix(BUFFER) (BUFFER)->state.prefix
-
-/* The stream attached to the output_buffer, where the formatted
- diagnostics will ultimately go. Works only on `output_buffer *'. */
-#define output_buffer_attached_stream(BUFFER) (BUFFER)->stream
-
-/* In line-wrapping mode, whether we should start a new line. */
-#define output_needs_newline(BUFFER) (BUFFER)->state.need_newline_p
-
-/* The amount of whitespace to be emitted when starting a new line. */
-#define output_indentation(BUFFER) (BUFFER)->state.indent_skip
-
-/* A pointer to the formatted diagnostic message. */
-#define output_message_text(BUFFER) \
- ((const char *) obstack_base (&(BUFFER)->obstack))
-
-/* Client supplied function used to decode formats. */
-#define output_format_decoder(BUFFER) (BUFFER)->format_decoder
-
-/* Prefixing rule used in formatting a diagnostic message. */
-#define output_prefixing_rule(BUFFER) (BUFFER)->state.prefixing_rule
-
-/* Maximum characters per line in automatic line wrapping mode.
- Zero means don't wrap lines. */
-#define output_line_cutoff(BUFFER) (BUFFER)->state.ideal_maximum_length
-
-/* True if BUFFER is in line-wrapping mode. */
-#define output_is_line_wrapping(BUFFER) (output_line_cutoff (BUFFER) > 0)
-
-#define output_formatted_scalar(BUFFER, FORMAT, SCALAR) \
- do \
- { \
- sprintf ((BUFFER)->digit_buffer, FORMAT, SCALAR); \
- output_add_string (BUFFER, (BUFFER)->digit_buffer); \
- } \
- while (0)
/* Forward declarations. */
typedef struct diagnostic_context diagnostic_context;
@@ -179,10 +57,8 @@ typedef diagnostic_starter_fn diagnostic_finalizer_fn;
the context of a diagnostic message. */
struct diagnostic_context
{
- /* Where most of the diagnostic formatting work is done. In Object
- Oriented terms, we'll say that diagnostic_context is a sub-class of
- output_buffer. */
- output_buffer buffer;
+ /* Where most of the diagnostic formatting work is done. */
+ pretty_printer *printer;
/* The number of times we have issued diagnostics. */
int diagnostic_count[DK_LAST_DIAGNOSTIC_KIND];
@@ -233,15 +109,17 @@ struct diagnostic_context
/* Extension hook for client. */
#define diagnostic_auxiliary_data(DC) (DC)->x_data
-/* Same as output_format_decoder. Works on 'diagnostic_context *'. */
-#define diagnostic_format_decoder(DC) output_format_decoder (&(DC)->buffer)
+/* Same as pp_format_decoder. Works on 'diagnostic_context *'. */
+#define diagnostic_format_decoder(DC) pp_format_decoder ((DC)->printer)
/* Same as output_prefixing_rule. Works on 'diagnostic_context *'. */
-#define diagnostic_prefixing_rule(DC) output_prefixing_rule (&(DC)->buffer)
+#define diagnostic_prefixing_rule(DC) ((DC)->printer->prefixing_rule)
/* Maximum characters per line in automatic line wrapping mode.
Zero means don't wrap lines. */
-#define diagnostic_line_cutoff(DC) output_line_cutoff (&(DC)->buffer)
+#define diagnostic_line_cutoff(DC) ((DC)->printer->ideal_maximum_length)
+
+#define diagnostic_flush_buffer(DC) pp_flush ((DC)->printer)
/* True if the last function in which a diagnostic was reported is
different from the current one. */
@@ -294,7 +172,6 @@ extern diagnostic_context *global_dc;
extern void diagnostic_initialize (diagnostic_context *);
extern void diagnostic_report_current_module (diagnostic_context *);
extern void diagnostic_report_current_function (diagnostic_context *);
-extern void diagnostic_flush_buffer (diagnostic_context *);
extern void diagnostic_report_diagnostic (diagnostic_context *,
diagnostic_info *);
extern void diagnostic_set_info (diagnostic_info *, const char *, va_list *,
@@ -302,27 +179,6 @@ extern void diagnostic_set_info (diagnostic_info *, const char *, va_list *,
extern char *diagnostic_build_prefix (diagnostic_info *);
/* Pure text formatting support functions. */
-extern void init_output_buffer (output_buffer *, const char *, int);
-extern void output_clear (output_buffer *);
-extern const char *output_last_position (const output_buffer *);
-extern void output_set_prefix (output_buffer *, const char *);
-extern void output_destroy_prefix (output_buffer *);
-extern void output_set_maximum_length (output_buffer *, int);
-extern void output_emit_prefix (output_buffer *);
-extern void output_add_newline (output_buffer *);
-extern void output_add_space (output_buffer *);
-extern int output_space_left (const output_buffer *);
-extern void output_append (output_buffer *, const char *, const char *);
-extern void output_add_character (output_buffer *, int);
-extern void output_decimal (output_buffer *, int);
-extern void output_host_wide_integer (output_buffer *, HOST_WIDE_INT);
-extern void output_add_string (output_buffer *, const char *);
-extern void output_add_identifier (output_buffer *, tree);
-extern const char *output_finalize_message (output_buffer *);
-extern void output_clear_message_text (output_buffer *);
-extern void output_printf (output_buffer *, const char *, ...)
- ATTRIBUTE_PRINTF_2;
-extern void output_verbatim (output_buffer *, const char *, ...);
extern void verbatim (const char *, ...);
extern char *file_name_as_prefix (const char *);