Struct rustc_trait_selection::infer::outlives::env::OutlivesEnvironment[−][src]

pub struct OutlivesEnvironment<'tcx> {
    pub param_env: ParamEnv<'tcx>,
    free_region_map: FreeRegionMap<'tcx>,
    region_bound_pairs_map: HashMap<HirId, Vec<(&'tcx RegionKind, GenericKind<'tcx>), Global>, BuildHasherDefault<FxHasher>>,
    region_bound_pairs_accum: Vec<(&'tcx RegionKind, GenericKind<'tcx>), Global>,
}
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_map: HashMap<HirId, Vec<(&'tcx RegionKind, GenericKind<'tcx>), Global>, BuildHasherDefault<FxHasher>>region_bound_pairs_accum: Vec<(&'tcx RegionKind, GenericKind<'tcx>), Global>

Trait Implementations

impl<'tcx> OutlivesEnvironmentExt<'tcx> for OutlivesEnvironment<'tcx>[src]

fn add_implied_bounds<'a>(
    &mut self,
    infcx: &InferCtxt<'a, 'tcx>,
    fn_sig_tys: &[Ty<'tcx>],
    body_id: HirId,
    span: Span
)
[src]

This method adds “implied bounds” into the outlives environment. Implied bounds are outlives relationships that we can deduce on the basis that certain types must be well-formed – these are either the types that appear in the function signature or else the input types to an impl. For example, if you have a function like

fn foo<'a, 'b, T>(x: &'a &'b [T]) { }

we can assume in the caller’s body that 'b: 'a and that T: 'b (and hence, transitively, that T: 'a). This method would add those assumptions into the outlives-environment.

Tests: src/test/ui/regions/regions-free-region-ordering-*.rs

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

impl<T> Any for T where
    T: 'static + ?Sized, 
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized, 
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized, 
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T> ToOwned for T where
    T: Clone, 
[src]

type Owned = T

The resulting type after obtaining ownership.

pub fn to_owned(&self) -> T[src]

Creates owned data from borrowed data, usually by cloning. Read more

pub fn clone_into(&self, target: &mut T)[src]

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.

impl<T> WithConstness for T[src]

fn with_constness(self, constness: Constness) -> ConstnessAnd<Self>[src]

fn with_const(self) -> ConstnessAnd<Self>[src]

fn without_const(self) -> ConstnessAnd<Self>[src]