@@ -278,17 +278,16 @@ pub fn token_name_eq(t1 : &Token, t2 : &Token) -> bool {
278
278
}
279
279
}
280
280
281
- pub fn parse ( sess : & ParseSess , mut rdr : TtReader , ms : & [ TokenTree ] ) -> NamedParseResult {
282
- let mut cur_eis = SmallVector :: one ( initial_matcher_pos ( ms. to_owned ( ) ,
283
- None ,
284
- rdr. peek ( ) . sp . lo ) ) ;
281
+ pub fn parse ( sess : & ParseSess , rdr : TtReader , ms : & [ TokenTree ] ) -> NamedParseResult {
282
+ let mut parser = Parser :: new ( sess, Box :: new ( rdr) ) ;
283
+ let mut cur_eis = SmallVector :: one ( initial_matcher_pos ( ms. to_owned ( ) , None , parser. span . lo ) ) ;
285
284
286
285
loop {
287
286
let mut bb_eis = Vec :: new ( ) ; // black-box parsed by parser.rs
288
287
let mut next_eis = Vec :: new ( ) ; // or proceed normally
289
288
let mut eof_eis = Vec :: new ( ) ;
290
289
291
- let TokenAndSpan { tok, sp } = rdr . peek ( ) ;
290
+ let ( sp , tok) = ( parser . span , parser . token . clone ( ) ) ;
292
291
293
292
/* we append new items to this while we go */
294
293
loop {
@@ -473,23 +472,19 @@ pub fn parse(sess: &ParseSess, mut rdr: TtReader, ms: &[TokenTree]) -> NamedPars
473
472
while !next_eis. is_empty ( ) {
474
473
cur_eis. push ( next_eis. pop ( ) . unwrap ( ) ) ;
475
474
}
476
- rdr . next_token ( ) ;
475
+ parser . bump ( ) ;
477
476
} else /* bb_eis.len() == 1 */ {
478
- rdr. next_tok = {
479
- let mut rust_parser = Parser :: new ( sess, Box :: new ( & mut rdr) ) ;
480
- let mut ei = bb_eis. pop ( ) . unwrap ( ) ;
481
- if let TokenTree :: Token ( span, MatchNt ( _, ident) ) = ei. top_elts . get_tt ( ei. idx ) {
482
- let match_cur = ei. match_cur ;
483
- ( & mut ei. matches [ match_cur] ) . push ( Rc :: new ( MatchedNonterminal (
484
- Rc :: new ( parse_nt ( & mut rust_parser, span, & ident. name . as_str ( ) ) ) ) ) ) ;
485
- ei. idx += 1 ;
486
- ei. match_cur += 1 ;
487
- } else {
488
- unreachable ! ( )
489
- }
490
- cur_eis. push ( ei) ;
491
- Some ( TokenAndSpan { tok : rust_parser. token , sp : rust_parser. span } )
492
- } ;
477
+ let mut ei = bb_eis. pop ( ) . unwrap ( ) ;
478
+ if let TokenTree :: Token ( span, MatchNt ( _, ident) ) = ei. top_elts . get_tt ( ei. idx ) {
479
+ let match_cur = ei. match_cur ;
480
+ ( & mut ei. matches [ match_cur] ) . push ( Rc :: new ( MatchedNonterminal (
481
+ Rc :: new ( parse_nt ( & mut parser, span, & ident. name . as_str ( ) ) ) ) ) ) ;
482
+ ei. idx += 1 ;
483
+ ei. match_cur += 1 ;
484
+ } else {
485
+ unreachable ! ( )
486
+ }
487
+ cur_eis. push ( ei) ;
493
488
}
494
489
}
495
490
0 commit comments