rustc_trait_selection::traits

Struct ObligationCtxt

Source
pub struct ObligationCtxt<'a, 'tcx, E = ScrubbedTraitError<'tcx>> {
    pub infcx: &'a InferCtxt<'tcx>,
    engine: RefCell<Box<dyn TraitEngine<'tcx, E>>>,
}
Expand description

Used if you want to have pleasant experience when dealing with obligations outside of hir or mir typeck.

Fields§

§infcx: &'a InferCtxt<'tcx>§engine: RefCell<Box<dyn TraitEngine<'tcx, E>>>

Implementations§

Source§

impl<'a, 'tcx> ObligationCtxt<'a, 'tcx, FulfillmentError<'tcx>>

Source

pub fn new_with_diagnostics(infcx: &'a InferCtxt<'tcx>) -> Self

Source§

impl<'a, 'tcx> ObligationCtxt<'a, 'tcx, ScrubbedTraitError<'tcx>>

Source

pub fn new(infcx: &'a InferCtxt<'tcx>) -> Self

Source§

impl<'a, 'tcx, E> ObligationCtxt<'a, 'tcx, E>
where E: 'tcx,

Source

pub fn register_obligation(&self, obligation: PredicateObligation<'tcx>)

Source

pub fn register_obligations( &self, obligations: impl IntoIterator<Item = PredicateObligation<'tcx>>, )

Source

pub fn register_infer_ok_obligations<T>(&self, infer_ok: InferOk<'tcx, T>) -> T

Source

pub fn register_bound( &self, cause: ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, ty: Ty<'tcx>, def_id: DefId, )

Requires that ty must implement the trait with def_id in the given environment. This trait must not have any type parameters (except for Self).

Source

pub fn normalize<T: TypeFoldable<TyCtxt<'tcx>>>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, value: T, ) -> T

Source

pub fn eq<T: ToTrace<'tcx>>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, expected: T, actual: T, ) -> Result<(), TypeError<'tcx>>

Source

pub fn eq_trace<T: Relate<TyCtxt<'tcx>>>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, trace: TypeTrace<'tcx>, expected: T, actual: T, ) -> Result<(), TypeError<'tcx>>

Source

pub fn sub<T: ToTrace<'tcx>>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, expected: T, actual: T, ) -> Result<(), TypeError<'tcx>>

Checks whether expected is a subtype of actual: expected <: actual.

Source

pub fn relate<T: ToTrace<'tcx>>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, variance: Variance, expected: T, actual: T, ) -> Result<(), TypeError<'tcx>>

Source

pub fn sup<T: ToTrace<'tcx>>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, expected: T, actual: T, ) -> Result<(), TypeError<'tcx>>

Checks whether expected is a supertype of actual: expected :> actual.

Source

pub fn select_where_possible(&self) -> Vec<E>

Source

pub fn select_all_or_error(&self) -> Vec<E>

Source

pub fn into_pending_obligations(self) -> PredicateObligations<'tcx>

Returns the not-yet-processed and stalled obligations from the ObligationCtxt.

Takes ownership of the context as doing operations such as ObligationCtxt::eq afterwards will result in other obligations getting ignored. You can make a new ObligationCtxt if this needs to be done in a loop, for example.

Source

pub fn resolve_regions_and_report_errors( self, generic_param_scope: LocalDefId, outlives_env: &OutlivesEnvironment<'tcx>, ) -> Result<(), ErrorGuaranteed>

Resolves regions and reports errors.

Takes ownership of the context as doing trait solving afterwards will result in region constraints getting ignored.

Source

pub fn resolve_regions( self, outlives_env: &OutlivesEnvironment<'tcx>, ) -> Vec<RegionResolutionError<'tcx>>

Resolves regions and reports errors.

Takes ownership of the context as doing trait solving afterwards will result in region constraints getting ignored.

Source§

impl<'tcx> ObligationCtxt<'_, 'tcx, FulfillmentError<'tcx>>

Source

pub fn assumed_wf_types_and_report_errors( &self, param_env: ParamEnv<'tcx>, def_id: LocalDefId, ) -> Result<FxIndexSet<Ty<'tcx>>, ErrorGuaranteed>

Source§

impl<'tcx> ObligationCtxt<'_, 'tcx, ScrubbedTraitError<'tcx>>

Source

pub fn make_canonicalized_query_response<T>( &self, inference_vars: CanonicalVarValues<'tcx>, answer: T, ) -> Result<CanonicalQueryResponse<'tcx, T>, NoSolution>
where T: Debug + TypeFoldable<TyCtxt<'tcx>>, Canonical<'tcx, QueryResponse<'tcx, T>>: ArenaAllocatable<'tcx>,

Source§

impl<'tcx, E> ObligationCtxt<'_, 'tcx, E>
where E: FromSolverError<'tcx, NextSolverError<'tcx>>,

Source

pub fn assumed_wf_types( &self, param_env: ParamEnv<'tcx>, def_id: LocalDefId, ) -> Result<FxIndexSet<Ty<'tcx>>, Vec<E>>

Source

pub fn deeply_normalize<T: TypeFoldable<TyCtxt<'tcx>>>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, value: T, ) -> Result<T, Vec<E>>

Source

pub fn structurally_normalize( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, value: Ty<'tcx>, ) -> Result<Ty<'tcx>, Vec<E>>

Source

pub fn structurally_normalize_const( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, value: Const<'tcx>, ) -> Result<Const<'tcx>, Vec<E>>

Auto Trait Implementations§

§

impl<'a, 'tcx, E = ScrubbedTraitError<'tcx>> !DynSend for ObligationCtxt<'a, 'tcx, E>

§

impl<'a, 'tcx, E = ScrubbedTraitError<'tcx>> !DynSync for ObligationCtxt<'a, 'tcx, E>

§

impl<'a, 'tcx, E = ScrubbedTraitError<'tcx>> !Freeze for ObligationCtxt<'a, 'tcx, E>

§

impl<'a, 'tcx, E = ScrubbedTraitError<'tcx>> !RefUnwindSafe for ObligationCtxt<'a, 'tcx, E>

§

impl<'a, 'tcx, E = ScrubbedTraitError<'tcx>> !Send for ObligationCtxt<'a, 'tcx, E>

§

impl<'a, 'tcx, E = ScrubbedTraitError<'tcx>> !Sync for ObligationCtxt<'a, 'tcx, E>

§

impl<'a, 'tcx, E> Unpin for ObligationCtxt<'a, 'tcx, E>

§

impl<'a, 'tcx, E = ScrubbedTraitError<'tcx>> !UnwindSafe for ObligationCtxt<'a, 'tcx, E>

Blanket Implementations§

Source§

impl<T> Aligned for T

Source§

const ALIGN: Alignment

Alignment of Self.
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> Filterable for T

Source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<P> IntoQueryParam<P> for P

Source§

impl<T> MaybeResult<T> for T

Source§

type Error = !

Source§

fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

Source§

fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<Tcx, T> Value<Tcx> for T
where Tcx: DepContext,

Source§

default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> 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
Source§

impl<'a, T> Captures<'a> for T
where T: ?Sized,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

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: 32 bytes