aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty/src/chalk_db.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2021-04-09 13:15:26 +0100
committerFlorian Diebold <[email protected]>2021-04-09 13:15:26 +0100
commit5ca481bbdc75bd3a9dbce4c94b014bd0eb8bd9e8 (patch)
treebff5670807fd0cd9ce5d5f6ffaedf0c90ca02c51 /crates/hir_ty/src/chalk_db.rs
parent743faa21e74cc5b627935e2c4c3365807a5c722f (diff)
Move ToChalk -> mapping
Diffstat (limited to 'crates/hir_ty/src/chalk_db.rs')
-rw-r--r--crates/hir_ty/src/chalk_db.rs32
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.
2use std::sync::Arc; 3use std::sync::Arc;
3 4
4use log::debug; 5use log::debug;
@@ -13,7 +14,21 @@ use hir_def::{
13}; 14};
14use hir_expand::name::name; 15use hir_expand::name::name;
15 16
16use 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}; 17use 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
18pub(crate) type AssociatedTyDatum = chalk_solve::rust_ir::AssociatedTyDatum<Interner>; 33pub(crate) type AssociatedTyDatum = chalk_solve::rust_ir::AssociatedTyDatum<Interner>;
19pub(crate) type TraitDatum = chalk_solve::rust_ir::TraitDatum<Interner>; 34pub(crate) type TraitDatum = chalk_solve::rust_ir::TraitDatum<Interner>;
@@ -31,19 +46,6 @@ pub(crate) type AssociatedTyValue = chalk_solve::rust_ir::AssociatedTyValue<Inte
31pub(crate) type FnDefDatum = chalk_solve::rust_ir::FnDefDatum<Interner>; 46pub(crate) type FnDefDatum = chalk_solve::rust_ir::FnDefDatum<Interner>;
32pub(crate) type Variances = chalk_ir::Variances<Interner>; 47pub(crate) type Variances = chalk_ir::Variances<Interner>;
33 48
34pub(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
40pub(crate) fn from_chalk<T, ChalkT>(db: &dyn HirDatabase, chalk: ChalkT) -> T
41where
42 T: ToChalk<Chalk = ChalkT>,
43{
44 T::from_chalk(db, chalk)
45}
46
47impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> { 49impl<'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)