diff options
Diffstat (limited to 'crates/hir_ty/src/chalk_db.rs')
-rw-r--r-- | crates/hir_ty/src/chalk_db.rs | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/crates/hir_ty/src/chalk_db.rs b/crates/hir_ty/src/chalk_db.rs index 566e4f406..f5b2c5ff0 100644 --- a/crates/hir_ty/src/chalk_db.rs +++ b/crates/hir_ty/src/chalk_db.rs | |||
@@ -1,4 +1,5 @@ | |||
1 | //! Conversion code from/to Chalk. | 1 | //! The implementation of `RustIrDatabase` for Chalk, which provides information |
2 | //! about the code that Chalk needs. | ||
2 | use std::sync::Arc; | 3 | use std::sync::Arc; |
3 | 4 | ||
4 | use log::debug; | 5 | use log::debug; |
@@ -13,7 +14,21 @@ use hir_def::{ | |||
13 | }; | 14 | }; |
14 | use hir_expand::name::name; | 15 | use hir_expand::name::name; |
15 | 16 | ||
16 | use crate::{AliasEq, AliasTy, BoundVar, CallableDefId, DebruijnIndex, FnDefId, Interner, ProjectionTy, Substitution, TraitRef, TraitRefExt, Ty, TyBuilder, TyExt, TyKind, WhereClause, traits::ChalkContext, db::HirDatabase, display::HirDisplay, from_assoc_type_id, make_only_type_binders, mapping::{convert_where_clauses, generic_predicate_to_inline_bound, TypeAliasAsValue}, method_resolution::{TyFingerprint, ALL_FLOAT_FPS, ALL_INT_FPS}, to_assoc_type_id, to_chalk_trait_id, utils::generics}; | 17 | use crate::{ |
18 | db::HirDatabase, | ||
19 | display::HirDisplay, | ||
20 | from_assoc_type_id, make_only_type_binders, | ||
21 | mapping::{ | ||
22 | convert_where_clauses, from_chalk, generic_predicate_to_inline_bound, ToChalk, | ||
23 | TypeAliasAsValue, | ||
24 | }, | ||
25 | method_resolution::{TyFingerprint, ALL_FLOAT_FPS, ALL_INT_FPS}, | ||
26 | to_assoc_type_id, to_chalk_trait_id, | ||
27 | traits::ChalkContext, | ||
28 | utils::generics, | ||
29 | AliasEq, AliasTy, BoundVar, CallableDefId, DebruijnIndex, FnDefId, Interner, ProjectionTy, | ||
30 | Substitution, TraitRef, TraitRefExt, Ty, TyBuilder, TyExt, TyKind, WhereClause, | ||
31 | }; | ||
17 | 32 | ||
18 | pub(crate) type AssociatedTyDatum = chalk_solve::rust_ir::AssociatedTyDatum<Interner>; | 33 | pub(crate) type AssociatedTyDatum = chalk_solve::rust_ir::AssociatedTyDatum<Interner>; |
19 | pub(crate) type TraitDatum = chalk_solve::rust_ir::TraitDatum<Interner>; | 34 | pub(crate) type TraitDatum = chalk_solve::rust_ir::TraitDatum<Interner>; |
@@ -31,19 +46,6 @@ pub(crate) type AssociatedTyValue = chalk_solve::rust_ir::AssociatedTyValue<Inte | |||
31 | pub(crate) type FnDefDatum = chalk_solve::rust_ir::FnDefDatum<Interner>; | 46 | pub(crate) type FnDefDatum = chalk_solve::rust_ir::FnDefDatum<Interner>; |
32 | pub(crate) type Variances = chalk_ir::Variances<Interner>; | 47 | pub(crate) type Variances = chalk_ir::Variances<Interner>; |
33 | 48 | ||
34 | pub(crate) trait ToChalk { | ||
35 | type Chalk; | ||
36 | fn to_chalk(self, db: &dyn HirDatabase) -> Self::Chalk; | ||
37 | fn from_chalk(db: &dyn HirDatabase, chalk: Self::Chalk) -> Self; | ||
38 | } | ||
39 | |||
40 | pub(crate) fn from_chalk<T, ChalkT>(db: &dyn HirDatabase, chalk: ChalkT) -> T | ||
41 | where | ||
42 | T: ToChalk<Chalk = ChalkT>, | ||
43 | { | ||
44 | T::from_chalk(db, chalk) | ||
45 | } | ||
46 | |||
47 | impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> { | 49 | impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> { |
48 | fn associated_ty_data(&self, id: AssocTypeId) -> Arc<AssociatedTyDatum> { | 50 | fn associated_ty_data(&self, id: AssocTypeId) -> Arc<AssociatedTyDatum> { |
49 | self.db.associated_ty_data(id) | 51 | self.db.associated_ty_data(id) |