let free_regions = &free_regions::free_regions(infcx, def_id);
// Replace all regions with fresh inference variables.
- let num_region_variables = renumber::renumber_mir(infcx, free_regions, mir);
+ renumber::renumber_mir(infcx, free_regions, mir);
// Compute what is live where.
let liveness = &LivenessResults {
// Create the region inference context, generate the constraints,
// and then solve them.
- let mut regioncx = RegionInferenceContext::new(free_regions, num_region_variables, mir);
+ let mut regioncx = RegionInferenceContext::new(infcx, free_regions, mir);
let param_env = infcx.tcx.param_env(def_id);
constraint_generation::generate_constraints(infcx, &mut regioncx, &mir, param_env, liveness);
regioncx.solve(infcx, &mir);
/// of those will be constant regions representing the free
/// regions defined in `free_regions`.
pub fn new(
+ infcx: &InferCtxt<'_, '_, 'tcx>,
free_regions: &FreeRegions<'tcx>,
- num_region_variables: usize,
mir: &Mir<'tcx>,
) -> Self {
let mut result = Self {
- definitions: (0..num_region_variables)
- .map(|_| RegionDefinition::default())
- .collect(),
+ definitions: infcx.all_region_vars().map(|_| RegionDefinition::default()).collect(),
constraints: Vec::new(),
free_regions: Vec::new(),
};
infcx: &InferCtxt<'a, 'gcx, 'tcx>,
free_regions: &FreeRegions<'tcx>,
mir: &mut Mir<'tcx>,
-) -> usize {
+) {
// Create inference variables for each of the free regions
// declared on the function signature.
let free_region_inference_vars = (0..free_regions.indices.len())
let mut visitor = NLLVisitor {
infcx,
lookup_map: HashMap::new(),
- num_region_variables: free_regions.indices.len(),
free_regions,
free_region_inference_vars,
arg_count: mir.arg_count,
};
visitor.visit_mir(mir);
- visitor.num_region_variables
}
struct NLLVisitor<'a, 'gcx: 'a + 'tcx, 'tcx: 'a> {
lookup_map: HashMap<RegionVid, TyContext>,
- num_region_variables: usize,
infcx: &'a InferCtxt<'a, 'gcx, 'tcx>,
free_regions: &'a FreeRegions<'tcx>,
free_region_inference_vars: IndexVec<RegionVid, ty::Region<'tcx>>,
self.infcx
.tcx
.fold_regions(value, &mut false, |_region, _depth| {
- self.num_region_variables += 1;
- self.infcx
- .next_region_var(rustc_infer::MiscVariable(DUMMY_SP))
+ self.infcx.next_region_var(rustc_infer::MiscVariable(DUMMY_SP))
})
}