Skip to content

Commit

Permalink
Refactor out parser.expect_delimited_token_tree().
Browse files Browse the repository at this point in the history
  • Loading branch information
jseyfried committed Feb 28, 2017
1 parent 7524130 commit 7f822c8
Showing 1 changed file with 13 additions and 36 deletions.
49 changes: 13 additions & 36 deletions src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1170,10 +1170,7 @@ impl<'a> Parser<'a> {
self.expect(&token::Not)?;

// eat a matched-delimiter token tree:
let delim = self.expect_open_delim()?;
let tts = self.parse_seq_to_end(&token::CloseDelim(delim),
SeqSep::none(),
|pp| pp.parse_token_tree())?;
let (delim, tts) = self.expect_delimited_token_tree()?;
if delim != token::Brace {
self.expect(&token::Semi)?
}
Expand Down Expand Up @@ -1431,10 +1428,7 @@ impl<'a> Parser<'a> {
let path = self.parse_path(PathStyle::Type)?;
if self.eat(&token::Not) {
// MACRO INVOCATION
let delim = self.expect_open_delim()?;
let tts = self.parse_seq_to_end(&token::CloseDelim(delim),
SeqSep::none(),
|p| p.parse_token_tree())?;
let (_, tts) = self.expect_delimited_token_tree()?;
let hi = self.span.hi;
TyKind::Mac(spanned(lo, hi, Mac_ { path: path, tts: tts }))
} else {
Expand Down Expand Up @@ -2028,13 +2022,12 @@ impl<'a> Parser<'a> {
})
}

fn expect_open_delim(&mut self) -> PResult<'a, token::DelimToken> {
self.expected_tokens.push(TokenType::Token(token::Gt));
fn expect_delimited_token_tree(&mut self) -> PResult<'a, (token::DelimToken, Vec<TokenTree>)> {
match self.token {
token::OpenDelim(delim) => {
self.bump();
Ok(delim)
},
token::OpenDelim(delim) => self.parse_token_tree().map(|tree| match tree {
TokenTree::Delimited(_, delimited) => (delim, delimited.tts.clone()),
_ => unreachable!(),
}),
_ => Err(self.fatal("expected open delimiter")),
}
}
Expand Down Expand Up @@ -2244,10 +2237,7 @@ impl<'a> Parser<'a> {
// `!`, as an operator, is prefix, so we know this isn't that
if self.eat(&token::Not) {
// MACRO INVOCATION expression
let delim = self.expect_open_delim()?;
let tts = self.parse_seq_to_end(&token::CloseDelim(delim),
SeqSep::none(),
|p| p.parse_token_tree())?;
let (_, tts) = self.expect_delimited_token_tree()?;
let hi = self.prev_span.hi;
return Ok(self.mk_mac_expr(lo, hi, Mac_ { path: pth, tts: tts }, attrs));
}
Expand Down Expand Up @@ -2580,6 +2570,7 @@ impl<'a> Parser<'a> {
match self.token {
token::OpenDelim(..) => {
let tt = self.tts.pop().unwrap().0;
self.span = tt.span();
self.bump();
return Ok(tt);
},
Expand Down Expand Up @@ -3393,10 +3384,7 @@ impl<'a> Parser<'a> {
token::Not if qself.is_none() => {
// Parse macro invocation
self.bump();
let delim = self.expect_open_delim()?;
let tts = self.parse_seq_to_end(&token::CloseDelim(delim),
SeqSep::none(),
|p| p.parse_token_tree())?;
let (_, tts) = self.expect_delimited_token_tree()?;
let mac = spanned(lo, self.prev_span.hi, Mac_ { path: path, tts: tts });
pat = PatKind::Mac(mac);
}
Expand Down Expand Up @@ -3696,12 +3684,7 @@ impl<'a> Parser<'a> {
},
};

let tts = self.parse_unspanned_seq(
&token::OpenDelim(delim),
&token::CloseDelim(delim),
SeqSep::none(),
|p| p.parse_token_tree()
)?;
let (_, tts) = self.expect_delimited_token_tree()?;
let hi = self.prev_span.hi;

let style = if delim == token::Brace {
Expand Down Expand Up @@ -4609,10 +4592,7 @@ impl<'a> Parser<'a> {
self.expect(&token::Not)?;

// eat a matched-delimiter token tree:
let delim = self.expect_open_delim()?;
let tts = self.parse_seq_to_end(&token::CloseDelim(delim),
SeqSep::none(),
|p| p.parse_token_tree())?;
let (delim, tts) = self.expect_delimited_token_tree()?;
if delim != token::Brace {
self.expect(&token::Semi)?
}
Expand Down Expand Up @@ -5758,10 +5738,7 @@ impl<'a> Parser<'a> {
keywords::Invalid.ident() // no special identifier
};
// eat a matched-delimiter token tree:
let delim = self.expect_open_delim()?;
let tts = self.parse_seq_to_end(&token::CloseDelim(delim),
SeqSep::none(),
|p| p.parse_token_tree())?;
let (delim, tts) = self.expect_delimited_token_tree()?;
if delim != token::Brace {
if !self.eat(&token::Semi) {
let prev_span = self.prev_span;
Expand Down

0 comments on commit 7f822c8

Please sign in to comment.