b65a68ca0d
As a part of efforts to stabilize Native stdlib. Merge-request: KT-MR-9531 Merged-by: Abduqodiri Qurbonzoda <abduqodiri.qurbonzoda@jetbrains.com>
71 lines
1.8 KiB
Kotlin
Vendored
71 lines
1.8 KiB
Kotlin
Vendored
// WITH_STDLIB
|
|
// WORKS_WHEN_VALUE_CLASS
|
|
// LANGUAGE: +ValueClasses, +InlineLateinit
|
|
|
|
@file:Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class IC1(val x: String)
|
|
|
|
lateinit var a: IC1
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class IC2<T : Number>(val x: T)
|
|
|
|
class MyClass {
|
|
lateinit var b: IC2<Int>
|
|
|
|
fun isInit() = ::b.isInitialized
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class IC3<T>(val x: Comparable<T>)
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class IC4(val x: IC1)
|
|
|
|
lateinit var c: IC4
|
|
|
|
inline fun <reified T> assertThrows(block: () -> Unit): Boolean {
|
|
try {
|
|
block.invoke()
|
|
} catch (t: Throwable) {
|
|
return t is T
|
|
}
|
|
return false
|
|
}
|
|
|
|
fun box(): String {
|
|
if (::a.isInitialized) return "Fail 1.1"
|
|
if (!assertThrows<UninitializedPropertyAccessException> { val t = a }) return "Fail 1.2"
|
|
a = IC1("a")
|
|
if (!::a.isInitialized) return "Fail 1.3"
|
|
if (a.x != "a") return "Fail 1.4"
|
|
|
|
val inst = MyClass()
|
|
if (inst.isInit()) return "Fail 2.1"
|
|
if (!assertThrows<UninitializedPropertyAccessException> { val t = inst.b }) return "Fail 2.2"
|
|
inst.b = IC2(42)
|
|
if (!inst.isInit()) return "Fail 2.3"
|
|
if (inst.b.x != 42) return "Fail 2.4"
|
|
|
|
lateinit var z: IC3<Double>
|
|
if (!assertThrows<UninitializedPropertyAccessException> { val t = z }) return "Fail 3.1"
|
|
z = IC3(5.0)
|
|
if (z.x != 5.0) return "Fail 3.2"
|
|
|
|
if (::c.isInitialized) return "Fail 4.1"
|
|
if (!assertThrows<UninitializedPropertyAccessException> { val t = c }) return "Fail 4.2"
|
|
c = IC4(IC1("c"))
|
|
if (!::c.isInitialized) return "Fail 4.3"
|
|
if (c.x.x != "c") return "Fail 4.4"
|
|
|
|
return "OK"
|
|
}
|
|
|
|
//CHECK_BYTECODE_TEXT
|
|
// JVM_IR_TEMPLATES
|
|
// 0 INVOKESTATIC IC1.box-impl
|
|
// 0 INVOKESTATIC IC2.box-impl
|
|
// 0 INVOKESTATIC IC3.box-impl
|
|
// 0 INVOKESTATIC IC4.box-impl |