@@ -198,6 +198,17 @@ impure fn parse_arg(parser p) -> ast.arg {
198
198
ret rec( mode=m, ty=t, ident=i, id=p. next_def_id ( ) ) ;
199
199
}
200
200
201
+ // FIXME: workaround for a bug in the typestate walk of
202
+ // the while-graph; the while-loop header doesn't drop
203
+ // its slots, so "while (p.peek() ...) { ... }" leaks.
204
+
205
+ fn peeking_at ( parser p, token . token t) -> bool {
206
+ if ( p. peek ( ) == t) {
207
+ ret true ;
208
+ }
209
+ ret false;
210
+ }
211
+
201
212
impure fn parse_seq[ T ] ( token. token bra,
202
213
token. token ket,
203
214
option. t [ token. token ] sep,
@@ -207,7 +218,7 @@ impure fn parse_seq[T](token.token bra,
207
218
auto lo = p. get_span ( ) ;
208
219
expect ( p, bra) ;
209
220
let vec[ T ] v = vec ( ) ;
210
- while ( p . peek ( ) != ket) {
221
+ while ( ! peeking_at ( p , ket) ) {
211
222
alt ( sep) {
212
223
case ( some[ token. token ] ( ?t) ) {
213
224
if ( first) {
@@ -925,7 +936,7 @@ impure fn parse_mod_items(parser p, token.token term) -> ast._mod {
925
936
let vec[ @ast. item] items = vec ( ) ;
926
937
let hashmap[ ast. ident , uint] index = new_str_hash[ uint] ( ) ;
927
938
let uint u = 0 u;
928
- while ( p . peek ( ) != term) {
939
+ while ( ! peeking_at ( p , term) ) {
929
940
auto pair = parse_item ( p) ;
930
941
append[ @ast. item ] ( items, pair. _1 ) ;
931
942
index. insert ( pair. _0 , u) ;
0 commit comments