@@ -40,7 +40,7 @@ pub struct TtReader {
40
40
priv repeat_len : RefCell < ~[ uint ] > ,
41
41
/* cached: */
42
42
cur_tok : RefCell < Token > ,
43
- cur_span : Span
43
+ cur_span : RefCell < Span > ,
44
44
}
45
45
46
46
/** This can do Macro-By-Example transcription. On the other hand, if
@@ -67,7 +67,7 @@ pub fn new_tt_reader(sp_diag: @mut SpanHandler,
67
67
repeat_len : RefCell :: new ( ~[ ] ) ,
68
68
/* dummy values, never read: */
69
69
cur_tok : RefCell :: new ( EOF ) ,
70
- cur_span : DUMMY_SP
70
+ cur_span : RefCell :: new ( DUMMY_SP ) ,
71
71
} ;
72
72
tt_next_token ( r) ; /* get cur_tok and cur_span set up */
73
73
return r;
@@ -93,7 +93,7 @@ pub fn dup_tt_reader(r: @mut TtReader) -> @mut TtReader {
93
93
repeat_idx : r. repeat_idx . clone ( ) ,
94
94
repeat_len : r. repeat_len . clone ( ) ,
95
95
cur_tok : r. cur_tok . clone ( ) ,
96
- cur_span : r. cur_span ,
96
+ cur_span : r. cur_span . clone ( ) ,
97
97
interpolations : r. interpolations . clone ( ) ,
98
98
}
99
99
}
@@ -123,8 +123,9 @@ fn lookup_cur_matched(r: &mut TtReader, name: Ident) -> @named_match {
123
123
match matched_opt {
124
124
Some ( s) => lookup_cur_matched_by_matched ( r, s) ,
125
125
None => {
126
- r. sp_diag . span_fatal ( r. cur_span , format ! ( "unknown macro variable `{}`" ,
127
- ident_to_str( & name) ) ) ;
126
+ r. sp_diag . span_fatal ( r. cur_span . get ( ) ,
127
+ format ! ( "unknown macro variable `{}`" ,
128
+ ident_to_str( & name) ) ) ;
128
129
}
129
130
}
130
131
}
@@ -176,7 +177,7 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
176
177
// XXX(pcwalton): Bad copy?
177
178
let ret_val = TokenAndSpan {
178
179
tok : r. cur_tok . get ( ) ,
179
- sp : r. cur_span ,
180
+ sp : r. cur_span . get ( ) ,
180
181
} ;
181
182
loop {
182
183
{
@@ -243,7 +244,7 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
243
244
// if this could be 0-length, we'd need to potentially recur here
244
245
}
245
246
tt_tok( sp, tok) => {
246
- r. cur_span = sp ;
247
+ r. cur_span . set ( sp ) ;
247
248
r. cur_tok . set ( tok) ;
248
249
r. stack . idx += 1 u;
249
250
return ret_val;
@@ -299,21 +300,21 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
299
300
(a) idents can be in lots of places, so it'd be a pain
300
301
(b) we actually can, since it's a token. */
301
302
matched_nonterminal( nt_ident( ~sn, b) ) => {
302
- r. cur_span = sp ;
303
+ r. cur_span . set ( sp ) ;
303
304
r. cur_tok . set ( IDENT ( sn, b) ) ;
304
305
r. stack . idx += 1 u;
305
306
return ret_val;
306
307
}
307
308
matched_nonterminal( ref other_whole_nt) => {
308
309
// XXX(pcwalton): Bad copy.
309
- r. cur_span = sp ;
310
+ r. cur_span . set ( sp ) ;
310
311
r. cur_tok . set ( INTERPOLATED ( ( * other_whole_nt) . clone ( ) ) ) ;
311
312
r. stack . idx += 1 u;
312
313
return ret_val;
313
314
}
314
315
matched_seq( ..) => {
315
316
r. sp_diag . span_fatal (
316
- r. cur_span , /* blame the macro writer */
317
+ r. cur_span . get ( ) , /* blame the macro writer */
317
318
format ! ( "variable '{}' is still repeating at this depth" ,
318
319
ident_to_str( & ident) ) ) ;
319
320
}
0 commit comments