From 5a7e1cb46a05fd176e5488beb58f72a05f4b1a0d Mon Sep 17 00:00:00 2001 From: Mazdak Farrokhzad Date: Sun, 25 Aug 2019 00:27:55 +0200 Subject: [PATCH] typeck/pat.rs: dedup in `check_pat_box`. --- src/librustc_typeck/check/pat.rs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/librustc_typeck/check/pat.rs b/src/librustc_typeck/check/pat.rs index 7506cbdd510..3f6fc95360a 100644 --- a/src/librustc_typeck/check/pat.rs +++ b/src/librustc_typeck/check/pat.rs @@ -952,22 +952,21 @@ fn check_pat_box( discrim_span: Option, ) -> Ty<'tcx> { let tcx = self.tcx; - let inner_ty = self.next_ty_var(TypeVariableOrigin { - kind: TypeVariableOriginKind::TypeInference, - span: inner.span, - }); - let uniq_ty = tcx.mk_box(inner_ty); - - if self.check_dereferencable(span, expected, &inner) { + let (box_ty, inner_ty) = if self.check_dereferencable(span, expected, &inner) { // Here, `demand::subtype` is good enough, but I don't // think any errors can be introduced by using `demand::eqtype`. - self.demand_eqtype_pat(span, expected, uniq_ty, discrim_span); - self.check_pat(&inner, inner_ty, def_bm, discrim_span); - uniq_ty + let inner_ty = self.next_ty_var(TypeVariableOrigin { + kind: TypeVariableOriginKind::TypeInference, + span: inner.span, + }); + let box_ty = tcx.mk_box(inner_ty); + self.demand_eqtype_pat(span, expected, box_ty, discrim_span); + (box_ty, inner_ty) } else { - self.check_pat(&inner, tcx.types.err, def_bm, discrim_span); - tcx.types.err - } + (tcx.types.err, tcx.types.err) + }; + self.check_pat(&inner, inner_ty, def_bm, discrim_span); + box_ty } fn check_pat_ref( -- 2.44.0