https://gcc.gnu.org/g:1c9cd6a60128dc860ef7879222fddf91790e4515

commit r15-8625-g1c9cd6a60128dc860ef7879222fddf91790e4515
Author: Arthur Cohen <arthur.co...@embecosm.com>
Date:   Tue Dec 31 17:36:50 2024 +0000

    gccrs: ast-collector: Adapt to lang item type path segments
    
    gcc/rust/ChangeLog:
    
            * ast/rust-ast-collector.cc (TokenCollector::visit): Fix collector 
to better
            handle lang item type path segments.

Diff:
---
 gcc/rust/ast/rust-ast-collector.cc | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/gcc/rust/ast/rust-ast-collector.cc 
b/gcc/rust/ast/rust-ast-collector.cc
index f493da3fa3fc..4c9c360c04d2 100644
--- a/gcc/rust/ast/rust-ast-collector.cc
+++ b/gcc/rust/ast/rust-ast-collector.cc
@@ -543,10 +543,14 @@ TokenCollector::visit (TypePathSegment &segment)
 {
   // Syntax:
   //    PathIdentSegment
-  auto ident_segment = segment.get_ident_segment ();
-  auto id = ident_segment.as_string ();
-  push (
-    Rust::Token::make_identifier (ident_segment.get_locus (), std::move (id)));
+
+  auto locus = segment.is_lang_item ()
+                ? segment.get_locus ()
+                : segment.get_ident_segment ().get_locus ();
+  auto segment_string = segment.is_lang_item ()
+                         ? LangItem::PrettyString (segment.get_lang_item ())
+                         : segment.get_ident_segment ().as_string ();
+  push (Rust::Token::make_identifier (locus, std::move (segment_string)));
 }
 
 void
@@ -558,10 +562,13 @@ TokenCollector::visit (TypePathSegmentGeneric &segment)
   //    `<` `>`
   //    | `<` ( GenericArg `,` )* GenericArg `,`? `>`
 
-  auto ident_segment = segment.get_ident_segment ();
-  auto id = ident_segment.as_string ();
-  push (
-    Rust::Token::make_identifier (ident_segment.get_locus (), std::move (id)));
+  auto locus = segment.is_lang_item ()
+                ? segment.get_locus ()
+                : segment.get_ident_segment ().get_locus ();
+  auto segment_string = segment.is_lang_item ()
+                         ? LangItem::PrettyString (segment.get_lang_item ())
+                         : segment.get_ident_segment ().as_string ();
+  push (Rust::Token::make_identifier (locus, std::move (segment_string)));
 
   if (segment.get_separating_scope_resolution ())
     push (Rust::Token::make (SCOPE_RESOLUTION, UNDEF_LOCATION));

Reply via email to