Struct rustc_trait_selection::traits::fulfill::FulfillProcessor
source · struct FulfillProcessor<'a, 'b, 'tcx> {
selcx: &'a mut SelectionContext<'b, 'tcx>,
}
Fields
selcx: &'a mut SelectionContext<'b, 'tcx>
Implementations
sourceimpl<'a, 'b, 'tcx> FulfillProcessor<'a, 'b, 'tcx>
impl<'a, 'b, 'tcx> FulfillProcessor<'a, 'b, 'tcx>
fn process_trait_obligation(
&mut self,
obligation: &PredicateObligation<'tcx>,
trait_obligation: TraitObligation<'tcx>,
stalled_on: &mut Vec<TyOrConstInferVar<'tcx>>
) -> ProcessResult<PendingPredicateObligation<'tcx>, FulfillmentErrorCode<'tcx>>
fn process_projection_obligation(
&mut self,
obligation: &PredicateObligation<'tcx>,
project_obligation: Obligation<'tcx, PolyProjectionPredicate<'tcx>>,
stalled_on: &mut Vec<TyOrConstInferVar<'tcx>>
) -> ProcessResult<PendingPredicateObligation<'tcx>, FulfillmentErrorCode<'tcx>>
Trait Implementations
sourceimpl<'a, 'b, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'b, 'tcx>
impl<'a, 'b, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'b, 'tcx>
sourcefn needs_process_obligation(&self, pending_obligation: &Self::Obligation) -> bool
fn needs_process_obligation(&self, pending_obligation: &Self::Obligation) -> bool
Identifies whether a predicate obligation needs processing.
This is always inlined, despite its size, because it has a single callsite and it is called very frequently.
sourcefn process_obligation(
&mut self,
pending_obligation: &mut PendingPredicateObligation<'tcx>
) -> ProcessResult<PendingPredicateObligation<'tcx>, FulfillmentErrorCode<'tcx>>
fn process_obligation(
&mut self,
pending_obligation: &mut PendingPredicateObligation<'tcx>
) -> ProcessResult<PendingPredicateObligation<'tcx>, FulfillmentErrorCode<'tcx>>
Processes a predicate obligation and returns either:
Changed(v)
if the predicate is true, presuming thatv
are also trueUnchanged
if we don’t have enough info to be sureError(e)
if the predicate does not hold
This is called much less often than needs_process_obligation
, so we
never inline it.
type Obligation = PendingPredicateObligation<'tcx>
type Error = FulfillmentErrorCode<'tcx>
sourcefn process_backedge<'c, I>(
&mut self,
cycle: I,
_marker: PhantomData<&'c PendingPredicateObligation<'tcx>>
)where
I: Clone + Iterator<Item = &'c PendingPredicateObligation<'tcx>>,
fn process_backedge<'c, I>(
&mut self,
cycle: I,
_marker: PhantomData<&'c PendingPredicateObligation<'tcx>>
)where
I: Clone + Iterator<Item = &'c PendingPredicateObligation<'tcx>>,
As we do the cycle check, we invoke this callback when we
encounter an actual cycle.
cycle
is an iterator that starts
at the start of the cycle in the stack and walks toward the
top. Read moreAuto Trait Implementations
impl<'a, 'b, 'tcx> !RefUnwindSafe for FulfillProcessor<'a, 'b, 'tcx>
impl<'a, 'b, 'tcx> !Send for FulfillProcessor<'a, 'b, 'tcx>
impl<'a, 'b, 'tcx> !Sync for FulfillProcessor<'a, 'b, 'tcx>
impl<'a, 'b, 'tcx> Unpin for FulfillProcessor<'a, 'b, 'tcx>where
'b: 'a,
'tcx: 'a,
impl<'a, 'b, 'tcx> !UnwindSafe for FulfillProcessor<'a, 'b, 'tcx>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
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: 8 bytes