summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-07-14 08:00:03 +0000
committerPaul Phillips <paulp@improving.org>2010-07-14 08:00:03 +0000
commit0661398cebda25f3a775e1b2e356125859e2b37c (patch)
tree2e7ff114db3b0573fff5cf0340aa058e4100ff6a /src/library
parent78d96afa56e51c7ef2ed317ca96b4c4e345ba105 (diff)
downloadscala-0661398cebda25f3a775e1b2e356125859e2b37c.tar.gz
scala-0661398cebda25f3a775e1b2e356125859e2b37c.tar.bz2
scala-0661398cebda25f3a775e1b2e356125859e2b37c.zip
Moved the burden of forgivingness for string sl...
Moved the burden of forgivingness for string slices into StringOps where it belongs. Review by odersky.
Diffstat (limited to 'src/library')
-rwxr-xr-xsrc/library/scala/collection/IndexedSeqOptimized.scala8
-rw-r--r--src/library/scala/collection/immutable/StringOps.scala12
2 files changed, 14 insertions, 6 deletions
diff --git a/src/library/scala/collection/IndexedSeqOptimized.scala b/src/library/scala/collection/IndexedSeqOptimized.scala
index 59b68aaaa6..6360de33f1 100755
--- a/src/library/scala/collection/IndexedSeqOptimized.scala
+++ b/src/library/scala/collection/IndexedSeqOptimized.scala
@@ -139,16 +139,16 @@ trait IndexedSeqOptimized[+A, +Repr] extends IndexedSeqLike[A, Repr] { self =>
def init: Repr = if (length > 0) slice(0, length - 1) else super.init
override /*TraversableLike*/
- def take(n: Int): Repr = if (n < length) slice(0, n) else slice(0, length)
+ def take(n: Int): Repr = slice(0, n)
override /*TraversableLike*/
- def drop(n: Int): Repr = if (n < length) slice(n, length) else newBuilder.result
+ def drop(n: Int): Repr = slice(n, length)
override /*IterableLike*/
- def takeRight(n: Int): Repr = if (n < length) slice(length - n, length) else slice(0, length)
+ def takeRight(n: Int): Repr = slice(length - n, length)
override /*IterableLike*/
- def dropRight(n: Int): Repr = if (n < length) slice(0, length - n) else newBuilder.result
+ def dropRight(n: Int): Repr = slice(0, length - n)
override /*TraversableLike*/
def splitAt(n: Int): (Repr, Repr) = (take(n), drop(n))
diff --git a/src/library/scala/collection/immutable/StringOps.scala b/src/library/scala/collection/immutable/StringOps.scala
index 8a27a4ad4b..0d8f5f6b83 100644
--- a/src/library/scala/collection/immutable/StringOps.scala
+++ b/src/library/scala/collection/immutable/StringOps.scala
@@ -36,8 +36,16 @@ final class StringOps(override val repr: String) extends StringLike[String] {
/** Creates a string builder buffer as builder for this class */
override protected[this] def newBuilder = new StringBuilder
- override def slice(from: Int, until: Int): String =
- repr.substring(from max 0, until min repr.length)
+ override def slice(from: Int, until: Int): String = {
+ /** Slice must be forgiving on all out of bounds indices and
+ * substring is not.
+ */
+ val start = from max 0
+ val end = until min repr.length
+
+ if (start >= end) ""
+ else repr.substring(start, end)
+ }
override def toString = repr
}