diff options
Diffstat (limited to 'crates/ra_hir/src/ty')
-rw-r--r-- | crates/ra_hir/src/ty/infer/unify.rs | 18 | ||||
-rw-r--r-- | crates/ra_hir/src/ty/lower.rs | 6 |
2 files changed, 9 insertions, 15 deletions
diff --git a/crates/ra_hir/src/ty/infer/unify.rs b/crates/ra_hir/src/ty/infer/unify.rs index 5e86ed260..014c7981f 100644 --- a/crates/ra_hir/src/ty/infer/unify.rs +++ b/crates/ra_hir/src/ty/infer/unify.rs | |||
@@ -6,7 +6,7 @@ use crate::ty::{ | |||
6 | Canonical, InEnvironment, InferTy, ProjectionPredicate, ProjectionTy, Substs, TraitRef, Ty, | 6 | Canonical, InEnvironment, InferTy, ProjectionPredicate, ProjectionTy, Substs, TraitRef, Ty, |
7 | TypeWalk, | 7 | TypeWalk, |
8 | }; | 8 | }; |
9 | use crate::util::make_mut_arc_slice; | 9 | use crate::util::make_mut_slice; |
10 | 10 | ||
11 | impl<'a, D: HirDatabase> InferenceContext<'a, D> { | 11 | impl<'a, D: HirDatabase> InferenceContext<'a, D> { |
12 | pub(super) fn canonicalizer<'b>(&'b mut self) -> Canonicalizer<'a, 'b, D> | 12 | pub(super) fn canonicalizer<'b>(&'b mut self) -> Canonicalizer<'a, 'b, D> |
@@ -76,11 +76,9 @@ where | |||
76 | } | 76 | } |
77 | 77 | ||
78 | fn do_canonicalize_trait_ref(&mut self, mut trait_ref: TraitRef) -> TraitRef { | 78 | fn do_canonicalize_trait_ref(&mut self, mut trait_ref: TraitRef) -> TraitRef { |
79 | make_mut_arc_slice(&mut trait_ref.substs.0, |tys| { | 79 | for ty in make_mut_slice(&mut trait_ref.substs.0) { |
80 | for ty in tys { | 80 | *ty = self.do_canonicalize_ty(ty.clone()); |
81 | *ty = self.do_canonicalize_ty(ty.clone()); | 81 | } |
82 | } | ||
83 | }); | ||
84 | trait_ref | 82 | trait_ref |
85 | } | 83 | } |
86 | 84 | ||
@@ -92,11 +90,9 @@ where | |||
92 | } | 90 | } |
93 | 91 | ||
94 | fn do_canonicalize_projection_ty(&mut self, mut projection_ty: ProjectionTy) -> ProjectionTy { | 92 | fn do_canonicalize_projection_ty(&mut self, mut projection_ty: ProjectionTy) -> ProjectionTy { |
95 | make_mut_arc_slice(&mut projection_ty.parameters.0, |params| { | 93 | for ty in make_mut_slice(&mut projection_ty.parameters.0) { |
96 | for ty in params { | 94 | *ty = self.do_canonicalize_ty(ty.clone()); |
97 | *ty = self.do_canonicalize_ty(ty.clone()); | 95 | } |
98 | } | ||
99 | }); | ||
100 | projection_ty | 96 | projection_ty |
101 | } | 97 | } |
102 | 98 | ||
diff --git a/crates/ra_hir/src/ty/lower.rs b/crates/ra_hir/src/ty/lower.rs index 639518f27..366556134 100644 --- a/crates/ra_hir/src/ty/lower.rs +++ b/crates/ra_hir/src/ty/lower.rs | |||
@@ -22,7 +22,7 @@ use crate::{ | |||
22 | resolve::{Resolver, TypeNs}, | 22 | resolve::{Resolver, TypeNs}, |
23 | ty::Adt, | 23 | ty::Adt, |
24 | type_ref::{TypeBound, TypeRef}, | 24 | type_ref::{TypeBound, TypeRef}, |
25 | util::make_mut_arc_slice, | 25 | util::make_mut_slice, |
26 | BuiltinType, Const, Enum, EnumVariant, Function, ModuleDef, Path, Static, Struct, StructField, | 26 | BuiltinType, Const, Enum, EnumVariant, Function, ModuleDef, Path, Static, Struct, StructField, |
27 | Trait, TypeAlias, Union, | 27 | Trait, TypeAlias, Union, |
28 | }; | 28 | }; |
@@ -391,9 +391,7 @@ impl TraitRef { | |||
391 | ) -> Self { | 391 | ) -> Self { |
392 | let mut substs = TraitRef::substs_from_path(db, resolver, segment, resolved); | 392 | let mut substs = TraitRef::substs_from_path(db, resolver, segment, resolved); |
393 | if let Some(self_ty) = explicit_self_ty { | 393 | if let Some(self_ty) = explicit_self_ty { |
394 | make_mut_arc_slice(&mut substs.0, |substs| { | 394 | make_mut_slice(&mut substs.0)[0] = self_ty; |
395 | substs[0] = self_ty; | ||
396 | }); | ||
397 | } | 395 | } |
398 | TraitRef { trait_: resolved, substs } | 396 | TraitRef { trait_: resolved, substs } |
399 | } | 397 | } |