aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty/src/traits
diff options
context:
space:
mode:
Diffstat (limited to 'crates/hir_ty/src/traits')
-rw-r--r--crates/hir_ty/src/traits/chalk/mapping.rs19
1 files changed, 9 insertions, 10 deletions
diff --git a/crates/hir_ty/src/traits/chalk/mapping.rs b/crates/hir_ty/src/traits/chalk/mapping.rs
index 68effbbf3..1a6fca611 100644
--- a/crates/hir_ty/src/traits/chalk/mapping.rs
+++ b/crates/hir_ty/src/traits/chalk/mapping.rs
@@ -14,7 +14,7 @@ use crate::{
14 from_assoc_type_id, 14 from_assoc_type_id,
15 primitive::UintTy, 15 primitive::UintTy,
16 traits::{Canonical, Obligation}, 16 traits::{Canonical, Obligation},
17 AliasTy, CallableDefId, FnPointer, FnSig, GenericPredicate, InEnvironment, OpaqueTy, 17 AliasTy, CallableDefId, FnPointer, GenericPredicate, InEnvironment, OpaqueTy,
18 ProjectionPredicate, ProjectionTy, Scalar, Substs, TraitRef, Ty, 18 ProjectionPredicate, ProjectionTy, Scalar, Substs, TraitRef, Ty,
19}; 19};
20 20
@@ -27,11 +27,11 @@ impl ToChalk for Ty {
27 match self.0 { 27 match self.0 {
28 TyKind::Ref(m, parameters) => ref_to_chalk(db, m, parameters), 28 TyKind::Ref(m, parameters) => ref_to_chalk(db, m, parameters),
29 TyKind::Array(parameters) => array_to_chalk(db, parameters), 29 TyKind::Array(parameters) => array_to_chalk(db, parameters),
30 TyKind::Function(FnPointer { sig: FnSig { variadic }, substs, .. }) => { 30 TyKind::Function(FnPointer { sig, substs, .. }) => {
31 let substitution = chalk_ir::FnSubst(substs.to_chalk(db).shifted_in(&Interner)); 31 let substitution = chalk_ir::FnSubst(substs.to_chalk(db).shifted_in(&Interner));
32 chalk_ir::TyKind::Function(chalk_ir::FnPointer { 32 chalk_ir::TyKind::Function(chalk_ir::FnPointer {
33 num_binders: 0, 33 num_binders: 0,
34 sig: chalk_ir::FnSig { abi: (), safety: chalk_ir::Safety::Safe, variadic }, 34 sig,
35 substitution, 35 substitution,
36 }) 36 })
37 .intern(&Interner) 37 .intern(&Interner)
@@ -121,7 +121,10 @@ impl ToChalk for Ty {
121 chalk_ir::TyKind::Alias(chalk_ir::AliasTy::Projection(proj)) => { 121 chalk_ir::TyKind::Alias(chalk_ir::AliasTy::Projection(proj)) => {
122 let associated_ty = proj.associated_ty_id; 122 let associated_ty = proj.associated_ty_id;
123 let parameters = from_chalk(db, proj.substitution); 123 let parameters = from_chalk(db, proj.substitution);
124 TyKind::Alias(AliasTy::Projection(ProjectionTy { associated_ty_id: associated_ty, substitution: parameters })) 124 TyKind::Alias(AliasTy::Projection(ProjectionTy {
125 associated_ty_id: associated_ty,
126 substitution: parameters,
127 }))
125 } 128 }
126 chalk_ir::TyKind::Alias(chalk_ir::AliasTy::Opaque(opaque_ty)) => { 129 chalk_ir::TyKind::Alias(chalk_ir::AliasTy::Opaque(opaque_ty)) => {
127 let opaque_ty_id = opaque_ty.opaque_ty_id; 130 let opaque_ty_id = opaque_ty.opaque_ty_id;
@@ -130,7 +133,7 @@ impl ToChalk for Ty {
130 } 133 }
131 chalk_ir::TyKind::Function(chalk_ir::FnPointer { 134 chalk_ir::TyKind::Function(chalk_ir::FnPointer {
132 num_binders, 135 num_binders,
133 sig: chalk_ir::FnSig { variadic, .. }, 136 sig,
134 substitution, 137 substitution,
135 .. 138 ..
136 }) => { 139 }) => {
@@ -139,11 +142,7 @@ impl ToChalk for Ty {
139 db, 142 db,
140 substitution.0.shifted_out(&Interner).expect("fn ptr should have no binders"), 143 substitution.0.shifted_out(&Interner).expect("fn ptr should have no binders"),
141 ); 144 );
142 TyKind::Function(FnPointer { 145 TyKind::Function(FnPointer { num_args: (substs.len() - 1), sig, substs })
143 num_args: (substs.len() - 1),
144 sig: FnSig { variadic },
145 substs,
146 })
147 } 146 }
148 chalk_ir::TyKind::BoundVar(idx) => TyKind::BoundVar(idx), 147 chalk_ir::TyKind::BoundVar(idx) => TyKind::BoundVar(idx),
149 chalk_ir::TyKind::InferenceVar(_iv, _kind) => TyKind::Unknown, 148 chalk_ir::TyKind::InferenceVar(_iv, _kind) => TyKind::Unknown,