@@ -515,16 +515,28 @@ class TreeUnpickler(reader: TastyReader,
515
515
flags
516
516
}
517
517
518
- def isAbstractType (ttag : Int )(using Context ): Boolean = nextUnsharedTag match {
518
+ def isAbstractType (name : Name )(using Context ): Boolean = nextByte match
519
+ case SHAREDtype =>
520
+ val lookAhead = fork
521
+ lookAhead.reader.readByte()
522
+ val sharedReader = forkAt(lookAhead.reader.readAddr())
523
+ sharedReader.isAbstractType(name)
519
524
case LAMBDAtpt =>
520
525
val rdr = fork
521
526
rdr.reader.readByte() // tag
522
527
rdr.reader.readNat() // length
523
528
rdr.skipParams() // tparams
524
- rdr.isAbstractType(rdr.nextUnsharedTag)
525
- case TYPEBOUNDS | TYPEBOUNDStpt => true
529
+ rdr.isAbstractType(name)
530
+ case TYPEBOUNDS =>
531
+ val rdr = fork
532
+ rdr.reader.readByte() // tag
533
+ val end = rdr.reader.readEnd()
534
+ rdr.skipTree() // alias, or lower bound
535
+ val res = ! rdr.nothingButMods(end)
536
+ // if !res then println(i"NOT ABSTRACT $name, ${rdr.reader.nextByte}")
537
+ res
538
+ case TYPEBOUNDStpt => true
526
539
case _ => false
527
- }
528
540
529
541
/** Create symbol of definition node and enter in symAtAddr map
530
542
* @return the created symbol
@@ -569,15 +581,15 @@ class TreeUnpickler(reader: TastyReader,
569
581
if (tag == TYPEDEF || tag == TYPEPARAM ) name = name.toTypeName
570
582
skipParams()
571
583
val ttag = nextUnsharedTag
572
- val isAbsType = isAbstractType(ttag )
584
+ val isAbsType = isAbstractType(name )
573
585
val isClass = ttag == TEMPLATE
574
586
val templateStart = currentAddr
575
587
skipTree() // tpt
576
588
val rhsStart = currentAddr
577
589
val rhsIsEmpty = nothingButMods(end)
578
590
if (! rhsIsEmpty) skipTree()
579
591
val (givenFlags, annotFns, privateWithin) = readModifiers(end)
580
- pickling.println(i " creating symbol $name at $start with flags $givenFlags" )
592
+ pickling.println(i " creating symbol $name at $start with flags ${ givenFlags.flagsString} , isAbsType = $isAbsType , $ttag " )
581
593
val flags = normalizeFlags(tag, givenFlags, name, isAbsType, rhsIsEmpty)
582
594
def adjustIfModule (completer : LazyType ) =
583
595
if (flags.is(Module )) adjustModuleCompleter(completer, name) else completer
0 commit comments