@@ -387,48 +387,83 @@ where
387387 G :: consider_auto_trait_candidate ( self , goal)
388388 } else if cx. trait_is_alias ( trait_def_id) {
389389 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)
430390 } 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+ }
432467 } ;
433468
434469 candidates. extend ( result) ;
0 commit comments