// LANGUAGE: +ContextReceivers
// TARGET_BACKEND: JVM_IR
// WITH_STDLIB

import kotlin.reflect.KProperty

var operationScore = 0

class Delegate {
    var delegateValue = "fail"

    context(Int)
    operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
        operationScore += this@Int
        return delegateValue
    }

    context(Int)
    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
        operationScore += this@Int
        delegateValue = value
    }
}

context(Int)
class Result {
    var s: String by Delegate()
}

fun box(): String {
    val result = with(1) { Result() }
    result.s = "OK"
    val returnValue = result.s
    return if (operationScore == 2) returnValue else "fail"
}
