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: VarInfos
§data: RegionConstraintData<'tcx>
Implementations§
source§impl<'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) -> LexicalRegionResolutions<'tcx>
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.
fn dump_constraints(&self)
fn expand_givens(&mut self, graph: &Graph<(), Constraint<'_>>)
sourcefn lub_empty(
&self,
a_region: Region<'tcx>
) -> Result<Region<'tcx>, PlaceholderRegion>
fn lub_empty(
&self,
a_region: Region<'tcx>
) -> Result<Region<'tcx>, PlaceholderRegion>
Gets the LUb of a given region and the empty region
fn expansion(&self, var_values: &mut LexicalRegionResolutions<'tcx>)
sourcefn expand_node(
&self,
a_region: Region<'tcx>,
b_vid: RegionVid,
b_data: &mut VarValue<'tcx>
) -> bool
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.
sourcefn sub_region_values(&self, a: VarValue<'tcx>, b: VarValue<'tcx>) -> bool
fn sub_region_values(&self, a: VarValue<'tcx>, b: VarValue<'tcx>) -> bool
True if a <= b
.
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
bool
that’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§
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: 168 bytes