@@ -109,7 +109,7 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
109
109
val start = currentAddr
110
110
val tag = readByte()
111
111
tag match {
112
- case VALDEF | DEFDEF | TYPEDEF | TYPEPARAM | PARAM | TEMPLATE =>
112
+ case VALDEF | DEFDEF | TYPEDEF | TYPEPARAM | PARAM | TEMPLATE | BIND =>
113
113
val end = readEnd()
114
114
for (i <- 0 until numRefs(tag)) readNat()
115
115
if (tag == TEMPLATE ) scanTrees(buf, end, MemberDefsOnly )
@@ -254,6 +254,7 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
254
254
case TYPEARGtype =>
255
255
TypeArgRef (readType(), readType().asInstanceOf [TypeRef ], readNat())
256
256
case BIND =>
257
+ ctx.error(" Should never happen, should be in tree" )
257
258
val sym = ctx.newSymbol(ctx.owner, readName().toTypeName, BindDefinedType , readType())
258
259
registerSym(start, sym)
259
260
if (currentAddr != end) readType()
@@ -412,6 +413,15 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
412
413
val localDummy = ctx.newLocalDummy(ctx.owner)
413
414
registerSym(currentAddr, localDummy)
414
415
localDummy
416
+ case BIND =>
417
+ val start = currentAddr
418
+ val tag = readByte()
419
+ val end = readEnd()
420
+ val name = readName()
421
+ val info = new Completer (ctx.owner, subReader(start, end))
422
+ val sym = ctx.newSymbol(ctx.owner, name, EmptyFlags , info)
423
+ registerSym(start, sym)
424
+ sym
415
425
case tag =>
416
426
throw new Error (s " illegal createSymbol at $currentAddr, tag = $tag" )
417
427
}
@@ -982,9 +992,9 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
982
992
SeqLiteral (until(end)(readTerm()), elemtpt)
983
993
case BIND =>
984
994
val name = readName()
985
- val info = readType()
986
- val sym = ctx.newSymbol(ctx.owner, name, EmptyFlags , info)
987
- registerSym(start, sym)
995
+ val sym = symbolAt(start).asTerm
996
+ skipTree() // skip type
997
+ // symbol has to be created before reading the type, as the type may refer to the symbpl
988
998
Bind (sym, readTerm())
989
999
case ALTERNATIVE =>
990
1000
Alternative (until(end)(readTerm()))
@@ -1042,7 +1052,15 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
1042
1052
}
1043
1053
1044
1054
def readTpt ()(implicit ctx : Context ) =
1045
- if (isTypeTreeTag(nextUnsharedTag)) readTerm()
1055
+ if (isTypeTreeTag(nextUnsharedTag)) {
1056
+ val isShared = nextByte == SHARED
1057
+ val term = readTerm()
1058
+ term match {
1059
+ case a : DefTree if isShared =>
1060
+ TypeTree (a.namedType)
1061
+ case _ => term
1062
+ }
1063
+ }
1046
1064
else {
1047
1065
val start = currentAddr
1048
1066
val tp = readType()
0 commit comments