aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-10-03 14:18:46 +0200
committerFelix Mulder <felix.mulder@gmail.com>2016-10-10 13:25:36 +0200
commit29d19ba41622b1a904d4960869866c0967db6c37 (patch)
treefaf475c34a11b4d5a510188eadc43a2e3565c83e
parent41d642947c678efdd392bd01c632ecd53fd26b48 (diff)
downloaddotty-29d19ba41622b1a904d4960869866c0967db6c37.tar.gz
dotty-29d19ba41622b1a904d4960869866c0967db6c37.tar.bz2
dotty-29d19ba41622b1a904d4960869866c0967db6c37.zip
Correct line extraction from SourcePosition
-rw-r--r--src/dotty/tools/dotc/parsing/Parsers.scala24
-rw-r--r--src/dotty/tools/dotc/util/SourcePosition.scala2
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
}