]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: ast: Change *Path nodes API
authorArthur Cohen <arthur.cohen@embecosm.com>
Thu, 17 Aug 2023 12:05:49 +0000 (14:05 +0200)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 30 Jan 2024 11:36:42 +0000 (12:36 +0100)
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
gcc/rust/ast/rust-ast.h
gcc/rust/ast/rust-path.h
gcc/rust/resolve/rust-ast-resolve-item.cc
gcc/rust/resolve/rust-ast-resolve-path.cc
gcc/rust/resolve/rust-forever-stack.hxx

index cb8dfd800162f69d6b8d5a8136a5d865f67e9105..7d3d3e204f7ee1230f568b0aa18b162e1cec156f 100644 (file)
@@ -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 ()));
     }
index 4dc7f9710f3c25e8c254d77040cbe08ba4ce556b..47c02d6ac8b888f79d7a55df188211fa8b59bf10 100644 (file)
@@ -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; }
 };
 
index b76664fa7ddb0629154d90059dddb94fda4439b6..ccac6303bb4b3f9196f0947b98b3882064f314aa 100644 (file)
@@ -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 */
index 1fc6b920c5e42e71add905f34bddebd3a33736b0..eaee5bc8606127b10a633ed224e5862118268540 100644 (file)
@@ -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 ());
index fd2a844a506adf2f111c6796067759e88be886f7..9e982d0610e4a9e874ff4e7b5fa7dcab8d228408 100644 (file)
@@ -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;
        }
index 8bdda67782a42116a9d0afee96262f1f71d6737c..5acdf06c770c8ac20d92021189bbf452ec4bce3e 100644 (file)
@@ -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;