Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir_ty/src/builder.rs')
| -rw-r--r-- | crates/hir_ty/src/builder.rs | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/crates/hir_ty/src/builder.rs b/crates/hir_ty/src/builder.rs index c507c42f5b..5c77c0cdf8 100644 --- a/crates/hir_ty/src/builder.rs +++ b/crates/hir_ty/src/builder.rs @@ -15,10 +15,10 @@ use hir_def::{ use smallvec::SmallVec; use crate::{ - consteval::unknown_const_as_generic, db::HirDatabase, primitive, to_assoc_type_id, - to_chalk_trait_id, utils::generics, Binders, CallableSig, ConstData, ConstValue, GenericArg, - GenericArgData, Interner, ProjectionTy, Substitution, TraitRef, Ty, TyDefId, TyExt, TyKind, - ValueTyDefId, + consteval::unknown_const_as_generic, db::HirDatabase, infer::unify::InferenceTable, primitive, + to_assoc_type_id, to_chalk_trait_id, utils::generics, Binders, CallableSig, ConstData, + ConstValue, GenericArg, GenericArgData, Interner, ProjectionTy, Substitution, TraitRef, Ty, + TyDefId, TyExt, TyKind, ValueTyDefId, }; #[derive(Debug, Clone, PartialEq, Eq)] @@ -111,6 +111,15 @@ impl<D> TyBuilder<D> { this } + pub(crate) fn fill_with_inference_vars(self, table: &mut InferenceTable) -> Self { + self.fill(|x| match x { + ParamKind::Type => GenericArgData::Ty(table.new_type_var()).intern(Interner), + ParamKind::Const(ty) => { + GenericArgData::Const(table.new_const_var(ty.clone())).intern(Interner) + } + }) + } + pub fn fill(mut self, filler: impl FnMut(&ParamKind) -> GenericArg) -> Self { self.vec.extend(self.param_kinds.iter().skip(self.vec.len()).map(filler)); assert_eq!(self.remaining(), 0); |