diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/resolve/rust-name-resolution-context.cc | 2 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-name-resolution-context.h | 2 | ||||
-rw-r--r-- | gcc/rust/typecheck/rust-hir-type-check-pattern.cc | 30 |
3 files changed, 26 insertions, 8 deletions
diff --git a/gcc/rust/resolve/rust-name-resolution-context.cc b/gcc/rust/resolve/rust-name-resolution-context.cc index 28907dc..05c392d 100644 --- a/gcc/rust/resolve/rust-name-resolution-context.cc +++ b/gcc/rust/resolve/rust-name-resolution-context.cc @@ -92,7 +92,7 @@ NameResolutionContext::map_usage (Usage usage, Definition definition) } tl::optional<NodeId> -NameResolutionContext::lookup (NodeId usage) +NameResolutionContext::lookup (NodeId usage) const { auto it = resolved_nodes.find (Usage (usage)); diff --git a/gcc/rust/resolve/rust-name-resolution-context.h b/gcc/rust/resolve/rust-name-resolution-context.h index 34800ba..13acef3 100644 --- a/gcc/rust/resolve/rust-name-resolution-context.h +++ b/gcc/rust/resolve/rust-name-resolution-context.h @@ -213,7 +213,7 @@ public: // TODO: Use newtype pattern for Usage and Definition void map_usage (Usage usage, Definition definition); - tl::optional<NodeId> lookup (NodeId usage); + tl::optional<NodeId> lookup (NodeId usage) const; private: /* Map of "usage" nodes which have been resolved to a "definition" node */ diff --git a/gcc/rust/typecheck/rust-hir-type-check-pattern.cc b/gcc/rust/typecheck/rust-hir-type-check-pattern.cc index 1265564..e5859ed 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-pattern.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-pattern.cc @@ -20,6 +20,10 @@ #include "rust-hir-pattern.h" #include "rust-hir-type-check-expr.h" #include "rust-type-util.h" +#include "rust-immutable-name-resolution-context.h" + +// for flag_name_resolution_2_0 +#include "options.h" namespace Rust { namespace Resolver { @@ -49,12 +53,26 @@ TypeCheckPattern::visit (HIR::PathInExpression &pattern) NodeId ref_node_id = UNKNOWN_NODEID; bool maybe_item = false; - maybe_item - |= resolver->lookup_resolved_name (pattern.get_mappings ().get_nodeid (), - &ref_node_id); - maybe_item - |= resolver->lookup_resolved_type (pattern.get_mappings ().get_nodeid (), - &ref_node_id); + + if (flag_name_resolution_2_0) + { + auto &nr_ctx + = Resolver2_0::ImmutableNameResolutionContext::get ().resolver (); + + if (auto id = nr_ctx.lookup (pattern.get_mappings ().get_nodeid ())) + { + ref_node_id = *id; + maybe_item = true; + } + } + else + { + maybe_item |= resolver->lookup_resolved_name ( + pattern.get_mappings ().get_nodeid (), &ref_node_id); + maybe_item |= resolver->lookup_resolved_type ( + pattern.get_mappings ().get_nodeid (), &ref_node_id); + } + bool path_is_const_item = false; if (maybe_item) |