pub enum RegionConstraint<I: Interner> {
Ambiguity,
RegionOutlives(I::Region, I::Region),
AliasTyOutlivesViaEnv(Binder<I, (AliasTy<I>, I::Region)>),
PlaceholderTyOutlives(I::Ty, I::Region),
And(Box<[RegionConstraint<I>]>),
Or(Box<[RegionConstraint<I>]>),
}Variants§
Ambiguity
RegionOutlives(I::Region, I::Region)
AliasTyOutlivesViaEnv(Binder<I, (AliasTy<I>, I::Region)>)
Requirement that a (potentially higher ranked) alias outlives some (potentially higher ranked) region due to an assumption in the environment. This cannot be satisfied via component outlives or item bounds.
We cannot eagerly look at assumptions as we are usually working with an incomplete set of assumptions and there may wind up being assumptions we can use to prove this when we’re in a smaller universe.
We eagerly destructure alias outlives requirements into region outlives requirements corresponding to component outlives & item bound outlives rules, leaving only param env candidates.
PlaceholderTyOutlives(I::Ty, I::Region)
This is an I::Ty for two reasons:
- We need the type visitable impl to be able to
visit_tyon this so canonicalization knows about the placeholder - When exiting the trait solver there may be placeholder outlives corresponding to params
from the root universe. These need to be changed from a
Placeholderto the originalParam.
We cannot eagerly look at assumptions as we are usually working with an incomplete set of assumptions and there may wind up being assumptions we can use to prove this when we’re in a smaller universe.
And(Box<[RegionConstraint<I>]>)
Or(Box<[RegionConstraint<I>]>)
Implementations§
Source§impl<I: Interner> RegionConstraint<I>
impl<I: Interner> RegionConstraint<I>
pub fn new_true() -> Self
pub fn is_true(&self) -> bool
pub fn new_false() -> Self
pub fn is_false(&self) -> bool
pub fn is_or(&self) -> bool
pub fn unwrap_or(self) -> Box<[RegionConstraint<I>]>
pub fn unwrap_and(self) -> Box<[RegionConstraint<I>]>
pub fn is_and(&self) -> bool
pub fn is_ambig(&self) -> bool
pub fn and(self, other: RegionConstraint<I>) -> RegionConstraint<I>
Sourcepub fn canonical_form(self) -> Self
pub fn canonical_form(self) -> Self
Converts the region constraint into an ORs of ANDs of “leaf” constraints. Where a leaf constraint is a non-or/and constraint.
fn is_leaf_constraint(&self) -> bool
fn is_canonical_and(&self) -> bool
pub fn is_canonical_form(&self) -> bool
Trait Implementations§
Source§impl<I> Clone for RegionConstraint<I>where
I: Interner,
impl<I> Clone for RegionConstraint<I>where
I: Interner,
Source§impl<I> Debug for RegionConstraint<I>where
I: Interner,
impl<I> Debug for RegionConstraint<I>where
I: Interner,
Source§impl<I: Interner> Default for RegionConstraint<I>
impl<I: Interner> Default for RegionConstraint<I>
Source§impl<I> Hash for RegionConstraint<I>where
I: Interner,
impl<I> Hash for RegionConstraint<I>where
I: Interner,
Source§impl<I> PartialEq for RegionConstraint<I>where
I: Interner,
impl<I> PartialEq for RegionConstraint<I>where
I: Interner,
Source§impl<I: Interner> StableHash for RegionConstraint<I>where
I::Region: StableHash,
I::Ty: StableHash,
I::GenericArgs: StableHash,
I::TraitAssocTyId: StableHash,
I::InherentAssocTyId: StableHash,
I::OpaqueTyId: StableHash,
I::FreeTyAliasId: StableHash,
I::BoundVarKinds: StableHash,
Available on crate feature nightly only.
impl<I: Interner> StableHash for RegionConstraint<I>where
I::Region: StableHash,
I::Ty: StableHash,
I::GenericArgs: StableHash,
I::TraitAssocTyId: StableHash,
I::InherentAssocTyId: StableHash,
I::OpaqueTyId: StableHash,
I::FreeTyAliasId: StableHash,
I::BoundVarKinds: StableHash,
nightly only.fn stable_hash<CTX: StableHashCtxt>( &self, hcx: &mut CTX, hasher: &mut StableHasher, )
Source§impl<I: Interner> TypeFoldable<I> for RegionConstraint<I>
impl<I: Interner> TypeFoldable<I> for RegionConstraint<I>
Source§fn try_fold_with<F: FallibleTypeFolder<I>>(
self,
f: &mut F,
) -> Result<Self, F::Error>
fn try_fold_with<F: FallibleTypeFolder<I>>( self, f: &mut F, ) -> Result<Self, F::Error>
Source§impl<I: Interner> TypeVisitable<I> for RegionConstraint<I>
impl<I: Interner> TypeVisitable<I> for RegionConstraint<I>
Source§fn visit_with<F: TypeVisitor<I>>(&self, f: &mut F) -> F::Result
fn visit_with<F: TypeVisitor<I>>(&self, f: &mut F) -> F::Result
Auto Trait Implementations§
impl<I> DynSend for RegionConstraint<I>where
<I as Interner>::Region: DynSend,
<I as Interner>::Ty: DynSend,
<I as Interner>::BoundVarKinds: DynSend,
<I as Interner>::GenericArgs: DynSend,
<I as Interner>::TraitAssocTyId: DynSend,
<I as Interner>::InherentAssocTyId: DynSend,
<I as Interner>::OpaqueTyId: DynSend,
<I as Interner>::FreeTyAliasId: DynSend,
impl<I> DynSync for RegionConstraint<I>where
<I as Interner>::Region: DynSync,
<I as Interner>::Ty: DynSync,
<I as Interner>::BoundVarKinds: DynSync,
<I as Interner>::GenericArgs: DynSync,
<I as Interner>::TraitAssocTyId: DynSync,
<I as Interner>::InherentAssocTyId: DynSync,
<I as Interner>::OpaqueTyId: DynSync,
<I as Interner>::FreeTyAliasId: DynSync,
impl<I> Freeze for RegionConstraint<I>where
<I as Interner>::Region: Freeze,
<I as Interner>::Ty: Freeze,
<I as Interner>::BoundVarKinds: Freeze,
<I as Interner>::GenericArgs: Freeze,
<I as Interner>::TraitAssocTyId: Freeze,
<I as Interner>::InherentAssocTyId: Freeze,
<I as Interner>::OpaqueTyId: Freeze,
<I as Interner>::FreeTyAliasId: Freeze,
impl<I> RefUnwindSafe for RegionConstraint<I>where
<I as Interner>::Region: RefUnwindSafe,
<I as Interner>::Ty: RefUnwindSafe,
<I as Interner>::BoundVarKinds: RefUnwindSafe,
<I as Interner>::GenericArgs: RefUnwindSafe,
<I as Interner>::TraitAssocTyId: RefUnwindSafe,
<I as Interner>::InherentAssocTyId: RefUnwindSafe,
<I as Interner>::OpaqueTyId: RefUnwindSafe,
<I as Interner>::FreeTyAliasId: RefUnwindSafe,
impl<I> Send for RegionConstraint<I>where
<I as Interner>::Region: Send,
<I as Interner>::Ty: Send,
<I as Interner>::BoundVarKinds: Send,
<I as Interner>::GenericArgs: Send,
<I as Interner>::TraitAssocTyId: Send,
<I as Interner>::InherentAssocTyId: Send,
<I as Interner>::OpaqueTyId: Send,
<I as Interner>::FreeTyAliasId: Send,
impl<I> Sync for RegionConstraint<I>where
<I as Interner>::Region: Sync,
<I as Interner>::Ty: Sync,
<I as Interner>::BoundVarKinds: Sync,
<I as Interner>::GenericArgs: Sync,
<I as Interner>::TraitAssocTyId: Sync,
<I as Interner>::InherentAssocTyId: Sync,
<I as Interner>::OpaqueTyId: Sync,
<I as Interner>::FreeTyAliasId: Sync,
impl<I> Unpin for RegionConstraint<I>where
<I as Interner>::Region: Unpin,
<I as Interner>::Ty: Unpin,
<I as Interner>::BoundVarKinds: Unpin,
<I as Interner>::GenericArgs: Unpin,
<I as Interner>::TraitAssocTyId: Unpin,
<I as Interner>::InherentAssocTyId: Unpin,
<I as Interner>::OpaqueTyId: Unpin,
<I as Interner>::FreeTyAliasId: Unpin,
impl<I> UnsafeUnpin for RegionConstraint<I>where
<I as Interner>::Region: UnsafeUnpin,
<I as Interner>::Ty: UnsafeUnpin,
<I as Interner>::BoundVarKinds: UnsafeUnpin,
<I as Interner>::GenericArgs: UnsafeUnpin,
<I as Interner>::TraitAssocTyId: UnsafeUnpin,
<I as Interner>::InherentAssocTyId: UnsafeUnpin,
<I as Interner>::OpaqueTyId: UnsafeUnpin,
<I as Interner>::FreeTyAliasId: UnsafeUnpin,
impl<I> UnwindSafe for RegionConstraint<I>where
<I as Interner>::Region: UnwindSafe,
<I as Interner>::Ty: UnwindSafe,
<I as Interner>::BoundVarKinds: UnwindSafe,
<I as Interner>::GenericArgs: UnwindSafe,
<I as Interner>::TraitAssocTyId: UnwindSafe,
<I as Interner>::InherentAssocTyId: UnwindSafe,
<I as Interner>::OpaqueTyId: UnwindSafe,
<I as Interner>::FreeTyAliasId: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T> TypeVisitableExt<I> for Twhere
I: Interner,
T: TypeVisitable<I>,
impl<I, T> TypeVisitableExt<I> for Twhere
I: Interner,
T: TypeVisitable<I>,
fn has_type_flags(&self, flags: TypeFlags) -> bool
Source§fn has_vars_bound_at_or_above(&self, binder: DebruijnIndex) -> bool
fn has_vars_bound_at_or_above(&self, binder: DebruijnIndex) -> bool
true if self has any late-bound regions that are either
bound by binder or bound by some binder outside of binder.
If binder is ty::INNERMOST, this indicates whether
there are any late-bound regions that appear free.fn error_reported(&self) -> Result<(), <I as Interner>::ErrorGuaranteed>
fn non_region_error_reported( &self, ) -> Result<(), <I as Interner>::ErrorGuaranteed>
Source§fn has_vars_bound_above(&self, binder: DebruijnIndex) -> bool
fn has_vars_bound_above(&self, binder: DebruijnIndex) -> bool
true if this type has any regions that escape binder (and
hence are not bound by it).Source§fn has_escaping_bound_vars(&self) -> bool
fn has_escaping_bound_vars(&self) -> bool
true if this type has regions that are not a part of the
type. For example, given a for<'a> fn(&'a i32) this function returns
false, while given a fn(&'a i32) it returns true. The latter can
occur when traversing through the former. Read morefn has_aliases(&self) -> bool
fn has_opaque_types(&self) -> bool
fn has_coroutines(&self) -> bool
fn references_error(&self) -> bool
fn has_non_region_param(&self) -> bool
fn has_regions(&self) -> bool
fn has_infer_regions(&self) -> bool
fn has_infer_types(&self) -> bool
fn has_non_region_infer(&self) -> bool
fn has_infer(&self) -> bool
fn has_placeholders(&self) -> bool
fn has_non_region_placeholders(&self) -> bool
fn has_param(&self) -> bool
Source§fn has_free_regions(&self) -> bool
fn has_free_regions(&self) -> bool
fn has_erased_regions(&self) -> bool
Source§fn has_erasable_regions(&self) -> bool
fn has_erasable_regions(&self) -> bool
Source§fn is_global(&self) -> bool
fn is_global(&self) -> bool
Source§fn has_bound_regions(&self) -> bool
fn has_bound_regions(&self) -> bool
Source§fn has_non_region_bound_vars(&self) -> bool
fn has_non_region_bound_vars(&self) -> bool
Source§fn has_bound_vars(&self) -> bool
fn has_bound_vars(&self) -> bool
Source§fn still_further_specializable(&self) -> bool
fn still_further_specializable(&self) -> bool
impl
specialization.Source§fn has_non_region_error(&self) -> bool
fn has_non_region_error(&self) -> bool
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.