Skip to content

Commit 94876c2

Browse files
committed
lowering: move expr builder methods -> expr.rs
1 parent 5cba0ac commit 94876c2

File tree

2 files changed

+182
-175
lines changed

2 files changed

+182
-175
lines changed

src/librustc/hir/lowering.rs

Lines changed: 9 additions & 174 deletions
Original file line numberDiff line numberDiff line change
@@ -1173,6 +1173,13 @@ impl<'a> LoweringContext<'a> {
11731173
))
11741174
}
11751175

1176+
fn lower_fn_body_block(&mut self, decl: &FnDecl, body: &Block) -> hir::BodyId {
1177+
self.lower_fn_body(decl, |this| {
1178+
let body = this.lower_block(body, false);
1179+
this.expr_block(body, ThinVec::new())
1180+
})
1181+
}
1182+
11761183
fn lower_const_body(&mut self, expr: &Expr) -> hir::BodyId {
11771184
self.lower_body(|this| (hir_vec![], this.lower_expr(expr)))
11781185
}
@@ -3181,10 +3188,7 @@ impl<'a> LoweringContext<'a> {
31813188
) -> hir::BodyId {
31823189
let closure_id = match asyncness {
31833190
IsAsync::Async { closure_id, .. } => closure_id,
3184-
IsAsync::NotAsync => return self.lower_fn_body(&decl, |this| {
3185-
let body = this.lower_block(body, false);
3186-
this.expr_block(body, ThinVec::new())
3187-
}),
3191+
IsAsync::NotAsync => return self.lower_fn_body_block(decl, body),
31883192
};
31893193

31903194
self.lower_body(|this| {
@@ -3786,10 +3790,7 @@ impl<'a> LoweringContext<'a> {
37863790
(generics, hir::TraitItemKind::Method(sig, hir::TraitMethod::Required(names)))
37873791
}
37883792
TraitItemKind::Method(ref sig, Some(ref body)) => {
3789-
let body_id = self.lower_fn_body(&sig.decl, |this| {
3790-
let body = this.lower_block(body, false);
3791-
this.expr_block(body, ThinVec::new())
3792-
});
3793+
let body_id = self.lower_fn_body_block(&sig.decl, body);
37933794
let (generics, sig) = self.lower_method_sig(
37943795
&i.generics,
37953796
sig,
@@ -4566,144 +4567,6 @@ impl<'a> LoweringContext<'a> {
45664567
}
45674568
}
45684569

4569-
fn expr_break(&mut self, span: Span, attrs: ThinVec<Attribute>) -> P<hir::Expr> {
4570-
let expr_break = hir::ExprKind::Break(self.lower_loop_destination(None), None);
4571-
P(self.expr(span, expr_break, attrs))
4572-
}
4573-
4574-
fn expr_call(
4575-
&mut self,
4576-
span: Span,
4577-
e: P<hir::Expr>,
4578-
args: hir::HirVec<hir::Expr>,
4579-
) -> hir::Expr {
4580-
self.expr(span, hir::ExprKind::Call(e, args), ThinVec::new())
4581-
}
4582-
4583-
// Note: associated functions must use `expr_call_std_path`.
4584-
fn expr_call_std_path(
4585-
&mut self,
4586-
span: Span,
4587-
path_components: &[Symbol],
4588-
args: hir::HirVec<hir::Expr>,
4589-
) -> hir::Expr {
4590-
let path = P(self.expr_std_path(span, path_components, None, ThinVec::new()));
4591-
self.expr_call(span, path, args)
4592-
}
4593-
4594-
// Create an expression calling an associated function of an std type.
4595-
//
4596-
// Associated functions cannot be resolved through the normal `std_path` function,
4597-
// as they are resolved differently and so cannot use `expr_call_std_path`.
4598-
//
4599-
// This function accepts the path component (`ty_path_components`) separately from
4600-
// the name of the associated function (`assoc_fn_name`) in order to facilitate
4601-
// separate resolution of the type and creation of a path referring to its associated
4602-
// function.
4603-
fn expr_call_std_assoc_fn(
4604-
&mut self,
4605-
ty_path_id: hir::HirId,
4606-
span: Span,
4607-
ty_path_components: &[Symbol],
4608-
assoc_fn_name: &str,
4609-
args: hir::HirVec<hir::Expr>,
4610-
) -> hir::ExprKind {
4611-
let ty_path = P(self.std_path(span, ty_path_components, None, false));
4612-
let ty = P(self.ty_path(ty_path_id, span, hir::QPath::Resolved(None, ty_path)));
4613-
let fn_seg = P(hir::PathSegment::from_ident(Ident::from_str(assoc_fn_name)));
4614-
let fn_path = hir::QPath::TypeRelative(ty, fn_seg);
4615-
let fn_expr = P(self.expr(span, hir::ExprKind::Path(fn_path), ThinVec::new()));
4616-
hir::ExprKind::Call(fn_expr, args)
4617-
}
4618-
4619-
fn expr_ident(&mut self, span: Span, ident: Ident, binding: hir::HirId) -> hir::Expr {
4620-
self.expr_ident_with_attrs(span, ident, binding, ThinVec::new())
4621-
}
4622-
4623-
fn expr_ident_with_attrs(
4624-
&mut self,
4625-
span: Span,
4626-
ident: Ident,
4627-
binding: hir::HirId,
4628-
attrs: ThinVec<Attribute>,
4629-
) -> hir::Expr {
4630-
let expr_path = hir::ExprKind::Path(hir::QPath::Resolved(
4631-
None,
4632-
P(hir::Path {
4633-
span,
4634-
res: Res::Local(binding),
4635-
segments: hir_vec![hir::PathSegment::from_ident(ident)],
4636-
}),
4637-
));
4638-
4639-
self.expr(span, expr_path, attrs)
4640-
}
4641-
4642-
fn expr_mut_addr_of(&mut self, span: Span, e: P<hir::Expr>) -> hir::Expr {
4643-
self.expr(span, hir::ExprKind::AddrOf(hir::MutMutable, e), ThinVec::new())
4644-
}
4645-
4646-
fn expr_std_path(
4647-
&mut self,
4648-
span: Span,
4649-
components: &[Symbol],
4650-
params: Option<P<hir::GenericArgs>>,
4651-
attrs: ThinVec<Attribute>,
4652-
) -> hir::Expr {
4653-
let path = self.std_path(span, components, params, true);
4654-
self.expr(
4655-
span,
4656-
hir::ExprKind::Path(hir::QPath::Resolved(None, P(path))),
4657-
attrs,
4658-
)
4659-
}
4660-
4661-
/// Wrap the given `expr` in a terminating scope using `hir::ExprKind::DropTemps`.
4662-
///
4663-
/// In terms of drop order, it has the same effect as wrapping `expr` in
4664-
/// `{ let _t = $expr; _t }` but should provide better compile-time performance.
4665-
///
4666-
/// The drop order can be important in e.g. `if expr { .. }`.
4667-
fn expr_drop_temps(
4668-
&mut self,
4669-
span: Span,
4670-
expr: P<hir::Expr>,
4671-
attrs: ThinVec<Attribute>
4672-
) -> hir::Expr {
4673-
self.expr(span, hir::ExprKind::DropTemps(expr), attrs)
4674-
}
4675-
4676-
fn expr_match(
4677-
&mut self,
4678-
span: Span,
4679-
arg: P<hir::Expr>,
4680-
arms: hir::HirVec<hir::Arm>,
4681-
source: hir::MatchSource,
4682-
) -> hir::Expr {
4683-
self.expr(span, hir::ExprKind::Match(arg, arms, source), ThinVec::new())
4684-
}
4685-
4686-
fn expr_block(&mut self, b: P<hir::Block>, attrs: ThinVec<Attribute>) -> hir::Expr {
4687-
self.expr(b.span, hir::ExprKind::Block(b, None), attrs)
4688-
}
4689-
4690-
fn expr_unit(&mut self, sp: Span) -> hir::Expr {
4691-
self.expr_tuple(sp, hir_vec![])
4692-
}
4693-
4694-
fn expr_tuple(&mut self, sp: Span, exprs: hir::HirVec<hir::Expr>) -> hir::Expr {
4695-
self.expr(sp, hir::ExprKind::Tup(exprs), ThinVec::new())
4696-
}
4697-
4698-
fn expr(&mut self, span: Span, node: hir::ExprKind, attrs: ThinVec<Attribute>) -> hir::Expr {
4699-
hir::Expr {
4700-
hir_id: self.next_id(),
4701-
node,
4702-
span,
4703-
attrs,
4704-
}
4705-
}
4706-
47074570
fn stmt(&mut self, span: Span, node: hir::StmtKind) -> hir::Stmt {
47084571
hir::Stmt { span, node, hir_id: self.next_id() }
47094572
}
@@ -4732,11 +4595,6 @@ impl<'a> LoweringContext<'a> {
47324595
self.stmt(span, hir::StmtKind::Local(P(local)))
47334596
}
47344597

4735-
fn expr_block_empty(&mut self, span: Span) -> hir::Expr {
4736-
let blk = self.block_all(span, hir_vec![], None);
4737-
self.expr_block(P(blk), ThinVec::new())
4738-
}
4739-
47404598
fn block_expr(&mut self, expr: P<hir::Expr>) -> hir::Block {
47414599
self.block_all(expr.span, hir::HirVec::new(), Some(expr))
47424600
}
@@ -4757,29 +4615,6 @@ impl<'a> LoweringContext<'a> {
47574615
}
47584616
}
47594617

4760-
fn expr_unsafe(&mut self, expr: P<hir::Expr>) -> hir::Expr {
4761-
let hir_id = self.next_id();
4762-
let span = expr.span;
4763-
self.expr(
4764-
span,
4765-
hir::ExprKind::Block(P(hir::Block {
4766-
stmts: hir_vec![],
4767-
expr: Some(expr),
4768-
hir_id,
4769-
rules: hir::UnsafeBlock(hir::CompilerGenerated),
4770-
span,
4771-
targeted_by_break: false,
4772-
}), None),
4773-
ThinVec::new(),
4774-
)
4775-
}
4776-
4777-
/// Constructs a `true` or `false` literal expression.
4778-
fn expr_bool(&mut self, span: Span, val: bool) -> hir::Expr {
4779-
let lit = Spanned { span, node: LitKind::Bool(val) };
4780-
self.expr(span, hir::ExprKind::Lit(lit), ThinVec::new())
4781-
}
4782-
47834618
/// Constructs a `true` or `false` literal pattern.
47844619
fn pat_bool(&mut self, span: Span, val: bool) -> P<hir::Pat> {
47854620
let expr = self.expr_bool(span, val);

0 commit comments

Comments
 (0)