aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/rust-session-manager.cc
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-06-16 18:17:39 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 18:55:58 +0100
commit4d5f20fdbf095663ce829b42a22819093f4efc8e (patch)
tree11c801319e99e9636e83241550cec5650c38e239 /gcc/rust/rust-session-manager.cc
parent37451ad09f7edc081700909208f90b9eea1eb592 (diff)
downloadgcc-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.cc26
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 &macro : 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);