Struct rustc_trait_selection::traits::fulfill::FulfillProcessor[−][src]

struct FulfillProcessor<'a, 'b, 'tcx> {
    selcx: &'a mut SelectionContext<'b, 'tcx>,
    register_region_obligations: bool,
}

Fields

selcx: &'a mut SelectionContext<'b, 'tcx>register_region_obligations: bool

Implementations

impl<'a, 'b, 'tcx> FulfillProcessor<'a, 'b, 'tcx>[src]

fn progress_changed_obligations(
    &mut self,
    pending_obligation: &mut PendingPredicateObligation<'tcx>
) -> ProcessResult<PendingPredicateObligation<'tcx>, FulfillmentErrorCode<'tcx>>
[src]

fn process_trait_obligation(
    &mut self,
    obligation: &PredicateObligation<'tcx>,
    trait_obligation: TraitObligation<'tcx>,
    stalled_on: &mut Vec<TyOrConstInferVar<'tcx>>
) -> ProcessResult<PendingPredicateObligation<'tcx>, FulfillmentErrorCode<'tcx>>
[src]

fn process_projection_obligation(
    &mut self,
    project_obligation: Obligation<'tcx, PolyProjectionPredicate<'tcx>>,
    stalled_on: &mut Vec<TyOrConstInferVar<'tcx>>
) -> ProcessResult<PendingPredicateObligation<'tcx>, FulfillmentErrorCode<'tcx>>
[src]

Trait Implementations

impl<'a, 'b, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'b, 'tcx>[src]

fn process_obligation(
    &mut self,
    pending_obligation: &mut Self::Obligation
) -> ProcessResult<Self::Obligation, Self::Error>
[src]

Processes a predicate obligation and returns either:

  • Changed(v) if the predicate is true, presuming that v are also true
  • Unchanged if we don’t have enough info to be sure
  • Error(e) if the predicate does not hold

This is always inlined, despite its size, because it has a single callsite and it is called very frequently.

type Obligation = PendingPredicateObligation<'tcx>

type Error = FulfillmentErrorCode<'tcx>

fn process_backedge<'c, I>(
    &mut self,
    cycle: I,
    _marker: PhantomData<&'c PendingPredicateObligation<'tcx>>
) where
    I: Clone + Iterator<Item = &'c PendingPredicateObligation<'tcx>>, 
[src]

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 more

Auto 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

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

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized, 
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized, 
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

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

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

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

Performs the conversion.

impl<T> WithConstness for T[src]

fn with_constness(self, constness: Constness) -> ConstnessAnd<Self>[src]

fn with_const(self) -> ConstnessAnd<Self>[src]

fn without_const(self) -> ConstnessAnd<Self>[src]