Skip to content

Commit 880a6f5

Browse files
committed
Add late companion symbols in firstTransform
1 parent 7baead9 commit 880a6f5

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import DenotTransformers._
1919
import typer.Checking
2020
import Names.Name
2121
import NameOps._
22+
import StdNames._
2223

2324

2425
/** The first tree transform
@@ -72,10 +73,21 @@ class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer wi
7273
case Nil => Nil
7374
}
7475

75-
def newCompanion(name: TermName): Thicket = {
76+
def newCompanion(name: TermName, forClass: Symbol): Thicket = {
7677
val modul = ctx.newCompleteModuleSymbol(ctx.owner, name, Synthetic, Synthetic,
7778
defn.ObjectClass.typeRef :: Nil, Scopes.newScope)
79+
val mc = modul.moduleClass
7880
if (ctx.owner.isClass) modul.enteredAfter(thisTransformer)
81+
ctx.newSymbol(
82+
owner = mc,
83+
name = nme.COMPANION_CLASS_METHOD,
84+
flags = Flags.Synthetic | Flags.Private,
85+
info = ExprType(forClass.typeRef)).enteredAfter(thisTransformer)
86+
ctx.newSymbol(
87+
owner = forClass,
88+
name = nme.COMPANION_MODULE_METHOD,
89+
flags = Flags.Synthetic | Flags.Private,
90+
info = ExprType(mc.typeRef)).enteredAfter(thisTransformer)
7991
ModuleDef(modul, Nil)
8092
}
8193

@@ -89,7 +101,7 @@ class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer wi
89101
false
90102
}
91103
val uniqueName = if (nameClash) objName.avoidClashName else objName
92-
Thicket(stat :: newCompanion(uniqueName).trees)
104+
Thicket(stat :: newCompanion(uniqueName, stat.symbol).trees)
93105
case stat => stat
94106
}
95107

0 commit comments

Comments
 (0)