@@ -277,49 +277,33 @@ fn derive_fold(mut s: synstructure::Structure) -> TokenStream {
277277
278278 let type_name = & input. ident ;
279279
280- let ( target_interner, result) = match kind {
281- DeriveKind :: FromHasInternerAttr => ( interner. clone ( ) , quote ! { #type_name } ) ,
282- DeriveKind :: FromHasInterner => {
283- let param = get_generic_param_name ( input) . unwrap ( ) ;
284-
285- s. add_impl_generic ( parse_quote ! { _U } )
286- . add_impl_generic ( parse_quote ! { _TI } )
287- . add_where_predicate (
288- parse_quote ! { #param: :: chalk_ir:: fold:: Fold <#interner, _TI, Result = _U> } ,
289- )
290- . add_where_predicate (
291- parse_quote ! { _U: :: chalk_ir:: interner:: HasInterner <Interner = _TI> } ,
292- )
293- . add_where_predicate (
294- parse_quote ! { _TI: :: chalk_ir:: interner:: TargetInterner <#interner> } ,
295- ) ;
296-
297- ( quote ! { _TI } , quote ! { #type_name<_U> } )
298- }
299- DeriveKind :: FromInterner => {
300- s. add_impl_generic ( parse_quote ! { _TI } )
301- . add_where_predicate (
302- parse_quote ! { _TI: :: chalk_ir:: interner:: TargetInterner <#interner> } ,
303- ) ;
304-
305- ( quote ! { _TI } , quote ! { #type_name<_TI> } )
306- }
280+ let result = if kind == DeriveKind :: FromHasInterner {
281+ let param = get_generic_param_name ( input) . unwrap ( ) ;
282+ s. add_impl_generic ( parse_quote ! { _U } )
283+ . add_where_predicate (
284+ parse_quote ! { #param: :: chalk_ir:: fold:: Fold <#interner, Result = _U> } ,
285+ )
286+ . add_where_predicate (
287+ parse_quote ! { _U: :: chalk_ir:: interner:: HasInterner <Interner = #interner> } ,
288+ ) ;
289+ quote ! { #type_name <_U> }
290+ } else {
291+ quote ! { #type_name < #interner > }
307292 } ;
308293
309294 s. add_bounds ( synstructure:: AddBounds :: None ) ;
310295 s. bound_impl (
311- quote ! ( :: chalk_ir:: fold:: Fold <#interner, #target_interner >) ,
296+ quote ! ( :: chalk_ir:: fold:: Fold <#interner>) ,
312297 quote ! {
313298 type Result = #result;
314299
315300 fn fold_with<' i>(
316301 & self ,
317- folder: & mut dyn :: chalk_ir:: fold:: Folder < ' i, #interner, #target_interner >,
302+ folder: & mut dyn :: chalk_ir:: fold:: Folder < ' i, #interner >,
318303 outer_binder: :: chalk_ir:: DebruijnIndex ,
319304 ) -> :: chalk_ir:: Fallible <Self :: Result >
320305 where
321306 #interner: ' i,
322- #target_interner: ' i,
323307 {
324308 Ok ( match * self { #body } )
325309 }
0 commit comments