summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/immutable
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2016-12-20 13:19:19 +1000
committerJason Zaugg <jzaugg@gmail.com>2016-12-20 13:19:19 +1000
commit079e8dc61704a768792c6b210a5b0cd25522ee55 (patch)
tree37154f37a745c9c7535cbe0a7f6cef486beb5870 /src/library/scala/collection/immutable
parent56fb9172756d95ef903c36efcf54f1ae95c64b4b (diff)
parent23548c4301e48cb69f05cd01ceba418dc9c36d6c (diff)
downloadscala-079e8dc61704a768792c6b210a5b0cd25522ee55.tar.gz
scala-079e8dc61704a768792c6b210a5b0cd25522ee55.tar.bz2
scala-079e8dc61704a768792c6b210a5b0cd25522ee55.zip
Merge remote-tracking branch 'origin/2.11.x' into merge/2.11.x-to-2.12.x-20161220
Conflicts: bincompat-backward.whitelist.conf build.xml src/compiler/scala/tools/nsc/typechecker/Typers.scala src/library/scala/collection/immutable/NumericRange.scala
Diffstat (limited to 'src/library/scala/collection/immutable')
-rw-r--r--src/library/scala/collection/immutable/NumericRange.scala9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/library/scala/collection/immutable/NumericRange.scala b/src/library/scala/collection/immutable/NumericRange.scala
index ef3fa99971..f1b831bf75 100644
--- a/src/library/scala/collection/immutable/NumericRange.scala
+++ b/src/library/scala/collection/immutable/NumericRange.scala
@@ -114,13 +114,18 @@ extends AbstractSeq[T] with IndexedSeq[T] with Serializable {
import NumericRange.defaultOrdering
override def min[T1 >: T](implicit ord: Ordering[T1]): T =
- if (ord eq defaultOrdering(num)) {
+ // We can take the fast path:
+ // - If the Integral of this NumericRange is also the requested Ordering
+ // (Integral <: Ordering). This can happen for custom Integral types.
+ // - The Ordering is the default Ordering of a well-known Integral type.
+ if ((ord eq num) || defaultOrdering.get(num).exists(ord eq _)) {
if (num.signum(step) > 0) head
else last
} else super.min(ord)
override def max[T1 >: T](implicit ord: Ordering[T1]): T =
- if (ord eq defaultOrdering(num)) {
+ // See comment for fast path in min().
+ if ((ord eq num) || defaultOrdering.get(num).exists(ord eq _)) {
if (num.signum(step) > 0) last
else head
} else super.max(ord)