Struct rustc_mir::borrow_check::nll::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 defining_ty: DefiningTy<'tcx>, pub unnormalized_output_ty: Ty<'tcx>, pub unnormalized_input_tys: &'tcx [Ty<'tcx>], pub region_bound_pairs: Vec<(Region<'tcx>, GenericKind<'tcx>)>, pub yield_ty: Option<Ty<'tcx>>, relations: UniversalRegionRelations, }
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Fields
indices: UniversalRegionIndices<'tcx>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
fr_static: RegionVid
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
The vid assigned to 'static
fr_fn_body: RegionVid
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
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
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
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; and- first_local_index..num_universals` are local.
first_local_index: usize
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
See first_extern_index
.
num_universals: usize
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
The total number of universal region variables instantiated.
defining_ty: DefiningTy<'tcx>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
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 TyFnDef
.
unnormalized_output_ty: Ty<'tcx>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
The return type of this function, with all regions replaced by
their universal RegionVid
equivalents.
NB. Associated types in this type have not been normalized, as the name suggests. =)
unnormalized_input_tys: &'tcx [Ty<'tcx>]
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
The fully liberated input types of this function, with all
regions replaced by their universal RegionVid
equivalents.
NB. Associated types in these types have not been normalized, as the name suggests. =)
region_bound_pairs: Vec<(Region<'tcx>, GenericKind<'tcx>)>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Each RBP ('a, GK)
indicates that GK: 'a
can be assumed to
be true. These encode relationships like T: 'a
that are
added via implicit bounds.
Each region here is guaranteed to be a key in the indices
map. We use the "original" regions (i.e., the keys from the
map, and not the values) because the code in
process_registered_region_obligations
has some special-cased
logic expecting to see (e.g.) ReStatic
, and if we supplied
our special inference variable there, we would mess that up.
yield_ty: Option<Ty<'tcx>>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
relations: UniversalRegionRelations
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Methods
impl<'tcx> UniversalRegions<'tcx>
[src]
impl<'tcx> UniversalRegions<'tcx>
pub fn new(
infcx: &InferCtxt<'_, '_, 'tcx>,
mir_def_id: DefId,
param_env: ParamEnv<'tcx>
) -> Self
[src]
pub fn new(
infcx: &InferCtxt<'_, '_, 'tcx>,
mir_def_id: DefId,
param_env: ParamEnv<'tcx>
) -> Self
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
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(
infcx: &InferCtxt<'_, '_, 'tcx>,
closure_ty: Ty<'tcx>,
expected_num_vars: usize
) -> IndexVec<RegionVid, Region<'tcx>>
[src]
pub fn closure_mapping(
infcx: &InferCtxt<'_, '_, 'tcx>,
closure_ty: Ty<'tcx>,
expected_num_vars: usize
) -> IndexVec<RegionVid, Region<'tcx>>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
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
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
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>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
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>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
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
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
True if r
is classified as an local region.
pub fn len(&self) -> usize
[src]
pub fn len(&self) -> usize
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Returns the number of universal regions created in any category.
pub fn postdom_upper_bound(&self, fr1: RegionVid, fr2: RegionVid) -> RegionVid
[src]
pub fn postdom_upper_bound(&self, fr1: RegionVid, fr2: RegionVid) -> RegionVid
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Given two universal regions, returns the postdominating upper-bound (effectively the least upper bound).
(See TransitiveRelation::postdom_upper_bound
for details on
the postdominating upper bound in general.)
pub fn non_local_upper_bound(&self, fr: RegionVid) -> RegionVid
[src]
pub fn non_local_upper_bound(&self, fr: RegionVid) -> RegionVid
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Finds an "upper bound" for fr
that is not local. In other
words, returns the smallest (*) known region fr1
that (a)
outlives fr
and (b) is not local. This cannot fail, because
we will always find 'static
at worst.
(*) If there are multiple competing choices, we pick the "postdominating"
one. See TransitiveRelation::postdom_upper_bound
for details.
pub fn non_local_lower_bound(&self, fr: RegionVid) -> Option<RegionVid>
[src]
pub fn non_local_lower_bound(&self, fr: RegionVid) -> Option<RegionVid>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Finds a "lower bound" for fr
that is not local. In other
words, returns the largest (*) known region fr1
that (a) is
outlived by fr
and (b) is not local. This cannot fail,
because we will always find 'static
at worst.
(*) If there are multiple competing choices, we pick the "postdominating"
one. See TransitiveRelation::postdom_upper_bound
for details.
pub fn num_global_and_external_regions(&self) -> usize
[src]
pub fn num_global_and_external_regions(&self) -> usize
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
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.
fn non_local_bound(
&self,
relation: &TransitiveRelation<RegionVid>,
fr0: RegionVid
) -> Option<RegionVid>
[src]
fn non_local_bound(
&self,
relation: &TransitiveRelation<RegionVid>,
fr0: RegionVid
) -> Option<RegionVid>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Helper for non_local_upper_bound
and
non_local_lower_bound
. Repeatedly invokes postdom_parent
until we find something that is not local. Returns None if we
never do so.
pub fn outlives(&self, fr1: RegionVid, fr2: RegionVid) -> bool
[src]
pub fn outlives(&self, fr1: RegionVid, fr2: RegionVid) -> bool
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
True if fr1 is known to outlive fr2.
This will only ever be true for universally quantified regions.
pub fn regions_outlived_by(&self, fr1: RegionVid) -> Vec<&RegionVid>
[src]
pub fn regions_outlived_by(&self, fr1: RegionVid) -> Vec<&RegionVid>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Returns a vector of free regions x
such that fr1: x
is
known to hold.
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
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Get 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
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
See UniversalRegionIndices::to_region_vid
.
Trait Implementations
impl<'tcx> Debug for UniversalRegions<'tcx>
[src]
impl<'tcx> Debug for UniversalRegions<'tcx>
fn fmt(&self, f: &mut Formatter) -> Result
[src]
fn fmt(&self, f: &mut Formatter) -> Result
Formats the value using the given formatter. Read more
impl<'tcx> FreeRegionRelations<'tcx> for UniversalRegions<'tcx>
[src]
impl<'tcx> FreeRegionRelations<'tcx> for UniversalRegions<'tcx>
This trait is used by the impl-trait
constraint code to abstract
over the FreeRegionMap
from lexical regions and
UniversalRegions
(from NLL)`.
fn sub_free_regions(&self, shorter: Region<'tcx>, longer: Region<'tcx>) -> bool
[src]
fn sub_free_regions(&self, shorter: Region<'tcx>, longer: Region<'tcx>) -> bool
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Tests whether r_a <= r_b
. Both must be free regions or 'static
. Read more
Auto Trait Implementations
impl<'tcx> !Send for UniversalRegions<'tcx>
impl<'tcx> !Send for UniversalRegions<'tcx>
impl<'tcx> !Sync for UniversalRegions<'tcx>
impl<'tcx> !Sync for UniversalRegions<'tcx>