about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2013-12-27 12:14:58 -0800
committerPatrick Walton <pcwalton@mimiga.net>2014-01-03 14:01:57 -0800
commita214b8e41dda31bd09243d4da58355fbc94614ec (patch)
tree101c80e509a1f01fad97b3319e45d975cf4f99c9 /src/libsyntax/parse
parent501a6c816a4a38e6ca1d204700cc0396285abd1f (diff)
downloadrust-a214b8e41dda31bd09243d4da58355fbc94614ec.tar.gz
rust-a214b8e41dda31bd09243d4da58355fbc94614ec.zip
libsyntax: De-`@mut` `StringReader::peek_tok`
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/lexer.rs23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs
index 68ff8308547..1379ce5da7b 100644
--- a/src/libsyntax/parse/lexer.rs
+++ b/src/libsyntax/parse/lexer.rs
@@ -18,7 +18,7 @@ use parse::token;
 use parse::token::{str_to_ident};
 
 use std::cast::transmute;
-use std::cell::Cell;
+use std::cell::{Cell, RefCell};
 use std::char;
 use std::num::from_str_radix;
 use std::util;
@@ -53,7 +53,7 @@ pub struct StringReader {
     curr: Cell<char>,
     filemap: @codemap::FileMap,
     /* cached: */
-    peek_tok: token::Token,
+    peek_tok: RefCell<token::Token>,
     peek_span: Span
 }
 
@@ -80,7 +80,7 @@ pub fn new_low_level_string_reader(span_diagnostic: @mut SpanHandler,
         curr: Cell::new(initial_char),
         filemap: filemap,
         /* dummy values; not read */
-        peek_tok: token::EOF,
+        peek_tok: RefCell::new(token::EOF),
         peek_span: codemap::DUMMY_SP
     };
     bump(r);
@@ -108,9 +108,12 @@ impl reader for StringReader {
     fn is_eof(@mut self) -> bool { is_eof(self) }
     // return the next token. EFFECT: advances the string_reader.
     fn next_token(@mut self) -> TokenAndSpan {
-        let ret_val = TokenAndSpan {
-            tok: util::replace(&mut self.peek_tok, token::UNDERSCORE),
-            sp: self.peek_span,
+        let ret_val = {
+            let mut peek_tok = self.peek_tok.borrow_mut();
+            TokenAndSpan {
+                tok: util::replace(peek_tok.get(), token::UNDERSCORE),
+                sp: self.peek_span,
+            }
         };
         string_advance_token(self);
         ret_val
@@ -122,7 +125,7 @@ impl reader for StringReader {
     fn peek(@mut self) -> TokenAndSpan {
         // XXX(pcwalton): Bad copy!
         TokenAndSpan {
-            tok: self.peek_tok.clone(),
+            tok: self.peek_tok.get(),
             sp: self.peek_span,
         }
     }
@@ -195,14 +198,14 @@ fn string_advance_token(r: @mut StringReader) {
     match (consume_whitespace_and_comments(r)) {
         Some(comment) => {
             r.peek_span = comment.sp;
-            r.peek_tok = comment.tok;
+            r.peek_tok.set(comment.tok);
         },
         None => {
             if is_eof(r) {
-                r.peek_tok = token::EOF;
+                r.peek_tok.set(token::EOF);
             } else {
                 let start_bytepos = r.last_pos.get();
-                r.peek_tok = next_token_inner(r);
+                r.peek_tok.set(next_token_inner(r));
                 r.peek_span = codemap::mk_sp(start_bytepos, r.last_pos.get());
             };
         }