* cppinit.c (cpp_start_read): Set include tracing after
cpp_post_options and after stacking the main file.
* line-map.c (trace_include): New.
(init_line_maps, add_line_map): Update.
* line-map.h (struct line_maps): New member trace_includes.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45084
138bc75d-0d04-0410-961f-
82ee72b054a4
2001-08-21 Neil Booth <neil@daikokuya.demon.co.uk>
+ * cppfiles.c (stack_include_file): Don't handle -H here.
+ * cppinit.c (cpp_start_read): Set include tracing after
+ cpp_post_options and after stacking the main file.
+ * line-map.c (trace_include): New.
+ (init_line_maps, add_line_map): Update.
+ * line-map.h (struct line_maps): New member trace_includes.
+
+2001-08-21 Neil Booth <neil@daikokuya.demon.co.uk>
+
* cppfiles.c (stack_include_file): Harmonize system headerness tests.
* cppfiles.c (stack_include_file): Only stack a file if there
is something to do. Return a boolean indicating whether a
}
if (pfile->buffer)
- {
- /* We don't want MI guard advice for the main file. */
- inc->include_count++;
-
- /* Handle -H option. */
- if (CPP_OPTION (pfile, print_include_names))
- {
- for (fp = pfile->buffer; fp; fp = fp->prev)
- putc ('.', stderr);
- fprintf (stderr, " %s\n", inc->name);
- }
- }
+ /* We don't want MI guard advice for the main file. */
+ inc->include_count++;
/* Push a buffer. */
fp = cpp_push_buffer (pfile, inc->buffer, inc->st.st_size, BUF_FILE, 0);
if (!_cpp_read_file (pfile, fname))
return 0;
+ /* Set this after cpp_post_options so the client can change the
+ option if it wishes, and after stacking the main file so we don't
+ trace the main file. */
+ pfile->line_maps.trace_includes = CPP_OPTION (pfile, print_include_names);
+
/* Install builtins and process command line macros etc. in the order
they appeared, but only if not already preprocessed. */
if (! CPP_OPTION (pfile, preprocessed))
#include "line-map.h"
#include "intl.h"
+static void trace_include
+ PARAMS ((const struct line_maps *, const struct line_map *));
+
/* Initialize a line map set. */
void
set->allocated = 0;
set->used = 0;
set->last_listed = -1;
+ set->trace_includes = false;
}
/* Free a line map set. */
map->included_from = map[-1].included_from;
else if (reason == LC_LEAVE)
map->included_from = INCLUDED_FROM (set, map - 1)->included_from;
-
set->used++;
+
+ if (reason == LC_ENTER && set->trace_includes)
+ trace_include (set, map);
+
return map;
}
fputs (":\n", stderr);
}
+
+/* Print an include trace, for e.g. the -H option of the preprocessor. */
+
+static void
+trace_include (set, map)
+ const struct line_maps *set;
+ const struct line_map *map;
+{
+ const struct line_map *m;
+
+ for (m = map; !MAIN_FILE_P (m); m = INCLUDED_FROM (set, m))
+ putc ('.', stderr);
+ fprintf (stderr, " %s\n", map->to_file);
+}
LAST_LISTED as the topmost including file. -1 indicates nothing
has been listed yet. */
int last_listed;
+
+ /* If true, prints an include trace a la -H. */
+ bool trace_includes;
};
/* Initialize a line map set. */