Skip to content

Commit 9103e43

Browse files
committed
Bugfix: enable transcription to deal with zero-repetition cases.
1 parent e20c5e7 commit 9103e43

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

src/libsyntax/ext/tt/transcribe.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,6 @@ pure fn lookup_cur_ad_by_ad(r: tt_reader, start: @arb_depth) -> @arb_depth {
8686
seq(ads, _) { ads[idx] }
8787
}
8888
}
89-
unchecked {io::println(#fmt["%? / %?", copy r.repeat_idx,
90-
copy r.repeat_len]);};
9189
vec::foldl(start, r.repeat_idx, red)
9290
}
9391

@@ -135,7 +133,7 @@ fn lockstep_iter_size(&&t: token_tree, &&r: tt_reader) -> lis {
135133

136134
fn tt_next_token(&&r: tt_reader) -> {tok: token, sp: span} {
137135
let ret_val = { tok: r.cur_tok, sp: r.cur_span };
138-
while r.cur.idx >= vec::len(r.cur.readme) {
136+
while r.cur.idx >= r.cur.readme.len() {
139137
/* done with this set; pop or repeat? */
140138
if ! r.cur.dotdotdoted
141139
|| r.repeat_idx.last() == r.repeat_len.last() - 1 {
@@ -193,20 +191,21 @@ fn tt_next_token(&&r: tt_reader) -> {tok: token, sp: span} {
193191
r.sp_diag.span_fatal(sp, msg);
194192
}
195193
lis_constraint(len, _) {
196-
vec::push(r.repeat_len, len);
197-
vec::push(r.repeat_idx, 0u);
198-
r.cur = @{readme: tts, mut idx: 0u, dotdotdoted: true,
199-
sep: sep, up: tt_frame_up(option::some(r.cur)) };
200-
201194
if len == 0 {
202195
if !zerok {
203196
r.sp_diag.span_fatal(sp, /* FIXME #2887 blame invoker
204197
*/
205198
~"this must repeat at least \
206199
once");
207200
}
208-
/* we need to pop before we proceed, so recur */
201+
202+
r.cur.idx += 1u;
209203
ret tt_next_token(r);
204+
} else {
205+
vec::push(r.repeat_len, len);
206+
vec::push(r.repeat_idx, 0u);
207+
r.cur = @{readme: tts, mut idx: 0u, dotdotdoted: true,
208+
sep: sep, up: tt_frame_up(option::some(r.cur))};
210209
}
211210
}
212211
}

0 commit comments

Comments
 (0)