Trait rustc_next_trait_solver::infcx::SolverDelegate

source ·
pub trait SolverDelegate: Sized {
    type Interner: Interner;
    type Span: Copy;

Show 44 methods // Required methods fn interner(&self) -> Self::Interner; fn solver_mode(&self) -> SolverMode; fn build_with_canonical<V>( interner: Self::Interner, solver_mode: SolverMode, canonical: &Canonical<Self::Interner, V>, ) -> (Self, V, CanonicalVarValues<Self::Interner>) where V: TypeFoldable<Self::Interner>; fn universe(&self) -> UniverseIndex; fn create_next_universe(&self) -> UniverseIndex; fn universe_of_ty(&self, ty: TyVid) -> Option<UniverseIndex>; fn universe_of_lt(&self, lt: RegionVid) -> Option<UniverseIndex>; fn universe_of_ct(&self, ct: ConstVid) -> Option<UniverseIndex>; fn root_ty_var(&self, var: TyVid) -> TyVid; fn root_const_var(&self, var: ConstVid) -> ConstVid; fn opportunistic_resolve_ty_var( &self, vid: TyVid, ) -> <Self::Interner as Interner>::Ty; fn opportunistic_resolve_int_var( &self, vid: IntVid, ) -> <Self::Interner as Interner>::Ty; fn opportunistic_resolve_float_var( &self, vid: FloatVid, ) -> <Self::Interner as Interner>::Ty; fn opportunistic_resolve_ct_var( &self, vid: ConstVid, ) -> <Self::Interner as Interner>::Const; fn opportunistic_resolve_effect_var( &self, vid: EffectVid, ) -> <Self::Interner as Interner>::Const; fn opportunistic_resolve_lt_var( &self, vid: RegionVid, ) -> <Self::Interner as Interner>::Region; fn defining_opaque_types( &self, ) -> <Self::Interner as Interner>::DefiningOpaqueTypes; fn next_ty_infer(&self) -> <Self::Interner as Interner>::Ty; fn next_const_infer(&self) -> <Self::Interner as Interner>::Const; fn fresh_args_for_item( &self, def_id: <Self::Interner as Interner>::DefId, ) -> <Self::Interner as Interner>::GenericArgs; fn fresh_var_for_kind_with_span( &self, arg: <Self::Interner as Interner>::GenericArg, span: Self::Span, ) -> <Self::Interner as Interner>::GenericArg; fn instantiate_binder_with_infer<T: TypeFoldable<Self::Interner> + Copy>( &self, value: Binder<Self::Interner, T>, ) -> T; fn enter_forall<T: TypeFoldable<Self::Interner> + Copy, U>( &self, value: Binder<Self::Interner, T>, f: impl FnOnce(T) -> U, ) -> U; fn relate<T: Relate<Self::Interner>>( &self, param_env: <Self::Interner as Interner>::ParamEnv, lhs: T, variance: Variance, rhs: T, ) -> Result<Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>, NoSolution>; fn eq_structurally_relating_aliases<T: Relate<Self::Interner>>( &self, param_env: <Self::Interner as Interner>::ParamEnv, lhs: T, rhs: T, ) -> Result<Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>, NoSolution>; fn resolve_vars_if_possible<T>(&self, value: T) -> T where T: TypeFoldable<Self::Interner>; fn probe<T>(&self, probe: impl FnOnce() -> T) -> T; fn leak_check( &self, max_input_universe: UniverseIndex, ) -> Result<(), NoSolution>; fn elaborate_supertraits( interner: Self::Interner, trait_ref: Binder<Self::Interner, TraitRef<Self::Interner>>, ) -> impl Iterator<Item = Binder<Self::Interner, TraitRef<Self::Interner>>>; fn try_const_eval_resolve( &self, param_env: <Self::Interner as Interner>::ParamEnv, unevaluated: UnevaluatedConst<Self::Interner>, ) -> Option<<Self::Interner as Interner>::Const>; fn sub_regions( &self, sub: <Self::Interner as Interner>::Region, sup: <Self::Interner as Interner>::Region, ); fn register_ty_outlives( &self, ty: <Self::Interner as Interner>::Ty, r: <Self::Interner as Interner>::Region, ); fn well_formed_goals( &self, param_env: <Self::Interner as Interner>::ParamEnv, arg: <Self::Interner as Interner>::GenericArg, ) -> Option<Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>>; fn clone_opaque_types_for_query_response( &self, ) -> Vec<(OpaqueTypeKey<Self::Interner>, <Self::Interner as Interner>::Ty)>; fn make_deduplicated_outlives_constraints( &self, ) -> Vec<OutlivesPredicate<Self::Interner, <Self::Interner as Interner>::GenericArg>>; fn instantiate_canonical<V>( &self, canonical: Canonical<Self::Interner, V>, values: CanonicalVarValues<Self::Interner>, ) -> V where V: TypeFoldable<Self::Interner>; fn instantiate_canonical_var_with_infer( &self, cv_info: CanonicalVarInfo<Self::Interner>, universe_map: impl Fn(UniverseIndex) -> UniverseIndex, ) -> <Self::Interner as Interner>::GenericArg; fn insert_hidden_type( &self, opaque_type_key: OpaqueTypeKey<Self::Interner>, param_env: <Self::Interner as Interner>::ParamEnv, hidden_ty: <Self::Interner as Interner>::Ty, goals: &mut Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>, ) -> Result<(), NoSolution>; fn add_item_bounds_for_hidden_type( &self, def_id: <Self::Interner as Interner>::DefId, args: <Self::Interner as Interner>::GenericArgs, param_env: <Self::Interner as Interner>::ParamEnv, hidden_ty: <Self::Interner as Interner>::Ty, goals: &mut Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>, ); fn inject_new_hidden_type_unchecked( &self, key: OpaqueTypeKey<Self::Interner>, hidden_ty: <Self::Interner as Interner>::Ty, ); fn reset_opaque_types(&self); fn trait_ref_is_knowable<E: Debug>( &self, trait_ref: TraitRef<Self::Interner>, lazily_normalize_ty: impl FnMut(<Self::Interner as Interner>::Ty) -> Result<<Self::Interner as Interner>::Ty, E>, ) -> Result<bool, E>; fn fetch_eligible_assoc_item( &self, param_env: <Self::Interner as Interner>::ParamEnv, goal_trait_ref: TraitRef<Self::Interner>, trait_assoc_def_id: <Self::Interner as Interner>::DefId, impl_def_id: <Self::Interner as Interner>::DefId, ) -> Result<Option<<Self::Interner as Interner>::DefId>, NoSolution>; fn is_transmutable( &self, param_env: <Self::Interner as Interner>::ParamEnv, dst: <Self::Interner as Interner>::Ty, src: <Self::Interner as Interner>::Ty, assume: <Self::Interner as Interner>::Const, ) -> Result<Certainty, NoSolution>;
}

