// !OPT_IN: kotlin.contracts.ExperimentalContracts import kotlin.contracts.* inline fun exactlyOnce(block: () -> T): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block() } inline fun atLeastOnce(block: () -> T): T { contract { callsInPlace(block, InvocationKind.AT_LEAST_ONCE) } return block() } inline fun atMostOnce(block: () -> T): T { contract { callsInPlace(block, InvocationKind.AT_MOST_ONCE) } return block() } val a: String exactlyOnce { a = "" } a.length val b: String atLeastOnce { b = "" } b.length val c: String atMostOnce { c = "" } c.length