Skip to content

Commit f35edae

Browse files
committed
impl visit on ProgramClause(s)
1 parent 114716d commit f35edae

File tree

3 files changed

+38
-7
lines changed

3 files changed

+38
-7
lines changed

chalk-ir/src/visit/binder_impls.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ impl<I: Interner> Visit<I> for Fn<I> {
1414
where
1515
I: 'i,
1616
{
17-
self.parameters
17+
let interner = visitor.interner();
18+
self.substitution
19+
.parameters(interner)
1820
.visit_with(visitor, outer_binder.shifted_in())
1921
}
2022
}

chalk-ir/src/visit/boring_impls.rs

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
77
use crate::{
88
AssocTypeId, DebruijnIndex, Goals, ImplId, Interner, Parameter, ParameterKind,
9-
PlaceholderIndex, ProgramClause, QuantifierKind, StructId, Substitution, SuperVisit, TraitId,
10-
UniverseIndex, Visit, VisitResult, Visitor,
9+
PlaceholderIndex, ProgramClause, ProgramClauseData, ProgramClauses, QuantifierKind, StructId,
10+
Substitution, SuperVisit, TraitId, UniverseIndex, Visit, VisitResult, Visitor,
1111
};
1212
use chalk_engine::{context::Context, ExClause, FlounderedSubgoal, Literal};
1313
use std::{marker::PhantomData, sync::Arc};
@@ -59,6 +59,19 @@ impl<T: Visit<I>, I: Interner> Visit<I> for Vec<T> {
5959
}
6060
}
6161

62+
impl<T: Visit<I>, I: Interner> Visit<I> for &[T] {
63+
fn visit_with<'i, R: VisitResult>(
64+
&self,
65+
visitor: &mut dyn Visitor<'i, I, Result = R>,
66+
outer_binder: DebruijnIndex,
67+
) -> R
68+
where
69+
I: 'i,
70+
{
71+
visit_iter(self.iter(), visitor, outer_binder)
72+
}
73+
}
74+
6275
impl<T: Visit<I>, I: Interner> Visit<I> for Box<T> {
6376
fn visit_with<'i, R: VisitResult>(
6477
&self,
@@ -225,13 +238,30 @@ impl<I: Interner> SuperVisit<I> for ProgramClause<I> {
225238
where
226239
I: 'i,
227240
{
228-
match self {
229-
ProgramClause::Implies(pci) => pci.visit_with(visitor, outer_binder),
230-
ProgramClause::ForAll(pci) => pci.visit_with(visitor, outer_binder),
241+
let interner = visitor.interner();
242+
243+
match self.data(interner) {
244+
ProgramClauseData::Implies(pci) => pci.visit_with(visitor, outer_binder),
245+
ProgramClauseData::ForAll(pci) => pci.visit_with(visitor, outer_binder),
231246
}
232247
}
233248
}
234249

250+
impl<I: Interner> Visit<I> for ProgramClauses<I> {
251+
fn visit_with<'i, R: VisitResult>(
252+
&self,
253+
visitor: &mut dyn Visitor<'i, I, Result = R>,
254+
outer_binder: DebruijnIndex,
255+
) -> R
256+
where
257+
I: 'i,
258+
{
259+
let interner = visitor.interner();
260+
261+
visit_iter(self.iter(interner), visitor, outer_binder)
262+
}
263+
}
264+
235265
impl<I: Interner> Visit<I> for PhantomData<I> {
236266
fn visit_with<'i, R: VisitResult>(
237267
&self,

chalk-solve/src/clauses/env_elaborator.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use crate::clauses::match_type_name;
44
use crate::DomainGoal;
55
use crate::FromEnv;
66
use crate::ProgramClause;
7-
use crate::ProgramClauseData;
87
use crate::RustIrDatabase;
98
use crate::Ty;
109
use crate::TyData;

0 commit comments

Comments
 (0)