diff options
author | Florian Diebold <[email protected]> | 2020-07-11 14:22:46 +0100 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2020-07-12 18:58:34 +0100 |
commit | 209c492432c15b017f99dba06d5937389c1f9546 (patch) | |
tree | 45d30a421ff534c72ae850cd4ff108b74ef81f9d /crates/ra_hir_ty/src/traits/chalk.rs | |
parent | ab1ad19f552e1b11055ed60f87cc420871d902eb (diff) |
Upgrade Chalk
Diffstat (limited to 'crates/ra_hir_ty/src/traits/chalk.rs')
-rw-r--r-- | crates/ra_hir_ty/src/traits/chalk.rs | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/crates/ra_hir_ty/src/traits/chalk.rs b/crates/ra_hir_ty/src/traits/chalk.rs index c97b81d57..a9b39474a 100644 --- a/crates/ra_hir_ty/src/traits/chalk.rs +++ b/crates/ra_hir_ty/src/traits/chalk.rs | |||
@@ -3,7 +3,7 @@ use std::sync::Arc; | |||
3 | 3 | ||
4 | use log::debug; | 4 | use log::debug; |
5 | 5 | ||
6 | use chalk_ir::{fold::shift::Shift, GenericArg, TypeName}; | 6 | use chalk_ir::{fold::shift::Shift, GenericArg, TypeName, CanonicalVarKinds}; |
7 | use chalk_solve::rust_ir::{self, OpaqueTyDatumBound, WellKnownTrait}; | 7 | use chalk_solve::rust_ir::{self, OpaqueTyDatumBound, WellKnownTrait}; |
8 | 8 | ||
9 | use hir_def::{ | 9 | use hir_def::{ |
@@ -66,10 +66,13 @@ impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> { | |||
66 | &self, | 66 | &self, |
67 | trait_id: TraitId, | 67 | trait_id: TraitId, |
68 | parameters: &[GenericArg<Interner>], | 68 | parameters: &[GenericArg<Interner>], |
69 | _binders: &CanonicalVarKinds<Interner>, | ||
69 | ) -> Vec<ImplId> { | 70 | ) -> Vec<ImplId> { |
70 | debug!("impls_for_trait {:?}", trait_id); | 71 | debug!("impls_for_trait {:?}", trait_id); |
71 | let trait_: hir_def::TraitId = from_chalk(self.db, trait_id); | 72 | let trait_: hir_def::TraitId = from_chalk(self.db, trait_id); |
72 | 73 | ||
74 | // FIXME use binders to look for int/float impls when necessary | ||
75 | |||
73 | let ty: Ty = from_chalk(self.db, parameters[0].assert_ty_ref(&Interner).clone()); | 76 | let ty: Ty = from_chalk(self.db, parameters[0].assert_ty_ref(&Interner).clone()); |
74 | 77 | ||
75 | let self_ty_fp = TyFingerprint::for_impl(&ty); | 78 | let self_ty_fp = TyFingerprint::for_impl(&ty); |
@@ -219,6 +222,22 @@ impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> { | |||
219 | // FIXME: implement closure support | 222 | // FIXME: implement closure support |
220 | unimplemented!() | 223 | unimplemented!() |
221 | } | 224 | } |
225 | |||
226 | fn trait_name(&self, _trait_id: chalk_ir::TraitId<Interner>) -> String { | ||
227 | unimplemented!() | ||
228 | } | ||
229 | fn adt_name(&self, _struct_id: chalk_ir::AdtId<Interner>) -> String { | ||
230 | unimplemented!() | ||
231 | } | ||
232 | fn assoc_type_name(&self, _assoc_ty_id: chalk_ir::AssocTypeId<Interner>) -> String { | ||
233 | unimplemented!() | ||
234 | } | ||
235 | fn opaque_type_name(&self, _opaque_ty_id: chalk_ir::OpaqueTyId<Interner>) -> String { | ||
236 | unimplemented!() | ||
237 | } | ||
238 | fn fn_def_name(&self, _fn_def_id: chalk_ir::FnDefId<Interner>) -> String { | ||
239 | unimplemented!() | ||
240 | } | ||
222 | } | 241 | } |
223 | 242 | ||
224 | pub(crate) fn program_clauses_for_chalk_env_query( | 243 | pub(crate) fn program_clauses_for_chalk_env_query( |
@@ -354,12 +373,21 @@ pub(crate) fn struct_datum_query( | |||
354 | fundamental: false, | 373 | fundamental: false, |
355 | phantom_data: false, | 374 | phantom_data: false, |
356 | }; | 375 | }; |
376 | // FIXME provide enum variants properly (for auto traits) | ||
377 | let variant = rust_ir::AdtVariantDatum { | ||
378 | fields: Vec::new(), // FIXME add fields (only relevant for auto traits), | ||
379 | }; | ||
357 | let struct_datum_bound = rust_ir::AdtDatumBound { | 380 | let struct_datum_bound = rust_ir::AdtDatumBound { |
358 | fields: Vec::new(), // FIXME add fields (only relevant for auto traits) | 381 | variants: vec![variant], |
359 | where_clauses, | 382 | where_clauses, |
360 | }; | 383 | }; |
361 | let struct_datum = | 384 | let struct_datum = StructDatum { |
362 | StructDatum { id: struct_id, binders: make_binders(struct_datum_bound, num_params), flags }; | 385 | // FIXME set ADT kind |
386 | kind: rust_ir::AdtKind::Struct, | ||
387 | id: struct_id, | ||
388 | binders: make_binders(struct_datum_bound, num_params), | ||
389 | flags | ||
390 | }; | ||
363 | Arc::new(struct_datum) | 391 | Arc::new(struct_datum) |
364 | } | 392 | } |
365 | 393 | ||