Do not add extra 'this' parameter for TImpl's accessor

Fixes weird cases like super-call from a closure inside a trait with a required
class
This commit is contained in:
Alexander Udalov
2012-11-06 15:42:22 +04:00
parent 2edb89b5c5
commit 89b8bbec57
4 changed files with 47 additions and 2 deletions
@@ -519,8 +519,6 @@ public class JetTypeMapper extends BindingTraceAware {
signatureVisitor.writeParametersStart();
writeThisForAccessorIfNeeded(f, signatureVisitor);
if (kind == OwnerKind.TRAIT_IMPL) {
ClassDescriptor containingDeclaration = (ClassDescriptor) f.getContainingDeclaration();
JetType jetType = CodegenUtil.getSuperClass(containingDeclaration);
@@ -534,6 +532,9 @@ public class JetTypeMapper extends BindingTraceAware {
signatureVisitor.writeAsmType(type, jetType.isNullable());
signatureVisitor.writeParameterTypeEnd();
}
else {
writeThisForAccessorIfNeeded(f, signatureVisitor);
}
if (receiverType != null) {
signatureVisitor.writeParameterType(JvmMethodParameterKind.RECEIVER);
@@ -0,0 +1,16 @@
open class Base {
open fun foo() { }
}
trait Derived : Base {
override fun foo() {
super.foo()
}
}
class DerivedImpl : Derived, Base()
fun box(): String {
DerivedImpl().foo()
return "OK"
}
@@ -0,0 +1,20 @@
open class Base {
open fun foo() { }
}
trait Derived : Base {
override fun foo() {
object {
fun bar() {
super<Base>@Derived.foo()
}
}.bar()
}
}
class DerivedImpl : Derived, Base()
fun box(): String {
DerivedImpl().foo()
return "OK"
}
@@ -88,4 +88,12 @@ public class TraitsTest extends CodegenTestCase {
public void testKt2963() {
blackBoxFile("regressions/kt2963.kt");
}
public void testWithRequiredSuper() {
blackBoxFile("traits/withRequiredSuper.kt");
}
public void testWithRequiredSuperViaBridge() {
blackBoxFile("traits/withRequiredSuperViaBridge.kt");
}
}