aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty/src/mapping.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2021-04-09 13:28:04 +0100
committerFlorian Diebold <[email protected]>2021-04-09 13:28:04 +0100
commit2f02977e56a44a5f78576a25547672cd8f910f13 (patch)
tree33e5c6bece12b76d2506bf56783d089040283ad1 /crates/hir_ty/src/mapping.rs
parent9fba7cf827cf332800053eb26f10d67efeee7886 (diff)
More moving stuff around
Diffstat (limited to 'crates/hir_ty/src/mapping.rs')
-rw-r--r--crates/hir_ty/src/mapping.rs71
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
6use chalk_solve::rust_ir; 6use chalk_solve::rust_ir;
7 7
8use base_db::salsa::InternKey; 8use base_db::salsa::{self, InternKey};
9use hir_def::TypeAliasId; 9use hir_def::{ConstParamId, LifetimeParamId, TraitId, TypeAliasId, TypeParamId};
10 10
11use crate::{chalk_db, db::HirDatabase, CallableDefId, FnDefId, Interner, OpaqueTyId}; 11use crate::{
12 chalk_db, db::HirDatabase, AssocTypeId, CallableDefId, ChalkTraitId, FnDefId, ForeignDefId,
13 Interner, OpaqueTyId, PlaceholderIndex,
14};
12 15
13pub(crate) trait ToChalk { 16pub(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
26impl 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
38impl ToChalk for hir_def::ImplId { 29impl 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
106pub fn to_foreign_def_id(id: TypeAliasId) -> ForeignDefId {
107 chalk_ir::ForeignDefId(salsa::InternKey::as_intern_id(&id))
108}
109
110pub fn from_foreign_def_id(id: ForeignDefId) -> TypeAliasId {
111 salsa::InternKey::from_intern_id(id.0)
112}
113
114pub fn to_assoc_type_id(id: TypeAliasId) -> AssocTypeId {
115 chalk_ir::AssocTypeId(salsa::InternKey::as_intern_id(&id))
116}
117
118pub fn from_assoc_type_id(id: AssocTypeId) -> TypeAliasId {
119 salsa::InternKey::from_intern_id(id.0)
120}
121
122pub 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
128pub 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
136pub 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
142pub 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
148pub fn to_chalk_trait_id(id: TraitId) -> ChalkTraitId {
149 chalk_ir::TraitId(salsa::InternKey::as_intern_id(&id))
150}
151
152pub fn from_chalk_trait_id(id: ChalkTraitId) -> TraitId {
153 salsa::InternKey::from_intern_id(id.0)
154}