diff options
author | gdr <gdr@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-04-22 11:49:16 +0000 |
---|---|---|
committer | gdr <gdr@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-04-22 11:49:16 +0000 |
commit | 993ca5a5cc7031154e78a5430bb2018205710bde (patch) | |
tree | 0f2cf6c7437414df4f5307941db234dbd22b8373 /gcc/diagnostic.h | |
parent | 7b4cf6119203a35226d6b4d70afda571d25f1ff0 (diff) | |
download | gcc-993ca5a5cc7031154e78a5430bb2018205710bde.tar.gz |
2000-04-22 Gabriel Dos Reis <gdr@codesourcery.com>
* diagnostic.h: New file.
* Makefile.in (diagnostic.o): Depends on diagnostic.h
* diagnostic.c: Tweak. Rationalize the output logic. Adjust
various function prototypes.
(diagnostic.h): #include.
(struct output_buffer): Move into diagnostic.h.
(get_output_prefix): Rename to output_get_prefix. Export.
(init_output_buffer): Export. Break out. Ajust intialization.
(output_space_left, output_append): Export.
(output_newline): Rename to output_add_newline. Export.
(output_clear): Nullify additional output_buffer fields.
(output_puts): Rename to output_add_string. Export.
(dump_output): Rename to output_flush_on. Export.
(build_location_prefix): Constify return-type.
(emit_output_prefix): Rename to output_emit_prefix. Export.
(set_real_maximum_length): New function.
(output_set_maximum_length): Ditto
(output_clear): Ditto.
(output_add_character): Ditto.
(output_add_integer): Ditto.
(output_add_space): Ditto.
(output_format): Ditto.
(output_printf): Adjust buffer initialization.
(vline_wrapper_message_with_location): Ditto.
(v_message_with_decl): Ditto. Adjust call to output_puts
and get_output_prefix.
(default_print_error_function): Adjust buffer intialization.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33337 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/diagnostic.h')
-rw-r--r-- | gcc/diagnostic.h | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h new file mode 100644 index 00000000000..d60d240626c --- /dev/null +++ b/gcc/diagnostic.h @@ -0,0 +1,96 @@ +/* Various declarations for language-independent diagnostics subroutines. + Copyright (C) 2000 Free Software Foundation, Inc. + Contributed by Gabriel Dos Reis <gdr@codesourcery.com> + +This file is part of GNU CC. + +GNU CC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU CC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU CC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#ifndef __GCC_DIAGNOSTIC_H__ +#define __GCC_DIAGNOSTIC_H__ + +#include "obstack.h" + +/* Forward declarations. */ +typedef struct output_buffer output_buffer; + +/* The type of front-end specific hook that formats trees into an + output_buffer. */ +typedef void (*printer_fn) PARAMS ((output_buffer *)); + +/* The output buffer datatype. This is best seen as an abstract datatype. */ +struct output_buffer +{ + /* Internal data. These fields should not be accessed directly by + front-ends. */ + + /* The obstack where the text is built up. */ + struct obstack obstack; + /* The prefix for each new line. */ + const char *prefix; + /* The amount of characters output so far. */ + int line_length; + /* The real upper bound of number of characters per line, taking into + accompt 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; + + /* Public fields. These are used by front-ends to extract formats and + arguments from the variable argument-list passed to output_format. */ + + /* The current char to output. Updated by front-end (*format_map) when + it is called to report front-end printer for a specified format. */ + const char *cursor; + /* Variable argument-list for formatting. */ + va_list format_args; +}; + +/* If non-NULL, this function formats data in the BUFFER. + BUFFER->CURSOR points to a format code. LANG_PRINTER should + call output_add_string (and related functions) to add data to + the BUFFER. LANG_PRINTER can read arguments from + BUFFER->FORMAT_ARGS using VA_ARG. If the BUFFER needs + additional characters from the format string, it should advance + the BUFFER->CURSOR as it goes. When LANG_PRINTER returns, + BUFFER->CURSOR should point to the last character processed. */ + +extern printer_fn lang_printer; + +/* Prototypes */ +void init_output_buffer PARAMS ((output_buffer *, const char *, int)); +void output_clear PARAMS ((output_buffer *)); +const char *output_get_prefix PARAMS ((const output_buffer *)); +void output_set_prefix PARAMS ((output_buffer *, const char *)); +void output_set_maximum_length PARAMS ((output_buffer *, int)); +void output_emit_prefix PARAMS ((output_buffer *)); +void output_add_newline PARAMS ((output_buffer *)); +void output_add_space PARAMS ((output_buffer *)); +int output_space_left PARAMS ((const output_buffer *)); +void output_append PARAMS ((output_buffer *, const char *, + const char *)); +void output_add_character PARAMS ((output_buffer *, int)); +void output_add_integer PARAMS ((output_buffer *, HOST_WIDE_INT)); +void output_add_string PARAMS ((output_buffer *, const char *)); +const char *output_finish PARAMS ((output_buffer *)); +void output_flush_on PARAMS ((output_buffer *, FILE *)); +void output_printf PARAMS ((output_buffer *, const char *, + ...)) ATTRIBUTE_PRINTF_2; +void output_format PARAMS ((output_buffer *, const char *)); +int output_is_line_wrapping PARAMS ((output_buffer *)); + +#endif /* __GCC_DIAGNOSTIC_H__ */ |