aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ids.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2019-05-01 16:06:11 +0100
committerFlorian Diebold <[email protected]>2019-05-04 17:18:30 +0100
commitc8a643f090ed88289c7bc17b48078e39b932c8a4 (patch)
tree8ac8541e91a2d7e0413e4275c2e299a295a84790 /crates/ra_hir/src/ids.rs
parent99492278ac8c8a9caf3981b4406dcac6724a6a93 (diff)
Move Chalk conversion code to its own module
Diffstat (limited to 'crates/ra_hir/src/ids.rs')
-rw-r--r--crates/ra_hir/src/ids.rs50
1 files changed, 4 insertions, 46 deletions
diff --git a/crates/ra_hir/src/ids.rs b/crates/ra_hir/src/ids.rs
index 6875b006d..ff4a81e59 100644
--- a/crates/ra_hir/src/ids.rs
+++ b/crates/ra_hir/src/ids.rs
@@ -323,25 +323,6 @@ impl AstItemDef<ast::TraitDef> for TraitId {
323 } 323 }
324} 324}
325 325
326fn from_chalk<T: salsa::InternKey>(chalk_id: chalk_ir::RawId) -> T {
327 T::from_intern_id(salsa::InternId::from(chalk_id.index))
328}
329fn to_chalk<T: salsa::InternKey>(salsa_id: T) -> chalk_ir::RawId {
330 chalk_ir::RawId { index: salsa_id.as_intern_id().as_u32() }
331}
332
333impl From<chalk_ir::TraitId> for TraitId {
334 fn from(trait_id: chalk_ir::TraitId) -> Self {
335 from_chalk(trait_id.0)
336 }
337}
338
339impl From<TraitId> for chalk_ir::TraitId {
340 fn from(trait_id: TraitId) -> Self {
341 chalk_ir::TraitId(to_chalk(trait_id))
342 }
343}
344
345#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 326#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
346pub struct TypeAliasId(salsa::InternId); 327pub struct TypeAliasId(salsa::InternId);
347impl_intern_key!(TypeAliasId); 328impl_intern_key!(TypeAliasId);
@@ -374,37 +355,14 @@ impl MacroCallId {
374 } 355 }
375} 356}
376 357
377/// This exists just for chalk, because chalk doesn't differentiate between 358/// This exists just for Chalk, because Chalk just has a single `StructId` where
378/// enums and structs. 359/// we have different kinds of ADTs, primitive types and special type
360/// constructors like tuples and function pointers.
379#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 361#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
380pub struct TypeCtorId(salsa::InternId); 362pub struct TypeCtorId(salsa::InternId);
381impl_intern_key!(TypeCtorId); 363impl_intern_key!(TypeCtorId);
382 364
383impl From<chalk_ir::StructId> for TypeCtorId { 365/// This exists just for Chalk, because our ImplIds are only unique per module.
384 fn from(struct_id: chalk_ir::StructId) -> Self {
385 from_chalk(struct_id.0)
386 }
387}
388
389impl From<TypeCtorId> for chalk_ir::StructId {
390 fn from(adt_id: TypeCtorId) -> Self {
391 chalk_ir::StructId(to_chalk(adt_id))
392 }
393}
394
395/// This exists just for chalk, because our ImplIds are only unique per module.
396#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 366#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
397pub struct GlobalImplId(salsa::InternId); 367pub struct GlobalImplId(salsa::InternId);
398impl_intern_key!(GlobalImplId); 368impl_intern_key!(GlobalImplId);
399
400impl From<chalk_ir::ImplId> for GlobalImplId {
401 fn from(impl_id: chalk_ir::ImplId) -> Self {
402 from_chalk(impl_id.0)
403 }
404}
405
406impl From<GlobalImplId> for chalk_ir::ImplId {
407 fn from(impl_id: GlobalImplId) -> Self {
408 chalk_ir::ImplId(to_chalk(impl_id))
409 }
410}