pub enum ValidityConstraint {
    ValidOnly,
    MaybeInvalid,
    MaybeInvalidButAllowOmittingArms,
}
Expand description

Serves two purposes:

  • in a wildcard, tracks whether the wildcard matches only valid values (i.e. is a binding _a) or also invalid values (i.e. is a true _ pattern).
  • in the matrix, track whether a given place (aka column) is known to contain a valid value or not.

Variants§

§

ValidOnly

§

MaybeInvalid

§

MaybeInvalidButAllowOmittingArms

Option for backwards compatibility: the place is not known to be valid but we allow omitting useful && !reachable arms anyway.

Implementations§

source§

impl ValidityConstraint

source

pub fn from_bool(is_valid_only: bool) -> Self

source

fn allow_omitting_side_effecting_arms(self) -> Self

source

fn is_known_valid(self) -> bool

source

fn allows_omitting_empty_arms(self) -> bool

source

fn specialize<Cx: TypeCx>(self, ctor: &Constructor<Cx>) -> Self

If the place has validity given by self and we read that the value at the place has constructor ctor, this computes what we can assume about the validity of the constructor fields.

Pending further opsem decisions, the current behavior is: validity is preserved, except inside & and union fields where validity is reset to MaybeInvalid.

Trait Implementations§

source§

impl Clone for ValidityConstraint

source§

fn clone(&self) -> ValidityConstraint

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ValidityConstraint

source§

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

Formats the value using the given formatter. Read more
source§

impl Display for ValidityConstraint

source§

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

Formats the value using the given formatter. Read more
source§

impl PartialEq for ValidityConstraint

source§

fn eq(&self, other: &ValidityConstraint) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Copy for ValidityConstraint

source§

impl Eq for ValidityConstraint

source§

impl StructuralEq for ValidityConstraint

source§

impl StructuralPartialEq for ValidityConstraint

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where 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 T
where 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> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where 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 T
where 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.
source§

impl<'a, T> Captures<'a> for T
where T: ?Sized,

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: 1 byte

Size for each variant:

  • ValidOnly: 0 bytes
  • MaybeInvalid: 0 bytes
  • MaybeInvalidButAllowOmittingArms: 0 bytes