pub(crate) struct MemberConstraintSet<'tcx, R>{
first_constraints: FxIndexMap<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: FxIndexMap<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>
impl<'tcx, R1> MemberConstraintSet<'tcx, R1>
Sourcepub(crate) fn into_mapped<R2>(
self,
map_fn: impl FnMut(R1) -> R2,
) -> MemberConstraintSet<'tcx, R2>
pub(crate) fn into_mapped<R2>( self, map_fn: impl FnMut(R1) -> R2, ) -> MemberConstraintSet<'tcx, R2>
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>
impl<'tcx, R> MemberConstraintSet<'tcx, R>
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<'tcx, R> Debug for MemberConstraintSet<'tcx, R>
impl<'tcx, R> Debug for MemberConstraintSet<'tcx, R>
Source§impl Default for MemberConstraintSet<'_, RegionVid>
impl Default for MemberConstraintSet<'_, RegionVid>
Source§impl<'tcx, R> Index<NllMemberConstraintIndex> for MemberConstraintSet<'tcx, R>
impl<'tcx, R> Index<NllMemberConstraintIndex> for MemberConstraintSet<'tcx, R>
Source§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> DynSend for MemberConstraintSet<'tcx, R>where
R: DynSend,
impl<'tcx, R> DynSync for MemberConstraintSet<'tcx, R>where
R: DynSync,
impl<'tcx, R> Freeze for MemberConstraintSet<'tcx, R>
impl<'tcx, R> !RefUnwindSafe for MemberConstraintSet<'tcx, R>
impl<'tcx, R> Send for MemberConstraintSet<'tcx, R>where
R: Send,
impl<'tcx, R> Sync for MemberConstraintSet<'tcx, R>where
R: Sync,
impl<'tcx, R> Unpin for MemberConstraintSet<'tcx, R>where
R: Unpin,
impl<'tcx, R> !UnwindSafe for MemberConstraintSet<'tcx, R>
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, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
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<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
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: 104 bytes