From 728a2db35e76f5126a405db917757ee43910c136 Mon Sep 17 00:00:00 2001 From: varkor Date: Fri, 26 Apr 2019 00:26:33 +0100 Subject: [PATCH] Add expect_ty method to Kind --- src/librustc/ty/subst.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/librustc/ty/subst.rs b/src/librustc/ty/subst.rs index b8ae0430502..ed3da31fb89 100644 --- a/src/librustc/ty/subst.rs +++ b/src/librustc/ty/subst.rs @@ -123,6 +123,16 @@ pub fn unpack(self) -> UnpackedKind<'tcx> { } } } + + /// Unpack the `Kind` as a type when it is known certainly to be a type. + /// This is true in cases where `Substs` is used in places where the kinds are known + /// to be limited (e.g. in tuples, where the only parameters are type parameters). + pub fn expect_ty(self) -> Ty<'tcx> { + match self.unpack() { + UnpackedKind::Type(ty) => ty, + _ => bug!("expected a type, but found another kind"), + } + } } impl<'a, 'tcx> Lift<'tcx> for Kind<'a> { @@ -174,8 +184,7 @@ fn decode(d: &mut D) -> Result, D::Error> { impl<'a, 'gcx, 'tcx> InternalSubsts<'tcx> { /// Creates a `InternalSubsts` that maps each generic parameter to itself. - pub fn identity_for_item(tcx: TyCtxt<'a, 'gcx, 'tcx>, def_id: DefId) - -> SubstsRef<'tcx> { + pub fn identity_for_item(tcx: TyCtxt<'a, 'gcx, 'tcx>, def_id: DefId) -> SubstsRef<'tcx> { Self::for_item(tcx, def_id, |param, _| { tcx.mk_param_from_def(param) }) -- 2.44.0