@@ -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