Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/db.rs')
-rw-r--r--crates/hir-ty/src/db.rs93
1 files changed, 60 insertions, 33 deletions
diff --git a/crates/hir-ty/src/db.rs b/crates/hir-ty/src/db.rs
index 71fb3d44fb..4b33c8a84a 100644
--- a/crates/hir-ty/src/db.rs
+++ b/crates/hir-ty/src/db.rs
@@ -16,10 +16,9 @@ use smallvec::SmallVec;
use triomphe::Arc;
use crate::{
- Binders, Const, ImplTraitId, ImplTraits, InferenceResult, Substitution, TraitEnvironment, Ty,
- TyDefId, ValueTyDefId, chalk_db,
+ Binders, ImplTraitId, ImplTraits, InferenceResult, TraitEnvironment, Ty, TyDefId, ValueTyDefId,
+ chalk_db,
consteval::ConstEvalError,
- drop::DropGlue,
dyn_compatibility::DynCompatibilityViolation,
layout::{Layout, LayoutError},
lower::{Diagnostics, GenericDefaults, GenericPredicates},
@@ -32,62 +31,77 @@ use crate::{
pub trait HirDatabase: DefDatabase + std::fmt::Debug {
#[salsa::invoke(crate::infer::infer_query)]
#[salsa::cycle(cycle_result = crate::infer::infer_cycle_result)]
- fn infer(&self, def: DefWithBodyId) -> Arc<InferenceResult>;
+ fn infer<'db>(&'db self, def: DefWithBodyId) -> Arc<InferenceResult<'db>>;
// region:mir
#[salsa::invoke(crate::mir::mir_body_query)]
#[salsa::cycle(cycle_result = crate::mir::mir_body_cycle_result)]
- fn mir_body(&self, def: DefWithBodyId) -> Result<Arc<MirBody>, MirLowerError>;
+ fn mir_body<'db>(
+ &'db self,
+ def: DefWithBodyId,
+ ) -> Result<Arc<MirBody<'db>>, MirLowerError<'db>>;
#[salsa::invoke(crate::mir::mir_body_for_closure_query)]
- fn mir_body_for_closure(&self, def: InternedClosureId) -> Result<Arc<MirBody>, MirLowerError>;
+ fn mir_body_for_closure<'db>(
+ &'db self,
+ def: InternedClosureId,
+ ) -> Result<Arc<MirBody<'db>>, MirLowerError<'db>>;
#[salsa::invoke(crate::mir::monomorphized_mir_body_query)]
#[salsa::cycle(cycle_result = crate::mir::monomorphized_mir_body_cycle_result)]
- fn monomorphized_mir_body(
- &self,
+ fn monomorphized_mir_body<'db>(
+ &'db self,
def: DefWithBodyId,
- subst: Substitution,
- env: Arc<TraitEnvironment<'_>>,
- ) -> Result<Arc<MirBody>, MirLowerError>;
+ subst: crate::next_solver::GenericArgs<'db>,
+ env: Arc<TraitEnvironment<'db>>,
+ ) -> Result<Arc<MirBody<'db>>, MirLowerError<'db>>;
#[salsa::invoke(crate::mir::monomorphized_mir_body_for_closure_query)]
- fn monomorphized_mir_body_for_closure(
- &self,
+ fn monomorphized_mir_body_for_closure<'db>(
+ &'db self,
def: InternedClosureId,
- subst: Substitution,
- env: Arc<TraitEnvironment<'_>>,
- ) -> Result<Arc<MirBody>, MirLowerError>;
+ subst: crate::next_solver::GenericArgs<'db>,
+ env: Arc<TraitEnvironment<'db>>,
+ ) -> Result<Arc<MirBody<'db>>, MirLowerError<'db>>;
#[salsa::invoke(crate::mir::borrowck_query)]
#[salsa::lru(2024)]
- fn borrowck(&self, def: DefWithBodyId) -> Result<Arc<[BorrowckResult]>, MirLowerError>;
+ fn borrowck<'db>(
+ &'db self,
+ def: DefWithBodyId,
+ ) -> Result<Arc<[BorrowckResult<'db>]>, MirLowerError<'db>>;
#[salsa::invoke(crate::consteval::const_eval_query)]
#[salsa::cycle(cycle_result = crate::consteval::const_eval_cycle_result)]
- fn const_eval(
- &self,
+ fn const_eval<'db>(
+ &'db self,
def: GeneralConstId,
- subst: Substitution,
- trait_env: Option<Arc<TraitEnvironment<'_>>>,
- ) -> Result<Const, ConstEvalError>;
+ subst: crate::next_solver::GenericArgs<'db>,
+ trait_env: Option<Arc<TraitEnvironment<'db>>>,
+ ) -> Result<crate::next_solver::Const<'db>, ConstEvalError<'db>>;
#[salsa::invoke(crate::consteval::const_eval_static_query)]
#[salsa::cycle(cycle_result = crate::consteval::const_eval_static_cycle_result)]
- fn const_eval_static(&self, def: StaticId) -> Result<Const, ConstEvalError>;
+ fn const_eval_static<'db>(
+ &'db self,
+ def: StaticId,
+ ) -> Result<crate::next_solver::Const<'db>, ConstEvalError<'db>>;
#[salsa::invoke(crate::consteval::const_eval_discriminant_variant)]
#[salsa::cycle(cycle_result = crate::consteval::const_eval_discriminant_cycle_result)]
- fn const_eval_discriminant(&self, def: EnumVariantId) -> Result<i128, ConstEvalError>;
+ fn const_eval_discriminant<'db>(
+ &'db self,
+ def: EnumVariantId,
+ ) -> Result<i128, ConstEvalError<'db>>;
#[salsa::invoke(crate::method_resolution::lookup_impl_method_query)]
- fn lookup_impl_method(
- &self,
- env: Arc<TraitEnvironment<'_>>,
+ fn lookup_impl_method<'db>(
+ &'db self,
+ env: Arc<TraitEnvironment<'db>>,
func: FunctionId,
- fn_subst: Substitution,
- ) -> (FunctionId, Substitution);
+ fn_subst: crate::next_solver::GenericArgs<'db>,
+ ) -> (FunctionId, crate::next_solver::GenericArgs<'db>);
// endregion:mir
@@ -325,10 +339,6 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
goal: crate::Canonical<crate::InEnvironment<crate::Goal>>,
) -> NextTraitSolveResult;
- #[salsa::invoke(crate::drop::has_drop_glue)]
- #[salsa::cycle(cycle_result = crate::drop::has_drop_glue_cycle_result)]
- fn has_drop_glue(&self, ty: Ty, env: Arc<TraitEnvironment<'_>>) -> DropGlue;
-
// next trait solver
#[salsa::invoke(crate::lower_nextsolver::const_param_ty_query)]
@@ -370,6 +380,23 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
&'db self,
def: GenericDefId,
) -> crate::lower_nextsolver::GenericPredicates<'db>;
+
+ #[salsa::invoke(crate::lower_nextsolver::generic_defaults_with_diagnostics_query)]
+ #[salsa::cycle(cycle_result = crate::lower_nextsolver::generic_defaults_with_diagnostics_cycle_result)]
+ fn generic_defaults_ns_with_diagnostics<'db>(
+ &'db self,
+ def: GenericDefId,
+ ) -> (crate::lower_nextsolver::GenericDefaults<'db>, Diagnostics);
+
+ /// This returns an empty list if no parameter has default.
+ ///
+ /// The binders of the returned defaults are only up to (not including) this parameter.
+ #[salsa::invoke(crate::lower_nextsolver::generic_defaults_query)]
+ #[salsa::transparent]
+ fn generic_defaults_ns<'db>(
+ &'db self,
+ def: GenericDefId,
+ ) -> crate::lower_nextsolver::GenericDefaults<'db>;
}
#[test]