/* Various declarations for language-independent diagnostics subroutines.
- Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by Gabriel Dos Reis <gdr@codesourcery.com>
This file is part of GCC.
printer_fn format_decoder;
};
-/* Current state of the diagnostic_context' output_buffer. This macro
- accepts both `diagnostic_context *' and `output_buffer *'. */
-#define output_buffer_state(BUFFER) ((output_buffer *)BUFFER)->state
+/* Current state of an output_buffer. */
+#define output_buffer_state(BUFFER) (BUFFER)->state
/* The stream attached to the output_buffer, where the formatted
diagnostics will ultimately go. Works only on `output_buffer *'. */
/* The rest of the `variable argument list' not yet processed.
This macro works on both `output_state *' and `output_buffer *'. */
#define output_buffer_format_args(BUFFER) \
- *(((output_state *)BUFFER)->format_args)
+ *(((output_state *)(BUFFER))->format_args)
/* In line-wrapping mode, whether we should start a new line. */
#define output_needs_newline(BUFFER) (BUFFER)->state.need_newline_p
#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
+
/* This data structure bundles altogether any information relevant to
the context of a diagnostic message. */
struct diagnostic_context
/* Extension hook for client. */
#define diagnostic_auxiliary_data(DC) (DC)->x_data
-/* Client supplied function used to decode formats. Can operate on both
- `output_buffer *' and `diagnostic_context *'. */
-#define diagnostic_format_decoder(DC) ((output_buffer *)(DC))->format_decoder
+/* Same as output_format_decoder. Works on 'diagnostic_context *'. */
+#define diagnostic_format_decoder(DC) output_format_decoder (&(DC)->buffer)
-/* Prefixing rule used in formatting a diagnostic message. Accepts both
- `output_buffer *' and `diagnostic_context *'. */
-#define diagnostic_prefixing_rule(DC) \
- ((output_buffer *)(DC))->state.prefixing_rule
+/* Same as output_prefixing_rule. Works on 'diagnostic_context *'. */
+#define diagnostic_prefixing_rule(DC) output_prefixing_rule (&(DC)->buffer)
/* Maximum characters per line in automatic line wrapping mode.
Zero means don't wrap lines. */
-#define diagnostic_line_cutoff(DC) \
- ((output_buffer *)(DC))->state.ideal_maximum_length
+#define diagnostic_line_cutoff(DC) output_line_cutoff (&(DC)->buffer)
+
+/* Same as output_buffer_state, but works on 'diagnostic_context *'. */
+#define diagnostic_state(DC) output_buffer_state (&(DC)->buffer)
+
+#define diagnostic_buffer (&global_dc->buffer)
/* This diagnostic context is used by front-ends that directly output
diagnostic messages without going through `error', `warning',
and similar functions. */
extern diagnostic_context *global_dc;
-/* This will be removed shortly. */
-extern output_buffer *diagnostic_buffer;
-
/* The total count of a KIND of diagnostics meitted so far. */
#define diagnostic_kind_count(DC, DK) \
- ((output_buffer *)(DC))->state.diagnostic_count[(int) (DK)]
+ (DC)->buffer.state.diagnostic_count[(int) (DK)]
/* The number of errors that have been issued so far. Ideally, these
would take an output_buffer as an argument. */
extern void record_last_error_function PARAMS ((void));
extern void report_problematic_module PARAMS ((output_buffer *));
-/* Called by report_error_function to print out function name.
- * Default may be overridden by language front-ends. */
-extern void (*print_error_function) PARAMS ((diagnostic_context *,
- const char *));
-
-extern void default_print_error_function PARAMS ((diagnostic_context *,
- const char *));
-
#endif /* ! GCC_DIAGNOSTIC_H */