diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2016-02-20 17:24:07 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2016-02-20 17:42:17 +0100 |
commit | 8439c7feb204cfacf861322ad6dcfe4056188891 (patch) | |
tree | 3eba406038b1a92fd10dd5605eeb056273f1e005 /src | |
parent | 910481a0f4fe671f3f4d8965eac61870596970e1 (diff) | |
download | dotty-8439c7feb204cfacf861322ad6dcfe4056188891.tar.gz dotty-8439c7feb204cfacf861322ad6dcfe4056188891.tar.bz2 dotty-8439c7feb204cfacf861322ad6dcfe4056188891.zip |
FirstTransform: simplify needsCompanion code
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/transform/FirstTransform.scala | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/transform/FirstTransform.scala b/src/dotty/tools/dotc/transform/FirstTransform.scala index 5d42d4c16..c24c5bbd9 100644 --- a/src/dotty/tools/dotc/transform/FirstTransform.scala +++ b/src/dotty/tools/dotc/transform/FirstTransform.scala @@ -34,11 +34,13 @@ class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer wi override def phaseName = "firstTransform" - private var needsCompanionPredicate: ClassSymbol => Boolean = null + private var addCompanionPhases: List[NeedsCompanions] = _ + + def needsCompanion(cls: ClassSymbol)(implicit ctx: Context) = + addCompanionPhases.exists(_.isCompanionNeeded(cls)) override def prepareForUnit(tree: tpd.Tree)(implicit ctx: Context): TreeTransform = { - needsCompanionPredicate = ctx.phasePlan.flatMap(_.filter(x => x.isInstanceOf[NeedsCompanions])). - foldLeft((x: ClassSymbol) => false)((pred, phase) => x => pred(x) || phase.asInstanceOf[NeedsCompanions].isCompanionNeeded(x)) + addCompanionPhases = ctx.phasePlan.flatMap(_ collect { case p: NeedsCompanions => p }) this } @@ -90,7 +92,7 @@ class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer wi } def addMissingCompanions(stats: List[Tree]): List[Tree] = stats map { - case stat: TypeDef if (singleClassDefs contains stat.name) && needsCompanionPredicate(stat.symbol.asClass) => + case stat: TypeDef if (singleClassDefs contains stat.name) && needsCompanion(stat.symbol.asClass) => val objName = stat.name.toTermName val nameClash = stats.exists { case other: MemberDef => |