mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-25 13:24:22 +00:00
Remove From
impls for LhsExpr
.
The `Option<AttrWrapper>` one maps to the first two variants, and the `P<Expr>` one maps to the third. Weird. The code is shorter and clearer without them.
This commit is contained in:
parent
1c28229ada
commit
42e47dfe82
@ -75,25 +75,6 @@ pub(super) enum LhsExpr {
|
|||||||
AlreadyParsed { expr: P<Expr>, starts_statement: bool },
|
AlreadyParsed { expr: P<Expr>, starts_statement: bool },
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Option<AttrWrapper>> for LhsExpr {
|
|
||||||
/// Converts `Some(attrs)` into `LhsExpr::AttributesParsed(attrs)`
|
|
||||||
/// and `None` into `LhsExpr::NotYetParsed`.
|
|
||||||
///
|
|
||||||
/// This conversion does not allocate.
|
|
||||||
fn from(o: Option<AttrWrapper>) -> Self {
|
|
||||||
if let Some(attrs) = o { LhsExpr::AttributesParsed(attrs) } else { LhsExpr::NotYetParsed }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<P<Expr>> for LhsExpr {
|
|
||||||
/// Converts the `expr: P<Expr>` into `LhsExpr::AlreadyParsed { expr, starts_statement: false }`.
|
|
||||||
///
|
|
||||||
/// This conversion does not allocate.
|
|
||||||
fn from(expr: P<Expr>) -> Self {
|
|
||||||
LhsExpr::AlreadyParsed { expr, starts_statement: false }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
enum DestructuredFloat {
|
enum DestructuredFloat {
|
||||||
/// 1e2
|
/// 1e2
|
||||||
@ -166,7 +147,11 @@ impl<'a> Parser<'a> {
|
|||||||
&mut self,
|
&mut self,
|
||||||
already_parsed_attrs: Option<AttrWrapper>,
|
already_parsed_attrs: Option<AttrWrapper>,
|
||||||
) -> PResult<'a, P<Expr>> {
|
) -> PResult<'a, P<Expr>> {
|
||||||
self.parse_expr_assoc_with(0, already_parsed_attrs.into())
|
let lhs = match already_parsed_attrs {
|
||||||
|
Some(attrs) => LhsExpr::AttributesParsed(attrs),
|
||||||
|
None => LhsExpr::NotYetParsed,
|
||||||
|
};
|
||||||
|
self.parse_expr_assoc_with(0, lhs)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parses an associative expression with operators of at least `min_prec` precedence.
|
/// Parses an associative expression with operators of at least `min_prec` precedence.
|
||||||
@ -2660,7 +2645,8 @@ impl<'a> Parser<'a> {
|
|||||||
} else {
|
} else {
|
||||||
self.expect(&token::Eq)?;
|
self.expect(&token::Eq)?;
|
||||||
}
|
}
|
||||||
let expr = self.parse_expr_assoc_with(1 + prec_let_scrutinee_needs_par(), None.into())?;
|
let expr =
|
||||||
|
self.parse_expr_assoc_with(1 + prec_let_scrutinee_needs_par(), LhsExpr::NotYetParsed)?;
|
||||||
let span = lo.to(expr.span);
|
let span = lo.to(expr.span);
|
||||||
Ok(self.mk_expr(span, ExprKind::Let(pat, expr, span, recovered)))
|
Ok(self.mk_expr(span, ExprKind::Let(pat, expr, span, recovered)))
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ use crate::errors::{
|
|||||||
UnexpectedParenInRangePatSugg, UnexpectedVertVertBeforeFunctionParam,
|
UnexpectedParenInRangePatSugg, UnexpectedVertVertBeforeFunctionParam,
|
||||||
UnexpectedVertVertInPattern,
|
UnexpectedVertVertInPattern,
|
||||||
};
|
};
|
||||||
use crate::parser::expr::could_be_unclosed_char_literal;
|
use crate::parser::expr::{could_be_unclosed_char_literal, LhsExpr};
|
||||||
use crate::{maybe_recover_from_interpolated_ty_qpath, maybe_whole};
|
use crate::{maybe_recover_from_interpolated_ty_qpath, maybe_whole};
|
||||||
use rustc_ast::mut_visit::{noop_visit_pat, MutVisitor};
|
use rustc_ast::mut_visit::{noop_visit_pat, MutVisitor};
|
||||||
use rustc_ast::ptr::P;
|
use rustc_ast::ptr::P;
|
||||||
@ -398,9 +398,8 @@ impl<'a> Parser<'a> {
|
|||||||
|
|
||||||
// Parse an associative expression such as `+ expr`, `% expr`, ...
|
// Parse an associative expression such as `+ expr`, `% expr`, ...
|
||||||
// Assignements, ranges and `|` are disabled by [`Restrictions::IS_PAT`].
|
// Assignements, ranges and `|` are disabled by [`Restrictions::IS_PAT`].
|
||||||
if let Ok(expr) =
|
let lhs = LhsExpr::AlreadyParsed { expr, starts_statement: false };
|
||||||
snapshot.parse_expr_assoc_with(0, expr.into()).map_err(|err| err.cancel())
|
if let Ok(expr) = snapshot.parse_expr_assoc_with(0, lhs).map_err(|err| err.cancel()) {
|
||||||
{
|
|
||||||
// We got a valid expression.
|
// We got a valid expression.
|
||||||
self.restore_snapshot(snapshot);
|
self.restore_snapshot(snapshot);
|
||||||
self.restrictions.remove(Restrictions::IS_PAT);
|
self.restrictions.remove(Restrictions::IS_PAT);
|
||||||
|
Loading…
Reference in New Issue
Block a user