@@ -39,7 +39,7 @@ pub struct TtReader {
39
39
priv repeat_idx : RefCell < ~[ uint ] > ,
40
40
priv repeat_len : RefCell < ~[ uint ] > ,
41
41
/* cached: */
42
- cur_tok : Token ,
42
+ cur_tok : RefCell < Token > ,
43
43
cur_span : Span
44
44
}
45
45
@@ -66,7 +66,7 @@ pub fn new_tt_reader(sp_diag: @mut SpanHandler,
66
66
repeat_idx : RefCell :: new ( ~[ ] ) ,
67
67
repeat_len : RefCell :: new ( ~[ ] ) ,
68
68
/* dummy values, never read: */
69
- cur_tok : EOF ,
69
+ cur_tok : RefCell :: new ( EOF ) ,
70
70
cur_span : DUMMY_SP
71
71
} ;
72
72
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 {
175
175
pub fn tt_next_token ( r : & mut TtReader ) -> TokenAndSpan {
176
176
// XXX(pcwalton): Bad copy?
177
177
let ret_val = TokenAndSpan {
178
- tok : r. cur_tok . clone ( ) ,
178
+ tok : r. cur_tok . get ( ) ,
179
179
sp : r. cur_span ,
180
180
} ;
181
181
loop {
@@ -195,7 +195,7 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
195
195
196
196
match r. stack . up {
197
197
None => {
198
- r. cur_tok = EOF ;
198
+ r. cur_tok . set ( EOF ) ;
199
199
return ret_val;
200
200
}
201
201
Some ( tt_f) => {
@@ -221,7 +221,7 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
221
221
}
222
222
match r. stack . sep . clone ( ) {
223
223
Some ( tk) => {
224
- r. cur_tok = tk ; /* repeat same span, I guess */
224
+ r. cur_tok . set ( tk ) ; /* repeat same span, I guess */
225
225
return ret_val;
226
226
}
227
227
None => ( )
@@ -244,7 +244,7 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
244
244
}
245
245
tt_tok( sp, tok) => {
246
246
r. cur_span = sp;
247
- r. cur_tok = tok;
247
+ r. cur_tok . set ( tok) ;
248
248
r. stack . idx += 1 u;
249
249
return ret_val;
250
250
}
@@ -299,14 +299,15 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
299
299
(a) idents can be in lots of places, so it'd be a pain
300
300
(b) we actually can, since it's a token. */
301
301
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) ) ;
303
304
r. stack . idx += 1 u;
304
305
return ret_val;
305
306
}
306
307
matched_nonterminal( ref other_whole_nt) => {
307
308
// XXX(pcwalton): Bad copy.
308
309
r. cur_span = sp;
309
- r. cur_tok = INTERPOLATED ( ( * other_whole_nt) . clone ( ) ) ;
310
+ r. cur_tok . set ( INTERPOLATED ( ( * other_whole_nt) . clone ( ) ) ) ;
310
311
r. stack . idx += 1 u;
311
312
return ret_val;
312
313
}
0 commit comments