diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2017-04-29 07:05:03 -0400 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2017-04-30 17:03:32 -0400 |
| commit | 6c2f64bdd8213012562f56e8fc393d99803e1c27 (patch) | |
| tree | b4b547a3df1f60fe23b014801298152db270b4a1 | |
| parent | 73cd9bde373cc134aa2ebb6a8064d532621ca0a6 (diff) | |
| download | rust-6c2f64bdd8213012562f56e8fc393d99803e1c27.tar.gz rust-6c2f64bdd8213012562f56e8fc393d99803e1c27.zip | |
modify `ExprUseVisitor` and friends to take region-maps, not def-id
| -rw-r--r-- | src/librustc/middle/expr_use_visitor.rs | 9 | ||||
| -rw-r--r-- | src/librustc/middle/mem_categorization.rs | 9 | ||||
| -rw-r--r-- | src/librustc_borrowck/borrowck/check_loans.rs | 2 | ||||
| -rw-r--r-- | src/librustc_borrowck/borrowck/gather_loans/mod.rs | 2 | ||||
| -rw-r--r-- | src/librustc_const_eval/check_match.rs | 11 | ||||
| -rw-r--r-- | src/librustc_passes/consts.rs | 3 | ||||
| -rw-r--r-- | src/librustc_typeck/check/regionck.rs | 18 | ||||
| -rw-r--r-- | src/librustc_typeck/check/upvar.rs | 3 |
8 files changed, 30 insertions, 27 deletions
diff --git a/src/librustc/middle/expr_use_visitor.rs b/src/librustc/middle/expr_use_visitor.rs index a49f3d3b7a7..41f9311dd80 100644 --- a/src/librustc/middle/expr_use_visitor.rs +++ b/src/librustc/middle/expr_use_visitor.rs @@ -23,6 +23,7 @@ use hir::def::Def; use hir::def_id::{DefId}; use infer::InferCtxt; use middle::mem_categorization as mc; +use middle::region::RegionMaps; use ty::{self, TyCtxt, adjustment}; use hir::{self, PatKind}; @@ -270,24 +271,24 @@ enum PassArgs { impl<'a, 'gcx, 'tcx> ExprUseVisitor<'a, 'gcx, 'tcx> { pub fn new(delegate: &'a mut (Delegate<'tcx>+'a), - context: DefId, + region_maps: &'a RegionMaps<'tcx>, infcx: &'a InferCtxt<'a, 'gcx, 'tcx>) -> Self { ExprUseVisitor::with_options(delegate, infcx, - context, + region_maps, mc::MemCategorizationOptions::default()) } pub fn with_options(delegate: &'a mut (Delegate<'tcx>+'a), infcx: &'a InferCtxt<'a, 'gcx, 'tcx>, - context: DefId, + region_maps: &'a RegionMaps<'tcx>, options: mc::MemCategorizationOptions) -> Self { ExprUseVisitor { - mc: mc::MemCategorizationContext::with_options(infcx, context, options), + mc: mc::MemCategorizationContext::with_options(infcx, region_maps, options), delegate: delegate } } diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 0e2db746e45..cbe69de4010 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -290,7 +290,7 @@ impl ast_node for hir::Pat { #[derive(Clone)] pub struct MemCategorizationContext<'a, 'gcx: 'a+'tcx, 'tcx: 'a> { pub infcx: &'a InferCtxt<'a, 'gcx, 'tcx>, - pub region_maps: Rc<RegionMaps<'tcx>>, + pub region_maps: &'a RegionMaps<'tcx>, options: MemCategorizationOptions, } @@ -406,16 +406,15 @@ impl MutabilityCategory { impl<'a, 'gcx, 'tcx> MemCategorizationContext<'a, 'gcx, 'tcx> { /// Context should be the `DefId` we use to fetch region-maps. pub fn new(infcx: &'a InferCtxt<'a, 'gcx, 'tcx>, - context: DefId) + region_maps: &'a RegionMaps<'tcx>) -> MemCategorizationContext<'a, 'gcx, 'tcx> { - MemCategorizationContext::with_options(infcx, context, MemCategorizationOptions::default()) + MemCategorizationContext::with_options(infcx, region_maps, MemCategorizationOptions::default()) } pub fn with_options(infcx: &'a InferCtxt<'a, 'gcx, 'tcx>, - context: DefId, + region_maps: &'a RegionMaps<'tcx>, options: MemCategorizationOptions) -> MemCategorizationContext<'a, 'gcx, 'tcx> { - let region_maps = infcx.tcx.region_maps(context); MemCategorizationContext { infcx: infcx, region_maps: region_maps, diff --git a/src/librustc_borrowck/borrowck/check_loans.rs b/src/librustc_borrowck/borrowck/check_loans.rs index 6e43943bc17..1c5a6c3985c 100644 --- a/src/librustc_borrowck/borrowck/check_loans.rs +++ b/src/librustc_borrowck/borrowck/check_loans.rs @@ -199,7 +199,7 @@ pub fn check_loans<'a, 'b, 'c, 'tcx>(bccx: &BorrowckCtxt<'a, 'tcx>, all_loans: all_loans, param_env: &infcx.parameter_environment }; - euv::ExprUseVisitor::new(&mut clcx, bccx.owner_def_id, &infcx).consume_body(body); + euv::ExprUseVisitor::new(&mut clcx, &bccx.region_maps, &infcx).consume_body(body); } #[derive(PartialEq)] diff --git a/src/librustc_borrowck/borrowck/gather_loans/mod.rs b/src/librustc_borrowck/borrowck/gather_loans/mod.rs index 9a5d1008c40..8c1bcdc1fe2 100644 --- a/src/librustc_borrowck/borrowck/gather_loans/mod.rs +++ b/src/librustc_borrowck/borrowck/gather_loans/mod.rs @@ -51,7 +51,7 @@ pub fn gather_loans_in_fn<'a, 'tcx>(bccx: &BorrowckCtxt<'a, 'tcx>, }; let body = glcx.bccx.tcx.hir.body(body); - euv::ExprUseVisitor::new(&mut glcx, bccx.owner_def_id, &infcx).consume_body(body); + euv::ExprUseVisitor::new(&mut glcx, &bccx.region_maps, &infcx).consume_body(body); glcx.report_potential_errors(); let GatherLoanCtxt { all_loans, move_data, .. } = glcx; diff --git a/src/librustc_const_eval/check_match.rs b/src/librustc_const_eval/check_match.rs index 106b5a26d95..6ec5f38aa5b 100644 --- a/src/librustc_const_eval/check_match.rs +++ b/src/librustc_const_eval/check_match.rs @@ -14,11 +14,11 @@ use _match::WitnessPreference::*; use pattern::{Pattern, PatternContext, PatternError, PatternKind}; -use rustc::hir::def_id::DefId; use rustc::middle::expr_use_visitor::{ConsumeMode, Delegate, ExprUseVisitor}; use rustc::middle::expr_use_visitor::{LoanCause, MutateMode}; use rustc::middle::expr_use_visitor as euv; use rustc::middle::mem_categorization::{cmt}; +use rustc::middle::region::RegionMaps; use rustc::session::Session; use rustc::traits::Reveal; use rustc::ty::{self, Ty, TyCtxt}; @@ -47,11 +47,12 @@ impl<'a, 'tcx> Visitor<'tcx> for OuterVisitor<'a, 'tcx> { intravisit::walk_fn(self, fk, fd, b, s, id); let region_context = self.tcx.hir.local_def_id(id); + let region_maps = self.tcx.region_maps(region_context); MatchVisitor { tcx: self.tcx, tables: self.tcx.body_tables(b), - region_context: region_context, + region_maps: ®ion_maps, param_env: &ty::ParameterEnvironment::for_item(self.tcx, id) }.visit_body(self.tcx.hir.body(b)); } @@ -68,9 +69,9 @@ fn create_e0004<'a>(sess: &'a Session, sp: Span, error_message: String) -> Diagn struct MatchVisitor<'a, 'tcx: 'a> { tcx: TyCtxt<'a, 'tcx, 'tcx>, - region_context: DefId, tables: &'a ty::TypeckTables<'tcx>, - param_env: &'a ty::ParameterEnvironment<'tcx> + param_env: &'a ty::ParameterEnvironment<'tcx>, + region_maps: &'a RegionMaps<'tcx>, } impl<'a, 'tcx> Visitor<'tcx> for MatchVisitor<'a, 'tcx> { @@ -522,7 +523,7 @@ fn check_for_mutation_in_guard(cx: &MatchVisitor, guard: &hir::Expr) { let mut checker = MutationChecker { cx: cx, }; - ExprUseVisitor::new(&mut checker, cx.region_context, &infcx).walk_expr(guard); + ExprUseVisitor::new(&mut checker, cx.region_maps, &infcx).walk_expr(guard); }); } diff --git a/src/librustc_passes/consts.rs b/src/librustc_passes/consts.rs index cd2d9165c6a..47ea144dcde 100644 --- a/src/librustc_passes/consts.rs +++ b/src/librustc_passes/consts.rs @@ -141,7 +141,8 @@ impl<'a, 'tcx> Visitor<'tcx> for CheckCrateVisitor<'a, 'tcx> { let outer_penv = self.tcx.infer_ctxt(body_id, Reveal::UserFacing).enter(|infcx| { let param_env = infcx.parameter_environment.clone(); let outer_penv = mem::replace(&mut self.param_env, param_env); - euv::ExprUseVisitor::new(self, item_def_id, &infcx).consume_body(body); + let region_maps = &self.tcx.region_maps(item_def_id);; + euv::ExprUseVisitor::new(self, region_maps, &infcx).consume_body(body); outer_penv }); diff --git a/src/librustc_typeck/check/regionck.rs b/src/librustc_typeck/check/regionck.rs index b241f52f62e..8a63d501da8 100644 --- a/src/librustc_typeck/check/regionck.rs +++ b/src/librustc_typeck/check/regionck.rs @@ -577,7 +577,7 @@ impl<'a, 'gcx, 'tcx> Visitor<'gcx> for RegionCtxt<'a, 'gcx, 'tcx> { // If necessary, constrain destructors in the unadjusted form of this // expression. let cmt_result = { - let mc = mc::MemCategorizationContext::new(self, self.subject_def_id); + let mc = mc::MemCategorizationContext::new(self, &self.region_maps); mc.cat_expr_unadjusted(expr) }; match cmt_result { @@ -594,7 +594,7 @@ impl<'a, 'gcx, 'tcx> Visitor<'gcx> for RegionCtxt<'a, 'gcx, 'tcx> { // If necessary, constrain destructors in this expression. This will be // the adjusted form if there is an adjustment. let cmt_result = { - let mc = mc::MemCategorizationContext::new(self, self.subject_def_id); + let mc = mc::MemCategorizationContext::new(self, &self.region_maps); mc.cat_expr(expr) }; match cmt_result { @@ -956,7 +956,7 @@ impl<'a, 'gcx, 'tcx> RegionCtxt<'a, 'gcx, 'tcx> { r, m); { - let mc = mc::MemCategorizationContext::new(self, self.subject_def_id); + let mc = mc::MemCategorizationContext::new(self, &self.region_maps); let self_cmt = ignore_err!(mc.cat_expr_autoderefd(deref_expr, i)); debug!("constrain_autoderefs: self_cmt={:?}", self_cmt); @@ -1068,7 +1068,7 @@ impl<'a, 'gcx, 'tcx> RegionCtxt<'a, 'gcx, 'tcx> { debug!("link_addr_of(expr={:?}, base={:?})", expr, base); let cmt = { - let mc = mc::MemCategorizationContext::new(self, self.subject_def_id); + let mc = mc::MemCategorizationContext::new(self, &self.region_maps); ignore_err!(mc.cat_expr(base)) }; @@ -1086,7 +1086,7 @@ impl<'a, 'gcx, 'tcx> RegionCtxt<'a, 'gcx, 'tcx> { None => { return; } Some(ref expr) => &**expr, }; - let mc = &mc::MemCategorizationContext::new(self, self.subject_def_id); + let mc = &mc::MemCategorizationContext::new(self, &self.region_maps); let discr_cmt = ignore_err!(mc.cat_expr(init_expr)); self.link_pattern(mc, discr_cmt, &local.pat); } @@ -1096,7 +1096,7 @@ impl<'a, 'gcx, 'tcx> RegionCtxt<'a, 'gcx, 'tcx> { /// linked to the lifetime of its guarantor (if any). fn link_match(&self, discr: &hir::Expr, arms: &[hir::Arm]) { debug!("regionck::for_match()"); - let mc = &mc::MemCategorizationContext::new(self, self.subject_def_id); + let mc = &mc::MemCategorizationContext::new(self, &self.region_maps); let discr_cmt = ignore_err!(mc.cat_expr(discr)); debug!("discr_cmt={:?}", discr_cmt); for arm in arms { @@ -1111,7 +1111,7 @@ impl<'a, 'gcx, 'tcx> RegionCtxt<'a, 'gcx, 'tcx> { /// linked to the lifetime of its guarantor (if any). fn link_fn_args(&self, body_scope: CodeExtent<'tcx>, args: &[hir::Arg]) { debug!("regionck::link_fn_args(body_scope={:?})", body_scope); - let mc = &mc::MemCategorizationContext::new(self, self.subject_def_id); + let mc = &mc::MemCategorizationContext::new(self, &self.region_maps); for arg in args { let arg_ty = self.node_ty(arg.id); let re_scope = self.tcx.mk_region(ty::ReScope(body_scope)); @@ -1154,7 +1154,7 @@ impl<'a, 'gcx, 'tcx> RegionCtxt<'a, 'gcx, 'tcx> { autoref: &adjustment::AutoBorrow<'tcx>) { debug!("link_autoref(autoderefs={}, autoref={:?})", autoderefs, autoref); - let mc = mc::MemCategorizationContext::new(self, self.subject_def_id); + let mc = mc::MemCategorizationContext::new(self, &self.region_maps); let expr_cmt = ignore_err!(mc.cat_expr_autoderefd(expr, autoderefs)); debug!("expr_cmt={:?}", expr_cmt); @@ -1178,7 +1178,7 @@ impl<'a, 'gcx, 'tcx> RegionCtxt<'a, 'gcx, 'tcx> { callee_scope: CodeExtent<'tcx>) { debug!("link_by_ref(expr={:?}, callee_scope={:?})", expr, callee_scope); - let mc = mc::MemCategorizationContext::new(self, self.subject_def_id); + let mc = mc::MemCategorizationContext::new(self, &self.region_maps); let expr_cmt = ignore_err!(mc.cat_expr(expr)); let borrow_region = self.tcx.mk_region(ty::ReScope(callee_scope)); self.link_region(expr.span, borrow_region, ty::ImmBorrow, expr_cmt); diff --git a/src/librustc_typeck/check/upvar.rs b/src/librustc_typeck/check/upvar.rs index 227f06436ee..9bfc5f3f0ea 100644 --- a/src/librustc_typeck/check/upvar.rs +++ b/src/librustc_typeck/check/upvar.rs @@ -165,10 +165,11 @@ impl<'a, 'gcx, 'tcx> AdjustBorrowKind<'a, 'gcx, 'tcx> { { let body_owner_def_id = self.fcx.tcx.hir.body_owner_def_id(body.id()); + let region_maps = &self.fcx.tcx.region_maps(body_owner_def_id); let mut euv = euv::ExprUseVisitor::with_options(self, self.fcx, - body_owner_def_id, + region_maps, mc::MemCategorizationOptions { during_closure_kind_inference: true }); |
