|
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