pub struct SplitConstructorSet<Cx: PatCx> {
pub present: SmallVec<[Constructor<Cx>; 1]>,
pub missing: Vec<Constructor<Cx>>,
pub missing_empty: Vec<Constructor<Cx>>,
}Expand description
Describes the result of analyzing the constructors in a column of a match.
present is morally the set of constructors present in the column, and missing is the set of
constructors that exist in the type but are not present in the column.
More formally, if we discard wildcards from the column, this respects the following constraints:
- the union of
present,missingandmissing_emptycovers all the constructors of the type - each constructor in
presentis covered by something in the column - no constructor in
missingormissing_emptyis covered by anything in the column - each constructor in the column is equal to the union of one or more constructors in
present missingdoes not contain empty constructors (see discussion about emptiness at the top of the file);missing_emptycontains only empty constructors- constructors in
present,missingandmissing_emptyare split for the column; in other words, they are either fully included in or fully disjoint from each constructor in the column. In yet other words, there are no non-trivial intersections like between0..10and5..15.
We must be particularly careful with weird constructors like Opaque: they’re not formally part
of the ConstructorSet for the type, yet if we forgot to include them in present we would be
ignoring any row with Opaques in the algorithm. Hence the importance of point 4.
Fields§
§present: SmallVec<[Constructor<Cx>; 1]>§missing: Vec<Constructor<Cx>>§missing_empty: Vec<Constructor<Cx>>Trait Implementations§
Auto Trait Implementations§
impl<Cx> DynSend for SplitConstructorSet<Cx>
impl<Cx> DynSync for SplitConstructorSet<Cx>
impl<Cx> Freeze for SplitConstructorSet<Cx>
impl<Cx> RefUnwindSafe for SplitConstructorSet<Cx>
impl<Cx> Send for SplitConstructorSet<Cx>
impl<Cx> Sync for SplitConstructorSet<Cx>
impl<Cx> Unpin for SplitConstructorSet<Cx>
impl<Cx> UnwindSafe for SplitConstructorSet<Cx>where
<Cx as PatCx>::VariantIdx: UnwindSafe + RefUnwindSafe,
<Cx as PatCx>::StrLit: UnwindSafe + RefUnwindSafe,
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<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.