@@ -500,16 +500,28 @@ class TreeUnpickler(reader: TastyReader,
500
500
flags
501
501
}
502
502
503
- def isAbstractType (ttag : Int )(using Context ): Boolean = nextUnsharedTag match {
503
+ def isAbstractType (name : Name )(using Context ): Boolean = nextByte match
504
+ case SHAREDtype =>
505
+ val lookAhead = fork
506
+ lookAhead.reader.readByte()
507
+ val sharedReader = forkAt(lookAhead.reader.readAddr())
508
+ sharedReader.isAbstractType(name)
504
509
case LAMBDAtpt =>
505
510
val rdr = fork
506
511
rdr.reader.readByte() // tag
507
512
rdr.reader.readNat() // length
508
513
rdr.skipParams() // tparams
509
- rdr.isAbstractType(rdr.nextUnsharedTag)
510
- case TYPEBOUNDS | TYPEBOUNDStpt => true
514
+ rdr.isAbstractType(name)
515
+ case TYPEBOUNDS =>
516
+ val rdr = fork
517
+ rdr.reader.readByte() // tag
518
+ val end = rdr.reader.readEnd()
519
+ rdr.skipTree() // alias, or lower bound
520
+ val res = ! rdr.nothingButMods(end)
521
+ // if !res then println(i"NOT ABSTRACT $name, ${rdr.reader.nextByte}")
522
+ res
523
+ case TYPEBOUNDStpt => true
511
524
case _ => false
512
- }
513
525
514
526
/** Create symbol of definition node and enter in symAtAddr map
515
527
* @return the created symbol
@@ -554,15 +566,15 @@ class TreeUnpickler(reader: TastyReader,
554
566
if (tag == TYPEDEF || tag == TYPEPARAM ) name = name.toTypeName
555
567
skipParams()
556
568
val ttag = nextUnsharedTag
557
- val isAbsType = isAbstractType(ttag )
569
+ val isAbsType = isAbstractType(name )
558
570
val isClass = ttag == TEMPLATE
559
571
val templateStart = currentAddr
560
572
skipTree() // tpt
561
573
val rhsStart = currentAddr
562
574
val rhsIsEmpty = nothingButMods(end)
563
575
if (! rhsIsEmpty) skipTree()
564
576
val (givenFlags, annotFns, privateWithin) = readModifiers(end)
565
- pickling.println(i " creating symbol $name at $start with flags $givenFlags" )
577
+ pickling.println(i " creating symbol $name at $start with flags ${ givenFlags.flagsString} , isAbsType = $isAbsType , $ttag " )
566
578
val flags = normalizeFlags(tag, givenFlags, name, isAbsType, rhsIsEmpty)
567
579
def adjustIfModule (completer : LazyType ) =
568
580
if (flags.is(Module )) adjustModuleCompleter(completer, name) else completer
0 commit comments