From 7ec3b66f7a3ac0a33cf435bc3596fdac542fc52a Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Sat, 20 Mar 2021 11:23:59 +0100 Subject: Turn Obligation into something similar to chalk_ir::DomainGoal This includes starting to make use of Chalk's `Cast` trait. --- crates/hir_ty/src/autoderef.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'crates/hir_ty/src/autoderef.rs') diff --git a/crates/hir_ty/src/autoderef.rs b/crates/hir_ty/src/autoderef.rs index 33b966026..23ab042c1 100644 --- a/crates/hir_ty/src/autoderef.rs +++ b/crates/hir_ty/src/autoderef.rs @@ -6,6 +6,7 @@ use std::iter::successors; use base_db::CrateId; +use chalk_ir::cast::Cast; use hir_def::lang_item::LangItemTarget; use hir_expand::name::name; use log::{info, warn}; @@ -15,8 +16,8 @@ use crate::{ to_assoc_type_id, to_chalk_trait_id, traits::{InEnvironment, Solution}, utils::generics, - AliasEq, AliasTy, BoundVar, Canonical, DebruijnIndex, Interner, Obligation, ProjectionTy, - Substitution, TraitRef, Ty, TyKind, + AliasEq, AliasTy, BoundVar, Canonical, DebruijnIndex, Interner, ProjectionTy, Substitution, + TraitRef, Ty, TyKind, }; const AUTODEREF_RECURSION_LIMIT: usize = 10; @@ -74,7 +75,7 @@ fn deref_by_trait( let implements_goal = Canonical { kinds: ty.value.kinds.clone(), value: InEnvironment { - value: Obligation::Trait(trait_ref), + value: trait_ref.cast(&Interner), environment: ty.environment.clone(), }, }; @@ -92,7 +93,7 @@ fn deref_by_trait( .intern(&Interner), }; - let obligation = super::Obligation::AliasEq(projection); + let obligation = projection.cast(&Interner); let in_env = InEnvironment { value: obligation, environment: ty.environment }; -- cgit v1.2.3