From 9694ab9e18f0b6b306dafaaccb8cc33a293302bd Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Fri, 29 Nov 2019 11:09:23 +0100 Subject: [PATCH] Use Arena inside hir::Body. --- src/librustc/arena.rs | 1 + src/librustc/hir/intravisit.rs | 6 +++--- src/librustc/hir/lowering.rs | 4 ++-- src/librustc/hir/lowering/item.rs | 17 ++++++++++------- src/librustc/hir/map/mod.rs | 2 +- src/librustc/hir/mod.rs | 10 +++++----- src/librustc/ich/hcx.rs | 2 +- src/librustc/ich/impls_hir.rs | 2 +- .../infer/error_reporting/need_type_info.rs | 6 +++--- src/librustc/lint/context.rs | 2 +- src/librustc/lint/mod.rs | 8 ++++---- src/librustc/middle/region.rs | 6 +++--- src/librustc/middle/resolve_lifetime.rs | 2 +- src/librustc_lint/nonstandard_style.rs | 2 +- src/librustc_mir/build/mod.rs | 2 +- src/librustc_mir/hair/pattern/check_match.rs | 4 ++-- src/librustc_passes/check_const.rs | 4 ++-- src/librustc_passes/liveness.rs | 6 +++--- src/librustc_typeck/check/closure.rs | 16 ++++++++-------- src/librustc_typeck/check/mod.rs | 4 ++-- src/librustc_typeck/check/regionck.rs | 6 +++--- src/librustc_typeck/check/upvar.rs | 4 ++-- src/librustc_typeck/check/writeback.rs | 14 +++++++------- src/librustc_typeck/expr_use_visitor.rs | 4 ++-- 24 files changed, 69 insertions(+), 65 deletions(-) diff --git a/src/librustc/arena.rs b/src/librustc/arena.rs index 494b8ca8f4f..164e0e85c5a 100644 --- a/src/librustc/arena.rs +++ b/src/librustc/arena.rs @@ -130,6 +130,7 @@ macro_rules! arena_types { [] foreign_item: rustc::hir::ForeignItem<$tcx>, [] impl_item_ref: rustc::hir::ImplItemRef, [] macro_def: rustc::hir::MacroDef<$tcx>, + [] param: rustc::hir::Param, [] path: rustc::hir::Path, [] struct_field: rustc::hir::StructField<$tcx>, [] trait_item_ref: rustc::hir::TraitItemRef, diff --git a/src/librustc/hir/intravisit.rs b/src/librustc/hir/intravisit.rs index cae813582cd..bd975c6c95d 100644 --- a/src/librustc/hir/intravisit.rs +++ b/src/librustc/hir/intravisit.rs @@ -222,7 +222,7 @@ pub trait Visitor<'v>: Sized { walk_item(self, i) } - fn visit_body(&mut self, b: &'v Body) { + fn visit_body(&mut self, b: &'v Body<'v>) { walk_body(self, b); } @@ -401,8 +401,8 @@ pub fn walk_mod<'v, V: Visitor<'v>>(visitor: &mut V, module: &'v Mod<'v>, mod_hi } } -pub fn walk_body<'v, V: Visitor<'v>>(visitor: &mut V, body: &'v Body) { - walk_list!(visitor, visit_param, &body.params); +pub fn walk_body<'v, V: Visitor<'v>>(visitor: &mut V, body: &'v Body<'v>) { + walk_list!(visitor, visit_param, body.params); visitor.visit_expr(&body.value); } diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index 74615cbe945..cac4c694316 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -99,7 +99,7 @@ pub struct LoweringContext<'a, 'hir: 'a> { trait_items: BTreeMap>, impl_items: BTreeMap>, - bodies: BTreeMap, + bodies: BTreeMap>, exported_macros: Vec>, non_exported_macro_attrs: Vec, @@ -3428,7 +3428,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { } } -fn body_ids(bodies: &BTreeMap) -> Vec { +fn body_ids(bodies: &BTreeMap>) -> Vec { // Sorting by span ensures that we get things in order within a // file, and also puts the files in a sensible order. let mut body_ids: Vec<_> = bodies.keys().cloned().collect(); diff --git a/src/librustc/hir/lowering/item.rs b/src/librustc/hir/lowering/item.rs index c49242485e1..d5440663c49 100644 --- a/src/librustc/hir/lowering/item.rs +++ b/src/librustc/hir/lowering/item.rs @@ -5,7 +5,7 @@ use super::ImplTraitTypeIdVisitor; use super::AnonymousLifetimeMode; use super::ParamMode; -use crate::hir::{self, HirVec}; +use crate::hir; use crate::hir::ptr::P; use crate::hir::def_id::DefId; use crate::hir::def::{Res, DefKind}; @@ -107,7 +107,7 @@ impl<'a, 'lowering, 'hir> Visitor<'a> for ItemLowerer<'a, 'lowering, 'hir> { } } -impl LoweringContext<'_, 'hir> { +impl<'hir> LoweringContext<'_, 'hir> { // Same as the method above, but accepts `hir::GenericParam`s // instead of `ast::GenericParam`s. // This should only be used with generics that have already had their @@ -1052,7 +1052,7 @@ impl LoweringContext<'_, 'hir> { } } - fn record_body(&mut self, params: HirVec, value: hir::Expr) -> hir::BodyId { + fn record_body(&mut self, params: &'hir [hir::Param], value: hir::Expr) -> hir::BodyId { let body = hir::Body { generator_kind: self.generator_kind, params, @@ -1065,7 +1065,7 @@ impl LoweringContext<'_, 'hir> { fn lower_body( &mut self, - f: impl FnOnce(&mut LoweringContext<'_, '_>) -> (HirVec, hir::Expr), + f: impl FnOnce(&mut Self) -> (&'hir [hir::Param], hir::Expr), ) -> hir::BodyId { let prev_gen_kind = self.generator_kind.take(); let (parameters, result) = f(self); @@ -1089,7 +1089,9 @@ impl LoweringContext<'_, 'hir> { body: impl FnOnce(&mut LoweringContext<'_, '_>) -> hir::Expr, ) -> hir::BodyId { self.lower_body(|this| ( - decl.inputs.iter().map(|x| this.lower_param(x)).collect(), + this.arena.alloc_from_iter( + decl.inputs.iter().map(|x| this.lower_param(x)) + ), body(this), )) } @@ -1111,7 +1113,7 @@ impl LoweringContext<'_, 'hir> { } pub(super) fn lower_const_body(&mut self, span: Span, expr: Option<&Expr>) -> hir::BodyId { - self.lower_body(|this| (hir_vec![], match expr { + self.lower_body(|this| (&[], match expr { Some(expr) => this.lower_expr(expr), None => this.expr_err(span), })) @@ -1299,7 +1301,8 @@ impl LoweringContext<'_, 'hir> { ); this.expr_block(P(body), AttrVec::new()) }); - (HirVec::from(parameters), this.expr(body_span, async_expr, AttrVec::new())) + + (this.arena.alloc_from_iter(parameters), this.expr(body_span, async_expr, AttrVec::new())) }) } diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index cd96bedf4bd..71addc123b8 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -459,7 +459,7 @@ impl<'hir> Map<'hir> { self.forest.krate.impl_item(id) } - pub fn body(&self, id: BodyId) -> &'hir Body { + pub fn body(&self, id: BodyId) -> &'hir Body<'hir> { self.read(id.hir_id); // N.B., intentionally bypass `self.forest.krate()` so that we diff --git a/src/librustc/hir/mod.rs b/src/librustc/hir/mod.rs index c89d93337eb..ff6801a85c7 100644 --- a/src/librustc/hir/mod.rs +++ b/src/librustc/hir/mod.rs @@ -760,7 +760,7 @@ pub struct Crate<'hir> { pub trait_items: BTreeMap>, pub impl_items: BTreeMap>, - pub bodies: BTreeMap, + pub bodies: BTreeMap>, pub trait_impls: BTreeMap>, /// A list of the body ids written out in the order in which they @@ -787,7 +787,7 @@ impl Crate<'hir> { &self.impl_items[&id] } - pub fn body(&self, id: BodyId) -> &Body { + pub fn body(&self, id: BodyId) -> &Body<'hir> { &self.bodies[&id] } } @@ -1353,13 +1353,13 @@ pub struct BodyId { /// All bodies have an **owner**, which can be accessed via the HIR /// map using `body_owner_def_id()`. #[derive(RustcEncodable, RustcDecodable, Debug)] -pub struct Body { - pub params: HirVec, +pub struct Body<'hir> { + pub params: &'hir [Param], pub value: Expr, pub generator_kind: Option, } -impl Body { +impl Body<'hir> { pub fn id(&self) -> BodyId { BodyId { hir_id: self.value.hir_id, diff --git a/src/librustc/ich/hcx.rs b/src/librustc/ich/hcx.rs index 77a9bcd67a5..af5e167faa8 100644 --- a/src/librustc/ich/hcx.rs +++ b/src/librustc/ich/hcx.rs @@ -61,7 +61,7 @@ struct BodyResolver<'tcx>(&'tcx hir::Crate<'tcx>); impl<'tcx> BodyResolver<'tcx> { /// Returns a reference to the `hir::Body` with the given `BodyId`. /// **Does not do any tracking**; use carefully. - fn body(self, id: hir::BodyId) -> &'tcx hir::Body { + fn body(self, id: hir::BodyId) -> &'tcx hir::Body<'tcx> { self.0.body(id) } } diff --git a/src/librustc/ich/impls_hir.rs b/src/librustc/ich/impls_hir.rs index 45274b0526f..1f96f4c65ef 100644 --- a/src/librustc/ich/impls_hir.rs +++ b/src/librustc/ich/impls_hir.rs @@ -266,7 +266,7 @@ impl<'a> HashStable> for hir::Item<'_> { } } -impl<'a> HashStable> for hir::Body { +impl<'a> HashStable> for hir::Body<'_> { fn hash_stable(&self, hcx: &mut StableHashingContext<'a>, hasher: &mut StableHasher) { let hir::Body { params, diff --git a/src/librustc/infer/error_reporting/need_type_info.rs b/src/librustc/infer/error_reporting/need_type_info.rs index ebb94cc72ff..378d6d78d32 100644 --- a/src/librustc/infer/error_reporting/need_type_info.rs +++ b/src/librustc/infer/error_reporting/need_type_info.rs @@ -83,8 +83,8 @@ impl<'a, 'tcx> Visitor<'tcx> for FindLocalByTypeVisitor<'a, 'tcx> { intravisit::walk_local(self, local); } - fn visit_body(&mut self, body: &'tcx Body) { - for param in &body.params { + fn visit_body(&mut self, body: &'tcx Body<'tcx>) { + for param in body.params { if let (None, Some(ty)) = ( self.found_arg_pattern, self.node_matches_type(param.hir_id), @@ -113,7 +113,7 @@ fn closure_return_type_suggestion( span: Span, err: &mut DiagnosticBuilder<'_>, output: &FunctionRetTy, - body: &Body, + body: &Body<'_>, descr: &str, name: &str, ret: &str, diff --git a/src/librustc/lint/context.rs b/src/librustc/lint/context.rs index 5ac20f46238..b7d01306343 100644 --- a/src/librustc/lint/context.rs +++ b/src/librustc/lint/context.rs @@ -924,7 +924,7 @@ for LateContextAndPass<'a, 'tcx, T> { }); } - fn visit_body(&mut self, body: &'tcx hir::Body) { + fn visit_body(&mut self, body: &'tcx hir::Body<'tcx>) { lint_callback!(self, check_body, body); hir_visit::walk_body(self, body); lint_callback!(self, check_body_post, body); diff --git a/src/librustc/lint/mod.rs b/src/librustc/lint/mod.rs index a5d6cf9dbb7..3d6015ecfbf 100644 --- a/src/librustc/lint/mod.rs +++ b/src/librustc/lint/mod.rs @@ -87,8 +87,8 @@ macro_rules! late_lint_methods { ($macro:path, $args:tt, [$hir:tt]) => ( $macro!($args, [$hir], [ fn check_param(a: &$hir hir::Param); - fn check_body(a: &$hir hir::Body); - fn check_body_post(a: &$hir hir::Body); + fn check_body(a: &$hir hir::Body<$hir>); + fn check_body_post(a: &$hir hir::Body<$hir>); fn check_name(a: Span, b: ast::Name); fn check_crate(a: &$hir hir::Crate<$hir>); fn check_crate_post(a: &$hir hir::Crate<$hir>); @@ -114,13 +114,13 @@ macro_rules! late_lint_methods { fn check_fn( a: hir::intravisit::FnKind<$hir>, b: &$hir hir::FnDecl, - c: &$hir hir::Body, + c: &$hir hir::Body<$hir>, d: Span, e: hir::HirId); fn check_fn_post( a: hir::intravisit::FnKind<$hir>, b: &$hir hir::FnDecl, - c: &$hir hir::Body, + c: &$hir hir::Body<$hir>, d: Span, e: hir::HirId ); diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index e050e5f8942..c5d5bc58112 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -715,7 +715,7 @@ impl<'tcx> ScopeTree { pub fn yield_in_scope_for_expr(&self, scope: Scope, expr_hir_id: hir::HirId, - body: &'tcx hir::Body) -> Option { + body: &'tcx hir::Body<'tcx>) -> Option { self.yield_in_scope(scope).and_then(|YieldData { span, expr_and_pat_count, .. }| { let mut visitor = ExprLocatorVisitor { hir_id: expr_hir_id, @@ -1362,7 +1362,7 @@ impl<'tcx> Visitor<'tcx> for RegionResolutionVisitor<'tcx> { resolve_block(self, b); } - fn visit_body(&mut self, body: &'tcx hir::Body) { + fn visit_body(&mut self, body: &'tcx hir::Body<'tcx>) { let body_id = body.id(); let owner_id = self.tcx.hir().body_owner(body_id); @@ -1387,7 +1387,7 @@ impl<'tcx> Visitor<'tcx> for RegionResolutionVisitor<'tcx> { // The arguments and `self` are parented to the fn. self.cx.var_parent = self.cx.parent.take(); - for param in &body.params { + for param in body.params { self.visit_pat(¶m.pat); } diff --git a/src/librustc/middle/resolve_lifetime.rs b/src/librustc/middle/resolve_lifetime.rs index 38a7c67b907..4b838d04059 100644 --- a/src/librustc/middle/resolve_lifetime.rs +++ b/src/librustc/middle/resolve_lifetime.rs @@ -1167,7 +1167,7 @@ fn signal_shadowing_problem(tcx: TyCtxt<'_>, name: ast::Name, orig: Original, sh // Adds all labels in `b` to `ctxt.labels_in_fn`, signalling a warning // if one of the label shadows a lifetime or another label. -fn extract_labels(ctxt: &mut LifetimeContext<'_, '_>, body: &hir::Body) { +fn extract_labels(ctxt: &mut LifetimeContext<'_, '_>, body: &hir::Body<'_>) { struct GatherLabels<'a, 'tcx> { tcx: TyCtxt<'tcx>, scope: ScopeRef<'a>, diff --git a/src/librustc_lint/nonstandard_style.rs b/src/librustc_lint/nonstandard_style.rs index 9b9203083ee..08d7a90c7b0 100644 --- a/src/librustc_lint/nonstandard_style.rs +++ b/src/librustc_lint/nonstandard_style.rs @@ -298,7 +298,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NonSnakeCase { cx: &LateContext<'_, '_>, fk: FnKind<'_>, _: &hir::FnDecl, - _: &hir::Body, + _: &hir::Body<'_>, _: Span, id: hir::HirId, ) { diff --git a/src/librustc_mir/build/mod.rs b/src/librustc_mir/build/mod.rs index 3479ad6749a..6b6a58102fa 100644 --- a/src/librustc_mir/build/mod.rs +++ b/src/librustc_mir/build/mod.rs @@ -552,7 +552,7 @@ fn construct_fn<'a, 'tcx, A>( abi: Abi, return_ty: Ty<'tcx>, return_ty_span: Span, - body: &'tcx hir::Body, + body: &'tcx hir::Body<'tcx>, ) -> Body<'tcx> where A: Iterator> diff --git a/src/librustc_mir/hair/pattern/check_match.rs b/src/librustc_mir/hair/pattern/check_match.rs index 28f0edadc89..4ebf41fb9d2 100644 --- a/src/librustc_mir/hair/pattern/check_match.rs +++ b/src/librustc_mir/hair/pattern/check_match.rs @@ -76,10 +76,10 @@ impl<'tcx> Visitor<'tcx> for MatchVisitor<'_, 'tcx> { self.check_patterns(false, &loc.pat); } - fn visit_body(&mut self, body: &'tcx hir::Body) { + fn visit_body(&mut self, body: &'tcx hir::Body<'tcx>) { intravisit::walk_body(self, body); - for param in &body.params { + for param in body.params { self.check_irrefutable(¶m.pat, "function argument", None); self.check_patterns(false, ¶m.pat); } diff --git a/src/librustc_passes/check_const.rs b/src/librustc_passes/check_const.rs index f7bdefcb069..6b5b5c823e8 100644 --- a/src/librustc_passes/check_const.rs +++ b/src/librustc_passes/check_const.rs @@ -75,7 +75,7 @@ enum ConstKind { } impl ConstKind { - fn for_body(body: &hir::Body, hir_map: &Map<'_>) -> Option { + fn for_body(body: &hir::Body<'_>, hir_map: &Map<'_>) -> Option { let is_const_fn = |id| hir_map.fn_sig_by_hir_id(id).unwrap().header.is_const(); let owner = hir_map.body_owner(body.id()); @@ -215,7 +215,7 @@ impl<'tcx> Visitor<'tcx> for CheckConstVisitor<'tcx> { self.recurse_into(kind, |this| hir::intravisit::walk_anon_const(this, anon)); } - fn visit_body(&mut self, body: &'tcx hir::Body) { + fn visit_body(&mut self, body: &'tcx hir::Body<'tcx>) { let kind = ConstKind::for_body(body, self.tcx.hir()); self.recurse_into(kind, |this| hir::intravisit::walk_body(this, body)); } diff --git a/src/librustc_passes/liveness.rs b/src/librustc_passes/liveness.rs index 81a39edf215..f18ecb90fc1 100644 --- a/src/librustc_passes/liveness.rs +++ b/src/librustc_passes/liveness.rs @@ -371,7 +371,7 @@ fn visit_fn<'tcx>( let body = ir.tcx.hir().body(body_id); - for param in &body.params { + for param in body.params { let is_shorthand = match param.pat.kind { rustc::hir::PatKind::Struct(..) => true, _ => false, @@ -1463,8 +1463,8 @@ impl<'tcx> Liveness<'_, 'tcx> { } } - fn warn_about_unused_args(&self, body: &hir::Body, entry_ln: LiveNode) { - for p in &body.params { + fn warn_about_unused_args(&self, body: &hir::Body<'_>, entry_ln: LiveNode) { + for p in body.params { self.check_unused_vars_in_pat(&p.pat, Some(entry_ln), |spans, hir_id, ln, var| { if self.live_on_entry(ln, var).is_none() { self.report_dead_assign(hir_id, spans, var, true); diff --git a/src/librustc_typeck/check/closure.rs b/src/librustc_typeck/check/closure.rs index 30cb0d4f967..46b9a8d7f91 100644 --- a/src/librustc_typeck/check/closure.rs +++ b/src/librustc_typeck/check/closure.rs @@ -63,7 +63,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { expr: &hir::Expr, opt_kind: Option, decl: &'tcx hir::FnDecl, - body: &'tcx hir::Body, + body: &'tcx hir::Body<'tcx>, gen: Option, expected_sig: Option>, ) -> Ty<'tcx> { @@ -316,7 +316,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { &self, expr_def_id: DefId, decl: &hir::FnDecl, - body: &hir::Body, + body: &hir::Body<'_>, expected_sig: Option>, ) -> ClosureSignatures<'tcx> { if let Some(e) = expected_sig { @@ -332,7 +332,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { &self, expr_def_id: DefId, decl: &hir::FnDecl, - body: &hir::Body, + body: &hir::Body<'_>, ) -> ClosureSignatures<'tcx> { debug!("sig_of_closure_no_expectation()"); @@ -392,7 +392,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { &self, expr_def_id: DefId, decl: &hir::FnDecl, - body: &hir::Body, + body: &hir::Body<'_>, expected_sig: ExpectedSig<'tcx>, ) -> ClosureSignatures<'tcx> { debug!( @@ -450,7 +450,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { &self, expr_def_id: DefId, decl: &hir::FnDecl, - body: &hir::Body, + body: &hir::Body<'_>, expected_sig: ExpectedSig<'tcx>, ) -> ClosureSignatures<'tcx> { let expr_map_node = self.tcx.hir().get_if_local(expr_def_id).unwrap(); @@ -482,7 +482,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { &self, expr_def_id: DefId, decl: &hir::FnDecl, - body: &hir::Body, + body: &hir::Body<'_>, expected_sigs: &ClosureSignatures<'tcx>, ) -> InferResult<'tcx, ()> { // Get the signature S that the user gave. @@ -590,7 +590,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { &self, expr_def_id: DefId, decl: &hir::FnDecl, - body: &hir::Body, + body: &hir::Body<'_>, ) -> ty::PolyFnSig<'tcx> { let astconv: &dyn AstConv<'_> = self; @@ -788,7 +788,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { fn closure_sigs( &self, expr_def_id: DefId, - body: &hir::Body, + body: &hir::Body<'_>, bound_sig: ty::PolyFnSig<'tcx>, ) -> ClosureSignatures<'tcx> { let liberated_sig = self.tcx() diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index 1cc3f3690f9..1cd1d4fcd3f 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -1260,7 +1260,7 @@ fn check_fn<'a, 'tcx>( fn_sig: ty::FnSig<'tcx>, decl: &'tcx hir::FnDecl, fn_id: hir::HirId, - body: &'tcx hir::Body, + body: &'tcx hir::Body<'tcx>, can_be_generator: Option, ) -> (FnCtxt<'a, 'tcx>, Option>) { let mut fn_sig = fn_sig.clone(); @@ -1327,7 +1327,7 @@ fn check_fn<'a, 'tcx>( for (param_ty, param) in fn_sig.inputs().iter().copied() .chain(maybe_va_list) - .zip(&body.params) + .zip(body.params) { // Check the pattern. fcx.check_pat_top(¶m.pat, param_ty, None); diff --git a/src/librustc_typeck/check/regionck.rs b/src/librustc_typeck/check/regionck.rs index 179c462f5e3..396ff5ce518 100644 --- a/src/librustc_typeck/check/regionck.rs +++ b/src/librustc_typeck/check/regionck.rs @@ -106,7 +106,7 @@ macro_rules! ignore_err { // PUBLIC ENTRY POINTS impl<'a, 'tcx> FnCtxt<'a, 'tcx> { - pub fn regionck_expr(&self, body: &'tcx hir::Body) { + pub fn regionck_expr(&self, body: &'tcx hir::Body<'tcx>) { let subject = self.tcx.hir().body_owner_def_id(body.id()); let id = body.value.hir_id; let mut rcx = RegionCtxt::new( @@ -159,7 +159,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { /// rest of type check and because sometimes we need type /// inference to have completed before we can determine which /// constraints to add. - pub fn regionck_fn(&self, fn_id: hir::HirId, body: &'tcx hir::Body) { + pub fn regionck_fn(&self, fn_id: hir::HirId, body: &'tcx hir::Body<'tcx>) { debug!("regionck_fn(id={})", fn_id); let subject = self.tcx.hir().body_owner_def_id(body.id()); let hir_id = body.value.hir_id; @@ -300,7 +300,7 @@ impl<'a, 'tcx> RegionCtxt<'a, 'tcx> { fn visit_fn_body( &mut self, id: hir::HirId, // the id of the fn itself - body: &'tcx hir::Body, + body: &'tcx hir::Body<'tcx>, span: Span, ) { // When we enter a function, we can derive diff --git a/src/librustc_typeck/check/upvar.rs b/src/librustc_typeck/check/upvar.rs index 68cb0080b7d..2788aa6b83e 100644 --- a/src/librustc_typeck/check/upvar.rs +++ b/src/librustc_typeck/check/upvar.rs @@ -46,7 +46,7 @@ use syntax::ast; use syntax_pos::Span; impl<'a, 'tcx> FnCtxt<'a, 'tcx> { - pub fn closure_analyze(&self, body: &'tcx hir::Body) { + pub fn closure_analyze(&self, body: &'tcx hir::Body<'tcx>) { InferBorrowKindVisitor { fcx: self }.visit_body(body); // it's our job to process these. @@ -81,7 +81,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { &self, closure_hir_id: hir::HirId, span: Span, - body: &hir::Body, + body: &hir::Body<'_>, capture_clause: hir::CaptureBy, ) { diff --git a/src/librustc_typeck/check/writeback.rs b/src/librustc_typeck/check/writeback.rs index 35f25b322e0..27ce7d7c3e0 100644 --- a/src/librustc_typeck/check/writeback.rs +++ b/src/librustc_typeck/check/writeback.rs @@ -32,7 +32,7 @@ use std::mem; // resolve_type_vars_in_body, which creates a new TypeTables which // doesn't contain any inference types. impl<'a, 'tcx> FnCtxt<'a, 'tcx> { - pub fn resolve_type_vars_in_body(&self, body: &'tcx hir::Body) -> &'tcx ty::TypeckTables<'tcx> { + pub fn resolve_type_vars_in_body(&self, body: &'tcx hir::Body<'tcx>) -> &'tcx ty::TypeckTables<'tcx> { let item_id = self.tcx.hir().body_owner(body.id()); let item_def_id = self.tcx.hir().local_def_id(item_id); @@ -41,7 +41,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { let rustc_dump_user_substs = self.tcx.has_attr(item_def_id, sym::rustc_dump_user_substs); let mut wbcx = WritebackCx::new(self, body, rustc_dump_user_substs); - for param in &body.params { + for param in body.params { wbcx.visit_node_id(param.pat.span, param.hir_id); } // Type only exists for constants and statics, not functions. @@ -102,7 +102,7 @@ struct WritebackCx<'cx, 'tcx> { tables: ty::TypeckTables<'tcx>, - body: &'tcx hir::Body, + body: &'tcx hir::Body<'tcx>, rustc_dump_user_substs: bool, } @@ -110,7 +110,7 @@ struct WritebackCx<'cx, 'tcx> { impl<'cx, 'tcx> WritebackCx<'cx, 'tcx> { fn new( fcx: &'cx FnCtxt<'cx, 'tcx>, - body: &'tcx hir::Body, + body: &'tcx hir::Body<'tcx>, rustc_dump_user_substs: bool, ) -> WritebackCx<'cx, 'tcx> { let owner = body.id().hir_id; @@ -265,7 +265,7 @@ impl<'cx, 'tcx> Visitor<'tcx> for WritebackCx<'cx, 'tcx> { match e.kind { hir::ExprKind::Closure(_, _, body, _, _) => { let body = self.fcx.tcx.hir().body(body); - for param in &body.params { + for param in body.params { self.visit_node_id(e.span, param.hir_id); } @@ -698,14 +698,14 @@ struct Resolver<'cx, 'tcx> { tcx: TyCtxt<'tcx>, infcx: &'cx InferCtxt<'cx, 'tcx>, span: &'cx dyn Locatable, - body: &'tcx hir::Body, + body: &'tcx hir::Body<'tcx>, } impl<'cx, 'tcx> Resolver<'cx, 'tcx> { fn new( fcx: &'cx FnCtxt<'cx, 'tcx>, span: &'cx dyn Locatable, - body: &'tcx hir::Body, + body: &'tcx hir::Body<'tcx>, ) -> Resolver<'cx, 'tcx> { Resolver { tcx: fcx.tcx, diff --git a/src/librustc_typeck/expr_use_visitor.rs b/src/librustc_typeck/expr_use_visitor.rs index 03d7ab2d633..7e67d30db18 100644 --- a/src/librustc_typeck/expr_use_visitor.rs +++ b/src/librustc_typeck/expr_use_visitor.rs @@ -131,10 +131,10 @@ impl<'a, 'tcx> ExprUseVisitor<'a, 'tcx> { } } - pub fn consume_body(&mut self, body: &hir::Body) { + pub fn consume_body(&mut self, body: &hir::Body<'_>) { debug!("consume_body(body={:?})", body); - for param in &body.params { + for param in body.params { let param_ty = return_if_err!(self.mc.pat_ty_adjusted(¶m.pat)); debug!("consume_body: param_ty = {:?}", param_ty);