PredicateSearcher

Struct PredicateSearcher 

Source
pub struct PredicateSearcher<'tcx> {
    tcx: TyCtxt<'tcx>,
    typing_env: TypingEnv<'tcx>,
    candidates: HashMap<PolyTraitPredicate<'tcx>, Candidate<'tcx>>,
    options: BoundsOptions,
    bound_clause_count: usize,
}
Expand description

Stores a set of predicates along with where they came from.

Fields§

§tcx: TyCtxt<'tcx>§typing_env: TypingEnv<'tcx>§candidates: HashMap<PolyTraitPredicate<'tcx>, Candidate<'tcx>>

Local clauses available in the current context.

§options: BoundsOptions

Resolution options.

§bound_clause_count: usize

Count the number of bound clauses in scope; used to identify clauses uniquely.

Implementations§

Source§

impl<'tcx> PredicateSearcher<'tcx>

Source

pub fn new_for_owner( tcx: TyCtxt<'tcx>, owner_id: DefId, options: BoundsOptions, ) -> Self

Initialize the elaborator with the predicates accessible within this item.

Source

pub fn insert_bound_predicates( &mut self, clauses: impl IntoIterator<Item = PolyTraitPredicate<'tcx>>, )

Insert the bound clauses in the search context. Prefer inserting them all at once as this will give priority to shorter resolution paths. Bound clauses are numbered from 0 in insertion order.

Source

pub fn set_param_env(&mut self, param_env: ParamEnv<'tcx>)

Override the param env; we use this when resolving dyn predicates to add more clauses to the scope.

Source

fn insert_predicates( &mut self, preds: impl IntoIterator<Item = AnnotatedTraitPred<'tcx>>, )

Insert annotated predicates in the search context. Prefer inserting them all at once as this will give priority to shorter resolution paths.

Source

fn insert_candidates( &mut self, candidates: impl IntoIterator<Item = Candidate<'tcx>>, )

Insert new candidates and all their parent predicates. This deduplicates predicates to avoid divergence.

Source

fn insert_candidate_parents(&mut self, new_candidates: Vec<Candidate<'tcx>>)

Add the parents of these candidates. This is a separate function to avoid polymorphic recursion due to the closures capturing the type parameters of this function.

Source

fn add_associated_type_refs( &mut self, ty: Binder<'tcx, Ty<'tcx>>, warn: &impl Fn(&str), ) -> Result<(), String>

If the type is a trait associated type, we add any relevant bounds to our context.

Source

fn resolve_local( &mut self, target: PolyTraitPredicate<'tcx>, warn: &impl Fn(&str), ) -> Result<Option<Candidate<'tcx>>, String>

Resolve a local clause by looking it up in this set. If the predicate applies to an associated type, we add the relevant implied associated type bounds to the set as well.

Source

pub fn resolve( &mut self, tref: &PolyTraitRef<'tcx>, warn: &impl Fn(&str), ) -> Result<ImplExpr<'tcx>, String>

Resolve the given trait reference in the local context.

Source

pub fn resolve_item_required_predicates( &mut self, def_id: DefId, generics: GenericArgsRef<'tcx>, warn: &impl Fn(&str), ) -> Result<Vec<ImplExpr<'tcx>>, String>

Resolve the predicates required by the given item.

Source

pub fn resolve_item_implied_predicates( &mut self, def_id: DefId, generics: GenericArgsRef<'tcx>, warn: &impl Fn(&str), ) -> Result<Vec<ImplExpr<'tcx>>, String>

Resolve the predicates implied by the given item.

Source

pub fn resolve_predicates( &mut self, generics: GenericArgsRef<'tcx>, predicates: Predicates<'tcx>, warn: &impl Fn(&str), ) -> Result<Vec<ImplExpr<'tcx>>, String>

Apply the given generics to the provided clauses and resolve the trait references in the current context.

Trait Implementations§

Source§

impl<'tcx> Clone for PredicateSearcher<'tcx>

Source§

fn clone(&self) -> PredicateSearcher<'tcx>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<'tcx> Freeze for PredicateSearcher<'tcx>

§

impl<'tcx> !RefUnwindSafe for PredicateSearcher<'tcx>

§

impl<'tcx> !Send for PredicateSearcher<'tcx>

§

impl<'tcx> !Sync for PredicateSearcher<'tcx>

§

impl<'tcx> Unpin for PredicateSearcher<'tcx>

§

impl<'tcx> !UnwindSafe for PredicateSearcher<'tcx>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

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<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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<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