// DONT_TARGET_EXACT_BACKEND: WASM // WASM_MUTE_REASON: PROPERTY_REFERENCES import kotlin.reflect.KProperty public open class TestDelegate(private val initializer: () -> T) { private var value: T? = null operator open fun getValue(thisRef: Any?, desc: KProperty<*>): T { if (value == null) { value = initializer() } return value!! } operator open fun setValue(thisRef: Any?, desc: KProperty<*>, svalue : T) { value = svalue } } class A class B class C class D public val A.s: String by TestDelegate({"A"}) public val B.s: String by TestDelegate({"B"}) public val C.s: String by TestDelegate({"C"}) public val D.s: String by TestDelegate({"D"}) fun box() : String { if (A().s != "A") return "Fail A" if (B().s != "B") return "Fail B" if (C().s != "C") return "Fail C" if (D().s != "D") return "Fail D" return "OK" }