@@ -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