diff --git a/src/main/scala/millfork/parser/MfParser.scala b/src/main/scala/millfork/parser/MfParser.scala index 521944d4..62a32be2 100644 --- a/src/main/scala/millfork/parser/MfParser.scala +++ b/src/main/scala/millfork/parser/MfParser.scala @@ -62,7 +62,7 @@ abstract class MfParser[T](fileId: String, input: String, currentDirectory: Stri parse } - private val lineStarts: Array[Int] = (0 +: input.zipWithIndex.filter(_._1 == '\n').map(_._2)).toArray + private val lineStarts: Array[Int] = (-1 +: input.zipWithIndex.filter(_._1 == '\n').map(_._2).map(_+1)).toArray def position(label: String = ""): P[Position] = Index.map(i => indexToPosition(i, label)) @@ -71,7 +71,7 @@ abstract class MfParser[T](fileId: String, input: String, currentDirectory: Stri if (lineNumber < 0) { lineNumber = - lineNumber - 2 } - val columnNumber = i - lineStarts(lineNumber) + val columnNumber = i - lineStarts(lineNumber) + 1 lineNumber += 1 val newPosition = Position(fileId, lineNumber, columnNumber, i) if (newPosition.cursor > lastPosition.cursor) { diff --git a/src/test/scala/millfork/test/ParserSuite.scala b/src/test/scala/millfork/test/ParserSuite.scala index e5e0c516..068d721d 100644 --- a/src/test/scala/millfork/test/ParserSuite.scala +++ b/src/test/scala/millfork/test/ParserSuite.scala @@ -86,4 +86,13 @@ class ParserSuite extends FunSuite with Matchers { |} |""".stripMargin) } + + test("EOL error reporting") { + ShouldNotParse( + """ + |void main() { + | for i, + |} + |""".stripMargin) + } }