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> 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