diff options
author | Florian Diebold <[email protected]> | 2021-04-07 20:12:42 +0100 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2021-04-08 13:08:55 +0100 |
commit | 1332e72d09036e31961bb0ab5a7175d34c2fbf68 (patch) | |
tree | 5066c834fca63df85a772f590967bd968d84713f | |
parent | b24e6f60300300125ff353073a36d1ef7a64e37f (diff) |
Fix TyBuilder methods
-rw-r--r-- | crates/hir_ty/src/builder.rs | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/crates/hir_ty/src/builder.rs b/crates/hir_ty/src/builder.rs index 09512d1ce..9a698898b 100644 --- a/crates/hir_ty/src/builder.rs +++ b/crates/hir_ty/src/builder.rs | |||
@@ -4,6 +4,7 @@ use std::iter; | |||
4 | 4 | ||
5 | use chalk_ir::{ | 5 | use chalk_ir::{ |
6 | cast::{Cast, CastTo, Caster}, | 6 | cast::{Cast, CastTo, Caster}, |
7 | fold::Fold, | ||
7 | interner::HasInterner, | 8 | interner::HasInterner, |
8 | AdtId, BoundVar, DebruijnIndex, Safety, Scalar, | 9 | AdtId, BoundVar, DebruijnIndex, Safety, Scalar, |
9 | }; | 10 | }; |
@@ -32,8 +33,7 @@ impl<D> TyBuilder<D> { | |||
32 | 33 | ||
33 | fn build_internal(self) -> (D, Substitution) { | 34 | fn build_internal(self) -> (D, Substitution) { |
34 | assert_eq!(self.vec.len(), self.param_count); | 35 | assert_eq!(self.vec.len(), self.param_count); |
35 | // FIXME: would be good to have a way to construct a chalk_ir::Substitution from the interned form | 36 | let subst = Substitution::from_iter(&Interner, self.vec); |
36 | let subst = Substitution::intern(self.vec); | ||
37 | (self.data, subst) | 37 | (self.data, subst) |
38 | } | 38 | } |
39 | 39 | ||
@@ -141,7 +141,7 @@ impl TyBuilder<hir_def::AdtId> { | |||
141 | self.vec.push(fallback().cast(&Interner)); | 141 | self.vec.push(fallback().cast(&Interner)); |
142 | } else { | 142 | } else { |
143 | // each default can depend on the previous parameters | 143 | // each default can depend on the previous parameters |
144 | let subst_so_far = Substitution::intern(self.vec.clone()); | 144 | let subst_so_far = Substitution::from_iter(&Interner, self.vec.clone()); |
145 | self.vec | 145 | self.vec |
146 | .push(default_ty.clone().substitute(&Interner, &subst_so_far).cast(&Interner)); | 146 | .push(default_ty.clone().substitute(&Interner, &subst_so_far).cast(&Interner)); |
147 | } | 147 | } |
@@ -196,13 +196,13 @@ impl TyBuilder<TypeAliasId> { | |||
196 | } | 196 | } |
197 | } | 197 | } |
198 | 198 | ||
199 | impl<T: TypeWalk + HasInterner<Interner = Interner>> TyBuilder<Binders<T>> { | 199 | impl<T: HasInterner<Interner = Interner> + Fold<Interner>> TyBuilder<Binders<T>> { |
200 | fn subst_binders(b: Binders<T>) -> Self { | 200 | fn subst_binders(b: Binders<T>) -> Self { |
201 | let param_count = b.binders.len(&Interner); | 201 | let param_count = b.binders.len(&Interner); |
202 | TyBuilder::new(b, param_count) | 202 | TyBuilder::new(b, param_count) |
203 | } | 203 | } |
204 | 204 | ||
205 | pub fn build(self) -> T { | 205 | pub fn build(self) -> <T as Fold<Interner>>::Result { |
206 | let (b, subst) = self.build_internal(); | 206 | let (b, subst) = self.build_internal(); |
207 | b.substitute(&Interner, &subst) | 207 | b.substitute(&Interner, &subst) |
208 | } | 208 | } |