Struct rustc_mir_build::build::matches::MatchPairTree
source · pub(crate) struct MatchPairTree<'pat, 'tcx> {
place: Option<Place<'tcx>>,
test_case: TestCase<'pat, 'tcx>,
subpairs: Vec<Self>,
pattern: &'pat Pat<'tcx>,
}
Expand description
Node in a tree of “match pairs”, where each pair consists of a place to be tested, and a test to perform on that place.
Each node also has a list of subpairs (possibly empty) that must also match, and a reference to the THIR pattern it represents.
Fields§
§place: Option<Place<'tcx>>
This place…
This can be None
if it referred to a non-captured place in a closure.
Invariant: Can only be None
when test_case
is Irrefutable
.
Therefore this must be Some(_)
after simplification.
test_case: TestCase<'pat, 'tcx>
… must pass this test…
Invariant: after creation and simplification in FlatPat::new
,
this must not be TestCase::Irrefutable
.
subpairs: Vec<Self>
… and these subpairs must match.
Subpairs typically represent tests that can only be performed after their
parent has succeeded. For example, the pattern Some(3)
might have an
outer match pair that tests for the variant Some
, and then a subpair
that tests its field for the value 3
.
pattern: &'pat Pat<'tcx>
The pattern this was created from.
Implementations§
source§impl<'pat, 'tcx> MatchPairTree<'pat, 'tcx>
impl<'pat, 'tcx> MatchPairTree<'pat, 'tcx>
sourcepub(in build) fn for_pattern(
place_builder: PlaceBuilder<'tcx>,
pattern: &'pat Pat<'tcx>,
cx: &mut Builder<'_, 'tcx>,
) -> MatchPairTree<'pat, 'tcx>
pub(in build) fn for_pattern( place_builder: PlaceBuilder<'tcx>, pattern: &'pat Pat<'tcx>, cx: &mut Builder<'_, 'tcx>, ) -> MatchPairTree<'pat, 'tcx>
Recursively builds a match pair tree for the given pattern and its subpatterns.
Trait Implementations§
source§impl<'pat, 'tcx> Clone for MatchPairTree<'pat, 'tcx>
impl<'pat, 'tcx> Clone for MatchPairTree<'pat, 'tcx>
source§fn clone(&self) -> MatchPairTree<'pat, 'tcx>
fn clone(&self) -> MatchPairTree<'pat, '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<'pat, 'tcx> DynSend for MatchPairTree<'pat, 'tcx>
impl<'pat, 'tcx> DynSync for MatchPairTree<'pat, 'tcx>
impl<'pat, 'tcx> Freeze for MatchPairTree<'pat, 'tcx>
impl<'pat, 'tcx> !RefUnwindSafe for MatchPairTree<'pat, 'tcx>
impl<'pat, 'tcx> Send for MatchPairTree<'pat, 'tcx>
impl<'pat, 'tcx> Sync for MatchPairTree<'pat, 'tcx>
impl<'pat, 'tcx> Unpin for MatchPairTree<'pat, 'tcx>
impl<'pat, 'tcx> !UnwindSafe for MatchPairTree<'pat, '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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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<'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: 136 bytes