Skip to content

Commit 4eaa7d0

Browse files
committed
decouple Copy and Clone
1 parent 33c42d2 commit 4eaa7d0

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

chalk-solve/src/clauses/builtin_traits.rs

+3-3
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

@@ -20,9 +21,8 @@ pub fn add_builtin_program_clauses<I: Interner>(
2021

2122
match well_known {
2223
WellKnownTrait::SizedTrait => sized::add_sized_program_clauses(db, builder, trait_ref, ty),
23-
WellKnownTrait::CopyTrait | WellKnownTrait::CloneTrait => {
24-
copy::add_copy_clone_program_clauses(db, builder, trait_ref, ty)
25-
}
24+
WellKnownTrait::CopyTrait => copy::add_copy_program_clauses(db, builder, trait_ref, ty),
25+
WellKnownTrait::CloneTrait => clone::add_clone_program_clauses(db, builder, trait_ref, ty),
2626
// Drop impls are provided explicitly
2727
WellKnownTrait::DropTrait => (),
2828
}
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

+1-2
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)