Skip to content

Commit 89c1b60

Browse files
committed
replace usize with RegionIndex in indices map
1 parent ad93b69 commit 89c1b60

File tree

4 files changed

+20
-17
lines changed

4 files changed

+20
-17
lines changed

src/librustc_mir/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Rust MIR: a lowered representation of Rust. Also: an experiment!
2323
#![feature(core_intrinsics)]
2424
#![feature(decl_macro)]
2525
#![feature(i128_type)]
26+
#![feature(match_default_bindings)]
2627
#![feature(rustc_diagnostic_macros)]
2728
#![feature(placement_in_syntax)]
2829
#![feature(collection_placement)]

src/librustc_mir/transform/nll/free_regions.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,17 @@ use rustc::middle::free_region::FreeRegionMap;
2828
use rustc::ty;
2929
use rustc::ty::subst::Substs;
3030
use rustc::util::nodemap::FxHashMap;
31+
use rustc_data_structures::indexed_vec::Idx;
32+
33+
use super::RegionIndex;
3134

3235
#[derive(Debug)]
3336
pub struct FreeRegions<'tcx> {
3437
/// Given a free region defined on this function (either early- or
35-
/// late-bound), this maps it to its internal region index. The
36-
/// corresponding variable will be "capped" so that it cannot
37-
/// grow.
38-
pub indices: FxHashMap<ty::Region<'tcx>, usize>,
38+
/// late-bound), this maps it to its internal region index. When
39+
/// the region context is created, the first N variables will be
40+
/// created based on these indices.
41+
pub indices: FxHashMap<ty::Region<'tcx>, RegionIndex>,
3942

4043
/// The map from the typeck tables telling us how to relate free regions.
4144
pub free_region_map: &'tcx FreeRegionMap<'tcx>,
@@ -78,9 +81,9 @@ pub fn free_regions<'a, 'gcx, 'tcx>(
7881
}
7982

8083
fn insert_free_region<'tcx>(
81-
free_regions: &mut FxHashMap<ty::Region<'tcx>, usize>,
84+
free_regions: &mut FxHashMap<ty::Region<'tcx>, RegionIndex>,
8285
region: ty::Region<'tcx>,
8386
) {
84-
let len = free_regions.len();
85-
free_regions.entry(region).or_insert(len);
87+
let next = RegionIndex::new(free_regions.len());
88+
free_regions.entry(region).or_insert(next);
8689
}

src/librustc_mir/transform/nll/region_infer.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use super::free_regions::FreeRegions;
1313
use rustc::infer::InferCtxt;
1414
use rustc::mir::{Location, Mir};
1515
use rustc::ty;
16-
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
16+
use rustc_data_structures::indexed_vec::IndexVec;
1717
use rustc_data_structures::fx::FxHashSet;
1818
use std::collections::BTreeSet;
1919
use std::fmt;
@@ -151,15 +151,13 @@ impl<'a, 'gcx, 'tcx> RegionInferenceContext<'tcx> {
151151
/// is just itself. R1 (`'b`) in contrast also outlives `'a` and
152152
/// hence contains R0 and R1.
153153
fn init_free_regions(&mut self, free_regions: &FreeRegions<'tcx>, mir: &Mir<'tcx>) {
154-
let &FreeRegions {
155-
ref indices,
156-
ref free_region_map,
154+
let FreeRegions {
155+
indices,
156+
free_region_map,
157157
} = free_regions;
158158

159159
// For each free region X:
160-
for (free_region, index) in indices {
161-
let variable = RegionIndex::new(*index);
162-
160+
for (free_region, &variable) in indices {
163161
self.free_regions.push(variable);
164162

165163
// Initialize the name and a few other details.
@@ -184,7 +182,7 @@ impl<'a, 'gcx, 'tcx> RegionInferenceContext<'tcx> {
184182
// Go through each region Y that outlives X (i.e., where
185183
// Y: X is true). Add `end(X)` into the set for `Y`.
186184
for superregion in free_region_map.regions_that_outlive(&free_region) {
187-
let superregion_index = RegionIndex::new(indices[superregion]);
185+
let superregion_index = indices[superregion];
188186
self.definitions[superregion_index]
189187
.value
190188
.add_free_region(variable);

src/librustc_mir/transform/nll/renumber.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11-
use rustc_data_structures::indexed_vec::Idx;
11+
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
1212
use rustc::ty::subst::{Kind, Substs};
1313
use rustc::ty::{self, ClosureSubsts, RegionKind, RegionVid, Ty, TypeFoldable};
1414
use rustc::mir::{BasicBlock, Local, Location, Mir, Rvalue, Statement, StatementKind};
@@ -17,6 +17,7 @@ use rustc::infer::{self as rustc_infer, InferCtxt};
1717
use syntax_pos::DUMMY_SP;
1818
use std::collections::HashMap;
1919

20+
use super::RegionIndex;
2021
use super::free_regions::FreeRegions;
2122

2223
/// Replaces all free regions appearing in the MIR with fresh
@@ -51,7 +52,7 @@ struct NLLVisitor<'a, 'gcx: 'a + 'tcx, 'tcx: 'a> {
5152
num_region_variables: usize,
5253
infcx: &'a InferCtxt<'a, 'gcx, 'tcx>,
5354
free_regions: &'a FreeRegions<'tcx>,
54-
free_region_inference_vars: Vec<ty::Region<'tcx>>,
55+
free_region_inference_vars: IndexVec<RegionIndex, ty::Region<'tcx>>,
5556
arg_count: usize,
5657
}
5758

0 commit comments

Comments
 (0)