diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2023-01-17 16:44:23 +0100 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2023-02-08 12:02:40 +0100 |
commit | b1de4bb869845c6c7dadbc1cf84626e922e80ab9 (patch) | |
tree | 35ea5bd027b35bf4ac879a632ee9ea99e3705b7b | |
parent | 51533ca7651312952cc5cb5ee9f2fb7f6668c85c (diff) | |
download | gcc-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.cc | 14 | ||||
-rw-r--r-- | gcc/rust/expand/rust-macro-invoc-lexer.h | 3 |
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; |