pub(crate) 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 defining_ty: DefiningTy<'tcx>,
pub unnormalized_output_ty: Ty<'tcx>,
pub unnormalized_input_tys: &'tcx [Ty<'tcx>],
pub yield_ty: Option<Ty<'tcx>>,
pub resume_ty: Option<Ty<'tcx>>,
}Fields§
§indices: UniversalRegionIndices<'tcx>§fr_static: RegionVidThe vid assigned to 'static
fr_fn_body: RegionVidA 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: usizeWe 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: usizeSee first_extern_index.
num_universals: usizeThe total number of universal region variables instantiated.
defining_ty: DefiningTy<'tcx>The “defining” type for this function, with all universal
regions instantiated. For a closure or coroutine, this is the
closure type, but for a top-level function it’s the FnDef.
unnormalized_output_ty: Ty<'tcx>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>]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>>§resume_ty: Option<Ty<'tcx>>Implementations§
Source§impl<'tcx> UniversalRegions<'tcx>
impl<'tcx> UniversalRegions<'tcx>
Sourcepub(crate) fn new(infcx: &BorrowckInferCtxt<'tcx>, mir_def: LocalDefId) -> Self
pub(crate) fn new(infcx: &BorrowckInferCtxt<'tcx>, mir_def: LocalDefId) -> Self
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.
Sourcepub(crate) fn closure_mapping(
tcx: TyCtxt<'tcx>,
closure_args: GenericArgsRef<'tcx>,
expected_num_vars: usize,
closure_def_id: LocalDefId,
) -> IndexVec<RegionVid, Region<'tcx>>
pub(crate) fn closure_mapping( tcx: TyCtxt<'tcx>, closure_args: GenericArgsRef<'tcx>, expected_num_vars: usize, closure_def_id: LocalDefId, ) -> IndexVec<RegionVid, Region<'tcx>>
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].
Sourcepub(crate) fn is_universal_region(&self, r: RegionVid) -> bool
pub(crate) fn is_universal_region(&self, r: RegionVid) -> bool
Returns true if r is a member of this set of universal regions.
Sourcepub(crate) fn region_classification(
&self,
r: RegionVid,
) -> Option<RegionClassification>
pub(crate) fn region_classification( &self, r: RegionVid, ) -> Option<RegionClassification>
Classifies r as a universal region, returning None if this
is not a member of this set of universal regions.
Sourcepub(crate) fn universal_regions_iter(
&self,
) -> impl Iterator<Item = RegionVid> + 'static
pub(crate) fn universal_regions_iter( &self, ) -> impl Iterator<Item = RegionVid> + 'static
Returns an iterator over all the RegionVids corresponding to universally quantified free regions.
Sourcepub(crate) fn is_local_free_region(&self, r: RegionVid) -> bool
pub(crate) fn is_local_free_region(&self, r: RegionVid) -> bool
Returns true if r is classified as a local region.
Sourcepub(crate) fn len(&self) -> usize
pub(crate) fn len(&self) -> usize
Returns the number of universal regions created in any category.
Sourcepub(crate) fn num_global_and_external_regions(&self) -> usize
pub(crate) fn num_global_and_external_regions(&self) -> usize
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.
Sourcepub(crate) fn named_universal_regions_iter(
&self,
) -> impl Iterator<Item = (Region<'tcx>, RegionVid)>
pub(crate) fn named_universal_regions_iter( &self, ) -> impl Iterator<Item = (Region<'tcx>, RegionVid)>
Gets an iterator over all the early-bound regions that have names.
Sourcepub(crate) fn to_region_vid(&self, r: Region<'tcx>) -> RegionVid
pub(crate) fn to_region_vid(&self, r: Region<'tcx>) -> RegionVid
Sourcepub(crate) fn annotate(&self, tcx: TyCtxt<'tcx>, err: &mut Diag<'_, ()>)
pub(crate) fn annotate(&self, tcx: TyCtxt<'tcx>, err: &mut Diag<'_, ()>)
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.
pub(crate) fn implicit_region_bound(&self) -> RegionVid
pub(crate) fn encountered_re_error(&self) -> Option<ErrorGuaranteed>
Trait Implementations§
Source§impl<'tcx> Clone for UniversalRegions<'tcx>
impl<'tcx> Clone for UniversalRegions<'tcx>
Source§fn clone(&self) -> UniversalRegions<'tcx>
fn clone(&self) -> UniversalRegions<'tcx>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl<'tcx> DynSend for UniversalRegions<'tcx>
impl<'tcx> !DynSync for UniversalRegions<'tcx>
impl<'tcx> !Freeze for UniversalRegions<'tcx>
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§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
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: 160 bytes