summaryrefslogtreecommitdiff
path: root/src/compiler/scala/reflect/common/Phase.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-05-16 21:09:48 +0000
committerPaul Phillips <paulp@improving.org>2011-05-16 21:09:48 +0000
commit1e5194b41cdc5563237381b80a9f948abbf96e6e (patch)
treec79e1e712b8085e3d255e6185466b998fd471eaf /src/compiler/scala/reflect/common/Phase.scala
parent6d2b5e14f8b4cc25fca8067fd09106f1474966f4 (diff)
downloadscala-1e5194b41cdc5563237381b80a9f948abbf96e6e.tar.gz
scala-1e5194b41cdc5563237381b80a9f948abbf96e6e.tar.bz2
scala-1e5194b41cdc5563237381b80a9f948abbf96e6e.zip
Phase and Error handling code, no review.
Diffstat (limited to 'src/compiler/scala/reflect/common/Phase.scala')
-rw-r--r--src/compiler/scala/reflect/common/Phase.scala53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/compiler/scala/reflect/common/Phase.scala b/src/compiler/scala/reflect/common/Phase.scala
new file mode 100644
index 0000000000..e351b3f676
--- /dev/null
+++ b/src/compiler/scala/reflect/common/Phase.scala
@@ -0,0 +1,53 @@
+/* NSC -- new Scala compiler
+ * Copyright 2005-2011 LAMP/EPFL
+ * @author Martin Odersky
+ */
+
+package scala.reflect
+package common
+
+abstract class Phase(val prev: Phase) {
+
+ type Id = Int
+
+ val id: Id = if (prev eq null) 0 else prev.id + 1
+
+ /** New flags visible after this phase has completed */
+ def nextFlags: Long = 0l
+
+ /** New flags visible once this phase has started */
+ def newFlags: Long = 0l
+
+ private var fmask: Long =
+ if (prev eq null) Flags.InitialFlags else prev.flagMask | prev.nextFlags | newFlags
+ def flagMask: Long = fmask
+
+ private var nx: Phase = this
+ if ((prev ne null) && (prev ne NoPhase)) prev.nx = this
+
+ def next: Phase = nx
+
+ def name: String
+ def description: String = name
+ // Will running with -Ycheck:name work?
+ def checkable: Boolean = true
+ // def devirtualized: Boolean = false
+ def specialized: Boolean = false
+ def erasedTypes: Boolean = false
+ def flatClasses: Boolean = false
+ def refChecked: Boolean = false
+ def keepsTypeParams = true
+ def run(): Unit
+
+ override def toString() = name
+ override def hashCode = id.## + name.##
+ override def equals(other: Any) = other match {
+ case x: Phase => id == x.id && name == x.name
+ case _ => false
+ }
+}
+
+object NoPhase extends Phase(null) {
+ def name = "<no phase>"
+ def run() { throw new Error("NoPhase.run") }
+}