Required Associated Types§

Required Methods§

source

fn interner(&self) -> Self::Interner

source

fn solver_mode(&self) -> SolverMode

source

fn build_with_canonical<V>( interner: Self::Interner, solver_mode: SolverMode, canonical: &Canonical<Self::Interner, V>, ) -> (Self, V, CanonicalVarValues<Self::Interner>)
where V: TypeFoldable<Self::Interner>,

source

fn universe(&self) -> UniverseIndex

source

fn create_next_universe(&self) -> UniverseIndex

source

fn universe_of_ty(&self, ty: TyVid) -> Option<UniverseIndex>

source

fn universe_of_lt(&self, lt: RegionVid) -> Option<UniverseIndex>

source

fn universe_of_ct(&self, ct: ConstVid) -> Option<UniverseIndex>

source

fn root_ty_var(&self, var: TyVid) -> TyVid

source

fn root_const_var(&self, var: ConstVid) -> ConstVid

source

fn opportunistic_resolve_ty_var( &self, vid: TyVid, ) -> <Self::Interner as Interner>::Ty

source

fn opportunistic_resolve_int_var( &self, vid: IntVid, ) -> <Self::Interner as Interner>::Ty

source

fn opportunistic_resolve_float_var( &self, vid: FloatVid, ) -> <Self::Interner as Interner>::Ty

source

fn opportunistic_resolve_ct_var( &self, vid: ConstVid, ) -> <Self::Interner as Interner>::Const

source

fn opportunistic_resolve_effect_var( &self, vid: EffectVid, ) -> <Self::Interner as Interner>::Const

source

fn opportunistic_resolve_lt_var( &self, vid: RegionVid, ) -> <Self::Interner as Interner>::Region

source

fn defining_opaque_types( &self, ) -> <Self::Interner as Interner>::DefiningOpaqueTypes

source

fn next_ty_infer(&self) -> <Self::Interner as Interner>::Ty

source

fn next_const_infer(&self) -> <Self::Interner as Interner>::Const

source

fn fresh_args_for_item( &self, def_id: <Self::Interner as Interner>::DefId, ) -> <Self::Interner as Interner>::GenericArgs

source

fn fresh_var_for_kind_with_span( &self, arg: <Self::Interner as Interner>::GenericArg, span: Self::Span, ) -> <Self::Interner as Interner>::GenericArg

source

