Closed
Description
We shouldn't need to define a new local field in B
here:
class A(val aaa: Int)
class B(val aaa: Int) extends A(aaa)
But we do in dotty:
package <empty> {
class A extends Object {
def <init>(aaa: Int): A = {
super()
this.aaa$$local = aaa
()
}
private val aaa$$local: Int
<accessor> def aaa(): Int = this.aaa$$local
}
final lazy module val A: A$ = new A$()
final module class A$ extends Object { this: A$ =>
def <init>(): A$ = {
super()
()
}
}
class B extends A {
def <init>(aaa: Int): B = {
super(aaa)
this.aaa$$local = aaa
()
}
private val aaa$$local: Int
override <accessor> def aaa(): Int = this.aaa$$local
def foo(): Int = B.this.aaa().+(1)
}
final lazy module val B: B$ = new B$()
final module class B$ extends Object { this: B$ =>
def <init>(): B$ = {
super()
()
}
}
}
Compare with scalac:
package <empty> {
class A extends Object {
<paramaccessor> private[this] val aaa: Int = _;
<stable> <accessor> <paramaccessor> def aaa(): Int = A.this.aaa;
def <init>(aaa: Int): A = {
A.this.aaa = aaa;
A.super.<init>();
()
}
};
class B extends A {
override <stable> <accessor> <paramaccessor> def aaa(): Int = (B.super.aaa(): Int);
def foo(): Int = B.this.aaa().+(1);
def <init>(aaa: Int): B = {
B.super.<init>(aaa);
()
}
}
}
Metadata
Metadata
Assignees
Labels
No labels