aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/rust-session-manager.cc
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-08-01 12:45:11 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 19:04:33 +0100
commite5c109ea4cd89596b8cd1aa63fddb3d1c3aa58be (patch)
tree6dc1d94865f408489bcdde637e371839afc57acf /gcc/rust/rust-session-manager.cc
parent1caf0e8ffed0d4e454470550950cc99eb4bce13a (diff)
downloadgcc-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.cc19
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 &macro : 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);