blob: b407b486fab6c7e71cff4513d777d56a5731ab95 [file]
// TARGET_BACKEND: JVM
// FILE: 1.kt
package test
interface I {
fun f(useCapturedInSelf: Boolean): String
}
inline fun <reified T> cast(x: Any): T = x as T
fun <T: Any> createAnotherInstance(clazz: Class<T>, capturedValue: String) : T {
val constructor = clazz.getDeclaredConstructor(String::class.java)
constructor.isAccessible = true
return constructor.newInstance(capturedValue)
}
var global: String = ""
inline fun test(captured: String) = object : I {
override fun f(useCapturedInSelf: Boolean): String = g(useCapturedInSelf)
inline fun g(useCapturedInSelf: Boolean): String {
val target = if (useCapturedInSelf) this else cast(createAnotherInstance(javaClass, global))
return target.h()
}
inline fun h(): String = captured
}
// FILE: 2.kt
import test.*
fun box(): String {
global = "Fail 1"
val result1 = test("OK").f(true)
if (result1 != "OK") return result1
global = "OK"
return test("Fail 2").f(false)
}