Struct rustc_pattern_analysis::usefulness::WitnessMatrix
source · struct WitnessMatrix<Cx: PatCx>(Vec<WitnessStack<Cx>>);Expand description
Represents a set of pattern-tuples that are witnesses of non-exhaustiveness for error
reporting. This has similar invariants as Matrix does.
The WitnessMatrix returned by compute_exhaustiveness_and_usefulness obeys the invariant
that the union of the input Matrix and the output WitnessMatrix together matches the type
exhaustively.
Just as the Matrix starts with a single column, by the end of the algorithm, this has a single
column, which contains the patterns that are missing for the match to be exhaustive.
Tuple Fields§
§0: Vec<WitnessStack<Cx>>Implementations§
source§impl<Cx: PatCx> WitnessMatrix<Cx>
impl<Cx: PatCx> WitnessMatrix<Cx>
sourcefn unit_witness() -> Self
fn unit_witness() -> Self
New matrix with one () witness, i.e. with no columns.
sourcefn single_column(self) -> Vec<WitnessPat<Cx>>
fn single_column(self) -> Vec<WitnessPat<Cx>>
Asserts that there is a single column and returns the patterns in it.
sourcefn push_pattern(&mut self, pat: WitnessPat<Cx>)
fn push_pattern(&mut self, pat: WitnessPat<Cx>)
Reverses specialization by the Missing constructor by pushing a whole new pattern.
sourcefn apply_constructor(
&mut self,
pcx: &PlaceCtxt<'_, Cx>,
missing_ctors: &[Constructor<Cx>],
ctor: &Constructor<Cx>,
)
fn apply_constructor( &mut self, pcx: &PlaceCtxt<'_, Cx>, missing_ctors: &[Constructor<Cx>], ctor: &Constructor<Cx>, )
Reverses specialization by ctor. See the section on unspecialize at the top of the file.
Trait Implementations§
source§impl<Cx: PatCx> Clone for WitnessMatrix<Cx>
impl<Cx: PatCx> Clone for WitnessMatrix<Cx>
Auto Trait Implementations§
impl<Cx> DynSend for WitnessMatrix<Cx>
impl<Cx> DynSync for WitnessMatrix<Cx>
impl<Cx> Freeze for WitnessMatrix<Cx>
impl<Cx> RefUnwindSafe for WitnessMatrix<Cx>where
<Cx as PatCx>::Ty: RefUnwindSafe,
<Cx as PatCx>::VariantIdx: RefUnwindSafe,
<Cx as PatCx>::StrLit: RefUnwindSafe,
impl<Cx> Send for WitnessMatrix<Cx>
impl<Cx> Sync for WitnessMatrix<Cx>
impl<Cx> Unpin for WitnessMatrix<Cx>
impl<Cx> UnwindSafe for WitnessMatrix<Cx>where
<Cx as PatCx>::Ty: UnwindSafe,
<Cx as PatCx>::VariantIdx: UnwindSafe,
<Cx as PatCx>::StrLit: UnwindSafe,
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§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default 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: 24 bytes