Struct rustc_infer::infer::lexical_region_resolve::LexicalResolver
source · [−]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: VarInfosdata: RegionConstraintData<'tcx>Implementations
sourceimpl<'cx, 'tcx> LexicalResolver<'cx, 'tcx>
impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx>
fn tcx(&self) -> TyCtxt<'tcx>
fn infer_variable_values(
&mut self,
errors: &mut Vec<RegionResolutionError<'tcx>>
) -> LexicalRegionResolutions<'tcx>
fn num_vars(&self) -> usize
sourcefn construct_var_data(&self, tcx: TyCtxt<'tcx>) -> LexicalRegionResolutions<'tcx>
fn construct_var_data(&self, tcx: TyCtxt<'tcx>) -> LexicalRegionResolutions<'tcx>
Initially, the value for all variables is set to 'empty, the
empty region. The expansion phase will grow this larger.
fn dump_constraints(&self)
fn expand_givens(&mut self, graph: &Graph<(), Constraint<'_>>)
fn expansion(&self, var_values: &mut LexicalRegionResolutions<'tcx>)
fn expand_node(
&self,
a_region: Region<'tcx>,
b_vid: RegionVid,
b_data: &mut VarValue<'tcx>
) -> bool
sourcefn sub_concrete_regions(&self, a: Region<'tcx>, b: Region<'tcx>) -> bool
fn sub_concrete_regions(&self, a: Region<'tcx>, b: Region<'tcx>) -> bool
True if a <= b, but not defined over inference variables.
sourcefn lub_concrete_regions(&self, a: Region<'tcx>, b: Region<'tcx>) -> Region<'tcx>
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”).
sourcefn collect_errors(
&self,
var_data: &mut LexicalRegionResolutions<'tcx>,
errors: &mut Vec<RegionResolutionError<'tcx>>
)
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.
sourcefn collect_var_errors(
&self,
var_data: &LexicalRegionResolutions<'tcx>,
graph: &Graph<(), Constraint<'tcx>>,
errors: &mut Vec<RegionResolutionError<'tcx>>
)
fn collect_var_errors(
&self,
var_data: &LexicalRegionResolutions<'tcx>,
graph: &Graph<(), Constraint<'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.
fn construct_graph(&self) -> Graph<(), Constraint<'tcx>>
fn collect_error_for_expanding_node(
&self,
graph: &Graph<(), Constraint<'tcx>>,
dup_vec: &mut IndexVec<RegionVid, Option<RegionVid>>,
node_idx: RegionVid,
errors: &mut Vec<RegionResolutionError<'tcx>>,
influences: Vec<Span>
)
sourcefn collect_bounding_regions(
&self,
graph: &Graph<(), Constraint<'tcx>>,
orig_node_idx: RegionVid,
dir: Direction,
dup_vec: Option<&mut IndexVec<RegionVid, Option<RegionVid>>>
) -> (Vec<RegionAndOrigin<'tcx>>, FxHashSet<RegionVid>, bool)
fn collect_bounding_regions(
&self,
graph: &Graph<(), Constraint<'tcx>>,
orig_node_idx: RegionVid,
dir: Direction,
dup_vec: Option<&mut IndexVec<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
boolthat’s true if the returned region variables overlap with those returned by a previous call for another region.
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> where
'tcx: 'cx,
impl<'cx, 'tcx> !UnwindSafe for LexicalResolver<'cx, 'tcx>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<'a, T> Captures<'a> for T where
T: ?Sized,
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: 144 bytes