Skip to content

Commit db21387

Browse files
committed
libsyntax: De-@mut TtReader::repeat_idx
1 parent 3810bea commit db21387

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

src/libsyntax/ext/tt/transcribe.rs

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub struct TtReader {
3636
stack: @mut TtFrame,
3737
/* for MBE-style macro transcription */
3838
priv interpolations: RefCell<HashMap<Ident, @named_match>>,
39-
repeat_idx: ~[uint],
39+
priv repeat_idx: RefCell<~[uint]>,
4040
repeat_len: ~[uint],
4141
/* cached: */
4242
cur_tok: Token,
@@ -63,7 +63,7 @@ pub fn new_tt_reader(sp_diag: @mut SpanHandler,
6363
None => RefCell::new(HashMap::new()),
6464
Some(x) => RefCell::new(x),
6565
},
66-
repeat_idx: ~[],
66+
repeat_idx: RefCell::new(~[]),
6767
repeat_len: ~[],
6868
/* dummy values, never read: */
6969
cur_tok: EOF,
@@ -111,7 +111,8 @@ fn lookup_cur_matched_by_matched(r: &mut TtReader,
111111
matched_seq(ref ads, _) => ads[*idx]
112112
}
113113
}
114-
r.repeat_idx.iter().fold(start, red)
114+
let repeat_idx = r.repeat_idx.borrow();
115+
repeat_idx.get().iter().fold(start, red)
115116
}
116117

117118
fn lookup_cur_matched(r: &mut TtReader, name: Ident) -> @named_match {
@@ -186,8 +187,10 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
186187
}
187188

188189
/* done with this set; pop or repeat? */
189-
if ! r.stack.dotdotdoted
190-
|| { *r.repeat_idx.last() == *r.repeat_len.last() - 1 } {
190+
if ! r.stack.dotdotdoted || {
191+
let repeat_idx = r.repeat_idx.borrow();
192+
*repeat_idx.get().last() == *r.repeat_len.last() - 1
193+
} {
191194

192195
match r.stack.up {
193196
None => {
@@ -196,8 +199,11 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
196199
}
197200
Some(tt_f) => {
198201
if r.stack.dotdotdoted {
199-
r.repeat_idx.pop();
200-
r.repeat_len.pop();
202+
{
203+
let mut repeat_idx = r.repeat_idx.borrow_mut();
204+
repeat_idx.get().pop();
205+
r.repeat_len.pop();
206+
}
201207
}
202208

203209
r.stack = tt_f;
@@ -207,7 +213,10 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
207213

208214
} else { /* repeat */
209215
r.stack.idx = 0u;
210-
r.repeat_idx[r.repeat_idx.len() - 1u] += 1u;
216+
{
217+
let mut repeat_idx = r.repeat_idx.borrow_mut();
218+
repeat_idx.get()[repeat_idx.get().len() - 1u] += 1u;
219+
}
211220
match r.stack.sep.clone() {
212221
Some(tk) => {
213222
r.cur_tok = tk; /* repeat same span, I guess */
@@ -264,15 +273,18 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
264273
r.stack.idx += 1u;
265274
return tt_next_token(r);
266275
} else {
267-
r.repeat_len.push(len);
268-
r.repeat_idx.push(0u);
269-
r.stack = @mut TtFrame {
270-
forest: tts,
271-
idx: 0u,
272-
dotdotdoted: true,
273-
sep: sep,
274-
up: Some(r.stack)
275-
};
276+
{
277+
let mut repeat_idx = r.repeat_idx.borrow_mut();
278+
r.repeat_len.push(len);
279+
repeat_idx.get().push(0u);
280+
r.stack = @mut TtFrame {
281+
forest: tts,
282+
idx: 0u,
283+
dotdotdoted: true,
284+
sep: sep,
285+
up: Some(r.stack)
286+
};
287+
}
276288
}
277289
}
278290
}

0 commit comments

Comments
 (0)