From: Owen Avery Date: Tue, 15 Oct 2024 19:35:21 +0000 (-0400) Subject: gccrs: Use name resolver 2.0 during pattern typechecking X-Git-Tag: basepoints/gcc-16~1123 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9753ae307b89cc1e6934ecc16736abe2158a7333;p=thirdparty%2Fgcc.git gccrs: 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 --- diff --git a/gcc/rust/resolve/rust-name-resolution-context.cc b/gcc/rust/resolve/rust-name-resolution-context.cc index d79f7b5f222..9bfaa094abe 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 -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 e2652dc3b9e..cd6fa931be5 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 lookup (NodeId usage); + tl::optional 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 53196369202..88e4d32f6bc 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)