Struct rustc_trait_selection::infer::outlives::env::OutlivesEnvironment
source · pub struct OutlivesEnvironment<'tcx> {
pub param_env: ParamEnv<'tcx>,
free_region_map: FreeRegionMap<'tcx>,
region_bound_pairs: IndexSet<OutlivesPredicate<GenericKind<'tcx>, Region<'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<GenericKind<'tcx>, Region<'tcx>>, BuildHasherDefault<FxHasher>>
Auto Trait Implementations§
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
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