hax_frontend_exporter

Struct PredicateSearcher

source
pub struct PredicateSearcher<'tcx> {
    tcx: TyCtxt<'tcx>,
    param_env: ParamEnv<'tcx>,
    candidates: HashMap<PolyTraitPredicate<'tcx>, Candidate<'tcx>>,
}
Expand description

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

Fields§

§tcx: TyCtxt<'tcx>§param_env: ParamEnv<'tcx>§candidates: HashMap<PolyTraitPredicate<'tcx>, Candidate<'tcx>>

Local clauses available in the current context.

Implementations§

source§

impl<'tcx> PredicateSearcher<'tcx>

source

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

Initialize the elaborator with the predicates accessible within this item.

source

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

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

source

fn extend_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_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.

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> 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, 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