summaryrefslogtreecommitdiff
path: root/ir/src/main/scala/scala/scalajs/ir/Position.scala
diff options
context:
space:
mode:
Diffstat (limited to 'ir/src/main/scala/scala/scalajs/ir/Position.scala')
-rw-r--r--ir/src/main/scala/scala/scalajs/ir/Position.scala42
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)
+}