Skip to content

Commit c233c2e

Browse files
committed
libsyntax: De-@mut TtReader::cur_tok
1 parent bac8b2e commit c233c2e

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

src/libsyntax/ext/tt/transcribe.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ pub struct TtReader {
3939
priv repeat_idx: RefCell<~[uint]>,
4040
priv repeat_len: RefCell<~[uint]>,
4141
/* cached: */
42-
cur_tok: Token,
42+
cur_tok: RefCell<Token>,
4343
cur_span: Span
4444
}
4545

@@ -66,7 +66,7 @@ pub fn new_tt_reader(sp_diag: @mut SpanHandler,
6666
repeat_idx: RefCell::new(~[]),
6767
repeat_len: RefCell::new(~[]),
6868
/* dummy values, never read: */
69-
cur_tok: EOF,
69+
cur_tok: RefCell::new(EOF),
7070
cur_span: DUMMY_SP
7171
};
7272
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 {
175175
pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
176176
// XXX(pcwalton): Bad copy?
177177
let ret_val = TokenAndSpan {
178-
tok: r.cur_tok.clone(),
178+
tok: r.cur_tok.get(),
179179
sp: r.cur_span,
180180
};
181181
loop {
@@ -195,7 +195,7 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
195195

196196
match r.stack.up {
197197
None => {
198-
r.cur_tok = EOF;
198+
r.cur_tok.set(EOF);
199199
return ret_val;
200200
}
201201
Some(tt_f) => {
@@ -221,7 +221,7 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
221221
}
222222
match r.stack.sep.clone() {
223223
Some(tk) => {
224-
r.cur_tok = tk; /* repeat same span, I guess */
224+
r.cur_tok.set(tk); /* repeat same span, I guess */
225225
return ret_val;
226226
}
227227
None => ()
@@ -244,7 +244,7 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
244244
}
245245
tt_tok(sp, tok) => {
246246
r.cur_span = sp;
247-
r.cur_tok = tok;
247+
r.cur_tok.set(tok);
248248
r.stack.idx += 1u;
249249
return ret_val;
250250
}
@@ -299,14 +299,15 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
299299
(a) idents can be in lots of places, so it'd be a pain
300300
(b) we actually can, since it's a token. */
301301
matched_nonterminal(nt_ident(~sn,b)) => {
302-
r.cur_span = sp; r.cur_tok = IDENT(sn,b);
302+
r.cur_span = sp;
303+
r.cur_tok.set(IDENT(sn,b));
303304
r.stack.idx += 1u;
304305
return ret_val;
305306
}
306307
matched_nonterminal(ref other_whole_nt) => {
307308
// XXX(pcwalton): Bad copy.
308309
r.cur_span = sp;
309-
r.cur_tok = INTERPOLATED((*other_whole_nt).clone());
310+
r.cur_tok.set(INTERPOLATED((*other_whole_nt).clone()));
310311
r.stack.idx += 1u;
311312
return ret_val;
312313
}

src/libsyntax/parse/lexer.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,10 @@ impl reader for StringReader {
133133
}
134134

135135
impl reader for TtReader {
136-
fn is_eof(@mut self) -> bool { self.cur_tok == token::EOF }
136+
fn is_eof(@mut self) -> bool {
137+
let cur_tok = self.cur_tok.borrow();
138+
*cur_tok.get() == token::EOF
139+
}
137140
fn next_token(@mut self) -> TokenAndSpan {
138141
let r = tt_next_token(self);
139142
debug!("TtReader: r={:?}", r);
@@ -145,7 +148,7 @@ impl reader for TtReader {
145148
fn span_diag(@mut self) -> @mut SpanHandler { self.sp_diag }
146149
fn peek(@mut self) -> TokenAndSpan {
147150
TokenAndSpan {
148-
tok: self.cur_tok.clone(),
151+
tok: self.cur_tok.get(),
149152
sp: self.cur_span,
150153
}
151154
}

0 commit comments

Comments
 (0)