Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/next_solver/mapping.rs')
-rw-r--r--crates/hir-ty/src/next_solver/mapping.rs25
1 files changed, 22 insertions, 3 deletions
diff --git a/crates/hir-ty/src/next_solver/mapping.rs b/crates/hir-ty/src/next_solver/mapping.rs
index 5fefb04a5e..cad51fd85f 100644
--- a/crates/hir-ty/src/next_solver/mapping.rs
+++ b/crates/hir-ty/src/next_solver/mapping.rs
@@ -18,13 +18,14 @@ use rustc_type_ir::{
shift_vars,
solve::Goal,
};
-use salsa::plumbing::AsId;
+use salsa::plumbing::FromId;
+use salsa::{Id, plumbing::AsId};
use crate::{
ConcreteConst, ConstScalar, ImplTraitId, Interner, MemoryMap,
db::{
- HirDatabase, InternedClosureId, InternedCoroutineId, InternedOpaqueTyId,
- InternedTypeOrConstParamId,
+ HirDatabase, InternedClosureId, InternedCoroutineId, InternedLifetimeParamId,
+ InternedOpaqueTyId, InternedTypeOrConstParamId,
},
from_assoc_type_id, from_chalk_trait_id,
mapping::ToChalk,
@@ -55,6 +56,24 @@ pub fn to_placeholder_idx<T: Clone + std::fmt::Debug>(
}
}
+pub fn bound_var_to_type_or_const_param_idx(
+ db: &dyn HirDatabase,
+ var: rustc_type_ir::BoundVar,
+) -> TypeOrConstParamId {
+ // SAFETY: We cannot really encapsulate this unfortunately, so just hope this is sound.
+ let interned_id = InternedTypeOrConstParamId::from_id(unsafe { Id::from_index(var.as_u32()) });
+ interned_id.loc(db)
+}
+
+pub fn bound_var_to_lifetime_idx(
+ db: &dyn HirDatabase,
+ var: rustc_type_ir::BoundVar,
+) -> LifetimeParamId {
+ // SAFETY: We cannot really encapsulate this unfortunately, so just hope this is sound.
+ let interned_id = InternedLifetimeParamId::from_id(unsafe { Id::from_index(var.as_u32()) });
+ interned_id.loc(db)
+}
+
pub fn convert_binder_to_early_binder<'db, T: rustc_type_ir::TypeFoldable<DbInterner<'db>>>(
interner: DbInterner<'db>,
binder: rustc_type_ir::Binder<DbInterner<'db>, T>,