@@ -2013,6 +2013,16 @@ impl<'a> Parser<'a> {
20132013 } )
20142014 }
20152015
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+
20162026 /// At the bottom (top?) of the precedence hierarchy,
20172027 /// parse things like parenthesized exprs,
20182028 /// macros, return, etc.
@@ -2209,14 +2219,9 @@ impl<'a> Parser<'a> {
22092219 // MACRO INVOCATION expression
22102220 self . bump ( ) ;
22112221
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 ( ) ;
22182223 let tts = self . parse_seq_to_end (
2219- & ket ,
2224+ & token :: CloseDelim ( delim ) ,
22202225 seq_sep_none ( ) ,
22212226 |p| p. parse_token_tree ( ) ) ;
22222227 let hi = self . span . hi ;
@@ -2624,13 +2629,8 @@ impl<'a> Parser<'a> {
26242629 // the interpolation of Matcher's
26252630 maybe_whole ! ( self , NtMatchers ) ;
26262631 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) )
26342634 }
26352635
26362636 /// This goofy function is necessary to correctly match parens in Matcher's.
@@ -3325,11 +3325,8 @@ impl<'a> Parser<'a> {
33253325 let pth1 = codemap:: Spanned { span : id_span, node : id} ;
33263326 if self . eat ( & token:: Not ) {
33273327 // 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) ,
33333330 seq_sep_none ( ) ,
33343331 |p| p. parse_token_tree ( ) ) ;
33353332
@@ -3545,18 +3542,17 @@ impl<'a> Parser<'a> {
35453542 let pth = self . parse_path ( NoTypesAllowed ) . path ;
35463543 self . bump ( ) ;
35473544
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 ( ) ,
35523548 } ;
35533549
35543550 // check that we're pointing at delimiters (need to check
35553551 // again after the `if`, because of `parse_ident`
35563552 // 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+ _ => {
35603556 // we only expect an ident if we didn't parse one
35613557 // above.
35623558 let ident_str = if id. name == token:: special_idents:: invalid. name {
@@ -3568,12 +3564,12 @@ impl<'a> Parser<'a> {
35683564 self . fatal ( format ! ( "expected {}`(` or `{{`, found `{}`" ,
35693565 ident_str,
35703566 tok_str) . as_slice ( ) )
3571- }
3567+ } ,
35723568 } ;
35733569
35743570 let tts = self . parse_unspanned_seq (
3575- & bra ,
3576- & ket ,
3571+ & token :: OpenDelim ( delim ) ,
3572+ & token :: CloseDelim ( delim ) ,
35773573 seq_sep_none ( ) ,
35783574 |p| p. parse_token_tree ( )
35793575 ) ;
@@ -4414,15 +4410,10 @@ impl<'a> Parser<'a> {
44144410 self . expect ( & token:: Not ) ;
44154411
44164412 // 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 ( ) ) ;
44264417 let m_ = ast:: MacInvocTT ( pth, tts, EMPTY_CTXT ) ;
44274418 let m: ast:: Mac = codemap:: Spanned { node : m_,
44284419 span : mk_sp ( self . span . lo ,
@@ -5505,15 +5496,10 @@ impl<'a> Parser<'a> {
55055496 token:: special_idents:: invalid // no special identifier
55065497 } ;
55075498 // 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 ( ) ) ;
55175503 // single-variant-enum... :
55185504 let m = ast:: MacInvocTT ( pth, tts, EMPTY_CTXT ) ;
55195505 let m: ast:: Mac = codemap:: Spanned { node : m,
0 commit comments