| // OPT_IN: kotlin.contracts.ExperimentalContracts |
| // JVM_ABI_K1_K2_DIFF: KT-62845 |
| |
| // FILE: 1.kt |
| package test |
| |
| import kotlin.contracts.* |
| |
| class A { |
| var res = "FAIL" |
| |
| fun foo() { |
| bar { |
| res = "OK" |
| } |
| } |
| |
| inline fun bar(crossinline not_exactly_once: () -> Unit) { |
| baz { |
| not_exactly_once() |
| } |
| } |
| } |
| |
| inline fun baz(crossinline exactly_once: () -> Unit) { |
| contract { |
| callsInPlace(exactly_once, InvocationKind.EXACTLY_ONCE) |
| }; |
| |
| { exactly_once() }.let { it() } |
| } |
| |
| // FILE: 2.kt |
| |
| import test.* |
| |
| fun box(): String { |
| val a = A() |
| a.foo() |
| return a.res |
| } |