Struct PredicateSearcher
pub struct PredicateSearcher<'tcx> {
pub(crate) tcx: TyCtxt<'tcx>,
pub(crate) typing_env: TypingEnv<'tcx>,
candidates: HashMap<Binder<TyCtxt<'tcx>, TraitRef<TyCtxt<'tcx>>>, Candidate<'tcx>>,
pub(crate) options: BoundsOptions,
implicit_self_clause: bool,
pub(crate) item_refs_cache: HashMap<(DefId, &'tcx RawList<(), GenericArg<'tcx>>, bool), ItemRef<'tcx>>,
impl_exprs_cache: HashMap<Binder<TyCtxt<'tcx>, TraitRef<TyCtxt<'tcx>>>, ImplExpr<'tcx>>,
}Expand description
Stores a set of predicates along with where they came from.
Fields§
§tcx: TyCtxt<'tcx>§typing_env: TypingEnv<'tcx>§candidates: HashMap<Binder<TyCtxt<'tcx>, TraitRef<TyCtxt<'tcx>>>, Candidate<'tcx>>§options: BoundsOptions§implicit_self_clause: bool§item_refs_cache: HashMap<(DefId, &'tcx RawList<(), GenericArg<'tcx>>, bool), ItemRef<'tcx>>§impl_exprs_cache: HashMap<Binder<TyCtxt<'tcx>, TraitRef<TyCtxt<'tcx>>>, ImplExpr<'tcx>>Implementations§
§impl<'tcx> PredicateSearcher<'tcx>
impl<'tcx> PredicateSearcher<'tcx>
pub fn new_for_owner(
tcx: TyCtxt<'tcx>,
owner_id: DefId,
options: &BoundsOptions,
) -> PredicateSearcher<'tcx>
pub fn new_for_owner( tcx: TyCtxt<'tcx>, owner_id: DefId, options: &BoundsOptions, ) -> PredicateSearcher<'tcx>
Initialize the elaborator with the predicates accessible within this item.
pub fn insert_bound_predicates(
&mut self,
preds: impl IntoIterator<Item = ItemPredicate<'tcx>>,
)
pub fn insert_bound_predicates( &mut self, preds: impl IntoIterator<Item = ItemPredicate<'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.
pub fn set_param_env(&mut self, param_env: ParamEnv<'tcx>)
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.
pub fn resolve(
&mut self,
tref: &Binder<TyCtxt<'tcx>, TraitRef<TyCtxt<'tcx>>>,
) -> ImplExpr<'tcx>
pub fn resolve( &mut self, tref: &Binder<TyCtxt<'tcx>, TraitRef<TyCtxt<'tcx>>>, ) -> ImplExpr<'tcx>
Resolve the given trait reference in the local context.
pub fn resolve_item_required_predicates(
&mut self,
def_id: DefId,
generics: &'tcx RawList<(), GenericArg<'tcx>>,
) -> Vec<ImplExpr<'tcx>>
pub fn resolve_item_required_predicates( &mut self, def_id: DefId, generics: &'tcx RawList<(), GenericArg<'tcx>>, ) -> Vec<ImplExpr<'tcx>>
Resolve the predicates required by the given item.
pub fn resolve_item_implied_predicates(
&mut self,
def_id: DefId,
generics: &'tcx RawList<(), GenericArg<'tcx>>,
) -> Vec<ImplExpr<'tcx>>
pub fn resolve_item_implied_predicates( &mut self, def_id: DefId, generics: &'tcx RawList<(), GenericArg<'tcx>>, ) -> Vec<ImplExpr<'tcx>>
Resolve the predicates implied by the given item.
pub fn resolve_predicates(
&mut self,
predicates: ItemPredicates<'tcx>,
generics: &'tcx RawList<(), GenericArg<'tcx>>,
) -> Vec<ImplExpr<'tcx>>
pub fn resolve_predicates( &mut self, predicates: ItemPredicates<'tcx>, generics: &'tcx RawList<(), GenericArg<'tcx>>, ) -> Vec<ImplExpr<'tcx>>
Apply the given generics to the provided clauses and resolve the trait references in the current context.
§impl<'tcx> PredicateSearcher<'tcx>
impl<'tcx> PredicateSearcher<'tcx>
pub fn resolve_item_reference(
&mut self,
def_id: DefId,
generics: &'tcx RawList<(), GenericArg<'tcx>>,
resolve_assoc_item_trait_ref: bool,
) -> ItemRef<'tcx>
pub fn resolve_item_reference( &mut self, def_id: DefId, generics: &'tcx RawList<(), GenericArg<'tcx>>, resolve_assoc_item_trait_ref: bool, ) -> ItemRef<'tcx>
Construct an ItemRef by filling in the trait proofs required to mention said item.
If resolve_assoc_item_trait_ref == true and (def_id, generics) points to a trait
associated item that can be resolved to a specific impl, translate rewrites def_id to
the concrete associated item from that impl and rebases the generics.
For instance, [<u32 as From<u8>>::from] produces a [ItemRef] with a DefId looking
like core::convert::num::Impl#42::from when resolve_impl is true, otherwise keeps the
DefId of the trait item definition: core::convert::From::from.
Trait Implementations§
§impl<'tcx> Clone for PredicateSearcher<'tcx>
impl<'tcx> Clone for PredicateSearcher<'tcx>
§fn clone(&self) -> PredicateSearcher<'tcx>
fn clone(&self) -> PredicateSearcher<'tcx>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto 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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<I, T> ExtractContext<I, ()> for T
impl<I, T> ExtractContext<I, ()> for T
§fn extract_context(self, _original_input: I)
fn extract_context(self, _original_input: I)
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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