summaryrefslogtreecommitdiff
path: root/gcc/c-lex.c
diff options
context:
space:
mode:
authorneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2001-08-11 07:33:39 +0000
committerneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2001-08-11 07:33:39 +0000
commitf85fcf2bb8dc7f1d1535a653d1e484e6fb06e2da (patch)
treec6597f82b6f803c65532fe99e5912e516912053f /gcc/c-lex.c
parent4d0a576dd54fdd609039752499175699e117563c (diff)
downloadgcc-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.c75
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 ();