pub(crate) struct MemberConstraintSet<'tcx, R>where
R: Copy + Eq,{
first_constraints: FxHashMap<R, NllMemberConstraintIndex>,
constraints: IndexVec<NllMemberConstraintIndex, NllMemberConstraint<'tcx>>,
choice_regions: Vec<RegionVid>,
}
Expand description
Compactly stores a set of R0 member of [R1...Rn]
constraints,
indexed by the region R0
.
Fields§
§first_constraints: FxHashMap<R, NllMemberConstraintIndex>
Stores the first “member” constraint for a given R0
. This is an
index into the constraints
vector below.
constraints: IndexVec<NllMemberConstraintIndex, NllMemberConstraint<'tcx>>
Stores the data about each R0 member of [R1..Rn]
constraint.
These are organized into a linked list, so each constraint
contains the index of the next constraint with the same R0
.
choice_regions: Vec<RegionVid>
Stores the R1..Rn
regions for all sets. For any given
constraint, we keep two indices so that we can pull out a
slice.
Implementations§
source§impl<'tcx> MemberConstraintSet<'tcx, RegionVid>
impl<'tcx> MemberConstraintSet<'tcx, RegionVid>
sourcepub(crate) fn push_constraint(
&mut self,
m_c: &MemberConstraint<'tcx>,
to_region_vid: impl FnMut(Region<'tcx>) -> RegionVid
)
pub(crate) fn push_constraint(
&mut self,
m_c: &MemberConstraint<'tcx>,
to_region_vid: impl FnMut(Region<'tcx>) -> RegionVid
)
Pushes a member constraint into the set.
The input member constraint m_c
is in the form produced by
the rustc_middle::infer
code.
The to_region_vid
callback fn is used to convert the regions
within into RegionVid
format – it typically consults the
UniversalRegions
data structure that is known to the caller
(but which this code is unaware of).
source§impl<'tcx, R1> MemberConstraintSet<'tcx, R1>where
R1: Copy + Hash + Eq,
impl<'tcx, R1> MemberConstraintSet<'tcx, R1>where
R1: Copy + Hash + Eq,
sourcepub(crate) fn into_mapped<R2>(
self,
map_fn: impl FnMut(R1) -> R2
) -> MemberConstraintSet<'tcx, R2>where
R2: Copy + Hash + Eq,
pub(crate) fn into_mapped<R2>(
self,
map_fn: impl FnMut(R1) -> R2
) -> MemberConstraintSet<'tcx, R2>where
R2: Copy + Hash + Eq,
Remap the “member region” key using map_fn
, producing a new
member constraint set. This is used in the NLL code to map from
the original RegionVid
to an scc index. In some cases, we
may have multiple R1
values mapping to the same R2
key – that
is ok, the two sets will be merged.
source§impl<'tcx, R> MemberConstraintSet<'tcx, R>where
R: Copy + Hash + Eq,
impl<'tcx, R> MemberConstraintSet<'tcx, R>where
R: Copy + Hash + Eq,
pub(crate) fn all_indices(
&self
) -> impl Iterator<Item = NllMemberConstraintIndex> + Captures<'tcx> + '_
sourcepub(crate) fn indices(
&self,
member_region_vid: R
) -> impl Iterator<Item = NllMemberConstraintIndex> + Captures<'tcx> + '_
pub(crate) fn indices(
&self,
member_region_vid: R
) -> impl Iterator<Item = NllMemberConstraintIndex> + Captures<'tcx> + '_
Iterate down the constraint indices associated with a given
peek-region. You can then use choice_regions
and other
methods to access data.
sourcepub(crate) fn choice_regions(
&self,
pci: NllMemberConstraintIndex
) -> &[RegionVid]
pub(crate) fn choice_regions(
&self,
pci: NllMemberConstraintIndex
) -> &[RegionVid]
Returns the “choice regions” for a given member
constraint. This is the R1..Rn
from a constraint like:
R0 member of [R1..Rn]
Trait Implementations§
source§impl Default for MemberConstraintSet<'_, RegionVid>
impl Default for MemberConstraintSet<'_, RegionVid>
source§impl<'tcx, R> Index<NllMemberConstraintIndex> for MemberConstraintSet<'tcx, R>where
R: Copy + Eq,
impl<'tcx, R> Index<NllMemberConstraintIndex> for MemberConstraintSet<'tcx, R>where
R: Copy + Eq,
§type Output = NllMemberConstraint<'tcx>
type Output = NllMemberConstraint<'tcx>
source§fn index(&self, i: NllMemberConstraintIndex) -> &NllMemberConstraint<'tcx>
fn index(&self, i: NllMemberConstraintIndex) -> &NllMemberConstraint<'tcx>
container[index]
) operation. Read moreAuto Trait Implementations§
impl<'tcx, R> !RefUnwindSafe for MemberConstraintSet<'tcx, R>
impl<'tcx, R> !Send for MemberConstraintSet<'tcx, R>
impl<'tcx, R> !Sync for MemberConstraintSet<'tcx, R>
impl<'tcx, R> Unpin for MemberConstraintSet<'tcx, R>where
R: Unpin,
impl<'tcx, R> !UnwindSafe for MemberConstraintSet<'tcx, R>
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: 80 bytes