5b9c35de2e
#KT-61129 Fixed
22 lines
427 B
Kotlin
Vendored
22 lines
427 B
Kotlin
Vendored
import kotlin.contracts.*
|
|
|
|
@Suppress("OPT_IN_USAGE_ERROR", "OPT_IN_USAGE_FUTURE_ERROR")
|
|
fun exactlyOnce(f: () -> Unit) {
|
|
contract {
|
|
callsInPlace(f, InvocationKind.EXACTLY_ONCE)
|
|
}
|
|
f()
|
|
}
|
|
|
|
fun test() {
|
|
var s: String? = ""
|
|
if (s != null) {
|
|
val block: () -> Unit
|
|
exactlyOnce {
|
|
block = { s = null }
|
|
}
|
|
block()
|
|
<!SMARTCAST_IMPOSSIBLE!>s<!>.length
|
|
}
|
|
}
|