Skip to content

Commit 5965108

Browse files
Make fn traits into first-class TraitSolverLangItems to avoid needing fn_trait_kind_from_def_id
1 parent c35a2ce commit 5965108

File tree

4 files changed

+38
-16
lines changed

4 files changed

+38
-16
lines changed

compiler/rustc_middle/src/ty/context.rs

Lines changed: 6 additions & 8 deletions
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,6 +617,9 @@ bidirectional_lang_item_map! {
622617
Destruct,
623618
DiscriminantKind,
624619
DynMetadata,
620+
Fn,
621+
FnMut,
622+
FnOnce,
625623
FnPtrTrait,
626624
FusedIterator,
627625
Future,

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

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -382,16 +382,38 @@ where
382382
G::consider_auto_trait_candidate(self, goal)
383383
} else if cx.trait_is_alias(trait_def_id) {
384384
G::consider_trait_alias_candidate(self, goal)
385-
} else if let Some(kind) = self.cx().fn_trait_kind_from_def_id(trait_def_id) {
386-
G::consider_builtin_fn_trait_candidates(self, goal, kind)
387-
} else if let Some(kind) = self.cx().async_fn_trait_kind_from_def_id(trait_def_id) {
388-
G::consider_builtin_async_fn_trait_candidates(self, goal, kind)
389385
} else {
390386
match cx.as_lang_item(trait_def_id) {
391387
Some(TraitSolverLangItem::Sized) => G::consider_builtin_sized_candidate(self, goal),
392388
Some(TraitSolverLangItem::Copy | TraitSolverLangItem::Clone) => {
393389
G::consider_builtin_copy_clone_candidate(self, goal)
394390
}
391+
Some(TraitSolverLangItem::Fn) => {
392+
G::consider_builtin_fn_trait_candidates(self, goal, ty::ClosureKind::Fn)
393+
}
394+
Some(TraitSolverLangItem::FnMut) => {
395+
G::consider_builtin_fn_trait_candidates(self, goal, ty::ClosureKind::FnMut)
396+
}
397+
Some(TraitSolverLangItem::FnOnce) => {
398+
G::consider_builtin_fn_trait_candidates(self, goal, ty::ClosureKind::FnOnce)
399+
}
400+
Some(TraitSolverLangItem::AsyncFn) => {
401+
G::consider_builtin_async_fn_trait_candidates(self, goal, ty::ClosureKind::Fn)
402+
}
403+
Some(TraitSolverLangItem::AsyncFnMut) => {
404+
G::consider_builtin_async_fn_trait_candidates(
405+
self,
406+
goal,
407+
ty::ClosureKind::FnMut,
408+
)
409+
}
410+
Some(TraitSolverLangItem::AsyncFnOnce) => {
411+
G::consider_builtin_async_fn_trait_candidates(
412+
self,
413+
goal,
414+
ty::ClosureKind::FnOnce,
415+
)
416+
}
395417
Some(TraitSolverLangItem::PointerLike) => {
396418
G::consider_builtin_pointer_like_candidate(self, goal)
397419
}

compiler/rustc_type_ir/src/interner.rs

Lines changed: 0 additions & 4 deletions
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

Lines changed: 6 additions & 0 deletions
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,
@@ -17,6 +20,9 @@ pub enum TraitSolverLangItem {
1720
Destruct,
1821
DiscriminantKind,
1922
DynMetadata,
23+
Fn,
24+
FnMut,
25+
FnOnce,
2026
FnPtrTrait,
2127
FusedIterator,
2228
Future,

0 commit comments

Comments
 (0)