GoalEvaluation

Struct GoalEvaluation 

Source
pub struct GoalEvaluation<I: Interner> {
    pub goal: Goal<I, I::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::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.

Trait Implementations§

Source§

impl<I> Debug for GoalEvaluation<I>
where I: Interner,

Source§

fn fmt(&self, __f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T, R> CollectAndApply<T, R> for T

Source§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

Source§

type Output = R

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

Source§

fn upcast(self, interner: I) -> U

Source§

impl<I, T> UpcastFrom<I, T> for T

Source§

fn upcast_from(from: T, _tcx: I) -> T

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more