about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2013-12-27 13:27:03 -0800
committerPatrick Walton <pcwalton@mimiga.net>2014-01-03 14:01:57 -0800
commitc233c2edfdc4639963dc2310783cd84bc4aefa7d (patch)
tree0ceb753884ce9dc6b45b18fd1fb5affc55417826 /src/libsyntax
parentbac8b2e557109b24277d28a00aea5448fc6933f6 (diff)
downloadrust-c233c2edfdc4639963dc2310783cd84bc4aefa7d.tar.gz
rust-c233c2edfdc4639963dc2310783cd84bc4aefa7d.zip
libsyntax: De-`@mut` `TtReader::cur_tok`
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ext/tt/transcribe.rs17
-rw-r--r--src/libsyntax/parse/lexer.rs7
2 files changed, 14 insertions, 10 deletions
diff --git a/src/libsyntax/ext/tt/transcribe.rs b/src/libsyntax/ext/tt/transcribe.rs
index 53ee114e806..ff06505034b 100644
--- a/src/libsyntax/ext/tt/transcribe.rs
+++ b/src/libsyntax/ext/tt/transcribe.rs
@@ -39,7 +39,7 @@ pub struct TtReader {
     priv repeat_idx: RefCell<~[uint]>,
     priv repeat_len: RefCell<~[uint]>,
     /* cached: */
-    cur_tok: Token,
+    cur_tok: RefCell<Token>,
     cur_span: Span
 }
 
@@ -66,7 +66,7 @@ pub fn new_tt_reader(sp_diag: @mut SpanHandler,
         repeat_idx: RefCell::new(~[]),
         repeat_len: RefCell::new(~[]),
         /* dummy values, never read: */
-        cur_tok: EOF,
+        cur_tok: RefCell::new(EOF),
         cur_span: DUMMY_SP
     };
     tt_next_token(r); /* get cur_tok and cur_span set up */
@@ -175,7 +175,7 @@ fn lockstep_iter_size(t: &token_tree, r: &mut TtReader) -> lis {
 pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
     // XXX(pcwalton): Bad copy?
     let ret_val = TokenAndSpan {
-        tok: r.cur_tok.clone(),
+        tok: r.cur_tok.get(),
         sp: r.cur_span,
     };
     loop {
@@ -195,7 +195,7 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
 
             match r.stack.up {
               None => {
-                r.cur_tok = EOF;
+                r.cur_tok.set(EOF);
                 return ret_val;
               }
               Some(tt_f) => {
@@ -221,7 +221,7 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
             }
             match r.stack.sep.clone() {
               Some(tk) => {
-                r.cur_tok = tk; /* repeat same span, I guess */
+                r.cur_tok.set(tk); /* repeat same span, I guess */
                 return ret_val;
               }
               None => ()
@@ -244,7 +244,7 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
           }
           tt_tok(sp, tok) => {
             r.cur_span = sp;
-            r.cur_tok = tok;
+            r.cur_tok.set(tok);
             r.stack.idx += 1u;
             return ret_val;
           }
@@ -299,14 +299,15 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
               (a) idents can be in lots of places, so it'd be a pain
               (b) we actually can, since it's a token. */
               matched_nonterminal(nt_ident(~sn,b)) => {
-                r.cur_span = sp; r.cur_tok = IDENT(sn,b);
+                r.cur_span = sp;
+                r.cur_tok.set(IDENT(sn,b));
                 r.stack.idx += 1u;
                 return ret_val;
               }
               matched_nonterminal(ref other_whole_nt) => {
                 // XXX(pcwalton): Bad copy.
                 r.cur_span = sp;
-                r.cur_tok = INTERPOLATED((*other_whole_nt).clone());
+                r.cur_tok.set(INTERPOLATED((*other_whole_nt).clone()));
                 r.stack.idx += 1u;
                 return ret_val;
               }
diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs
index f86a3d0321d..fa82e8c67f2 100644
--- a/src/libsyntax/parse/lexer.rs
+++ b/src/libsyntax/parse/lexer.rs
@@ -133,7 +133,10 @@ impl reader for StringReader {
 }
 
 impl reader for TtReader {
-    fn is_eof(@mut self) -> bool { self.cur_tok == token::EOF }
+    fn is_eof(@mut self) -> bool {
+        let cur_tok = self.cur_tok.borrow();
+        *cur_tok.get() == token::EOF
+    }
     fn next_token(@mut self) -> TokenAndSpan {
         let r = tt_next_token(self);
         debug!("TtReader: r={:?}", r);
@@ -145,7 +148,7 @@ impl reader for TtReader {
     fn span_diag(@mut self) -> @mut SpanHandler { self.sp_diag }
     fn peek(@mut self) -> TokenAndSpan {
         TokenAndSpan {
-            tok: self.cur_tok.clone(),
+            tok: self.cur_tok.get(),
             sp: self.cur_span,
         }
     }