Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/next_solver/binder.rs')
| -rw-r--r-- | crates/hir-ty/src/next_solver/binder.rs | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/crates/hir-ty/src/next_solver/binder.rs b/crates/hir-ty/src/next_solver/binder.rs index 9585cced6b..351d0c4cda 100644 --- a/crates/hir-ty/src/next_solver/binder.rs +++ b/crates/hir-ty/src/next_solver/binder.rs @@ -71,17 +71,33 @@ impl StoredEarlyBinder<StoredTraitRef> { #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct StoredPolyFnSig { bound_vars: StoredBoundVarKinds, - inputs_and_output: StoredTys, - fn_sig_kind: FnSigKind<'static>, + sig: StoredFnSig, } impl StoredPolyFnSig { #[inline] pub fn new(sig: PolyFnSig<'_>) -> Self { let bound_vars = sig.bound_vars().store(); - let sig = sig.skip_binder(); + Self { bound_vars, sig: StoredFnSig::new(sig.skip_binder()) } + } + + #[inline] + pub fn get(&self) -> PolyFnSig<'_> { + Binder::bind_with_vars(self.sig.get(), self.bound_vars.as_ref()) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, TypeVisitable, TypeFoldable)] +pub struct StoredFnSig { + inputs_and_output: StoredTys, + #[type_visitable(ignore)] + fn_sig_kind: FnSigKind<'static>, +} + +impl StoredFnSig { + #[inline] + pub fn new(sig: FnSig<'_>) -> Self { Self { - bound_vars, inputs_and_output: sig.inputs_and_output.store(), fn_sig_kind: FnSigKind::new( sig.fn_sig_kind.abi(), @@ -92,14 +108,8 @@ impl StoredPolyFnSig { } #[inline] - pub fn get(&self) -> PolyFnSig<'_> { - Binder::bind_with_vars( - FnSig { - inputs_and_output: self.inputs_and_output.as_ref(), - fn_sig_kind: self.fn_sig_kind, - }, - self.bound_vars.as_ref(), - ) + pub fn get(&self) -> FnSig<'_> { + FnSig { inputs_and_output: self.inputs_and_output.as_ref(), fn_sig_kind: self.fn_sig_kind } } } |