diff options
author | Martin Odersky <odersky@gmail.com> | 2013-04-23 17:04:34 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-04-23 17:04:34 +0200 |
commit | fc8fc177d2dfd270e57996099deef2e4a3a975ed (patch) | |
tree | c4c143f88249c6a40a9f1e4c886260d26267b75e /src/dotty/tools/dotc/parsing/Scanners.scala | |
parent | 8566b093c35d5cc5b29544b5b2c3f01b0ec4c1bd (diff) | |
download | dotty-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.scala | 46 |
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) } } |