rustc_borrowck::universal_regions

Struct UniversalRegions

Source
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: RegionVid

The vid assigned to 'static

§fr_fn_body: RegionVid

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: usize

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_index are global,
  • first_extern_index..first_local_index are external,
  • first_local_index..num_universals are local.
§first_local_index: usize

See first_extern_index.

§num_universals: usize

The 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>

Source

pub(crate) fn new( infcx: &BorrowckInferCtxt<'tcx>, mir_def: LocalDefId, param_env: ParamEnv<'tcx>, ) -> 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.

Source

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].

Source

pub(crate) fn is_universal_region(&self, r: RegionVid) -> bool

Returns true if r is a member of this set of universal regions.

Source

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.

Source

pub(crate) fn universal_regions(&self) -> impl Iterator<Item = RegionVid>

Returns an iterator over all the RegionVids corresponding to universally quantified free regions.

Source

pub(crate) fn is_local_free_region(&self, r: RegionVid) -> bool

Returns true if r is classified as a local region.

Source

pub(crate) fn len(&self) -> usize

Returns the number of universal regions created in any category.

Source

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.

Source

pub(crate) fn named_universal_regions<'s>( &'s self, ) -> impl Iterator<Item = (Region<'tcx>, RegionVid)> + 's

Gets an iterator over all the early-bound regions that have names.

Source

pub(crate) fn to_region_vid(&self, r: Region<'tcx>) -> RegionVid

See UniversalRegionIndices::to_region_vid.

Source

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.

Source

pub(crate) fn tainted_by_errors(&self) -> Option<ErrorGuaranteed>

Trait Implementations§

Source§

impl<'tcx> Debug for UniversalRegions<'tcx>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto 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> Aligned for T

Source§

const ALIGN: Alignment = _

Alignment of Self.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T, R> CollectAndApply<T, R> for T

Source§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

Source§

type Output = R

Source§

impl<T> Filterable for T

Source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<P> IntoQueryParam<P> for P

Source§

impl<T> MaybeResult<T> for T

Source§

type Error = !

Source§

fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

Source§

fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize = _

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

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

Source§

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.
Source§

impl<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

Source§

fn upcast(self, interner: I) -> U

Source§

impl<I, T> UpcastFrom<I, T> for T

Source§

fn upcast_from(from: T, _tcx: I) -> T

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<Tcx, T> Value<Tcx> for T
where Tcx: DepContext,

Source§

default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<'a, T> Captures<'a> for T
where T: ?Sized,

Source§

impl<T> ErasedDestructor for T
where 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