diff options
author | Martin Odersky <odersky@gmail.com> | 2014-10-28 15:20:48 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-11-09 10:17:33 +0100 |
commit | d2670a7e6ddfc3a71f7b38aefb831b684059d468 (patch) | |
tree | 18b2285ec6b28480f69f5f1ecf8ca6b5e5cdc5a2 /src/dotty/tools/dotc/transform/LambdaLift.scala | |
parent | 8c73426c1db5e867febf9abf565de4201f78d628 (diff) | |
download | dotty-d2670a7e6ddfc3a71f7b38aefb831b684059d468.tar.gz dotty-d2670a7e6ddfc3a71f7b38aefb831b684059d468.tar.bz2 dotty-d2670a7e6ddfc3a71f7b38aefb831b684059d468.zip |
Made LambdaLift capable of having minitransforms run after it.
Some changes needed so that Flatten can run after LambdaLift
Diffstat (limited to 'src/dotty/tools/dotc/transform/LambdaLift.scala')
-rw-r--r-- | src/dotty/tools/dotc/transform/LambdaLift.scala | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/src/dotty/tools/dotc/transform/LambdaLift.scala b/src/dotty/tools/dotc/transform/LambdaLift.scala index 196753e82..051c6065e 100644 --- a/src/dotty/tools/dotc/transform/LambdaLift.scala +++ b/src/dotty/tools/dotc/transform/LambdaLift.scala @@ -278,20 +278,20 @@ class LambdaLift extends MiniPhaseTransform with IdentityDenotTransformer { this } } - override def init(implicit ctx: Context, info: TransformerInfo) = { - free.clear() - proxyMap.clear() - called.clear() - calledFromInner.clear() - liftedOwner.clear() - liftedDefs.clear() - assert(ctx.phase == thisTransform) - (new CollectDependencies).traverse(NoSymbol, ctx.compilationUnit.tpdTree) - computeFreeVars() - computeLiftedOwners() - generateProxies()(ctx.withPhase(thisTransform.next)) - liftLocals()(ctx.withPhase(thisTransform.next)) - } + override def init(implicit ctx: Context, info: TransformerInfo) = + ctx.atPhase(thisTransform) { implicit ctx => + free.clear() + proxyMap.clear() + called.clear() + calledFromInner.clear() + liftedOwner.clear() + liftedDefs.clear() + (new CollectDependencies).traverse(NoSymbol, ctx.compilationUnit.tpdTree) + computeFreeVars() + computeLiftedOwners() + generateProxies()(ctx.withPhase(thisTransform.next)) + liftLocals()(ctx.withPhase(thisTransform.next)) + } private def currentEnclosure(implicit ctx: Context) = ctx.owner.enclosingMethod.skipConstructor @@ -355,8 +355,12 @@ class LambdaLift extends MiniPhaseTransform with IdentityDenotTransformer { this } } - private def liftDef(tree: MemberDef)(implicit ctx: Context): Tree = { - liftedDefs(tree.symbol.owner) += rename(tree, tree.symbol.name) + private def liftDef(tree: MemberDef)(implicit ctx: Context, info: TransformerInfo): Tree = { + val buf = liftedDefs(tree.symbol.owner) + transformFollowing(rename(tree, tree.symbol.name)) match { + case Thicket(trees) => buf ++= trees + case tree => buf += tree + } EmptyTree } |