-
Notifications
You must be signed in to change notification settings - Fork 14
Open
Labels
Milestone
Description
Consider:
class ThisType {
// TODO: should
override def baseTypeSeq: BaseTypeSeq = {
if (Statistics.canEnable) Statistics.incCounter(singletonBaseTypeSeqCount)
val elem0 = if (sym.hasSelfType) SingleType(NoPrefix, sym.thisSym) else this
underlying.baseTypeSeq prepend elem0
}Motivated by:
@Test
def thisTypeBaseTypeSeq(): Unit = {
import rootMirror.EmptyPackageClass
// trait T { self: U => }; trait U extends T
val UClass = EmptyPackageClass.newClass("U")
val TClass = EmptyPackageClass.newClass("T")
TClass.setInfo(ClassInfoType(ObjectTpe :: Nil, newScope, TClass))
UClass.setInfo(ClassInfoType(TClass.tpeHK :: Nil, newScope, UClass))
TClass.typeOfThis = UClass.tpeHK
val bts = TClass.thisType.baseTypeSeq
println(bts)
assertEquals(1, TClass.thisType.baseTypeIndex(UClass))
}The workaround is currently is to use widen.baseTypeIndex or .widen.typeSymbol.isSubclass in AsSeenFrom. We could eliminate the workaround if we fixed the problem at its core.
It would be interesting to add logging to baseTypeIndex, isSubclass etc to find potential bugs. We could validate the base type sequence that we're inspecting.