Review changes
This commit is contained in:
parent
66c179946b
commit
3dea68de1d
67 changed files with 581 additions and 590 deletions
|
@ -44,9 +44,9 @@ impl<'tcx, E: TyEncoder<'tcx>> EncodableWithShorthand<'tcx, E> for Ty<'tcx> {
|
|||
}
|
||||
|
||||
impl<'tcx, E: TyEncoder<'tcx>> EncodableWithShorthand<'tcx, E> for ty::Predicate<'tcx> {
|
||||
type Variant = ty::Binder<ty::PredicateAtom<'tcx>>;
|
||||
type Variant = ty::Binder<ty::PredicateKind<'tcx>>;
|
||||
fn variant(&self) -> &Self::Variant {
|
||||
self.bound_atom_ref()
|
||||
self.kind_ref()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -226,9 +226,9 @@ impl<'tcx, D: TyDecoder<'tcx>> Decodable<D> for ty::Predicate<'tcx> {
|
|||
assert!(pos >= SHORTHAND_OFFSET);
|
||||
let shorthand = pos - SHORTHAND_OFFSET;
|
||||
|
||||
decoder.with_position(shorthand, ty::Binder::<ty::PredicateAtom<'tcx>>::decode)
|
||||
decoder.with_position(shorthand, ty::Binder::<ty::PredicateKind<'tcx>>::decode)
|
||||
} else {
|
||||
ty::Binder::<ty::PredicateAtom<'tcx>>::decode(decoder)
|
||||
ty::Binder::<ty::PredicateKind<'tcx>>::decode(decoder)
|
||||
}?;
|
||||
let predicate = decoder.tcx().mk_predicate(predicate_kind);
|
||||
Ok(predicate)
|
||||
|
|
|
@ -19,7 +19,7 @@ use crate::ty::TyKind::*;
|
|||
use crate::ty::{
|
||||
self, AdtDef, AdtKind, Binder, BindingMode, BoundVar, CanonicalPolyFnSig, Const, ConstVid,
|
||||
DefIdTree, ExistentialPredicate, FloatVar, FloatVid, GenericParamDefKind, InferConst, InferTy,
|
||||
IntVar, IntVid, List, ParamConst, ParamTy, PolyFnSig, Predicate, PredicateAtom, PredicateInner,
|
||||
IntVar, IntVid, List, ParamConst, ParamTy, PolyFnSig, Predicate, PredicateInner, PredicateKind,
|
||||
ProjectionTy, Region, RegionKind, ReprOptions, TraitObjectVisitor, Ty, TyKind, TyS, TyVar,
|
||||
TyVid, TypeAndMut, Visibility,
|
||||
};
|
||||
|
@ -133,7 +133,7 @@ impl<'tcx> CtxtInterners<'tcx> {
|
|||
}
|
||||
|
||||
#[inline(never)]
|
||||
fn intern_predicate(&self, binder: Binder<PredicateAtom<'tcx>>) -> &'tcx PredicateInner<'tcx> {
|
||||
fn intern_predicate(&self, binder: Binder<PredicateKind<'tcx>>) -> &'tcx PredicateInner<'tcx> {
|
||||
self.predicate
|
||||
.intern(binder, |binder| {
|
||||
let flags = super::flags::FlagComputation::for_predicate(binder);
|
||||
|
@ -1948,8 +1948,8 @@ impl<'tcx> Hash for Interned<'tcx, PredicateInner<'tcx>> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'tcx> Borrow<Binder<PredicateAtom<'tcx>>> for Interned<'tcx, PredicateInner<'tcx>> {
|
||||
fn borrow<'a>(&'a self) -> &'a Binder<PredicateAtom<'tcx>> {
|
||||
impl<'tcx> Borrow<Binder<PredicateKind<'tcx>>> for Interned<'tcx, PredicateInner<'tcx>> {
|
||||
fn borrow<'a>(&'a self) -> &'a Binder<PredicateKind<'tcx>> {
|
||||
&self.0.binder
|
||||
}
|
||||
}
|
||||
|
@ -2085,7 +2085,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
}
|
||||
|
||||
#[inline]
|
||||
pub fn mk_predicate(self, binder: Binder<PredicateAtom<'tcx>>) -> Predicate<'tcx> {
|
||||
pub fn mk_predicate(self, binder: Binder<PredicateKind<'tcx>>) -> Predicate<'tcx> {
|
||||
let inner = self.interners.intern_predicate(binder);
|
||||
Predicate { inner }
|
||||
}
|
||||
|
@ -2094,9 +2094,9 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
pub fn reuse_or_mk_predicate(
|
||||
self,
|
||||
pred: Predicate<'tcx>,
|
||||
binder: Binder<PredicateAtom<'tcx>>,
|
||||
binder: Binder<PredicateKind<'tcx>>,
|
||||
) -> Predicate<'tcx> {
|
||||
if pred.bound_atom() != binder { self.mk_predicate(binder) } else { pred }
|
||||
if pred.kind() != binder { self.mk_predicate(binder) } else { pred }
|
||||
}
|
||||
|
||||
pub fn mk_mach_int(self, tm: ast::IntTy) -> Ty<'tcx> {
|
||||
|
|
|
@ -22,7 +22,7 @@ impl FlagComputation {
|
|||
result
|
||||
}
|
||||
|
||||
pub fn for_predicate(binder: ty::Binder<ty::PredicateAtom<'_>>) -> FlagComputation {
|
||||
pub fn for_predicate(binder: ty::Binder<ty::PredicateKind<'_>>) -> FlagComputation {
|
||||
let mut result = FlagComputation::new();
|
||||
result.add_predicate(binder);
|
||||
result
|
||||
|
@ -204,46 +204,46 @@ impl FlagComputation {
|
|||
}
|
||||
}
|
||||
|
||||
fn add_predicate(&mut self, binder: ty::Binder<ty::PredicateAtom<'_>>) {
|
||||
fn add_predicate(&mut self, binder: ty::Binder<ty::PredicateKind<'_>>) {
|
||||
self.bound_computation(binder, |computation, atom| computation.add_predicate_atom(atom));
|
||||
}
|
||||
|
||||
fn add_predicate_atom(&mut self, atom: ty::PredicateAtom<'_>) {
|
||||
fn add_predicate_atom(&mut self, atom: ty::PredicateKind<'_>) {
|
||||
match atom {
|
||||
ty::PredicateAtom::Trait(trait_pred, _constness) => {
|
||||
ty::PredicateKind::Trait(trait_pred, _constness) => {
|
||||
self.add_substs(trait_pred.trait_ref.substs);
|
||||
}
|
||||
ty::PredicateAtom::RegionOutlives(ty::OutlivesPredicate(a, b)) => {
|
||||
ty::PredicateKind::RegionOutlives(ty::OutlivesPredicate(a, b)) => {
|
||||
self.add_region(a);
|
||||
self.add_region(b);
|
||||
}
|
||||
ty::PredicateAtom::TypeOutlives(ty::OutlivesPredicate(ty, region)) => {
|
||||
ty::PredicateKind::TypeOutlives(ty::OutlivesPredicate(ty, region)) => {
|
||||
self.add_ty(ty);
|
||||
self.add_region(region);
|
||||
}
|
||||
ty::PredicateAtom::Subtype(ty::SubtypePredicate { a_is_expected: _, a, b }) => {
|
||||
ty::PredicateKind::Subtype(ty::SubtypePredicate { a_is_expected: _, a, b }) => {
|
||||
self.add_ty(a);
|
||||
self.add_ty(b);
|
||||
}
|
||||
ty::PredicateAtom::Projection(ty::ProjectionPredicate { projection_ty, ty }) => {
|
||||
ty::PredicateKind::Projection(ty::ProjectionPredicate { projection_ty, ty }) => {
|
||||
self.add_projection_ty(projection_ty);
|
||||
self.add_ty(ty);
|
||||
}
|
||||
ty::PredicateAtom::WellFormed(arg) => {
|
||||
ty::PredicateKind::WellFormed(arg) => {
|
||||
self.add_substs(slice::from_ref(&arg));
|
||||
}
|
||||
ty::PredicateAtom::ObjectSafe(_def_id) => {}
|
||||
ty::PredicateAtom::ClosureKind(_def_id, substs, _kind) => {
|
||||
ty::PredicateKind::ObjectSafe(_def_id) => {}
|
||||
ty::PredicateKind::ClosureKind(_def_id, substs, _kind) => {
|
||||
self.add_substs(substs);
|
||||
}
|
||||
ty::PredicateAtom::ConstEvaluatable(_def_id, substs) => {
|
||||
ty::PredicateKind::ConstEvaluatable(_def_id, substs) => {
|
||||
self.add_substs(substs);
|
||||
}
|
||||
ty::PredicateAtom::ConstEquate(expected, found) => {
|
||||
ty::PredicateKind::ConstEquate(expected, found) => {
|
||||
self.add_const(expected);
|
||||
self.add_const(found);
|
||||
}
|
||||
ty::PredicateAtom::TypeWellFormedFromEnv(ty) => {
|
||||
ty::PredicateKind::TypeWellFormedFromEnv(ty) => {
|
||||
self.add_ty(ty);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1030,7 +1030,7 @@ impl<'tcx> GenericPredicates<'tcx> {
|
|||
|
||||
#[derive(Debug)]
|
||||
crate struct PredicateInner<'tcx> {
|
||||
binder: Binder<PredicateAtom<'tcx>>,
|
||||
binder: Binder<PredicateKind<'tcx>>,
|
||||
flags: TypeFlags,
|
||||
/// See the comment for the corresponding field of [TyS].
|
||||
outer_exclusive_binder: ty::DebruijnIndex,
|
||||
|
@ -1060,23 +1060,13 @@ impl Hash for Predicate<'_> {
|
|||
impl<'tcx> Eq for Predicate<'tcx> {}
|
||||
|
||||
impl<'tcx> Predicate<'tcx> {
|
||||
/// Returns the inner `PredicateAtom`.
|
||||
///
|
||||
/// The returned atom may contain unbound variables bound to binders skipped in this method.
|
||||
/// It is safe to reapply binders to the given atom.
|
||||
///
|
||||
/// Note that this method panics in case this predicate has unbound variables.
|
||||
pub fn skip_binders(self) -> PredicateAtom<'tcx> {
|
||||
self.inner.binder.skip_binder()
|
||||
}
|
||||
|
||||
/// Converts this to a `Binder<PredicateAtom<'tcx>>`. If the value was an
|
||||
/// Converts this to a `Binder<PredicateKind<'tcx>>`. If the value was an
|
||||
/// `Atom`, then it is not allowed to contain escaping bound vars.
|
||||
pub fn bound_atom(self) -> Binder<PredicateAtom<'tcx>> {
|
||||
pub fn kind(self) -> Binder<PredicateKind<'tcx>> {
|
||||
self.inner.binder
|
||||
}
|
||||
|
||||
pub fn bound_atom_ref(self) -> &'tcx Binder<PredicateAtom<'tcx>> {
|
||||
pub fn kind_ref(self) -> &'tcx Binder<PredicateKind<'tcx>> {
|
||||
&self.inner.binder
|
||||
}
|
||||
}
|
||||
|
@ -1098,7 +1088,7 @@ impl<'a, 'tcx> HashStable<StableHashingContext<'a>> for Predicate<'tcx> {
|
|||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Hash, TyEncodable, TyDecodable)]
|
||||
#[derive(HashStable, TypeFoldable)]
|
||||
pub enum PredicateAtom<'tcx> {
|
||||
pub enum PredicateKind<'tcx> {
|
||||
/// Corresponds to `where Foo: Bar<A, B, C>`. `Foo` here would be
|
||||
/// the `Self` type of the trait reference and `A`, `B`, and `C`
|
||||
/// would be the type parameters.
|
||||
|
@ -1229,7 +1219,7 @@ impl<'tcx> Predicate<'tcx> {
|
|||
// from the substitution and the value being substituted into, and
|
||||
// this trick achieves that).
|
||||
let substs = trait_ref.skip_binder().substs;
|
||||
let pred = self.skip_binders();
|
||||
let pred = self.kind().skip_binder();
|
||||
let new = pred.subst(tcx, substs);
|
||||
if new != pred { ty::Binder::bind(new).to_predicate(tcx) } else { self }
|
||||
}
|
||||
|
@ -1352,14 +1342,14 @@ pub trait ToPredicate<'tcx> {
|
|||
fn to_predicate(self, tcx: TyCtxt<'tcx>) -> Predicate<'tcx>;
|
||||
}
|
||||
|
||||
impl ToPredicate<'tcx> for Binder<PredicateAtom<'tcx>> {
|
||||
impl ToPredicate<'tcx> for Binder<PredicateKind<'tcx>> {
|
||||
#[inline(always)]
|
||||
fn to_predicate(self, tcx: TyCtxt<'tcx>) -> Predicate<'tcx> {
|
||||
tcx.mk_predicate(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl ToPredicate<'tcx> for PredicateAtom<'tcx> {
|
||||
impl ToPredicate<'tcx> for PredicateKind<'tcx> {
|
||||
#[inline(always)]
|
||||
fn to_predicate(self, tcx: TyCtxt<'tcx>) -> Predicate<'tcx> {
|
||||
debug_assert!(!self.has_escaping_bound_vars(), "escaping bound vars for {:?}", self);
|
||||
|
@ -1369,7 +1359,7 @@ impl ToPredicate<'tcx> for PredicateAtom<'tcx> {
|
|||
|
||||
impl<'tcx> ToPredicate<'tcx> for ConstnessAnd<TraitRef<'tcx>> {
|
||||
fn to_predicate(self, tcx: TyCtxt<'tcx>) -> Predicate<'tcx> {
|
||||
PredicateAtom::Trait(ty::TraitPredicate { trait_ref: self.value }, self.constness)
|
||||
PredicateKind::Trait(ty::TraitPredicate { trait_ref: self.value }, self.constness)
|
||||
.to_predicate(tcx)
|
||||
}
|
||||
}
|
||||
|
@ -1386,62 +1376,62 @@ impl<'tcx> ToPredicate<'tcx> for ConstnessAnd<PolyTraitRef<'tcx>> {
|
|||
|
||||
impl<'tcx> ToPredicate<'tcx> for ConstnessAnd<PolyTraitPredicate<'tcx>> {
|
||||
fn to_predicate(self, tcx: TyCtxt<'tcx>) -> Predicate<'tcx> {
|
||||
self.value.map_bound(|value| PredicateAtom::Trait(value, self.constness)).to_predicate(tcx)
|
||||
self.value.map_bound(|value| PredicateKind::Trait(value, self.constness)).to_predicate(tcx)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> ToPredicate<'tcx> for PolyRegionOutlivesPredicate<'tcx> {
|
||||
fn to_predicate(self, tcx: TyCtxt<'tcx>) -> Predicate<'tcx> {
|
||||
self.map_bound(PredicateAtom::RegionOutlives).to_predicate(tcx)
|
||||
self.map_bound(PredicateKind::RegionOutlives).to_predicate(tcx)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> ToPredicate<'tcx> for PolyTypeOutlivesPredicate<'tcx> {
|
||||
fn to_predicate(self, tcx: TyCtxt<'tcx>) -> Predicate<'tcx> {
|
||||
self.map_bound(PredicateAtom::TypeOutlives).to_predicate(tcx)
|
||||
self.map_bound(PredicateKind::TypeOutlives).to_predicate(tcx)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> ToPredicate<'tcx> for PolyProjectionPredicate<'tcx> {
|
||||
fn to_predicate(self, tcx: TyCtxt<'tcx>) -> Predicate<'tcx> {
|
||||
self.map_bound(PredicateAtom::Projection).to_predicate(tcx)
|
||||
self.map_bound(PredicateKind::Projection).to_predicate(tcx)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> Predicate<'tcx> {
|
||||
pub fn to_opt_poly_trait_ref(self) -> Option<ConstnessAnd<PolyTraitRef<'tcx>>> {
|
||||
let predicate = self.bound_atom();
|
||||
let predicate = self.kind();
|
||||
match predicate.skip_binder() {
|
||||
PredicateAtom::Trait(t, constness) => {
|
||||
PredicateKind::Trait(t, constness) => {
|
||||
Some(ConstnessAnd { constness, value: predicate.rebind(t.trait_ref) })
|
||||
}
|
||||
PredicateAtom::Projection(..)
|
||||
| PredicateAtom::Subtype(..)
|
||||
| PredicateAtom::RegionOutlives(..)
|
||||
| PredicateAtom::WellFormed(..)
|
||||
| PredicateAtom::ObjectSafe(..)
|
||||
| PredicateAtom::ClosureKind(..)
|
||||
| PredicateAtom::TypeOutlives(..)
|
||||
| PredicateAtom::ConstEvaluatable(..)
|
||||
| PredicateAtom::ConstEquate(..)
|
||||
| PredicateAtom::TypeWellFormedFromEnv(..) => None,
|
||||
PredicateKind::Projection(..)
|
||||
| PredicateKind::Subtype(..)
|
||||
| PredicateKind::RegionOutlives(..)
|
||||
| PredicateKind::WellFormed(..)
|
||||
| PredicateKind::ObjectSafe(..)
|
||||
| PredicateKind::ClosureKind(..)
|
||||
| PredicateKind::TypeOutlives(..)
|
||||
| PredicateKind::ConstEvaluatable(..)
|
||||
| PredicateKind::ConstEquate(..)
|
||||
| PredicateKind::TypeWellFormedFromEnv(..) => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_opt_type_outlives(self) -> Option<PolyTypeOutlivesPredicate<'tcx>> {
|
||||
let predicate = self.bound_atom();
|
||||
let predicate = self.kind();
|
||||
match predicate.skip_binder() {
|
||||
PredicateAtom::TypeOutlives(data) => Some(predicate.rebind(data)),
|
||||
PredicateAtom::Trait(..)
|
||||
| PredicateAtom::Projection(..)
|
||||
| PredicateAtom::Subtype(..)
|
||||
| PredicateAtom::RegionOutlives(..)
|
||||
| PredicateAtom::WellFormed(..)
|
||||
| PredicateAtom::ObjectSafe(..)
|
||||
| PredicateAtom::ClosureKind(..)
|
||||
| PredicateAtom::ConstEvaluatable(..)
|
||||
| PredicateAtom::ConstEquate(..)
|
||||
| PredicateAtom::TypeWellFormedFromEnv(..) => None,
|
||||
PredicateKind::TypeOutlives(data) => Some(predicate.rebind(data)),
|
||||
PredicateKind::Trait(..)
|
||||
| PredicateKind::Projection(..)
|
||||
| PredicateKind::Subtype(..)
|
||||
| PredicateKind::RegionOutlives(..)
|
||||
| PredicateKind::WellFormed(..)
|
||||
| PredicateKind::ObjectSafe(..)
|
||||
| PredicateKind::ClosureKind(..)
|
||||
| PredicateKind::ConstEvaluatable(..)
|
||||
| PredicateKind::ConstEquate(..)
|
||||
| PredicateKind::TypeWellFormedFromEnv(..) => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -627,8 +627,8 @@ pub trait PrettyPrinter<'tcx>:
|
|||
// may contain unbound variables. We therefore do this manually.
|
||||
//
|
||||
// FIXME(lcnr): Find out why exactly this is the case :)
|
||||
let bound_predicate = predicate.bound_atom();
|
||||
if let ty::PredicateAtom::Trait(pred, _) = bound_predicate.skip_binder() {
|
||||
let bound_predicate = predicate.kind();
|
||||
if let ty::PredicateKind::Trait(pred, _) = bound_predicate.skip_binder() {
|
||||
let trait_ref = bound_predicate.rebind(pred.trait_ref);
|
||||
// Don't print +Sized, but rather +?Sized if absent.
|
||||
if Some(trait_ref.def_id()) == self.tcx().lang_items().sized_trait() {
|
||||
|
@ -2068,38 +2068,38 @@ define_print_and_forward_display! {
|
|||
}
|
||||
|
||||
ty::Predicate<'tcx> {
|
||||
let binder = self.bound_atom();
|
||||
let binder = self.kind();
|
||||
p!(print(binder))
|
||||
}
|
||||
|
||||
ty::PredicateAtom<'tcx> {
|
||||
ty::PredicateKind<'tcx> {
|
||||
match *self {
|
||||
ty::PredicateAtom::Trait(ref data, constness) => {
|
||||
ty::PredicateKind::Trait(ref data, constness) => {
|
||||
if let hir::Constness::Const = constness {
|
||||
p!("const ");
|
||||
}
|
||||
p!(print(data))
|
||||
}
|
||||
ty::PredicateAtom::Subtype(predicate) => p!(print(predicate)),
|
||||
ty::PredicateAtom::RegionOutlives(predicate) => p!(print(predicate)),
|
||||
ty::PredicateAtom::TypeOutlives(predicate) => p!(print(predicate)),
|
||||
ty::PredicateAtom::Projection(predicate) => p!(print(predicate)),
|
||||
ty::PredicateAtom::WellFormed(arg) => p!(print(arg), " well-formed"),
|
||||
ty::PredicateAtom::ObjectSafe(trait_def_id) => {
|
||||
ty::PredicateKind::Subtype(predicate) => p!(print(predicate)),
|
||||
ty::PredicateKind::RegionOutlives(predicate) => p!(print(predicate)),
|
||||
ty::PredicateKind::TypeOutlives(predicate) => p!(print(predicate)),
|
||||
ty::PredicateKind::Projection(predicate) => p!(print(predicate)),
|
||||
ty::PredicateKind::WellFormed(arg) => p!(print(arg), " well-formed"),
|
||||
ty::PredicateKind::ObjectSafe(trait_def_id) => {
|
||||
p!("the trait `", print_def_path(trait_def_id, &[]), "` is object-safe")
|
||||
}
|
||||
ty::PredicateAtom::ClosureKind(closure_def_id, _closure_substs, kind) => {
|
||||
ty::PredicateKind::ClosureKind(closure_def_id, _closure_substs, kind) => {
|
||||
p!("the closure `",
|
||||
print_value_path(closure_def_id, &[]),
|
||||
write("` implements the trait `{}`", kind))
|
||||
}
|
||||
ty::PredicateAtom::ConstEvaluatable(def, substs) => {
|
||||
ty::PredicateKind::ConstEvaluatable(def, substs) => {
|
||||
p!("the constant `", print_value_path(def.did, substs), "` can be evaluated")
|
||||
}
|
||||
ty::PredicateAtom::ConstEquate(c1, c2) => {
|
||||
ty::PredicateKind::ConstEquate(c1, c2) => {
|
||||
p!("the constant `", print(c1), "` equals `", print(c2), "`")
|
||||
}
|
||||
ty::PredicateAtom::TypeWellFormedFromEnv(ty) => {
|
||||
ty::PredicateKind::TypeWellFormedFromEnv(ty) => {
|
||||
p!("the type `", print(ty), "` is found in the environment")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -224,35 +224,35 @@ impl fmt::Debug for ty::ProjectionPredicate<'tcx> {
|
|||
|
||||
impl fmt::Debug for ty::Predicate<'tcx> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "{:?}", self.bound_atom())
|
||||
write!(f, "{:?}", self.kind())
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Debug for ty::PredicateAtom<'tcx> {
|
||||
impl fmt::Debug for ty::PredicateKind<'tcx> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match *self {
|
||||
ty::PredicateAtom::Trait(ref a, constness) => {
|
||||
ty::PredicateKind::Trait(ref a, constness) => {
|
||||
if let hir::Constness::Const = constness {
|
||||
write!(f, "const ")?;
|
||||
}
|
||||
a.fmt(f)
|
||||
}
|
||||
ty::PredicateAtom::Subtype(ref pair) => pair.fmt(f),
|
||||
ty::PredicateAtom::RegionOutlives(ref pair) => pair.fmt(f),
|
||||
ty::PredicateAtom::TypeOutlives(ref pair) => pair.fmt(f),
|
||||
ty::PredicateAtom::Projection(ref pair) => pair.fmt(f),
|
||||
ty::PredicateAtom::WellFormed(data) => write!(f, "WellFormed({:?})", data),
|
||||
ty::PredicateAtom::ObjectSafe(trait_def_id) => {
|
||||
ty::PredicateKind::Subtype(ref pair) => pair.fmt(f),
|
||||
ty::PredicateKind::RegionOutlives(ref pair) => pair.fmt(f),
|
||||
ty::PredicateKind::TypeOutlives(ref pair) => pair.fmt(f),
|
||||
ty::PredicateKind::Projection(ref pair) => pair.fmt(f),
|
||||
ty::PredicateKind::WellFormed(data) => write!(f, "WellFormed({:?})", data),
|
||||
ty::PredicateKind::ObjectSafe(trait_def_id) => {
|
||||
write!(f, "ObjectSafe({:?})", trait_def_id)
|
||||
}
|
||||
ty::PredicateAtom::ClosureKind(closure_def_id, closure_substs, kind) => {
|
||||
ty::PredicateKind::ClosureKind(closure_def_id, closure_substs, kind) => {
|
||||
write!(f, "ClosureKind({:?}, {:?}, {:?})", closure_def_id, closure_substs, kind)
|
||||
}
|
||||
ty::PredicateAtom::ConstEvaluatable(def_id, substs) => {
|
||||
ty::PredicateKind::ConstEvaluatable(def_id, substs) => {
|
||||
write!(f, "ConstEvaluatable({:?}, {:?})", def_id, substs)
|
||||
}
|
||||
ty::PredicateAtom::ConstEquate(c1, c2) => write!(f, "ConstEquate({:?}, {:?})", c1, c2),
|
||||
ty::PredicateAtom::TypeWellFormedFromEnv(ty) => {
|
||||
ty::PredicateKind::ConstEquate(c1, c2) => write!(f, "ConstEquate({:?}, {:?})", c1, c2),
|
||||
ty::PredicateKind::TypeWellFormedFromEnv(ty) => {
|
||||
write!(f, "TypeWellFormedFromEnv({:?})", ty)
|
||||
}
|
||||
}
|
||||
|
@ -472,40 +472,40 @@ impl<'a, 'tcx> Lift<'tcx> for ty::ExistentialProjection<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> Lift<'tcx> for ty::PredicateAtom<'a> {
|
||||
type Lifted = ty::PredicateAtom<'tcx>;
|
||||
impl<'a, 'tcx> Lift<'tcx> for ty::PredicateKind<'a> {
|
||||
type Lifted = ty::PredicateKind<'tcx>;
|
||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
||||
match self {
|
||||
ty::PredicateAtom::Trait(data, constness) => {
|
||||
tcx.lift(data).map(|data| ty::PredicateAtom::Trait(data, constness))
|
||||
ty::PredicateKind::Trait(data, constness) => {
|
||||
tcx.lift(data).map(|data| ty::PredicateKind::Trait(data, constness))
|
||||
}
|
||||
ty::PredicateAtom::Subtype(data) => tcx.lift(data).map(ty::PredicateAtom::Subtype),
|
||||
ty::PredicateAtom::RegionOutlives(data) => {
|
||||
tcx.lift(data).map(ty::PredicateAtom::RegionOutlives)
|
||||
ty::PredicateKind::Subtype(data) => tcx.lift(data).map(ty::PredicateKind::Subtype),
|
||||
ty::PredicateKind::RegionOutlives(data) => {
|
||||
tcx.lift(data).map(ty::PredicateKind::RegionOutlives)
|
||||
}
|
||||
ty::PredicateAtom::TypeOutlives(data) => {
|
||||
tcx.lift(data).map(ty::PredicateAtom::TypeOutlives)
|
||||
ty::PredicateKind::TypeOutlives(data) => {
|
||||
tcx.lift(data).map(ty::PredicateKind::TypeOutlives)
|
||||
}
|
||||
ty::PredicateAtom::Projection(data) => {
|
||||
tcx.lift(data).map(ty::PredicateAtom::Projection)
|
||||
ty::PredicateKind::Projection(data) => {
|
||||
tcx.lift(data).map(ty::PredicateKind::Projection)
|
||||
}
|
||||
ty::PredicateAtom::WellFormed(ty) => tcx.lift(ty).map(ty::PredicateAtom::WellFormed),
|
||||
ty::PredicateAtom::ClosureKind(closure_def_id, closure_substs, kind) => {
|
||||
ty::PredicateKind::WellFormed(ty) => tcx.lift(ty).map(ty::PredicateKind::WellFormed),
|
||||
ty::PredicateKind::ClosureKind(closure_def_id, closure_substs, kind) => {
|
||||
tcx.lift(closure_substs).map(|closure_substs| {
|
||||
ty::PredicateAtom::ClosureKind(closure_def_id, closure_substs, kind)
|
||||
ty::PredicateKind::ClosureKind(closure_def_id, closure_substs, kind)
|
||||
})
|
||||
}
|
||||
ty::PredicateAtom::ObjectSafe(trait_def_id) => {
|
||||
Some(ty::PredicateAtom::ObjectSafe(trait_def_id))
|
||||
ty::PredicateKind::ObjectSafe(trait_def_id) => {
|
||||
Some(ty::PredicateKind::ObjectSafe(trait_def_id))
|
||||
}
|
||||
ty::PredicateAtom::ConstEvaluatable(def_id, substs) => {
|
||||
tcx.lift(substs).map(|substs| ty::PredicateAtom::ConstEvaluatable(def_id, substs))
|
||||
ty::PredicateKind::ConstEvaluatable(def_id, substs) => {
|
||||
tcx.lift(substs).map(|substs| ty::PredicateKind::ConstEvaluatable(def_id, substs))
|
||||
}
|
||||
ty::PredicateAtom::ConstEquate(c1, c2) => {
|
||||
tcx.lift((c1, c2)).map(|(c1, c2)| ty::PredicateAtom::ConstEquate(c1, c2))
|
||||
ty::PredicateKind::ConstEquate(c1, c2) => {
|
||||
tcx.lift((c1, c2)).map(|(c1, c2)| ty::PredicateKind::ConstEquate(c1, c2))
|
||||
}
|
||||
ty::PredicateAtom::TypeWellFormedFromEnv(ty) => {
|
||||
tcx.lift(ty).map(ty::PredicateAtom::TypeWellFormedFromEnv)
|
||||
ty::PredicateKind::TypeWellFormedFromEnv(ty) => {
|
||||
tcx.lift(ty).map(ty::PredicateKind::TypeWellFormedFromEnv)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue