From de39d221a15c0a146ed8adbdb1616692180948bb Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Fri, 21 Feb 2020 18:24:18 +0100 Subject: Implement unsize coercion using proper trait solving --- crates/ra_hir_ty/src/traits.rs | 2 ++ 1 file changed, 2 insertions(+) (limited to 'crates/ra_hir_ty/src/traits.rs') diff --git a/crates/ra_hir_ty/src/traits.rs b/crates/ra_hir_ty/src/traits.rs index e83449957..c385f0098 100644 --- a/crates/ra_hir_ty/src/traits.rs +++ b/crates/ra_hir_ty/src/traits.rs @@ -343,6 +343,8 @@ pub enum Impl { ImplBlock(ImplId), /// Closure types implement the Fn traits synthetically. ClosureFnTraitImpl(ClosureFnTraitImplData), + /// [T; n]: Unsize<[T]> + UnsizeArray, } /// This exists just for Chalk, because our ImplIds are only unique per module. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -- cgit v1.2.3 From 0dfbbaf03b03618dcb7ba203ddc453533bb8d1b4 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Fri, 21 Feb 2020 19:05:27 +0100 Subject: Implement dyn Trait unsizing as well --- crates/ra_hir_ty/src/traits.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'crates/ra_hir_ty/src/traits.rs') diff --git a/crates/ra_hir_ty/src/traits.rs b/crates/ra_hir_ty/src/traits.rs index c385f0098..2317fcac3 100644 --- a/crates/ra_hir_ty/src/traits.rs +++ b/crates/ra_hir_ty/src/traits.rs @@ -335,6 +335,12 @@ pub struct ClosureFnTraitImplData { fn_trait: FnTrait, } +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct UnsizeToSuperTraitObjectData { + trait_: TraitId, + super_trait: TraitId, +} + /// An impl. Usually this comes from an impl block, but some built-in types get /// synthetic impls. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] @@ -345,6 +351,10 @@ pub enum Impl { ClosureFnTraitImpl(ClosureFnTraitImplData), /// [T; n]: Unsize<[T]> UnsizeArray, + /// T: Unsize where T: Trait + UnsizeToTraitObject(TraitId), + /// dyn Trait: Unsize if Trait: SuperTrait + UnsizeToSuperTraitObject(UnsizeToSuperTraitObjectData), } /// This exists just for Chalk, because our ImplIds are only unique per module. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -- cgit v1.2.3