From: Mazdak Farrokhzad Date: Sat, 24 Aug 2019 22:27:55 +0000 (+0200) Subject: typeck/pat.rs: dedup in `check_pat_box`. X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;ds=sidebyside;h=5a7e1cb46a05fd176e5488beb58f72a05f4b1a0d;p=rust.git typeck/pat.rs: dedup in `check_pat_box`. --- 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(