]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: ast-collector: Adapt to lang item type path segments
authorArthur Cohen <arthur.cohen@embecosm.com>
Tue, 31 Dec 2024 17:36:50 +0000 (17:36 +0000)
committerArthur Cohen <arthur.cohen@embecosm.com>
Fri, 21 Mar 2025 11:57:50 +0000 (12:57 +0100)
gcc/rust/ChangeLog:

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

gcc/rust/ast/rust-ast-collector.cc

index f493da3fa3fccf032d9493c43d0782c6efb191b4..4c9c360c04d2faafc82f90906b1a79128275261f 100644 (file)
@@ -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));