Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/lower.rs')
-rw-r--r--crates/hir-ty/src/lower.rs37
1 files changed, 23 insertions, 14 deletions
diff --git a/crates/hir-ty/src/lower.rs b/crates/hir-ty/src/lower.rs
index af73b5ed9a..ff7f034963 100644
--- a/crates/hir-ty/src/lower.rs
+++ b/crates/hir-ty/src/lower.rs
@@ -14,7 +14,7 @@ use std::{
ops::{self, Not as _},
};
-use base_db::{ra_salsa::Cycle, CrateId};
+use base_db::CrateId;
use chalk_ir::{
cast::Cast,
fold::{Shift, TypeFoldable},
@@ -47,6 +47,7 @@ use hir_expand::{name::Name, ExpandResult};
use la_arena::{Arena, ArenaMap};
use rustc_hash::FxHashSet;
use rustc_pattern_analysis::Captures;
+use salsa::Cycle;
use stdx::{impl_from, never};
use syntax::ast;
use triomphe::{Arc, ThinArc};
@@ -57,7 +58,7 @@ use crate::{
intern_const_ref, intern_const_scalar, path_to_const, unknown_const,
unknown_const_as_generic,
},
- db::HirDatabase,
+ db::{HirDatabase, HirDatabaseData},
error_lifetime,
generics::{generics, trait_self_param_idx, Generics},
lower::{
@@ -1111,10 +1112,11 @@ pub(crate) fn generic_predicates_for_param_query(
pub(crate) fn generic_predicates_for_param_recover(
_db: &dyn HirDatabase,
- _cycle: &Cycle,
- _def: &GenericDefId,
- _param_id: &TypeOrConstParamId,
- _assoc_name: &Option<Name>,
+ _cycle: &salsa::Cycle,
+ _: HirDatabaseData,
+ _def: GenericDefId,
+ _param_id: TypeOrConstParamId,
+ _assoc_name: Option<Name>,
) -> GenericPredicates {
GenericPredicates(None)
}
@@ -1271,6 +1273,7 @@ where
);
};
}
+
(
GenericPredicates(predicates.is_empty().not().then(|| predicates.into())),
create_diagnostics(ctx.diagnostics),
@@ -1414,9 +1417,9 @@ pub(crate) fn generic_defaults_with_diagnostics_query(
pub(crate) fn generic_defaults_with_diagnostics_recover(
db: &dyn HirDatabase,
_cycle: &Cycle,
- def: &GenericDefId,
+ def: GenericDefId,
) -> (GenericDefaults, Diagnostics) {
- let generic_params = generics(db.upcast(), *def);
+ let generic_params = generics(db.upcast(), def);
if generic_params.len() == 0 {
return (GenericDefaults(None), None);
}
@@ -1591,6 +1594,7 @@ pub(crate) fn type_for_type_alias_with_diagnostics_query(
.map(|type_ref| ctx.lower_ty(type_ref))
.unwrap_or_else(|| TyKind::Error.intern(Interner))
};
+
(make_binders(db, &generics, inner), create_diagnostics(ctx.diagnostics))
}
@@ -1602,7 +1606,7 @@ pub enum TyDefId {
}
impl_from!(BuiltinType, AdtId(StructId, EnumId, UnionId), TypeAliasId for TyDefId);
-#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
pub enum ValueTyDefId {
FunctionId(FunctionId),
StructId(StructId),
@@ -1638,8 +1642,13 @@ pub(crate) fn ty_query(db: &dyn HirDatabase, def: TyDefId) -> Binders<Ty> {
}
}
-pub(crate) fn ty_recover(db: &dyn HirDatabase, _cycle: &Cycle, def: &TyDefId) -> Binders<Ty> {
- let generics = match *def {
+pub(crate) fn ty_recover(
+ db: &dyn HirDatabase,
+ _cycle: &salsa::Cycle,
+ _: HirDatabaseData,
+ def: TyDefId,
+) -> Binders<Ty> {
+ let generics = match def {
TyDefId::BuiltinType(_) => return Binders::empty(Interner, TyKind::Error.intern(Interner)),
TyDefId::AdtId(it) => generics(db.upcast(), it.into()),
TyDefId::TypeAliasId(it) => generics(db.upcast(), it.into()),
@@ -1703,10 +1712,10 @@ pub(crate) fn const_param_ty_with_diagnostics_query(
pub(crate) fn impl_self_ty_with_diagnostics_recover(
db: &dyn HirDatabase,
- _cycle: &Cycle,
- impl_id: &ImplId,
+ _cycle: &salsa::Cycle,
+ impl_id: ImplId,
) -> (Binders<Ty>, Diagnostics) {
- let generics = generics(db.upcast(), (*impl_id).into());
+ let generics = generics(db.upcast(), (impl_id).into());
(make_binders(db, &generics, TyKind::Error.intern(Interner)), None)
}