for (r, vid) in seeds {
// While all things transitively reachable in the graph
// from the variable (`'0` in the example above).
- let seed_index = NodeIndex(vid.index as usize);
+ let seed_index = NodeIndex(vid.index() as usize);
for succ_index in graph.depth_traverse(seed_index, OUTGOING) {
let succ_index = succ_index.0;
match *constraint {
Constraint::VarSubVar(a_id, b_id) => {
graph.add_edge(
- NodeIndex(a_id.index as usize),
- NodeIndex(b_id.index as usize),
+ NodeIndex(a_id.index() as usize),
+ NodeIndex(b_id.index() as usize),
*constraint,
);
}
Constraint::RegSubVar(_, b_id) => {
- graph.add_edge(dummy_source, NodeIndex(b_id.index as usize), *constraint);
+ graph.add_edge(dummy_source, NodeIndex(b_id.index() as usize), *constraint);
}
Constraint::VarSubReg(a_id, _) => {
- graph.add_edge(NodeIndex(a_id.index as usize), dummy_sink, *constraint);
+ graph.add_edge(NodeIndex(a_id.index() as usize), dummy_sink, *constraint);
}
Constraint::RegSubReg(..) => {
// this would be an edge from `dummy_source` to
let node_idx = state.stack.pop().unwrap();
// check whether we've visited this node on some previous walk
- if dup_vec[node_idx.index as usize] == u32::MAX {
- dup_vec[node_idx.index as usize] = orig_node_idx.index;
- } else if dup_vec[node_idx.index as usize] != orig_node_idx.index {
+ if dup_vec[node_idx.index() as usize] == u32::MAX {
+ dup_vec[node_idx.index() as usize] = orig_node_idx.index() as u32;
+ } else if dup_vec[node_idx.index() as usize] != orig_node_idx.index() as u32 {
state.dup_found = true;
}
) {
debug!("process_edges(source_vid={:?}, dir={:?})", source_vid, dir);
- let source_node_index = NodeIndex(source_vid.index as usize);
+ let source_node_index = NodeIndex(source_vid.index() as usize);
for (_, edge) in graph.adjacent_edges(source_node_index, dir) {
match edge.data {
Constraint::VarSubVar(from_vid, to_vid) => {
use super::{MiscVariable, RegionVariableOrigin, SubregionOrigin};
use super::unify_key;
-use rustc_data_structures::indexed_vec::IndexVec;
+use rustc_data_structures::indexed_vec::{IndexVec, Idx};
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
use rustc_data_structures::unify::{self, UnificationTable};
use ty::{self, Ty, TyCtxt};
}
AddVar(vid) => {
self.var_origins.pop().unwrap();
- assert_eq!(self.var_origins.len(), vid.index as usize);
+ assert_eq!(self.var_origins.len(), vid.index() as usize);
}
AddConstraint(ref constraint) => {
self.data.constraints.remove(constraint);
impl Combine for RegionVidKey {
fn combine(&self, other: &RegionVidKey) -> RegionVidKey {
- let min_vid = if self.min_vid.index < other.min_vid.index {
+ let min_vid = if self.min_vid.index() < other.min_vid.index() {
self.min_vid
} else {
other.min_vid
impl UnifyKey for ty::RegionVid {
type Value = RegionVidKey;
- fn index(&self) -> u32 { self.index }
- fn from_index(i: u32) -> ty::RegionVid { ty::RegionVid { index: i } }
+ fn index(&self) -> u32 { self.0 }
+ fn from_index(i: u32) -> ty::RegionVid { ty::RegionVid(i) }
fn tag(_: Option<ty::RegionVid>) -> &'static str { "RegionVid" }
}
pub index: u32,
}
-#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Copy, PartialOrd, Ord)]
-pub struct RegionVid {
- pub index: u32,
-}
-
-// FIXME: We could convert this to use `newtype_index!`
-impl Idx for RegionVid {
- fn new(value: usize) -> Self {
- assert!(value < ::std::u32::MAX as usize);
- RegionVid { index: value as u32 }
- }
-
- fn index(self) -> usize {
- self.index as usize
- }
-}
+newtype_index!(RegionVid
+ {
+ pub idx
+ DEBUG_FORMAT = custom,
+ });
#[derive(Clone, Copy, PartialEq, Eq, Hash, RustcEncodable, RustcDecodable, PartialOrd, Ord)]
pub struct SkolemizedRegionVid {
}
}
ty::ReVar(region_vid) if cx.identify_regions => {
- write!(f, "'{}rv", region_vid.index)
+ write!(f, "'{}rv", region_vid.index())
}
ty::ReScope(_) |
ty::ReVar(_) |
impl fmt::Debug for ty::RegionVid {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- write!(f, "'_#{}r", self.index)
+ write!(f, "'_#{}r", self.index())
}
}