pub(super) enum UniqueTypeId<'tcx> {
Ty(Ty<'tcx>, HiddenZst),
VariantPart(Ty<'tcx>, HiddenZst),
VariantStructType(Ty<'tcx>, VariantIdx, HiddenZst),
VariantStructTypeCppLikeWrapper(Ty<'tcx>, VariantIdx, HiddenZst),
VTableTy(Ty<'tcx>, Option<ExistentialTraitRef<'tcx>>, HiddenZst),
}
Expand description
A unique identifier for anything that we create a debuginfo node for. The types it contains are expected to already be normalized (which is asserted in the constructors).
Note that there are some things that only show up in debuginfo, like the separate type descriptions for each enum variant. These get an ID too because they have their own debuginfo node in LLVM IR.
Variants§
Ty(Ty<'tcx>, HiddenZst)
The ID of a regular type as it shows up at the language level.
VariantPart(Ty<'tcx>, HiddenZst)
The ID for the single DW_TAG_variant_part nested inside the top-level DW_TAG_structure_type that describes enums and coroutines.
VariantStructType(Ty<'tcx>, VariantIdx, HiddenZst)
The ID for the artificial struct type describing a single enum variant.
VariantStructTypeCppLikeWrapper(Ty<'tcx>, VariantIdx, HiddenZst)
The ID for the additional wrapper struct type describing an enum variant in CPP-like mode.
VTableTy(Ty<'tcx>, Option<ExistentialTraitRef<'tcx>>, HiddenZst)
The ID of the artificial type we create for VTables.
Implementations§
Source§impl<'tcx> UniqueTypeId<'tcx>
impl<'tcx> UniqueTypeId<'tcx>
pub(crate) fn for_ty(tcx: TyCtxt<'tcx>, t: Ty<'tcx>) -> Self
pub(crate) fn for_enum_variant_part( tcx: TyCtxt<'tcx>, enum_ty: Ty<'tcx>, ) -> Self
pub(crate) fn for_enum_variant_struct_type( tcx: TyCtxt<'tcx>, enum_ty: Ty<'tcx>, variant_idx: VariantIdx, ) -> Self
pub(crate) fn for_enum_variant_struct_type_wrapper( tcx: TyCtxt<'tcx>, enum_ty: Ty<'tcx>, variant_idx: VariantIdx, ) -> Self
pub(crate) fn for_vtable_ty( tcx: TyCtxt<'tcx>, self_type: Ty<'tcx>, implemented_trait: Option<ExistentialTraitRef<'tcx>>, ) -> Self
Sourcefn generate_unique_id_string(self, tcx: TyCtxt<'tcx>) -> String
fn generate_unique_id_string(self, tcx: TyCtxt<'tcx>) -> String
Generates a string version of this UniqueTypeId, which can be used as the UniqueId
argument of the various LLVMRustDIBuilderCreate*Type()
methods.
Right now this takes the form of a hex-encoded opaque hash value.
pub(crate) fn expect_ty(self) -> Ty<'tcx>
Trait Implementations§
Source§impl<'tcx> Clone for UniqueTypeId<'tcx>
impl<'tcx> Clone for UniqueTypeId<'tcx>
Source§fn clone(&self) -> UniqueTypeId<'tcx>
fn clone(&self) -> UniqueTypeId<'tcx>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<'tcx> Debug for UniqueTypeId<'tcx>
impl<'tcx> Debug for UniqueTypeId<'tcx>
Source§impl<'tcx> Hash for UniqueTypeId<'tcx>
impl<'tcx> Hash for UniqueTypeId<'tcx>
Source§impl<'tcx, '__ctx> HashStable<StableHashingContext<'__ctx>> for UniqueTypeId<'tcx>
impl<'tcx, '__ctx> HashStable<StableHashingContext<'__ctx>> for UniqueTypeId<'tcx>
fn hash_stable( &self, __hcx: &mut StableHashingContext<'__ctx>, __hasher: &mut StableHasher, )
Source§impl<'tcx> PartialEq for UniqueTypeId<'tcx>
impl<'tcx> PartialEq for UniqueTypeId<'tcx>
impl<'tcx> Copy for UniqueTypeId<'tcx>
impl<'tcx> Eq for UniqueTypeId<'tcx>
impl<'tcx> StructuralPartialEq for UniqueTypeId<'tcx>
Auto Trait Implementations§
impl<'tcx> DynSend for UniqueTypeId<'tcx>
impl<'tcx> DynSync for UniqueTypeId<'tcx>
impl<'tcx> Freeze for UniqueTypeId<'tcx>
impl<'tcx> !RefUnwindSafe for UniqueTypeId<'tcx>
impl<'tcx> Send for UniqueTypeId<'tcx>
impl<'tcx> Sync for UniqueTypeId<'tcx>
impl<'tcx> Unpin for UniqueTypeId<'tcx>
impl<'tcx> !UnwindSafe for UniqueTypeId<'tcx>
Blanket Implementations§
Source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]
Source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<Tcx, T> DepNodeParams<Tcx> for T
impl<Tcx, T> DepNodeParams<Tcx> for T
default fn fingerprint_style() -> FingerprintStyle
Source§default fn to_fingerprint(&self, tcx: Tcx) -> Fingerprint
default fn to_fingerprint(&self, tcx: Tcx) -> Fingerprint
default fn to_debug_str(&self, _: Tcx) -> String
Source§default fn recover(_: Tcx, _: &DepNode) -> Option<T>
default fn recover(_: Tcx, _: &DepNode) -> Option<T>
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.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
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<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 moreSource§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
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> 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: 24 bytes
Size for each variant:
Ty
: 16 bytesVariantPart
: 16 bytesVariantStructType
: 24 bytesVariantStructTypeCppLikeWrapper
: 24 bytesVTableTy
: 24 bytes