[K/JS, K/Wasm, K/Native] Process anonymous initializers inside classes as a part of their primary constructors ^KT-61929 Fixed

This commit is contained in:
Artem Kobzar
2023-11-17 13:04:34 +00:00
committed by Space Team
parent 3413b07550
commit e64068cf82
21 changed files with 149 additions and 2 deletions
@@ -6677,6 +6677,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
runTest("compiler/testData/codegen/box/classes/namedClassObject.kt");
}
@Test
@TestMetadata("nestedInitBlocksWithLambda.kt")
public void testNestedInitBlocksWithLambda() throws Exception {
runTest("compiler/testData/codegen/box/classes/nestedInitBlocksWithLambda.kt");
}
@Test
@TestMetadata("outerThis.kt")
public void testOuterThis() throws Exception {
@@ -6677,6 +6677,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated
runTest("compiler/testData/codegen/box/classes/namedClassObject.kt");
}
@Test
@TestMetadata("nestedInitBlocksWithLambda.kt")
public void testNestedInitBlocksWithLambda() throws Exception {
runTest("compiler/testData/codegen/box/classes/nestedInitBlocksWithLambda.kt");
}
@Test
@TestMetadata("outerThis.kt")
public void testOuterThis() throws Exception {
@@ -6677,6 +6677,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
runTest("compiler/testData/codegen/box/classes/namedClassObject.kt");
}
@Test
@TestMetadata("nestedInitBlocksWithLambda.kt")
public void testNestedInitBlocksWithLambda() throws Exception {
runTest("compiler/testData/codegen/box/classes/nestedInitBlocksWithLambda.kt");
}
@Test
@TestMetadata("outerThis.kt")
public void testOuterThis() throws Exception {
@@ -585,8 +585,14 @@ class LocalDeclarationsLowering(
rewriteFunctionBody(it.declaration, it)
}
localClassConstructors.values.forEach {
rewriteFunctionBody(it.declaration, it)
localClassConstructors.values.forEach { constructorContext ->
rewriteFunctionBody(constructorContext.declaration, constructorContext)
if (!constructorContext.declaration.isPrimary) return@forEach
constructorContext.declaration.constructedClass.declarations
.filterIsInstance<IrAnonymousInitializer>()
.forEach { rewriteFunctionBody(it, constructorContext) }
}
localClasses.values.forEach {
@@ -0,0 +1,28 @@
// KT-61929
// WITH_SDTLIB
// EXPECTED_REACHABLE_NODES: 1301
package foo
fun doSomething(lambda: () -> Unit) { lambda() }
class CompilerBug(result: String) {
var result: String = "Failed"
init {
run {
object {
init {
doSomething { completed(result) }
}
}
}
}
fun completed(value: String) {
this.result = value
}
}
fun box(): String {
return CompilerBug("OK").result
}
@@ -6443,6 +6443,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/classes/namedClassObject.kt");
}
@Test
@TestMetadata("nestedInitBlocksWithLambda.kt")
public void testNestedInitBlocksWithLambda() throws Exception {
runTest("compiler/testData/codegen/box/classes/nestedInitBlocksWithLambda.kt");
}
@Test
@TestMetadata("outerThis.kt")
public void testOuterThis() throws Exception {
@@ -6677,6 +6677,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/classes/namedClassObject.kt");
}
@Test
@TestMetadata("nestedInitBlocksWithLambda.kt")
public void testNestedInitBlocksWithLambda() throws Exception {
runTest("compiler/testData/codegen/box/classes/nestedInitBlocksWithLambda.kt");
}
@Test
@TestMetadata("outerThis.kt")
public void testOuterThis() throws Exception {
@@ -6677,6 +6677,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
runTest("compiler/testData/codegen/box/classes/namedClassObject.kt");
}
@Test
@TestMetadata("nestedInitBlocksWithLambda.kt")
public void testNestedInitBlocksWithLambda() throws Exception {
runTest("compiler/testData/codegen/box/classes/nestedInitBlocksWithLambda.kt");
}
@Test
@TestMetadata("outerThis.kt")
public void testOuterThis() throws Exception {
@@ -5830,6 +5830,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/classes/namedClassObject.kt");
}
@TestMetadata("nestedInitBlocksWithLambda.kt")
public void testNestedInitBlocksWithLambda() throws Exception {
runTest("compiler/testData/codegen/box/classes/nestedInitBlocksWithLambda.kt");
}
@TestMetadata("outerThis.kt")
public void testOuterThis() throws Exception {
runTest("compiler/testData/codegen/box/classes/outerThis.kt");