@@ -387,48 +387,83 @@ where
387
387
G :: consider_auto_trait_candidate ( self , goal)
388
388
} else if cx. trait_is_alias ( trait_def_id) {
389
389
G :: consider_trait_alias_candidate ( self , goal)
390
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: Sized ) {
391
- G :: consider_builtin_sized_candidate ( self , goal)
392
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: Copy )
393
- || cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: Clone )
394
- {
395
- G :: consider_builtin_copy_clone_candidate ( self , goal)
396
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: PointerLike ) {
397
- G :: consider_builtin_pointer_like_candidate ( self , goal)
398
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: FnPtrTrait ) {
399
- G :: consider_builtin_fn_ptr_trait_candidate ( self , goal)
400
- } else if let Some ( kind) = self . cx ( ) . fn_trait_kind_from_def_id ( trait_def_id) {
401
- G :: consider_builtin_fn_trait_candidates ( self , goal, kind)
402
- } else if let Some ( kind) = self . cx ( ) . async_fn_trait_kind_from_def_id ( trait_def_id) {
403
- G :: consider_builtin_async_fn_trait_candidates ( self , goal, kind)
404
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: AsyncFnKindHelper ) {
405
- G :: consider_builtin_async_fn_kind_helper_candidate ( self , goal)
406
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: Tuple ) {
407
- G :: consider_builtin_tuple_candidate ( self , goal)
408
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: PointeeTrait ) {
409
- G :: consider_builtin_pointee_candidate ( self , goal)
410
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: Future ) {
411
- G :: consider_builtin_future_candidate ( self , goal)
412
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: Iterator ) {
413
- G :: consider_builtin_iterator_candidate ( self , goal)
414
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: FusedIterator ) {
415
- G :: consider_builtin_fused_iterator_candidate ( self , goal)
416
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: AsyncIterator ) {
417
- G :: consider_builtin_async_iterator_candidate ( self , goal)
418
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: Coroutine ) {
419
- G :: consider_builtin_coroutine_candidate ( self , goal)
420
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: DiscriminantKind ) {
421
- G :: consider_builtin_discriminant_kind_candidate ( self , goal)
422
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: AsyncDestruct ) {
423
- G :: consider_builtin_async_destruct_candidate ( self , goal)
424
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: Destruct ) {
425
- G :: consider_builtin_destruct_candidate ( self , goal)
426
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: TransmuteTrait ) {
427
- G :: consider_builtin_transmute_candidate ( self , goal)
428
- } else if cx. is_lang_item ( trait_def_id, TraitSolverLangItem :: EffectsIntersection ) {
429
- G :: consider_builtin_effects_intersection_candidate ( self , goal)
430
390
} else {
431
- Err ( NoSolution )
391
+ match cx. as_lang_item ( trait_def_id) {
392
+ Some ( TraitSolverLangItem :: Sized ) => G :: consider_builtin_sized_candidate ( self , goal) ,
393
+ Some ( TraitSolverLangItem :: Copy | TraitSolverLangItem :: Clone ) => {
394
+ G :: consider_builtin_copy_clone_candidate ( self , goal)
395
+ }
396
+ Some ( TraitSolverLangItem :: Fn ) => {
397
+ G :: consider_builtin_fn_trait_candidates ( self , goal, ty:: ClosureKind :: Fn )
398
+ }
399
+ Some ( TraitSolverLangItem :: FnMut ) => {
400
+ G :: consider_builtin_fn_trait_candidates ( self , goal, ty:: ClosureKind :: FnMut )
401
+ }
402
+ Some ( TraitSolverLangItem :: FnOnce ) => {
403
+ G :: consider_builtin_fn_trait_candidates ( self , goal, ty:: ClosureKind :: FnOnce )
404
+ }
405
+ Some ( TraitSolverLangItem :: AsyncFn ) => {
406
+ G :: consider_builtin_async_fn_trait_candidates ( self , goal, ty:: ClosureKind :: Fn )
407
+ }
408
+ Some ( TraitSolverLangItem :: AsyncFnMut ) => {
409
+ G :: consider_builtin_async_fn_trait_candidates (
410
+ self ,
411
+ goal,
412
+ ty:: ClosureKind :: FnMut ,
413
+ )
414
+ }
415
+ Some ( TraitSolverLangItem :: AsyncFnOnce ) => {
416
+ G :: consider_builtin_async_fn_trait_candidates (
417
+ self ,
418
+ goal,
419
+ ty:: ClosureKind :: FnOnce ,
420
+ )
421
+ }
422
+ Some ( TraitSolverLangItem :: PointerLike ) => {
423
+ G :: consider_builtin_pointer_like_candidate ( self , goal)
424
+ }
425
+ Some ( TraitSolverLangItem :: FnPtrTrait ) => {
426
+ G :: consider_builtin_fn_ptr_trait_candidate ( self , goal)
427
+ }
428
+ Some ( TraitSolverLangItem :: AsyncFnKindHelper ) => {
429
+ G :: consider_builtin_async_fn_kind_helper_candidate ( self , goal)
430
+ }
431
+ Some ( TraitSolverLangItem :: Tuple ) => G :: consider_builtin_tuple_candidate ( self , goal) ,
432
+ Some ( TraitSolverLangItem :: PointeeTrait ) => {
433
+ G :: consider_builtin_pointee_candidate ( self , goal)
434
+ }
435
+ Some ( TraitSolverLangItem :: Future ) => {
436
+ G :: consider_builtin_future_candidate ( self , goal)
437
+ }
438
+ Some ( TraitSolverLangItem :: Iterator ) => {
439
+ G :: consider_builtin_iterator_candidate ( self , goal)
440
+ }
441
+ Some ( TraitSolverLangItem :: FusedIterator ) => {
442
+ G :: consider_builtin_fused_iterator_candidate ( self , goal)
443
+ }
444
+ Some ( TraitSolverLangItem :: AsyncIterator ) => {
445
+ G :: consider_builtin_async_iterator_candidate ( self , goal)
446
+ }
447
+ Some ( TraitSolverLangItem :: Coroutine ) => {
448
+ G :: consider_builtin_coroutine_candidate ( self , goal)
449
+ }
450
+ Some ( TraitSolverLangItem :: DiscriminantKind ) => {
451
+ G :: consider_builtin_discriminant_kind_candidate ( self , goal)
452
+ }
453
+ Some ( TraitSolverLangItem :: AsyncDestruct ) => {
454
+ G :: consider_builtin_async_destruct_candidate ( self , goal)
455
+ }
456
+ Some ( TraitSolverLangItem :: Destruct ) => {
457
+ G :: consider_builtin_destruct_candidate ( self , goal)
458
+ }
459
+ Some ( TraitSolverLangItem :: TransmuteTrait ) => {
460
+ G :: consider_builtin_transmute_candidate ( self , goal)
461
+ }
462
+ Some ( TraitSolverLangItem :: EffectsIntersection ) => {
463
+ G :: consider_builtin_effects_intersection_candidate ( self , goal)
464
+ }
465
+ _ => Err ( NoSolution ) ,
466
+ }
432
467
} ;
433
468
434
469
candidates. extend ( result) ;
0 commit comments