rustc_pattern_analysis::constructor

Enum Constructor

source
pub enum Constructor<Cx: PatCx> {
Show 20 variants Struct, Variant(Cx::VariantIdx), Ref, Slice(Slice), UnionField, Bool(bool), IntRange(IntRange), F16Range(IeeeFloat<HalfS>, IeeeFloat<HalfS>, RangeEnd), F32Range(IeeeFloat<SingleS>, IeeeFloat<SingleS>, RangeEnd), F64Range(IeeeFloat<DoubleS>, IeeeFloat<DoubleS>, RangeEnd), F128Range(IeeeFloat<QuadS>, IeeeFloat<QuadS>, RangeEnd), Str(Cx::StrLit), Opaque(OpaqueId), Or, Wildcard, Never, NonExhaustive, Hidden, Missing, PrivateUninhabited,
}
Expand description

A value can be decomposed into a constructor applied to some fields. This struct represents the constructor. See also Fields.

pat_constructor retrieves the constructor corresponding to a pattern. specialize_constructor returns the list of fields corresponding to a pattern, given a constructor. Constructor::apply reconstructs the pattern from a pair of Constructor and Fields.

Variants§

§

Struct

Tuples and structs.

§

Variant(Cx::VariantIdx)

Enum variants.

§

Ref

References

§

Slice(Slice)

Array and slice patterns.

§

UnionField

Union field accesses.

§

Bool(bool)

Booleans

§

IntRange(IntRange)

Ranges of integer literal values (2, 2..=5 or 2..5).

§

F16Range(IeeeFloat<HalfS>, IeeeFloat<HalfS>, RangeEnd)

Ranges of floating-point literal values (2.0..=5.2).

§

F32Range(IeeeFloat<SingleS>, IeeeFloat<SingleS>, RangeEnd)

§

F64Range(IeeeFloat<DoubleS>, IeeeFloat<DoubleS>, RangeEnd)

§

F128Range(IeeeFloat<QuadS>, IeeeFloat<QuadS>, RangeEnd)

§

Str(Cx::StrLit)

String literals. Strings are not quite the same as &[u8] so we treat them separately.

§

Opaque(OpaqueId)

Constants that must not be matched structurally. They are treated as black boxes for the purposes of exhaustiveness: we must not inspect them, and they don’t count towards making a match exhaustive. Carries an id that must be unique within a match. We need this to ensure the invariants of SplitConstructorSet.

§

Or

Or-pattern.

§

Wildcard

Wildcard pattern.

§

Never

Never pattern. Only used in WitnessPat. An actual never pattern should be lowered as Wildcard.

§

NonExhaustive

Fake extra constructor for enums that aren’t allowed to be matched exhaustively. Also used for those types for which we cannot list constructors explicitly, like f64 and str. Only used in WitnessPat.

§

Hidden

Fake extra constructor for variants that should not be mentioned in diagnostics. We use this for variants behind an unstable gate as well as #[doc(hidden)] ones. Only used in WitnessPat.

§

Missing

Fake extra constructor for constructors that are not seen in the matrix, as explained at the top of the file. Only used for specialization.

§

PrivateUninhabited

Fake extra constructor that indicates and empty field that is private. When we encounter one we skip the column entirely so we don’t observe its emptiness. Only used for specialization.

Implementations§

source§

impl<Cx: PatCx> Constructor<Cx>

source

pub(crate) fn is_non_exhaustive(&self) -> bool

source

pub(crate) fn as_variant(&self) -> Option<Cx::VariantIdx>

source

fn as_bool(&self) -> Option<bool>

source

pub(crate) fn as_int_range(&self) -> Option<&IntRange>

source

fn as_slice(&self) -> Option<Slice>

source

pub(crate) fn arity(&self, cx: &Cx, ty: &Cx::Ty) -> usize

The number of fields for this constructor. This must be kept in sync with Fields::wildcards.

source

pub(crate) fn is_covered_by( &self, cx: &Cx, other: &Self, ) -> Result<bool, Cx::Error>

Returns whether self is covered by other, i.e. whether self is a subset of other. For the simple cases, this is simply checking for equality. For the “grouped” constructors, this checks for inclusion.

source

pub(crate) fn fmt_fields( &self, f: &mut Formatter<'_>, ty: &Cx::Ty, fields: impl Iterator<Item = impl Debug>, ) -> Result

Trait Implementations§

source§

impl<Cx: PatCx> Clone for Constructor<Cx>

source§

fn clone(&self) -> Self

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<Cx: Debug + PatCx> Debug for Constructor<Cx>
where Cx::VariantIdx: Debug, Cx::StrLit: Debug,

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<Cx> Freeze for Constructor<Cx>
where <Cx as PatCx>::VariantIdx: Freeze, <Cx as PatCx>::StrLit: Freeze,

§

impl<Cx> RefUnwindSafe for Constructor<Cx>

§

impl<Cx> Send for Constructor<Cx>
where <Cx as PatCx>::VariantIdx: Send, <Cx as PatCx>::StrLit: Send,

§

impl<Cx> Sync for Constructor<Cx>
where <Cx as PatCx>::VariantIdx: Sync, <Cx as PatCx>::StrLit: Sync,

§

impl<Cx> Unpin for Constructor<Cx>
where <Cx as PatCx>::VariantIdx: Unpin, <Cx as PatCx>::StrLit: Unpin,

§

impl<Cx> UnwindSafe for Constructor<Cx>
where <Cx as PatCx>::VariantIdx: UnwindSafe, <Cx as PatCx>::StrLit: UnwindSafe,

Blanket Implementations§

source§

impl<T> Aligned for T

source§

const ALIGN: Alignment = _

Alignment of Self.
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> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T, R> CollectAndApply<T, R> for T

source§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

source§

type Output = R

source§

impl<T> Filterable for T

source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
source§

impl<P> IntoQueryParam<P> for P

source§

impl<T> MaybeResult<T> for T

source§

type Error = !

source§

fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

source§

fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

source§

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, U> TryFrom<U> for T
where U: Into<T>,

source§

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

source§

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<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

source§

fn upcast(self, interner: I) -> U

source§

impl<I, T> UpcastFrom<I, T> for T

source§

fn upcast_from(from: T, _tcx: I) -> T

source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<Tcx, T> Value<Tcx> for T
where Tcx: DepContext,

source§

default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

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

source§

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

source§

impl<T> ErasedDestructor for T
where T: 'static,

source§

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.