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.rs | 31 |
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 } |