KT-3374 Wrong this@method receiver
This commit is contained in:
@@ -1024,7 +1024,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
if (captureReceiver != null) {
|
if (captureReceiver != null) {
|
||||||
iv.load(0, OBJECT_TYPE);
|
iv.load(0, OBJECT_TYPE);
|
||||||
final Type asmType = typeMapper.mapType(captureReceiver.getDefaultType(), JetTypeMapperMode.IMPL);
|
final Type asmType = typeMapper.mapType(captureReceiver.getDefaultType(), JetTypeMapperMode.IMPL);
|
||||||
iv.load(1, asmType);
|
iv.load(k, asmType);
|
||||||
iv.putfield(internalName, CAPTURED_RECEIVER_FIELD, asmType.getDescriptor());
|
iv.putfield(internalName, CAPTURED_RECEIVER_FIELD, asmType.getDescriptor());
|
||||||
k += asmType.getSize();
|
k += asmType.getSize();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
class Test {
|
||||||
|
private fun <T : Any> T.self() = object{
|
||||||
|
fun calc() : T {
|
||||||
|
return this@self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box() : Int {
|
||||||
|
return 1.self().calc() + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box() : String {
|
||||||
|
return if (Test().box() == 2) "OK" else "fail"
|
||||||
|
}
|
||||||
@@ -1577,6 +1577,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
doTest("compiler/testData/codegen/box/extensionFunctions/simple.kt");
|
doTest("compiler/testData/codegen/box/extensionFunctions/simple.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("thisMethodInObjectLiteral.kt")
|
||||||
|
public void testThisMethodInObjectLiteral() throws Exception {
|
||||||
|
doTest("compiler/testData/codegen/box/extensionFunctions/thisMethodInObjectLiteral.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("virtual.kt")
|
@TestMetadata("virtual.kt")
|
||||||
public void testVirtual() throws Exception {
|
public void testVirtual() throws Exception {
|
||||||
doTest("compiler/testData/codegen/box/extensionFunctions/virtual.kt");
|
doTest("compiler/testData/codegen/box/extensionFunctions/virtual.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user