diff options
| author | Matthew Jasper <mjjasper1@gmail.com> | 2020-06-18 18:09:18 +0100 |
|---|---|---|
| committer | Matthew Jasper <mjjasper1@gmail.com> | 2020-06-18 18:09:18 +0100 |
| commit | aa117047f05bba9b6838a773a64aaa8f04f51208 (patch) | |
| tree | 8a8a83ee620c6d1f3c17eb53ef3794e0c25d32bc | |
| parent | e9b0ce8afa5635d3825b5e76e0b3593d9086778a (diff) | |
| download | rust-aa117047f05bba9b6838a773a64aaa8f04f51208.tar.gz rust-aa117047f05bba9b6838a773a64aaa8f04f51208.zip | |
Add helper method for reusing an existing interned region
| -rw-r--r-- | src/librustc_infer/infer/canonical/canonicalizer.rs | 8 | ||||
| -rw-r--r-- | src/librustc_infer/infer/resolve.rs | 2 | ||||
| -rw-r--r-- | src/librustc_middle/ty/context.rs | 7 |
3 files changed, 9 insertions, 8 deletions
diff --git a/src/librustc_infer/infer/canonical/canonicalizer.rs b/src/librustc_infer/infer/canonical/canonicalizer.rs index 8695b9616ee..f1235aa243a 100644 --- a/src/librustc_infer/infer/canonical/canonicalizer.rs +++ b/src/librustc_infer/infer/canonical/canonicalizer.rs @@ -326,13 +326,7 @@ impl<'cx, 'tcx> TypeFolder<'tcx> for Canonicalizer<'cx, 'tcx> { opportunistically resolved to {:?}", vid, r ); - // micro-optimize -- avoid an interner look-up if the vid - // hasn't changed. - let r = if vid == resolved_vid { - r - } else { - self.tcx.mk_region(ty::ReVar(resolved_vid)) - }; + let r = self.tcx.reuse_or_mk_region(r, ty::ReVar(resolved_vid)); self.canonicalize_region_mode.canonicalize_free_region(self, r) } diff --git a/src/librustc_infer/infer/resolve.rs b/src/librustc_infer/infer/resolve.rs index bda38301f1c..d8a215792b0 100644 --- a/src/librustc_infer/infer/resolve.rs +++ b/src/librustc_infer/infer/resolve.rs @@ -85,7 +85,7 @@ impl<'a, 'tcx> TypeFolder<'tcx> for OpportunisticRegionResolver<'a, 'tcx> { .borrow_mut() .unwrap_region_constraints() .opportunistic_resolve_var(rid); - if resolved == rid { r } else { self.tcx().mk_region(ty::ReVar(resolved)) } + self.tcx().reuse_or_mk_region(r, ty::ReVar(resolved)) } _ => r, } diff --git a/src/librustc_middle/ty/context.rs b/src/librustc_middle/ty/context.rs index d5be3508d2d..f64d1702625 100644 --- a/src/librustc_middle/ty/context.rs +++ b/src/librustc_middle/ty/context.rs @@ -2081,6 +2081,13 @@ impl<'tcx> TyCtxt<'tcx> { }) } + /// Same a `self.mk_region(kind)`, but avoids accessing the interners if + /// `*r == kind`. + #[inline] + pub fn reuse_or_mk_region(self, r: Region<'tcx>, kind: RegionKind) -> Region<'tcx> { + if *r == kind { r } else { self.mk_region(kind) } + } + #[allow(rustc::usage_of_ty_tykind)] #[inline] pub fn mk_ty(&self, st: TyKind<'tcx>) -> Ty<'tcx> { |
