@@ -33,7 +33,7 @@ struct TtFrame {
33
33
pub struct TtReader {
34
34
sp_diag : @mut SpanHandler ,
35
35
// the unzipped tree:
36
- stack : @mut TtFrame ,
36
+ priv stack : RefCell < @mut TtFrame > ,
37
37
/* for MBE-style macro transcription */
38
38
priv interpolations : RefCell < HashMap < Ident , @named_match > > ,
39
39
priv repeat_idx : RefCell < ~[ uint ] > ,
@@ -52,13 +52,13 @@ pub fn new_tt_reader(sp_diag: @mut SpanHandler,
52
52
-> @mut TtReader {
53
53
let r = @mut TtReader {
54
54
sp_diag : sp_diag,
55
- stack : @mut TtFrame {
55
+ stack : RefCell :: new ( @mut TtFrame {
56
56
forest : @src,
57
57
idx : 0 u,
58
58
dotdotdoted : false ,
59
59
sep : None ,
60
60
up : option:: None
61
- } ,
61
+ } ) ,
62
62
interpolations : match interp { /* just a convienience */
63
63
None => RefCell :: new ( HashMap :: new ( ) ) ,
64
64
Some ( x) => RefCell :: new ( x) ,
@@ -89,7 +89,7 @@ fn dup_tt_frame(f: @mut TtFrame) -> @mut TtFrame {
89
89
pub fn dup_tt_reader ( r : @mut TtReader ) -> @mut TtReader {
90
90
@mut TtReader {
91
91
sp_diag : r. sp_diag ,
92
- stack : dup_tt_frame ( r. stack ) ,
92
+ stack : RefCell :: new ( dup_tt_frame ( r. stack . get ( ) ) ) ,
93
93
repeat_idx : r. repeat_idx . clone ( ) ,
94
94
repeat_len : r. repeat_len . clone ( ) ,
95
95
cur_tok : r. cur_tok . clone ( ) ,
@@ -181,26 +181,26 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
181
181
} ;
182
182
loop {
183
183
{
184
- let stack = & mut * r. stack ;
185
- if stack. idx < stack. forest . len ( ) {
184
+ let mut stack = r. stack . borrow_mut ( ) ;
185
+ if stack. get ( ) . idx < stack. get ( ) . forest . len ( ) {
186
186
break ;
187
187
}
188
188
}
189
189
190
190
/* done with this set; pop or repeat? */
191
- if ! r. stack . dotdotdoted || {
191
+ if !r. stack . get ( ) . dotdotdoted || {
192
192
let repeat_idx = r. repeat_idx . borrow ( ) ;
193
193
let repeat_len = r. repeat_len . borrow ( ) ;
194
194
* repeat_idx. get ( ) . last ( ) == * repeat_len. get ( ) . last ( ) - 1
195
195
} {
196
196
197
- match r. stack . up {
197
+ match r. stack . get ( ) . up {
198
198
None => {
199
199
r. cur_tok . set ( EOF ) ;
200
200
return ret_val;
201
201
}
202
202
Some ( tt_f) => {
203
- if r. stack . dotdotdoted {
203
+ if r. stack . get ( ) . dotdotdoted {
204
204
{
205
205
let mut repeat_idx = r. repeat_idx . borrow_mut ( ) ;
206
206
let mut repeat_len = r. repeat_len . borrow_mut ( ) ;
@@ -209,18 +209,18 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
209
209
}
210
210
}
211
211
212
- r. stack = tt_f;
213
- r. stack . idx += 1 u;
212
+ r. stack . set ( tt_f) ;
213
+ r. stack . get ( ) . idx += 1 u;
214
214
}
215
215
}
216
216
217
217
} else { /* repeat */
218
- r. stack . idx = 0 u;
218
+ r. stack . get ( ) . idx = 0 u;
219
219
{
220
220
let mut repeat_idx = r. repeat_idx . borrow_mut ( ) ;
221
221
repeat_idx. get ( ) [ repeat_idx. get ( ) . len ( ) - 1 u] += 1 u;
222
222
}
223
- match r. stack . sep . clone ( ) {
223
+ match r. stack . get ( ) . sep . clone ( ) {
224
224
Some ( tk) => {
225
225
r. cur_tok . set ( tk) ; /* repeat same span, I guess */
226
226
return ret_val;
@@ -232,21 +232,21 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
232
232
loop { /* because it's easiest, this handles `tt_delim` not starting
233
233
with a `tt_tok`, even though it won't happen */
234
234
// XXX(pcwalton): Bad copy.
235
- match r. stack . forest [ r. stack . idx ] . clone ( ) {
235
+ match r. stack . get ( ) . forest [ r. stack . get ( ) . idx ] . clone ( ) {
236
236
tt_delim( tts) => {
237
- r. stack = @mut TtFrame {
237
+ r. stack . set ( @mut TtFrame {
238
238
forest : tts,
239
239
idx : 0 u,
240
240
dotdotdoted : false ,
241
241
sep : None ,
242
- up : option:: Some ( r. stack )
243
- } ;
242
+ up : option:: Some ( r. stack . get ( ) )
243
+ } ) ;
244
244
// if this could be 0-length, we'd need to potentially recur here
245
245
}
246
246
tt_tok( sp, tok) => {
247
247
r. cur_span . set ( sp) ;
248
248
r. cur_tok . set ( tok) ;
249
- r. stack . idx += 1 u;
249
+ r. stack . get ( ) . idx += 1 u;
250
250
return ret_val;
251
251
}
252
252
tt_seq( sp, tts, sep, zerok) => {
@@ -273,21 +273,21 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
273
273
once") ;
274
274
}
275
275
276
- r. stack . idx += 1 u;
276
+ r. stack . get ( ) . idx += 1 u;
277
277
return tt_next_token ( r) ;
278
278
} else {
279
279
{
280
280
let mut repeat_idx = r. repeat_idx . borrow_mut ( ) ;
281
281
let mut repeat_len = r. repeat_len . borrow_mut ( ) ;
282
282
repeat_len. get ( ) . push ( len) ;
283
283
repeat_idx. get ( ) . push ( 0 u) ;
284
- r. stack = @mut TtFrame {
284
+ r. stack . set ( @mut TtFrame {
285
285
forest : tts,
286
286
idx : 0 u,
287
287
dotdotdoted : true ,
288
288
sep : sep,
289
- up : Some ( r. stack )
290
- } ;
289
+ up : Some ( r. stack . get ( ) )
290
+ } ) ;
291
291
}
292
292
}
293
293
}
@@ -302,14 +302,14 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
302
302
matched_nonterminal( nt_ident( ~sn, b) ) => {
303
303
r. cur_span . set ( sp) ;
304
304
r. cur_tok . set ( IDENT ( sn, b) ) ;
305
- r. stack . idx += 1 u;
305
+ r. stack . get ( ) . idx += 1 u;
306
306
return ret_val;
307
307
}
308
308
matched_nonterminal( ref other_whole_nt) => {
309
309
// XXX(pcwalton): Bad copy.
310
310
r. cur_span . set ( sp) ;
311
311
r. cur_tok . set ( INTERPOLATED ( ( * other_whole_nt) . clone ( ) ) ) ;
312
- r. stack . idx += 1 u;
312
+ r. stack . get ( ) . idx += 1 u;
313
313
return ret_val;
314
314
}
315
315
matched_seq( ..) => {
0 commit comments