]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
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)
committerCohenArthur <arthur.cohen@embecosm.com>
Thu, 16 Jan 2025 14:00:31 +0000 (14:00 +0000)
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 d9ebaee68c6b9eb475719169bc6642d4b5d97a62..32e021c4d3b4d4485a40069b3c98992920f735bb 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));