diff options
Diffstat (limited to 'ir/src/main/scala/scala/scalajs/ir/Position.scala')
-rw-r--r-- | ir/src/main/scala/scala/scalajs/ir/Position.scala | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/ir/src/main/scala/scala/scalajs/ir/Position.scala b/ir/src/main/scala/scala/scalajs/ir/Position.scala new file mode 100644 index 0000000..3b6d0a2 --- /dev/null +++ b/ir/src/main/scala/scala/scalajs/ir/Position.scala @@ -0,0 +1,42 @@ +/* __ *\ +** ________ ___ / / ___ __ ____ Scala.js IR ** +** / __/ __// _ | / / / _ | __ / // __/ (c) 2014, LAMP/EPFL ** +** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** +** /____/\___/_/ |_/____/_/ | |__/ /____/ ** +** |/____/ ** +\* */ + + +package scala.scalajs.ir + +final case class Position( + /** Source file. */ + source: Position.SourceFile, + /** Zero-based line number. */ + line: Int, + /** Zero-based column number. */ + column: Int +) { + def show: String = s"$line:$column" + + def isEmpty: Boolean = { + source.getScheme == null && source.getRawAuthority == null && + source.getRawPath == "" && source.getRawQuery == null && + source.getRawFragment == null + } + + def isDefined: Boolean = !isEmpty + + def orElse(that: => Position): Position = if (isDefined) this else that +} + +object Position { + type SourceFile = java.net.URI + + object SourceFile { + def apply(f: java.io.File): SourceFile = f.toURI + def apply(f: String): SourceFile = new java.net.URI(f) + } + + val NoPosition = Position(SourceFile(""), 0, 0) +} |