@@ -277,49 +277,33 @@ fn derive_fold(mut s: synstructure::Structure) -> TokenStream {
277
277
278
278
let type_name = & input. ident ;
279
279
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 > }
307
292
} ;
308
293
309
294
s. add_bounds ( synstructure:: AddBounds :: None ) ;
310
295
s. bound_impl (
311
- quote ! ( :: chalk_ir:: fold:: Fold <#interner, #target_interner >) ,
296
+ quote ! ( :: chalk_ir:: fold:: Fold <#interner>) ,
312
297
quote ! {
313
298
type Result = #result;
314
299
315
300
fn fold_with<' i>(
316
301
& self ,
317
- folder: & mut dyn :: chalk_ir:: fold:: Folder < ' i, #interner, #target_interner >,
302
+ folder: & mut dyn :: chalk_ir:: fold:: Folder < ' i, #interner >,
318
303
outer_binder: :: chalk_ir:: DebruijnIndex ,
319
304
) -> :: chalk_ir:: Fallible <Self :: Result >
320
305
where
321
306
#interner: ' i,
322
- #target_interner: ' i,
323
307
{
324
308
Ok ( match * self { #body } )
325
309
}
0 commit comments