diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-08-01 17:42:45 +0200 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 19:04:33 +0100 |
commit | 86a3d1582f98dec4f663b1170e2f63bd7c3d2b85 (patch) | |
tree | 4641097105b758ac7b493bbddca92ae58a393740 /gcc/rust/rust-session-manager.cc | |
parent | e5c109ea4cd89596b8cd1aa63fddb3d1c3aa58be (diff) | |
download | gcc-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.cc | 14 |
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 ¯o : 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); |