@@ -1170,10 +1170,7 @@ impl<'a> Parser<'a> {
11701170 self . expect ( & token:: Not ) ?;
11711171
11721172 // 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 ( ) ?;
11771174 if delim != token:: Brace {
11781175 self . expect ( & token:: Semi ) ?
11791176 }
@@ -1431,10 +1428,7 @@ impl<'a> Parser<'a> {
14311428 let path = self . parse_path ( PathStyle :: Type ) ?;
14321429 if self . eat ( & token:: Not ) {
14331430 // 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 ( ) ?;
14381432 let hi = self . span . hi ;
14391433 TyKind :: Mac ( spanned ( lo, hi, Mac_ { path : path, tts : tts } ) )
14401434 } else {
@@ -2028,13 +2022,12 @@ impl<'a> Parser<'a> {
20282022 } )
20292023 }
20302024
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 > ) > {
20332026 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+ } ) ,
20382031 _ => Err ( self . fatal ( "expected open delimiter" ) ) ,
20392032 }
20402033 }
@@ -2244,10 +2237,7 @@ impl<'a> Parser<'a> {
22442237 // `!`, as an operator, is prefix, so we know this isn't that
22452238 if self . eat ( & token:: Not ) {
22462239 // 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 ( ) ?;
22512241 let hi = self . prev_span . hi ;
22522242 return Ok ( self . mk_mac_expr ( lo, hi, Mac_ { path : pth, tts : tts } , attrs) ) ;
22532243 }
@@ -2580,6 +2570,7 @@ impl<'a> Parser<'a> {
25802570 match self . token {
25812571 token:: OpenDelim ( ..) => {
25822572 let tt = self . tts . pop ( ) . unwrap ( ) . 0 ;
2573+ self . span = tt. span ( ) ;
25832574 self . bump ( ) ;
25842575 return Ok ( tt) ;
25852576 } ,
@@ -3393,10 +3384,7 @@ impl<'a> Parser<'a> {
33933384 token:: Not if qself. is_none ( ) => {
33943385 // Parse macro invocation
33953386 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 ( ) ?;
34003388 let mac = spanned ( lo, self . prev_span . hi , Mac_ { path : path, tts : tts } ) ;
34013389 pat = PatKind :: Mac ( mac) ;
34023390 }
@@ -3696,12 +3684,7 @@ impl<'a> Parser<'a> {
36963684 } ,
36973685 } ;
36983686
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 ( ) ?;
37053688 let hi = self . prev_span . hi ;
37063689
37073690 let style = if delim == token:: Brace {
@@ -4609,10 +4592,7 @@ impl<'a> Parser<'a> {
46094592 self . expect ( & token:: Not ) ?;
46104593
46114594 // 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 ( ) ?;
46164596 if delim != token:: Brace {
46174597 self . expect ( & token:: Semi ) ?
46184598 }
@@ -5758,10 +5738,7 @@ impl<'a> Parser<'a> {
57585738 keywords:: Invalid . ident ( ) // no special identifier
57595739 } ;
57605740 // 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 ( ) ?;
57655742 if delim != token:: Brace {
57665743 if !self . eat ( & token:: Semi ) {
57675744 let prev_span = self . prev_span ;
0 commit comments