Skip to content

Commit ec2d0e4

Browse files
committed
Merge pull request #978 from dotty-staging/companion-methods-duplication
Duplication of companion methods after using FromTasty fixed
2 parents 7ce2b3b + 0afb2a3 commit ec2d0e4

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,18 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
4141
}
4242

4343
private val symAtAddr = new mutable.HashMap[Addr, Symbol]
44+
private val unpickledSyms = new mutable.HashSet[Symbol]
4445
private val treeAtAddr = new mutable.HashMap[Addr, Tree]
4546
private val typeAtAddr = new mutable.HashMap[Addr, Type] // currently populated only for types that are known to be SHAREd.
4647
private var stubs: Set[Symbol] = Set()
4748

4849
private var roots: Set[SymDenotation] = null
4950

51+
private def registerSym(addr: Addr, sym: Symbol) = {
52+
symAtAddr(addr) = sym
53+
unpickledSyms += sym
54+
}
55+
5056
/** Enter all toplevel classes and objects into their scopes
5157
* @param roots a set of SymDenotations that should be overwritten by unpickling
5258
*/
@@ -206,7 +212,7 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
206212
OrType(readType(), readType())
207213
case BIND =>
208214
val sym = ctx.newSymbol(ctx.owner, readName().toTypeName, BindDefinedType, readType())
209-
symAtAddr(start) = sym
215+
registerSym(start, sym)
210216
TypeRef.withFixedSym(NoPrefix, sym.name, sym)
211217
case POLYtype =>
212218
val (names, paramReader) = readNamesSkipParams[TypeName]
@@ -404,7 +410,7 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
404410
} // TODO set position
405411
sym.annotations = annots
406412
ctx.enter(sym)
407-
symAtAddr(start) = sym
413+
registerSym(start, sym)
408414
if (isClass) {
409415
sym.completer.withDecls(newScope)
410416
forkAt(templateStart).indexTemplateParams()(localContext(sym))
@@ -590,7 +596,7 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
590596
case TYPEDEF | TYPEPARAM =>
591597
if (sym.isClass) {
592598
val companion = sym.scalacLinkedClass
593-
if (companion != NoSymbol) {
599+
if (companion != NoSymbol && unpickledSyms.contains(companion)) {
594600
import transform.SymUtils._
595601
if (sym is Flags.ModuleClass) sym.registerCompanionMethod(nme.COMPANION_CLASS_METHOD, companion)
596602
else sym.registerCompanionMethod(nme.COMPANION_MODULE_METHOD, companion)
@@ -809,7 +815,7 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
809815
val name = readName()
810816
val info = readType()
811817
val sym = ctx.newSymbol(ctx.owner, name, EmptyFlags, info)
812-
symAtAddr(start) = sym
818+
registerSym(start, sym)
813819
Bind(sym, readTerm())
814820
case ALTERNATIVE =>
815821
Alternative(until(end)(readTerm()))

0 commit comments

Comments
 (0)