diff options
author | Paul Phillips <paulp@improving.org> | 2011-05-16 21:09:48 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-05-16 21:09:48 +0000 |
commit | 1e5194b41cdc5563237381b80a9f948abbf96e6e (patch) | |
tree | c79e1e712b8085e3d255e6185466b998fd471eaf /src/compiler/scala/reflect/common/Phase.scala | |
parent | 6d2b5e14f8b4cc25fca8067fd09106f1474966f4 (diff) | |
download | scala-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.scala | 53 |
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") } +} |