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
,missing
andmissing_empty
covers all the constructors of the type - each constructor in
present
is covered by something in the column - no constructor in
missing
ormissing_empty
is covered by anything in the column - each constructor in the column is equal to the union of one or more constructors in
present
missing
does not contain empty constructors (see discussion about emptiness at the top of the file);missing_empty
contains only empty constructors- constructors in
present
,missing
andmissing_empty
are 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..10
and5..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 Opaque
s 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> 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
Mutably borrows from an owned value. Read more