diff options
author | Martin Odersky <odersky@gmail.com> | 2014-03-29 15:02:51 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2014-03-31 14:52:08 +0200 |
commit | 26b8ec48adec709cf2b07b470ada774c708e96a4 (patch) | |
tree | 2d08891102e67788b94c8d67f13052a43f3ea493 /src/dotty | |
parent | a73b510b82460247524a07a6dd4f0bfaac74ccfc (diff) | |
download | dotty-26b8ec48adec709cf2b07b470ada774c708e96a4.tar.gz dotty-26b8ec48adec709cf2b07b470ada774c708e96a4.tar.bz2 dotty-26b8ec48adec709cf2b07b470ada774c708e96a4.zip |
Adapting containsPhase to phase groups
A list of names contains a phasegroup if it contains
any phase in the group.
Diffstat (limited to 'src/dotty')
-rw-r--r-- | src/dotty/tools/dotc/core/Decorators.scala | 7 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/Phases.scala | 4 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/TreeTransform.scala | 4 |
3 files changed, 9 insertions, 6 deletions
diff --git a/src/dotty/tools/dotc/core/Decorators.scala b/src/dotty/tools/dotc/core/Decorators.scala index cd9680e64..21f914d99 100644 --- a/src/dotty/tools/dotc/core/Decorators.scala +++ b/src/dotty/tools/dotc/core/Decorators.scala @@ -6,6 +6,7 @@ import Symbols._ import Contexts._, Names._, Phases._, printing.Texts._, printing.Printer import util.Positions.Position, util.SourcePosition import collection.mutable.ListBuffer +import dotty.tools.dotc.transform.TreeTransforms._ import scala.language.implicitConversions /** This object provides useful implicit decorators for types defined elsewhere */ @@ -127,8 +128,10 @@ object Decorators { * one of the names in the list of strings. */ implicit class PhaseListDecorator(val names: List[String]) extends AnyVal { - def containsPhase(phase: Phase) = - names exists (phase.name.startsWith) + def containsPhase(phase: Phase): Boolean = phase match { + case phase: TreeTransformer => phase.transformations.exists(containsPhase) + case _ => names exists (phase.name.startsWith) + } } implicit def sourcePos(pos: Position)(implicit ctx: Context): SourcePosition = diff --git a/src/dotty/tools/dotc/core/Phases.scala b/src/dotty/tools/dotc/core/Phases.scala index 87242c9b5..8b5606da2 100644 --- a/src/dotty/tools/dotc/core/Phases.scala +++ b/src/dotty/tools/dotc/core/Phases.scala @@ -107,11 +107,11 @@ object Phases { postTyperEmmited = true new PostTyperTransformer { override def name: String = transformations.map(_.name).mkString("TreeTransform:{", ", ", "}") - override protected def transformations: Array[TreeTransform] = transforms.toArray + override def transformations: Array[TreeTransform] = transforms.toArray } } else new TreeTransformer { override def name: String = transformations.map(_.name).mkString("TreeTransform:{", ", ", "}") - override protected def transformations: Array[TreeTransform] = transforms.toArray + override def transformations: Array[TreeTransform] = transforms.toArray } squashedPhases += block block.init(this, phasess(i).head.id, phasess(i).last.id) diff --git a/src/dotty/tools/dotc/transform/TreeTransform.scala b/src/dotty/tools/dotc/transform/TreeTransform.scala index 10857da5a..684714199 100644 --- a/src/dotty/tools/dotc/transform/TreeTransform.scala +++ b/src/dotty/tools/dotc/transform/TreeTransform.scala @@ -129,7 +129,7 @@ object TreeTransforms { protected def mkTreeTransformer = new TreeTransformer { override def name: String = TreeTransform.this.name - override protected def transformations = Array(TreeTransform.this) + override def transformations = Array(TreeTransform.this) } override def run(implicit ctx: Context): Unit = { @@ -414,7 +414,7 @@ object TreeTransforms { /** A group of tree transforms that are applied in sequence during the same phase */ abstract class TreeTransformer extends Phase { - protected def transformations: Array[TreeTransform] + def transformations: Array[TreeTransform] override def run(implicit ctx: Context): Unit = { val curTree = ctx.compilationUnit.tpdTree |