]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Add a function to get the crate number from node id
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Mon, 10 Mar 2025 14:13:27 +0000 (15:13 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Mon, 24 Mar 2025 12:07:24 +0000 (13:07 +0100)
gcc/rust/ChangeLog:

* util/rust-hir-map.cc (Mappings::lookup_crate_num): Add function to
retrieve crate number from it's node id.
(Mappings::node_is_crate): change function with call to
lookup_crate_num to avoid looping through all crates.
(Mappings::insert_ast_crate): Populate node id to crate number map.
* util/rust-hir-map.h: Change function prototype.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/util/rust-hir-map.cc
gcc/rust/util/rust-hir-map.h

index 1a2a1bc9709500cd6a39b8a44ffe5ea0f516199b..eaa640c06121e73a55532f3b625c8514e762f235 100644 (file)
@@ -148,6 +148,16 @@ Mappings::get_crate_name (CrateNum crate_num) const
   return it->second;
 }
 
+tl::optional<CrateNum>
+Mappings::lookup_crate_num (NodeId node_id) const
+{
+  auto it = crate_node_to_crate_num.find (node_id);
+  if (it == crate_node_to_crate_num.end ())
+    return tl::nullopt;
+
+  return it->second;
+}
+
 void
 Mappings::set_crate_name (CrateNum crate_num, const std::string &name)
 {
@@ -184,13 +194,7 @@ Mappings::crate_num_to_nodeid (const CrateNum &crate_num) const
 bool
 Mappings::node_is_crate (NodeId node_id) const
 {
-  for (const auto &it : ast_crate_mappings)
-    {
-      NodeId crate_node_id = it.second->get_node_id ();
-      if (crate_node_id == node_id)
-       return true;
-    }
-  return false;
+  return lookup_crate_num (node_id).has_value ();
 }
 
 NodeId
@@ -262,6 +266,7 @@ Mappings::insert_ast_crate (std::unique_ptr<AST::Crate> &&crate,
   rust_assert (it == ast_crate_mappings.end ());
 
   // store it
+  crate_node_to_crate_num.insert ({crate->get_node_id (), crate_num});
   ast_crate_mappings.insert ({crate_num, crate.release ()});
 
   // return the reference to it
index 44a8c0d52afe7c4cf71cfc1c41d353e022498af8..b523a36eb0b42a7f215921a7310dd4cb30ca64f3 100644 (file)
@@ -81,6 +81,8 @@ public:
   void set_current_crate (CrateNum crateNum);
   CrateNum get_current_crate () const;
   tl::optional<const std::string &> get_crate_name (CrateNum crate_num) const;
+
+  tl::optional<CrateNum> lookup_crate_num (NodeId node_id) const;
   void set_crate_name (CrateNum crate_num, const std::string &name);
   const std::string &get_current_crate_name () const;
   tl::optional<CrateNum>