rustc_next_trait_solver::delegate

Trait SolverDelegate

Source
pub trait SolverDelegate: Deref<Target = Self::Infcx> + Sized {
    type Infcx: InferCtxtLike<Interner = Self::Interner>;
    type Interner: Interner;
    type Span: Copy;

Show 16 methods // Required methods fn build_with_canonical<V>( cx: Self::Interner, canonical: &CanonicalQueryInput<Self::Interner, V>, ) -> (Self, V, CanonicalVarValues<Self::Interner>) where V: TypeFoldable<Self::Interner>; fn fresh_var_for_kind_with_span( &self, arg: <Self::Interner as Interner>::GenericArg, span: Self::Span, ) -> <Self::Interner as Interner>::GenericArg; fn leak_check( &self, max_input_universe: UniverseIndex, ) -> Result<(), NoSolution>; fn evaluate_const( &self, param_env: <Self::Interner as Interner>::ParamEnv, uv: UnevaluatedConst<Self::Interner>, ) -> Option<<Self::Interner as Interner>::Const>; 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 fetch_eligible_assoc_item( &self, 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>; // Provided method fn cx(&self) -> Self::Interner { ... }
}

Required Associated Types§

Source

type Infcx: InferCtxtLike<Interner = Self::Interner>

Source

type Interner: Interner

Source

type Span: Copy

Required Methods§

Source

fn build_with_canonical<V>( cx: Self::Interner, canonical: &CanonicalQueryInput<Self::Interner, V>, ) -> (Self, V, CanonicalVarValues<Self::Interner>)
where V: TypeFoldable<Self::Interner>,

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 leak_check( &self, max_input_universe: UniverseIndex, ) -> Result<(), NoSolution>

Source

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

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 fetch_eligible_assoc_item( &self, 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>

Provided Methods§

Source

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

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§