@@ -17,14 +17,14 @@ use parse::token::{EOF, INTERPOLATED, IDENT, Token, nt_ident};
17
17
use parse:: token:: { ident_to_str} ;
18
18
use parse:: lexer:: TokenAndSpan ;
19
19
20
- use std:: cell:: RefCell ;
20
+ use std:: cell:: { Cell , RefCell } ;
21
21
use std:: hashmap:: HashMap ;
22
22
use std:: option;
23
23
24
24
///an unzipping of `token_tree`s
25
25
struct TtFrame {
26
26
forest : @~[ ast:: token_tree ] ,
27
- idx : uint ,
27
+ idx : Cell < uint > ,
28
28
dotdotdoted : bool ,
29
29
sep : Option < Token > ,
30
30
up : Option < @mut TtFrame > ,
@@ -54,7 +54,7 @@ pub fn new_tt_reader(sp_diag: @SpanHandler,
54
54
sp_diag : sp_diag,
55
55
stack : RefCell :: new ( @mut TtFrame {
56
56
forest : @src,
57
- idx : 0 u ,
57
+ idx : Cell :: new ( 0 u ) ,
58
58
dotdotdoted : false ,
59
59
sep : None ,
60
60
up : option:: None
@@ -76,7 +76,7 @@ pub fn new_tt_reader(sp_diag: @SpanHandler,
76
76
fn dup_tt_frame ( f : @mut TtFrame ) -> @mut TtFrame {
77
77
@mut TtFrame {
78
78
forest : @( * f. forest ) . clone ( ) ,
79
- idx : f. idx ,
79
+ idx : f. idx . clone ( ) ,
80
80
dotdotdoted : f. dotdotdoted ,
81
81
sep : f. sep . clone ( ) ,
82
82
up : match f. up {
@@ -181,7 +181,7 @@ pub fn tt_next_token(r: &TtReader) -> TokenAndSpan {
181
181
loop {
182
182
{
183
183
let mut stack = r. stack . borrow_mut ( ) ;
184
- if stack. get ( ) . idx < stack. get ( ) . forest . len ( ) {
184
+ if stack. get ( ) . idx . get ( ) < stack. get ( ) . forest . len ( ) {
185
185
break ;
186
186
}
187
187
}
@@ -209,12 +209,12 @@ pub fn tt_next_token(r: &TtReader) -> TokenAndSpan {
209
209
}
210
210
211
211
r. stack . set ( tt_f) ;
212
- r. stack . get ( ) . idx += 1 u;
212
+ r. stack . get ( ) . idx . set ( r . stack . get ( ) . idx . get ( ) + 1 u) ;
213
213
}
214
214
}
215
215
216
216
} else { /* repeat */
217
- r. stack . get ( ) . idx = 0 u ;
217
+ r. stack . get ( ) . idx . set ( 0 u ) ;
218
218
{
219
219
let mut repeat_idx = r. repeat_idx . borrow_mut ( ) ;
220
220
repeat_idx. get ( ) [ repeat_idx. get ( ) . len ( ) - 1 u] += 1 u;
@@ -231,11 +231,11 @@ pub fn tt_next_token(r: &TtReader) -> TokenAndSpan {
231
231
loop { /* because it's easiest, this handles `tt_delim` not starting
232
232
with a `tt_tok`, even though it won't happen */
233
233
// XXX(pcwalton): Bad copy.
234
- match r. stack . get ( ) . forest [ r. stack . get ( ) . idx ] . clone ( ) {
234
+ match r. stack . get ( ) . forest [ r. stack . get ( ) . idx . get ( ) ] . clone ( ) {
235
235
tt_delim( tts) => {
236
236
r. stack . set ( @mut TtFrame {
237
237
forest : tts,
238
- idx : 0 u ,
238
+ idx : Cell :: new ( 0 u ) ,
239
239
dotdotdoted : false ,
240
240
sep : None ,
241
241
up : option:: Some ( r. stack . get ( ) )
@@ -245,7 +245,7 @@ pub fn tt_next_token(r: &TtReader) -> TokenAndSpan {
245
245
tt_tok( sp, tok) => {
246
246
r. cur_span . set ( sp) ;
247
247
r. cur_tok . set ( tok) ;
248
- r. stack . get ( ) . idx += 1 u;
248
+ r. stack . get ( ) . idx . set ( r . stack . get ( ) . idx . get ( ) + 1 u) ;
249
249
return ret_val;
250
250
}
251
251
tt_seq( sp, tts, sep, zerok) => {
@@ -272,7 +272,7 @@ pub fn tt_next_token(r: &TtReader) -> TokenAndSpan {
272
272
once") ;
273
273
}
274
274
275
- r. stack . get ( ) . idx += 1 u;
275
+ r. stack . get ( ) . idx . set ( r . stack . get ( ) . idx . get ( ) + 1 u) ;
276
276
return tt_next_token ( r) ;
277
277
} else {
278
278
{
@@ -282,7 +282,7 @@ pub fn tt_next_token(r: &TtReader) -> TokenAndSpan {
282
282
repeat_idx. get ( ) . push ( 0 u) ;
283
283
r. stack . set ( @mut TtFrame {
284
284
forest : tts,
285
- idx : 0 u ,
285
+ idx : Cell :: new ( 0 u ) ,
286
286
dotdotdoted : true ,
287
287
sep : sep,
288
288
up : Some ( r. stack . get ( ) )
@@ -301,14 +301,14 @@ pub fn tt_next_token(r: &TtReader) -> TokenAndSpan {
301
301
matched_nonterminal( nt_ident( ~sn, b) ) => {
302
302
r. cur_span . set ( sp) ;
303
303
r. cur_tok . set ( IDENT ( sn, b) ) ;
304
- r. stack . get ( ) . idx += 1 u;
304
+ r. stack . get ( ) . idx . set ( r . stack . get ( ) . idx . get ( ) + 1 u) ;
305
305
return ret_val;
306
306
}
307
307
matched_nonterminal( ref other_whole_nt) => {
308
308
// XXX(pcwalton): Bad copy.
309
309
r. cur_span . set ( sp) ;
310
310
r. cur_tok . set ( INTERPOLATED ( ( * other_whole_nt) . clone ( ) ) ) ;
311
- r. stack . get ( ) . idx += 1 u;
311
+ r. stack . get ( ) . idx . set ( r . stack . get ( ) . idx . get ( ) + 1 u) ;
312
312
return ret_val;
313
313
}
314
314
matched_seq( ..) => {
0 commit comments