mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
lowering: extract lower_expr_closure
This commit is contained in:
parent
ca19e326a6
commit
548e3090c2
@ -266,42 +266,10 @@ impl LoweringContext<'_> {
|
|||||||
ExprKind::Await(ref expr) => self.lower_await(e.span, expr),
|
ExprKind::Await(ref expr) => self.lower_await(e.span, expr),
|
||||||
ExprKind::Closure(
|
ExprKind::Closure(
|
||||||
capture_clause, asyncness, movability, ref decl, ref body, fn_decl_span
|
capture_clause, asyncness, movability, ref decl, ref body, fn_decl_span
|
||||||
) => {
|
) => if let IsAsync::Async { closure_id, .. } = asyncness {
|
||||||
if let IsAsync::Async { closure_id, .. } = asyncness {
|
self.lower_expr_async_closure(capture_clause, closure_id, decl, body, fn_decl_span)
|
||||||
self.lower_expr_async_closure(
|
} else {
|
||||||
capture_clause,
|
self.lower_expr_closure(capture_clause, movability, decl, body, fn_decl_span)
|
||||||
closure_id,
|
|
||||||
decl,
|
|
||||||
body,
|
|
||||||
fn_decl_span,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
// Lower outside new scope to preserve `is_in_loop_condition`.
|
|
||||||
let fn_decl = self.lower_fn_decl(decl, None, false, None);
|
|
||||||
|
|
||||||
self.with_new_scopes(|this| {
|
|
||||||
this.current_item = Some(fn_decl_span);
|
|
||||||
let mut generator_kind = None;
|
|
||||||
let body_id = this.lower_fn_body(decl, |this| {
|
|
||||||
let e = this.lower_expr(body);
|
|
||||||
generator_kind = this.generator_kind;
|
|
||||||
e
|
|
||||||
});
|
|
||||||
let generator_option = this.generator_movability_for_fn(
|
|
||||||
&decl,
|
|
||||||
fn_decl_span,
|
|
||||||
generator_kind,
|
|
||||||
movability,
|
|
||||||
);
|
|
||||||
hir::ExprKind::Closure(
|
|
||||||
this.lower_capture_clause(capture_clause),
|
|
||||||
fn_decl,
|
|
||||||
body_id,
|
|
||||||
fn_decl_span,
|
|
||||||
generator_option,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ExprKind::Block(ref blk, opt_label) => {
|
ExprKind::Block(ref blk, opt_label) => {
|
||||||
hir::ExprKind::Block(self.lower_block(blk,
|
hir::ExprKind::Block(self.lower_block(blk,
|
||||||
@ -407,6 +375,41 @@ impl LoweringContext<'_> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn lower_expr_closure(
|
||||||
|
&mut self,
|
||||||
|
capture_clause: CaptureBy,
|
||||||
|
movability: Movability,
|
||||||
|
decl: &FnDecl,
|
||||||
|
body: &Expr,
|
||||||
|
fn_decl_span: Span,
|
||||||
|
) -> hir::ExprKind {
|
||||||
|
// Lower outside new scope to preserve `is_in_loop_condition`.
|
||||||
|
let fn_decl = self.lower_fn_decl(decl, None, false, None);
|
||||||
|
|
||||||
|
self.with_new_scopes(|this| {
|
||||||
|
this.current_item = Some(fn_decl_span);
|
||||||
|
let mut generator_kind = None;
|
||||||
|
let body_id = this.lower_fn_body(decl, |this| {
|
||||||
|
let e = this.lower_expr(body);
|
||||||
|
generator_kind = this.generator_kind;
|
||||||
|
e
|
||||||
|
});
|
||||||
|
let generator_option = this.generator_movability_for_fn(
|
||||||
|
&decl,
|
||||||
|
fn_decl_span,
|
||||||
|
generator_kind,
|
||||||
|
movability,
|
||||||
|
);
|
||||||
|
hir::ExprKind::Closure(
|
||||||
|
this.lower_capture_clause(capture_clause),
|
||||||
|
fn_decl,
|
||||||
|
body_id,
|
||||||
|
fn_decl_span,
|
||||||
|
generator_option,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn lower_expr_async_closure(
|
fn lower_expr_async_closure(
|
||||||
&mut self,
|
&mut self,
|
||||||
capture_clause: CaptureBy,
|
capture_clause: CaptureBy,
|
||||||
|
Loading…
Reference in New Issue
Block a user