@@ -1881,12 +1881,9 @@ impl<'a> Parser<'a> {
1881
1881
if self . token == token:: NOT {
1882
1882
// MACRO INVOCATION expression
1883
1883
self . bump ( ) ;
1884
- match self . token {
1885
- token:: LPAREN | token:: LBRACE => { }
1886
- _ => self . fatal ( "expected open delimiter" )
1887
- } ;
1888
1884
1889
- let ket = token:: flip_delimiter ( & self . token ) ;
1885
+ let ket = token:: close_delimiter_for ( & self . token )
1886
+ . unwrap_or_else ( || self . fatal ( "expected open delimiter" ) ) ;
1890
1887
self . bump ( ) ;
1891
1888
1892
1889
let tts = self . parse_seq_to_end ( & ket,
@@ -2109,8 +2106,8 @@ impl<'a> Parser<'a> {
2109
2106
TTTok ( p. span , p. bump_and_get ( ) )
2110
2107
}
2111
2108
2112
- match self . token {
2113
- token:: EOF => {
2109
+ match ( & self . token , token :: close_delimiter_for ( & self . token ) ) {
2110
+ ( & token:: EOF , _ ) => {
2114
2111
let open_braces = self . open_braces . clone ( ) ;
2115
2112
for sp in open_braces. iter ( ) {
2116
2113
self . span_note ( * sp, "Did you mean to close this delimiter?" ) ;
@@ -2119,9 +2116,7 @@ impl<'a> Parser<'a> {
2119
2116
// if we give it one
2120
2117
self . fatal ( "this file contains an un-closed delimiter " ) ;
2121
2118
}
2122
- token:: LPAREN | token:: LBRACE | token:: LBRACKET => {
2123
- let close_delim = token:: flip_delimiter ( & self . token ) ;
2124
-
2119
+ ( _, Some ( close_delim) ) => {
2125
2120
// Parse the open delimiter.
2126
2121
self . open_braces . push ( self . span ) ;
2127
2122
let mut result = vec ! ( parse_any_tt_tok( self ) ) ;
@@ -2157,13 +2152,12 @@ impl<'a> Parser<'a> {
2157
2152
// the interpolation of Matcher's
2158
2153
maybe_whole ! ( self , NtMatchers ) ;
2159
2154
let mut name_idx = 0 u;
2160
- match self . token {
2161
- token:: LBRACE | token:: LPAREN | token:: LBRACKET => {
2162
- let other_delimiter = token:: flip_delimiter ( & self . token ) ;
2155
+ match token:: close_delimiter_for ( & self . token ) {
2156
+ Some ( other_delimiter) => {
2163
2157
self . bump ( ) ;
2164
2158
self . parse_matcher_subseq_upto ( & mut name_idx, & other_delimiter)
2165
2159
}
2166
- _ => self . fatal ( "expected open delimiter" )
2160
+ None => self . fatal ( "expected open delimiter" )
2167
2161
}
2168
2162
}
2169
2163
@@ -3138,7 +3132,7 @@ impl<'a> Parser<'a> {
3138
3132
let pth = self . parse_path ( NoTypesAllowed ) . path ;
3139
3133
self . bump ( ) ;
3140
3134
3141
- let id = if self . token == token :: LPAREN || self . token == token :: LBRACE {
3135
+ let id = if token:: close_delimiter_for ( & self . token ) . is_some ( ) {
3142
3136
token:: special_idents:: invalid // no special identifier
3143
3137
} else {
3144
3138
self . parse_ident ( )
@@ -3147,10 +3141,9 @@ impl<'a> Parser<'a> {
3147
3141
// check that we're pointing at delimiters (need to check
3148
3142
// again after the `if`, because of `parse_ident`
3149
3143
// consuming more tokens).
3150
- let ( bra, ket) = match self . token {
3151
- token:: LPAREN => ( token:: LPAREN , token:: RPAREN ) ,
3152
- token:: LBRACE => ( token:: LBRACE , token:: RBRACE ) ,
3153
- _ => {
3144
+ let ( bra, ket) = match token:: close_delimiter_for ( & self . token ) {
3145
+ Some ( ket) => ( self . token . clone ( ) , ket) ,
3146
+ None => {
3154
3147
// we only expect an ident if we didn't parse one
3155
3148
// above.
3156
3149
let ident_str = if id == token:: special_idents:: invalid {
@@ -4724,15 +4717,14 @@ impl<'a> Parser<'a> {
4724
4717
token:: special_idents:: invalid // no special identifier
4725
4718
} ;
4726
4719
// eat a matched-delimiter token tree:
4727
- let tts = match self . token {
4728
- token:: LPAREN | token:: LBRACE => {
4729
- let ket = token:: flip_delimiter( & self . token) ;
4720
+ let tts = match token:: close_delimiter_for( & self . token) {
4721
+ Some ( ket) => {
4730
4722
self . bump( ) ;
4731
4723
self . parse_seq_to_end( & ket,
4732
4724
seq_sep_none( ) ,
4733
4725
|p| p. parse_token_tree( ) )
4734
4726
}
4735
- _ => self . fatal( "expected open delimiter" )
4727
+ None => self . fatal( "expected open delimiter" )
4736
4728
} ;
4737
4729
// single-variant-enum... :
4738
4730
let m = ast:: MacInvocTT ( pth, tts, EMPTY_CTXT ) ;
0 commit comments