Struct rustc_infer::infer::free_regions::FreeRegionMap
source · pub struct FreeRegionMap<'tcx> {
pub(crate) relation: TransitiveRelation<Region<'tcx>>,
}
Fields§
§relation: TransitiveRelation<Region<'tcx>>
Stores the relation a < b
, where a
and b
are regions.
Invariant: only free regions like 'x
or 'static
are stored
in this relation, not scopes.
Implementations§
source§impl<'tcx> FreeRegionMap<'tcx>
impl<'tcx> FreeRegionMap<'tcx>
pub fn elements(&self) -> impl Iterator<Item = Region<'tcx>> + '_
pub fn is_empty(&self) -> bool
sourcepub fn sub_free_regions(
&self,
tcx: TyCtxt<'tcx>,
r_a: Region<'tcx>,
r_b: Region<'tcx>,
) -> bool
pub fn sub_free_regions( &self, tcx: TyCtxt<'tcx>, r_a: Region<'tcx>, r_b: Region<'tcx>, ) -> bool
Tests whether r_a <= r_b
.
Both regions must meet is_free_or_static
.
Subtle: one tricky case that this code gets correct is as
follows. If we know that r_b: 'static
, then this function
will return true, even though we don’t know anything that
directly relates r_a
and r_b
.
sourcefn check_relation(&self, r_a: Region<'tcx>, r_b: Region<'tcx>) -> bool
fn check_relation(&self, r_a: Region<'tcx>, r_b: Region<'tcx>) -> bool
Check whether r_a <= r_b
is found in the relation.
sourcepub(crate) fn lub_param_regions(
&self,
tcx: TyCtxt<'tcx>,
r_a: Region<'tcx>,
r_b: Region<'tcx>,
) -> Region<'tcx>
pub(crate) fn lub_param_regions( &self, tcx: TyCtxt<'tcx>, r_a: Region<'tcx>, r_b: Region<'tcx>, ) -> Region<'tcx>
Computes the least-upper-bound of two free regions. In some
cases, this is more conservative than necessary, in order to
avoid making arbitrary choices. See
TransitiveRelation::postdom_upper_bound
for more details.
Trait Implementations§
source§impl<'tcx> Clone for FreeRegionMap<'tcx>
impl<'tcx> Clone for FreeRegionMap<'tcx>
source§fn clone(&self) -> FreeRegionMap<'tcx>
fn clone(&self) -> FreeRegionMap<'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> Freeze for FreeRegionMap<'tcx>
impl<'tcx> RefUnwindSafe for FreeRegionMap<'tcx>
impl<'tcx> Send for FreeRegionMap<'tcx>
impl<'tcx> Sync for FreeRegionMap<'tcx>
impl<'tcx> Unpin for FreeRegionMap<'tcx>
impl<'tcx> UnwindSafe for FreeRegionMap<'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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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<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,
impl<T> MaybeSendSync for T
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: 128 bytes