diff options
Diffstat (limited to 'crates/hir_ty/src/mapping.rs')
-rw-r--r-- | crates/hir_ty/src/mapping.rs | 71 |
1 files changed, 56 insertions, 15 deletions
diff --git a/crates/hir_ty/src/mapping.rs b/crates/hir_ty/src/mapping.rs index 37c935194..5e86fafe5 100644 --- a/crates/hir_ty/src/mapping.rs +++ b/crates/hir_ty/src/mapping.rs | |||
@@ -5,10 +5,13 @@ | |||
5 | 5 | ||
6 | use chalk_solve::rust_ir; | 6 | use chalk_solve::rust_ir; |
7 | 7 | ||
8 | use base_db::salsa::InternKey; | 8 | use base_db::salsa::{self, InternKey}; |
9 | use hir_def::TypeAliasId; | 9 | use hir_def::{ConstParamId, LifetimeParamId, TraitId, TypeAliasId, TypeParamId}; |
10 | 10 | ||
11 | use crate::{chalk_db, db::HirDatabase, CallableDefId, FnDefId, Interner, OpaqueTyId}; | 11 | use crate::{ |
12 | chalk_db, db::HirDatabase, AssocTypeId, CallableDefId, ChalkTraitId, FnDefId, ForeignDefId, | ||
13 | Interner, OpaqueTyId, PlaceholderIndex, | ||
14 | }; | ||
12 | 15 | ||
13 | pub(crate) trait ToChalk { | 16 | pub(crate) trait ToChalk { |
14 | type Chalk; | 17 | type Chalk; |
@@ -23,18 +26,6 @@ where | |||
23 | T::from_chalk(db, chalk) | 26 | T::from_chalk(db, chalk) |
24 | } | 27 | } |
25 | 28 | ||
26 | impl ToChalk for hir_def::TraitId { | ||
27 | type Chalk = chalk_db::TraitId; | ||
28 | |||
29 | fn to_chalk(self, _db: &dyn HirDatabase) -> chalk_db::TraitId { | ||
30 | chalk_ir::TraitId(self.as_intern_id()) | ||
31 | } | ||
32 | |||
33 | fn from_chalk(_db: &dyn HirDatabase, trait_id: chalk_db::TraitId) -> hir_def::TraitId { | ||
34 | InternKey::from_intern_id(trait_id.0) | ||
35 | } | ||
36 | } | ||
37 | |||
38 | impl ToChalk for hir_def::ImplId { | 29 | impl ToChalk for hir_def::ImplId { |
39 | type Chalk = chalk_db::ImplId; | 30 | type Chalk = chalk_db::ImplId; |
40 | 31 | ||
@@ -111,3 +102,53 @@ impl From<crate::db::InternedClosureId> for chalk_ir::ClosureId<Interner> { | |||
111 | chalk_ir::ClosureId(id.as_intern_id()) | 102 | chalk_ir::ClosureId(id.as_intern_id()) |
112 | } | 103 | } |
113 | } | 104 | } |
105 | |||
106 | pub fn to_foreign_def_id(id: TypeAliasId) -> ForeignDefId { | ||
107 | chalk_ir::ForeignDefId(salsa::InternKey::as_intern_id(&id)) | ||
108 | } | ||
109 | |||
110 | pub fn from_foreign_def_id(id: ForeignDefId) -> TypeAliasId { | ||
111 | salsa::InternKey::from_intern_id(id.0) | ||
112 | } | ||
113 | |||
114 | pub fn to_assoc_type_id(id: TypeAliasId) -> AssocTypeId { | ||
115 | chalk_ir::AssocTypeId(salsa::InternKey::as_intern_id(&id)) | ||
116 | } | ||
117 | |||
118 | pub fn from_assoc_type_id(id: AssocTypeId) -> TypeAliasId { | ||
119 | salsa::InternKey::from_intern_id(id.0) | ||
120 | } | ||
121 | |||
122 | pub fn from_placeholder_idx(db: &dyn HirDatabase, idx: PlaceholderIndex) -> TypeParamId { | ||
123 | assert_eq!(idx.ui, chalk_ir::UniverseIndex::ROOT); | ||
124 | let interned_id = salsa::InternKey::from_intern_id(salsa::InternId::from(idx.idx)); | ||
125 | db.lookup_intern_type_param_id(interned_id) | ||
126 | } | ||
127 | |||
128 | pub fn to_placeholder_idx(db: &dyn HirDatabase, id: TypeParamId) -> PlaceholderIndex { | ||
129 | let interned_id = db.intern_type_param_id(id); | ||
130 | PlaceholderIndex { | ||
131 | ui: chalk_ir::UniverseIndex::ROOT, | ||
132 | idx: salsa::InternKey::as_intern_id(&interned_id).as_usize(), | ||
133 | } | ||
134 | } | ||
135 | |||
136 | pub fn lt_from_placeholder_idx(db: &dyn HirDatabase, idx: PlaceholderIndex) -> LifetimeParamId { | ||
137 | assert_eq!(idx.ui, chalk_ir::UniverseIndex::ROOT); | ||
138 | let interned_id = salsa::InternKey::from_intern_id(salsa::InternId::from(idx.idx)); | ||
139 | db.lookup_intern_lifetime_param_id(interned_id) | ||
140 | } | ||
141 | |||
142 | pub fn const_from_placeholder_idx(db: &dyn HirDatabase, idx: PlaceholderIndex) -> ConstParamId { | ||
143 | assert_eq!(idx.ui, chalk_ir::UniverseIndex::ROOT); | ||
144 | let interned_id = salsa::InternKey::from_intern_id(salsa::InternId::from(idx.idx)); | ||
145 | db.lookup_intern_const_param_id(interned_id) | ||
146 | } | ||
147 | |||
148 | pub fn to_chalk_trait_id(id: TraitId) -> ChalkTraitId { | ||
149 | chalk_ir::TraitId(salsa::InternKey::as_intern_id(&id)) | ||
150 | } | ||
151 | |||
152 | pub fn from_chalk_trait_id(id: ChalkTraitId) -> TraitId { | ||
153 | salsa::InternKey::from_intern_id(id.0) | ||
154 | } | ||