pub struct OutlivesEnvironment<'tcx> {
pub param_env: ParamEnv<'tcx>,
free_region_map: FreeRegionMap<'tcx>,
region_bound_pairs: IndexSet<OutlivesPredicate<TyCtxt<'tcx>, GenericKind<'tcx>>, BuildHasherDefault<FxHasher>>,
}
Expand description
The OutlivesEnvironment
collects information about what outlives
what in a given type-checking setting. For example, if we have a
where-clause like where T: 'a
in scope, then the
OutlivesEnvironment
would record that (in its
region_bound_pairs
field). Similarly, it contains methods for
processing and adding implied bounds into the outlives
environment.
Other code at present does not typically take a
&OutlivesEnvironment
, but rather takes some of its fields (e.g.,
process_registered_region_obligations
wants the
region-bound-pairs). There is no mistaking it: the current setup
of tracking region information is quite scattered! The
OutlivesEnvironment
, for example, needs to sometimes be combined
with the middle::RegionRelations
, to yield a full picture of how
(lexical) lifetimes interact. However, I’m reluctant to do more
refactoring here, since the setup with NLL is quite different.
For example, NLL has no need of RegionRelations
, and is solely
interested in the OutlivesEnvironment
. -nmatsakis
Fields§
§param_env: ParamEnv<'tcx>
§free_region_map: FreeRegionMap<'tcx>
§region_bound_pairs: IndexSet<OutlivesPredicate<TyCtxt<'tcx>, GenericKind<'tcx>>, BuildHasherDefault<FxHasher>>
Implementations§
Source§impl<'tcx> OutlivesEnvironment<'tcx>
impl<'tcx> OutlivesEnvironment<'tcx>
Sourcepub fn new(param_env: ParamEnv<'tcx>) -> OutlivesEnvironment<'tcx>
pub fn new(param_env: ParamEnv<'tcx>) -> OutlivesEnvironment<'tcx>
Create a new OutlivesEnvironment
without extra outlives bounds.
Sourcepub fn with_bounds(
param_env: ParamEnv<'tcx>,
extra_bounds: impl IntoIterator<Item = OutlivesBound<'tcx>>,
) -> OutlivesEnvironment<'tcx>
pub fn with_bounds( param_env: ParamEnv<'tcx>, extra_bounds: impl IntoIterator<Item = OutlivesBound<'tcx>>, ) -> OutlivesEnvironment<'tcx>
Create a new OutlivesEnvironment
with extra outlives bounds.
Sourcepub fn free_region_map(&self) -> &FreeRegionMap<'tcx>
pub fn free_region_map(&self) -> &FreeRegionMap<'tcx>
Borrows current value of the free_region_map
.
Sourcepub fn region_bound_pairs(
&self,
) -> &IndexSet<OutlivesPredicate<TyCtxt<'tcx>, GenericKind<'tcx>>, BuildHasherDefault<FxHasher>>
pub fn region_bound_pairs( &self, ) -> &IndexSet<OutlivesPredicate<TyCtxt<'tcx>, GenericKind<'tcx>>, BuildHasherDefault<FxHasher>>
Borrows current region_bound_pairs
.
Trait Implementations§
Source§impl<'tcx> Clone for OutlivesEnvironment<'tcx>
impl<'tcx> Clone for OutlivesEnvironment<'tcx>
Source§fn clone(&self) -> OutlivesEnvironment<'tcx>
fn clone(&self) -> OutlivesEnvironment<'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 OutlivesEnvironment<'tcx>
impl<'tcx> DynSync for OutlivesEnvironment<'tcx>
impl<'tcx> Freeze for OutlivesEnvironment<'tcx>
impl<'tcx> !RefUnwindSafe for OutlivesEnvironment<'tcx>
impl<'tcx> Send for OutlivesEnvironment<'tcx>
impl<'tcx> Sync for OutlivesEnvironment<'tcx>
impl<'tcx> Unpin for OutlivesEnvironment<'tcx>
impl<'tcx> !UnwindSafe for OutlivesEnvironment<'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> 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,
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: 192 bytes