diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassAbstractLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassAbstractLowering.kt index 7353587fc89..5b382e3cea8 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassAbstractLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassAbstractLowering.kt @@ -19,7 +19,6 @@ import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.utils.addToStdlib.safeAs internal abstract class JvmValueClassAbstractLowering( val context: JvmBackendContext, @@ -171,7 +170,7 @@ internal abstract class JvmValueClassAbstractLowering( // Anonymous initializers in inline classes are processed when building the primary constructor. final override fun visitAnonymousInitializerNew(declaration: IrAnonymousInitializer): IrStatement = - if (declaration.parent.safeAs()?.isSpecificLoweringLogicApplicable() == true) + if ((declaration.parent as? IrClass)?.isSpecificLoweringLogicApplicable() == true) declaration else super.visitAnonymousInitializerNew(declaration) @@ -271,11 +270,11 @@ internal abstract class JvmValueClassAbstractLowering( visitValueDeclaration(expression.symbol.owner) override fun visitStringConcatenation(expression: IrStringConcatenation, data: Nothing?): Boolean = false - override fun visitReturn(expression: IrReturn, data: Nothing?): Boolean = expression.returnTargetSymbol.owner.safeAs() + override fun visitReturn(expression: IrReturn, data: Nothing?): Boolean = (expression.returnTargetSymbol.owner as? IrFunction) ?.let { replacements.quickCheckIfFunctionIsNotApplicable(it) } ?: false override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: Nothing?): Boolean = - declaration.parent.safeAs()?.isSpecificLoweringLogicApplicable() == true + (declaration.parent as? IrClass)?.isSpecificLoweringLogicApplicable() == true private fun visitStatementContainer(container: IrStatementContainer) = container.statements.any { it.accept(this, null) } diff --git a/compiler/testData/codegen/box/valueClasses/complex.fir.txt b/compiler/testData/codegen/box/valueClasses/complex.fir.txt index fbab77afefa..322c40ea5dc 100644 --- a/compiler/testData/codegen/box/valueClasses/complex.fir.txt +++ b/compiler/testData/codegen/box/valueClasses/complex.fir.txt @@ -133,6 +133,7 @@ public final class C { @kotlin.Metadata public final class ComplexKt { // source: 'complex.kt' + public static field late1: E private final static @org.jetbrains.annotations.NotNull field lines: java.util.List static method (): void public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String @@ -140,12 +141,14 @@ public final class ComplexKt { public final static method equalsChecks1-iUtXLc0(@org.jetbrains.annotations.NotNull p0: java.util.List): void public final static method f-sUp7gFk(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void public final static method g-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): void + public final static @org.jetbrains.annotations.NotNull method getLate1(): E public final static @org.jetbrains.annotations.NotNull method getLines(): java.util.List public final static method h-sUp7gFk(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void public final static method h1(): void public final static @org.jetbrains.annotations.NotNull method inlined-OsBMiQA(p0: int, p1: int, p2: int): D public final static @org.jetbrains.annotations.NotNull method notInlined-OsBMiQA(p0: int, p1: int, p2: int): D public final static method reuseBoxed(@org.jetbrains.annotations.NotNull p0: java.util.List): void + public final static method setLate1-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): void public final static method supply(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void public final static method testVars(@org.jetbrains.annotations.NotNull p0: NotInlined): void } diff --git a/compiler/testData/codegen/box/valueClasses/complex.kt b/compiler/testData/codegen/box/valueClasses/complex.kt index 7ec526d0416..872f3498997 100644 --- a/compiler/testData/codegen/box/valueClasses/complex.kt +++ b/compiler/testData/codegen/box/valueClasses/complex.kt @@ -183,7 +183,7 @@ fun equalsChecks(left: R>, right: R>) { supply(left == right as R>?) } -// todo add default parameters +lateinit var late1: E fun box(): String { supply("#1") @@ -219,6 +219,13 @@ fun box(): String { supply("#16") equalsChecks1(A(listOf(listOf()))) supply("#17") + late1 = e + lateinit var late2: E + late2 = e + supply(e) + supply(late1) + supply(late2) + supply("#18") val log = lines.joinToString("\n") val expectedLog = @@ -305,6 +312,10 @@ fun box(): String { true #16 #17 + E(x=D(x=C(x=3, y=B(x=4), z=5))) + E(x=D(x=C(x=3, y=B(x=4), z=5))) + E(x=D(x=C(x=3, y=B(x=4), z=5))) + #18 """.trimIndent() require(log == expectedLog) { log } diff --git a/compiler/testData/codegen/box/valueClasses/complex.txt b/compiler/testData/codegen/box/valueClasses/complex.txt index 37708a32066..dc197966137 100644 --- a/compiler/testData/codegen/box/valueClasses/complex.txt +++ b/compiler/testData/codegen/box/valueClasses/complex.txt @@ -133,6 +133,7 @@ public final class C { @kotlin.Metadata public final class ComplexKt { // source: 'complex.kt' + public static field late1: E private final static @org.jetbrains.annotations.NotNull field lines: java.util.List static method (): void public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String @@ -140,12 +141,14 @@ public final class ComplexKt { public final static method equalsChecks1-iUtXLc0(@org.jetbrains.annotations.NotNull p0: java.util.List): void public final static method f-sUp7gFk(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void public final static method g-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): void + public final static @org.jetbrains.annotations.NotNull method getLate1(): E public final static @org.jetbrains.annotations.NotNull method getLines(): java.util.List public final static method h-sUp7gFk(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void public final static method h1(): void public final static @org.jetbrains.annotations.NotNull method inlined-OsBMiQA(p0: int, p1: int, p2: int): D public final static @org.jetbrains.annotations.NotNull method notInlined-OsBMiQA(p0: int, p1: int, p2: int): D public final static method reuseBoxed(@org.jetbrains.annotations.NotNull p0: java.util.List): void + public final static method setLate1-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): void public final static method supply(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void public final static method testVars(@org.jetbrains.annotations.NotNull p0: NotInlined): void } diff --git a/compiler/testData/codegen/box/valueClasses/functionReferences.kt b/compiler/testData/codegen/box/valueClasses/functionReferences.kt index 0e1156944d0..6e60e5f11a4 100644 --- a/compiler/testData/codegen/box/valueClasses/functionReferences.kt +++ b/compiler/testData/codegen/box/valueClasses/functionReferences.kt @@ -4,8 +4,6 @@ // TARGET_BACKEND: JVM_IR // WORKS_WHEN_VALUE_CLASS // LANGUAGE: +ValueClasses -// LAMBDAS: INDY -// ^ to ensure that LAMBDAS are actually CLASSes // FILE: caller.kt import kotlin.coroutines.*