From b02f0f0a2517122715089beceed11124c47fc720 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Fri, 28 Aug 2020 13:43:52 +0200 Subject: [PATCH] JVM IR: Fix compilation of nested inner classes --- .../codegen/ir/FirBlackBoxCodegenTestGenerated.java | 5 +++++ .../backend/common/lower/InnerClassesLowering.kt | 2 +- .../codegen/box/innerNested/nestedInnerClass.kt | 13 +++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 5 +++++ .../codegen/LightAnalysisModeTestGenerated.java | 5 +++++ .../codegen/ir/IrBlackBoxCodegenTestGenerated.java | 5 +++++ .../semantics/IrJsCodegenBoxES6TestGenerated.java | 5 +++++ .../ir/semantics/IrJsCodegenBoxTestGenerated.java | 5 +++++ .../test/semantics/JsCodegenBoxTestGenerated.java | 5 +++++ 9 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/innerNested/nestedInnerClass.kt diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index ee9593507ca..e5032e166eb 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -14478,6 +14478,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/innerNested/nestedInPackage.kt"); } + @TestMetadata("nestedInnerClass.kt") + public void testNestedInnerClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/nestedInnerClass.kt"); + } + @TestMetadata("nestedObjects.kt") public void testNestedObjects() throws Exception { runTest("compiler/testData/codegen/box/innerNested/nestedObjects.kt"); diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt index 766aac021b4..129fbc80def 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt @@ -141,7 +141,7 @@ class InnerClassesMemberBodyLowering(val context: BackendContext, private val in private fun IrBody.fixThisReference(irClass: IrClass, container: IrDeclaration) { val enclosingFunction: IrDeclaration? = run { var current: IrDeclaration? = container - while (current != null && current !is IrFunction) { + while (current != null && current !is IrFunction && current !is IrClass) { current = current.parent as? IrDeclaration } current diff --git a/compiler/testData/codegen/box/innerNested/nestedInnerClass.kt b/compiler/testData/codegen/box/innerNested/nestedInnerClass.kt new file mode 100644 index 00000000000..d0b9013523d --- /dev/null +++ b/compiler/testData/codegen/box/innerNested/nestedInnerClass.kt @@ -0,0 +1,13 @@ +class A(val x: String) { + fun value(): String { + return object { + inner class Y { + val y = x + } + + fun value() = Y().y + }.value() + } +} + +fun box(): String = A("OK").value() diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 4bcb57976db..763e9111b7b 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -15703,6 +15703,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/innerNested/nestedInPackage.kt"); } + @TestMetadata("nestedInnerClass.kt") + public void testNestedInnerClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/nestedInnerClass.kt"); + } + @TestMetadata("nestedObjects.kt") public void testNestedObjects() throws Exception { runTest("compiler/testData/codegen/box/innerNested/nestedObjects.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index ebc2b07dc58..8c87ec61ab6 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -15703,6 +15703,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/innerNested/nestedInPackage.kt"); } + @TestMetadata("nestedInnerClass.kt") + public void testNestedInnerClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/nestedInnerClass.kt"); + } + @TestMetadata("nestedObjects.kt") public void testNestedObjects() throws Exception { runTest("compiler/testData/codegen/box/innerNested/nestedObjects.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index c1e79b0e0de..c5f573f8f3f 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -14478,6 +14478,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/innerNested/nestedInPackage.kt"); } + @TestMetadata("nestedInnerClass.kt") + public void testNestedInnerClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/nestedInnerClass.kt"); + } + @TestMetadata("nestedObjects.kt") public void testNestedObjects() throws Exception { runTest("compiler/testData/codegen/box/innerNested/nestedObjects.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 7407abf1631..8167d57cfa2 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -12533,6 +12533,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/innerNested/nestedInPackage.kt"); } + @TestMetadata("nestedInnerClass.kt") + public void testNestedInnerClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/nestedInnerClass.kt"); + } + @TestMetadata("nestedObjects.kt") public void testNestedObjects() throws Exception { runTest("compiler/testData/codegen/box/innerNested/nestedObjects.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index b590509c2bb..fef39e6b3dc 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -12533,6 +12533,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/innerNested/nestedInPackage.kt"); } + @TestMetadata("nestedInnerClass.kt") + public void testNestedInnerClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/nestedInnerClass.kt"); + } + @TestMetadata("nestedObjects.kt") public void testNestedObjects() throws Exception { runTest("compiler/testData/codegen/box/innerNested/nestedObjects.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index d2e3febf121..c9710cb4367 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -12598,6 +12598,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/innerNested/nestedInPackage.kt"); } + @TestMetadata("nestedInnerClass.kt") + public void testNestedInnerClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/nestedInnerClass.kt"); + } + @TestMetadata("nestedObjects.kt") public void testNestedObjects() throws Exception { runTest("compiler/testData/codegen/box/innerNested/nestedObjects.kt");