@@ -2013,6 +2013,16 @@ impl<'a> Parser<'a> {
2013
2013
} )
2014
2014
}
2015
2015
2016
+ fn expect_open_delim ( & mut self ) -> token:: DelimToken {
2017
+ match self . token {
2018
+ token:: OpenDelim ( delim) => {
2019
+ self . bump ( ) ;
2020
+ delim
2021
+ } ,
2022
+ _ => self . fatal ( "expected open delimiter" ) ,
2023
+ }
2024
+ }
2025
+
2016
2026
/// At the bottom (top?) of the precedence hierarchy,
2017
2027
/// parse things like parenthesized exprs,
2018
2028
/// macros, return, etc.
@@ -2209,14 +2219,9 @@ impl<'a> Parser<'a> {
2209
2219
// MACRO INVOCATION expression
2210
2220
self . bump ( ) ;
2211
2221
2212
- let ket = self . token . get_close_delimiter ( )
2213
- . unwrap_or_else ( || {
2214
- self . fatal ( "expected open delimiter" )
2215
- } ) ;
2216
- self . bump ( ) ;
2217
-
2222
+ let delim = self . expect_open_delim ( ) ;
2218
2223
let tts = self . parse_seq_to_end (
2219
- & ket ,
2224
+ & token :: CloseDelim ( delim ) ,
2220
2225
seq_sep_none ( ) ,
2221
2226
|p| p. parse_token_tree ( ) ) ;
2222
2227
let hi = self . span . hi ;
@@ -2624,13 +2629,8 @@ impl<'a> Parser<'a> {
2624
2629
// the interpolation of Matcher's
2625
2630
maybe_whole ! ( self , NtMatchers ) ;
2626
2631
let mut name_idx = 0 u;
2627
- match self . token . get_close_delimiter ( ) {
2628
- Some ( other_delimiter) => {
2629
- self . bump ( ) ;
2630
- self . parse_matcher_subseq_upto ( & mut name_idx, & other_delimiter)
2631
- }
2632
- None => self . fatal ( "expected open delimiter" )
2633
- }
2632
+ let delim = self . expect_open_delim ( ) ;
2633
+ self . parse_matcher_subseq_upto ( & mut name_idx, & token:: CloseDelim ( delim) )
2634
2634
}
2635
2635
2636
2636
/// This goofy function is necessary to correctly match parens in Matcher's.
@@ -3325,11 +3325,8 @@ impl<'a> Parser<'a> {
3325
3325
let pth1 = codemap:: Spanned { span : id_span, node : id} ;
3326
3326
if self . eat ( & token:: Not ) {
3327
3327
// macro invocation
3328
- let ket = self . token . get_close_delimiter ( )
3329
- . unwrap_or_else ( || self . fatal ( "expected open delimiter" ) ) ;
3330
- self . bump ( ) ;
3331
-
3332
- let tts = self . parse_seq_to_end ( & ket,
3328
+ let delim = self . expect_open_delim ( ) ;
3329
+ let tts = self . parse_seq_to_end ( & token:: CloseDelim ( delim) ,
3333
3330
seq_sep_none ( ) ,
3334
3331
|p| p. parse_token_tree ( ) ) ;
3335
3332
@@ -3545,18 +3542,17 @@ impl<'a> Parser<'a> {
3545
3542
let pth = self . parse_path ( NoTypesAllowed ) . path ;
3546
3543
self . bump ( ) ;
3547
3544
3548
- let id = if self . token . get_close_delimiter ( ) . is_some ( ) {
3549
- token:: special_idents:: invalid // no special identifier
3550
- } else {
3551
- self . parse_ident ( )
3545
+ let id = match self . token {
3546
+ token:: OpenDelim ( _) => token:: special_idents:: invalid, // no special identifier
3547
+ _ => self . parse_ident ( ) ,
3552
3548
} ;
3553
3549
3554
3550
// check that we're pointing at delimiters (need to check
3555
3551
// again after the `if`, because of `parse_ident`
3556
3552
// consuming more tokens).
3557
- let ( bra , ket ) = match self . token . get_close_delimiter ( ) {
3558
- Some ( ket ) => ( self . token . clone ( ) , ket ) ,
3559
- None => {
3553
+ let delim = match self . token {
3554
+ token :: OpenDelim ( delim ) => delim ,
3555
+ _ => {
3560
3556
// we only expect an ident if we didn't parse one
3561
3557
// above.
3562
3558
let ident_str = if id. name == token:: special_idents:: invalid. name {
@@ -3568,12 +3564,12 @@ impl<'a> Parser<'a> {
3568
3564
self . fatal ( format ! ( "expected {}`(` or `{{`, found `{}`" ,
3569
3565
ident_str,
3570
3566
tok_str) . as_slice ( ) )
3571
- }
3567
+ } ,
3572
3568
} ;
3573
3569
3574
3570
let tts = self . parse_unspanned_seq (
3575
- & bra ,
3576
- & ket ,
3571
+ & token :: OpenDelim ( delim ) ,
3572
+ & token :: CloseDelim ( delim ) ,
3577
3573
seq_sep_none ( ) ,
3578
3574
|p| p. parse_token_tree ( )
3579
3575
) ;
@@ -4414,15 +4410,10 @@ impl<'a> Parser<'a> {
4414
4410
self . expect ( & token:: Not ) ;
4415
4411
4416
4412
// eat a matched-delimiter token tree:
4417
- let tts = match self . token . get_close_delimiter ( ) {
4418
- Some ( ket) => {
4419
- self . bump ( ) ;
4420
- self . parse_seq_to_end ( & ket,
4421
- seq_sep_none ( ) ,
4422
- |p| p. parse_token_tree ( ) )
4423
- }
4424
- None => self . fatal ( "expected open delimiter" )
4425
- } ;
4413
+ let delim = self . expect_open_delim ( ) ;
4414
+ let tts = self . parse_seq_to_end ( & token:: CloseDelim ( delim) ,
4415
+ seq_sep_none ( ) ,
4416
+ |p| p. parse_token_tree ( ) ) ;
4426
4417
let m_ = ast:: MacInvocTT ( pth, tts, EMPTY_CTXT ) ;
4427
4418
let m: ast:: Mac = codemap:: Spanned { node : m_,
4428
4419
span : mk_sp ( self . span . lo ,
@@ -5505,15 +5496,10 @@ impl<'a> Parser<'a> {
5505
5496
token:: special_idents:: invalid // no special identifier
5506
5497
} ;
5507
5498
// eat a matched-delimiter token tree:
5508
- let tts = match self . token . get_close_delimiter ( ) {
5509
- Some ( ket) => {
5510
- self . bump ( ) ;
5511
- self . parse_seq_to_end ( & ket,
5512
- seq_sep_none ( ) ,
5513
- |p| p. parse_token_tree ( ) )
5514
- }
5515
- None => self . fatal ( "expected open delimiter" )
5516
- } ;
5499
+ let delim = self . expect_open_delim ( ) ;
5500
+ let tts = self . parse_seq_to_end ( & token:: CloseDelim ( delim) ,
5501
+ seq_sep_none ( ) ,
5502
+ |p| p. parse_token_tree ( ) ) ;
5517
5503
// single-variant-enum... :
5518
5504
let m = ast:: MacInvocTT ( pth, tts, EMPTY_CTXT ) ;
5519
5505
let m: ast:: Mac = codemap:: Spanned { node : m,
0 commit comments