Skip to content

Commit 90c8eb0

Browse files
committed
decouple Copy and Clone
1 parent dd24f43 commit 90c8eb0

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

chalk-solve/src/clauses/builtin_traits.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use super::builder::ClauseBuilder;
22
use crate::{Interner, RustIrDatabase, TraitRef, WellKnownTrait};
33
use chalk_ir::TyData;
44

5+
mod clone;
56
mod copy;
67
mod sized;
78

@@ -23,9 +24,8 @@ pub fn add_builtin_program_clauses<I: Interner>(
2324

2425
match well_known {
2526
WellKnownTrait::SizedTrait => sized::add_sized_program_clauses(db, builder, trait_ref, ty),
26-
WellKnownTrait::CopyTrait | WellKnownTrait::CloneTrait => {
27-
copy::add_copy_clone_program_clauses(db, builder, trait_ref, ty)
28-
}
27+
WellKnownTrait::CopyTrait => copy::add_copy_program_clauses(db, builder, trait_ref, ty),
28+
WellKnownTrait::CloneTrait => clone::add_clone_program_clauses(db, builder, trait_ref, ty),
2929
// Drop impls are provided explicitly
3030
WellKnownTrait::DropTrait => (),
3131
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
use crate::clauses::ClauseBuilder;
2+
use crate::{Interner, RustIrDatabase, TraitRef};
3+
use chalk_ir::TyData;
4+
5+
use super::copy::add_copy_program_clauses;
6+
7+
pub fn add_clone_program_clauses<I: Interner>(
8+
db: &dyn RustIrDatabase<I>,
9+
builder: &mut ClauseBuilder<'_, I>,
10+
trait_ref: &TraitRef<I>,
11+
ty: &TyData<I>,
12+
) {
13+
let _interner = db.interner();
14+
15+
// Implement Clone for types that automaticly implement Copy
16+
add_copy_program_clauses(db, builder, trait_ref, ty);
17+
}

chalk-solve/src/clauses/builtin_traits/copy.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ use crate::clauses::ClauseBuilder;
22
use crate::{Interner, RustIrDatabase, TraitRef};
33
use chalk_ir::TyData;
44

5-
/// Copy and Clone have the same automatic implementations
6-
pub fn add_copy_clone_program_clauses<I: Interner>(
5+
pub fn add_copy_program_clauses<I: Interner>(
76
db: &dyn RustIrDatabase<I>,
87
builder: &mut ClauseBuilder<'_, I>,
98
trait_ref: &TraitRef<I>,

0 commit comments

Comments
 (0)