|
6 | 6 |
|
7 | 7 | use crate::{ |
8 | 8 | 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, |
11 | 11 | }; |
12 | 12 | use chalk_engine::{context::Context, ExClause, FlounderedSubgoal, Literal}; |
13 | 13 | use std::{marker::PhantomData, sync::Arc}; |
@@ -59,6 +59,19 @@ impl<T: Visit<I>, I: Interner> Visit<I> for Vec<T> { |
59 | 59 | } |
60 | 60 | } |
61 | 61 |
|
| 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 | + |
62 | 75 | impl<T: Visit<I>, I: Interner> Visit<I> for Box<T> { |
63 | 76 | fn visit_with<'i, R: VisitResult>( |
64 | 77 | &self, |
@@ -225,13 +238,30 @@ impl<I: Interner> SuperVisit<I> for ProgramClause<I> { |
225 | 238 | where |
226 | 239 | I: 'i, |
227 | 240 | { |
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), |
231 | 246 | } |
232 | 247 | } |
233 | 248 | } |
234 | 249 |
|
| 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 | + |
235 | 265 | impl<I: Interner> Visit<I> for PhantomData<I> { |
236 | 266 | fn visit_with<'i, R: VisitResult>( |
237 | 267 | &self, |
|
0 commit comments