diff options
author | Felix Mulder <felix.mulder@gmail.com> | 2016-10-03 14:18:46 +0200 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2016-10-10 13:25:36 +0200 |
commit | 29d19ba41622b1a904d4960869866c0967db6c37 (patch) | |
tree | faf475c34a11b4d5a510188eadc43a2e3565c83e | |
parent | 41d642947c678efdd392bd01c632ecd53fd26b48 (diff) | |
download | dotty-29d19ba41622b1a904d4960869866c0967db6c37.tar.gz dotty-29d19ba41622b1a904d4960869866c0967db6c37.tar.bz2 dotty-29d19ba41622b1a904d4960869866c0967db6c37.zip |
Correct line extraction from SourcePosition
-rw-r--r-- | src/dotty/tools/dotc/parsing/Parsers.scala | 24 | ||||
-rw-r--r-- | src/dotty/tools/dotc/util/SourcePosition.scala | 2 |
2 files changed, 12 insertions, 14 deletions
diff --git a/src/dotty/tools/dotc/parsing/Parsers.scala b/src/dotty/tools/dotc/parsing/Parsers.scala index 6d40107a8..f22556f27 100644 --- a/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/src/dotty/tools/dotc/parsing/Parsers.scala @@ -1012,22 +1012,20 @@ object Parsers { val tryOffset = in.offset atPos(in.skipToken()) { val body = expr() - val handler = + val (handler, handlerStart) = if (in.token == CATCH) { + val pos = in.offset in.nextToken() - expr() - } else EmptyTree - - // A block ends before RBRACE, if next token is RBRACE, simply add 1 - def realEnd(pos: Position) = - if (in.token == RBRACE) pos.end + 1 - else pos.end + (expr(), pos) + } else (EmptyTree, -1) handler match { - case Block(Nil, EmptyTree) => syntaxError( - new EmptyCatchBlock(body), - Position(tryOffset, realEnd(handler.pos)) - ) + case Block(Nil, EmptyTree) => + assert(handlerStart != -1) + syntaxError( + new EmptyCatchBlock(body), + Position(handlerStart, handler.pos.end) + ) case _ => } @@ -1036,7 +1034,7 @@ object Parsers { else { if (handler.isEmpty) warning( EmptyCatchAndFinallyBlock(body), - source atPos Position(tryOffset, realEnd(body.pos)) + source atPos Position(tryOffset, body.pos.end) ) EmptyTree } diff --git a/src/dotty/tools/dotc/util/SourcePosition.scala b/src/dotty/tools/dotc/util/SourcePosition.scala index d0f9cb887..a64f44417 100644 --- a/src/dotty/tools/dotc/util/SourcePosition.scala +++ b/src/dotty/tools/dotc/util/SourcePosition.scala @@ -17,7 +17,7 @@ extends interfaces.SourcePosition { /** The lines of the position */ def lines: List[Int] = - List.range(source.offsetToLine(start), source.offsetToLine(end)) match { + List.range(source.offsetToLine(start), source.offsetToLine(end + 1)) match { case Nil => line :: Nil case xs => xs } |