aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/src/dotty/tools/dotc/transform/ExplicitOuter.scala3
-rw-r--r--tests/pending/pos/i1865.scala24
2 files changed, 26 insertions, 1 deletions
diff --git a/compiler/src/dotty/tools/dotc/transform/ExplicitOuter.scala b/compiler/src/dotty/tools/dotc/transform/ExplicitOuter.scala
index 1eb12e9de..497b73807 100644
--- a/compiler/src/dotty/tools/dotc/transform/ExplicitOuter.scala
+++ b/compiler/src/dotty/tools/dotc/transform/ExplicitOuter.scala
@@ -276,7 +276,7 @@ object ExplicitOuter {
if (tpe.prefix eq NoPrefix) cls.owner.enclosingClass.thisType
else tpe.prefix
case _ =>
- outerPrefix(tpe.underlying)
+ outerPrefix(tpe.underlying(ctx.withPhaseNoLater(ctx.erasurePhase)))
}
case tpe: TypeProxy =>
outerPrefix(tpe.underlying)
@@ -339,6 +339,7 @@ object ExplicitOuter {
val cls = fun.symbol.owner.asClass
def outerArg(receiver: Tree): Tree = receiver match {
case New(_) | Super(_, _) =>
+ println(i"outerarg: ${receiver.tpe} --> ${outerPrefix(receiver.tpe)} at ${ctx.phase}")
singleton(fixThis(outerPrefix(receiver.tpe)))
case This(_) =>
ref(outerParamAccessor(cls)) // will be rewired to outer argument of secondary constructor in phase Constructors
diff --git a/tests/pending/pos/i1865.scala b/tests/pending/pos/i1865.scala
new file mode 100644
index 000000000..1b77558ff
--- /dev/null
+++ b/tests/pending/pos/i1865.scala
@@ -0,0 +1,24 @@
+class AbsCell {
+ type T = Node
+ class Node
+}
+
+object Test {
+ def test: Unit = {
+ val cell = new AbsCell
+ new cell.T
+ }
+}
+
+class AbsCell2 {
+ type T = Node
+ val value: T = value
+ def set(x: T): Unit = {}
+ class Node
+}
+object init {
+ def main = {
+ val cell = new AbsCell2 { val init = new Node }
+ cell set (new cell.T)
+ }
+}