From: Arthur Cohen Date: Tue, 17 Jan 2023 15:44:23 +0000 (+0100) Subject: gccrs: expansion: Add `get_token_slice` to `MacroInvocLexer` class X-Git-Tag: upstream/13.1.0~161 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2d30e0b882f43148a181ef58309770ee67c6d083;p=platform%2Fupstream%2Fgcc.git gccrs: 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`. --- 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> +MacroInvocLexer::get_token_slice (size_t start_idx, size_t end_idx) const +{ + std::vector> 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 a0d3016..0923c18 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> + get_token_slice (size_t start_idx, size_t end_idx) const; + private: size_t offs; std::vector> token_stream;