// MUTE_LL_FIR: KT-65218 // WITH_REFLECT // FIR_DUMP import kotlin.reflect.* interface Foo { var a: T val b: Array fun accept(arg: T) } class FooImpl : Foo fun bar(p: KMutableProperty0) { p.set(100) } fun myBuilder(block: Foo.() -> Unit): Foo = FooImpl().apply(block) fun Foo.change(block: Foo.() -> Unit): Foo { this.block() return this } fun main(arg: Any, condition: Boolean) { val value = myBuilder { b[0] = 123 a = 45 a++ bar(::a) if (a is Int) { a = 67 a-- bar(::a) } when (condition) { true -> a = 87 false -> a = 65 } val x by a change { a = 99 } } val value2 = myBuilder { accept("") a = 45 when (condition) { true -> a = 87 false -> a = 65 } change { a = 99 } if (a is Int) { a = 67 } } // See KT-54664 val value3 = myBuilder { accept("") a = 45 bar(::a) } fun baz(t: Int) {} val value4 = myBuilder { accept("") a = 45 b[0] = 123 baz(a) } }