Skip to content

Commit 0b18bae

Browse files
powerboat9P-E-P
authored andcommitted
Use name resolver 2.0 during pattern typechecking
gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-pattern.cc: Add includes. (TypeCheckPattern::visit): Use name resolver 2.0 if enabled. * resolve/rust-name-resolution-context.cc (NameResolutionContext::lookup): Make const qualified. * resolve/rust-name-resolution-context.h (NameResolutionContext::lookup): Likewise. Signed-off-by: Owen Avery <[email protected]>
1 parent eb863f6 commit 0b18bae

File tree

3 files changed

+26
-8
lines changed

3 files changed

+26
-8
lines changed

gcc/rust/resolve/rust-name-resolution-context.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ NameResolutionContext::map_usage (Usage usage, Definition definition)
9292
}
9393

9494
tl::optional<NodeId>
95-
NameResolutionContext::lookup (NodeId usage)
95+
NameResolutionContext::lookup (NodeId usage) const
9696
{
9797
auto it = resolved_nodes.find (Usage (usage));
9898

gcc/rust/resolve/rust-name-resolution-context.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ class NameResolutionContext
213213
// TODO: Use newtype pattern for Usage and Definition
214214
void map_usage (Usage usage, Definition definition);
215215

216-
tl::optional<NodeId> lookup (NodeId usage);
216+
tl::optional<NodeId> lookup (NodeId usage) const;
217217

218218
private:
219219
/* Map of "usage" nodes which have been resolved to a "definition" node */

gcc/rust/typecheck/rust-hir-type-check-pattern.cc

+24-6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
#include "rust-hir-pattern.h"
2121
#include "rust-hir-type-check-expr.h"
2222
#include "rust-type-util.h"
23+
#include "rust-immutable-name-resolution-context.h"
24+
25+
// for flag_name_resolution_2_0
26+
#include "options.h"
2327

2428
namespace Rust {
2529
namespace Resolver {
@@ -49,12 +53,26 @@ TypeCheckPattern::visit (HIR::PathInExpression &pattern)
4953

5054
NodeId ref_node_id = UNKNOWN_NODEID;
5155
bool maybe_item = false;
52-
maybe_item
53-
|= resolver->lookup_resolved_name (pattern.get_mappings ().get_nodeid (),
54-
&ref_node_id);
55-
maybe_item
56-
|= resolver->lookup_resolved_type (pattern.get_mappings ().get_nodeid (),
57-
&ref_node_id);
56+
57+
if (flag_name_resolution_2_0)
58+
{
59+
auto &nr_ctx
60+
= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
61+
62+
if (auto id = nr_ctx.lookup (pattern.get_mappings ().get_nodeid ()))
63+
{
64+
ref_node_id = *id;
65+
maybe_item = true;
66+
}
67+
}
68+
else
69+
{
70+
maybe_item |= resolver->lookup_resolved_name (
71+
pattern.get_mappings ().get_nodeid (), &ref_node_id);
72+
maybe_item |= resolver->lookup_resolved_type (
73+
pattern.get_mappings ().get_nodeid (), &ref_node_id);
74+
}
75+
5876
bool path_is_const_item = false;
5977

6078
if (maybe_item)

0 commit comments

Comments
 (0)