enum CurrentGoalKind {
Misc,
CoinductiveTrait,
ProjectionComputeAssocTermCandidate,
}Expand description
The kind of goal we’re currently proving.
This has effects on cycle handling handling and on how we compute query responses, see the variant descriptions for more info.
Variants§
Misc
CoinductiveTrait
We’re proving an trait goal for a coinductive trait, either an auto trait or Sized.
These are currently the only goals whose impl where-clauses are considered to be productive steps.
ProjectionComputeAssocTermCandidate
Unlike other goals, NormalizesTo goals aren’t independent goals but just implementation
details for handling projections of associated terms. When we encounter a Projection goal
whose projection_term is an associated term, we create a NormalizesTo goal whose
expected term is fully unconstrained and evaluate it.
This would weaken inference however, as the nested goals of normalizes-to never get the
inference constraints from the actual expected term. We just gather candidates from the
normalizes-to goal and return any ambiguous nested goals of it to the caller (Projection goal). The caller handle and evaluate them as if they were its own nested goals.
Because of this, evaluating a normalizes-to goal is computing candidates for projection of an associated term and it never leaks out of the solver.
Implementations§
Source§impl CurrentGoalKind
impl CurrentGoalKind
fn from_query_input<I: Interner>( cx: I, input: QueryInput<I, I::Predicate>, ) -> CurrentGoalKind
Trait Implementations§
Source§impl Clone for CurrentGoalKind
impl Clone for CurrentGoalKind
Source§fn clone(&self) -> CurrentGoalKind
fn clone(&self) -> CurrentGoalKind
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for CurrentGoalKind
Auto Trait Implementations§
impl DynSend for CurrentGoalKind
impl DynSync for CurrentGoalKind
impl Freeze for CurrentGoalKind
impl RefUnwindSafe for CurrentGoalKind
impl Send for CurrentGoalKind
impl Sync for CurrentGoalKind
impl Unpin for CurrentGoalKind
impl UnsafeUnpin for CurrentGoalKind
impl UnwindSafe for CurrentGoalKind
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: 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: 1 byte
Size for each variant:
Misc: 0 bytesCoinductiveTrait: 0 bytesProjectionComputeAssocTermCandidate: 0 bytes