Rollup merge of #55777 - nnethercote:less-P-in-ast, r=petrochenkov
Use `Lit` rather than `P<Lit>` in `ast::ExprKind`. Because it results in fewer allocations and small speedups on some benchmarks.
This commit is contained in:
@@ -3705,7 +3705,7 @@ impl<'a> LoweringContext<'a> {
|
|||||||
let ohs = P(self.lower_expr(ohs));
|
let ohs = P(self.lower_expr(ohs));
|
||||||
hir::ExprKind::Unary(op, ohs)
|
hir::ExprKind::Unary(op, ohs)
|
||||||
}
|
}
|
||||||
ExprKind::Lit(ref l) => hir::ExprKind::Lit(P((**l).clone())),
|
ExprKind::Lit(ref l) => hir::ExprKind::Lit(P((*l).clone())),
|
||||||
ExprKind::Cast(ref expr, ref ty) => {
|
ExprKind::Cast(ref expr, ref ty) => {
|
||||||
let expr = P(self.lower_expr(expr));
|
let expr = P(self.lower_expr(expr));
|
||||||
hir::ExprKind::Cast(expr, self.lower_ty(ty, ImplTraitContext::disallowed()))
|
hir::ExprKind::Cast(expr, self.lower_ty(ty, ImplTraitContext::disallowed()))
|
||||||
|
|||||||
@@ -1086,7 +1086,7 @@ pub enum ExprKind {
|
|||||||
/// A unary operation (For example: `!x`, `*x`)
|
/// A unary operation (For example: `!x`, `*x`)
|
||||||
Unary(UnOp, P<Expr>),
|
Unary(UnOp, P<Expr>),
|
||||||
/// A literal (For example: `1`, `"foo"`)
|
/// A literal (For example: `1`, `"foo"`)
|
||||||
Lit(P<Lit>),
|
Lit(Lit),
|
||||||
/// A cast (`foo as f64`)
|
/// A cast (`foo as f64`)
|
||||||
Cast(P<Expr>, P<Ty>),
|
Cast(P<Expr>, P<Ty>),
|
||||||
Type(P<Expr>, P<Ty>),
|
Type(P<Expr>, P<Ty>),
|
||||||
|
|||||||
@@ -491,7 +491,7 @@ impl DummyResult {
|
|||||||
pub fn raw_expr(sp: Span) -> P<ast::Expr> {
|
pub fn raw_expr(sp: Span) -> P<ast::Expr> {
|
||||||
P(ast::Expr {
|
P(ast::Expr {
|
||||||
id: ast::DUMMY_NODE_ID,
|
id: ast::DUMMY_NODE_ID,
|
||||||
node: ast::ExprKind::Lit(P(source_map::respan(sp, ast::LitKind::Bool(false)))),
|
node: ast::ExprKind::Lit(source_map::respan(sp, ast::LitKind::Bool(false))),
|
||||||
span: sp,
|
span: sp,
|
||||||
attrs: ThinVec::new(),
|
attrs: ThinVec::new(),
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -695,7 +695,7 @@ impl<'a> AstBuilder for ExtCtxt<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn expr_lit(&self, sp: Span, lit: ast::LitKind) -> P<ast::Expr> {
|
fn expr_lit(&self, sp: Span, lit: ast::LitKind) -> P<ast::Expr> {
|
||||||
self.expr(sp, ast::ExprKind::Lit(P(respan(sp, lit))))
|
self.expr(sp, ast::ExprKind::Lit(respan(sp, lit)))
|
||||||
}
|
}
|
||||||
fn expr_usize(&self, span: Span, i: usize) -> P<ast::Expr> {
|
fn expr_usize(&self, span: Span, i: usize) -> P<ast::Expr> {
|
||||||
self.expr_lit(span, ast::LitKind::Int(i as u128,
|
self.expr_lit(span, ast::LitKind::Int(i as u128,
|
||||||
|
|||||||
@@ -274,7 +274,7 @@ pub mod rt {
|
|||||||
// FIXME: This is wrong
|
// FIXME: This is wrong
|
||||||
P(ast::Expr {
|
P(ast::Expr {
|
||||||
id: ast::DUMMY_NODE_ID,
|
id: ast::DUMMY_NODE_ID,
|
||||||
node: ast::ExprKind::Lit(P(self.clone())),
|
node: ast::ExprKind::Lit(self.clone()),
|
||||||
span: DUMMY_SP,
|
span: DUMMY_SP,
|
||||||
attrs: ThinVec::new(),
|
attrs: ThinVec::new(),
|
||||||
}).to_tokens(cx)
|
}).to_tokens(cx)
|
||||||
@@ -305,7 +305,7 @@ pub mod rt {
|
|||||||
let lit = ast::LitKind::Int(val as u128, ast::LitIntType::Signed($tag));
|
let lit = ast::LitKind::Int(val as u128, ast::LitIntType::Signed($tag));
|
||||||
let lit = P(ast::Expr {
|
let lit = P(ast::Expr {
|
||||||
id: ast::DUMMY_NODE_ID,
|
id: ast::DUMMY_NODE_ID,
|
||||||
node: ast::ExprKind::Lit(P(dummy_spanned(lit))),
|
node: ast::ExprKind::Lit(dummy_spanned(lit)),
|
||||||
span: DUMMY_SP,
|
span: DUMMY_SP,
|
||||||
attrs: ThinVec::new(),
|
attrs: ThinVec::new(),
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1989,7 +1989,7 @@ impl<'a> Parser<'a> {
|
|||||||
let minus_lo = self.span;
|
let minus_lo = self.span;
|
||||||
let minus_present = self.eat(&token::BinOp(token::Minus));
|
let minus_present = self.eat(&token::BinOp(token::Minus));
|
||||||
let lo = self.span;
|
let lo = self.span;
|
||||||
let literal = P(self.parse_lit()?);
|
let literal = self.parse_lit()?;
|
||||||
let hi = self.prev_span;
|
let hi = self.prev_span;
|
||||||
let expr = self.mk_expr(lo.to(hi), ExprKind::Lit(literal), ThinVec::new());
|
let expr = self.mk_expr(lo.to(hi), ExprKind::Lit(literal), ThinVec::new());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user