diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-01-29 08:21:02 -0800 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2014-01-29 08:21:02 -0800 |
commit | f0809f41149174634abc1034e4b17e944c491dcc (patch) | |
tree | acfd9a1134cf1e810ed4ef8200845c380f3b0da0 /src/reflect | |
parent | 3255f841cd100c2e7fcbec8253649b55a7014396 (diff) | |
parent | 0eefa77be199b1d8186a7a6978f8e01132f35cd9 (diff) | |
download | scala-f0809f41149174634abc1034e4b17e944c491dcc.tar.gz scala-f0809f41149174634abc1034e4b17e944c491dcc.tar.bz2 scala-f0809f41149174634abc1034e4b17e944c491dcc.zip |
Merge pull request #3427 from retronym/ticket/8205
Avoid long, slow march to AIIOBE in SourceFile#lineContent
Diffstat (limited to 'src/reflect')
-rw-r--r-- | src/reflect/scala/reflect/internal/util/SourceFile.scala | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/reflect/scala/reflect/internal/util/SourceFile.scala b/src/reflect/scala/reflect/internal/util/SourceFile.scala index 9866b043bb..add072aa71 100644 --- a/src/reflect/scala/reflect/internal/util/SourceFile.scala +++ b/src/reflect/scala/reflect/internal/util/SourceFile.scala @@ -40,8 +40,8 @@ abstract class SourceFile { def lineToString(index: Int): String = { val start = lineToOffset(index) var end = start - while (!isEndOfLine(end)) end += 1 - content.slice(start, end) mkString "" + while (!isEndOfLine(end) && end <= length) end += 1 + new String(content, start, end - start) } @tailrec @@ -136,7 +136,7 @@ class BatchSourceFile(val file : AbstractFile, val content0: Array[Char]) extend private def charAtIsEOL(idx: Int)(p: Char => Boolean) = { // don't identify the CR in CR LF as a line break, since LF will do. - def notCRLF0 = content(idx) != CR || idx + 1 >= length || content(idx + 1) != LF + def notCRLF0 = content(idx) != CR || !content.isDefinedAt(idx + 1) || content(idx + 1) != LF idx < length && notCRLF0 && p(content(idx)) } |