Skip to content

Commit 7f822c8

Browse files
committed
Refactor out parser.expect_delimited_token_tree().
1 parent 7524130 commit 7f822c8

File tree

1 file changed

+13
-36
lines changed

1 file changed

+13
-36
lines changed

src/libsyntax/parse/parser.rs

Lines changed: 13 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)