diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2019-09-26 22:04:20 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2019-09-26 22:04:20 +0100 |
commit | fc218ec0d04577e33db509e956a044293c12ea67 (patch) | |
tree | 2229733948df98f119aee5eca600a50726192c68 /crates/ra_hir/src/ty/infer.rs | |
parent | 1002e470747fe5887a2915689e21d9be3a1ca5d8 (diff) | |
parent | daaf46177e5dc63e20e5a1ec5692e53cc8f7bc34 (diff) |
Merge #1923
1923: Add SubstsBuilder r=flodiebold a=flodiebold
+ further refactoring.
Co-authored-by: Florian Diebold <[email protected]>
Diffstat (limited to 'crates/ra_hir/src/ty/infer.rs')
-rw-r--r-- | crates/ra_hir/src/ty/infer.rs | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/crates/ra_hir/src/ty/infer.rs b/crates/ra_hir/src/ty/infer.rs index db3377357..8e07fc186 100644 --- a/crates/ra_hir/src/ty/infer.rs +++ b/crates/ra_hir/src/ty/infer.rs | |||
@@ -688,14 +688,13 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
688 | }; | 688 | }; |
689 | let expectations_iter = expectations.iter().chain(repeat(&Ty::Unknown)); | 689 | let expectations_iter = expectations.iter().chain(repeat(&Ty::Unknown)); |
690 | 690 | ||
691 | let inner_tys: Substs = args | 691 | let inner_tys = args |
692 | .iter() | 692 | .iter() |
693 | .zip(expectations_iter) | 693 | .zip(expectations_iter) |
694 | .map(|(&pat, ty)| self.infer_pat(pat, ty, default_bm)) | 694 | .map(|(&pat, ty)| self.infer_pat(pat, ty, default_bm)) |
695 | .collect::<Vec<_>>() | 695 | .collect(); |
696 | .into(); | ||
697 | 696 | ||
698 | Ty::apply(TypeCtor::Tuple { cardinality: inner_tys.len() as u16 }, inner_tys) | 697 | Ty::apply(TypeCtor::Tuple { cardinality: args.len() as u16 }, Substs(inner_tys)) |
699 | } | 698 | } |
700 | Pat::Ref { pat, mutability } => { | 699 | Pat::Ref { pat, mutability } => { |
701 | let expectation = match expected.as_reference() { | 700 | let expectation = match expected.as_reference() { |
@@ -1229,7 +1228,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
1229 | ty: pat_ty.clone(), | 1228 | ty: pat_ty.clone(), |
1230 | projection_ty: ProjectionTy { | 1229 | projection_ty: ProjectionTy { |
1231 | associated_ty: into_iter_item_alias, | 1230 | associated_ty: into_iter_item_alias, |
1232 | parameters: vec![iterable_ty].into(), | 1231 | parameters: Substs::single(iterable_ty), |
1233 | }, | 1232 | }, |
1234 | }; | 1233 | }; |
1235 | self.obligations.push(Obligation::Projection(projection)); | 1234 | self.obligations.push(Obligation::Projection(projection)); |
@@ -1262,7 +1261,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
1262 | sig_tys.push(ret_ty.clone()); | 1261 | sig_tys.push(ret_ty.clone()); |
1263 | let sig_ty = Ty::apply( | 1262 | let sig_ty = Ty::apply( |
1264 | TypeCtor::FnPtr { num_args: sig_tys.len() as u16 - 1 }, | 1263 | TypeCtor::FnPtr { num_args: sig_tys.len() as u16 - 1 }, |
1265 | sig_tys.into(), | 1264 | Substs(sig_tys.into()), |
1266 | ); | 1265 | ); |
1267 | let closure_ty = Ty::apply_one( | 1266 | let closure_ty = Ty::apply_one( |
1268 | TypeCtor::Closure { def: self.body.owner(), expr: tgt_expr }, | 1267 | TypeCtor::Closure { def: self.body.owner(), expr: tgt_expr }, |
@@ -1400,7 +1399,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
1400 | ty: ty.clone(), | 1399 | ty: ty.clone(), |
1401 | projection_ty: ProjectionTy { | 1400 | projection_ty: ProjectionTy { |
1402 | associated_ty: future_future_output_alias, | 1401 | associated_ty: future_future_output_alias, |
1403 | parameters: vec![inner_ty].into(), | 1402 | parameters: Substs::single(inner_ty), |
1404 | }, | 1403 | }, |
1405 | }; | 1404 | }; |
1406 | self.obligations.push(Obligation::Projection(projection)); | 1405 | self.obligations.push(Obligation::Projection(projection)); |
@@ -1419,7 +1418,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
1419 | ty: ty.clone(), | 1418 | ty: ty.clone(), |
1420 | projection_ty: ProjectionTy { | 1419 | projection_ty: ProjectionTy { |
1421 | associated_ty: ops_try_ok_alias, | 1420 | associated_ty: ops_try_ok_alias, |
1422 | parameters: vec![inner_ty].into(), | 1421 | parameters: Substs::single(inner_ty), |
1423 | }, | 1422 | }, |
1424 | }; | 1423 | }; |
1425 | self.obligations.push(Obligation::Projection(projection)); | 1424 | self.obligations.push(Obligation::Projection(projection)); |