Skip to content

Commit 5a83751

Browse files
Make fn traits into first-class TraitSolverLangItems to avoid needing fn_trait_kind_from_def_id
1 parent a21ba34 commit 5a83751

File tree

4 files changed

+39
-17
lines changed

4 files changed

+39
-17
lines changed

compiler/rustc_middle/src/ty/context.rs

+7-9
Original file line numberDiff line numberDiff line change
@@ -537,14 +537,6 @@ impl<'tcx> Interner for TyCtxt<'tcx> {
537537
self.trait_def(trait_def_id).implement_via_object
538538
}
539539

540-
fn fn_trait_kind_from_def_id(self, trait_def_id: DefId) -> Option<ty::ClosureKind> {
541-
self.fn_trait_kind_from_def_id(trait_def_id)
542-
}
543-
544-
fn async_fn_trait_kind_from_def_id(self, trait_def_id: DefId) -> Option<ty::ClosureKind> {
545-
self.async_fn_trait_kind_from_def_id(trait_def_id)
546-
}
547-
548540
fn supertrait_def_ids(self, trait_def_id: DefId) -> impl IntoIterator<Item = DefId> {
549541
self.supertrait_def_ids(trait_def_id)
550542
}
@@ -608,8 +600,11 @@ macro_rules! bidirectional_lang_item_map {
608600
bidirectional_lang_item_map! {
609601
// tidy-alphabetical-start
610602
AsyncDestruct,
603+
AsyncFn,
611604
AsyncFnKindHelper,
612605
AsyncFnKindUpvars,
606+
AsyncFnMut,
607+
AsyncFnOnce,
613608
AsyncFnOnceOutput,
614609
AsyncIterator,
615610
CallOnceFuture,
@@ -622,11 +617,14 @@ bidirectional_lang_item_map! {
622617
Destruct,
623618
DiscriminantKind,
624619
DynMetadata,
625-
EffectsMaybe,
626620
EffectsIntersection,
627621
EffectsIntersectionOutput,
622+
EffectsMaybe,
628623
EffectsNoRuntime,
629624
EffectsRuntime,
625+
Fn,
626+
FnMut,
627+
FnOnce,
630628
FnPtrTrait,
631629
FusedIterator,
632630
Future,

compiler/rustc_next_trait_solver/src/solve/assembly/mod.rs

+26-4
Original file line numberDiff line numberDiff line change
@@ -387,16 +387,38 @@ 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 let Some(kind) = self.cx().fn_trait_kind_from_def_id(trait_def_id) {
391-
G::consider_builtin_fn_trait_candidates(self, goal, kind)
392-
} else if let Some(kind) = self.cx().async_fn_trait_kind_from_def_id(trait_def_id) {
393-
G::consider_builtin_async_fn_trait_candidates(self, goal, kind)
394390
} else {
395391
match cx.as_lang_item(trait_def_id) {
396392
Some(TraitSolverLangItem::Sized) => G::consider_builtin_sized_candidate(self, goal),
397393
Some(TraitSolverLangItem::Copy | TraitSolverLangItem::Clone) => {
398394
G::consider_builtin_copy_clone_candidate(self, goal)
399395
}
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+
}
400422
Some(TraitSolverLangItem::PointerLike) => {
401423
G::consider_builtin_pointer_like_candidate(self, goal)
402424
}

compiler/rustc_type_ir/src/interner.rs

-4
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,6 @@ pub trait Interner:
254254

255255
fn trait_may_be_implemented_via_object(self, trait_def_id: Self::DefId) -> bool;
256256

257-
fn fn_trait_kind_from_def_id(self, trait_def_id: Self::DefId) -> Option<ty::ClosureKind>;
258-
259-
fn async_fn_trait_kind_from_def_id(self, trait_def_id: Self::DefId) -> Option<ty::ClosureKind>;
260-
261257
fn supertrait_def_ids(self, trait_def_id: Self::DefId)
262258
-> impl IntoIterator<Item = Self::DefId>;
263259

compiler/rustc_type_ir/src/lang_items.rs

+6
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
pub enum TraitSolverLangItem {
44
// tidy-alphabetical-start
55
AsyncDestruct,
6+
AsyncFn,
67
AsyncFnKindHelper,
78
AsyncFnKindUpvars,
9+
AsyncFnMut,
10+
AsyncFnOnce,
811
AsyncFnOnceOutput,
912
AsyncIterator,
1013
CallOnceFuture,
@@ -22,6 +25,9 @@ pub enum TraitSolverLangItem {
2225
EffectsMaybe,
2326
EffectsNoRuntime,
2427
EffectsRuntime,
28+
Fn,
29+
FnMut,
30+
FnOnce,
2531
FnPtrTrait,
2632
FusedIterator,
2733
Future,

0 commit comments

Comments
 (0)