Skip to content

Commit 1ab50f3

Browse files
committed
Remove Token::get_close_delimiter
We can simplify these usages due to the new delimiter representation. `Parser::expect_open_delim` has been added for convenience.
1 parent 936d999 commit 1ab50f3

File tree

2 files changed

+33
-58
lines changed

2 files changed

+33
-58
lines changed

src/libsyntax/parse/parser.rs

Lines changed: 33 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -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 = 0u;
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,

src/libsyntax/parse/token.rs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -230,17 +230,6 @@ impl Token {
230230
}
231231
}
232232

233-
/// Returns the matching close delimiter if this is an open delimiter,
234-
/// otherwise `None`.
235-
pub fn get_close_delimiter(&self) -> Option<Token> {
236-
match *self {
237-
OpenDelim(Paren) => Some(CloseDelim(Paren)),
238-
OpenDelim(Brace) => Some(CloseDelim(Brace)),
239-
OpenDelim(Bracket) => Some(CloseDelim(Bracket)),
240-
_ => None,
241-
}
242-
}
243-
244233
/// Returns `true` if the token is any literal
245234
pub fn is_lit(&self) -> bool {
246235
match *self {

0 commit comments

Comments
 (0)