Skip to content

Commit 8758d7f

Browse files
committed
Cleanup & Simplify stuff in lowering.
1 parent be8bbb0 commit 8758d7f

File tree

1 file changed

+34
-43
lines changed

1 file changed

+34
-43
lines changed

src/librustc/hir/lowering.rs

+34-43
Original file line numberDiff line numberDiff line change
@@ -4447,23 +4447,23 @@ impl<'a> LoweringContext<'a> {
44474447
})
44484448
}
44494449

4450+
fn lower_exprs(&mut self, exprs: &[AstP<Expr>]) -> HirVec<hir::Expr> {
4451+
exprs.iter().map(|x| self.lower_expr(x)).collect()
4452+
}
4453+
44504454
fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
44514455
let kind = match e.node {
44524456
ExprKind::Box(ref inner) => hir::ExprKind::Box(P(self.lower_expr(inner))),
4453-
ExprKind::Array(ref exprs) => {
4454-
hir::ExprKind::Array(exprs.iter().map(|x| self.lower_expr(x)).collect())
4455-
}
4457+
ExprKind::Array(ref exprs) => hir::ExprKind::Array(self.lower_exprs(exprs)),
44564458
ExprKind::Repeat(ref expr, ref count) => {
44574459
let expr = P(self.lower_expr(expr));
44584460
let count = self.lower_anon_const(count);
44594461
hir::ExprKind::Repeat(expr, count)
44604462
}
4461-
ExprKind::Tup(ref elts) => {
4462-
hir::ExprKind::Tup(elts.iter().map(|x| self.lower_expr(x)).collect())
4463-
}
4463+
ExprKind::Tup(ref elts) => hir::ExprKind::Tup(self.lower_exprs(elts)),
44644464
ExprKind::Call(ref f, ref args) => {
44654465
let f = P(self.lower_expr(f));
4466-
hir::ExprKind::Call(f, args.iter().map(|x| self.lower_expr(x)).collect())
4466+
hir::ExprKind::Call(f, self.lower_exprs(args))
44674467
}
44684468
ExprKind::MethodCall(ref seg, ref args) => {
44694469
let hir_seg = P(self.lower_path_segment(
@@ -4475,7 +4475,7 @@ impl<'a> LoweringContext<'a> {
44754475
ImplTraitContext::disallowed(),
44764476
None,
44774477
));
4478-
let args = args.iter().map(|x| self.lower_expr(x)).collect();
4478+
let args = self.lower_exprs(args);
44794479
hir::ExprKind::MethodCall(hir_seg, seg.ident.span, args)
44804480
}
44814481
ExprKind::Binary(binop, ref lhs, ref rhs) => {
@@ -5049,17 +5049,9 @@ impl<'a> LoweringContext<'a> {
50495049
));
50505050
let arms = hir_vec![pat_arm, break_arm];
50515051

5052-
P(self.expr(
5053-
head_sp,
5054-
hir::ExprKind::Match(
5055-
next_expr,
5056-
arms,
5057-
hir::MatchSource::ForLoopDesugar
5058-
),
5059-
ThinVec::new(),
5060-
))
5052+
self.expr_match(head_sp, next_expr, arms, hir::MatchSource::ForLoopDesugar)
50615053
};
5062-
let match_stmt = self.stmt(head_sp, hir::StmtKind::Expr(match_expr));
5054+
let match_stmt = self.stmt_expr(head_sp, match_expr);
50635055

50645056
let next_expr = P(self.expr_ident(head_sp, next_ident, next_pat_hid));
50655057

@@ -5083,8 +5075,8 @@ impl<'a> LoweringContext<'a> {
50835075
);
50845076

50855077
let body_block = self.with_loop_scope(e.id, |this| this.lower_block(body, false));
5086-
let body_expr = P(self.expr_block(body_block, ThinVec::new()));
5087-
let body_stmt = self.stmt(body.span, hir::StmtKind::Expr(body_expr));
5078+
let body_expr = self.expr_block(body_block, ThinVec::new());
5079+
let body_stmt = self.stmt_expr(body.span, body_expr);
50885080

50895081
let loop_block = P(self.block_all(
50905082
e.span,
@@ -5127,8 +5119,10 @@ impl<'a> LoweringContext<'a> {
51275119
));
51285120

51295121
// This is effectively `{ let _result = ...; _result }`.
5130-
// The construct was introduced in #21984.
5131-
// FIXME(60253): Is this still necessary?
5122+
// The construct was introduced in #21984 and is necessary to make sure that
5123+
// temporaries in the `head` expression are dropped and do not leak to the
5124+
// surrounding scope of the `match` since the `match` is not a terminating scope.
5125+
//
51325126
// Also, add the attributes to the outer returned expr node.
51335127
return self.expr_drop_temps(head_sp, match_expr, e.attrs.clone())
51345128
}
@@ -5254,7 +5248,7 @@ impl<'a> LoweringContext<'a> {
52545248
}
52555249

52565250
fn lower_stmt(&mut self, s: &Stmt) -> SmallVec<[hir::Stmt; 1]> {
5257-
smallvec![match s.node {
5251+
let node = match s.node {
52585252
StmtKind::Local(ref l) => {
52595253
let (l, item_ids) = self.lower_local(l);
52605254
let mut ids: SmallVec<[hir::Stmt; 1]> = item_ids
@@ -5291,21 +5285,14 @@ impl<'a> LoweringContext<'a> {
52915285
})
52925286
.collect();
52935287
}
5294-
StmtKind::Expr(ref e) => {
5295-
hir::Stmt {
5296-
hir_id: self.lower_node_id(s.id),
5297-
node: hir::StmtKind::Expr(P(self.lower_expr(e))),
5298-
span: s.span,
5299-
}
5300-
},
5301-
StmtKind::Semi(ref e) => {
5302-
hir::Stmt {
5303-
hir_id: self.lower_node_id(s.id),
5304-
node: hir::StmtKind::Semi(P(self.lower_expr(e))),
5305-
span: s.span,
5306-
}
5307-
},
5288+
StmtKind::Expr(ref e) => hir::StmtKind::Expr(P(self.lower_expr(e))),
5289+
StmtKind::Semi(ref e) => hir::StmtKind::Semi(P(self.lower_expr(e))),
53085290
StmtKind::Mac(..) => panic!("Shouldn't exist here"),
5291+
};
5292+
smallvec![hir::Stmt {
5293+
hir_id: self.lower_node_id(s.id),
5294+
node,
5295+
span: s.span,
53095296
}]
53105297
}
53115298

@@ -5567,6 +5554,10 @@ impl<'a> LoweringContext<'a> {
55675554
hir::Stmt { span, node, hir_id: self.next_id() }
55685555
}
55695556

5557+
fn stmt_expr(&mut self, span: Span, expr: hir::Expr) -> hir::Stmt {
5558+
self.stmt(span, hir::StmtKind::Expr(P(expr)))
5559+
}
5560+
55705561
fn stmt_let_pat(
55715562
&mut self,
55725563
attrs: ThinVec<Attribute>,
@@ -6060,23 +6051,23 @@ impl<'a> LoweringContext<'a> {
60606051
};
60616052

60626053
let match_stmt = {
6063-
let match_expr = P(self.expr_match(
6054+
let match_expr = self.expr_match(
60646055
span,
60656056
poll_expr,
60666057
hir_vec![ready_arm, pending_arm],
60676058
hir::MatchSource::AwaitDesugar,
6068-
));
6069-
self.stmt(span, hir::StmtKind::Expr(match_expr))
6059+
);
6060+
self.stmt_expr(span, match_expr)
60706061
};
60716062

60726063
let yield_stmt = {
60736064
let unit = self.expr_unit(span);
6074-
let yield_expr = P(self.expr(
6065+
let yield_expr = self.expr(
60756066
span,
60766067
hir::ExprKind::Yield(P(unit), hir::YieldSource::Await),
60776068
ThinVec::new(),
6078-
));
6079-
self.stmt(span, hir::StmtKind::Expr(yield_expr))
6069+
);
6070+
self.stmt_expr(span, yield_expr)
60806071
};
60816072

60826073
let loop_block = P(self.block_all(

0 commit comments

Comments
 (0)