diff options
author | Florian Diebold <[email protected]> | 2019-06-29 16:40:00 +0100 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2019-07-08 20:20:17 +0100 |
commit | 638100dc8bea69cc4093d15f1641ed39a8d27a43 (patch) | |
tree | bb7cf46f4095e9e427f7d4277f28693a3bd671a6 /crates/ra_hir/src/ty/infer | |
parent | 32100022010ecfefd1ea06caa71d1a508d2eb75d (diff) |
Refactor a bit & introduce Environment struct
Diffstat (limited to 'crates/ra_hir/src/ty/infer')
-rw-r--r-- | crates/ra_hir/src/ty/infer/unify.rs | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/crates/ra_hir/src/ty/infer/unify.rs b/crates/ra_hir/src/ty/infer/unify.rs index a24e5eb5c..ad2eefcaf 100644 --- a/crates/ra_hir/src/ty/infer/unify.rs +++ b/crates/ra_hir/src/ty/infer/unify.rs | |||
@@ -2,7 +2,9 @@ | |||
2 | 2 | ||
3 | use super::InferenceContext; | 3 | use super::InferenceContext; |
4 | use crate::db::HirDatabase; | 4 | use crate::db::HirDatabase; |
5 | use crate::ty::{Canonical, InferTy, ProjectionPredicate, ProjectionTy, TraitRef, Ty}; | 5 | use crate::ty::{ |
6 | Canonical, InEnvironment, InferTy, ProjectionPredicate, ProjectionTy, TraitRef, Ty, | ||
7 | }; | ||
6 | 8 | ||
7 | impl<'a, D: HirDatabase> InferenceContext<'a, D> { | 9 | impl<'a, D: HirDatabase> InferenceContext<'a, D> { |
8 | pub(super) fn canonicalizer<'b>(&'b mut self) -> Canonicalizer<'a, 'b, D> | 10 | pub(super) fn canonicalizer<'b>(&'b mut self) -> Canonicalizer<'a, 'b, D> |
@@ -105,14 +107,24 @@ where | |||
105 | ProjectionPredicate { ty, projection_ty } | 107 | ProjectionPredicate { ty, projection_ty } |
106 | } | 108 | } |
107 | 109 | ||
110 | // FIXME: add some point, we need to introduce a `Fold` trait that abstracts | ||
111 | // over all the things that can be canonicalized (like Chalk and rustc have) | ||
112 | |||
108 | pub fn canonicalize_ty(mut self, ty: Ty) -> Canonicalized<Ty> { | 113 | pub fn canonicalize_ty(mut self, ty: Ty) -> Canonicalized<Ty> { |
109 | let result = self.do_canonicalize_ty(ty); | 114 | let result = self.do_canonicalize_ty(ty); |
110 | self.into_canonicalized(result) | 115 | self.into_canonicalized(result) |
111 | } | 116 | } |
112 | 117 | ||
113 | pub fn canonicalize_trait_ref(mut self, trait_ref: TraitRef) -> Canonicalized<TraitRef> { | 118 | pub fn canonicalize_trait_ref( |
114 | let result = self.do_canonicalize_trait_ref(trait_ref); | 119 | mut self, |
115 | self.into_canonicalized(result) | 120 | trait_ref_in_env: InEnvironment<TraitRef>, |
121 | ) -> Canonicalized<InEnvironment<TraitRef>> { | ||
122 | let result = self.do_canonicalize_trait_ref(trait_ref_in_env.value); | ||
123 | // FIXME canonicalize env | ||
124 | self.into_canonicalized(InEnvironment { | ||
125 | value: result, | ||
126 | environment: trait_ref_in_env.environment, | ||
127 | }) | ||
116 | } | 128 | } |
117 | 129 | ||
118 | pub fn canonicalize_projection( | 130 | pub fn canonicalize_projection( |