pub struct CommonTypes<'tcx> {Show 29 fields
pub unit: Ty<'tcx>,
pub bool: Ty<'tcx>,
pub char: Ty<'tcx>,
pub isize: Ty<'tcx>,
pub i8: Ty<'tcx>,
pub i16: Ty<'tcx>,
pub i32: Ty<'tcx>,
pub i64: Ty<'tcx>,
pub i128: Ty<'tcx>,
pub usize: Ty<'tcx>,
pub u8: Ty<'tcx>,
pub u16: Ty<'tcx>,
pub u32: Ty<'tcx>,
pub u64: Ty<'tcx>,
pub u128: Ty<'tcx>,
pub f16: Ty<'tcx>,
pub f32: Ty<'tcx>,
pub f64: Ty<'tcx>,
pub f128: Ty<'tcx>,
pub str_: Ty<'tcx>,
pub never: Ty<'tcx>,
pub self_param: Ty<'tcx>,
pub trait_object_dummy_self: Ty<'tcx>,
pub ty_vars: Vec<Ty<'tcx>>,
pub fresh_tys: Vec<Ty<'tcx>>,
pub fresh_int_tys: Vec<Ty<'tcx>>,
pub fresh_float_tys: Vec<Ty<'tcx>>,
pub anon_bound_tys: Vec<Vec<Ty<'tcx>>>,
pub anon_canonical_bound_tys: Vec<Ty<'tcx>>,
}Fields§
§unit: Ty<'tcx>§bool: Ty<'tcx>§char: Ty<'tcx>§isize: Ty<'tcx>§i8: Ty<'tcx>§i16: Ty<'tcx>§i32: Ty<'tcx>§i64: Ty<'tcx>§i128: Ty<'tcx>§usize: Ty<'tcx>§u8: Ty<'tcx>§u16: Ty<'tcx>§u32: Ty<'tcx>§u64: Ty<'tcx>§u128: Ty<'tcx>§f16: Ty<'tcx>§f32: Ty<'tcx>§f64: Ty<'tcx>§f128: Ty<'tcx>§str_: Ty<'tcx>§never: Ty<'tcx>§self_param: Ty<'tcx>§trait_object_dummy_self: Ty<'tcx>A dummy type that can be used as the self type of trait object types outside of
ty::ExistentialTraitRef, ty::ExistentialProjection, etc.
This is most useful or even necessary when you want to manipulate existential predicates together with normal predicates or if you want to pass them to an API that only expects normal predicates.
Indeed, you can sometimes use the trait object type itself as the self type instead of this dummy type. However, that’s not always correct: For example, if said trait object type can also appear “naturally” in whatever type system entity you’re working with (like predicates) but you still need to be able to identify the erased self type later on. That’s when this dummy type comes in handy.
HIR ty lowering guarantees / has to guarantee that this dummy type doesn’t appear in the lowered types, so you can “freely” use it (see warning below).
Under the hood, this type is just ty::Infer(ty::FreshTy(0)). Consequently, you must be
sure that fresh types cannot appear by other means in whatever type system entity you’re
working with.
Keep uses of this dummy type as local as possible and try not to leak it to subsequent passes!
ty_vars: Vec<Ty<'tcx>>Pre-interned Infer(ty::TyVar(n)) for small values of n.
fresh_tys: Vec<Ty<'tcx>>Pre-interned Infer(ty::FreshTy(n)) for small values of n.
fresh_int_tys: Vec<Ty<'tcx>>Pre-interned Infer(ty::FreshIntTy(n)) for small values of n.
fresh_float_tys: Vec<Ty<'tcx>>Pre-interned Infer(ty::FreshFloatTy(n)) for small values of n.
anon_bound_tys: Vec<Vec<Ty<'tcx>>>Pre-interned values of the form:
Bound(BoundVarIndexKind::Bound(DebruijnIndex(i)), BoundTy { var: v, kind: BoundTyKind::Anon}) for small values of i and v.
anon_canonical_bound_tys: Vec<Ty<'tcx>>Implementations§
Source§impl<'tcx> CommonTypes<'tcx>
impl<'tcx> CommonTypes<'tcx>
fn new(interners: &CtxtInterners<'tcx>) -> CommonTypes<'tcx>
Auto Trait Implementations§
impl<'tcx> DynSend for CommonTypes<'tcx>
impl<'tcx> DynSync for CommonTypes<'tcx>
impl<'tcx> Freeze for CommonTypes<'tcx>
impl<'tcx> !RefUnwindSafe for CommonTypes<'tcx>
impl<'tcx> Send for CommonTypes<'tcx>
impl<'tcx> Sync for CommonTypes<'tcx>
impl<'tcx> Unpin for CommonTypes<'tcx>
impl<'tcx> UnsafeUnpin for CommonTypes<'tcx>
impl<'tcx> !UnwindSafe for CommonTypes<'tcx>
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, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> 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<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<K> IntoQueryKey<K> for K
impl<K> IntoQueryKey<K> for K
Source§fn into_query_key(self) -> K
fn into_query_key(self) -> K
Self to K.
This should always be a very cheap conversion, e.g. LocalDefId::to_def_id.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<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<T> ErasedDestructor for Twhere
T: 'static,
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: 328 bytes