diff options
author | Florian Diebold <[email protected]> | 2019-03-21 21:39:31 +0000 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2019-03-21 21:39:31 +0000 |
commit | 1ee779d1f74f48d9f3098001c63108b794dbc0b5 (patch) | |
tree | c5e4c46da389accd0b03b3b285f5057265f65f65 /crates | |
parent | cbb418ebb87309a798ca16408c1dfb09cd638a9b (diff) |
Assert in apply_substs that the number of parameters doesn't change
... and fix a small bug revealed by that.
Diffstat (limited to 'crates')
-rw-r--r-- | crates/ra_hir/src/ty.rs | 7 | ||||
-rw-r--r-- | crates/ra_hir/src/ty/infer.rs | 2 |
2 files changed, 7 insertions, 2 deletions
diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs index 5cd766b85..7d25ade47 100644 --- a/crates/ra_hir/src/ty.rs +++ b/crates/ra_hir/src/ty.rs | |||
@@ -148,6 +148,10 @@ impl Substs { | |||
148 | self.0.iter() | 148 | self.0.iter() |
149 | } | 149 | } |
150 | 150 | ||
151 | pub fn len(&self) -> usize { | ||
152 | self.0.len() | ||
153 | } | ||
154 | |||
151 | pub fn walk_mut(&mut self, f: &mut impl FnMut(&mut Ty)) { | 155 | pub fn walk_mut(&mut self, f: &mut impl FnMut(&mut Ty)) { |
152 | // Without an Arc::make_mut_slice, we can't avoid the clone here: | 156 | // Without an Arc::make_mut_slice, we can't avoid the clone here: |
153 | let mut v: Vec<_> = self.0.iter().cloned().collect(); | 157 | let mut v: Vec<_> = self.0.iter().cloned().collect(); |
@@ -286,7 +290,8 @@ impl Ty { | |||
286 | /// `Option<u32>` afterwards.) | 290 | /// `Option<u32>` afterwards.) |
287 | pub fn apply_substs(self, substs: Substs) -> Ty { | 291 | pub fn apply_substs(self, substs: Substs) -> Ty { |
288 | match self { | 292 | match self { |
289 | Ty::Apply(ApplicationTy { ctor, .. }) => { | 293 | Ty::Apply(ApplicationTy { ctor, parameters: previous_substs }) => { |
294 | assert_eq!(previous_substs.len(), substs.len()); | ||
290 | Ty::Apply(ApplicationTy { ctor, parameters: substs }) | 295 | Ty::Apply(ApplicationTy { ctor, parameters: substs }) |
291 | } | 296 | } |
292 | _ => self, | 297 | _ => self, |
diff --git a/crates/ra_hir/src/ty/infer.rs b/crates/ra_hir/src/ty/infer.rs index be74b9fa6..bf42befbb 100644 --- a/crates/ra_hir/src/ty/infer.rs +++ b/crates/ra_hir/src/ty/infer.rs | |||
@@ -817,7 +817,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
817 | Some(func.generic_params(self.db)), | 817 | Some(func.generic_params(self.db)), |
818 | ) | 818 | ) |
819 | } | 819 | } |
820 | None => (Ty::Unknown, receiver_ty, None), | 820 | None => (receiver_ty, Ty::Unknown, None), |
821 | }; | 821 | }; |
822 | let substs = self.substs_for_method_call(def_generics, generic_args); | 822 | let substs = self.substs_for_method_call(def_generics, generic_args); |
823 | let method_ty = method_ty.apply_substs(substs); | 823 | let method_ty = method_ty.apply_substs(substs); |