pub struct TypeDecl {
pub def_id: TypeDeclId,
pub item_meta: ItemMeta,
pub generics: GenericParams,
pub kind: TypeDeclKind,
pub layout: Option<Layout>,
pub ptr_metadata: Option<PtrMetadata>,
}
Expand description
A type declaration.
Types can be opaque or transparent.
Transparent types are local types not marked as opaque. Opaque types are the others: local types marked as opaque, and non-local types (coming from external dependencies).
In case the type is transparent, the declaration also contains the type definition (see TypeDeclKind).
A type can only be an ADT (structure or enumeration), as type aliases are inlined in MIR.
Fields§
§def_id: TypeDeclId
§item_meta: ItemMeta
Meta information associated with the item.
generics: GenericParams
§kind: TypeDeclKind
The type kind: enum, struct, or opaque.
layout: Option<Layout>
The layout of the type. Information may be partial because of generics or dynamically-
sized types. If rustc cannot compute a layout, it is None
.
ptr_metadata: Option<PtrMetadata>
The metadata associated with a pointer to the type.
This is None
if we could not compute it because of generics.
The information is accurate if it is Some
while if it is None
, it may still be theoretically computable
but due to some limitation to be fixed, we are unable to obtain the info.
See translate_types::{impl ItemTransCtx}::translate_ptr_metadata
for more details.
Implementations§
Source§impl TypeDecl
impl TypeDecl
Sourcepub fn get_variant_from_tag(&self, tag: ScalarValue) -> Option<VariantId>
pub fn get_variant_from_tag(&self, tag: ScalarValue) -> Option<VariantId>
Looks up the variant corresponding to the tag (i.e. the in-memory bytes that represent the discriminant).
Returns None
for types that don’t have a relevant discriminant (e.g. uninhabited types).
If the tag
does not correspond to any valid discriminant but there is a niche,
the resulting VariantId
will be for the untagged variant TagEncoding::Niche::untagged_variant
.
Trait Implementations§
Source§impl AstVisitable for TypeDecl
impl AstVisitable for TypeDecl
Source§fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner
.Source§fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner
.Source§fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))
fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))
self
, in pre-order traversal.Source§fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))
fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))
self
, in pre-order traversal.Source§impl<'de> Deserialize<'de> for TypeDecl
impl<'de> Deserialize<'de> for TypeDecl
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<'s, V> Drive<'s, V> for TypeDeclwhere
V: Visitor + Visit<'s, ItemMeta> + Visit<'s, GenericParams> + Visit<'s, TypeDeclKind> + Visit<'s, Option<Layout>> + Visit<'s, Option<PtrMetadata>>,
impl<'s, V> Drive<'s, V> for TypeDeclwhere
V: Visitor + Visit<'s, ItemMeta> + Visit<'s, GenericParams> + Visit<'s, TypeDeclKind> + Visit<'s, Option<Layout>> + Visit<'s, Option<PtrMetadata>>,
Source§fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
v.visit()
on the immediate contents of self
.Source§impl<'s, V> DriveMut<'s, V> for TypeDeclwhere
V: Visitor + VisitMut<'s, ItemMeta> + VisitMut<'s, GenericParams> + VisitMut<'s, TypeDeclKind> + VisitMut<'s, Option<Layout>> + VisitMut<'s, Option<PtrMetadata>>,
impl<'s, V> DriveMut<'s, V> for TypeDeclwhere
V: Visitor + VisitMut<'s, ItemMeta> + VisitMut<'s, GenericParams> + VisitMut<'s, TypeDeclKind> + VisitMut<'s, Option<Layout>> + VisitMut<'s, Option<PtrMetadata>>,
Source§fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>
fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>
v.visit()
on the immediate contents of self
.Source§impl<C: AstFormatter> FmtWithCtx<C> for TypeDecl
impl<C: AstFormatter> FmtWithCtx<C> for TypeDecl
Auto Trait Implementations§
impl Freeze for TypeDecl
impl RefUnwindSafe for TypeDecl
impl Send for TypeDecl
impl Sync for TypeDecl
impl Unpin for TypeDecl
impl UnwindSafe for TypeDecl
Blanket Implementations§
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,
§impl<I, T> ExtractContext<I, ()> for T
impl<I, T> ExtractContext<I, ()> for T
§fn extract_context(self, _original_input: I)
fn extract_context(self, _original_input: I)
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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 more§impl<I> RecreateContext<I> for I
impl<I> RecreateContext<I> for I
§fn recreate_context(_original_input: I, tail: I) -> I
fn recreate_context(_original_input: I, tail: I) -> I
Source§impl<T> TyVisitable for Twhere
T: AstVisitable,
impl<T> TyVisitable for Twhere
T: AstVisitable,
fn substitute(self, generics: &GenericArgs) -> Self
fn substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Self
Source§fn move_under_binder(self) -> Self
fn move_under_binder(self) -> Self
Source§fn move_under_binders(self, depth: DeBruijnId) -> Self
fn move_under_binders(self, depth: DeBruijnId) -> Self
depth
binders.Source§fn move_from_under_binder(self) -> Option<Self>
fn move_from_under_binder(self) -> Option<Self>
Source§fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
depth
binders. Returns None
if it contains a variable bound in
one of these depth
binders.Source§fn visit_db_id<B>(
&mut self,
f: impl FnMut(&mut DeBruijnId) -> ControlFlow<B>,
) -> ControlFlow<B>
fn visit_db_id<B>( &mut self, f: impl FnMut(&mut DeBruijnId) -> ControlFlow<B>, ) -> ControlFlow<B>
self
, as seen from the outside of self
. This means
that any variable bound inside self
will be skipped, and all the seen indices will count
from the outside of self.