Sha256: 8d4b817b9abc4e817105b673e15f29ef9bb8284a010ce01ac2d83387fe136947
Contents?: true
Size: 1.04 KB
Versions: 1
Compression:
Stored size: 1.04 KB
Contents
use proc_macro::{token_stream, Delimiter, TokenStream, TokenTree}; pub type Iter<'a> = &'a mut IterImpl; pub struct IterImpl { stack: Vec<token_stream::IntoIter>, peeked: Option<TokenTree>, } pub fn new(tokens: TokenStream) -> IterImpl { IterImpl { stack: vec![tokens.into_iter()], peeked: None, } } impl IterImpl { pub fn peek(&mut self) -> Option<&TokenTree> { self.peeked = self.next(); self.peeked.as_ref() } } impl Iterator for IterImpl { type Item = TokenTree; fn next(&mut self) -> Option<Self::Item> { if let Some(tt) = self.peeked.take() { return Some(tt); } loop { let top = self.stack.last_mut()?; match top.next() { None => drop(self.stack.pop()), Some(TokenTree::Group(ref group)) if group.delimiter() == Delimiter::None => { self.stack.push(group.stream().into_iter()); } Some(tt) => return Some(tt), } } } }
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
wasmtime-29.0.0 | ./ext/cargo-vendor/rustversion-1.0.19/src/iter.rs |