diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2013-12-27 12:14:58 -0800 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2014-01-03 14:01:57 -0800 |
| commit | a214b8e41dda31bd09243d4da58355fbc94614ec (patch) | |
| tree | 101c80e509a1f01fad97b3319e45d975cf4f99c9 /src/libsyntax/parse | |
| parent | 501a6c816a4a38e6ca1d204700cc0396285abd1f (diff) | |
| download | rust-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.rs | 23 |
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()); }; } |
