@@ -1170,10 +1170,7 @@ impl<'a> Parser<'a> {
1170
1170
self . expect ( & token:: Not ) ?;
1171
1171
1172
1172
// eat a matched-delimiter token tree:
1173
- let delim = self . expect_open_delim ( ) ?;
1174
- let tts = self . parse_seq_to_end ( & token:: CloseDelim ( delim) ,
1175
- SeqSep :: none ( ) ,
1176
- |pp| pp. parse_token_tree ( ) ) ?;
1173
+ let ( delim, tts) = self . expect_delimited_token_tree ( ) ?;
1177
1174
if delim != token:: Brace {
1178
1175
self . expect ( & token:: Semi ) ?
1179
1176
}
@@ -1431,10 +1428,7 @@ impl<'a> Parser<'a> {
1431
1428
let path = self . parse_path ( PathStyle :: Type ) ?;
1432
1429
if self . eat ( & token:: Not ) {
1433
1430
// MACRO INVOCATION
1434
- let delim = self . expect_open_delim ( ) ?;
1435
- let tts = self . parse_seq_to_end ( & token:: CloseDelim ( delim) ,
1436
- SeqSep :: none ( ) ,
1437
- |p| p. parse_token_tree ( ) ) ?;
1431
+ let ( _, tts) = self . expect_delimited_token_tree ( ) ?;
1438
1432
let hi = self . span . hi ;
1439
1433
TyKind :: Mac ( spanned ( lo, hi, Mac_ { path : path, tts : tts } ) )
1440
1434
} else {
@@ -2028,13 +2022,12 @@ impl<'a> Parser<'a> {
2028
2022
} )
2029
2023
}
2030
2024
2031
- fn expect_open_delim ( & mut self ) -> PResult < ' a , token:: DelimToken > {
2032
- self . expected_tokens . push ( TokenType :: Token ( token:: Gt ) ) ;
2025
+ fn expect_delimited_token_tree ( & mut self ) -> PResult < ' a , ( token:: DelimToken , Vec < TokenTree > ) > {
2033
2026
match self . token {
2034
- token:: OpenDelim ( delim) => {
2035
- self . bump ( ) ;
2036
- Ok ( delim )
2037
- } ,
2027
+ token:: OpenDelim ( delim) => self . parse_token_tree ( ) . map ( |tree| match tree {
2028
+ TokenTree :: Delimited ( _ , delimited ) => ( delim , delimited . tts . clone ( ) ) ,
2029
+ _ => unreachable ! ( ) ,
2030
+ } ) ,
2038
2031
_ => Err ( self . fatal ( "expected open delimiter" ) ) ,
2039
2032
}
2040
2033
}
@@ -2244,10 +2237,7 @@ impl<'a> Parser<'a> {
2244
2237
// `!`, as an operator, is prefix, so we know this isn't that
2245
2238
if self . eat ( & token:: Not ) {
2246
2239
// MACRO INVOCATION expression
2247
- let delim = self . expect_open_delim ( ) ?;
2248
- let tts = self . parse_seq_to_end ( & token:: CloseDelim ( delim) ,
2249
- SeqSep :: none ( ) ,
2250
- |p| p. parse_token_tree ( ) ) ?;
2240
+ let ( _, tts) = self . expect_delimited_token_tree ( ) ?;
2251
2241
let hi = self . prev_span . hi ;
2252
2242
return Ok ( self . mk_mac_expr ( lo, hi, Mac_ { path : pth, tts : tts } , attrs) ) ;
2253
2243
}
@@ -2580,6 +2570,7 @@ impl<'a> Parser<'a> {
2580
2570
match self . token {
2581
2571
token:: OpenDelim ( ..) => {
2582
2572
let tt = self . tts . pop ( ) . unwrap ( ) . 0 ;
2573
+ self . span = tt. span ( ) ;
2583
2574
self . bump ( ) ;
2584
2575
return Ok ( tt) ;
2585
2576
} ,
@@ -3393,10 +3384,7 @@ impl<'a> Parser<'a> {
3393
3384
token:: Not if qself. is_none ( ) => {
3394
3385
// Parse macro invocation
3395
3386
self . bump ( ) ;
3396
- let delim = self . expect_open_delim ( ) ?;
3397
- let tts = self . parse_seq_to_end ( & token:: CloseDelim ( delim) ,
3398
- SeqSep :: none ( ) ,
3399
- |p| p. parse_token_tree ( ) ) ?;
3387
+ let ( _, tts) = self . expect_delimited_token_tree ( ) ?;
3400
3388
let mac = spanned ( lo, self . prev_span . hi , Mac_ { path : path, tts : tts } ) ;
3401
3389
pat = PatKind :: Mac ( mac) ;
3402
3390
}
@@ -3696,12 +3684,7 @@ impl<'a> Parser<'a> {
3696
3684
} ,
3697
3685
} ;
3698
3686
3699
- let tts = self . parse_unspanned_seq (
3700
- & token:: OpenDelim ( delim) ,
3701
- & token:: CloseDelim ( delim) ,
3702
- SeqSep :: none ( ) ,
3703
- |p| p. parse_token_tree ( )
3704
- ) ?;
3687
+ let ( _, tts) = self . expect_delimited_token_tree ( ) ?;
3705
3688
let hi = self . prev_span . hi ;
3706
3689
3707
3690
let style = if delim == token:: Brace {
@@ -4609,10 +4592,7 @@ impl<'a> Parser<'a> {
4609
4592
self . expect ( & token:: Not ) ?;
4610
4593
4611
4594
// eat a matched-delimiter token tree:
4612
- let delim = self . expect_open_delim ( ) ?;
4613
- let tts = self . parse_seq_to_end ( & token:: CloseDelim ( delim) ,
4614
- SeqSep :: none ( ) ,
4615
- |p| p. parse_token_tree ( ) ) ?;
4595
+ let ( delim, tts) = self . expect_delimited_token_tree ( ) ?;
4616
4596
if delim != token:: Brace {
4617
4597
self . expect ( & token:: Semi ) ?
4618
4598
}
@@ -5758,10 +5738,7 @@ impl<'a> Parser<'a> {
5758
5738
keywords:: Invalid . ident ( ) // no special identifier
5759
5739
} ;
5760
5740
// eat a matched-delimiter token tree:
5761
- let delim = self . expect_open_delim ( ) ?;
5762
- let tts = self . parse_seq_to_end ( & token:: CloseDelim ( delim) ,
5763
- SeqSep :: none ( ) ,
5764
- |p| p. parse_token_tree ( ) ) ?;
5741
+ let ( delim, tts) = self . expect_delimited_token_tree ( ) ?;
5765
5742
if delim != token:: Brace {
5766
5743
if !self . eat ( & token:: Semi ) {
5767
5744
let prev_span = self . prev_span ;
0 commit comments