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§
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) -> Twhere
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>,
) -> Vwhere
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 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>
Object Safety§
This trait is not object safe.