Skip to content

Commit

Permalink
change skolemizations to use universe index
Browse files Browse the repository at this point in the history
  • Loading branch information
nikomatsakis authored and sgrif committed Mar 1, 2018
1 parent 13efaf0 commit 35e78b5
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 10 deletions.
18 changes: 15 additions & 3 deletions src/librustc/ty/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ pub use self::sty::{ExistentialTraitRef, PolyExistentialTraitRef};
pub use self::sty::{ExistentialProjection, PolyExistentialProjection, Const};
pub use self::sty::{BoundRegion, EarlyBoundRegion, FreeRegion, Region};
pub use self::sty::RegionKind;
pub use self::sty::{TyVid, IntVid, FloatVid, RegionVid, SkolemizedRegionVid};
pub use self::sty::{TyVid, IntVid, FloatVid, RegionVid};
pub use self::sty::BoundRegion::*;
pub use self::sty::InferTy::*;
pub use self::sty::RegionKind::*;
Expand Down Expand Up @@ -1345,7 +1345,7 @@ impl<'tcx> InstantiatedPredicates<'tcx> {
/// type name in a non-zero universe is a skolemized type -- an
/// idealized representative of "types in general" that we use for
/// checking generic functions.
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, RustcEncodable, RustcDecodable)]
pub struct UniverseIndex(u32);

impl UniverseIndex {
Expand All @@ -1365,7 +1365,19 @@ impl UniverseIndex {
/// region `'a`, but that region was not nameable from `U` because
/// it was not in scope there.
pub fn subuniverse(self) -> UniverseIndex {
UniverseIndex(self.0 + 1)
UniverseIndex(self.0.checked_add(1).unwrap())
}

pub fn from(v: u32) -> UniverseIndex {
UniverseIndex(v)
}

pub fn as_u32(&self) -> u32 {
self.0
}

pub fn as_usize(&self) -> usize {
self.0 as usize
}

/// Gets the "depth" of this universe in the universe tree. This
Expand Down
7 changes: 1 addition & 6 deletions src/librustc/ty/sty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1028,7 +1028,7 @@ pub enum RegionKind {

/// A skolemized region - basically the higher-ranked version of ReFree.
/// Should not exist after typeck.
ReSkolemized(SkolemizedRegionVid, BoundRegion),
ReSkolemized(ty::UniverseIndex, BoundRegion),

/// Empty lifetime is for data that is never accessed.
/// Bottom in the region lattice. We treat ReEmpty somewhat
Expand Down Expand Up @@ -1079,11 +1079,6 @@ newtype_index!(RegionVid
DEBUG_FORMAT = custom,
});

#[derive(Clone, Copy, PartialEq, Eq, Hash, RustcEncodable, RustcDecodable, PartialOrd, Ord)]
pub struct SkolemizedRegionVid {
pub index: u32,
}

#[derive(Clone, Copy, PartialEq, Eq, Hash, RustcEncodable, RustcDecodable)]
pub enum InferTy {
TyVar(TyVid),
Expand Down
2 changes: 1 addition & 1 deletion src/librustc/util/ppaux.rs
Original file line number Diff line number Diff line change
Expand Up @@ -786,7 +786,7 @@ define_print! {
}

ty::ReSkolemized(id, ref bound_region) => {
write!(f, "ReSkolemized({}, {:?})", id.index, bound_region)
write!(f, "ReSkolemized({:?}, {:?})", id, bound_region)
}

ty::ReEmpty => write!(f, "ReEmpty"),
Expand Down

0 comments on commit 35e78b5

Please sign in to comment.