Struct rustc_middle::ty::AdtDefData
source · pub struct AdtDefData {
pub did: DefId,
variants: IndexVec<VariantIdx, VariantDef>,
flags: AdtFlags,
repr: ReprOptions,
}Expand description
The definition of a user-defined type, e.g., a struct, enum, or union.
These are all interned (by mk_adt_def) into the global arena.
The initialism ADT stands for an algebraic data type (ADT).
This is slightly wrong because unions are not ADTs.
Moreover, Rust only allows recursive data types through indirection.
§Recursive types
It may seem impossible to represent recursive types using Ty,
since TyKind::Adt includes AdtDef, which includes its fields,
creating a cycle. However, AdtDef does not actually include the types
of its fields; it includes just their DefIds.
For example, the following type:
struct S { x: Box<S> }is essentially represented with Ty as the following pseudocode:
struct S { x }where x here represents the DefId of S.x. Then, the DefId
can be used with TyCtxt::type_of() to get the type of the field.
Fields§
§did: DefIdThe DefId of the struct, enum or union item.
variants: IndexVec<VariantIdx, VariantDef>Variants of the ADT. If this is a struct or union, then there will be a single variant.
flags: AdtFlagsFlags of the ADT (e.g., is this a struct? is this non-exhaustive?).
repr: ReprOptionsRepr options provided by the user.
Implementations§
source§impl AdtDefData
impl AdtDefData
sourcepub(super) fn new(
tcx: TyCtxt<'_>,
did: DefId,
kind: AdtKind,
variants: IndexVec<VariantIdx, VariantDef>,
repr: ReprOptions,
is_anonymous: bool
) -> Self
pub(super) fn new( tcx: TyCtxt<'_>, did: DefId, kind: AdtKind, variants: IndexVec<VariantIdx, VariantDef>, repr: ReprOptions, is_anonymous: bool ) -> Self
Creates a new AdtDefData.
Trait Implementations§
source§impl<'tcx> ArenaAllocatable<'tcx> for AdtDefData
impl<'tcx> ArenaAllocatable<'tcx> for AdtDefData
fn allocate_on<'a>(self, arena: &'a Arena<'tcx>) -> &'a mut Self
fn allocate_from_iter<'a>( arena: &'a Arena<'tcx>, iter: impl IntoIterator<Item = Self> ) -> &'a mut [Self]
source§impl<'tcx> Borrow<AdtDefData> for InternedInSet<'tcx, AdtDefData>
impl<'tcx> Borrow<AdtDefData> for InternedInSet<'tcx, AdtDefData>
source§fn borrow<'a>(&'a self) -> &'a AdtDefData
fn borrow<'a>(&'a self) -> &'a AdtDefData
source§impl<__D: TyDecoder> Decodable<__D> for AdtDefData
impl<__D: TyDecoder> Decodable<__D> for AdtDefData
source§impl<__E: TyEncoder> Encodable<__E> for AdtDefData
impl<__E: TyEncoder> Encodable<__E> for AdtDefData
source§impl Hash for AdtDefData
impl Hash for AdtDefData
There should be only one AdtDef for each did, therefore
it is fine to implement Hash only based on did.
source§impl<'a> HashStable<StableHashingContext<'a>> for AdtDefData
impl<'a> HashStable<StableHashingContext<'a>> for AdtDefData
fn hash_stable( &self, hcx: &mut StableHashingContext<'a>, hasher: &mut StableHasher )
source§impl Ord for AdtDefData
impl Ord for AdtDefData
There should be only one AdtDef for each did, therefore
it is fine to implement Ord only based on did.
source§fn cmp(&self, other: &AdtDefData) -> Ordering
fn cmp(&self, other: &AdtDefData) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
source§impl PartialEq for AdtDefData
impl PartialEq for AdtDefData
source§impl PartialOrd for AdtDefData
impl PartialOrd for AdtDefData
source§fn partial_cmp(&self, other: &AdtDefData) -> Option<Ordering>
fn partial_cmp(&self, other: &AdtDefData) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self and other) and is used by the <=
operator. Read moresource§impl<'tcx, D: TyDecoder<I = TyCtxt<'tcx>>> RefDecodable<'tcx, D> for AdtDefData
impl<'tcx, D: TyDecoder<I = TyCtxt<'tcx>>> RefDecodable<'tcx, D> for AdtDefData
fn decode(decoder: &mut D) -> &'tcx Self
impl Eq for AdtDefData
Auto Trait Implementations§
impl DynSend for AdtDefData
impl DynSync for AdtDefData
impl Freeze for AdtDefData
impl RefUnwindSafe for AdtDefData
impl Send for AdtDefData
impl Sync for AdtDefData
impl Unpin for AdtDefData
impl UnwindSafe for AdtDefData
Blanket Implementations§
§impl<T> AnyEq for T
impl<T> AnyEq for 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, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> Filterable for T
impl<T> Filterable for T
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<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<'tcx, T> ToPredicate<'tcx, T> for T
impl<'tcx, T> ToPredicate<'tcx, T> for T
fn to_predicate(self, _tcx: TyCtxt<'tcx>) -> T
source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed ) -> 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,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
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: 56 bytes