blob: b3091754d6d33c96de4479e41bec7c158c3ff992 [file]
// IGNORE_BACKEND: JS_IR, JS_IR_ES6
// IGNORE_KLIB_RUNTIME_ERRORS_WITH_CUSTOM_SECOND_STAGE: Wasm-js:2.3,2.4
// ISSUE: KT-83356 K/Wasm: Difference in behavior on nested class initialization (for enums?)
// MODULE: lib
// FILE: lib.kt
package lib
var log = ""
enum class FromLibNested(a: String) {
X("x"),
Y("y");
init {
log += "FromLibNested.init($a);"
}
object Nested {
init {
log += "FromLibNested.Nested.init;"
}
fun ping() {
log += "FromLibNested.Nested.ping;"
}
fun entry(): FromLibNested {
log += "FromLibNested.Nested.entry.before;"
val result = X
log += "FromLibNested.Nested.entry.after;"
return result
}
}
class RegularNested {
init {
log += "FromLibNested.RegularNested.init;"
}
fun ping() {
log += "FromLibNested.RegularNested.ping;"
}
}
}
enum class FromLibCompanion(a: String) {
X("x"),
Y("y");
init {
log += "FromLibCompanion.init($a);"
}
companion object Named {
init {
log += "FromLibCompanion.Named.init;"
}
fun ping() {
log += "FromLibCompanion.Named.ping;"
}
}
}
fun resetLog() {
log = ""
}
// MODULE: main(lib)
// FILE: main.kt
import lib.*
fun checkLog(testName: String, expected: String): String? {
if (log != expected) return "$testName: expected <$expected>, actual <$log>"
resetLog()
return null
}
fun box(): String {
FromLibNested.Nested.ping()
var failure = checkLog(
"cross-module nested object access",
"FromLibNested.Nested.init;FromLibNested.Nested.ping;"
)
if (failure != null) return failure
val regularNested = FromLibNested.RegularNested()
regularNested.ping()
failure = checkLog(
"cross-module regular nested class access",
"FromLibNested.RegularNested.init;FromLibNested.RegularNested.ping;"
)
if (failure != null) return failure
val nestedEntry = FromLibNested.Nested.entry()
log += "${nestedEntry.name};"
failure = checkLog(
"cross-module nested object explicit enum entry access",
"FromLibNested.Nested.entry.before;FromLibNested.init(x);FromLibNested.init(y);FromLibNested.Nested.entry.after;X;"
)
if (failure != null) return failure
FromLibCompanion.Named.ping()
failure = checkLog(
"cross-module named companion object access",
"FromLibCompanion.init(x);FromLibCompanion.init(y);FromLibCompanion.Named.init;FromLibCompanion.Named.ping;"
)
if (failure != null) return failure
return "OK"
}