diff options
Diffstat (limited to 'crates/hir_ty/src/traits.rs')
-rw-r--r-- | crates/hir_ty/src/traits.rs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/crates/hir_ty/src/traits.rs b/crates/hir_ty/src/traits.rs index 27f350f70..edfafdff8 100644 --- a/crates/hir_ty/src/traits.rs +++ b/crates/hir_ty/src/traits.rs | |||
@@ -10,7 +10,9 @@ use stdx::panic_context; | |||
10 | 10 | ||
11 | use crate::{db::HirDatabase, DebruijnIndex, Substs}; | 11 | use crate::{db::HirDatabase, DebruijnIndex, Substs}; |
12 | 12 | ||
13 | use super::{Canonical, GenericPredicate, HirDisplay, ProjectionTy, TraitRef, Ty, TypeWalk}; | 13 | use super::{ |
14 | Canonical, GenericPredicate, HirDisplay, ProjectionTy, TraitRef, Ty, TyKind, TypeWalk, | ||
15 | }; | ||
14 | 16 | ||
15 | use self::chalk::{from_chalk, Interner, ToChalk}; | 17 | use self::chalk::{from_chalk, Interner, ToChalk}; |
16 | 18 | ||
@@ -61,6 +63,15 @@ impl TraitEnvironment { | |||
61 | } | 63 | } |
62 | } | 64 | } |
63 | 65 | ||
66 | impl Default for TraitEnvironment { | ||
67 | fn default() -> Self { | ||
68 | TraitEnvironment { | ||
69 | traits_from_clauses: Vec::new(), | ||
70 | env: chalk_ir::Environment::new(&Interner), | ||
71 | } | ||
72 | } | ||
73 | } | ||
74 | |||
64 | /// Something (usually a goal), along with an environment. | 75 | /// Something (usually a goal), along with an environment. |
65 | #[derive(Clone, Debug, PartialEq, Eq, Hash)] | 76 | #[derive(Clone, Debug, PartialEq, Eq, Hash)] |
66 | pub struct InEnvironment<T> { | 77 | pub struct InEnvironment<T> { |
@@ -132,7 +143,7 @@ pub(crate) fn trait_solve_query( | |||
132 | log::info!("trait_solve_query({})", goal.value.value.display(db)); | 143 | log::info!("trait_solve_query({})", goal.value.value.display(db)); |
133 | 144 | ||
134 | if let Obligation::Projection(pred) = &goal.value.value { | 145 | if let Obligation::Projection(pred) = &goal.value.value { |
135 | if let Ty::BoundVar(_) = &pred.projection_ty.parameters[0] { | 146 | if let TyKind::BoundVar(_) = &pred.projection_ty.parameters[0].interned(&Interner) { |
136 | // Hack: don't ask Chalk to normalize with an unknown self type, it'll say that's impossible | 147 | // Hack: don't ask Chalk to normalize with an unknown self type, it'll say that's impossible |
137 | return Some(Solution::Ambig(Guidance::Unknown)); | 148 | return Some(Solution::Ambig(Guidance::Unknown)); |
138 | } | 149 | } |