Enum rustc_middle::ty::sty::TyKind [−][src]
pub enum TyKind<'tcx> {
Show 27 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),
}
Expand description
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
.
Tuple Fields of Int
0: IntTy
Uint(UintTy)
A primitive unsigned integer type. For example, u32
.
Tuple Fields of Uint
0: UintTy
Float(FloatTy)
A primitive floating-point type. For example, f64
.
Tuple Fields of Float
0: FloatTy
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
.
Tuple Fields of Foreign
0: DefId
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]
.
Tuple Fields of Slice
0: Ty<'tcx>
RawPtr(TypeAndMut<'tcx>)
A raw pointer. Written as *mut T
or *const T
Tuple Fields of RawPtr
0: TypeAndMut<'tcx>
Ref(Region<'tcx>, Ty<'tcx>, Mutability)
A reference; a pointer with an associated lifetime. Written as
&'a mut T
or &'a T
.
Tuple Fields of Ref
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;
Tuple Fields of FnPtr
0: PolyFnSig<'tcx>
Dynamic(&'tcx List<Binder<'tcx, ExistentialPredicate<'tcx>>>, Region<'tcx>)
A trait object. Written as dyn for<'b> Trait<'b, Assoc = u32> + Send + 'a
.
Tuple Fields of Dynamic
0: &'tcx List<Binder<'tcx, ExistentialPredicate<'tcx>>>
1: Region<'tcx>
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
.
Tuple Fields of Generator
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.
Tuple Fields of Tuple
0: SubstsRef<'tcx>
Projection(ProjectionTy<'tcx>)
The projection of an associated type. For example,
<T as Trait<..>>::N
.
Tuple Fields of Projection
0: ProjectionTy<'tcx>
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) {}
.
Tuple Fields of Param
0: ParamTy
Bound(DebruijnIndex, BoundTy)
Bound type variable, used only when preparing a trait query.
Tuple Fields of Bound
0: DebruijnIndex
1: BoundTy
Placeholder(PlaceholderType)
A placeholder type - universally quantified higher-ranked type.
Tuple Fields of Placeholder
Infer(InferTy)
A type variable used during type checking.
Tuple Fields of Infer
0: InferTy
Error(DelaySpanBugEmitted)
A placeholder for a type which could not be computed; this is propagated to avoid useless error messages.
Tuple Fields of Error
Implementations
Trait Implementations
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
Auto Trait Implementations
impl<'tcx> !RefUnwindSafe for TyKind<'tcx>
impl<'tcx> !UnwindSafe for TyKind<'tcx>
Blanket Implementations
Mutably borrows from an owned value. Read more
impl<Ctxt, T> DepNodeParams<Ctxt> for T where
Ctxt: DepContext,
T: for<'a> HashStable<StableHashingContext<'a>> + Debug,
impl<Ctxt, T> DepNodeParams<Ctxt> for T where
Ctxt: DepContext,
T: for<'a> HashStable<StableHashingContext<'a>> + Debug,
This method turns the parameters of a DepNodeConstructor into an opaque Fingerprint to be used in DepNode. Not all DepNodeParams support being turned into a Fingerprint (they don’t need to if the corresponding DepNode is anonymous). Read more
This method tries to recover the query key from the given DepNode
,
something which is needed when forcing DepNode
s during red-green
evaluation. The query system will only call this method if
fingerprint_style()
is not FingerprintStyle::Opaque
.
It is always valid to return None
here, in which case incremental
compilation will treat the query as having changed instead of forcing it. Read more
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: 32 bytes
Size for each variant:
Bool
: 0 bytesChar
: 0 bytesInt
: 1 byteUint
: 1 byteFloat
: 1 byteAdt
: 23 bytesForeign
: 11 bytesStr
: 0 bytesArray
: 23 bytesSlice
: 15 bytesRawPtr
: 23 bytesRef
: 23 bytesFnDef
: 23 bytesFnPtr
: 31 bytesDynamic
: 23 bytesClosure
: 23 bytesGenerator
: 23 bytesGeneratorWitness
: 23 bytesNever
: 0 bytesTuple
: 15 bytesProjection
: 23 bytesOpaque
: 23 bytesParam
: 11 bytesBound
: 15 bytesPlaceholder
: 11 bytesInfer
: 11 bytesError
: 0 bytes