aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src/traits/chalk.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2020-07-11 14:22:46 +0100
committerFlorian Diebold <[email protected]>2020-07-12 18:58:34 +0100
commit209c492432c15b017f99dba06d5937389c1f9546 (patch)
tree45d30a421ff534c72ae850cd4ff108b74ef81f9d /crates/ra_hir_ty/src/traits/chalk.rs
parentab1ad19f552e1b11055ed60f87cc420871d902eb (diff)
Upgrade Chalk
Diffstat (limited to 'crates/ra_hir_ty/src/traits/chalk.rs')
-rw-r--r--crates/ra_hir_ty/src/traits/chalk.rs36
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
4use log::debug; 4use log::debug;
5 5
6use chalk_ir::{fold::shift::Shift, GenericArg, TypeName}; 6use chalk_ir::{fold::shift::Shift, GenericArg, TypeName, CanonicalVarKinds};
7use chalk_solve::rust_ir::{self, OpaqueTyDatumBound, WellKnownTrait}; 7use chalk_solve::rust_ir::{self, OpaqueTyDatumBound, WellKnownTrait};
8 8
9use hir_def::{ 9use 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
224pub(crate) fn program_clauses_for_chalk_env_query( 243pub(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