diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-06-16 18:17:39 +0200 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 18:55:58 +0100 |
commit | 4d5f20fdbf095663ce829b42a22819093f4efc8e (patch) | |
tree | 11c801319e99e9636e83241550cec5650c38e239 /gcc/rust/rust-session-manager.cc | |
parent | 37451ad09f7edc081700909208f90b9eea1eb592 (diff) | |
download | gcc-4d5f20fdbf095663ce829b42a22819093f4efc8e.zip gcc-4d5f20fdbf095663ce829b42a22819093f4efc8e.tar.gz gcc-4d5f20fdbf095663ce829b42a22819093f4efc8e.tar.bz2 |
gccrs: resolve: Add extern crate proc macro collection
Create a mapping for procedural macros with their crate num.
gcc/rust/ChangeLog:
* metadata/rust-extern-crate.h: Add proc macro getter.
* rust-session-manager.cc (Session::load_extern_crate): Collect
mappings and create mappings.
* util/rust-hir-map.cc: Add insertion and lookup functions for
every mapping.
* util/rust-hir-map.h: Add function prototypes.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc/rust/rust-session-manager.cc')
-rw-r--r-- | gcc/rust/rust-session-manager.cc | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc index 572ecfa..ee7dd08 100644 --- a/gcc/rust/rust-session-manager.cc +++ b/gcc/rust/rust-session-manager.cc @@ -1024,6 +1024,32 @@ Session::load_extern_crate (const std::string &crate_name, location_t locus) Lexer lex (extern_crate.get_metadata ()); Parser<Lexer> parser (lex); std::unique_ptr<AST::Crate> metadata_crate = parser.parse_crate (); + + std::vector<ProcMacro::Attribute> attribute_macros; + std::vector<ProcMacro::CustomDerive> derive_macros; + std::vector<ProcMacro::Bang> bang_macros; + for (auto ¯o : extern_crate.get_proc_macros ()) + { + switch (macro.tag) + { + case ProcMacro::CUSTOM_DERIVE: + derive_macros.push_back (macro.payload.custom_derive); + break; + case ProcMacro::ATTR: + attribute_macros.push_back (macro.payload.attribute); + break; + case ProcMacro::BANG: + bang_macros.push_back (macro.payload.bang); + break; + default: + gcc_unreachable (); + } + } + + mappings->insert_attribute_proc_macros (crate_num, attribute_macros); + mappings->insert_derive_proc_macros (crate_num, derive_macros); + mappings->insert_bang_proc_macros (crate_num, bang_macros); + AST::Crate &parsed_crate = mappings->insert_ast_crate (std::move (metadata_crate), crate_num); |