diff options
author | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-08-02 01:13:45 +0000 |
---|---|---|
committer | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-08-02 01:13:45 +0000 |
commit | 6cae25044a92709544cf8f84d01bfce8c39799ad (patch) | |
tree | af945d1943c9c6b458fec03b961f8f0d523896bf /gcc/cpplib.h | |
parent | efc2922d7c58278878cd89408050d4c7a9c0df4c (diff) | |
download | gcc-6cae25044a92709544cf8f84d01bfce8c39799ad.tar.gz |
* cpperror.c (v_message): Split into _cpp_begin_message and
v_message macro. All callers updated.
(_cpp_begin_message): Do inhibit_errors/inhibit_warnings
checks here.
* cppfiles.c (cpp_syshdr_flags): New function.
(read_include_file): Don't call cpp_output_tokens. Call
enter_file hook.
* cppinit.c (dump_macros_helper): Moved to cppmain.c.
(cpp_reader_init): Don't initialize token_buffer. Call
_cpp_init_internal_pragmas.
(cpp_cleanup): Don't clear token_buffer.
(cpp_start_read): Don't worry about output from -D processing.
Don't call cpp_output_tokens.
(cpp_finish): Don't dump macros here. Don't call
cpp_output_tokens.
* cppmacro.c (_cpp_dump_definition): Rename
cpp_dump_definition. Write directly to a FILE *.
(dump_funlike_macro): Delete.
(dump_macro_args): New.
* cpplex.c (TOKEN_LEN): Convert to inline function.
(_cpp_grow_token_buffer, safe_fwrite, cpp_output_tokens,
cpp_scan_line, _cpp_dump_list): Delete.
(cpp_printf, cpp_output_list): New.
(output_line_command): Don't worry about entering or leaving files.
(cpp_scan_buffer): Just output each token as we hit it.
(process_directive): Don't call cpp_output_tokens.
(_cpp_glue_header_name): Don't use token_buffer.
(output_token, dump_param_spelling): Write directly to a FILE *.
* cpplib.c (pass_thru_directive, dump_macro_name,
pragma_dispatch, do_pragma_gcc): Delete.
(do_define, do_undef, parse_include, do_line, do_ident, do_pragma,
do_pragma_poison, cpp_pop_buffer): Call the appropriate hook
functions.
(do_error, do_warning, pragma_dependency): Call
_cpp_begin_message, then cpp_output_list.
(cpp_register_pragma, cpp_register_pragma_space,
_cpp_init_internal_pragmas): New.
(do_pragma): Walk the pragmas table here.
(do_pragma_once, do_pragma_poison, do_pragma_system_header,
do_pragma_dependency): Return void.
(do_pragma_implementation): Moved to cppmain.c.
* cpplib.h: Update prototypes.
(struct cpp_reader): Remove printer, token_buffer,
token_buffer_size, and limit. Add struct cb, and pragmas.
(struct cpp_printer): Remove last_id and written.
(CPP_WRITTEN, CPP_PWRITTEN, CPP_SET_WRITTEN,
CPP_ADJUST_WRITTEN): Delete.
* cpphash.h: Update prototypes.
(ufputs): New wrapper.
* cppmain.c (cb_define, cb_undef, cb_include, cb_ident,
cb_enter_file, cb_leave_file, cb_def_pragma): New functions.
(main): Set up callbacks. Register #pragma implementation.
Dump macros from here.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35415 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cpplib.h')
-rw-r--r-- | gcc/cpplib.h | 54 |
1 files changed, 33 insertions, 21 deletions
diff --git a/gcc/cpplib.h b/gcc/cpplib.h index 62755a9eb9b..20bea99a19e 100644 --- a/gcc/cpplib.h +++ b/gcc/cpplib.h @@ -432,19 +432,9 @@ struct cpp_options struct cpp_reader { - /* HACK FIXME. Maybe make into cpp_printer printer later. */ - cpp_printer *printer; - /* Top of buffer stack. */ cpp_buffer *buffer; - /* A buffer used for both for cpp_get_token's output, and also internally. */ - unsigned char *token_buffer; - /* Allocated size of token_buffer. CPP_RESERVE allocates space. */ - unsigned int token_buffer_size; - /* End of the written part of token_buffer. */ - unsigned char *limit; - /* Error counter for exit code */ unsigned int errors; @@ -523,6 +513,23 @@ struct cpp_reader real stack. See cpplib.c */ struct obstack *buffer_ob; + /* Pragma table - dynamic, because a library user can add to the + list of recognized pragmas. */ + struct pragma_entry *pragmas; + + /* Call backs. */ + struct { + void (*enter_file) PARAMS ((cpp_reader *)); + void (*leave_file) PARAMS ((cpp_reader *)); + void (*include) PARAMS ((cpp_reader *, const unsigned char *, + const unsigned char *, unsigned int, int)); + void (*define) PARAMS ((cpp_reader *, cpp_hashnode *)); + void (*undef) PARAMS ((cpp_reader *, cpp_hashnode *)); + void (*poison) PARAMS ((cpp_reader *)); + void (*ident) PARAMS ((cpp_reader *, const cpp_token *)); + void (*def_pragma) PARAMS ((cpp_reader *)); + } cb; + /* User visible options. */ struct cpp_options opts; @@ -563,23 +570,13 @@ struct cpp_printer { FILE *outf; /* stream to write to */ const char *last_fname; /* previous file name */ - unsigned int last_id; /* did we just push? */ unsigned int lineno; /* line currently being written */ - unsigned int written; /* low water mark in token buffer */ }; #define CPP_FATAL_LIMIT 1000 /* True if we have seen a "fatal" error. */ #define CPP_FATAL_ERRORS(READER) ((READER)->errors >= CPP_FATAL_LIMIT) -/* Macros for manipulating the token_buffer. */ - -/* Number of characters currently in PFILE's output buffer. */ -#define CPP_WRITTEN(PFILE) ((size_t)((PFILE)->limit - (PFILE)->token_buffer)) -#define CPP_PWRITTEN(PFILE) ((PFILE)->limit) -#define CPP_ADJUST_WRITTEN(PFILE,DELTA) ((PFILE)->limit += (DELTA)) -#define CPP_SET_WRITTEN(PFILE,N) ((PFILE)->limit = (PFILE)->token_buffer + (N)) - #define CPP_OPTION(PFILE, OPTION) ((PFILE)->opts.OPTION) #define CPP_BUFFER(PFILE) ((PFILE)->buffer) #define CPP_BUF_LINE(BUF) ((BUF)->lineno) @@ -641,6 +638,12 @@ extern int cpp_handle_options PARAMS ((cpp_reader *, int, char **)); extern int cpp_handle_option PARAMS ((cpp_reader *, int, char **)); extern void cpp_reader_init PARAMS ((cpp_reader *)); extern cpp_printer *cpp_printer_init PARAMS ((cpp_reader *, cpp_printer *)); + +extern void cpp_register_pragma PARAMS ((cpp_reader *, + const char *, const char *, + void (*) PARAMS ((cpp_reader *)))); +extern void cpp_register_pragma_space PARAMS ((cpp_reader *, const char *)); + extern int cpp_start_read PARAMS ((cpp_reader *, cpp_printer *, const char *)); extern void cpp_output_tokens PARAMS ((cpp_reader *, cpp_printer *, unsigned int)); @@ -695,9 +698,14 @@ extern cpp_buffer *cpp_push_buffer PARAMS ((cpp_reader *, extern cpp_buffer *cpp_pop_buffer PARAMS ((cpp_reader *)); extern void cpp_scan_buffer PARAMS ((cpp_reader *, cpp_printer *)); extern void cpp_scan_buffer_nooutput PARAMS ((cpp_reader *)); -extern int cpp_scan_line PARAMS ((cpp_reader *)); extern int cpp_ideq PARAMS ((const cpp_token *, const char *)); +extern void cpp_printf PARAMS ((cpp_reader *, cpp_printer *, + const char *, ...)); + +extern void cpp_output_list PARAMS ((cpp_reader *, FILE *, + const cpp_toklist *, + const cpp_token *)); /* In cpphash.c */ extern cpp_hashnode *cpp_lookup PARAMS ((cpp_reader *, @@ -705,11 +713,15 @@ extern cpp_hashnode *cpp_lookup PARAMS ((cpp_reader *, extern void cpp_forall_identifiers PARAMS ((cpp_reader *, int (*) PARAMS ((cpp_reader *, cpp_hashnode *)))); +/* In cppmacro.c */ +extern void cpp_dump_definition PARAMS ((cpp_reader *, FILE *, + const cpp_hashnode *)); /* In cppfiles.c */ extern int cpp_included PARAMS ((cpp_reader *, const char *)); extern int cpp_read_file PARAMS ((cpp_reader *, const char *)); extern void cpp_make_system_header PARAMS ((cpp_reader *, cpp_buffer *, int)); +extern const char *cpp_syshdr_flags PARAMS ((cpp_reader *, cpp_buffer *)); #ifdef __cplusplus } |