pub struct GoalEvaluation<I>where
I: Interner,{
pub goal: Goal<I, <I as Interner>::Predicate>,
pub certainty: Certainty,
pub has_changed: HasChanged,
pub stalled_on: Option<GoalStalledOn<I>>,
}
Expand description
The result of evaluating a goal.
Fields§
§goal: Goal<I, <I as Interner>::Predicate>
The goal we’ve evaluated. This is the input goal, but potentially with its inference variables resolved. This never applies any inference constraints from evaluating the goal.
We rely on this to check whether root goals in HIR typeck had an unresolved type inference variable in the input. We must not resolve this after evaluating the goal as even if the inference variable has been resolved by evaluating the goal itself, this goal may still end up failing due to region uniquification later on.
This is used as a minor optimization to avoid re-resolving inference variables
when reevaluating ambiguous goals. E.g. if we’ve got a goal ?x: Trait
with ?x
already being constrained to Vec<?y>
, then the first evaluation resolves it to
Vec<?y>: Trait
. If this goal is still ambiguous and we later resolve ?y
to u32
,
then reevaluating this goal now only needs to resolve ?y
while it would otherwise
have to resolve both ?x
and ?y
,
certainty: Certainty
§has_changed: HasChanged
§stalled_on: Option<GoalStalledOn<I>>
If the Certainty
was Maybe
, then keep track of whether the goal has changed
before rerunning it.
Auto Trait Implementations§
impl<I> DynSend for GoalEvaluation<I>
impl<I> DynSync for GoalEvaluation<I>
impl<I> Freeze for GoalEvaluation<I>
impl<I> RefUnwindSafe for GoalEvaluation<I>where
<I as Interner>::ParamEnv: RefUnwindSafe,
<I as Interner>::Predicate: RefUnwindSafe,
<I as Interner>::GenericArg: RefUnwindSafe,
impl<I> Send for GoalEvaluation<I>
impl<I> Sync for GoalEvaluation<I>
impl<I> Unpin for GoalEvaluation<I>
impl<I> UnwindSafe for GoalEvaluation<I>where
<I as Interner>::ParamEnv: UnwindSafe,
<I as Interner>::Predicate: UnwindSafe,
<I as Interner>::GenericArg: UnwindSafe,
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> 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<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
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.