@@ -14,6 +14,7 @@ import dotty.tools.dotc.inlines.Inlines
1414import dotty .tools .dotc .ast .TreeMapWithImplicits
1515import dotty .tools .dotc .core .DenotTransformers .IdentityDenotTransformer
1616
17+ import scala .collection .mutable .ListBuffer
1718
1819/** Inlines all calls to inline methods that are not in an inline method or a quote */
1920class Inlining extends MacroTransform {
@@ -66,7 +67,7 @@ class Inlining extends MacroTransform {
6667 /** List of top level classes added by macro annotation in a package object.
6768 * These are added to the PackageDef that owns this particular package object.
6869 */
69- private val topClasses = new collection.mutable. ListBuffer [Tree ]
70+ private val newTopClasses = MutableSymbolMap [ ListBuffer [Tree ]]()
7071
7172 override def transform (tree : Tree )(using Context ): Tree = {
7273 tree match
@@ -82,10 +83,11 @@ class Inlining extends MacroTransform {
8283 val trees1 = trees.map(super .transform)
8384
8485 // Find classes added to the top level from a package object
85- val (topClasses0 , trees2) =
86+ val (topClasses , trees2) =
8687 if ctx.owner.isPackageObject then trees1.partition(_.symbol.owner == ctx.owner.owner)
8788 else (Nil , trees1)
88- topClasses ++= topClasses0
89+ if topClasses.nonEmpty then
90+ newTopClasses.getOrElseUpdate(ctx.owner.owner, new ListBuffer ) ++= topClasses
8991
9092 flatTree(trees2)
9193 else super .transform(tree)
@@ -101,10 +103,13 @@ class Inlining extends MacroTransform {
101103 super .transform(tree)(using StagingContext .spliceContext)
102104 case _ : PackageDef =>
103105 super .transform(tree) match
104- case tree1 : PackageDef if ! topClasses.isEmpty =>
105- val newStats = tree1.stats ::: topClasses.result()
106- topClasses.clear()
107- cpy.PackageDef (tree1)(tree1.pid, newStats)
106+ case tree1 : PackageDef =>
107+ newTopClasses.get(tree.symbol.moduleClass) match
108+ case Some (topClasses) =>
109+ newTopClasses.remove(tree.symbol.moduleClass)
110+ val newStats = tree1.stats ::: topClasses.result()
111+ cpy.PackageDef (tree1)(tree1.pid, newStats)
112+ case _ => tree1
108113 case tree1 => tree1
109114 case _ =>
110115 super .transform(tree)
0 commit comments