pub(super) struct SplitConstructorSet<'tcx> {
    pub(super) present: SmallVec<[Constructor<'tcx>; 1]>,
    pub(super) missing: Vec<Constructor<'tcx>>,
}
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, they respect the following constraints:

  • the union of present and missing covers the whole type
  • present and missing are disjoint
  • neither contains wildcards
  • each constructor in present is covered by some non-wildcard constructor in the column
  • together, the constructors in present cover all the non-wildcard constructor in the column
  • non-wildcards in the column do no cover anything in missing
  • constructors in present and missing are split for the column; in other words, they are either fully included in or disjoint from each constructor in the column. This avoids non-trivial intersections like between 0..10 and 5..15.

Fields§

§present: SmallVec<[Constructor<'tcx>; 1]>§missing: Vec<Constructor<'tcx>>

Trait Implementations§

source§

impl<'tcx> Debug for SplitConstructorSet<'tcx>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'tcx> !RefUnwindSafe for SplitConstructorSet<'tcx>

§

impl<'tcx> Send for SplitConstructorSet<'tcx>

§

impl<'tcx> Sync for SplitConstructorSet<'tcx>

§

impl<'tcx> Unpin for SplitConstructorSet<'tcx>

§

impl<'tcx> !UnwindSafe for SplitConstructorSet<'tcx>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.

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: 88 bytes