]> git.lizzy.rs Git - rust.git/commitdiff
introduce `canonical_var_for_region` helper fn
authorNiko Matsakis <niko@alum.mit.edu>
Tue, 25 Sep 2018 18:53:50 +0000 (14:53 -0400)
committerNiko Matsakis <niko@alum.mit.edu>
Mon, 15 Oct 2018 12:57:22 +0000 (08:57 -0400)
src/librustc/infer/canonical/canonicalizer.rs

index 8b859d473d718b66e37b5ae889492434ff14ef51..99a25f6c70200e82669ff15134ff4600866b87c6 100644 (file)
@@ -193,25 +193,17 @@ fn fold_region(&mut self, r: ty::Region<'tcx>) -> ty::Region<'tcx> {
                     .unwrap()
                     .borrow_region_constraints()
                     .opportunistic_resolve_var(self.tcx, vid);
-                let info = CanonicalVarInfo {
-                    kind: CanonicalVarKind::Region,
-                };
                 debug!(
                     "canonical: region var found with vid {:?}, \
                      opportunistically resolved to {:?}",
                     vid, r
                 );
-                let cvar = self.canonical_var(info, r.into());
-                self.tcx().mk_region(ty::ReCanonical(cvar))
+                self.canonical_var_for_region(r)
             }
 
             ty::ReStatic => {
                 if self.canonicalize_region_mode.static_region {
-                    let info = CanonicalVarInfo {
-                        kind: CanonicalVarKind::Region,
-                    };
-                    let cvar = self.canonical_var(info, r.into());
-                    self.tcx().mk_region(ty::ReCanonical(cvar))
+                    self.canonical_var_for_region(r)
                 } else {
                     r
                 }
@@ -224,11 +216,7 @@ fn fold_region(&mut self, r: ty::Region<'tcx>) -> ty::Region<'tcx> {
             | ty::ReEmpty
             | ty::ReErased => {
                 if self.canonicalize_region_mode.other_free_regions {
-                    let info = CanonicalVarInfo {
-                        kind: CanonicalVarKind::Region,
-                    };
-                    let cvar = self.canonical_var(info, r.into());
-                    self.tcx().mk_region(ty::ReCanonical(cvar))
+                    self.canonical_var_for_region(r)
                 } else {
                     r
                 }
@@ -414,6 +402,14 @@ fn canonical_var(&mut self, info: CanonicalVarInfo, kind: Kind<'tcx>) -> Canonic
         }
     }
 
+    fn canonical_var_for_region(&mut self, r: ty::Region<'tcx>) -> ty::Region<'tcx> {
+        let info = CanonicalVarInfo {
+            kind: CanonicalVarKind::Region,
+        };
+        let cvar = self.canonical_var(info, r.into());
+        self.tcx().mk_region(ty::ReCanonical(cvar))
+    }
+
     /// Given a type variable `ty_var` of the given kind, first check
     /// if `ty_var` is bound to anything; if so, canonicalize
     /// *that*. Otherwise, create a new canonical variable for