pub(crate) struct UniversalRegionRelations<'tcx> {
pub(crate) universal_regions: UniversalRegions<'tcx>,
outlives: TransitiveRelation<RegionVid>,
inverse_outlives: TransitiveRelation<RegionVid>,
}Fields§
§universal_regions: UniversalRegions<'tcx>§outlives: TransitiveRelation<RegionVid>Stores the outlives relations that are known to hold from the implied bounds, in-scope where-clauses, and that sort of thing.
inverse_outlives: TransitiveRelation<RegionVid>This is the <= relation; that is, if a: b, then b <= a,
and we store that here. This is useful when figuring out how
to express some local region in terms of external regions our
caller will understand.
Implementations§
Source§impl UniversalRegionRelations<'_>
impl UniversalRegionRelations<'_>
Sourcepub(crate) fn postdom_upper_bound(
&self,
fr1: RegionVid,
fr2: RegionVid,
) -> RegionVid
pub(crate) fn postdom_upper_bound( &self, fr1: RegionVid, fr2: RegionVid, ) -> RegionVid
Given two universal regions, returns the postdominating upper-bound (effectively the least upper bound).
(See TransitiveRelation::postdom_upper_bound for details on
the postdominating upper bound in general.)
Sourcepub(crate) fn non_local_upper_bounds(&self, fr: RegionVid) -> Vec<RegionVid>
pub(crate) fn non_local_upper_bounds(&self, fr: RegionVid) -> Vec<RegionVid>
Finds an “upper bound” for fr that is not local. In other
words, returns the smallest (*) known region fr1 that (a)
outlives fr and (b) is not local.
(*) If there are multiple competing choices, we return all of them.
Sourcepub(crate) fn non_local_lower_bound(&self, fr: RegionVid) -> Option<RegionVid>
pub(crate) fn non_local_lower_bound(&self, fr: RegionVid) -> Option<RegionVid>
Finds a “lower bound” for fr that is not local. In other
words, returns the largest (*) known region fr1 that (a) is
outlived by fr and (b) is not local.
(*) If there are multiple competing choices, we pick the “postdominating”
one. See TransitiveRelation::postdom_upper_bound for details.
Sourcefn non_local_bounds(
&self,
relation: &TransitiveRelation<RegionVid>,
fr0: RegionVid,
) -> Vec<RegionVid>
fn non_local_bounds( &self, relation: &TransitiveRelation<RegionVid>, fr0: RegionVid, ) -> Vec<RegionVid>
Helper for non_local_upper_bounds and non_local_lower_bounds.
Repeatedly invokes postdom_parent until we find something that is not
local. Returns None if we never do so.
Sourcepub(crate) fn outlives(&self, fr1: RegionVid, fr2: RegionVid) -> bool
pub(crate) fn outlives(&self, fr1: RegionVid, fr2: RegionVid) -> bool
Returns true if fr1 is known to outlive fr2.
This will only ever be true for universally quantified regions.
Sourcepub(crate) fn equal(&self, fr1: RegionVid, fr2: RegionVid) -> bool
pub(crate) fn equal(&self, fr1: RegionVid, fr2: RegionVid) -> bool
Returns true if fr1 is known to equal fr2.
This will only ever be true for universally quantified regions.
Sourcepub(crate) fn regions_outlived_by(&self, fr1: RegionVid) -> Vec<RegionVid>
pub(crate) fn regions_outlived_by(&self, fr1: RegionVid) -> Vec<RegionVid>
Returns a vector of free regions x such that fr1: x is
known to hold.
Sourcepub(crate) fn known_outlives(
&self,
) -> impl Iterator<Item = (RegionVid, RegionVid)>
pub(crate) fn known_outlives( &self, ) -> impl Iterator<Item = (RegionVid, RegionVid)>
Returns the non-transitive set of known outlives constraints between free regions.
Trait Implementations§
Source§impl<'tcx> Clone for UniversalRegionRelations<'tcx>
impl<'tcx> Clone for UniversalRegionRelations<'tcx>
Source§fn clone(&self) -> UniversalRegionRelations<'tcx>
fn clone(&self) -> UniversalRegionRelations<'tcx>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl<'tcx> DynSend for UniversalRegionRelations<'tcx>
impl<'tcx> !DynSync for UniversalRegionRelations<'tcx>
impl<'tcx> !Freeze for UniversalRegionRelations<'tcx>
impl<'tcx> !RefUnwindSafe for UniversalRegionRelations<'tcx>
impl<'tcx> Send for UniversalRegionRelations<'tcx>
impl<'tcx> !Sync for UniversalRegionRelations<'tcx>
impl<'tcx> Unpin for UniversalRegionRelations<'tcx>
impl<'tcx> !UnwindSafe for UniversalRegionRelations<'tcx>
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<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
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<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> 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: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 416 bytes