Auto merge of #124141 - nnethercote:rm-Nonterminal-and-TokenKind-Interpolated, r=petrochenkov
Remove `Nonterminal` and `TokenKind::Interpolated` A third attempt at this; the first attempt was #96724 and the second was #114647. r? `@ghost`
This commit is contained in:
@@ -344,7 +344,7 @@ impl<'a> Parser<'a> {
|
||||
fn error_found_expr_would_be_stmt(&self, lhs: &Expr) {
|
||||
self.dcx().emit_err(errors::FoundExprWouldBeStmt {
|
||||
span: self.token.span,
|
||||
token: self.token.clone(),
|
||||
token: self.token,
|
||||
suggestion: ExprParenthesesNeeded::surrounding(lhs.span),
|
||||
});
|
||||
}
|
||||
@@ -417,7 +417,7 @@ impl<'a> Parser<'a> {
|
||||
cur_op_span: Span,
|
||||
) -> PResult<'a, P<Expr>> {
|
||||
let rhs = if self.is_at_start_of_range_notation_rhs() {
|
||||
let maybe_lt = self.token.clone();
|
||||
let maybe_lt = self.token;
|
||||
let attrs = self.parse_outer_attributes()?;
|
||||
Some(
|
||||
self.parse_expr_assoc_with(Bound::Excluded(prec), attrs)
|
||||
@@ -611,7 +611,7 @@ impl<'a> Parser<'a> {
|
||||
|
||||
/// Recover on `not expr` in favor of `!expr`.
|
||||
fn recover_not_expr(&mut self, lo: Span) -> PResult<'a, (Span, ExprKind)> {
|
||||
let negated_token = self.look_ahead(1, |t| t.clone());
|
||||
let negated_token = self.look_ahead(1, |t| *t);
|
||||
|
||||
let sub_diag = if negated_token.is_numeric_lit() {
|
||||
errors::NotAsNegationOperatorSub::SuggestNotBitwise
|
||||
@@ -637,9 +637,7 @@ impl<'a> Parser<'a> {
|
||||
/// Returns the span of expr if it was not interpolated, or the span of the interpolated token.
|
||||
fn interpolated_or_expr_span(&self, expr: &Expr) -> Span {
|
||||
match self.prev_token.kind {
|
||||
TokenKind::NtIdent(..) | TokenKind::NtLifetime(..) | TokenKind::Interpolated(..) => {
|
||||
self.prev_token.span
|
||||
}
|
||||
TokenKind::NtIdent(..) | TokenKind::NtLifetime(..) => self.prev_token.span,
|
||||
TokenKind::CloseDelim(Delimiter::Invisible(InvisibleOrigin::MetaVar(_))) => {
|
||||
// `expr.span` is the interpolated span, because invisible open
|
||||
// and close delims both get marked with the same span, one
|
||||
@@ -1386,15 +1384,7 @@ impl<'a> Parser<'a> {
|
||||
maybe_recover_from_interpolated_ty_qpath!(self, true);
|
||||
|
||||
let span = self.token.span;
|
||||
if let token::Interpolated(nt) = &self.token.kind {
|
||||
match &**nt {
|
||||
token::NtBlock(block) => {
|
||||
let block = block.clone();
|
||||
self.bump();
|
||||
return Ok(self.mk_expr(self.prev_token.span, ExprKind::Block(block, None)));
|
||||
}
|
||||
};
|
||||
} else if let Some(expr) = self.eat_metavar_seq_with_matcher(
|
||||
if let Some(expr) = self.eat_metavar_seq_with_matcher(
|
||||
|mv_kind| matches!(mv_kind, MetaVarKind::Expr { .. }),
|
||||
|this| {
|
||||
// Force collection (as opposed to just `parse_expr`) is required to avoid the
|
||||
@@ -1415,9 +1405,13 @@ impl<'a> Parser<'a> {
|
||||
self.eat_metavar_seq(MetaVarKind::Literal, |this| this.parse_literal_maybe_minus())
|
||||
{
|
||||
return Ok(lit);
|
||||
} else if let Some(path) = self.eat_metavar_seq(MetaVarKind::Path, |this| {
|
||||
this.collect_tokens_no_attrs(|this| this.parse_path(PathStyle::Type))
|
||||
}) {
|
||||
} else if let Some(block) =
|
||||
self.eat_metavar_seq(MetaVarKind::Block, |this| this.parse_block())
|
||||
{
|
||||
return Ok(self.mk_expr(span, ExprKind::Block(block, None)));
|
||||
} else if let Some(path) =
|
||||
self.eat_metavar_seq(MetaVarKind::Path, |this| this.parse_path(PathStyle::Type))
|
||||
{
|
||||
return Ok(self.mk_expr(span, ExprKind::Path(None, path)));
|
||||
}
|
||||
|
||||
@@ -1612,7 +1606,7 @@ impl<'a> Parser<'a> {
|
||||
}
|
||||
|
||||
fn parse_expr_path_start(&mut self) -> PResult<'a, P<Expr>> {
|
||||
let maybe_eq_tok = self.prev_token.clone();
|
||||
let maybe_eq_tok = self.prev_token;
|
||||
let (qself, path) = if self.eat_lt() {
|
||||
let lt_span = self.prev_token.span;
|
||||
let (qself, path) = self.parse_qpath(PathStyle::Expr).map_err(|mut err| {
|
||||
@@ -1671,7 +1665,7 @@ impl<'a> Parser<'a> {
|
||||
} else if self.eat_keyword(exp!(Loop)) {
|
||||
self.parse_expr_loop(label, lo)
|
||||
} else if self.check_noexpect(&token::OpenDelim(Delimiter::Brace))
|
||||
|| self.token.is_whole_block()
|
||||
|| self.token.is_metavar_block()
|
||||
{
|
||||
self.parse_expr_block(label, lo, BlockCheckMode::Default)
|
||||
} else if !ate_colon
|
||||
@@ -2073,7 +2067,7 @@ impl<'a> Parser<'a> {
|
||||
&mut self,
|
||||
mk_lit_char: impl FnOnce(Symbol, Span) -> L,
|
||||
) -> PResult<'a, L> {
|
||||
let token = self.token.clone();
|
||||
let token = self.token;
|
||||
let err = |self_: &Self| {
|
||||
let msg = format!("unexpected token: {}", super::token_descr(&token));
|
||||
self_.dcx().struct_span_err(token.span, msg)
|
||||
@@ -2354,7 +2348,7 @@ impl<'a> Parser<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
if self.token.is_whole_block() {
|
||||
if self.token.is_metavar_block() {
|
||||
self.dcx().emit_err(errors::InvalidBlockMacroSegment {
|
||||
span: self.token.span,
|
||||
context: lo.to(self.token.span),
|
||||
@@ -2379,7 +2373,7 @@ impl<'a> Parser<'a> {
|
||||
fn parse_expr_closure(&mut self) -> PResult<'a, P<Expr>> {
|
||||
let lo = self.token.span;
|
||||
|
||||
let before = self.prev_token.clone();
|
||||
let before = self.prev_token;
|
||||
let binder = if self.check_keyword(exp!(For)) {
|
||||
let lo = self.token.span;
|
||||
let (lifetime_defs, _) = self.parse_late_bound_lifetime_defs()?;
|
||||
@@ -2411,8 +2405,8 @@ impl<'a> Parser<'a> {
|
||||
FnRetTy::Default(_) => {
|
||||
let restrictions =
|
||||
self.restrictions - Restrictions::STMT_EXPR - Restrictions::ALLOW_LET;
|
||||
let prev = self.prev_token.clone();
|
||||
let token = self.token.clone();
|
||||
let prev = self.prev_token;
|
||||
let token = self.token;
|
||||
let attrs = self.parse_outer_attributes()?;
|
||||
match self.parse_expr_res(restrictions, attrs) {
|
||||
Ok((expr, _)) => expr,
|
||||
@@ -2477,7 +2471,7 @@ impl<'a> Parser<'a> {
|
||||
if self.may_recover()
|
||||
&& self.token.can_begin_expr()
|
||||
&& !matches!(self.token.kind, TokenKind::OpenDelim(Delimiter::Brace))
|
||||
&& !self.token.is_whole_block()
|
||||
&& !self.token.is_metavar_block()
|
||||
{
|
||||
let snapshot = self.create_snapshot_for_diagnostic();
|
||||
let restrictions =
|
||||
@@ -2659,7 +2653,7 @@ impl<'a> Parser<'a> {
|
||||
}
|
||||
} else {
|
||||
let attrs = self.parse_outer_attributes()?; // For recovery.
|
||||
let maybe_fatarrow = self.token.clone();
|
||||
let maybe_fatarrow = self.token;
|
||||
let block = if self.check(exp!(OpenBrace)) {
|
||||
self.parse_block()?
|
||||
} else if let Some(block) = recover_block_from_condition(self) {
|
||||
@@ -3524,7 +3518,7 @@ impl<'a> Parser<'a> {
|
||||
self.token.is_keyword(kw::Do)
|
||||
&& self.is_keyword_ahead(1, &[kw::Catch])
|
||||
&& self
|
||||
.look_ahead(2, |t| *t == token::OpenDelim(Delimiter::Brace) || t.is_whole_block())
|
||||
.look_ahead(2, |t| *t == token::OpenDelim(Delimiter::Brace) || t.is_metavar_block())
|
||||
&& !self.restrictions.contains(Restrictions::NO_STRUCT_LITERAL)
|
||||
}
|
||||
|
||||
@@ -3535,7 +3529,7 @@ impl<'a> Parser<'a> {
|
||||
fn is_try_block(&self) -> bool {
|
||||
self.token.is_keyword(kw::Try)
|
||||
&& self
|
||||
.look_ahead(1, |t| *t == token::OpenDelim(Delimiter::Brace) || t.is_whole_block())
|
||||
.look_ahead(1, |t| *t == token::OpenDelim(Delimiter::Brace) || t.is_metavar_block())
|
||||
&& self.token_uninterpolated_span().at_least_rust_2018()
|
||||
}
|
||||
|
||||
@@ -3569,12 +3563,12 @@ impl<'a> Parser<'a> {
|
||||
// `async move {`
|
||||
self.is_keyword_ahead(lookahead + 1, &[kw::Move, kw::Use])
|
||||
&& self.look_ahead(lookahead + 2, |t| {
|
||||
*t == token::OpenDelim(Delimiter::Brace) || t.is_whole_block()
|
||||
*t == token::OpenDelim(Delimiter::Brace) || t.is_metavar_block()
|
||||
})
|
||||
) || (
|
||||
// `async {`
|
||||
self.look_ahead(lookahead + 1, |t| {
|
||||
*t == token::OpenDelim(Delimiter::Brace) || t.is_whole_block()
|
||||
*t == token::OpenDelim(Delimiter::Brace) || t.is_metavar_block()
|
||||
})
|
||||
))
|
||||
}
|
||||
@@ -3867,7 +3861,7 @@ impl<'a> Parser<'a> {
|
||||
return Err(this.dcx().create_err(errors::ExpectedStructField {
|
||||
span: this.look_ahead(1, |t| t.span),
|
||||
ident_span: this.token.span,
|
||||
token: this.look_ahead(1, |t| t.clone()),
|
||||
token: this.look_ahead(1, |t| *t),
|
||||
}));
|
||||
}
|
||||
let (ident, expr) = if is_shorthand {
|
||||
|
||||
Reference in New Issue
Block a user