Skip to content

Commit 2eb55ac

Browse files
committed
Change Substitution in Slice to Ty
1 parent a16d835 commit 2eb55ac

File tree

9 files changed

+12
-40
lines changed

9 files changed

+12
-40
lines changed

chalk-engine/src/slg.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -435,10 +435,7 @@ impl<I: Interner> MayInvalidate<'_, I> {
435435
TyKind::OpaqueType(id_a, substitution_a),
436436
TyKind::OpaqueType(id_b, substitution_b),
437437
) => self.aggregate_name_and_substs(id_a, substitution_a, id_b, substitution_b),
438-
(TyKind::Slice(substitution_a), TyKind::Slice(substitution_b)) => substitution_a
439-
.iter(interner)
440-
.zip(substitution_b.iter(interner))
441-
.any(|(new, current)| self.aggregate_generic_args(new, current)),
438+
(TyKind::Slice(ty_a), TyKind::Slice(ty_b)) => self.aggregate_tys(ty_a, ty_b),
442439
(TyKind::FnDef(id_a, substitution_a), TyKind::FnDef(id_b, substitution_b)) => {
443440
self.aggregate_name_and_substs(id_a, substitution_a, id_b, substitution_b)
444441
}

chalk-engine/src/slg/aggregate.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -296,15 +296,8 @@ impl<I: Interner> AntiUnifier<'_, '_, I> {
296296
TyKind::OpaqueType(name, substitution).intern(interner)
297297
})
298298
.unwrap_or_else(|| self.new_ty_variable()),
299-
(TyKind::Slice(substitution_a), TyKind::Slice(substitution_b)) => {
300-
let substitution = Substitution::from_iter(
301-
interner,
302-
substitution_a
303-
.iter(interner)
304-
.zip(substitution_b.iter(interner))
305-
.map(|(p1, p2)| self.aggregate_generic_args(p1, p2)),
306-
);
307-
TyKind::Slice(substitution).intern(interner)
299+
(TyKind::Slice(ty_a), TyKind::Slice(ty_b)) => {
300+
TyKind::Slice(self.aggregate_tys(ty_a, ty_b)).intern(interner)
308301
}
309302
(TyKind::FnDef(id_a, substitution_a), TyKind::FnDef(id_b, substitution_b)) => self
310303
.aggregate_name_and_substs(id_a, substitution_a, id_b, substitution_b)

chalk-integration/src/lowering.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -786,11 +786,7 @@ impl LowerWithEnv for Ty {
786786
chalk_ir::TyKind::Array(ty.lower(env)?, len.lower(env)?).intern(interner)
787787
}
788788

789-
Ty::Slice { ty } => chalk_ir::TyKind::Slice(chalk_ir::Substitution::from_fallible(
790-
interner,
791-
std::iter::once(ty.lower(env)),
792-
)?)
793-
.intern(interner),
789+
Ty::Slice { ty } => chalk_ir::TyKind::Slice(ty.lower(env)?).intern(interner),
794790

795791
Ty::Raw { mutability, ty } => chalk_ir::TyKind::Raw(
796792
mutability.lower(),

chalk-ir/src/could_match.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,7 @@ where
4949
TyKind::OpaqueType(opaque_ty_a, substitution_a),
5050
TyKind::OpaqueType(opaque_ty_b, substitution_b),
5151
) => opaque_ty_a == opaque_ty_b && matches(substitution_a, substitution_b),
52-
(TyKind::Slice(substitution_a), TyKind::Slice(substitution_b)) => {
53-
matches(substitution_a, substitution_b)
54-
}
52+
(TyKind::Slice(ty_a), TyKind::Slice(ty_b)) => ty_a.could_match(interner, ty_b),
5553
(
5654
TyKind::FnDef(fn_def_a, substitution_a),
5755
TyKind::FnDef(fn_def_b, substitution_b),

chalk-ir/src/debug.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -501,9 +501,7 @@ impl<'a, I: Interner> Debug for TyKindDebug<'a, I> {
501501
opaque_ty,
502502
substitution.with_angle(interner)
503503
),
504-
TyKind::Slice(substitution) => {
505-
write!(fmt, "{{slice}}{:?}", substitution.with_angle(interner))
506-
}
504+
TyKind::Slice(ty) => write!(fmt, "[{:?}]", ty),
507505
TyKind::FnDef(fn_def, substitution) => {
508506
write!(fmt, "{:?}{:?}", fn_def, substitution.with_angle(interner))
509507
}

chalk-ir/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,7 @@ pub enum TyKind<I: Interner> {
468468
Array(Ty<I>, Const<I>),
469469

470470
/// a slice type like `[T]`
471-
Slice(Substitution<I>),
471+
Slice(Ty<I>),
472472

473473
/// a raw pointer type like `*const T` or `*mut T`
474474
Raw(Mutability, Substitution<I>),

chalk-solve/src/clauses.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ fn constituent_types<I: Interner>(db: &dyn RustIrDatabase<I>, ty: &TyKind<I>) ->
3737
// And for `PhantomData<T>`, we pass `T`.
3838
TyKind::Adt(_, substitution)
3939
| TyKind::Tuple(_, substitution)
40-
| TyKind::Slice(substitution)
4140
| TyKind::Raw(_, substitution)
4241
| TyKind::Ref(_, substitution)
4342
| TyKind::FnDef(_, substitution) => substitution
@@ -46,6 +45,8 @@ fn constituent_types<I: Interner>(db: &dyn RustIrDatabase<I>, ty: &TyKind<I>) ->
4645
.cloned()
4746
.collect(),
4847

48+
TyKind::Slice(ty) => vec![ty.clone()],
49+
4950
TyKind::Array(_, _) | TyKind::Str | TyKind::Never | TyKind::Scalar(_) => Vec::new(),
5051

5152
TyKind::Generator(generator_id, substitution) => {

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -312,12 +312,10 @@ pub fn add_unsize_program_clauses<I: Interner>(
312312
);
313313
}
314314

315-
(TyKind::Array(array_ty, _array_const), TyKind::Slice(slice_subst)) => {
316-
let slice_ty = slice_subst.at(interner, 0);
317-
315+
(TyKind::Array(array_ty, _array_const), TyKind::Slice(slice_ty)) => {
318316
let eq_goal = EqGoal {
319317
a: array_ty.clone().cast(interner),
320-
b: slice_ty.clone(),
318+
b: slice_ty.clone().cast(interner),
321319
};
322320

323321
builder.push_clause(trait_ref.clone(), iter::once(eq_goal));

chalk-solve/src/display/ty.rs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -108,16 +108,7 @@ impl<I: Interner> RenderAsRust<I> for TyKind<I> {
108108
)
109109
}
110110
TyKind::Str => write!(f, "str"),
111-
TyKind::Slice(substitution) => write!(
112-
f,
113-
"[{}]",
114-
substitution
115-
.iter(interner)
116-
.filter_map(move |p| p.ty(interner))
117-
.next()
118-
.unwrap()
119-
.display(s)
120-
),
111+
TyKind::Slice(ty) => write!(f, "[{}]", ty.display(s)),
121112
TyKind::Error => write!(f, "{{error}}"),
122113
TyKind::Never => write!(f, "!"),
123114

0 commit comments

Comments
 (0)