diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2012-06-08 02:36:10 +0200 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2012-06-08 15:32:28 +0200 |
commit | 0b2f1bcf75d31c59b25e19eebcb80f39c155365b (patch) | |
tree | 8d9dfc50ef01ca48c068b232af7e67a723325388 /src/reflect/scala/reflect/internal/Phase.scala | |
parent | 13213e3df0384b1fd815c0798758a22284572cdb (diff) | |
download | scala-0b2f1bcf75d31c59b25e19eebcb80f39c155365b.tar.gz scala-0b2f1bcf75d31c59b25e19eebcb80f39c155365b.tar.bz2 scala-0b2f1bcf75d31c59b25e19eebcb80f39c155365b.zip |
Introduces scala-reflect.jar
Diffstat (limited to 'src/reflect/scala/reflect/internal/Phase.scala')
-rw-r--r-- | src/reflect/scala/reflect/internal/Phase.scala | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/reflect/scala/reflect/internal/Phase.scala b/src/reflect/scala/reflect/internal/Phase.scala new file mode 100644 index 0000000000..68dc5ce783 --- /dev/null +++ b/src/reflect/scala/reflect/internal/Phase.scala @@ -0,0 +1,66 @@ +/* NSC -- new Scala compiler + * Copyright 2005-2011 LAMP/EPFL + * @author Martin Odersky + */ + +package scala.reflect +package internal + +abstract class Phase(val prev: Phase) { + if ((prev ne null) && (prev ne NoPhase)) + prev.nx = this + + 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 + + val fmask = ( + if (prev eq null) Flags.InitialFlags + else prev.flagMask | prev.nextFlags | newFlags + ) + def flagMask: Long = fmask + + private var nx: Phase = this + + def next: Phase = nx + def hasNext = next != this + def iterator = Iterator.iterate(this)(_.next) takeWhile (p => p.next != p) + + def name: String + def description: String = name + // Will running with -Ycheck:name work? + def checkable: Boolean = true + def specialized: Boolean = false + def erasedTypes: Boolean = false + def flatClasses: Boolean = false + def refChecked: Boolean = false + + /** This is used only in unsafeTypeParams, and at this writing is + * overridden to false in parser, namer, typer, and erasure. (And NoPhase.) + */ + 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>" + override def keepsTypeParams = false + def run() { throw new Error("NoPhase.run") } +} + +object SomePhase extends Phase(NoPhase) { + def name = "<some phase>" + def run() { throw new Error("SomePhase.run") } +} |