https://gcc.gnu.org/g:98573bd61ef95e4224bc2d050fa1f47d893f2c31

commit 98573bd61ef95e4224bc2d050fa1f47d893f2c31
Author: Owen Avery <powerboat9.ga...@gmail.com>
Date:   Fri May 2 20:28:15 2025 -0400

    Improve canonical path handling for impl items
    
    gcc/rust/ChangeLog:
    
            * resolve/rust-ast-resolve-item.cc
            (ResolveItem::visit): Use the return values of
            CanonicalPath::inherent_impl_seg and
            CanonicalPath::trait_impl_projection_seg more directly.
            * util/rust-canonical-path.h
            (CanonicalPath::trait_impl_projection_seg): Append "<impl "
            instead of "<" to the beginning of the returned path segment.
            (CanonicalPath::inherent_impl_seg): Likewise.
    
    Signed-off-by: Owen Avery <powerboat9.ga...@gmail.com>

Diff:
---
 gcc/rust/resolve/rust-ast-resolve-item.cc | 13 ++-----------
 gcc/rust/util/rust-canonical-path.h       |  8 ++++++--
 2 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/gcc/rust/resolve/rust-ast-resolve-item.cc 
b/gcc/rust/resolve/rust-ast-resolve-item.cc
index fc226cf28c0a..c2626ea0bbbf 100644
--- a/gcc/rust/resolve/rust-ast-resolve-item.cc
+++ b/gcc/rust/resolve/rust-ast-resolve-item.cc
@@ -608,10 +608,7 @@ ResolveItem::visit (AST::InherentImpl &impl_block)
     }
   else
     {
-      std::string seg_buf = "<impl " + self_cpath.get () + ">";
-      CanonicalPath seg
-       = CanonicalPath::new_seg (impl_block.get_node_id (), seg_buf);
-      cpath = canonical_prefix.append (seg);
+      cpath = canonical_prefix.append (impl_type_seg);
     }
 
   // done setup paths
@@ -732,13 +729,7 @@ ResolveItem::visit (AST::TraitImpl &impl_block)
     }
   else
     {
-      std::string projection_str = canonical_projection.get ();
-      std::string seg_buf
-       = "<impl " + projection_str.substr (1, projection_str.size () - 2)
-         + ">";
-      CanonicalPath seg
-       = CanonicalPath::new_seg (impl_block.get_node_id (), seg_buf);
-      cpath = canonical_prefix.append (seg);
+      cpath = canonical_prefix.append (canonical_projection);
     }
 
   // DONE setup canonical-path
diff --git a/gcc/rust/util/rust-canonical-path.h 
b/gcc/rust/util/rust-canonical-path.h
index 15846348f9c3..33fead9c6c27 100644
--- a/gcc/rust/util/rust-canonical-path.h
+++ b/gcc/rust/util/rust-canonical-path.h
@@ -68,14 +68,18 @@ public:
   trait_impl_projection_seg (NodeId id, const CanonicalPath &trait_seg,
                             const CanonicalPath &impl_type_seg)
   {
-    return CanonicalPath::new_seg (id, "<" + impl_type_seg.get () + " as "
+    // https://doc.rust-lang.org/reference/paths.html#canonical-paths
+    // should be "<X>"?
+    return CanonicalPath::new_seg (id, "<impl " + impl_type_seg.get () + " as "
                                         + trait_seg.get () + ">");
   }
 
   static CanonicalPath inherent_impl_seg (NodeId id,
                                          const CanonicalPath &impl_type_seg)
   {
-    return CanonicalPath::new_seg (id, "<" + impl_type_seg.get () + ">");
+    // https://doc.rust-lang.org/reference/paths.html#canonical-paths
+    // should be "<X as Y>"?
+    return CanonicalPath::new_seg (id, "<impl " + impl_type_seg.get () + ">");
   }
 
   std::string get () const

Reply via email to