Skip to content

Commit 4dece74

Browse files
authored
Merge pull request #3717 from dotty-staging/fix-#3647
Fix #3647: Define topLevelClass for NoDenotation
2 parents 12ff291 + a84e401 commit 4dece74

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

compiler/src/dotty/tools/dotc/core/SymDenotations.scala

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -926,10 +926,13 @@ object SymDenotations {
926926
* except for a toplevel module, where its module class is returned.
927927
*/
928928
final def topLevelClass(implicit ctx: Context): Symbol = {
929-
def topLevel(d: SymDenotation): Symbol = {
930-
if (d.isEffectiveRoot || (d is PackageClass) || (d.owner is PackageClass)) d.symbol
931-
else topLevel(d.owner)
932-
}
929+
930+
def topLevel(d: SymDenotation): Symbol =
931+
if (!exists || d.isEffectiveRoot || (d is PackageClass) || (d.owner is PackageClass))
932+
d.symbol
933+
else
934+
topLevel(d.owner)
935+
933936
val sym = topLevel(this)
934937
if (sym.isClass) sym else sym.moduleClass
935938
}

tests/pos/i3647.scala

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
object App {
2+
def main(args: Array[String]): Unit = {
3+
trait FooT {
4+
type T
5+
type Bar[A]
6+
7+
def get(k: Bar[T]): String
8+
}
9+
val test: FooT = new FooT {
10+
type T = String
11+
type Bar[A] = J[A]
12+
sealed abstract class J[A]
13+
final case object JName extends J[T]
14+
final case object JInt extends J[Int]
15+
16+
def get(k: J[T]): String = k match {
17+
case JName => "Age"
18+
}
19+
}
20+
}
21+
}

0 commit comments

Comments
 (0)