Make sure lateinit top-level properties work in JVM BE

This commit is contained in:
Dmitry Petrov
2017-06-01 15:21:39 +03:00
parent d951e957ea
commit 01cce59c35
9 changed files with 262 additions and 0 deletions
@@ -0,0 +1,27 @@
// WITH_REFLECT
// IGNORE_BACKEND: JS, NATIVE
// FILE: lateinit.kt
private lateinit var s: String
object C {
fun setS(value: String) { s = value }
fun getS() = s
}
// FILE: test.kt
import kotlin.UninitializedPropertyAccessException
fun box(): String {
var str2: String = ""
try {
str2 = C.getS()
return "Should throw an exception"
}
catch (e: UninitializedPropertyAccessException) {
return "OK"
}
catch (e: Throwable) {
return "Unexpected exception: ${e::class.qualifiedName}"
}
}
@@ -0,0 +1,13 @@
// FILE: lateinit.kt
private lateinit var s: String
object C {
fun setS(value: String) { s = value }
fun getS() = s
}
// FILE: test.kt
fun box(): String {
C.setS("OK")
return C.getS()
}
@@ -0,0 +1,8 @@
lateinit var ok: String
fun box(): String {
run {
ok = "OK"
}
return ok
}
@@ -0,0 +1,20 @@
// WITH_REFLECT
// IGNORE_BACKEND: JS, NATIVE
import kotlin.UninitializedPropertyAccessException
lateinit var str: String
fun box(): String {
var i: Int = 0
try {
i = str.length
return "Should throw an exception"
}
catch (e: UninitializedPropertyAccessException) {
return "OK"
}
catch (e: Throwable) {
return "Unexpected exception: ${e::class.qualifiedName}"
}
}
@@ -0,0 +1,20 @@
// WITH_REFLECT
// IGNORE_BACKEND: JS, NATIVE
import kotlin.UninitializedPropertyAccessException
lateinit var str: String
fun box(): String {
var str2: String = ""
try {
str2 = str
return "Should throw an exception"
}
catch (e: UninitializedPropertyAccessException) {
return "OK"
}
catch (e: Throwable) {
return "Unexpected exception: ${e::class.qualifiedName}"
}
}