From 7d41674b175cdb3452e042ef6f37141bc3788f8b Mon Sep 17 00:00:00 2001 From: Jeffrey Seyfried Date: Fri, 17 Mar 2017 23:23:12 +0000 Subject: Clean up `tokenstream::Cursor` and `proc_macro`. --- src/libsyntax/tokenstream.rs | 54 ++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 27 deletions(-) (limited to 'src/libsyntax') diff --git a/src/libsyntax/tokenstream.rs b/src/libsyntax/tokenstream.rs index 963482fc223..ab4f6970714 100644 --- a/src/libsyntax/tokenstream.rs +++ b/src/libsyntax/tokenstream.rs @@ -199,7 +199,7 @@ impl TokenStream { pub fn concat(mut streams: Vec) -> TokenStream { match streams.len() { 0 => TokenStream::empty(), - 1 => TokenStream::from(streams.pop().unwrap()), + 1 => streams.pop().unwrap(), _ => TokenStream::concat_rc_slice(RcSlice::new(streams)), } } @@ -244,37 +244,22 @@ struct StreamCursor { stack: Vec<(RcSlice, usize)>, } -impl Iterator for Cursor { - type Item = TokenTree; - +impl StreamCursor { fn next(&mut self) -> Option { - let cursor = match self.0 { - CursorKind::Stream(ref mut cursor) => cursor, - CursorKind::Tree(ref tree, ref mut consumed @ false) => { - *consumed = true; - return Some(tree.clone()); - } - _ => return None, - }; - loop { - if cursor.index < cursor.stream.len() { - match cursor.stream[cursor.index].kind.clone() { - TokenStreamKind::Tree(tree) => { - cursor.index += 1; - return Some(tree); - } + if self.index < self.stream.len() { + self.index += 1; + match self.stream[self.index - 1].kind.clone() { + TokenStreamKind::Tree(tree) => return Some(tree), TokenStreamKind::Stream(stream) => { - cursor.stack.push((mem::replace(&mut cursor.stream, stream), - mem::replace(&mut cursor.index, 0) + 1)); - } - TokenStreamKind::Empty => { - cursor.index += 1; + self.stack.push((mem::replace(&mut self.stream, stream), + mem::replace(&mut self.index, 0))); } + TokenStreamKind::Empty => {} } - } else if let Some((stream, index)) = cursor.stack.pop() { - cursor.stream = stream; - cursor.index = index; + } else if let Some((stream, index)) = self.stack.pop() { + self.stream = stream; + self.index = index; } else { return None; } @@ -282,6 +267,21 @@ impl Iterator for Cursor { } } +impl Iterator for Cursor { + type Item = TokenTree; + + fn next(&mut self) -> Option { + let (tree, consumed) = match self.0 { + CursorKind::Tree(ref tree, ref mut consumed @ false) => (tree, consumed), + CursorKind::Stream(ref mut cursor) => return cursor.next(), + _ => return None, + }; + + *consumed = true; + Some(tree.clone()) + } +} + impl Cursor { fn new(stream: TokenStream) -> Self { Cursor(match stream.kind { -- cgit 1.4.1-3-g733a5