@@ -172,6 +172,26 @@ impl<I: Interner, TI: TargetInterner<I>> Fold<I, TI> for Goals<I> {
172172 }
173173}
174174
175+ impl < I : Interner , TI : TargetInterner < I > > Fold < I , TI > for ProgramClauses < I > {
176+ type Result = ProgramClauses < TI > ;
177+ fn fold_with < ' i > (
178+ & self ,
179+ folder : & mut dyn Folder < ' i , I , TI > ,
180+ outer_binder : DebruijnIndex ,
181+ ) -> Fallible < Self :: Result >
182+ where
183+ I : ' i ,
184+ TI : ' i ,
185+ {
186+ let interner = folder. interner ( ) ;
187+ let target_interner = folder. target_interner ( ) ;
188+ let folded = self
189+ . iter ( interner)
190+ . map ( |p| p. fold_with ( folder, outer_binder) ) ;
191+ Ok ( ProgramClauses :: from_fallible ( target_interner, folded) ?)
192+ }
193+ }
194+
175195#[ macro_export]
176196macro_rules! copy_fold {
177197 ( $t: ty) => {
@@ -228,7 +248,7 @@ id_fold!(StructId);
228248id_fold ! ( TraitId ) ;
229249id_fold ! ( AssocTypeId ) ;
230250
231- impl < I : Interner , TI : TargetInterner < I > > SuperFold < I , TI > for ProgramClause < I > {
251+ impl < I : Interner , TI : TargetInterner < I > > SuperFold < I , TI > for ProgramClauseData < I > {
232252 fn super_fold_with < ' i > (
233253 & self ,
234254 folder : & mut dyn Folder < ' i , I , TI > ,
@@ -239,16 +259,33 @@ impl<I: Interner, TI: TargetInterner<I>> SuperFold<I, TI> for ProgramClause<I> {
239259 TI : ' i ,
240260 {
241261 match self {
242- ProgramClause :: Implies ( pci) => {
243- Ok ( ProgramClause :: Implies ( pci. fold_with ( folder, outer_binder) ?) )
244- }
245- ProgramClause :: ForAll ( pci) => {
246- Ok ( ProgramClause :: ForAll ( pci. fold_with ( folder, outer_binder) ?) )
247- }
262+ ProgramClauseData :: Implies ( pci) => Ok ( ProgramClauseData :: Implies (
263+ pci. fold_with ( folder, outer_binder) ?,
264+ ) ) ,
265+ ProgramClauseData :: ForAll ( pci) => Ok ( ProgramClauseData :: ForAll (
266+ pci. fold_with ( folder, outer_binder) ?,
267+ ) ) ,
248268 }
249269 }
250270}
251271
272+ impl < I : Interner , TI : TargetInterner < I > > SuperFold < I , TI > for ProgramClause < I > {
273+ fn super_fold_with < ' i > (
274+ & self ,
275+ folder : & mut dyn Folder < ' i , I , TI > ,
276+ outer_binder : DebruijnIndex ,
277+ ) -> :: chalk_engine:: fallible:: Fallible < Self :: Result >
278+ where
279+ I : ' i ,
280+ TI : ' i ,
281+ {
282+ let clause = self . data ( folder. interner ( ) ) ;
283+ Ok ( clause
284+ . super_fold_with ( folder, outer_binder) ?
285+ . intern ( folder. target_interner ( ) ) )
286+ }
287+ }
288+
252289impl < I : Interner , TI : TargetInterner < I > > Fold < I , TI > for PhantomData < I > {
253290 type Result = PhantomData < TI > ;
254291
0 commit comments