diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-08-01 12:45:11 +0200 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 19:04:33 +0100 |
commit | e5c109ea4cd89596b8cd1aa63fddb3d1c3aa58be (patch) | |
tree | 6dc1d94865f408489bcdde637e371839afc57acf /gcc/rust/rust-session-manager.cc | |
parent | 1caf0e8ffed0d4e454470550950cc99eb4bce13a (diff) | |
download | gcc-e5c109ea4cd89596b8cd1aa63fddb3d1c3aa58be.zip gcc-e5c109ea4cd89596b8cd1aa63fddb3d1c3aa58be.tar.gz gcc-e5c109ea4cd89596b8cd1aa63fddb3d1c3aa58be.tar.bz2 |
gccrs: Add proc macro top level discovery
Add mechanism to discover proc macros in loaded extern crates. In the
top level resolver.
gcc/rust/ChangeLog:
* resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::go):
Visit crate's newly stored proc macros.
* rust-session-manager.cc (Session::load_extern_crate):
Store proc macros in the parsed crate instead of a local
variable to achieve mappings.
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 | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc index 292506d..6f2657c 100644 --- a/gcc/rust/rust-session-manager.cc +++ b/gcc/rust/rust-session-manager.cc @@ -1053,34 +1053,27 @@ Session::load_extern_crate (const std::string &crate_name, location_t locus) 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; + AST::Crate &parsed_crate + = mappings->insert_ast_crate (std::move (metadata_crate), crate_num); + for (auto ¯o : extern_crate.get_proc_macros ()) { switch (macro.tag) { case ProcMacro::CUSTOM_DERIVE: - derive_macros.push_back (macro.payload.custom_derive); + parsed_crate.add_derive_macro (macro.payload.custom_derive); break; case ProcMacro::ATTR: - attribute_macros.push_back (macro.payload.attribute); + parsed_crate.add_attribute_macro (macro.payload.attribute); break; case ProcMacro::BANG: - bang_macros.push_back (macro.payload.bang); + parsed_crate.add_bang_macro (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); - // name resolve it Resolver::NameResolution::Resolve (parsed_crate); |