Move special methods from ClosureKind back into rustc
This commit is contained in:
parent
9f0849f9e0
commit
742f193ef8
8 changed files with 27 additions and 57 deletions
|
@ -36,6 +36,17 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Given a [`ty::ClosureKind`], get the [`DefId`] of its corresponding `Fn`-family
|
||||
/// trait, if it is defined.
|
||||
pub fn fn_trait_kind_to_def_id(self, kind: ty::ClosureKind) -> Option<DefId> {
|
||||
let items = self.lang_items();
|
||||
match kind {
|
||||
ty::ClosureKind::Fn => items.fn_trait(),
|
||||
ty::ClosureKind::FnMut => items.fn_mut_trait(),
|
||||
ty::ClosureKind::FnOnce => items.fn_once_trait(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns `true` if `id` is a `DefId` of [`Fn`], [`FnMut`] or [`FnOnce`] traits.
|
||||
pub fn is_fn_trait(self, id: DefId) -> bool {
|
||||
self.fn_trait_kind_from_def_id(id).is_some()
|
||||
|
|
|
@ -151,30 +151,6 @@ impl<'tcx> Interner for TyCtxt<'tcx> {
|
|||
) -> Self::Const {
|
||||
Const::new_bound(self, debruijn, var, ty)
|
||||
}
|
||||
|
||||
fn fn_def_id(self) -> Self::DefId {
|
||||
self.require_lang_item(hir::LangItem::Fn, None)
|
||||
}
|
||||
|
||||
fn fn_mut_def_id(self) -> Self::DefId {
|
||||
self.require_lang_item(hir::LangItem::FnMut, None)
|
||||
}
|
||||
|
||||
fn fn_once_def_id(self) -> Self::DefId {
|
||||
self.require_lang_item(hir::LangItem::FnOnce, None)
|
||||
}
|
||||
|
||||
fn i8_type(self) -> Self::Ty {
|
||||
self.types.i8
|
||||
}
|
||||
|
||||
fn i16_type(self) -> Self::Ty {
|
||||
self.types.i16
|
||||
}
|
||||
|
||||
fn i32_type(self) -> Self::Ty {
|
||||
self.types.i32
|
||||
}
|
||||
}
|
||||
|
||||
type InternedSet<'tcx, T> = ShardedHashMap<InternedInSet<'tcx, T>, ()>;
|
||||
|
|
|
@ -2811,6 +2811,15 @@ impl<'tcx> Ty<'tcx> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Inverse of [`Ty::to_opt_closure_kind`].
|
||||
pub fn from_closure_kind(tcx: TyCtxt<'tcx>, kind: ty::ClosureKind) -> Ty<'tcx> {
|
||||
match kind {
|
||||
ty::ClosureKind::Fn => tcx.types.i8,
|
||||
ty::ClosureKind::FnMut => tcx.types.i16,
|
||||
ty::ClosureKind::FnOnce => tcx.types.i32,
|
||||
}
|
||||
}
|
||||
|
||||
/// Fast path helper for testing if a type is `Sized`.
|
||||
///
|
||||
/// Returning true means the type is known to be sized. Returning
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue