Skip to content

Commit c61a0ce

Browse files
Merge pull request #3001 from dotty-staging/fix-#3000
Fix #3000: Do not flatten across packages
2 parents 9ee1734 + 58068b5 commit c61a0ce

File tree

4 files changed

+39
-1
lines changed

4 files changed

+39
-1
lines changed

compiler/src/dotty/tools/dotc/transform/Flatten.scala

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,20 @@ class Flatten extends MiniPhaseTransform with SymTransformer { thisTransform =>
2727
else ref
2828
}
2929

30-
private val liftedDefs = new mutable.ListBuffer[Tree]
30+
private var liftedDefs = new mutable.ListBuffer[Tree]
31+
private var liftedDefsQueue = List.empty[mutable.ListBuffer[Tree]]
32+
33+
override def prepareForPackageDef(tree: PackageDef)(implicit ctx: Context) = {
34+
liftedDefsQueue = liftedDefs :: liftedDefsQueue
35+
liftedDefs = new mutable.ListBuffer[Tree]
36+
this
37+
}
38+
39+
override def transformPackageDef(tree: PackageDef)(implicit ctx: Context, info: TransformerInfo) = {
40+
liftedDefs = liftedDefsQueue.head
41+
liftedDefsQueue = liftedDefsQueue.tail
42+
tree
43+
}
3144

3245
private def liftIfNested(tree: Tree)(implicit ctx: Context, info: TransformerInfo) =
3346
if (ctx.owner is Package) tree

tests/pos/i3000.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class Foo {
2+
new Object { }
3+
}
4+
5+
package bar { }

tests/run/i3000b.check

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Foo$$anon$1
2+
bar.Bar$$anon$2

tests/run/i3000b.scala

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
object Test {
2+
def main(args: Array[String]): Unit = {
3+
new Foo
4+
new bar.Bar
5+
}
6+
}
7+
8+
class Foo {
9+
new Object { println(this.getClass.getName) }
10+
}
11+
12+
package bar {
13+
package baz { }
14+
class Bar {
15+
new Object { println(this.getClass.getName) }
16+
}
17+
package quxx { }
18+
}

0 commit comments

Comments
 (0)