| // OPT_IN: kotlin.contracts.ExperimentalContracts | |
| @file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") | |
| package test | |
| import kotlin.contracts.* | |
| public inline fun <R> run(block: () -> R): R { | |
| contract { | |
| callsInPlace(block, InvocationKind.EXACTLY_ONCE) | |
| } | |
| return block() | |
| } | |
| public inline fun <T, R> T.run(block: T.() -> R): R { | |
| contract { | |
| callsInPlace(block, InvocationKind.EXACTLY_ONCE) | |
| } | |
| return block() | |
| } | |
| public inline fun <T, R> with(receiver: T, block: T.() -> R): R { | |
| contract { | |
| callsInPlace(block, InvocationKind.EXACTLY_ONCE) | |
| } | |
| return receiver.block() | |
| } | |
| public inline fun <T> T.apply(block: T.() -> Unit): T { | |
| contract { | |
| callsInPlace(block, InvocationKind.EXACTLY_ONCE) | |
| } | |
| block() | |
| return this | |
| } | |
| public inline fun <T> T.also(block: (T) -> Unit): T { | |
| contract { | |
| callsInPlace(block, InvocationKind.EXACTLY_ONCE) | |
| } | |
| block(this) | |
| return this | |
| } | |
| public inline fun <T, R> T.let(block: (T) -> R): R { | |
| contract { | |
| callsInPlace(block, InvocationKind.EXACTLY_ONCE) | |
| } | |
| return block(this) | |
| } | |
| public inline fun <T> T.takeIf(predicate: (T) -> Boolean): T? { | |
| contract { | |
| callsInPlace(predicate, InvocationKind.EXACTLY_ONCE) | |
| } | |
| return if (predicate(this)) this else null | |
| } | |
| public inline fun repeat(times: Int, action: (Int) -> Unit) { | |
| contract { callsInPlace(action) } | |
| for (index in 0..times - 1) { | |
| action(index) | |
| } | |
| } |