Skip to content

Commit 870958b

Browse files
committed
Some cleanup
1 parent dbdcbdd commit 870958b

File tree

2 files changed

+9
-14
lines changed

2 files changed

+9
-14
lines changed

chalk-solve/src/clauses/builtin_traits.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use super::{builder::ClauseBuilder, generalize};
22
use crate::{Interner, RustIrDatabase, TraitRef, WellKnownTrait};
3-
use chalk_ir::{ProjectionTy, Substitution, Ty};
3+
use chalk_ir::{ProjectionTy, Substitution, Ty, AliasTy};
44

55
mod clone;
66
mod copy;
7-
mod fn_;
7+
mod fn_family;
88
mod sized;
99

1010
/// For well known traits we have special hard-coded impls, either as an
@@ -34,7 +34,7 @@ pub fn add_builtin_program_clauses<I: Interner>(
3434
WellKnownTrait::Copy => copy::add_copy_program_clauses(db, builder, &trait_ref, ty),
3535
WellKnownTrait::Clone => clone::add_clone_program_clauses(db, builder, &trait_ref, ty),
3636
WellKnownTrait::FnOnce | WellKnownTrait::FnMut | WellKnownTrait::Fn => {
37-
fn_::add_fn_trait_program_clauses(db, builder, trait_ref.trait_id, ty, false)
37+
fn_family::add_fn_trait_program_clauses(db, builder, trait_ref.trait_id, ty)
3838
}
3939
// Drop impls are provided explicitly
4040
WellKnownTrait::Drop => (),
@@ -53,13 +53,9 @@ pub fn add_builtin_assoc_program_clauses<I: Interner>(
5353
match well_known {
5454
WellKnownTrait::FnOnce => {
5555
let interner = db.interner();
56-
let self_ty = proj
57-
.substitution
58-
.at(interner, 0)
59-
.assert_ty_ref(interner)
60-
.data(interner);
56+
let self_ty = AliasTy::Projection(proj.clone()).self_type_parameter(interner);
6157
let trait_id = db.well_known_trait_id(well_known).unwrap();
62-
fn_::add_fn_trait_program_clauses(db, builder, trait_id, self_ty, true);
58+
fn_family::add_fn_trait_program_clauses(db, builder, trait_id, self_ty.data(interner));
6359
}
6460
_ => {}
6561
}

chalk-solve/src/clauses/builtin_traits/fn_.rs renamed to chalk-solve/src/clauses/builtin_traits/fn_family.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ pub fn add_fn_trait_program_clauses<I: Interner>(
1818
builder: &mut ClauseBuilder<'_, I>,
1919
trait_id: TraitId<I>,
2020
ty: &TyData<I>,
21-
assoc_output: bool,
2221
) {
2322
match ty {
2423
TyData::Function(fn_val) => {
@@ -59,7 +58,9 @@ pub fn add_fn_trait_program_clauses<I: Interner>(
5958
// (e.g. `for<'a> fn(&'a u8): FnOnce<(&'b u8)>`)
6059
let bound_ref = Binders::new(VariableKinds::from(interner, binders), new_trait_ref);
6160
builder.push_binders(&bound_ref, |this, inner_trait| {
62-
if assoc_output {
61+
this.push_fact(inner_trait.clone());
62+
63+
if let Some(WellKnownTrait::FnOnce) = db.trait_datum(trait_id).well_known {
6364
//The `Output` type is defined on the `FnOnce`
6465
let fn_once = db.trait_datum(trait_id);
6566
assert_eq!(fn_once.well_known, Some(WellKnownTrait::FnOnce));
@@ -83,10 +84,8 @@ pub fn add_fn_trait_program_clauses<I: Interner>(
8384
};
8485

8586
this.push_clause(normalize, std::iter::once(inner_trait));
86-
} else {
87-
this.push_fact(inner_trait);
8887
}
89-
})
88+
});
9089
}
9190
_ => {}
9291
}

0 commit comments

Comments
 (0)