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 17:42:45 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 19:04:33 +0100
commit86a3d1582f98dec4f663b1170e2f63bd7c3d2b85 (patch)
tree4641097105b758ac7b493bbddca92ae58a393740 /gcc/rust/rust-session-manager.cc
parente5c109ea4cd89596b8cd1aa63fddb3d1c3aa58be (diff)
downloadgcc-86a3d1582f98dec4f663b1170e2f63bd7c3d2b85.zip
gcc-86a3d1582f98dec4f663b1170e2f63bd7c3d2b85.tar.gz
gcc-86a3d1582f98dec4f663b1170e2f63bd7c3d2b85.tar.bz2
gccrs: Move proc macro definition to mappings
This commit moves the procedural macros loaded definition from outside the AST to the mappings. This means most getters/setters around the mappings had to be changed. This commit also introduces the top level visit of those mappings instead of visiting the Crate ast members. gcc/rust/ChangeLog: * ast/rust-ast.h (class BangProcMacro): Move class from here to rust-proc-macro.h. Also remove related functions. (class AttributeProcMacro): Likewise. (class CustomDeriveProcMacro): Likewise. (struct Crate): Remove proc macro vector members. * expand/rust-macro-expand.h (struct MacroExpander): Change the type to the newly created classes. * expand/rust-proc-macro.cc (BangProcMacro::BangProcMacro): Add constructor implementation. (AttributeProcMacro::AttributeProcMacro): Likewise. (CustomDeriveProcMacro::CustomDeriveProcMacro): Likewise. * expand/rust-proc-macro.h (class BangProcMacro): Move class to here. (class AttributeProcMacro): Likewise. (class CustomDeriveProcMacro): Likewise. * resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::go): Change top level visitor to check mappings instead * rust-session-manager.cc (Session::load_extern_crate): Add back macro collection to mappings. * util/rust-hir-map.cc (Mappings::insert_derive_proc_macros): Update getter signature with new types. (Mappings::insert_bang_proc_macros): Likewise. (Mappings::insert_attribute_proc_macros): Likewise. (Mappings::lookup_derive_proc_macros): Likewise. (Mappings::lookup_bang_proc_macros): Likewise. (Mappings::lookup_attribute_proc_macros): Likewise. (Mappings::insert_derive_proc_macro_def): Likewise. (Mappings::insert_bang_proc_macro_def): Likewise. (Mappings::insert_attribute_proc_macro_def): Likewise. (Mappings::lookup_derive_proc_macro_def): Likewise. (Mappings::lookup_bang_proc_macro_def): Likewise. (Mappings::lookup_attribute_proc_macro_def): Likewise. (Mappings::insert_derive_proc_macro_invocation): Likewise. (Mappings::lookup_derive_proc_macro_invocation): Likewise. (Mappings::insert_bang_proc_macro_invocation): Likewise. (Mappings::lookup_bang_proc_macro_invocation): Likewise. (Mappings::insert_attribute_proc_macro_invocation): Likewise. (Mappings::lookup_attribute_proc_macro_invocation): Likewise. * util/rust-hir-map.h: Update function prototypes as well as map types. 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.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index 6f2657c..d0d92a8 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -1056,24 +1056,32 @@ Session::load_extern_crate (const std::string &crate_name, location_t locus)
AST::Crate &parsed_crate
= mappings->insert_ast_crate (std::move (metadata_crate), crate_num);
+ std::vector<AttributeProcMacro> attribute_macros;
+ std::vector<CustomDeriveProcMacro> derive_macros;
+ std::vector<BangProcMacro> bang_macros;
+
for (auto &macro : extern_crate.get_proc_macros ())
{
switch (macro.tag)
{
case ProcMacro::CUSTOM_DERIVE:
- parsed_crate.add_derive_macro (macro.payload.custom_derive);
+ derive_macros.push_back (macro.payload.custom_derive);
break;
case ProcMacro::ATTR:
- parsed_crate.add_attribute_macro (macro.payload.attribute);
+ attribute_macros.push_back (macro.payload.attribute);
break;
case ProcMacro::BANG:
- parsed_crate.add_bang_macro (macro.payload.bang);
+ bang_macros.push_back (macro.payload.bang);
break;
default:
gcc_unreachable ();
}
}
+ mappings->insert_attribute_proc_macros (crate_num, attribute_macros);
+ mappings->insert_bang_proc_macros (crate_num, bang_macros);
+ mappings->insert_derive_proc_macros (crate_num, derive_macros);
+
// name resolve it
Resolver::NameResolution::Resolve (parsed_crate);