From f5a367c7bb50f74d82c3909d5c961baac879242e Mon Sep 17 00:00:00 2001 From: Steven Malis Date: Sat, 7 Apr 2018 15:47:18 -0700 Subject: [PATCH] Update based on RangeBounds trait being moved to libcore. --- src/libcore/ops/range.rs | 75 ++++++++++++++++--- src/librustc_errors/emitter.rs | 4 +- .../borrow_check/nll/universal_regions.rs | 8 +- 3 files changed, 69 insertions(+), 18 deletions(-) diff --git a/src/libcore/ops/range.rs b/src/libcore/ops/range.rs index 3f667407125..210a0e118d5 100644 --- a/src/libcore/ops/range.rs +++ b/src/libcore/ops/range.rs @@ -109,8 +109,12 @@ impl> Range { /// assert!(!(3..2).contains(3)); /// ``` #[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")] - pub fn contains(&self, item: Idx) -> bool { - (self.start <= item) && (item < self.end) + pub fn contains(&self, item: &U) -> bool + where + Idx: PartialOrd, + U: ?Sized, + { + >::contains(self, item) } /// Returns `true` if the range contains no items. @@ -179,7 +183,6 @@ impl fmt::Debug for RangeFrom { } } -#[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")] impl> RangeFrom { /// Returns `true` if `item` is contained in the range. /// @@ -192,8 +195,13 @@ impl> RangeFrom { /// assert!( (3..).contains(3)); /// assert!( (3..).contains(1_000_000_000)); /// ``` - pub fn contains(&self, item: Idx) -> bool { - (self.start <= item) + #[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")] + pub fn contains(&self, item: &U) -> bool + where + Idx: PartialOrd, + U: ?Sized, + { + >::contains(self, item) } } @@ -250,7 +258,6 @@ impl fmt::Debug for RangeTo { } } -#[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")] impl> RangeTo { /// Returns `true` if `item` is contained in the range. /// @@ -263,8 +270,13 @@ impl> RangeTo { /// assert!( (..5).contains(4)); /// assert!(!(..5).contains(5)); /// ``` - pub fn contains(&self, item: Idx) -> bool { - (item < self.end) + #[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")] + pub fn contains(&self, item: &U) -> bool + where + Idx: PartialOrd, + U: ?Sized, + { + >::contains(self, item) } } @@ -328,8 +340,12 @@ impl> RangeInclusive { /// assert!(!(3..=2).contains(3)); /// ``` #[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")] - pub fn contains(&self, item: Idx) -> bool { - self.start <= item && item <= self.end + pub fn contains(&self, item: &U) -> bool + where + Idx: PartialOrd, + U: ?Sized, + { + >::contains(self, item) } /// Returns `true` if the range contains no items. @@ -435,8 +451,13 @@ impl> RangeToInclusive { /// assert!( (..=5).contains(5)); /// assert!(!(..=5).contains(6)); /// ``` - pub fn contains(&self, item: Idx) -> bool { - (item <= self.end) + #[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")] + pub fn contains(&self, item: &U) -> bool + where + Idx: PartialOrd, + U: ?Sized, + { + >::contains(self, item) } } @@ -537,6 +558,36 @@ pub trait RangeBounds { /// # } /// ``` fn end(&self) -> Bound<&T>; + + /// Returns `true` if `item` is contained in the range. + #[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")] + fn contains(&self, item: &U) -> bool + where + T: PartialOrd, + U: ?Sized, + { + match self.start() { + Included(ref start) => if *start > item { + return false; + }, + Excluded(ref start) => if *start >= item { + return false; + }, + Unbounded => (), + }; + + match self.end() { + Included(ref end) => if *end < item { + return false; + }, + Excluded(ref end) => if *end <= item { + return false; + }, + Unbounded => (), + } + + true + } } use self::Bound::{Excluded, Included, Unbounded}; diff --git a/src/librustc_errors/emitter.rs b/src/librustc_errors/emitter.rs index ca5d3f55a0f..91075ddcfa4 100644 --- a/src/librustc_errors/emitter.rs +++ b/src/librustc_errors/emitter.rs @@ -1389,8 +1389,8 @@ fn num_overlap(a_start: usize, a_end: usize, b_start: usize, b_end:usize, inclus } else { 0 }; - (b_start..b_end + extra).contains(a_start) || - (a_start..a_end + extra).contains(b_start) + (b_start..b_end + extra).contains(&a_start) || + (a_start..a_end + extra).contains(&b_start) } fn overlaps(a1: &Annotation, a2: &Annotation, padding: usize) -> bool { num_overlap(a1.start_col, a1.end_col + padding, a2.start_col, a2.end_col, false) diff --git a/src/librustc_mir/borrow_check/nll/universal_regions.rs b/src/librustc_mir/borrow_check/nll/universal_regions.rs index 39dc29ba18b..0fe6265345d 100644 --- a/src/librustc_mir/borrow_check/nll/universal_regions.rs +++ b/src/librustc_mir/borrow_check/nll/universal_regions.rs @@ -259,18 +259,18 @@ impl<'tcx> UniversalRegions<'tcx> { /// True if `r` is a member of this set of universal regions. pub fn is_universal_region(&self, r: RegionVid) -> bool { - (FIRST_GLOBAL_INDEX..self.num_universals).contains(r.index()) + (FIRST_GLOBAL_INDEX..self.num_universals).contains(&r.index()) } /// Classifies `r` as a universal region, returning `None` if this /// is not a member of this set of universal regions. pub fn region_classification(&self, r: RegionVid) -> Option { let index = r.index(); - if (FIRST_GLOBAL_INDEX..self.first_extern_index).contains(index) { + if (FIRST_GLOBAL_INDEX..self.first_extern_index).contains(&index) { Some(RegionClassification::Global) - } else if (self.first_extern_index..self.first_local_index).contains(index) { + } else if (self.first_extern_index..self.first_local_index).contains(&index) { Some(RegionClassification::External) - } else if (self.first_local_index..self.num_universals).contains(index) { + } else if (self.first_local_index..self.num_universals).contains(&index) { Some(RegionClassification::Local) } else { None