Unnamed repository; edit this file 'description' to name the repository.
Auto merge of #17312 - regexident:function-fn-ptr-type, r=Veykril
Add `Function::fn_ptr_type(…)` for obtaining name-erased function type The use case of this function if being able to group functions by their function ptr type. cc `@flodiebold`
bors 2024-06-03
parent 5ac4be8 · parent 7b75f11 · commit 9edc30a
-rw-r--r--crates/hir/src/lib.rs8
1 files changed, 8 insertions, 0 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index 777be711a5..963ad6ca99 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -1884,6 +1884,14 @@ impl Function {
Type::from_value_def(db, self.id)
}
+ pub fn fn_ptr_type(self, db: &dyn HirDatabase) -> Type {
+ let resolver = self.id.resolver(db.upcast());
+ let substs = TyBuilder::placeholder_subst(db, self.id);
+ let callable_sig = db.callable_item_signature(self.id.into()).substitute(Interner, &substs);
+ let ty = TyKind::Function(callable_sig.to_fn_ptr()).intern(Interner);
+ Type::new_with_resolver_inner(db, &resolver, ty)
+ }
+
/// Get this function's return type
pub fn ret_type(self, db: &dyn HirDatabase) -> Type {
let resolver = self.id.resolver(db.upcast());