Skip to content

Commit

Permalink
rewrite dup_vec to use IndexVec instead of u32
Browse files Browse the repository at this point in the history
  • Loading branch information
nikomatsakis committed Jul 2, 2019
1 parent b4a3753 commit 9588f7f
Showing 1 changed file with 6 additions and 7 deletions.
13 changes: 6 additions & 7 deletions src/librustc/infer/lexical_region_resolve/mod.rs
Expand Up @@ -22,7 +22,6 @@ use rustc_data_structures::graph::implementation::{
use rustc_data_structures::indexed_vec::{Idx, IndexVec}; use rustc_data_structures::indexed_vec::{Idx, IndexVec};
use smallvec::SmallVec; use smallvec::SmallVec;
use std::fmt; use std::fmt;
use std::u32;
use syntax_pos::Span; use syntax_pos::Span;


mod graphviz; mod graphviz;
Expand Down Expand Up @@ -623,7 +622,7 @@ impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx> {
// idea is to report errors that derive from independent // idea is to report errors that derive from independent
// regions of the graph, but not those that derive from // regions of the graph, but not those that derive from
// overlapping locations. // overlapping locations.
let mut dup_vec = vec![u32::MAX; self.num_vars()]; let mut dup_vec = IndexVec::from_elem_n(None, self.num_vars());


for (node_vid, value) in var_data.values.iter_enumerated() { for (node_vid, value) in var_data.values.iter_enumerated() {
match *value { match *value {
Expand Down Expand Up @@ -702,7 +701,7 @@ impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx> {
fn collect_error_for_expanding_node( fn collect_error_for_expanding_node(
&self, &self,
graph: &RegionGraph<'tcx>, graph: &RegionGraph<'tcx>,
dup_vec: &mut [u32], dup_vec: &mut IndexVec<RegionVid, Option<RegionVid>>,
node_idx: RegionVid, node_idx: RegionVid,
errors: &mut Vec<RegionResolutionError<'tcx>>, errors: &mut Vec<RegionResolutionError<'tcx>>,
) { ) {
Expand Down Expand Up @@ -781,7 +780,7 @@ impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx> {
graph: &RegionGraph<'tcx>, graph: &RegionGraph<'tcx>,
orig_node_idx: RegionVid, orig_node_idx: RegionVid,
dir: Direction, dir: Direction,
mut dup_vec: Option<&mut [u32]>, mut dup_vec: Option<&mut IndexVec<RegionVid, Option<RegionVid>>>,
) -> (Vec<RegionAndOrigin<'tcx>>, bool) { ) -> (Vec<RegionAndOrigin<'tcx>>, bool) {
struct WalkState<'tcx> { struct WalkState<'tcx> {
set: FxHashSet<RegionVid>, set: FxHashSet<RegionVid>,
Expand All @@ -806,9 +805,9 @@ impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx> {


// check whether we've visited this node on some previous walk // check whether we've visited this node on some previous walk
if let Some(dup_vec) = &mut dup_vec { if let Some(dup_vec) = &mut dup_vec {
if dup_vec[node_idx.index() as usize] == u32::MAX { if dup_vec[node_idx].is_none() {
dup_vec[node_idx.index() as usize] = orig_node_idx.index() as u32; dup_vec[node_idx] = Some(orig_node_idx);
} else if dup_vec[node_idx.index() as usize] != orig_node_idx.index() as u32 { } else if dup_vec[node_idx] != Some(orig_node_idx) {
state.dup_found = true; state.dup_found = true;
} }


Expand Down

0 comments on commit 9588f7f

Please sign in to comment.