#[repr(C, u8)]pub enum TyKind<'hir, Unambig = ()> {
Show 17 variants
InferDelegation(DefId, InferDelegationKind),
Slice(&'hir Ty<'hir>),
Array(&'hir Ty<'hir>, &'hir ConstArg<'hir>),
Ptr(MutTy<'hir>),
Ref(&'hir Lifetime, MutTy<'hir>),
BareFn(&'hir BareFnTy<'hir>),
UnsafeBinder(&'hir UnsafeBinderTy<'hir>),
Never,
Tup(&'hir [Ty<'hir>]),
Path(QPath<'hir>),
OpaqueDef(&'hir OpaqueTy<'hir>),
TraitAscription(GenericBounds<'hir>),
TraitObject(&'hir [PolyTraitRef<'hir>], TaggedRef<'hir, Lifetime, TraitObjectSyntax>),
Typeof(&'hir AnonConst),
Err(ErrorGuaranteed),
Pat(&'hir Ty<'hir>, &'hir TyPat<'hir>),
Infer(Unambig),
}
Expand description
The various kinds of types recognized by the compiler.
Variants§
InferDelegation(DefId, InferDelegationKind)
Actual type should be inherited from DefId
signature
Slice(&'hir Ty<'hir>)
A variable length slice (i.e., [T]
).
Array(&'hir Ty<'hir>, &'hir ConstArg<'hir>)
A fixed length array (i.e., [T; n]
).
Ptr(MutTy<'hir>)
A raw pointer (i.e., *const T
or *mut T
).
Ref(&'hir Lifetime, MutTy<'hir>)
A reference (i.e., &'a T
or &'a mut T
).
BareFn(&'hir BareFnTy<'hir>)
A bare function (e.g., fn(usize) -> bool
).
UnsafeBinder(&'hir UnsafeBinderTy<'hir>)
An unsafe binder type (e.g. unsafe<'a> Foo<'a>
).
Never
The never type (!
).
Tup(&'hir [Ty<'hir>])
A tuple ((A, B, C, D, ...)
).
Path(QPath<'hir>)
A path to a type definition (module::module::...::Type
), or an
associated type (e.g., <Vec<T> as Trait>::Type
or <T>::Target
).
Type parameters may be stored in each PathSegment
.
OpaqueDef(&'hir OpaqueTy<'hir>)
An opaque type definition itself. This is only used for impl Trait
.
TraitAscription(GenericBounds<'hir>)
A trait ascription type, which is impl Trait
within a local binding.
TraitObject(&'hir [PolyTraitRef<'hir>], TaggedRef<'hir, Lifetime, TraitObjectSyntax>)
A trait object type Bound1 + Bound2 + Bound3
where Bound
is a trait or a lifetime.
We use pointer tagging to represent a &'hir Lifetime
and TraitObjectSyntax
pair
as otherwise this type being repr(C)
would result in TyKind
increasing in size.
Typeof(&'hir AnonConst)
Unused for now.
Err(ErrorGuaranteed)
Placeholder for a type that has failed to be defined.
Pat(&'hir Ty<'hir>, &'hir TyPat<'hir>)
Pattern types (pattern_type!(u32 is 1..)
)
Infer(Unambig)
TyKind::Infer
means the type should be inferred instead of it having been
specified. This can appear anywhere in a type.
This variant is not always used to represent inference types, sometimes
GenericArg::Infer
is used instead.
Trait Implementations§
Source§impl<'hir, Unambig, __CTX> HashStable<__CTX> for TyKind<'hir, Unambig>where
__CTX: HashStableContext,
Unambig: HashStable<__CTX>,
impl<'hir, Unambig, __CTX> HashStable<__CTX> for TyKind<'hir, Unambig>where
__CTX: HashStableContext,
Unambig: HashStable<__CTX>,
fn hash_stable(&self, __hcx: &mut __CTX, __hasher: &mut StableHasher)
impl<'hir, Unambig: Copy> Copy for TyKind<'hir, Unambig>
Auto Trait Implementations§
impl<'hir, Unambig> DynSend for TyKind<'hir, Unambig>where
Unambig: DynSend,
impl<'hir, Unambig> DynSync for TyKind<'hir, Unambig>where
Unambig: DynSync,
impl<'hir, Unambig> Freeze for TyKind<'hir, Unambig>where
Unambig: Freeze,
impl<'hir, Unambig> RefUnwindSafe for TyKind<'hir, Unambig>where
Unambig: RefUnwindSafe,
impl<'hir, Unambig> Send for TyKind<'hir, Unambig>where
Unambig: Send,
impl<'hir, Unambig> Sync for TyKind<'hir, Unambig>where
Unambig: Sync,
impl<'hir, Unambig> Unpin for TyKind<'hir, Unambig>where
Unambig: Unpin,
impl<'hir, Unambig> UnwindSafe for TyKind<'hir, Unambig>where
Unambig: UnwindSafe,
Blanket Implementations§
Source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
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.