enum CanonicalizeMode<I: Interner> {
Input(CanonicalizeInputKind<I>),
Response {
max_input_universe: UniverseIndex,
},
}Expand description
Whether we’re canonicalizing a query input or the query response.
When canonicalizing an input we’re in the context of the caller while canonicalizing the response happens in the context of the query.
Variants§
Input(CanonicalizeInputKind<I>)
Response
FIXME: We currently return region constraints referring to placeholders and inference variables from a binder instantiated inside of the query.
In the long term we should eagerly deal with these constraints inside of the query and only propagate constraints which are actually nameable by the caller.
Fields
max_input_universe: UniverseIndexThe highest universe nameable by the caller.
All variables in a universe nameable by the caller get mapped to the root universe in the response and then mapped back to their correct universe when applying the query response in the context of the caller.
This doesn’t work for universes created inside of the query so we do remember their universe in the response.
Trait Implementations§
impl<I: Copy + Interner> Copy for CanonicalizeMode<I>
Auto Trait Implementations§
impl<I> DynSend for CanonicalizeMode<I>
impl<I> DynSync for CanonicalizeMode<I>
impl<I> Forget for CanonicalizeMode<I>
impl<I> Freeze for CanonicalizeMode<I>
impl<I> RefUnwindSafe for CanonicalizeMode<I>
impl<I> Send for CanonicalizeMode<I>
impl<I> Sync for CanonicalizeMode<I>
impl<I> Unpin for CanonicalizeMode<I>
impl<I> UnsafeUnpin for CanonicalizeMode<I>
impl<I> UnwindSafe for CanonicalizeMode<I>
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> 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
impl<T> ErasedDestructor for Twhere
T: 'static,
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<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> ⓘ
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.