Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/chalk_db.rs')
-rw-r--r--crates/hir-ty/src/chalk_db.rs51
1 files changed, 25 insertions, 26 deletions
diff --git a/crates/hir-ty/src/chalk_db.rs b/crates/hir-ty/src/chalk_db.rs
index 6aec56b3de..a6528d2c19 100644
--- a/crates/hir-ty/src/chalk_db.rs
+++ b/crates/hir-ty/src/chalk_db.rs
@@ -15,9 +15,9 @@ use base_db::Crate;
use hir_def::{
AssocItemId, BlockId, CallableDefId, GenericDefId, HasModule, ItemContainerId, Lookup,
TypeAliasId, VariantId,
- data::{TraitFlags, adt::StructFlags},
hir::Movability,
lang_item::{LangItem, LangItemTarget},
+ signatures::{ImplFlags, StructFlags, TraitFlags},
};
use crate::{
@@ -68,7 +68,7 @@ impl chalk_solve::RustIrDatabase<Interner> for ChalkContext<'_> {
fn discriminant_type(&self, ty: chalk_ir::Ty<Interner>) -> chalk_ir::Ty<Interner> {
if let chalk_ir::TyKind::Adt(id, _) = ty.kind(Interner) {
if let hir_def::AdtId::EnumId(e) = id.0 {
- let enum_data = self.db.enum_data(e);
+ let enum_data = self.db.enum_signature(e);
let ty = enum_data.repr.unwrap_or_default().discr_type();
return chalk_ir::TyKind::Scalar(match ty {
hir_def::layout::IntegerType::Pointer(is_signed) => match is_signed {
@@ -144,21 +144,21 @@ impl chalk_solve::RustIrDatabase<Interner> for ChalkContext<'_> {
let id_to_chalk = |id: hir_def::ImplId| id.to_chalk(self.db);
let mut result = vec![];
- _ =
- if fps.is_empty() {
- debug!("Unrestricted search for {:?} impls...", trait_);
- self.for_trait_impls(trait_, self_ty_fp, |impls| {
- result.extend(impls.for_trait(trait_).map(id_to_chalk));
- ControlFlow::Continue(())
- })
- } else {
+ if fps.is_empty() {
+ debug!("Unrestricted search for {:?} impls...", trait_);
+ _ = self.for_trait_impls(trait_, self_ty_fp, |impls| {
+ result.extend(impls.for_trait(trait_).map(id_to_chalk));
+ ControlFlow::Continue(())
+ });
+ } else {
+ _ =
self.for_trait_impls(trait_, self_ty_fp, |impls| {
result.extend(fps.iter().flat_map(move |fp| {
impls.for_trait_and_self_ty(trait_, *fp).map(id_to_chalk)
}));
ControlFlow::Continue(())
- })
- };
+ });
+ };
debug!("impls_for_trait returned {} impls", result.len());
result
@@ -426,19 +426,19 @@ impl chalk_solve::RustIrDatabase<Interner> for ChalkContext<'_> {
fn trait_name(&self, trait_id: chalk_ir::TraitId<Interner>) -> String {
let id = from_chalk_trait_id(trait_id);
- self.db.trait_data(id).name.display(self.db.upcast(), self.edition()).to_string()
+ self.db.trait_signature(id).name.display(self.db.upcast(), self.edition()).to_string()
}
fn adt_name(&self, chalk_ir::AdtId(adt_id): AdtId) -> String {
let edition = self.edition();
match adt_id {
hir_def::AdtId::StructId(id) => {
- self.db.struct_data(id).name.display(self.db.upcast(), edition).to_string()
+ self.db.struct_signature(id).name.display(self.db.upcast(), edition).to_string()
}
hir_def::AdtId::EnumId(id) => {
- self.db.enum_data(id).name.display(self.db.upcast(), edition).to_string()
+ self.db.enum_signature(id).name.display(self.db.upcast(), edition).to_string()
}
hir_def::AdtId::UnionId(id) => {
- self.db.union_data(id).name.display(self.db.upcast(), edition).to_string()
+ self.db.union_signature(id).name.display(self.db.upcast(), edition).to_string()
}
}
}
@@ -448,7 +448,7 @@ impl chalk_solve::RustIrDatabase<Interner> for ChalkContext<'_> {
}
fn assoc_type_name(&self, assoc_ty_id: chalk_ir::AssocTypeId<Interner>) -> String {
let id = self.db.associated_ty_data(from_assoc_type_id(assoc_ty_id)).name;
- self.db.type_alias_data(id).name.display(self.db.upcast(), self.edition()).to_string()
+ self.db.type_alias_signature(id).name.display(self.db.upcast(), self.edition()).to_string()
}
fn opaque_type_name(&self, opaque_ty_id: chalk_ir::OpaqueTyId<Interner>) -> String {
format!("Opaque_{:?}", opaque_ty_id.0)
@@ -611,11 +611,11 @@ pub(crate) fn associated_ty_data_query(
};
// Lower bounds -- we could/should maybe move this to a separate query in `lower`
- let type_alias_data = db.type_alias_data(type_alias);
+ let type_alias_data = db.type_alias_signature(type_alias);
let generic_params = generics(db.upcast(), type_alias.into());
let resolver = hir_def::resolver::HasResolver::resolver(type_alias, db.upcast());
let mut ctx =
- crate::TyLoweringContext::new(db, &resolver, &type_alias_data.types_map, type_alias.into())
+ crate::TyLoweringContext::new(db, &resolver, &type_alias_data.store, type_alias.into())
.with_type_param_mode(crate::lower::ParamLoweringMode::Variable);
let trait_subst = TyBuilder::subst_for_def(db, trait_, None)
@@ -669,7 +669,7 @@ pub(crate) fn trait_datum_query(
) -> Arc<TraitDatum> {
debug!("trait_datum {:?}", trait_id);
let trait_ = from_chalk_trait_id(trait_id);
- let trait_data = db.trait_data(trait_);
+ let trait_data = db.trait_signature(trait_);
debug!("trait {:?} = {:?}", trait_id, trait_data.name);
let generic_params = generics(db.upcast(), trait_.into());
let bound_vars = generic_params.bound_vars_subst(db, DebruijnIndex::INNERMOST);
@@ -760,7 +760,7 @@ pub(crate) fn adt_datum_query(
let (fundamental, phantom_data) = match adt_id {
hir_def::AdtId::StructId(s) => {
- let flags = db.struct_data(s).flags;
+ let flags = db.struct_signature(s).flags;
(
flags.contains(StructFlags::IS_FUNDAMENTAL),
flags.contains(StructFlags::IS_PHANTOM_DATA),
@@ -840,7 +840,7 @@ fn impl_def_datum(db: &dyn HirDatabase, krate: Crate, impl_id: hir_def::ImplId)
.expect("invalid impl passed to Chalk")
.into_value_and_skipped_binders()
.0;
- let impl_data = db.impl_data(impl_id);
+ let impl_data = db.impl_signature(impl_id);
let generic_params = generics(db.upcast(), impl_id.into());
let bound_vars = generic_params.bound_vars_subst(db, DebruijnIndex::INNERMOST);
@@ -851,8 +851,7 @@ fn impl_def_datum(db: &dyn HirDatabase, krate: Crate, impl_id: hir_def::ImplId)
rust_ir::ImplType::External
};
let where_clauses = convert_where_clauses(db, impl_id.into(), &bound_vars);
- let negative = impl_data.is_negative;
-
+ let negative = impl_data.flags.contains(ImplFlags::IS_NEGATIVE);
let polarity = if negative { rust_ir::Polarity::Negative } else { rust_ir::Polarity::Positive };
let impl_datum_bound = rust_ir::ImplDatumBound { trait_ref, where_clauses };
@@ -867,7 +866,7 @@ fn impl_def_datum(db: &dyn HirDatabase, krate: Crate, impl_id: hir_def::ImplId)
})
.filter(|&type_alias| {
// don't include associated types that don't exist in the trait
- let name = &db.type_alias_data(type_alias).name;
+ let name = &db.type_alias_signature(type_alias).name;
trait_data.associated_type_by_name(name).is_some()
})
.map(|type_alias| TypeAliasAsValue(type_alias).to_chalk(db))
@@ -896,7 +895,7 @@ fn type_alias_associated_ty_value(
_krate: Crate,
type_alias: TypeAliasId,
) -> Arc<AssociatedTyValue> {
- let type_alias_data = db.type_alias_data(type_alias);
+ let type_alias_data = db.type_alias_signature(type_alias);
let impl_id = match type_alias.lookup(db.upcast()).container {
ItemContainerId::ImplId(it) => it,
_ => panic!("assoc ty value should be in impl"),