diff options
author | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-08-11 07:33:39 +0000 |
---|---|---|
committer | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-08-11 07:33:39 +0000 |
commit | f85fcf2bb8dc7f1d1535a653d1e484e6fb06e2da (patch) | |
tree | c6597f82b6f803c65532fe99e5912e516912053f /gcc/c-lex.c | |
parent | 4d0a576dd54fdd609039752499175699e117563c (diff) | |
download | gcc-f85fcf2bb8dc7f1d1535a653d1e484e6fb06e2da.tar.gz |
* c-lex.c (map): Make const.
(cb_file_change): Update for callback passing a line map.
Don't assume we have a previous map. Remove sanity check
about popping too many files.
* cpperror.c (print_location): Make map const.
* cppfiles.c (stack_include_file): Update; line maps now hold sysp.
(cpp_make_system_header): Similarly.
(search_from): Similarly.
(_cpp_execute_include): Don't remember where we came from.
* cpphash.h (struct cpp_buffer): Remove return_to_line, sysp.
(struct cpp_reader): Make map const.
(CPP_IN_SYSTEM_HEADER, _cpp_do_file_change): Update.
* cpplib.c (do_line): Update; line maps now hold sysp.
(cpp_push_buffer): Similarly.
(_cpp_do_file_change): Similarly; callback with map instead.
(cpp_get_line_maps): Constify return value.
(_cpp_pop_buffer): Update.
* cpplib.h (struct cpp_file_change): Remove.
(struct cpp_callbacks): Update.
(cpp_get_line_maps): Constify return value.
* cppmacro.c (_cpp_create_definition): Update.
* cppmain.c (struct printer): Constify map.
(maybe_print_line): Similarly.
(print_line): Similarly. Deduce flags 1 and 2 here.
(cb_file_change): Update.
* line-map.c (free_line_maps): Warn regardless.
(add_line_map): Return pointer to const. When passed NULL to_file
with LC_LEAVE, use the obvious values for the return point so the
caller doesn't have to figure them out.
(lookup_line): Return pointer to const.
(print_containing_files): Take pointer to const.
* line-map.h (struct line_map): New members reason, sysp.
(add_line_map): Return pointer to const.
(lookup_line): Similarly.
(print_containing_files): Take pointer to const.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44789 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-lex.c')
-rw-r--r-- | gcc/c-lex.c | 75 |
1 files changed, 35 insertions, 40 deletions
diff --git a/gcc/c-lex.c b/gcc/c-lex.c index 971d9cd14a7..c47fb22af58 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -58,7 +58,7 @@ Boston, MA 02111-1307, USA. */ static const char *cpp_filename; /* The current line map. */ -static struct line_map *map; +static const struct line_map *map; /* We may keep statistics about how long which files took to compile. */ static int header_time, body_time; @@ -91,7 +91,7 @@ static void update_header_times PARAMS ((const char *)); static int dump_one_header PARAMS ((splay_tree_node, void *)); static void cb_ident PARAMS ((cpp_reader *, unsigned int, const cpp_string *)); -static void cb_file_change PARAMS ((cpp_reader *, const cpp_file_change *)); +static void cb_file_change PARAMS ((cpp_reader *, const struct line_map *)); static void cb_def_pragma PARAMS ((cpp_reader *, unsigned int)); static void cb_define PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *)); @@ -244,28 +244,28 @@ cb_ident (pfile, line, str) } static void -cb_file_change (pfile, fc) +cb_file_change (pfile, new_map) cpp_reader *pfile ATTRIBUTE_UNUSED; - const cpp_file_change *fc; + const struct line_map *new_map; { - unsigned int from_line = SOURCE_LINE (fc->map - 1, fc->line - 1); + unsigned int to_line = SOURCE_LINE (new_map, new_map->to_line); - if (fc->reason == LC_ENTER) + if (new_map->reason == LC_ENTER) { /* Don't stack the main buffer on the input stack; we already did in compile_file. */ - if (MAIN_FILE_P (fc->map)) - main_input_filename = fc->map->to_file; + if (map == NULL) + main_input_filename = new_map->to_file; else { - lineno = from_line; - push_srcloc (fc->map->to_file, 1); + lineno = SOURCE_LINE (new_map - 1, new_map->from_line - 1); + push_srcloc (new_map->to_file, 1); input_file_stack->indent_level = indent_level; - (*debug_hooks->start_source_file) (lineno, fc->map->to_file); + (*debug_hooks->start_source_file) (lineno, new_map->to_file); #ifndef NO_IMPLICIT_EXTERN_C if (c_header_level) ++c_header_level; - else if (fc->externc) + else if (new_map->sysp == 2) { c_header_level = 1; ++pending_lang_change; @@ -273,41 +273,36 @@ cb_file_change (pfile, fc) #endif } } - else if (fc->reason == LC_LEAVE) + else if (new_map->reason == LC_LEAVE) { - /* Popping out of a file. */ - if (input_file_stack->next) - { #ifndef NO_IMPLICIT_EXTERN_C - if (c_header_level && --c_header_level == 0) - { - if (fc->externc) - warning ("badly nested C headers from preprocessor"); - --pending_lang_change; - } + if (c_header_level && --c_header_level == 0) + { + if (new_map->sysp == 2) + warning ("badly nested C headers from preprocessor"); + --pending_lang_change; + } #endif #if 0 - if (indent_level != input_file_stack->indent_level) - { - warning_with_file_and_line - (input_filename, lineno, - "This file contains more '%c's than '%c's.", - indent_level > input_file_stack->indent_level ? '{' : '}', - indent_level > input_file_stack->indent_level ? '}' : '{'); - } -#endif - pop_srcloc (); - (*debug_hooks->end_source_file) (from_line); + if (indent_level != input_file_stack->indent_level) + { + warning_with_file_and_line + (input_filename, lineno, + "This file contains more '%c's than '%c's.", + indent_level > input_file_stack->indent_level ? '{' : '}', + indent_level > input_file_stack->indent_level ? '}' : '{'); } - else - error ("leaving more files than we entered"); +#endif + pop_srcloc (); + + (*debug_hooks->end_source_file) (to_line); } - update_header_times (fc->map->to_file); - map = fc->map; - in_system_header = fc->sysp != 0; - input_filename = map->to_file; - lineno = SOURCE_LINE (map, fc->line); + update_header_times (new_map->to_file); + in_system_header = new_map->sysp != 0; + input_filename = new_map->to_file; + lineno = to_line; + map = new_map; /* Hook for C++. */ extract_interface_info (); |