Type Alias rustc_middle::query::queries::adt_def::ProvidedValue
source · pub type ProvidedValue<'tcx> = AdtDef<'tcx>;Expand description
This type alias specifies the type returned from query providers and the type
used for decoding. For regular queries this is the declared returned type V,
but arena_cache will use <V as Deref>::Target instead.
Aliased Type§
struct ProvidedValue<'tcx>(pub Interned<'tcx, AdtDefData>);Fields§
§0: Interned<'tcx, AdtDefData>Implementations§
source§impl<'tcx> AdtDef<'tcx>
impl<'tcx> AdtDef<'tcx>
pub fn did(self) -> DefId
pub fn variants(self) -> &'tcx IndexSlice<VariantIdx, VariantDef>
pub fn variant(self, idx: VariantIdx) -> &'tcx VariantDef
pub fn flags(self) -> AdtFlags
pub fn repr(self) -> ReprOptions
source§impl<'tcx> AdtDef<'tcx>
impl<'tcx> AdtDef<'tcx>
sourcepub fn is_variant_list_non_exhaustive(self) -> bool
pub fn is_variant_list_non_exhaustive(self) -> bool
Returns true if the variant list of this ADT is #[non_exhaustive].
sourcepub fn variant_descr(self) -> &'static str
pub fn variant_descr(self) -> &'static str
Returns a description of a variant of this abstract data type.
sourcepub fn has_ctor(self) -> bool
pub fn has_ctor(self) -> bool
If this function returns true, it implies that is_struct must return true.
sourcepub fn is_fundamental(self) -> bool
pub fn is_fundamental(self) -> bool
Returns true if this type is #[fundamental] for the purposes
of coherence checking.
sourcepub fn is_phantom_data(self) -> bool
pub fn is_phantom_data(self) -> bool
Returns true if this is PhantomData<T>.
sourcepub fn is_unsafe_cell(self) -> bool
pub fn is_unsafe_cell(self) -> bool
Returns true if this is UnsafeCell<T>.
sourcepub fn is_manually_drop(self) -> bool
pub fn is_manually_drop(self) -> bool
Returns true if this is ManuallyDrop<T>.
pub fn has_non_const_dtor(self, tcx: TyCtxt<'tcx>) -> bool
sourcepub fn non_enum_variant(self) -> &'tcx VariantDef
pub fn non_enum_variant(self) -> &'tcx VariantDef
Asserts this is a struct or union and returns its unique variant.
pub fn predicates(self, tcx: TyCtxt<'tcx>) -> GenericPredicates<'tcx>
sourcepub fn all_fields(self) -> impl Iterator<Item = &'tcx FieldDef> + Clone
pub fn all_fields(self) -> impl Iterator<Item = &'tcx FieldDef> + Clone
Returns an iterator over all fields contained by this ADT.
sourcepub fn is_payloadfree(self) -> bool
pub fn is_payloadfree(self) -> bool
Whether the ADT lacks fields. Note that this includes uninhabited enums,
e.g., enum Void {} is considered payload free as well.
sourcepub fn variant_with_id(self, vid: DefId) -> &'tcx VariantDef
pub fn variant_with_id(self, vid: DefId) -> &'tcx VariantDef
Return a VariantDef given a variant id.
sourcepub fn variant_with_ctor_id(self, cid: DefId) -> &'tcx VariantDef
pub fn variant_with_ctor_id(self, cid: DefId) -> &'tcx VariantDef
Return a VariantDef given a constructor id.
sourcepub fn variant_index_with_id(self, vid: DefId) -> VariantIdx
pub fn variant_index_with_id(self, vid: DefId) -> VariantIdx
Return the index of VariantDef given a variant id.
sourcepub fn variant_index_with_ctor_id(self, cid: DefId) -> VariantIdx
pub fn variant_index_with_ctor_id(self, cid: DefId) -> VariantIdx
Return the index of VariantDef given a constructor id.
pub fn variant_of_res(self, res: Res) -> &'tcx VariantDef
pub fn eval_explicit_discr( self, tcx: TyCtxt<'tcx>, expr_did: DefId ) -> Option<Discr<'tcx>>
pub fn discriminants( self, tcx: TyCtxt<'tcx> ) -> impl Iterator<Item = (VariantIdx, Discr<'tcx>)> + Captures<'tcx>
pub fn variant_range(self) -> Range<VariantIdx>
sourcepub fn discriminant_for_variant(
self,
tcx: TyCtxt<'tcx>,
variant_index: VariantIdx
) -> Discr<'tcx>
pub fn discriminant_for_variant( self, tcx: TyCtxt<'tcx>, variant_index: VariantIdx ) -> Discr<'tcx>
Computes the discriminant value used by a specific variant.
Unlike discriminants, this is (amortized) constant-time,
only doing at most one query for evaluating an explicit
discriminant (the last one before the requested variant),
assuming there are no constant-evaluation errors there.
sourcepub fn discriminant_def_for_variant(
self,
variant_index: VariantIdx
) -> (Option<DefId>, u32)
pub fn discriminant_def_for_variant( self, variant_index: VariantIdx ) -> (Option<DefId>, u32)
Yields a DefId for the discriminant and an offset to add to it
Alternatively, if there is no explicit discriminant, returns the
inferred discriminant directly.
pub fn destructor(self, tcx: TyCtxt<'tcx>) -> Option<Destructor>
sourcepub fn sized_constraint(
self,
tcx: TyCtxt<'tcx>
) -> EarlyBinder<&'tcx List<Ty<'tcx>>>
pub fn sized_constraint( self, tcx: TyCtxt<'tcx> ) -> EarlyBinder<&'tcx List<Ty<'tcx>>>
Returns a list of types such that Self: Sized if and only if that
type is Sized, or ty::Error if this type has a recursive layout.
Trait Implementations§
source§impl<'tcx, '__ctx> HashStable<StableHashingContext<'__ctx>> for AdtDef<'tcx>
impl<'tcx, '__ctx> HashStable<StableHashingContext<'__ctx>> for AdtDef<'tcx>
fn hash_stable( &self, __hcx: &mut StableHashingContext<'__ctx>, __hasher: &mut StableHasher )
source§impl<'tcx> Ord for AdtDef<'tcx>
impl<'tcx> Ord for AdtDef<'tcx>
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere Self: Sized,
source§impl<'tcx> PartialEq<AdtDef<'tcx>> for AdtDef<'tcx>
impl<'tcx> PartialEq<AdtDef<'tcx>> for AdtDef<'tcx>
source§impl<'tcx> PartialOrd<AdtDef<'tcx>> for AdtDef<'tcx>
impl<'tcx> PartialOrd<AdtDef<'tcx>> for AdtDef<'tcx>
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> TypeVisitable<TyCtxt<'tcx>> for AdtDef<'tcx>
impl<'tcx> TypeVisitable<TyCtxt<'tcx>> for AdtDef<'tcx>
source§fn visit_with<V: TypeVisitor<TyCtxt<'tcx>>>(
&self,
_visitor: &mut V
) -> ControlFlow<V::BreakTy>
fn visit_with<V: TypeVisitor<TyCtxt<'tcx>>>( &self, _visitor: &mut V ) -> ControlFlow<V::BreakTy>
impl<'tcx> Copy for AdtDef<'tcx>
impl<'tcx> Eq for AdtDef<'tcx>
impl<'tcx> StructuralEq for AdtDef<'tcx>
impl<'tcx> StructuralPartialEq for AdtDef<'tcx>
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:8 bytes