@@ -191,7 +191,7 @@ TokenCollector::visit (SimplePathSegment &segment)
{
push (Rust::Token::make (SUPER, segment.get_locus ()));
}
- else if (segment.is_lower_self ())
+ else if (segment.is_lower_self_seg ())
{
push (Rust::Token::make (SELF, segment.get_locus ()));
}
@@ -399,7 +399,7 @@ public:
{
return as_string ().compare ("crate") == 0;
}
- bool is_lower_self () const { return as_string ().compare ("self") == 0; }
+ bool is_lower_self_seg () const { return as_string ().compare ("self") == 0; }
bool is_big_self () const { return as_string ().compare ("Self") == 0; }
};
@@ -536,6 +536,7 @@ public:
{
return !has_generic_args () && get_ident_segment ().is_crate_segment ();
}
+
bool is_lower_self_seg () const
{
return !has_generic_args () && get_ident_segment ().is_lower_self ();
@@ -646,6 +647,14 @@ public:
outer_attrs = std::move (new_attrs);
}
+ NodeId get_pattern_node_id () const { return get_node_id (); }
+
+ PathExprSegment &get_final_segment () { return get_segments ().back (); }
+ const PathExprSegment &get_final_segment () const
+ {
+ return get_segments ().back ();
+ }
+
protected:
/* Use covariance to implement clone function as returning this object
* rather than base */
@@ -1031,7 +1031,7 @@ ResolveItem::visit (AST::UseDeclaration &use_item)
if (!ok)
continue;
- const AST::SimplePathSegment &final_seg = path.get_final_segment ();
+ const AST::SimplePathSegment &final_seg = path.get_segments ().back ();
auto decl
= CanonicalPath::new_seg (resolved_node_id, final_seg.as_string ());
@@ -367,7 +367,7 @@ ResolvePath::resolve_path (AST::SimplePath *expr)
// is_first_segment ? "true" : "false",
// is_final_segment ? "true" : "false");
if (resolved_node_id == UNKNOWN_NODEID && !is_first_segment
- && is_final_segment && segment.is_lower_self ())
+ && is_final_segment && segment.is_lower_self_seg ())
{
resolved_node_id = previous_resolved_node_id;
}
@@ -313,7 +313,8 @@ ForeverStack<N>::find_starting_point (
for (; !is_last (iterator, segments); iterator++)
{
auto seg = *iterator;
- auto is_self_or_crate = seg.is_crate_path_seg () || seg.is_lower_self ();
+ auto is_self_or_crate
+ = seg.is_crate_path_seg () || seg.is_lower_self_seg ();
// if we're after the first path segment and meet `self` or `crate`, it's
// an error - we should only be seeing `super` keywords at this point
@@ -327,7 +328,7 @@ ForeverStack<N>::find_starting_point (
iterator++;
break;
}
- if (seg.is_lower_self ())
+ if (seg.is_lower_self_seg ())
{
// do nothing and exit
iterator++;
@@ -371,7 +372,7 @@ ForeverStack<N>::resolve_segments (
// check that we don't encounter *any* leading keywords afterwards
if (check_leading_kw_at_start (seg, seg.is_crate_path_seg ()
|| seg.is_super_path_seg ()
- || seg.is_lower_self ()))
+ || seg.is_lower_self_seg ()))
return tl::nullopt;
tl::optional<typename ForeverStack<N>::Node &> child = tl::nullopt;
From: Arthur Cohen <arthur.cohen@embecosm.com> gcc/rust/ChangeLog: * ast/rust-ast.h: Change Path API to be more consistent. * ast/rust-path.h: Likewise. * ast/rust-ast-collector.cc (TokenCollector::visit): Use new API. * resolve/rust-ast-resolve-item.cc (ResolveItem::visit): Likewise. * resolve/rust-ast-resolve-path.cc (ResolvePath::resolve_path): Likewise. * resolve/rust-forever-stack.hxx: Likewise. --- gcc/rust/ast/rust-ast-collector.cc | 2 +- gcc/rust/ast/rust-ast.h | 2 +- gcc/rust/ast/rust-path.h | 9 +++++++++ gcc/rust/resolve/rust-ast-resolve-item.cc | 2 +- gcc/rust/resolve/rust-ast-resolve-path.cc | 2 +- gcc/rust/resolve/rust-forever-stack.hxx | 7 ++++--- 6 files changed, 17 insertions(+), 7 deletions(-)