diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2017-02-18 12:45:32 +0000 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2017-03-03 02:05:55 +0000 |
| commit | 8dca72be9be71fbccae9370b45af8efb946dedc1 (patch) | |
| tree | 14206a82d643981cf64cf833166cbe173111e812 /src/libproc_macro_plugin | |
| parent | 0143774cb5c21b18bf599b1726e122785c0de452 (diff) | |
| download | rust-8dca72be9be71fbccae9370b45af8efb946dedc1.tar.gz rust-8dca72be9be71fbccae9370b45af8efb946dedc1.zip | |
Optimize `syntax::tokenstream::Cursor`.
Diffstat (limited to 'src/libproc_macro_plugin')
| -rw-r--r-- | src/libproc_macro_plugin/qquote.rs | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/libproc_macro_plugin/qquote.rs b/src/libproc_macro_plugin/qquote.rs index b9bf35cff07..e3d85bca3e0 100644 --- a/src/libproc_macro_plugin/qquote.rs +++ b/src/libproc_macro_plugin/qquote.rs @@ -17,6 +17,7 @@ use syntax::symbol::Symbol; use syntax::tokenstream::{self, Delimited, TokenTree, TokenStream}; use syntax_pos::DUMMY_SP; +use std::iter; use std::rc::Rc; pub fn qquote<'cx>(stream: TokenStream) -> TokenStream { @@ -75,14 +76,14 @@ impl Quote for TokenStream { return quote!(::syntax::tokenstream::TokenStream::empty()); } - struct Quote(tokenstream::Cursor); + struct Quote(iter::Peekable<tokenstream::Cursor>); impl Iterator for Quote { type Item = TokenStream; fn next(&mut self) -> Option<TokenStream> { let is_unquote = match self.0.peek() { - Some(TokenTree::Token(_, Token::Ident(ident))) if ident.name == "unquote" => { + Some(&TokenTree::Token(_, Token::Ident(ident))) if ident.name == "unquote" => { self.0.next(); true } @@ -96,7 +97,7 @@ impl Quote for TokenStream { } } - let quoted = Quote(self.trees()).collect::<TokenStream>(); + let quoted = Quote(self.trees().peekable()).collect::<TokenStream>(); quote!([(unquote quoted)].iter().cloned().collect::<::syntax::tokenstream::TokenStream>()) } } |
