@@ -41,12 +41,18 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
41
41
}
42
42
43
43
private val symAtAddr = new mutable.HashMap [Addr , Symbol ]
44
+ private val unpickledSyms = new mutable.HashSet [Symbol ]
44
45
private val treeAtAddr = new mutable.HashMap [Addr , Tree ]
45
46
private val typeAtAddr = new mutable.HashMap [Addr , Type ] // currently populated only for types that are known to be SHAREd.
46
47
private var stubs : Set [Symbol ] = Set ()
47
48
48
49
private var roots : Set [SymDenotation ] = null
49
50
51
+ private def registerSym (addr : Addr , sym : Symbol ) = {
52
+ symAtAddr(addr) = sym
53
+ unpickledSyms += sym
54
+ }
55
+
50
56
/** Enter all toplevel classes and objects into their scopes
51
57
* @param roots a set of SymDenotations that should be overwritten by unpickling
52
58
*/
@@ -206,7 +212,7 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
206
212
OrType (readType(), readType())
207
213
case BIND =>
208
214
val sym = ctx.newSymbol(ctx.owner, readName().toTypeName, BindDefinedType , readType())
209
- symAtAddr (start) = sym
215
+ registerSym (start, sym)
210
216
TypeRef .withFixedSym(NoPrefix , sym.name, sym)
211
217
case POLYtype =>
212
218
val (names, paramReader) = readNamesSkipParams[TypeName ]
@@ -404,7 +410,7 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
404
410
} // TODO set position
405
411
sym.annotations = annots
406
412
ctx.enter(sym)
407
- symAtAddr (start) = sym
413
+ registerSym (start, sym)
408
414
if (isClass) {
409
415
sym.completer.withDecls(newScope)
410
416
forkAt(templateStart).indexTemplateParams()(localContext(sym))
@@ -590,7 +596,7 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
590
596
case TYPEDEF | TYPEPARAM =>
591
597
if (sym.isClass) {
592
598
val companion = sym.scalacLinkedClass
593
- if (companion != NoSymbol ) {
599
+ if (companion != NoSymbol && unpickledSyms.contains(companion) ) {
594
600
import transform .SymUtils ._
595
601
if (sym is Flags .ModuleClass ) sym.registerCompanionMethod(nme.COMPANION_CLASS_METHOD , companion)
596
602
else sym.registerCompanionMethod(nme.COMPANION_MODULE_METHOD , companion)
@@ -809,7 +815,7 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
809
815
val name = readName()
810
816
val info = readType()
811
817
val sym = ctx.newSymbol(ctx.owner, name, EmptyFlags , info)
812
- symAtAddr (start) = sym
818
+ registerSym (start, sym)
813
819
Bind (sym, readTerm())
814
820
case ALTERNATIVE =>
815
821
Alternative (until(end)(readTerm()))
0 commit comments