Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/drop.rs')
-rw-r--r--crates/hir-ty/src/drop.rs31
1 files changed, 12 insertions, 19 deletions
diff --git a/crates/hir-ty/src/drop.rs b/crates/hir-ty/src/drop.rs
index 351926c86c..9823c854d5 100644
--- a/crates/hir-ty/src/drop.rs
+++ b/crates/hir-ty/src/drop.rs
@@ -1,18 +1,17 @@
//! Utilities for computing drop info about types.
-use base_db::ra_salsa;
use chalk_ir::cast::Cast;
-use hir_def::data::adt::StructFlags;
-use hir_def::lang_item::LangItem;
use hir_def::AdtId;
+use hir_def::lang_item::LangItem;
+use hir_def::signatures::StructFlags;
use stdx::never;
use triomphe::Arc;
use crate::{
- db::HirDatabase, method_resolution::TyFingerprint, AliasTy, Canonical, CanonicalVarKinds,
- InEnvironment, Interner, ProjectionTy, TraitEnvironment, Ty, TyBuilder, TyKind,
+ AliasTy, Canonical, CanonicalVarKinds, ConcreteConst, ConstScalar, ConstValue, InEnvironment,
+ Interner, ProjectionTy, TraitEnvironment, Ty, TyBuilder, TyKind, db::HirDatabase,
+ method_resolution::TyFingerprint,
};
-use crate::{ConcreteConst, ConstScalar, ConstValue};
fn has_destructor(db: &dyn HirDatabase, adt: AdtId) -> bool {
let module = match adt {
@@ -32,8 +31,7 @@ fn has_destructor(db: &dyn HirDatabase, adt: AdtId) -> bool {
},
None => db.trait_impls_in_crate(module.krate()),
};
- let result = impls.for_trait_and_self_ty(drop_trait, TyFingerprint::Adt(adt)).next().is_some();
- result
+ impls.for_trait_and_self_ty(drop_trait, TyFingerprint::Adt(adt)).next().is_some()
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
@@ -55,7 +53,7 @@ pub(crate) fn has_drop_glue(db: &dyn HirDatabase, ty: Ty, env: Arc<TraitEnvironm
}
match adt.0 {
AdtId::StructId(id) => {
- if db.struct_data(id).flags.contains(StructFlags::IS_MANUALLY_DROP) {
+ if db.struct_signature(id).flags.contains(StructFlags::IS_MANUALLY_DROP) {
return DropGlue::None;
}
db.field_types(id.into())
@@ -72,7 +70,7 @@ pub(crate) fn has_drop_glue(db: &dyn HirDatabase, ty: Ty, env: Arc<TraitEnvironm
// Unions cannot have fields with destructors.
AdtId::UnionId(_) => DropGlue::None,
AdtId::EnumId(id) => db
- .enum_data(id)
+ .enum_variants(id)
.variants
.iter()
.map(|&(variant, _)| {
@@ -176,11 +174,7 @@ fn projection_has_drop_glue(
let normalized = db.normalize_projection(projection, env.clone());
match normalized.kind(Interner) {
TyKind::Alias(AliasTy::Projection(_)) | TyKind::AssociatedType(..) => {
- if is_copy(db, ty, env) {
- DropGlue::None
- } else {
- DropGlue::DependOnParams
- }
+ if is_copy(db, ty, env) { DropGlue::None } else { DropGlue::DependOnParams }
}
_ => db.has_drop_glue(normalized, env),
}
@@ -199,11 +193,10 @@ fn is_copy(db: &dyn HirDatabase, ty: Ty, env: Arc<TraitEnvironment>) -> bool {
db.trait_solve(env.krate, env.block, goal).is_some()
}
-pub(crate) fn has_drop_glue_recover(
+pub(crate) fn has_drop_glue_cycle_result(
_db: &dyn HirDatabase,
- _cycle: &ra_salsa::Cycle,
- _ty: &Ty,
- _env: &Arc<TraitEnvironment>,
+ _ty: Ty,
+ _env: Arc<TraitEnvironment>,
) -> DropGlue {
DropGlue::None
}