Skip to content

Commit b08becd

Browse files
committed
Add a function to get the crate number from node id
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 <[email protected]>
1 parent 2472da2 commit b08becd

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

gcc/rust/util/rust-hir-map.cc

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,16 @@ Mappings::get_crate_name (CrateNum crate_num) const
148148
return it->second;
149149
}
150150

151+
tl::optional<CrateNum>
152+
Mappings::lookup_crate_num (NodeId node_id) const
153+
{
154+
auto it = crate_node_to_crate_num.find (node_id);
155+
if (it == crate_node_to_crate_num.end ())
156+
return tl::nullopt;
157+
158+
return it->second;
159+
}
160+
151161
void
152162
Mappings::set_crate_name (CrateNum crate_num, const std::string &name)
153163
{
@@ -184,13 +194,7 @@ Mappings::crate_num_to_nodeid (const CrateNum &crate_num) const
184194
bool
185195
Mappings::node_is_crate (NodeId node_id) const
186196
{
187-
for (const auto &it : ast_crate_mappings)
188-
{
189-
NodeId crate_node_id = it.second->get_node_id ();
190-
if (crate_node_id == node_id)
191-
return true;
192-
}
193-
return false;
197+
return lookup_crate_num (node_id).has_value ();
194198
}
195199

196200
NodeId
@@ -262,6 +266,7 @@ Mappings::insert_ast_crate (std::unique_ptr<AST::Crate> &&crate,
262266
rust_assert (it == ast_crate_mappings.end ());
263267

264268
// store it
269+
crate_node_to_crate_num.insert ({crate->get_node_id (), crate_num});
265270
ast_crate_mappings.insert ({crate_num, crate.release ()});
266271

267272
// return the reference to it

gcc/rust/util/rust-hir-map.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ class Mappings
8181
void set_current_crate (CrateNum crateNum);
8282
CrateNum get_current_crate () const;
8383
tl::optional<const std::string &> get_crate_name (CrateNum crate_num) const;
84+
85+
tl::optional<CrateNum> lookup_crate_num (NodeId node_id) const;
8486
void set_crate_name (CrateNum crate_num, const std::string &name);
8587
const std::string &get_current_crate_name () const;
8688
tl::optional<CrateNum>

0 commit comments

Comments
 (0)