Struct rustc_mir::borrow_check::universal_regions::UniversalRegions [−][src]
pub struct UniversalRegions<'tcx> {
indices: UniversalRegionIndices<'tcx>,
pub fr_static: RegionVid,
pub fr_fn_body: RegionVid,
first_extern_index: usize,
first_local_index: usize,
num_universals: usize,
pub root_empty: RegionVid,
pub defining_ty: DefiningTy<'tcx>,
pub unnormalized_output_ty: Ty<'tcx>,
pub unnormalized_input_tys: &'tcx [Ty<'tcx>],
pub yield_ty: Option<Ty<'tcx>>,
}Fields
indices: UniversalRegionIndices<'tcx>fr_static: RegionVidExpand description
The vid assigned to 'static
fr_fn_body: RegionVidExpand description
A special region vid created to represent the current MIR fn body. It will outlive the entire CFG but it will not outlive any other universal regions.
first_extern_index: usizeExpand description
We create region variables such that they are ordered by their
RegionClassification. The first block are globals, then
externals, then locals. So, things from:
FIRST_GLOBAL_INDEX..first_extern_indexare global,first_extern_index..first_local_indexare external,first_local_index..num_universalsare local.
first_local_index: usizeExpand description
See first_extern_index.
num_universals: usizeExpand description
The total number of universal region variables instantiated.
root_empty: RegionVidExpand description
A special region variable created for the 'empty(U0) region.
Note that this is not a “universal” region, as it doesn’t
represent a universally bound placeholder or any such thing.
But we do create it here in this type because it’s a useful region
to have around in a few limited cases.
defining_ty: DefiningTy<'tcx>Expand description
The “defining” type for this function, with all universal
regions instantiated. For a closure or generator, this is the
closure type, but for a top-level function it’s the FnDef.
unnormalized_output_ty: Ty<'tcx>Expand description
The return type of this function, with all regions replaced by
their universal RegionVid equivalents.
N.B., associated types in this type have not been normalized, as the name suggests. =)
unnormalized_input_tys: &'tcx [Ty<'tcx>]Expand description
The fully liberated input types of this function, with all
regions replaced by their universal RegionVid equivalents.
N.B., associated types in these types have not been normalized, as the name suggests. =)
yield_ty: Option<Ty<'tcx>>Implementations
impl<'tcx> UniversalRegions<'tcx>[src]
impl<'tcx> UniversalRegions<'tcx>[src]pub fn new(
infcx: &InferCtxt<'_, 'tcx>,
mir_def: WithOptConstParam<LocalDefId>,
param_env: ParamEnv<'tcx>
) -> Self[src]
pub fn new(
infcx: &InferCtxt<'_, 'tcx>,
mir_def: WithOptConstParam<LocalDefId>,
param_env: ParamEnv<'tcx>
) -> Self[src]Creates a new and fully initialized UniversalRegions that
contains indices for all the free regions found in the given
MIR – that is, all the regions that appear in the function’s
signature. This will also compute the relationships that are
known between those regions.
pub fn closure_mapping(
tcx: TyCtxt<'tcx>,
closure_substs: SubstsRef<'tcx>,
expected_num_vars: usize,
closure_base_def_id: DefId
) -> IndexVec<RegionVid, Region<'tcx>>[src]
pub fn closure_mapping(
tcx: TyCtxt<'tcx>,
closure_substs: SubstsRef<'tcx>,
expected_num_vars: usize,
closure_base_def_id: DefId
) -> IndexVec<RegionVid, Region<'tcx>>[src]Given a reference to a closure type, extracts all the values
from its free regions and returns a vector with them. This is
used when the closure’s creator checks that the
ClosureRegionRequirements are met. The requirements from
ClosureRegionRequirements are expressed in terms of
RegionVid entries that map into the returned vector V: so
if the ClosureRegionRequirements contains something like
'1: '2, then the caller would impose the constraint that
V[1]: V[2].
pub fn is_universal_region(&self, r: RegionVid) -> bool[src]
pub fn is_universal_region(&self, r: RegionVid) -> bool[src]Returns true if r is a member of this set of universal regions.
pub fn region_classification(
&self,
r: RegionVid
) -> Option<RegionClassification>[src]
pub fn region_classification(
&self,
r: RegionVid
) -> Option<RegionClassification>[src]Classifies r as a universal region, returning None if this
is not a member of this set of universal regions.
pub fn universal_regions(&self) -> impl Iterator<Item = RegionVid>[src]
pub fn universal_regions(&self) -> impl Iterator<Item = RegionVid>[src]Returns an iterator over all the RegionVids corresponding to universally quantified free regions.
pub fn is_local_free_region(&self, r: RegionVid) -> bool[src]
pub fn is_local_free_region(&self, r: RegionVid) -> bool[src]Returns true if r is classified as an local region.
pub fn num_global_and_external_regions(&self) -> usize[src]
pub fn num_global_and_external_regions(&self) -> usize[src]Returns the number of global plus external universal regions. For closures, these are the regions that appear free in the closure type (versus those bound in the closure signature). They are therefore the regions between which the closure may impose constraints that its creator must verify.
pub fn named_universal_regions<'s>(
&'s self
) -> impl Iterator<Item = (Region<'tcx>, RegionVid)> + 's[src]
pub fn named_universal_regions<'s>(
&'s self
) -> impl Iterator<Item = (Region<'tcx>, RegionVid)> + 's[src]Gets an iterator over all the early-bound regions that have names.
pub fn to_region_vid(&self, r: Region<'tcx>) -> RegionVid[src]
pub fn to_region_vid(&self, r: Region<'tcx>) -> RegionVid[src]See UniversalRegionIndices::to_region_vid.
pub(crate) fn annotate(
&self,
tcx: TyCtxt<'tcx>,
err: &mut DiagnosticBuilder<'_>
)[src]
pub(crate) fn annotate(
&self,
tcx: TyCtxt<'tcx>,
err: &mut DiagnosticBuilder<'_>
)[src]As part of the NLL unit tests, you can annotate a function with
#[rustc_regions], and we will emit information about the region
inference context and – in particular – the external constraints
that this region imposes on others. The methods in this file
handle the part about dumping the inference context internal
state.
Trait Implementations
Auto Trait Implementations
impl<'tcx> !RefUnwindSafe for UniversalRegions<'tcx>
impl<'tcx> !Send for UniversalRegions<'tcx>
impl<'tcx> !Sync for UniversalRegions<'tcx>
impl<'tcx> Unpin for UniversalRegions<'tcx>
impl<'tcx> !UnwindSafe for UniversalRegions<'tcx>
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]pub fn borrow_mut(&mut self) -> &mut T[src]
pub fn borrow_mut(&mut self) -> &mut T[src]Mutably borrows from an owned value. Read more
impl<T> WithConstness for T[src]
impl<T> WithConstness for T[src]