pub enum CanonicalVarKind<I>where
I: Interner,{
Ty {
ui: UniverseIndex,
sub_root: BoundVar,
},
Int,
Float,
PlaceholderTy(<I as Interner>::PlaceholderTy),
Region(UniverseIndex),
PlaceholderRegion(<I as Interner>::PlaceholderRegion),
Const(UniverseIndex),
PlaceholderConst(<I as Interner>::PlaceholderConst),
}
Expand description
Information about a canonical variable that is included with the canonical value. This is sufficient information for code to create a copy of the canonical value in some other inference context, with fresh inference variables replacing the canonical values.
Variants§
Ty
General type variable ?T
that can be unified with arbitrary types.
We also store the index of the first type variable which is sub-unified
with this one. If there is no inference variable related to this one,
its sub_root
just points to itself.
Int
Integral type variable ?I
(that can only be unified with integral types).
Float
Floating-point type variable ?F
(that can only be unified with float types).
PlaceholderTy(<I as Interner>::PlaceholderTy)
A “placeholder” that represents “any type”.
Region(UniverseIndex)
Region variable '?R
.
PlaceholderRegion(<I as Interner>::PlaceholderRegion)
A “placeholder” that represents “any region”. Created when you
are solving a goal like for<'a> T: Foo<'a>
to represent the
bound region 'a
.
Const(UniverseIndex)
Some kind of const inference variable.
PlaceholderConst(<I as Interner>::PlaceholderConst)
A “placeholder” that represents “any const”.
Implementations§
Source§impl<I> CanonicalVarKind<I>where
I: Interner,
impl<I> CanonicalVarKind<I>where
I: Interner,
pub fn universe(self) -> UniverseIndex
Sourcepub fn with_updated_universe(self, ui: UniverseIndex) -> CanonicalVarKind<I>
pub fn with_updated_universe(self, ui: UniverseIndex) -> CanonicalVarKind<I>
Replaces the universe of this canonical variable with ui
.
In case this is a float or int variable, this causes an ICE if the updated universe is not the root.
pub fn is_existential(self) -> bool
pub fn is_region(self) -> bool
pub fn expect_placeholder_index(self) -> usize
Trait Implementations§
Source§impl<I> Clone for CanonicalVarKind<I>where
I: Interner,
impl<I> Clone for CanonicalVarKind<I>where
I: Interner,
Source§fn clone(&self) -> CanonicalVarKind<I>
fn clone(&self) -> CanonicalVarKind<I>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<I> Debug for CanonicalVarKind<I>where
I: Interner,
impl<I> Debug for CanonicalVarKind<I>where
I: Interner,
Source§impl<I, __D> Decodable<__D> for CanonicalVarKind<I>where
I: Interner,
__D: Decoder,
<I as Interner>::PlaceholderTy: Decodable<__D>,
<I as Interner>::PlaceholderRegion: Decodable<__D>,
<I as Interner>::PlaceholderConst: Decodable<__D>,
impl<I, __D> Decodable<__D> for CanonicalVarKind<I>where
I: Interner,
__D: Decoder,
<I as Interner>::PlaceholderTy: Decodable<__D>,
<I as Interner>::PlaceholderRegion: Decodable<__D>,
<I as Interner>::PlaceholderConst: Decodable<__D>,
fn decode(__decoder: &mut __D) -> CanonicalVarKind<I>
Source§impl<I, __E> Encodable<__E> for CanonicalVarKind<I>where
I: Interner,
__E: Encoder,
<I as Interner>::PlaceholderTy: Encodable<__E>,
<I as Interner>::PlaceholderRegion: Encodable<__E>,
<I as Interner>::PlaceholderConst: Encodable<__E>,
impl<I, __E> Encodable<__E> for CanonicalVarKind<I>where
I: Interner,
__E: Encoder,
<I as Interner>::PlaceholderTy: Encodable<__E>,
<I as Interner>::PlaceholderRegion: Encodable<__E>,
<I as Interner>::PlaceholderConst: Encodable<__E>,
Source§impl<I> Hash for CanonicalVarKind<I>where
I: Interner,
impl<I> Hash for CanonicalVarKind<I>where
I: Interner,
Source§impl<I, __CTX> HashStable<__CTX> for CanonicalVarKind<I>where
I: Interner,
<I as Interner>::PlaceholderTy: HashStable<__CTX>,
<I as Interner>::PlaceholderRegion: HashStable<__CTX>,
<I as Interner>::PlaceholderConst: HashStable<__CTX>,
impl<I, __CTX> HashStable<__CTX> for CanonicalVarKind<I>where
I: Interner,
<I as Interner>::PlaceholderTy: HashStable<__CTX>,
<I as Interner>::PlaceholderRegion: HashStable<__CTX>,
<I as Interner>::PlaceholderConst: HashStable<__CTX>,
fn hash_stable( &self, __hcx: &mut __CTX, __hasher: &mut StableHasher<SipHasher128>, )
Source§impl<I> PartialEq for CanonicalVarKind<I>where
I: Interner,
impl<I> PartialEq for CanonicalVarKind<I>where
I: Interner,
impl<I> Copy for CanonicalVarKind<I>where
I: Interner,
impl<I> Eq for CanonicalVarKind<I>where
I: Interner,
Auto Trait Implementations§
impl<I> DynSend for CanonicalVarKind<I>where
<I as Interner>::PlaceholderTy: DynSend,
<I as Interner>::PlaceholderRegion: DynSend,
<I as Interner>::PlaceholderConst: DynSend,
impl<I> DynSync for CanonicalVarKind<I>where
<I as Interner>::PlaceholderTy: DynSync,
<I as Interner>::PlaceholderRegion: DynSync,
<I as Interner>::PlaceholderConst: DynSync,
impl<I> Freeze for CanonicalVarKind<I>where
<I as Interner>::PlaceholderTy: Freeze,
<I as Interner>::PlaceholderRegion: Freeze,
<I as Interner>::PlaceholderConst: Freeze,
impl<I> RefUnwindSafe for CanonicalVarKind<I>where
<I as Interner>::PlaceholderTy: RefUnwindSafe,
<I as Interner>::PlaceholderRegion: RefUnwindSafe,
<I as Interner>::PlaceholderConst: RefUnwindSafe,
impl<I> Send for CanonicalVarKind<I>where
<I as Interner>::PlaceholderTy: Send,
<I as Interner>::PlaceholderRegion: Send,
<I as Interner>::PlaceholderConst: Send,
impl<I> Sync for CanonicalVarKind<I>where
<I as Interner>::PlaceholderTy: Sync,
<I as Interner>::PlaceholderRegion: Sync,
<I as Interner>::PlaceholderConst: Sync,
impl<I> Unpin for CanonicalVarKind<I>where
<I as Interner>::PlaceholderTy: Unpin,
<I as Interner>::PlaceholderRegion: Unpin,
<I as Interner>::PlaceholderConst: Unpin,
impl<I> UnwindSafe for CanonicalVarKind<I>where
<I as Interner>::PlaceholderTy: UnwindSafe,
<I as Interner>::PlaceholderRegion: UnwindSafe,
<I as Interner>::PlaceholderConst: UnwindSafe,
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: 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§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.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<T> ErasedDestructor for Twhere
T: 'static,
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.