fn instantiate_binder_with_infer<T: TypeFoldable<Self::Interner> + Copy>( &self, value: Binder<Self::Interner, T>, ) -> T

source

fn enter_forall<T: TypeFoldable<Self::Interner> + Copy, U>( &self, value: Binder<Self::Interner, T>, f: impl FnOnce(T) -> U, ) -> U

source

fn relate<T: Relate<Self::Interner>>( &self, param_env: <Self::Interner as Interner>::ParamEnv, lhs: T, variance: Variance, rhs: T, ) -> Result<Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>, NoSolution>

source

fn eq_structurally_relating_aliases<T: Relate<Self::Interner>>( &self, param_env: <Self::Interner as Interner>::ParamEnv, lhs: T, rhs: T, ) -> Result<Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>, NoSolution>

source

fn resolve_vars_if_possible<T>(&self, value: T) -> T
where T: TypeFoldable<Self::Interner>,

source

fn probe<T>(&self, probe: impl FnOnce() -> T) -> T

source

fn leak_check( &self, max_input_universe: UniverseIndex, ) -> Result<(), NoSolution>

source

fn elaborate_supertraits( interner: Self::Interner, trait_ref: Binder<Self::Interner, TraitRef<Self::Interner>>, ) -> impl Iterator<Item = Binder<Self::Interner, TraitRef<Self::Interner>>>

source

fn try_const_eval_resolve( &self, param_env: <Self::Interner as Interner>::ParamEnv, unevaluated: UnevaluatedConst<Self::Interner>, ) -> Option<<Self::Interner as Interner>::Const>

source

fn sub_regions( &self, sub: <Self::Interner as Interner>::Region, sup: <Self::Interner as Interner>::Region, )

source

fn register_ty_outlives( &self, ty: <Self::Interner as Interner>::Ty, r: <Self::Interner as Interner>::Region, )

source

fn well_formed_goals( &self, param_env: <Self::Interner as Interner>::ParamEnv, arg: <Self::Interner as Interner>::GenericArg, ) -> Option<Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>>

source

fn clone_opaque_types_for_query_response( &self, ) -> Vec<(OpaqueTypeKey<Self::Interner>, <Self::Interner as Interner>::Ty)>

source

fn make_deduplicated_outlives_constraints( &self, ) -> Vec<OutlivesPredicate<Self::Interner, <Self::Interner as Interner>::GenericArg>>

source

fn instantiate_canonical<V>( &self, canonical: Canonical<Self::Interner, V>, values: CanonicalVarValues<Self::Interner>, ) -> V
where V: TypeFoldable<Self::Interner>,

source

fn instantiate_canonical_var_with_infer( &self, cv_info: CanonicalVarInfo<Self::Interner>, universe_map: impl Fn(UniverseIndex) -> UniverseIndex, ) -> <Self::Interner as Interner>::GenericArg

source

fn insert_hidden_type( &self, opaque_type_key: OpaqueTypeKey<Self::Interner>, param_env: <Self::Interner as Interner>::ParamEnv, hidden_ty: <Self::Interner as Interner>::Ty, goals: &mut Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>, ) -> Result<(), NoSolution>

source

fn add_item_bounds_for_hidden_type( &self, def_id: <Self::Interner as Interner>::DefId, args: <Self::Interner as Interner>::GenericArgs, param_env: <Self::Interner as Interner>::ParamEnv, hidden_ty: <Self::Interner as Interner>::Ty, goals: &mut Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>, )

source

fn inject_new_hidden_type_unchecked( &self, key: OpaqueTypeKey<Self::Interner>, hidden_ty: <Self::Interner as Interner>::Ty, )

source

fn reset_opaque_types(&self)

source

fn trait_ref_is_knowable<E: Debug>( &self, trait_ref: TraitRef<Self::Interner>, lazily_normalize_ty: impl FnMut(<Self::Interner as Interner>::Ty) -> Result<<Self::Interner as Interner>::Ty, E>, ) -> Result<bool, E>

source

fn fetch_eligible_assoc_item( &self, param_env: <Self::Interner as Interner>::ParamEnv, goal_trait_ref: TraitRef<Self::Interner>, trait_assoc_def_id: <Self::Interner as Interner>::DefId, impl_def_id: <Self::Interner as Interner>::DefId, ) -> Result<Option<<Self::Interner as Interner>::DefId>, NoSolution>

source

fn is_transmutable( &self, param_env: <Self::Interner as Interner>::ParamEnv, dst: <Self::Interner as Interner>::Ty, src: <Self::Interner as Interner>::Ty, assume: <Self::Interner as Interner>::Const, ) -> Result<Certainty, NoSolution>

Object Safety§

This trait is not object safe.

Implementors§