about summary refs log tree commit diff
path: root/src/libsyntax/tokenstream.rs
diff options
context:
space:
mode:
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>2017-03-17 23:23:12 +0000
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>2017-06-26 02:05:46 +0000
commit7d41674b175cdb3452e042ef6f37141bc3788f8b (patch)
treeec16e1a7ff23d8b594e45e6bcb1980d7a6740945 /src/libsyntax/tokenstream.rs
parentd4488b7df97e62bfeed8c30b1922ce55ff254594 (diff)
downloadrust-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.rs54
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 {