Enum rustc_middle::ty::TyKind [−][src]
pub enum TyKind<'tcx> {}Show variants
Bool, Char, Int(IntTy), Uint(UintTy), Float(FloatTy), Adt(&'tcx AdtDef, SubstsRef<'tcx>), Foreign(DefId), Str, Array(Ty<'tcx>, &'tcx Const<'tcx>), Slice(Ty<'tcx>), RawPtr(TypeAndMut<'tcx>), Ref(Region<'tcx>, Ty<'tcx>, Mutability), FnDef(DefId, SubstsRef<'tcx>), FnPtr(PolyFnSig<'tcx>), Dynamic(&'tcx List<Binder<'tcx, ExistentialPredicate<'tcx>>>, Region<'tcx>), Closure(DefId, SubstsRef<'tcx>), Generator(DefId, SubstsRef<'tcx>, Movability), GeneratorWitness(Binder<'tcx, &'tcx List<Ty<'tcx>>>), Never, Tuple(SubstsRef<'tcx>), Projection(ProjectionTy<'tcx>), Opaque(DefId, SubstsRef<'tcx>), Param(ParamTy), Bound(DebruijnIndex, BoundTy), Placeholder(PlaceholderType), Infer(InferTy), Error(DelaySpanBugEmitted),
Defines the kinds of types.
N.B., if you change this, you’ll probably want to change the corresponding
AST structure in rustc_ast/src/ast.rs
as well.
Variants
The primitive boolean type. Written as bool
.
The primitive character type; holds a Unicode scalar value
(a non-surrogate code point). Written as char
.
Int(IntTy)
A primitive signed integer type. For example, i32
.
Uint(UintTy)
A primitive unsigned integer type. For example, u32
.
Float(FloatTy)
A primitive floating-point type. For example, f64
.
Algebraic data types (ADT). For example: structures, enumerations and unions.
InternalSubsts here, possibly against intuition, may contain Param
s.
That is, even after substitution it is possible that there are type
variables. This happens when the Adt
corresponds to an ADT
definition and not a concrete use of it.
Foreign(DefId)
An unsized FFI type that is opaque to Rust. Written as extern type T
.
The pointee of a string slice. Written as str
.
An array with the given length. Written as [T; n]
.
Slice(Ty<'tcx>)
The pointee of an array slice. Written as [T]
.
RawPtr(TypeAndMut<'tcx>)
A raw pointer. Written as *mut T
or *const T
Ref(Region<'tcx>, Ty<'tcx>, Mutability)
A reference; a pointer with an associated lifetime. Written as
&'a mut T
or &'a T
.
The anonymous type of a function declaration/definition. Each
function has a unique type, which is output (for a function
named foo
returning an i32
) as fn() -> i32 {foo}
.
For example the type of bar
here:
fn foo() -> i32 { 1 } let bar = foo; // bar: fn() -> i32 {foo}
FnPtr(PolyFnSig<'tcx>)
A pointer to a function. Written as fn() -> i32
.
For example the type of bar
here:
fn foo() -> i32 { 1 } let bar: fn() -> i32 = foo;
Dynamic(&'tcx List<Binder<'tcx, ExistentialPredicate<'tcx>>>, Region<'tcx>)
A trait object. Written as dyn for<'b> Trait<'b, Assoc = u32> + Send + 'a
.
The anonymous type of a closure. Used to represent the type of
|a| a
.
Generator(DefId, SubstsRef<'tcx>, Movability)
The anonymous type of a generator. Used to represent the type of
|a| yield a
.
A type representing the types stored inside a generator. This should only appear in GeneratorInteriors.
The never type !
.
Tuple(SubstsRef<'tcx>)
A tuple type. For example, (i32, bool)
.
Use TyS::tuple_fields
to iterate over the field types.
Projection(ProjectionTy<'tcx>)
The projection of an associated type. For example,
<T as Trait<..>>::N
.
Opaque (impl Trait
) type found in a return type.
The DefId
comes either from
- the
impl Trait
ast::Ty node, - or the
type Foo = impl Trait
declaration The substitutions are for the generics of the function in question. After typeck, the concrete type can be found in thetypes
map.
Param(ParamTy)
A type parameter; for example, T
in fn f<T>(x: T) {}
.
Bound(DebruijnIndex, BoundTy)
Bound type variable, used only when preparing a trait query.
Placeholder(PlaceholderType)
A placeholder type - universally quantified higher-ranked type.
Infer(InferTy)
A type variable used during type checking.
Error(DelaySpanBugEmitted)
A placeholder for a type which could not be computed; this is propagated to avoid useless error messages.
Implementations
impl<'tcx> TyKind<'tcx>
[src]
pub fn is_primitive(&self) -> bool
[src]
pub fn article(&self) -> &'static str
[src]
Get the article (“a” or “an”) to use with this type.
Trait Implementations
impl<'tcx> Borrow<TyKind<'tcx>> for Interned<'tcx, TyS<'tcx>>
[src]
impl<'tcx> Clone for TyKind<'tcx>
[src]
impl<'tcx> Debug for TyKind<'tcx>
[src]
impl<'tcx, __D: TyDecoder<'tcx>> Decodable<__D> for TyKind<'tcx>
[src]
impl<'tcx, __E: TyEncoder<'tcx>> Encodable<__E> for TyKind<'tcx>
[src]
impl<'tcx> Eq for TyKind<'tcx>
[src]
impl<'tcx> Hash for TyKind<'tcx>
[src]
fn hash<__H: Hasher>(&self, state: &mut __H)
[src]
pub fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
impl<'tcx, '__ctx> HashStable<StableHashingContext<'__ctx>> for TyKind<'tcx>
[src]
fn hash_stable(
&self,
__hcx: &mut StableHashingContext<'__ctx>,
__hasher: &mut StableHasher
)
[src]
&self,
__hcx: &mut StableHashingContext<'__ctx>,
__hasher: &mut StableHasher
)
impl<'tcx> Ord for TyKind<'tcx>
[src]
fn cmp(&self, other: &TyKind<'tcx>) -> Ordering
[src]
#[must_use]pub fn max(self, other: Self) -> Self
1.21.0[src]
#[must_use]pub fn min(self, other: Self) -> Self
1.21.0[src]
#[must_use]pub fn clamp(self, min: Self, max: Self) -> Self
1.50.0[src]
impl<'tcx> PartialEq<TyKind<'tcx>> for TyKind<'tcx>
[src]
impl<'tcx> PartialOrd<TyKind<'tcx>> for TyKind<'tcx>
[src]
fn partial_cmp(&self, other: &TyKind<'tcx>) -> Option<Ordering>
[src]
#[must_use]pub fn lt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]pub fn le(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]pub fn gt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]pub fn ge(&self, other: &Rhs) -> bool
1.0.0[src]
impl<'tcx> StructuralEq for TyKind<'tcx>
[src]
impl<'tcx> StructuralPartialEq for TyKind<'tcx>
[src]
Auto Trait Implementations
impl<'tcx> !RefUnwindSafe for TyKind<'tcx>
impl<'tcx> !Send for TyKind<'tcx>
impl<'tcx> !Sync for TyKind<'tcx>
impl<'tcx> Unpin for TyKind<'tcx>
impl<'tcx> !UnwindSafe for TyKind<'tcx>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<'a, T> Captures<'a> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> MaybeResult<T> for T
[src]
type Error = !
pub fn from(Result<T, <T as MaybeResult<T>>::Error>) -> T
[src]
pub fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.