about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2020-01-28 10:48:19 +0900
committerGitHub <noreply@github.com>2020-01-28 10:48:19 +0900
commit8bc0e48540b38edfae892828db6cacd3bc4e5b95 (patch)
treee2c5ddbba647272e74d1a60def45f234c4b7940e /src
parent1e47ca518f3efcbdd7b45baba6eead385c909878 (diff)
parentde7f16d4313791a51b28822cbf08e8fbcaf78bde (diff)
downloadrust-8bc0e48540b38edfae892828db6cacd3bc4e5b95.tar.gz
rust-8bc0e48540b38edfae892828db6cacd3bc4e5b95.zip
Rollup merge of #68571 - Centril:check_in_cx, r=oli-obk
check_match: extract common logic

This is part of work on `hir::ExprKind::Let` which I thought made sense on its own (though makes even more sense with `::Let`).

r? @oli-obk
Diffstat (limited to 'src')
-rw-r--r--src/librustc_mir_build/hair/pattern/_match.rs2
-rw-r--r--src/librustc_mir_build/hair/pattern/check_match.rs11
2 files changed, 8 insertions, 5 deletions
diff --git a/src/librustc_mir_build/hair/pattern/_match.rs b/src/librustc_mir_build/hair/pattern/_match.rs
index a2ce224904b..08ed6b521b5 100644
--- a/src/librustc_mir_build/hair/pattern/_match.rs
+++ b/src/librustc_mir_build/hair/pattern/_match.rs
@@ -586,7 +586,7 @@ impl<'a, 'tcx> MatchCheckCtxt<'a, 'tcx> {
         tcx: TyCtxt<'tcx>,
         param_env: ty::ParamEnv<'tcx>,
         module: DefId,
-        f: impl for<'b> FnOnce(MatchCheckCtxt<'b, 'tcx>) -> R,
+        f: impl FnOnce(MatchCheckCtxt<'_, 'tcx>) -> R,
     ) -> R {
         let pattern_arena = TypedArena::default();
 
diff --git a/src/librustc_mir_build/hair/pattern/check_match.rs b/src/librustc_mir_build/hair/pattern/check_match.rs
index 49b7c2d41fc..82822f0c471 100644
--- a/src/librustc_mir_build/hair/pattern/check_match.rs
+++ b/src/librustc_mir_build/hair/pattern/check_match.rs
@@ -140,6 +140,11 @@ impl<'tcx> MatchVisitor<'_, 'tcx> {
         (pattern, pattern_ty)
     }
 
+    fn check_in_cx(&self, hir_id: HirId, f: impl FnOnce(MatchCheckCtxt<'_, 'tcx>)) {
+        let module = self.tcx.hir().get_module_parent(hir_id);
+        MatchCheckCtxt::create_and_enter(self.tcx, self.param_env, module, |cx| f(cx));
+    }
+
     fn check_match(
         &mut self,
         scrut: &hir::Expr<'_>,
@@ -151,8 +156,7 @@ impl<'tcx> MatchVisitor<'_, 'tcx> {
             self.check_patterns(arm.guard.is_some(), &arm.pat);
         }
 
-        let module = self.tcx.hir().get_module_parent(scrut.hir_id);
-        MatchCheckCtxt::create_and_enter(self.tcx, self.param_env, module, |ref mut cx| {
+        self.check_in_cx(scrut.hir_id, |ref mut cx| {
             let mut have_errors = false;
 
             let inlined_arms: Vec<_> = arms
@@ -180,8 +184,7 @@ impl<'tcx> MatchVisitor<'_, 'tcx> {
     }
 
     fn check_irrefutable(&self, pat: &'tcx Pat<'tcx>, origin: &str, sp: Option<Span>) {
-        let module = self.tcx.hir().get_module_parent(pat.hir_id);
-        MatchCheckCtxt::create_and_enter(self.tcx, self.param_env, module, |ref mut cx| {
+        self.check_in_cx(pat.hir_id, |ref mut cx| {
             let (pattern, pattern_ty) = self.lower_pattern(cx, pat, &mut false);
             let pats: Matrix<'_, '_> = vec![PatStack::from_pattern(pattern)].into_iter().collect();