Skip to content

Commit a16d835

Browse files
committed
Change Substitution on Array to Ty and Const
1 parent 30134cf commit a16d835

File tree

17 files changed

+45
-62
lines changed

17 files changed

+45
-62
lines changed

chalk-engine/src/slg.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -449,10 +449,9 @@ impl<I: Interner> MayInvalidate<'_, I> {
449449
self.aggregate_name_and_substs(id_a, substitution_a, id_b, substitution_b)
450450
}
451451
(TyKind::Never, TyKind::Never) => false,
452-
(TyKind::Array(substitution_a), TyKind::Array(substitution_b)) => substitution_a
453-
.iter(interner)
454-
.zip(substitution_b.iter(interner))
455-
.any(|(new, current)| self.aggregate_generic_args(new, current)),
452+
(TyKind::Array(ty_a, const_a), TyKind::Array(ty_b, const_b)) => {
453+
self.aggregate_tys(ty_a, ty_b) || self.aggregate_consts(const_a, const_b)
454+
}
456455
(TyKind::Closure(id_a, substitution_a), TyKind::Closure(id_b, substitution_b)) => {
457456
self.aggregate_name_and_substs(id_a, substitution_a, id_b, substitution_b)
458457
}

chalk-engine/src/slg/aggregate.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -319,16 +319,11 @@ impl<I: Interner> AntiUnifier<'_, '_, I> {
319319
.map(|(&name, substitution)| TyKind::Raw(name, substitution).intern(interner))
320320
.unwrap_or_else(|| self.new_ty_variable()),
321321
(TyKind::Never, TyKind::Never) => TyKind::Never.intern(interner),
322-
(TyKind::Array(substitution_a), TyKind::Array(substitution_b)) => {
323-
let substitution = Substitution::from_iter(
324-
interner,
325-
substitution_a
326-
.iter(interner)
327-
.zip(substitution_b.iter(interner))
328-
.map(|(p1, p2)| self.aggregate_generic_args(p1, p2)),
329-
);
330-
TyKind::Array(substitution).intern(interner)
331-
}
322+
(TyKind::Array(ty_a, const_a), TyKind::Array(ty_b, const_b)) => TyKind::Array(
323+
self.aggregate_tys(ty_a, ty_b),
324+
self.aggregate_consts(const_a, const_b),
325+
)
326+
.intern(interner),
332327
(TyKind::Closure(id_a, substitution_a), TyKind::Closure(id_b, substitution_b)) => self
333328
.aggregate_name_and_substs(id_a, substitution_a, id_b, substitution_b)
334329
.map(|(&name, substitution)| TyKind::Closure(name, substitution).intern(interner))

chalk-engine/src/slg/resolvent.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,8 +457,9 @@ impl<'i, I: Interner> Zipper<'i, I> for AnswerSubstitutor<'i, I> {
457457
Zip::zip_with(self, substitution_a, substitution_b)
458458
}
459459
(TyKind::Never, TyKind::Never) => Ok(()),
460-
(TyKind::Array(substitution_a), TyKind::Array(substitution_b)) => {
461-
Zip::zip_with(self, substitution_a, substitution_b)
460+
(TyKind::Array(ty_a, const_a), TyKind::Array(ty_b, const_b)) => {
461+
Zip::zip_with(self, ty_a, ty_b)?;
462+
Zip::zip_with(self, const_a, const_b)
462463
}
463464
(TyKind::Closure(id_a, substitution_a), TyKind::Closure(id_b, substitution_b)) => {
464465
Zip::zip_with(self, id_a, id_b)?;

chalk-integration/src/lowering.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -782,14 +782,9 @@ impl LowerWithEnv for Ty {
782782

783783
Ty::Scalar { ty } => chalk_ir::TyKind::Scalar(ty.lower()).intern(interner),
784784

785-
Ty::Array { ty, len } => chalk_ir::TyKind::Array(chalk_ir::Substitution::from_iter(
786-
interner,
787-
&[
788-
ty.lower(env)?.cast(interner),
789-
len.lower(env)?.cast(interner),
790-
],
791-
))
792-
.intern(interner),
785+
Ty::Array { ty, len } => {
786+
chalk_ir::TyKind::Array(ty.lower(env)?, len.lower(env)?).intern(interner)
787+
}
793788

794789
Ty::Slice { ty } => chalk_ir::TyKind::Slice(chalk_ir::Substitution::from_fallible(
795790
interner,

chalk-integration/src/program.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ impl RustIrDatabase<ChalkIr> for Program {
467467
(TyKind::Ref(id_a, _), TyKind::Ref(id_b, _)) => id_a == id_b,
468468
(TyKind::Raw(id_a, _), TyKind::Raw(id_b, _)) => id_a == id_b,
469469
(TyKind::Never, TyKind::Never) => true,
470-
(TyKind::Array(_), TyKind::Array(_)) => true,
470+
(TyKind::Array(_, _), TyKind::Array(_, _)) => true,
471471
(TyKind::Closure(id_a, _), TyKind::Closure(id_b, _)) => id_a == id_b,
472472
(TyKind::Generator(id_a, _), TyKind::Generator(id_b, _)) => id_a == id_b,
473473
(TyKind::GeneratorWitness(id_a, _), TyKind::GeneratorWitness(id_b, _)) => {

chalk-ir/src/could_match.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ where
6565
TyKind::Raw(mutability_b, substitution_b),
6666
) => mutability_a == mutability_b && matches(substitution_a, substitution_b),
6767
(TyKind::Never, TyKind::Never) => true,
68-
(TyKind::Array(substitution_a), TyKind::Array(substitution_b)) => {
69-
matches(substitution_a, substitution_b)
68+
(TyKind::Array(ty_a, const_a), TyKind::Array(ty_b, const_b)) => {
69+
ty_a.could_match(interner, ty_b) && const_a.could_match(interner, const_b)
7070
}
7171
(
7272
TyKind::Closure(id_a, substitution_a),

chalk-ir/src/debug.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ impl<I: Interner> Debug for TyKind<I> {
224224
substitution,
225225
),
226226
TyKind::Never => write!(fmt, "Never"),
227-
TyKind::Array(substitution) => write!(fmt, "{{array}}<{:?}>", substitution),
227+
TyKind::Array(ty, const_) => write!(fmt, "[{:?}; {:?}]", ty, const_),
228228
TyKind::Closure(id, substitution) => {
229229
write!(fmt, "{{closure:{:?}}}<{:?}>", id, substitution)
230230
}
@@ -526,9 +526,7 @@ impl<'a, I: Interner> Debug for TyKindDebug<'a, I> {
526526
substitution.with_angle(interner),
527527
),
528528
TyKind::Never => write!(fmt, "Never"),
529-
TyKind::Array(substitution) => {
530-
write!(fmt, "{{array}}{:?}", substitution.with_angle(interner))
531-
}
529+
TyKind::Array(ty, const_) => write!(fmt, "[{:?}; {:?}]", ty, const_),
532530
TyKind::Closure(id, substitution) => write!(
533531
fmt,
534532
"{{closure:{:?}}}{:?}",

chalk-ir/src/fold.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -474,10 +474,11 @@ where
474474
)
475475
.intern(folder.target_interner()),
476476
TyKind::Never => TyKind::Never.intern(folder.target_interner()),
477-
TyKind::Array(substitution) => {
478-
TyKind::Array(substitution.fold_with(folder, outer_binder)?)
479-
.intern(folder.target_interner())
480-
}
477+
TyKind::Array(ty, const_) => TyKind::Array(
478+
ty.fold_with(folder, outer_binder)?,
479+
const_.fold_with(folder, outer_binder)?,
480+
)
481+
.intern(folder.target_interner()),
481482
TyKind::Closure(id, substitution) => TyKind::Closure(
482483
id.fold_with(folder, outer_binder)?,
483484
substitution.fold_with(folder, outer_binder)?,

chalk-ir/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ pub enum TyKind<I: Interner> {
465465
Tuple(usize, Substitution<I>),
466466

467467
/// an array type like `[T; N]`
468-
Array(Substitution<I>),
468+
Array(Ty<I>, Const<I>),
469469

470470
/// a slice type like `[T]`
471471
Slice(Substitution<I>),
@@ -544,6 +544,8 @@ where
544544
I::InternedSubstitution: Copy,
545545
I::InternedVariableKinds: Copy,
546546
I::InternedQuantifiedWhereClauses: Copy,
547+
I::InternedType: Copy,
548+
I::InternedConst: Copy,
547549
{
548550
}
549551

chalk-ir/src/visit.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,9 @@ where
304304
substitution.visit_with(visitor, outer_binder)
305305
}
306306
TyKind::Never => R::new(),
307-
TyKind::Array(substitution) => substitution.visit_with(visitor, outer_binder),
307+
TyKind::Array(ty, const_) => ty
308+
.visit_with(visitor, outer_binder)
309+
.combine(const_.visit_with(visitor, outer_binder)),
308310
TyKind::Closure(_id, substitution) => substitution.visit_with(visitor, outer_binder),
309311
TyKind::Generator(_generator, substitution) => {
310312
substitution.visit_with(visitor, outer_binder)

0 commit comments

Comments
 (0)