blob: 51c27e351b7d9faa1073c0be1ea437b523521aa6 [file]
// LANGUAGE: +CompanionBlocksAndExtensions
// IGNORE_BACKEND: JVM, JVM_IR
var initOrder = ""
class C {
companion {
val blockProp1: String = run { initOrder += "1"; "block1" }
}
companion object {
val objectProp: String = run { initOrder += "2"; "object" }
}
companion {
val blockProp2: String = run { initOrder += "3"; "block2" }
}
}
fun box(): String {
// Trigger companion initialization by accessing a companion member
val b1 = C.blockProp1
val op = C.objectProp
val b2 = C.blockProp2
if (b1 != "block1") return "FAIL: blockProp1=$b1"
if (op != "object") return "FAIL: objectProp=$op"
if (b2 != "block2") return "FAIL: blockProp2=$b2"
// §3.2 and §3.2.1: initialization respects program order,
// including companion objects.
if (initOrder != "123") return "FAIL: initOrder=$initOrder"
return "OK"
}