Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/lib.rs')
-rw-r--r--crates/hir-def/src/lib.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/crates/hir-def/src/lib.rs b/crates/hir-def/src/lib.rs
index dcc18666a5..e7ab2b4d77 100644
--- a/crates/hir-def/src/lib.rs
+++ b/crates/hir-def/src/lib.rs
@@ -344,7 +344,26 @@ pub struct BlockLoc {
/// The containing module.
pub module: ModuleId,
}
-impl_intern!(BlockId, BlockLoc, intern_block, lookup_intern_block);
+#[salsa_macros::tracked(debug)]
+#[derive(PartialOrd, Ord)]
+pub struct BlockIdLt<'db> {
+ pub loc: BlockLoc,
+}
+pub type BlockId = BlockIdLt<'static>;
+impl hir_expand::Intern for BlockLoc {
+ type Database = dyn DefDatabase;
+ type ID = BlockId;
+ fn intern(self, db: &Self::Database) -> Self::ID {
+ unsafe { std::mem::transmute::<BlockIdLt<'_>, BlockId>(BlockIdLt::new(db, self)) }
+ }
+}
+impl hir_expand::Lookup for BlockId {
+ type Database = dyn DefDatabase;
+ type Data = BlockLoc;
+ fn lookup(&self, db: &Self::Database) -> Self::Data {
+ self.loc(db)
+ }
+}
/// A `ModuleId` that is always a crate's root module.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]