aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2023-01-17 16:44:23 +0100
committerArthur Cohen <arthur.cohen@embecosm.com>2023-02-08 12:02:40 +0100
commitb1de4bb869845c6c7dadbc1cf84626e922e80ab9 (patch)
tree35ea5bd027b35bf4ac879a632ee9ea99e3705b7b
parent51533ca7651312952cc5cb5ee9f2fb7f6668c85c (diff)
downloadgcc-b1de4bb869845c6c7dadbc1cf84626e922e80ab9.zip
gcc-b1de4bb869845c6c7dadbc1cf84626e922e80ab9.tar.gz
gcc-b1de4bb869845c6c7dadbc1cf84626e922e80ab9.tar.bz2
expansion: Add `get_token_slice` to `MacroInvocLexer` class
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`.
-rw-r--r--gcc/rust/expand/rust-macro-invoc-lexer.cc14
-rw-r--r--gcc/rust/expand/rust-macro-invoc-lexer.h3
2 files changed, 17 insertions, 0 deletions
diff --git a/gcc/rust/expand/rust-macro-invoc-lexer.cc b/gcc/rust/expand/rust-macro-invoc-lexer.cc
index 8a43d29..321f0f9 100644
--- a/gcc/rust/expand/rust-macro-invoc-lexer.cc
+++ b/gcc/rust/expand/rust-macro-invoc-lexer.cc
@@ -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
diff --git a/gcc/rust/expand/rust-macro-invoc-lexer.h b/gcc/rust/expand/rust-macro-invoc-lexer.h
index 0fd4554..8190d7b 100644
--- a/gcc/rust/expand/rust-macro-invoc-lexer.h
+++ b/gcc/rust/expand/rust-macro-invoc-lexer.h
@@ -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;