opaque_type_storage to InferCtxtLike
This commit is contained in:
@@ -213,4 +213,43 @@ impl<'tcx> rustc_type_ir::InferCtxtLike for InferCtxt<'tcx> {
|
|||||||
fn register_ty_outlives(&self, ty: Ty<'tcx>, r: ty::Region<'tcx>, span: Span) {
|
fn register_ty_outlives(&self, ty: Ty<'tcx>, r: ty::Region<'tcx>, span: Span) {
|
||||||
self.register_region_obligation_with_cause(ty, r, &ObligationCause::dummy_with_span(span));
|
self.register_region_obligation_with_cause(ty, r, &ObligationCause::dummy_with_span(span));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn clone_opaque_types_lookup_table(&self) -> Vec<(ty::OpaqueTypeKey<'tcx>, Ty<'tcx>)> {
|
||||||
|
self.inner.borrow_mut().opaque_types().iter_lookup_table().map(|(k, h)| (k, h.ty)).collect()
|
||||||
|
}
|
||||||
|
fn clone_duplicate_opaque_types(&self) -> Vec<(ty::OpaqueTypeKey<'tcx>, Ty<'tcx>)> {
|
||||||
|
self.inner
|
||||||
|
.borrow_mut()
|
||||||
|
.opaque_types()
|
||||||
|
.iter_duplicate_entries()
|
||||||
|
.map(|(k, h)| (k, h.ty))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn register_hidden_type_in_storage(
|
||||||
|
&self,
|
||||||
|
opaque_type_key: ty::OpaqueTypeKey<'tcx>,
|
||||||
|
hidden_ty: Ty<'tcx>,
|
||||||
|
span: Span,
|
||||||
|
) -> Option<Ty<'tcx>> {
|
||||||
|
self.register_hidden_type_in_storage(
|
||||||
|
opaque_type_key,
|
||||||
|
ty::OpaqueHiddenType { span, ty: hidden_ty },
|
||||||
|
)
|
||||||
|
}
|
||||||
|
fn add_duplicate_opaque_type(
|
||||||
|
&self,
|
||||||
|
opaque_type_key: ty::OpaqueTypeKey<'tcx>,
|
||||||
|
hidden_ty: Ty<'tcx>,
|
||||||
|
span: Span,
|
||||||
|
) {
|
||||||
|
self.inner
|
||||||
|
.borrow_mut()
|
||||||
|
.opaque_types()
|
||||||
|
.add_duplicate(opaque_type_key, ty::OpaqueHiddenType { span, ty: hidden_ty })
|
||||||
|
}
|
||||||
|
|
||||||
|
fn reset_opaque_types(&self) {
|
||||||
|
let _ = self.take_opaque_types();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,13 +39,6 @@ pub trait SolverDelegate: Deref<Target = Self::Infcx> + Sized {
|
|||||||
term: <Self::Interner as Interner>::Term,
|
term: <Self::Interner as Interner>::Term,
|
||||||
) -> Option<Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>>;
|
) -> Option<Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>>;
|
||||||
|
|
||||||
fn clone_opaque_types_lookup_table(
|
|
||||||
&self,
|
|
||||||
) -> Vec<(ty::OpaqueTypeKey<Self::Interner>, <Self::Interner as Interner>::Ty)>;
|
|
||||||
fn clone_duplicate_opaque_types(
|
|
||||||
&self,
|
|
||||||
) -> Vec<(ty::OpaqueTypeKey<Self::Interner>, <Self::Interner as Interner>::Ty)>;
|
|
||||||
|
|
||||||
fn make_deduplicated_outlives_constraints(
|
fn make_deduplicated_outlives_constraints(
|
||||||
&self,
|
&self,
|
||||||
) -> Vec<ty::OutlivesPredicate<Self::Interner, <Self::Interner as Interner>::GenericArg>>;
|
) -> Vec<ty::OutlivesPredicate<Self::Interner, <Self::Interner as Interner>::GenericArg>>;
|
||||||
@@ -64,20 +57,6 @@ pub trait SolverDelegate: Deref<Target = Self::Infcx> + Sized {
|
|||||||
span: <Self::Interner as Interner>::Span,
|
span: <Self::Interner as Interner>::Span,
|
||||||
universe_map: impl Fn(ty::UniverseIndex) -> ty::UniverseIndex,
|
universe_map: impl Fn(ty::UniverseIndex) -> ty::UniverseIndex,
|
||||||
) -> <Self::Interner as Interner>::GenericArg;
|
) -> <Self::Interner as Interner>::GenericArg;
|
||||||
|
|
||||||
fn register_hidden_type_in_storage(
|
|
||||||
&self,
|
|
||||||
opaque_type_key: ty::OpaqueTypeKey<Self::Interner>,
|
|
||||||
hidden_ty: <Self::Interner as Interner>::Ty,
|
|
||||||
span: <Self::Interner as Interner>::Span,
|
|
||||||
) -> Option<<Self::Interner as Interner>::Ty>;
|
|
||||||
fn add_duplicate_opaque_type(
|
|
||||||
&self,
|
|
||||||
opaque_type_key: ty::OpaqueTypeKey<Self::Interner>,
|
|
||||||
hidden_ty: <Self::Interner as Interner>::Ty,
|
|
||||||
span: <Self::Interner as Interner>::Span,
|
|
||||||
);
|
|
||||||
|
|
||||||
fn add_item_bounds_for_hidden_type(
|
fn add_item_bounds_for_hidden_type(
|
||||||
&self,
|
&self,
|
||||||
def_id: <Self::Interner as Interner>::DefId,
|
def_id: <Self::Interner as Interner>::DefId,
|
||||||
@@ -86,7 +65,6 @@ pub trait SolverDelegate: Deref<Target = Self::Infcx> + Sized {
|
|||||||
hidden_ty: <Self::Interner as Interner>::Ty,
|
hidden_ty: <Self::Interner as Interner>::Ty,
|
||||||
goals: &mut Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>,
|
goals: &mut Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>,
|
||||||
);
|
);
|
||||||
fn reset_opaque_types(&self);
|
|
||||||
|
|
||||||
fn fetch_eligible_assoc_item(
|
fn fetch_eligible_assoc_item(
|
||||||
&self,
|
&self,
|
||||||
|
|||||||
@@ -104,25 +104,6 @@ impl<'tcx> rustc_next_trait_solver::delegate::SolverDelegate for SolverDelegate<
|
|||||||
.map(|obligations| obligations.into_iter().map(|obligation| obligation.as_goal()).collect())
|
.map(|obligations| obligations.into_iter().map(|obligation| obligation.as_goal()).collect())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn clone_opaque_types_lookup_table(&self) -> Vec<(ty::OpaqueTypeKey<'tcx>, Ty<'tcx>)> {
|
|
||||||
self.0
|
|
||||||
.inner
|
|
||||||
.borrow_mut()
|
|
||||||
.opaque_types()
|
|
||||||
.iter_lookup_table()
|
|
||||||
.map(|(k, h)| (k, h.ty))
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
fn clone_duplicate_opaque_types(&self) -> Vec<(ty::OpaqueTypeKey<'tcx>, Ty<'tcx>)> {
|
|
||||||
self.0
|
|
||||||
.inner
|
|
||||||
.borrow_mut()
|
|
||||||
.opaque_types()
|
|
||||||
.iter_duplicate_entries()
|
|
||||||
.map(|(k, h)| (k, h.ty))
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn make_deduplicated_outlives_constraints(
|
fn make_deduplicated_outlives_constraints(
|
||||||
&self,
|
&self,
|
||||||
) -> Vec<ty::OutlivesPredicate<'tcx, ty::GenericArg<'tcx>>> {
|
) -> Vec<ty::OutlivesPredicate<'tcx, ty::GenericArg<'tcx>>> {
|
||||||
@@ -168,30 +149,6 @@ impl<'tcx> rustc_next_trait_solver::delegate::SolverDelegate for SolverDelegate<
|
|||||||
self.0.instantiate_canonical_var(span, cv_info, universe_map)
|
self.0.instantiate_canonical_var(span, cv_info, universe_map)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_hidden_type_in_storage(
|
|
||||||
&self,
|
|
||||||
opaque_type_key: ty::OpaqueTypeKey<'tcx>,
|
|
||||||
hidden_ty: Ty<'tcx>,
|
|
||||||
span: Span,
|
|
||||||
) -> Option<Ty<'tcx>> {
|
|
||||||
self.0.register_hidden_type_in_storage(
|
|
||||||
opaque_type_key,
|
|
||||||
ty::OpaqueHiddenType { span, ty: hidden_ty },
|
|
||||||
)
|
|
||||||
}
|
|
||||||
fn add_duplicate_opaque_type(
|
|
||||||
&self,
|
|
||||||
opaque_type_key: ty::OpaqueTypeKey<'tcx>,
|
|
||||||
hidden_ty: Ty<'tcx>,
|
|
||||||
span: Span,
|
|
||||||
) {
|
|
||||||
self.0
|
|
||||||
.inner
|
|
||||||
.borrow_mut()
|
|
||||||
.opaque_types()
|
|
||||||
.add_duplicate(opaque_type_key, ty::OpaqueHiddenType { span, ty: hidden_ty })
|
|
||||||
}
|
|
||||||
|
|
||||||
fn add_item_bounds_for_hidden_type(
|
fn add_item_bounds_for_hidden_type(
|
||||||
&self,
|
&self,
|
||||||
def_id: DefId,
|
def_id: DefId,
|
||||||
@@ -203,10 +160,6 @@ impl<'tcx> rustc_next_trait_solver::delegate::SolverDelegate for SolverDelegate<
|
|||||||
self.0.add_item_bounds_for_hidden_type(def_id, args, param_env, hidden_ty, goals);
|
self.0.add_item_bounds_for_hidden_type(def_id, args, param_env, hidden_ty, goals);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reset_opaque_types(&self) {
|
|
||||||
let _ = self.take_opaque_types();
|
|
||||||
}
|
|
||||||
|
|
||||||
fn fetch_eligible_assoc_item(
|
fn fetch_eligible_assoc_item(
|
||||||
&self,
|
&self,
|
||||||
goal_trait_ref: ty::TraitRef<'tcx>,
|
goal_trait_ref: ty::TraitRef<'tcx>,
|
||||||
|
|||||||
@@ -245,4 +245,26 @@ pub trait InferCtxtLike: Sized {
|
|||||||
r: <Self::Interner as Interner>::Region,
|
r: <Self::Interner as Interner>::Region,
|
||||||
span: <Self::Interner as Interner>::Span,
|
span: <Self::Interner as Interner>::Span,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
fn clone_opaque_types_lookup_table(
|
||||||
|
&self,
|
||||||
|
) -> Vec<(ty::OpaqueTypeKey<Self::Interner>, <Self::Interner as Interner>::Ty)>;
|
||||||
|
fn clone_duplicate_opaque_types(
|
||||||
|
&self,
|
||||||
|
) -> Vec<(ty::OpaqueTypeKey<Self::Interner>, <Self::Interner as Interner>::Ty)>;
|
||||||
|
|
||||||
|
fn register_hidden_type_in_storage(
|
||||||
|
&self,
|
||||||
|
opaque_type_key: ty::OpaqueTypeKey<Self::Interner>,
|
||||||
|
hidden_ty: <Self::Interner as Interner>::Ty,
|
||||||
|
span: <Self::Interner as Interner>::Span,
|
||||||
|
) -> Option<<Self::Interner as Interner>::Ty>;
|
||||||
|
fn add_duplicate_opaque_type(
|
||||||
|
&self,
|
||||||
|
opaque_type_key: ty::OpaqueTypeKey<Self::Interner>,
|
||||||
|
hidden_ty: <Self::Interner as Interner>::Ty,
|
||||||
|
span: <Self::Interner as Interner>::Span,
|
||||||
|
);
|
||||||
|
|
||||||
|
fn reset_opaque_types(&self);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user