diff --git a/compiler/src/dotty/tools/dotc/transform/Flatten.scala b/compiler/src/dotty/tools/dotc/transform/Flatten.scala index a3deee2e3793..e2181538a9b0 100644 --- a/compiler/src/dotty/tools/dotc/transform/Flatten.scala +++ b/compiler/src/dotty/tools/dotc/transform/Flatten.scala @@ -27,7 +27,20 @@ class Flatten extends MiniPhaseTransform with SymTransformer { thisTransform => else ref } - private val liftedDefs = new mutable.ListBuffer[Tree] + private var liftedDefs = new mutable.ListBuffer[Tree] + private var liftedDefsQueue = List.empty[mutable.ListBuffer[Tree]] + + override def prepareForPackageDef(tree: PackageDef)(implicit ctx: Context) = { + liftedDefsQueue = liftedDefs :: liftedDefsQueue + liftedDefs = new mutable.ListBuffer[Tree] + this + } + + override def transformPackageDef(tree: PackageDef)(implicit ctx: Context, info: TransformerInfo) = { + liftedDefs = liftedDefsQueue.head + liftedDefsQueue = liftedDefsQueue.tail + tree + } private def liftIfNested(tree: Tree)(implicit ctx: Context, info: TransformerInfo) = if (ctx.owner is Package) tree diff --git a/tests/pos/i3000.scala b/tests/pos/i3000.scala new file mode 100644 index 000000000000..4c132a64c1e8 --- /dev/null +++ b/tests/pos/i3000.scala @@ -0,0 +1,5 @@ +class Foo { + new Object { } +} + +package bar { } diff --git a/tests/run/i3000b.check b/tests/run/i3000b.check new file mode 100644 index 000000000000..605021c9b2c0 --- /dev/null +++ b/tests/run/i3000b.check @@ -0,0 +1,2 @@ +Foo$$anon$1 +bar.Bar$$anon$2 diff --git a/tests/run/i3000b.scala b/tests/run/i3000b.scala new file mode 100644 index 000000000000..6bc066b6344e --- /dev/null +++ b/tests/run/i3000b.scala @@ -0,0 +1,18 @@ +object Test { + def main(args: Array[String]): Unit = { + new Foo + new bar.Bar + } +} + +class Foo { + new Object { println(this.getClass.getName) } +} + +package bar { + package baz { } + class Bar { + new Object { println(this.getClass.getName) } + } + package quxx { } +}