about summary refs log tree commit diff
path: root/src/libsyntax/ext/tt
diff options
context:
space:
mode:
authorPaul Stansifer <paul.stansifer@gmail.com>2012-07-24 11:44:32 -0700
committerPaul Stansifer <paul.stansifer@gmail.com>2012-07-24 11:44:58 -0700
commit9103e439091fbd4e5ec7e561f007172342065340 (patch)
tree2693c1a5852eb1baebbb4acccb9f55956a0a97c3 /src/libsyntax/ext/tt
parente20c5e759687ce26a4579c00ee5edabfea9e8fd9 (diff)
downloadrust-9103e439091fbd4e5ec7e561f007172342065340.tar.gz
rust-9103e439091fbd4e5ec7e561f007172342065340.zip
Bugfix: enable transcription to deal with zero-repetition cases.
Diffstat (limited to 'src/libsyntax/ext/tt')
-rw-r--r--src/libsyntax/ext/tt/transcribe.rs17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/libsyntax/ext/tt/transcribe.rs b/src/libsyntax/ext/tt/transcribe.rs
index b9d4adc2339..1a7ccda3da4 100644
--- a/src/libsyntax/ext/tt/transcribe.rs
+++ b/src/libsyntax/ext/tt/transcribe.rs
@@ -86,8 +86,6 @@ pure fn lookup_cur_ad_by_ad(r: tt_reader, start: @arb_depth) -> @arb_depth {
           seq(ads, _) { ads[idx] }
         }
     }
-    unchecked {io::println(#fmt["%? / %?", copy r.repeat_idx,
-                                copy r.repeat_len]);};
     vec::foldl(start, r.repeat_idx, red)
 }
 
@@ -135,7 +133,7 @@ fn lockstep_iter_size(&&t: token_tree, &&r: tt_reader) -> lis {
 
 fn tt_next_token(&&r: tt_reader) -> {tok: token, sp: span} {
     let ret_val = { tok: r.cur_tok, sp: r.cur_span };
-    while r.cur.idx >= vec::len(r.cur.readme) {
+    while r.cur.idx >= r.cur.readme.len() {
         /* done with this set; pop or repeat? */
         if ! r.cur.dotdotdoted
             || r.repeat_idx.last() == r.repeat_len.last() - 1 {
@@ -193,11 +191,6 @@ fn tt_next_token(&&r: tt_reader) -> {tok: token, sp: span} {
                 r.sp_diag.span_fatal(sp, msg);
               }
               lis_constraint(len, _) {
-                vec::push(r.repeat_len, len);
-                vec::push(r.repeat_idx, 0u);
-                r.cur = @{readme: tts, mut idx: 0u, dotdotdoted: true,
-                          sep: sep, up: tt_frame_up(option::some(r.cur)) };
-
                 if len == 0 {
                     if !zerok {
                         r.sp_diag.span_fatal(sp, /* FIXME #2887 blame invoker
@@ -205,8 +198,14 @@ fn tt_next_token(&&r: tt_reader) -> {tok: token, sp: span} {
                                              ~"this must repeat at least \
                                               once");
                     }
-                    /* we need to pop before we proceed, so recur */
+
+                    r.cur.idx += 1u;
                     ret tt_next_token(r);
+                } else {
+                    vec::push(r.repeat_len, len);
+                    vec::push(r.repeat_idx, 0u);
+                    r.cur = @{readme: tts, mut idx: 0u, dotdotdoted: true,
+                              sep: sep, up: tt_frame_up(option::some(r.cur))};
                 }
               }
             }