diff options
author | Nathan Sidwell <nathan@acm.org> | 2020-11-19 07:00:51 -0800 |
---|---|---|
committer | Nathan Sidwell <nathan@acm.org> | 2020-11-19 07:05:08 -0800 |
commit | 9844497a935d5e89dc92539128edccb6bb408bb1 (patch) | |
tree | 8556fefb85e32778246020206586c70ff3ffc56c /libcpp/internal.h | |
parent | b204d7722d30f44281dea3341070223475f1cff9 (diff) | |
download | gcc-9844497a935d5e89dc92539128edccb6bb408bb1.zip gcc-9844497a935d5e89dc92539128edccb6bb408bb1.tar.gz gcc-9844497a935d5e89dc92539128edccb6bb408bb1.tar.bz2 |
preprocessor: main file searching
This adds the capability to locate the main file on the user or system
include paths. That's extremely useful to users building header
units. Searching has to be requiested (plain header-unit compilation
will not search). Also, to make include_next work as expected when
building a header unit, we add a mechanism to retrofit a non-searched
source file as one on the include path.
libcpp/
* include/cpplib.h (enum cpp_main_search): New.
(struct cpp_options): Add main_search field.
(cpp_main_loc): Declare.
(cpp_retrofit_as_include): Declare.
* internal.h (struct cpp_reader): Add main_loc field.
(_cpp_in_main_source_file): Not main if main is a header.
* init.c (cpp_read_main_file): Use main_search option to locate
main file. Set main_loc
* files.c (cpp_retrofit_as_include): New.
Diffstat (limited to 'libcpp/internal.h')
-rw-r--r-- | libcpp/internal.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/libcpp/internal.h b/libcpp/internal.h index e629cbc..697fef0 100644 --- a/libcpp/internal.h +++ b/libcpp/internal.h @@ -591,6 +591,10 @@ struct cpp_reader /* If non-zero, the lexer will use this location for the next token instead of getting a location from the linemap. */ location_t forced_token_location; + + /* Location identifying the main source file -- intended to be line + zero of said file. */ + location_t main_loc; }; /* Character classes. Based on the more primitive macros in safe-ctype.h. @@ -643,7 +647,8 @@ _cpp_in_system_header (cpp_reader *pfile) inline int _cpp_in_main_source_file (cpp_reader *pfile) { - return pfile->buffer->file == pfile->main_file; + return (!CPP_OPTION (pfile, main_search) + && pfile->buffer->file == pfile->main_file); } /* True if NODE is a macro for the purposes of ifdef, defined etc. */ |