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

Fields§

§param_env: ParamEnv<'tcx>§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> !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> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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, U> TryFrom<U> for Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.

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