diff options
author | Som Snytt <som.snytt@gmail.com> | 2013-12-17 20:26:50 -0800 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2014-01-08 07:43:42 -0800 |
commit | bb2e99a69201060b88dd25602def42f31ba9ab65 (patch) | |
tree | 7a3e3a16a0a5e9ee7221f26a6ec50464856989a3 /src/compiler | |
parent | ada8d9156baad2d8a24c1a40e032eb4bc7154bac (diff) | |
download | scala-bb2e99a69201060b88dd25602def42f31ba9ab65.tar.gz scala-bb2e99a69201060b88dd25602def42f31ba9ab65.tar.bz2 scala-bb2e99a69201060b88dd25602def42f31ba9ab65.zip |
SI-8015 Count lines by EOLs
Source lines were counted by "line break chars", including FF.
Clients of `pos.line` seem to all expect the ordinary line num,
so that is what they get.
Unicode processing now precedes line ending processing.
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/Scanners.scala | 6 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/util/CharArrayReader.scala | 26 |
2 files changed, 20 insertions, 12 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala b/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala index 87bd498ea1..32c15b04aa 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala @@ -206,9 +206,9 @@ trait Scanners extends ScannersCommon { token = kwArray(idx) if (token == IDENTIFIER && allowIdent != name) { if (name == nme.MACROkw) - syntaxError(name+" is now a reserved word; usage as an identifier is disallowed") + syntaxError(s"$name is now a reserved word; usage as an identifier is disallowed") else if (emitIdentifierDeprecationWarnings) - deprecationWarning(name+" is now a reserved word; usage as an identifier is deprecated") + deprecationWarning(s"$name is now a reserved word; usage as an identifier is deprecated") } } } @@ -389,7 +389,7 @@ trait Scanners extends ScannersCommon { // println("blank line found at "+lastOffset+":"+(lastOffset to idx).map(buf(_)).toList) return true } - if (idx == end) return false + if (idx == end) return false } while (ch <= ' ') } idx += 1; ch = buf(idx) diff --git a/src/compiler/scala/tools/nsc/util/CharArrayReader.scala b/src/compiler/scala/tools/nsc/util/CharArrayReader.scala index f116e4af34..e6f95eb0d6 100644 --- a/src/compiler/scala/tools/nsc/util/CharArrayReader.scala +++ b/src/compiler/scala/tools/nsc/util/CharArrayReader.scala @@ -46,7 +46,7 @@ abstract class CharArrayReader extends CharArrayReaderData { self => def isUnicodeEscape = charOffset == lastUnicodeOffset /** Advance one character; reducing CR;LF pairs to just LF */ - final def nextChar() { + final def nextChar(): Unit = { if (charOffset >= buf.length) { ch = SU } else { @@ -54,7 +54,10 @@ abstract class CharArrayReader extends CharArrayReaderData { self => ch = c charOffset += 1 if (c == '\\') potentialUnicode() - else if (c < ' ') { skipCR(); potentialLineEnd() } + if (ch < ' ') { + skipCR() + potentialLineEnd() + } } } @@ -74,7 +77,7 @@ abstract class CharArrayReader extends CharArrayReaderData { self => } /** Interpret \\uxxxx escapes */ - private def potentialUnicode() { + private def potentialUnicode() = { def evenSlashPrefix: Boolean = { var p = charOffset - 2 while (p >= 0 && buf(p) == '\\') p -= 1 @@ -105,13 +108,17 @@ abstract class CharArrayReader extends CharArrayReaderData { self => } /** replace CR;LF by LF */ - private def skipCR() { - if (ch == CR) - if (charOffset < buf.length && buf(charOffset) == LF) { - charOffset += 1 - ch = LF + private def skipCR() = + if (ch == CR && charOffset < buf.length) + buf(charOffset) match { + case LF => + charOffset += 1 + ch = LF + case '\\' => + if (lookaheadReader.getu == LF) + potentialUnicode() + case _ => } - } /** Handle line ends */ private def potentialLineEnd() { @@ -132,5 +139,6 @@ abstract class CharArrayReader extends CharArrayReaderData { self => def error(offset: Int, msg: String) = self.error(offset, msg) /** A mystery why CharArrayReader.nextChar() returns Unit */ def getc() = { nextChar() ; ch } + def getu() = { require(buf(charOffset) == '\\') ; ch = '\\' ; charOffset += 1 ; potentialUnicode() ; ch } } } |