diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2017-03-17 23:23:12 +0000 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2017-06-26 02:05:46 +0000 |
| commit | 7d41674b175cdb3452e042ef6f37141bc3788f8b (patch) | |
| tree | ec16e1a7ff23d8b594e45e6bcb1980d7a6740945 /src/libsyntax/tokenstream.rs | |
| parent | d4488b7df97e62bfeed8c30b1922ce55ff254594 (diff) | |
| download | rust-7d41674b175cdb3452e042ef6f37141bc3788f8b.tar.gz rust-7d41674b175cdb3452e042ef6f37141bc3788f8b.zip | |
Clean up `tokenstream::Cursor` and `proc_macro`.
Diffstat (limited to 'src/libsyntax/tokenstream.rs')
| -rw-r--r-- | src/libsyntax/tokenstream.rs | 54 |
1 files changed, 27 insertions, 27 deletions
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>) -> 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<TokenStream>, usize)>, } -impl Iterator for Cursor { - type Item = TokenTree; - +impl StreamCursor { fn next(&mut self) -> Option<TokenTree> { - 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<TokenTree> { + 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 { |
