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.
This commit is contained in:
parent
936d999b52
commit
1ab50f3600
2 changed files with 33 additions and 58 deletions
|
@ -2013,6 +2013,16 @@ impl<'a> Parser<'a> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn expect_open_delim(&mut self) -> token::DelimToken {
|
||||||
|
match self.token {
|
||||||
|
token::OpenDelim(delim) => {
|
||||||
|
self.bump();
|
||||||
|
delim
|
||||||
|
},
|
||||||
|
_ => self.fatal("expected open delimiter"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// At the bottom (top?) of the precedence hierarchy,
|
/// At the bottom (top?) of the precedence hierarchy,
|
||||||
/// parse things like parenthesized exprs,
|
/// parse things like parenthesized exprs,
|
||||||
/// macros, return, etc.
|
/// macros, return, etc.
|
||||||
|
@ -2209,14 +2219,9 @@ impl<'a> Parser<'a> {
|
||||||
// MACRO INVOCATION expression
|
// MACRO INVOCATION expression
|
||||||
self.bump();
|
self.bump();
|
||||||
|
|
||||||
let ket = self.token.get_close_delimiter()
|
let delim = self.expect_open_delim();
|
||||||
.unwrap_or_else(|| {
|
|
||||||
self.fatal("expected open delimiter")
|
|
||||||
});
|
|
||||||
self.bump();
|
|
||||||
|
|
||||||
let tts = self.parse_seq_to_end(
|
let tts = self.parse_seq_to_end(
|
||||||
&ket,
|
&token::CloseDelim(delim),
|
||||||
seq_sep_none(),
|
seq_sep_none(),
|
||||||
|p| p.parse_token_tree());
|
|p| p.parse_token_tree());
|
||||||
let hi = self.span.hi;
|
let hi = self.span.hi;
|
||||||
|
@ -2624,13 +2629,8 @@ impl<'a> Parser<'a> {
|
||||||
// the interpolation of Matcher's
|
// the interpolation of Matcher's
|
||||||
maybe_whole!(self, NtMatchers);
|
maybe_whole!(self, NtMatchers);
|
||||||
let mut name_idx = 0u;
|
let mut name_idx = 0u;
|
||||||
match self.token.get_close_delimiter() {
|
let delim = self.expect_open_delim();
|
||||||
Some(other_delimiter) => {
|
self.parse_matcher_subseq_upto(&mut name_idx, &token::CloseDelim(delim))
|
||||||
self.bump();
|
|
||||||
self.parse_matcher_subseq_upto(&mut name_idx, &other_delimiter)
|
|
||||||
}
|
|
||||||
None => self.fatal("expected open delimiter")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This goofy function is necessary to correctly match parens in Matcher's.
|
/// This goofy function is necessary to correctly match parens in Matcher's.
|
||||||
|
@ -3325,11 +3325,8 @@ impl<'a> Parser<'a> {
|
||||||
let pth1 = codemap::Spanned{span:id_span, node: id};
|
let pth1 = codemap::Spanned{span:id_span, node: id};
|
||||||
if self.eat(&token::Not) {
|
if self.eat(&token::Not) {
|
||||||
// macro invocation
|
// macro invocation
|
||||||
let ket = self.token.get_close_delimiter()
|
let delim = self.expect_open_delim();
|
||||||
.unwrap_or_else(|| self.fatal("expected open delimiter"));
|
let tts = self.parse_seq_to_end(&token::CloseDelim(delim),
|
||||||
self.bump();
|
|
||||||
|
|
||||||
let tts = self.parse_seq_to_end(&ket,
|
|
||||||
seq_sep_none(),
|
seq_sep_none(),
|
||||||
|p| p.parse_token_tree());
|
|p| p.parse_token_tree());
|
||||||
|
|
||||||
|
@ -3545,18 +3542,17 @@ impl<'a> Parser<'a> {
|
||||||
let pth = self.parse_path(NoTypesAllowed).path;
|
let pth = self.parse_path(NoTypesAllowed).path;
|
||||||
self.bump();
|
self.bump();
|
||||||
|
|
||||||
let id = if self.token.get_close_delimiter().is_some() {
|
let id = match self.token {
|
||||||
token::special_idents::invalid // no special identifier
|
token::OpenDelim(_) => token::special_idents::invalid, // no special identifier
|
||||||
} else {
|
_ => self.parse_ident(),
|
||||||
self.parse_ident()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// check that we're pointing at delimiters (need to check
|
// check that we're pointing at delimiters (need to check
|
||||||
// again after the `if`, because of `parse_ident`
|
// again after the `if`, because of `parse_ident`
|
||||||
// consuming more tokens).
|
// consuming more tokens).
|
||||||
let (bra, ket) = match self.token.get_close_delimiter() {
|
let delim = match self.token {
|
||||||
Some(ket) => (self.token.clone(), ket),
|
token::OpenDelim(delim) => delim,
|
||||||
None => {
|
_ => {
|
||||||
// we only expect an ident if we didn't parse one
|
// we only expect an ident if we didn't parse one
|
||||||
// above.
|
// above.
|
||||||
let ident_str = if id.name == token::special_idents::invalid.name {
|
let ident_str = if id.name == token::special_idents::invalid.name {
|
||||||
|
@ -3568,12 +3564,12 @@ impl<'a> Parser<'a> {
|
||||||
self.fatal(format!("expected {}`(` or `{{`, found `{}`",
|
self.fatal(format!("expected {}`(` or `{{`, found `{}`",
|
||||||
ident_str,
|
ident_str,
|
||||||
tok_str).as_slice())
|
tok_str).as_slice())
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
let tts = self.parse_unspanned_seq(
|
let tts = self.parse_unspanned_seq(
|
||||||
&bra,
|
&token::OpenDelim(delim),
|
||||||
&ket,
|
&token::CloseDelim(delim),
|
||||||
seq_sep_none(),
|
seq_sep_none(),
|
||||||
|p| p.parse_token_tree()
|
|p| p.parse_token_tree()
|
||||||
);
|
);
|
||||||
|
@ -4414,15 +4410,10 @@ impl<'a> Parser<'a> {
|
||||||
self.expect(&token::Not);
|
self.expect(&token::Not);
|
||||||
|
|
||||||
// eat a matched-delimiter token tree:
|
// eat a matched-delimiter token tree:
|
||||||
let tts = match self.token.get_close_delimiter() {
|
let delim = self.expect_open_delim();
|
||||||
Some(ket) => {
|
let tts = self.parse_seq_to_end(&token::CloseDelim(delim),
|
||||||
self.bump();
|
seq_sep_none(),
|
||||||
self.parse_seq_to_end(&ket,
|
|p| p.parse_token_tree());
|
||||||
seq_sep_none(),
|
|
||||||
|p| p.parse_token_tree())
|
|
||||||
}
|
|
||||||
None => self.fatal("expected open delimiter")
|
|
||||||
};
|
|
||||||
let m_ = ast::MacInvocTT(pth, tts, EMPTY_CTXT);
|
let m_ = ast::MacInvocTT(pth, tts, EMPTY_CTXT);
|
||||||
let m: ast::Mac = codemap::Spanned { node: m_,
|
let m: ast::Mac = codemap::Spanned { node: m_,
|
||||||
span: mk_sp(self.span.lo,
|
span: mk_sp(self.span.lo,
|
||||||
|
@ -5505,15 +5496,10 @@ impl<'a> Parser<'a> {
|
||||||
token::special_idents::invalid // no special identifier
|
token::special_idents::invalid // no special identifier
|
||||||
};
|
};
|
||||||
// eat a matched-delimiter token tree:
|
// eat a matched-delimiter token tree:
|
||||||
let tts = match self.token.get_close_delimiter() {
|
let delim = self.expect_open_delim();
|
||||||
Some(ket) => {
|
let tts = self.parse_seq_to_end(&token::CloseDelim(delim),
|
||||||
self.bump();
|
seq_sep_none(),
|
||||||
self.parse_seq_to_end(&ket,
|
|p| p.parse_token_tree());
|
||||||
seq_sep_none(),
|
|
||||||
|p| p.parse_token_tree())
|
|
||||||
}
|
|
||||||
None => self.fatal("expected open delimiter")
|
|
||||||
};
|
|
||||||
// single-variant-enum... :
|
// single-variant-enum... :
|
||||||
let m = ast::MacInvocTT(pth, tts, EMPTY_CTXT);
|
let m = ast::MacInvocTT(pth, tts, EMPTY_CTXT);
|
||||||
let m: ast::Mac = codemap::Spanned { node: m,
|
let m: ast::Mac = codemap::Spanned { node: m,
|
||||||
|
|
|
@ -230,17 +230,6 @@ impl Token {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the matching close delimiter if this is an open delimiter,
|
|
||||||
/// otherwise `None`.
|
|
||||||
pub fn get_close_delimiter(&self) -> Option<Token> {
|
|
||||||
match *self {
|
|
||||||
OpenDelim(Paren) => Some(CloseDelim(Paren)),
|
|
||||||
OpenDelim(Brace) => Some(CloseDelim(Brace)),
|
|
||||||
OpenDelim(Bracket) => Some(CloseDelim(Bracket)),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns `true` if the token is any literal
|
/// Returns `true` if the token is any literal
|
||||||
pub fn is_lit(&self) -> bool {
|
pub fn is_lit(&self) -> bool {
|
||||||
match *self {
|
match *self {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue