Skip to content

Commit d2670a7

Browse files
committed
Made LambdaLift capable of having minitransforms run after it.
Some changes needed so that Flatten can run after LambdaLift
1 parent 8c73426 commit d2670a7

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

src/dotty/tools/dotc/transform/LambdaLift.scala

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -278,20 +278,20 @@ class LambdaLift extends MiniPhaseTransform with IdentityDenotTransformer { this
278278
}
279279
}
280280

281-
override def init(implicit ctx: Context, info: TransformerInfo) = {
282-
free.clear()
283-
proxyMap.clear()
284-
called.clear()
285-
calledFromInner.clear()
286-
liftedOwner.clear()
287-
liftedDefs.clear()
288-
assert(ctx.phase == thisTransform)
289-
(new CollectDependencies).traverse(NoSymbol, ctx.compilationUnit.tpdTree)
290-
computeFreeVars()
291-
computeLiftedOwners()
292-
generateProxies()(ctx.withPhase(thisTransform.next))
293-
liftLocals()(ctx.withPhase(thisTransform.next))
294-
}
281+
override def init(implicit ctx: Context, info: TransformerInfo) =
282+
ctx.atPhase(thisTransform) { implicit ctx =>
283+
free.clear()
284+
proxyMap.clear()
285+
called.clear()
286+
calledFromInner.clear()
287+
liftedOwner.clear()
288+
liftedDefs.clear()
289+
(new CollectDependencies).traverse(NoSymbol, ctx.compilationUnit.tpdTree)
290+
computeFreeVars()
291+
computeLiftedOwners()
292+
generateProxies()(ctx.withPhase(thisTransform.next))
293+
liftLocals()(ctx.withPhase(thisTransform.next))
294+
}
295295

296296
private def currentEnclosure(implicit ctx: Context) =
297297
ctx.owner.enclosingMethod.skipConstructor
@@ -355,8 +355,12 @@ class LambdaLift extends MiniPhaseTransform with IdentityDenotTransformer { this
355355
}
356356
}
357357

358-
private def liftDef(tree: MemberDef)(implicit ctx: Context): Tree = {
359-
liftedDefs(tree.symbol.owner) += rename(tree, tree.symbol.name)
358+
private def liftDef(tree: MemberDef)(implicit ctx: Context, info: TransformerInfo): Tree = {
359+
val buf = liftedDefs(tree.symbol.owner)
360+
transformFollowing(rename(tree, tree.symbol.name)) match {
361+
case Thicket(trees) => buf ++= trees
362+
case tree => buf += tree
363+
}
360364
EmptyTree
361365
}
362366

0 commit comments

Comments
 (0)