diff options
author | Den Shabalin <den.shabalin@gmail.com> | 2013-07-08 20:44:24 +0200 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2013-07-08 21:12:14 +0200 |
commit | cbe5362a62904a88de78e3b068a544612e46c0cc (patch) | |
tree | 1f6ebff8e3739751d9c7240678ef366b80f427ab /src/compiler/scala/tools/nsc/util/CharArrayReader.scala | |
parent | b5f703f145a17c9cdbfede9192189630c2a9829c (diff) | |
download | scala-cbe5362a62904a88de78e3b068a544612e46c0cc.tar.gz scala-cbe5362a62904a88de78e3b068a544612e46c0cc.tar.bz2 scala-cbe5362a62904a88de78e3b068a544612e46c0cc.zip |
adds the lookahead routine to the parser
Introduces a scoping operator used to temporarily look into the future.
Backs up scanner data before evaluating a block and restores it after.
Not used anywhere, only necessary for the upcoming quasiquote patch
in order to reliably detect and accordingly process holes in quasiquoted
Scala syntax.
Diffstat (limited to 'src/compiler/scala/tools/nsc/util/CharArrayReader.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/util/CharArrayReader.scala | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/compiler/scala/tools/nsc/util/CharArrayReader.scala b/src/compiler/scala/tools/nsc/util/CharArrayReader.scala index 5c6f525c6f..f116e4af34 100644 --- a/src/compiler/scala/tools/nsc/util/CharArrayReader.scala +++ b/src/compiler/scala/tools/nsc/util/CharArrayReader.scala @@ -8,15 +8,7 @@ package util import scala.reflect.internal.Chars._ -abstract class CharArrayReader { self => - - val buf: Array[Char] - - def decodeUni: Boolean = true - - /** An error routine to call on bad unicode escapes \\uxxxx. */ - protected def error(offset: Int, msg: String): Unit - +trait CharArrayReaderData { /** the last read character */ var ch: Char = _ @@ -29,7 +21,26 @@ abstract class CharArrayReader { self => /** The start offset of the line before the current one */ var lastLineStartOffset: Int = 0 - private var lastUnicodeOffset = -1 + protected var lastUnicodeOffset = -1 + + def copyFrom(cd: CharArrayReaderData): this.type = { + this.ch = cd.ch + this.charOffset = cd.charOffset + this.lineStartOffset = cd.lineStartOffset + this.lastLineStartOffset = cd.lastLineStartOffset + this.lastUnicodeOffset = cd.lastUnicodeOffset + this + } +} + +abstract class CharArrayReader extends CharArrayReaderData { self => + + val buf: Array[Char] + + def decodeUni: Boolean = true + + /** An error routine to call on bad unicode escapes \\uxxxx. */ + protected def error(offset: Int, msg: String): Unit /** Is last character a unicode escape \\uxxxx? */ def isUnicodeEscape = charOffset == lastUnicodeOffset |