]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
expansion: Add `get_token_slice` to `MacroInvocLexer` class
authorArthur Cohen <arthur.cohen@embecosm.com>
Tue, 17 Jan 2023 15:44:23 +0000 (16:44 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Wed, 8 Feb 2023 11:02:40 +0000 (12:02 +0100)
gcc/rust/ChangeLog:

* expand/rust-macro-invoc-lexer.cc (MacroInvocLexer::get_token_slice):
Add API to retrieve token slices when lexing macro expansions.
* expand/rust-macro-invoc-lexer.h: Declare `get_token_slice`.

gcc/rust/expand/rust-macro-invoc-lexer.cc
gcc/rust/expand/rust-macro-invoc-lexer.h

index 8a43d29e0d123440b4e9314d7030b278e6633fd6..321f0f97a76b2d576ad7ba41c87b1b37608c87cb 100644 (file)
@@ -26,4 +26,18 @@ MacroInvocLexer::split_current_token (TokenId new_left __attribute__ ((unused)),
   // FIXME
   gcc_unreachable ();
 }
+
+std::vector<std::unique_ptr<AST::Token>>
+MacroInvocLexer::get_token_slice (size_t start_idx, size_t end_idx) const
+{
+  std::vector<std::unique_ptr<AST::Token>> slice;
+
+  rust_assert (end_idx < token_stream.size ());
+
+  for (size_t i = start_idx; i < end_idx; i++)
+    slice.emplace_back (token_stream[i]->clone_token ());
+
+  return slice;
+}
+
 } // namespace Rust
index 0fd4554d02f6d66eddac420c95636dcfe7289229..8190d7b26fad43d16d025b9d7c6fce08b6b92716 100644 (file)
@@ -55,6 +55,9 @@ public:
 
   size_t get_offs () const { return offs; }
 
+  std::vector<std::unique_ptr<AST::Token>>
+  get_token_slice (size_t start_idx, size_t end_idx) const;
+
 private:
   size_t offs;
   std::vector<std::unique_ptr<AST::Token>> token_stream;