From 6e1e4953976c950588f516cbcec758d4ae89cd54 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Thu, 28 Feb 2013 14:30:25 +0400 Subject: [PATCH] KT-3374 Wrong this@method receiver --- .../jet/codegen/ImplementationBodyCodegen.java | 2 +- .../thisMethodInObjectLiteral.kt | 15 +++++++++++++++ .../generated/BlackBoxCodegenTestGenerated.java | 5 +++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/extensionFunctions/thisMethodInObjectLiteral.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 3bf9a3272dc..46ac7318a20 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -1024,7 +1024,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { if (captureReceiver != null) { iv.load(0, OBJECT_TYPE); 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()); k += asmType.getSize(); } diff --git a/compiler/testData/codegen/box/extensionFunctions/thisMethodInObjectLiteral.kt b/compiler/testData/codegen/box/extensionFunctions/thisMethodInObjectLiteral.kt new file mode 100644 index 00000000000..cf541e2edb4 --- /dev/null +++ b/compiler/testData/codegen/box/extensionFunctions/thisMethodInObjectLiteral.kt @@ -0,0 +1,15 @@ +class Test { + private fun 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" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index 4f29232b103..502aa726d78 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -1577,6 +1577,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { 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") public void testVirtual() throws Exception { doTest("compiler/testData/codegen/box/extensionFunctions/virtual.kt");