]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: ast: Add ExternCrate TokenStream visitor
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Thu, 23 Mar 2023 15:45:35 +0000 (16:45 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 17:28:41 +0000 (18:28 +0100)
Add a visitor implementation for ExternCrate declarations.

gcc/rust/ChangeLog:

* ast/rust-ast-tokenstream.cc (TokenStream::visit): Add visitor.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/ast/rust-ast-tokenstream.cc

index 8dae3e57e673f3eed82af48cfdd931b7eaa138bd..f5d04450dbc694ddceea4f91a04d681a9968631f 100644 (file)
@@ -1568,8 +1568,22 @@ TokenStream::visit (Module &module)
 }
 
 void
-TokenStream::visit (ExternCrate &)
-{}
+TokenStream::visit (ExternCrate &crate)
+{
+  tokens.push_back (Rust::Token::make (EXTERN_TOK, crate.get_locus ()));
+  tokens.push_back (Rust::Token::make (CRATE, Location ()));
+  auto ref = crate.get_referenced_crate ();
+  tokens.push_back (
+    Rust::Token::make_identifier (Location (), std::move (ref)));
+  if (crate.has_as_clause ())
+    {
+      auto as_clause = crate.get_as_clause ();
+      tokens.push_back (Rust::Token::make (AS, Location ()));
+      tokens.push_back (
+       Rust::Token::make_identifier (Location (), std::move (as_clause)));
+    }
+  tokens.push_back (Rust::Token::make (SEMICOLON, Location ()));
+}
 
 void
 TokenStream::visit (UseTreeGlob &)