This commit is contained in:
Igor Chevdar
2021-10-14 23:19:18 +05:00
committed by Space
parent 167dc81d3b
commit f1c1094393
3 changed files with 37 additions and 4 deletions
@@ -439,10 +439,8 @@ internal object FileInitializersOptimization {
} else {
require(objectClass.isExternal || objectClass is IrLazyClass) { "No constructor for ${objectClass.render()}" }
}
val file = objectClass.fileOrNull ?: return data
val fileId = initializedFiles.fileIds[file]!!
if (data.get(fileId)) return data
return data.copy().also { it.set(fileId) }
// Don't update [data] as the constructor might not be called here (the object might be initialized already).
return data
}
private fun processCall(expression: IrFunctionAccessExpression, actualCallee: IrFunction, data: BitSet): BitSet {
@@ -1622,6 +1622,11 @@ standaloneTest("initializers_return2") {
useGoldenData = true
}
standaloneTest("initializers_object") {
source = "codegen/initializers/object.kt"
flags = ['-Xir-property-lazy-initialization=enable']
}
linkTest("initializers_linkTest1") {
useGoldenData = true
source = "codegen/initializers/linkTest1_main.kt"
@@ -0,0 +1,30 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
// FILE: lib.kt
var z = false
// FILE: lib2.kt
val x = foo()
fun foo(): Int {
z = true
return 42
}
object Z {
fun bar() { }
fun baz() = x
}
// FILE: main.kt
import kotlin.test.*
fun main() {
Z.bar()
assertFalse(z)
assertEquals(42, Z.baz())
assertTrue(z)
}