rustc_infer::infer::lexical_region_resolve

Struct LexicalResolver

source
struct LexicalResolver<'cx, 'tcx> {
    region_rels: &'cx RegionRelations<'cx, 'tcx>,
    var_infos: VarInfos,
    data: RegionConstraintData<'tcx>,
}

Fields§

§region_rels: &'cx RegionRelations<'cx, 'tcx>§var_infos: VarInfos§data: RegionConstraintData<'tcx>

Implementations§

source§

impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx>

source

fn tcx(&self) -> TyCtxt<'tcx>

source

fn infer_variable_values( &mut self, errors: &mut Vec<RegionResolutionError<'tcx>>, ) -> LexicalRegionResolutions<'tcx>

source

fn num_vars(&self) -> usize

source

fn construct_var_data(&self) -> LexicalRegionResolutions<'tcx>

Initially, the value for all variables is set to 'empty, the empty region. The expansion phase will grow this larger.

source

fn dump_constraints(&self)

source

fn expansion(&self, var_values: &mut LexicalRegionResolutions<'tcx>)

source

fn expand_node( &self, a_region: Region<'tcx>, b_vid: RegionVid, b_data: &mut VarValue<'tcx>, ) -> bool

Expands the value of the region represented with b_vid with current value b_data to the lub of b_data and a_region. The corresponds with the constraint '?b: 'a ('a <: '?b), where 'a is some known region and '?b is some region variable.

source

fn sub_region_values(&self, a: VarValue<'tcx>, b: VarValue<'tcx>) -> bool

True if a <= b.

source

fn sub_concrete_regions(&self, a: Region<'tcx>, b: Region<'tcx>) -> bool

True if a <= b, but not defined over inference variables.

source

fn lub_concrete_regions(&self, a: Region<'tcx>, b: Region<'tcx>) -> Region<'tcx>

Returns the least-upper-bound of a and b; i.e., the smallest region c such that a <= c and b <= c.

Neither a nor b may be an inference variable (hence the term “concrete regions”).

source

fn collect_errors( &self, var_data: &mut LexicalRegionResolutions<'tcx>, errors: &mut Vec<RegionResolutionError<'tcx>>, )

After expansion is complete, go and check upper bounds (i.e., cases where the region cannot grow larger than a fixed point) and check that they are satisfied.

source

fn collect_var_errors( &self, var_data: &LexicalRegionResolutions<'tcx>, errors: &mut Vec<RegionResolutionError<'tcx>>, )

Go over the variables that were declared to be error variables and create a RegionResolutionError for each of them.

source

fn construct_graph(&self) -> Graph<(), Constraint<'tcx>>

source

fn collect_error_for_expanding_node( &self, graph: &Graph<(), Constraint<'tcx>>, dup_vec: &mut IndexSlice<RegionVid, Option<RegionVid>>, node_idx: RegionVid, errors: &mut Vec<RegionResolutionError<'tcx>>, )

source

fn collect_bounding_regions( &self, graph: &Graph<(), Constraint<'tcx>>, orig_node_idx: RegionVid, dir: Direction, dup_vec: Option<&mut IndexSlice<RegionVid, Option<RegionVid>>>, ) -> (Vec<RegionAndOrigin<'tcx>>, FxHashSet<RegionVid>, bool)

Collects all regions that “bound” the variable orig_node_idx in the given direction.

If dup_vec is Some it’s used to track duplicates between successive calls of this function.

The return tuple fields are:

  • a list of all concrete regions bounding the given region.
  • the set of all region variables bounding the given region.
  • a bool that’s true if the returned region variables overlap with those returned by a previous call for another region.
source

fn bound_is_met( &self, bound: &VerifyBound<'tcx>, var_values: &LexicalRegionResolutions<'tcx>, generic_ty: Ty<'tcx>, min: Region<'tcx>, ) -> bool

Auto Trait Implementations§

§

impl<'cx, 'tcx> Freeze for LexicalResolver<'cx, 'tcx>

§

impl<'cx, 'tcx> !RefUnwindSafe for LexicalResolver<'cx, 'tcx>

§

impl<'cx, 'tcx> !Send for LexicalResolver<'cx, 'tcx>

§

impl<'cx, 'tcx> !Sync for LexicalResolver<'cx, 'tcx>

§

impl<'cx, 'tcx> Unpin for LexicalResolver<'cx, 'tcx>

§

impl<'cx, 'tcx> !UnwindSafe for LexicalResolver<'cx, 'tcx>

Blanket Implementations§

source§

impl<T> Aligned for T

source§

const ALIGN: Alignment = _

Alignment of Self.
source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T, R> CollectAndApply<T, R> for T

source§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

source§

type Output = R

source§

impl<T> Filterable for T

source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
source§

impl<P> IntoQueryParam<P> for P

source§

impl<T> MaybeResult<T> for T

source§

type Error = !

source§

fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

source§

fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

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

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

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

The type returned in the event of a conversion error.
source§

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

Performs the conversion.
source§

impl<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

source§

fn upcast(self, interner: I) -> U

source§

impl<I, T> UpcastFrom<I, T> for T

source§

fn upcast_from(from: T, _tcx: I) -> T

source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<Tcx, T> Value<Tcx> for T
where Tcx: DepContext,

source§

default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<'a, T> Captures<'a> for T
where T: ?Sized,

source§

impl<T> ErasedDestructor for T
where T: 'static,

source§

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: 104 bytes