pub(crate) struct UniversalRegionRelations<'tcx> {
universal_regions: Rc<UniversalRegions<'tcx>>,
outlives: TransitiveRelation<RegionVid>,
inverse_outlives: TransitiveRelation<RegionVid>,
}
Fields§
§universal_regions: Rc<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§
Auto 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, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
source§impl<T> Filterable for T
impl<T> Filterable for T
source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
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<'a, T> Captures<'a> for Twhere
T: ?Sized,
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: 264 bytes