From 8c331e24575c0584be372a78bb0bbcca914d567c Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Tue, 9 Jan 2024 13:51:35 +0100 Subject: gccrs: Add name resolution for on globbing use decl This is the first part of the code required to enable globbing on use declarations. gcc/rust/ChangeLog: * resolve/rust-toplevel-name-resolver-2.0.cc (GlobbingVisitor::visit): Insert names into their namespace. (TopLevel::visit): Insert ast module. (TopLevel::handle_use_dec): Resolve use declaration. (TopLevel::handle_use_glob): Use globbing visitor. (flatten_list): Use globbing path vector. (flatten_glob): Likewise. (flatten): Likewise. (prefix_subpaths): Add a function to prefix subpath. * resolve/rust-toplevel-name-resolver-2.0.h (class GlobbingVisitor): Add globbing visitor. * util/rust-hir-map.cc (Mappings::insert_ast_module): Add function to insert module in module hashmap. (Mappings::lookup_ast_module): Add function to retrieve ast module. * util/rust-hir-map.h: Add module map and getter/setter prototypes. Signed-off-by: Pierre-Emmanuel Patry --- gcc/rust/util/rust-hir-map.cc | 19 +++++++++++++++++++ gcc/rust/util/rust-hir-map.h | 3 +++ 2 files changed, 22 insertions(+) (limited to 'gcc/rust/util') diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc index c62c111..05b26d6 100644 --- a/gcc/rust/util/rust-hir-map.cc +++ b/gcc/rust/util/rust-hir-map.cc @@ -17,9 +17,11 @@ // . #include "rust-hir-map.h" +#include "optional.h" #include "rust-ast-full.h" #include "rust-diagnostics.h" #include "rust-hir-full.h" +#include "rust-item.h" #include "rust-macro-builtins.h" #include "rust-mapping-common.h" #include "rust-attribute-values.h" @@ -1159,6 +1161,23 @@ Mappings::lookup_module_children (NodeId module) } void +Mappings::insert_ast_module (AST::Module *module) +{ + rust_assert (modules.find (module->get_node_id ()) == modules.end ()); + modules[module->get_node_id ()] = module; +} + +tl::optional +Mappings::lookup_ast_module (NodeId id) +{ + auto it = modules.find (id); + if (it == modules.end ()) + return tl::nullopt; + + return {it->second}; +} + +void Mappings::insert_module_child_item (NodeId module, Resolver::CanonicalPath child) { diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h index 927c012..92af067 100644 --- a/gcc/rust/util/rust-hir-map.h +++ b/gcc/rust/util/rust-hir-map.h @@ -328,6 +328,8 @@ public: void insert_visibility (NodeId id, Privacy::ModuleVisibility visibility); bool lookup_visibility (NodeId id, Privacy::ModuleVisibility &def); + void insert_ast_module (AST::Module *); + tl::optional lookup_ast_module (NodeId id); void insert_module_child (NodeId module, NodeId child); tl::optional &> lookup_module_children (NodeId module); @@ -427,6 +429,7 @@ private: std::map> module_child_map; std::map> module_child_items; std::map child_to_parent_module_map; + std::map modules; // AST mappings std::map ast_item_mappings; -- cgit v1.1