diff options
author | Nathan Sidwell <nathan@acm.org> | 2020-12-14 07:21:49 -0800 |
---|---|---|
committer | Nathan Sidwell <nathan@acm.org> | 2020-12-14 07:23:59 -0800 |
commit | 62c5ea5228857a910b38df91c2b0fe28f4d1ddc8 (patch) | |
tree | 617d39cb5f141236757bee418fbbeab8ea407084 /libcpp/macro.c | |
parent | 159b0bd9ce263dfb791eff5133b0ca0207201c84 (diff) | |
download | gcc-62c5ea5228857a910b38df91c2b0fe28f4d1ddc8.zip gcc-62c5ea5228857a910b38df91c2b0fe28f4d1ddc8.tar.gz gcc-62c5ea5228857a910b38df91c2b0fe28f4d1ddc8.tar.bz2 |
preprocessor: Deferred macro support
For deferred macros we also need a new field on the macro itself, so
that the module machinery can determine the macro was imported. Also
the documentation for the hashnode's deferred field was incomplete.
libcpp/
* include/cpplib.h (struct cpp_macro): Add imported_p field.
(struct cpp_hashnode): Tweak deferred field documentation.
* macro.c (_cpp_new_macro): Clear new field.
(cpp_get_deferred_macro, get_deferred_or_lazy_macro): Assert
more.
Diffstat (limited to 'libcpp/macro.c')
-rw-r--r-- | libcpp/macro.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/libcpp/macro.c b/libcpp/macro.c index 0575585..cdb1821 100644 --- a/libcpp/macro.c +++ b/libcpp/macro.c @@ -3708,6 +3708,7 @@ _cpp_new_macro (cpp_reader *pfile, cpp_macro_kind kind, void *placement) macro->used = !CPP_OPTION (pfile, warn_unused_macros); macro->count = 0; macro->fun_like = 0; + macro->imported_p = false; macro->extra_tokens = 0; /* To suppress some diagnostics. */ macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0; @@ -3791,6 +3792,8 @@ cpp_macro * cpp_get_deferred_macro (cpp_reader *pfile, cpp_hashnode *node, location_t loc) { + gcc_checking_assert (node->type == NT_USER_MACRO); + node->value.macro = pfile->cb.user_deferred_macro (pfile, loc, node); if (!node->value.macro) @@ -3807,11 +3810,9 @@ get_deferred_or_lazy_macro (cpp_reader *pfile, cpp_hashnode *node, if (!macro) { macro = cpp_get_deferred_macro (pfile, node, loc); - if (!macro) - return NULL; + gcc_checking_assert (!macro || !macro->lazy); } - - if (macro->lazy) + else if (macro->lazy) { pfile->cb.user_lazy_macro (pfile, macro, macro->lazy - 1); macro->lazy = 0; |