aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/parsing/Scanners.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-04-23 17:04:34 +0200
committerMartin Odersky <odersky@gmail.com>2013-04-23 17:04:34 +0200
commitfc8fc177d2dfd270e57996099deef2e4a3a975ed (patch)
treec4c143f88249c6a40a9f1e4c886260d26267b75e /src/dotty/tools/dotc/parsing/Scanners.scala
parent8566b093c35d5cc5b29544b5b2c3f01b0ec4c1bd (diff)
downloaddotty-fc8fc177d2dfd270e57996099deef2e4a3a975ed.tar.gz
dotty-fc8fc177d2dfd270e57996099deef2e4a3a975ed.tar.bz2
dotty-fc8fc177d2dfd270e57996099deef2e4a3a975ed.zip
Modifications in prepation of parsing.
Diffstat (limited to 'src/dotty/tools/dotc/parsing/Scanners.scala')
-rw-r--r--src/dotty/tools/dotc/parsing/Scanners.scala46
1 files changed, 22 insertions, 24 deletions
diff --git a/src/dotty/tools/dotc/parsing/Scanners.scala b/src/dotty/tools/dotc/parsing/Scanners.scala
index 2b3ec9bc2..7260269f9 100644
--- a/src/dotty/tools/dotc/parsing/Scanners.scala
+++ b/src/dotty/tools/dotc/parsing/Scanners.scala
@@ -91,7 +91,7 @@ object Scanners {
/** we need one token lookahead and one token history
*/
- private val next : TokenData = new TokenData0
+ val next : TokenData = new TokenData0
private val prev : TokenData = new TokenData0
/** a stack of tokens which indicates whether line-ends can be statement separators
@@ -193,32 +193,30 @@ object Scanners {
def postProcessToken() = {
// Join CASE + CLASS => CASECLASS, CASE + OBJECT => CASEOBJECT, SEMI + ELSE => ELSE
- if (token == CASE) {
+ def lookahead() = {
prev copyFrom this
- val nextLastOffset = lastCharOffset
fetchToken()
- def resetOffset() {
- offset = prev.offset
- lastOffset = prev.lastOffset
- }
- if (token == CLASS) {
- token = CASECLASS
- resetOffset()
- } else if (token == OBJECT) {
- token = CASEOBJECT
- resetOffset()
- } else {
- lastOffset = nextLastOffset
- next copyFrom this
- this copyFrom prev
- }
+ }
+ def reset(nextLastOffset: Offset) = {
+ lastOffset = nextLastOffset
+ next copyFrom this
+ this copyFrom prev
+ }
+ def fuse(tok: Int) = {
+ token = tok
+ offset = prev.offset
+ lastOffset = prev.lastOffset
+ }
+ if (token == CASE) {
+ val nextLastOffset = lastCharOffset
+ lookahead()
+ if (token == CLASS) fuse(CASECLASS)
+ else if (token == OBJECT) fuse(CASEOBJECT)
+ else reset(nextLastOffset)
} else if (token == SEMI) {
- prev copyFrom this
- fetchToken()
- if (token != ELSE) {
- next copyFrom this
- this copyFrom prev
- }
+ val nextLastOffset = lastCharOffset
+ lookahead()
+ if (token != ELSE) reset(nextLastOffset)
}
}