== Bar == class Bar { fun invoke(x: Int, y: Int) {} } --------------------- ===================== == invoke == fun invoke(x: Int, y: Int) {} --------------------- : Int NEW: magic[FAKE_INITIALIZER](x: Int) -> : Int NEW: magic[FAKE_INITIALIZER](y: Int) -> ===================== == Foo == class Foo { val set: Bar = Bar() } --------------------- Bar() : Bar NEW: call(Bar(), ) -> ===================== == test1 == fun test1(foo: Foo) { foo[1] = 2 } --------------------- : Foo NEW: magic[FAKE_INITIALIZER](foo: Foo) -> foo : Foo NEW: r(foo) -> 1 : Int NEW: r(1) -> foo[1] : Bar NEW: r(foo[1], set|) -> 2 : Int NEW: r(2) -> foo[1] = 2 : * NEW: call(foo[1] = 2, invoke|, , ) -> { foo[1] = 2 } : * COPY ===================== == test2 == fun test2(foo: Foo, set: Foo.(Int, Int) -> Int) { foo[1] = 2 } --------------------- : Foo NEW: magic[FAKE_INITIALIZER](foo: Foo) -> : {<: Foo.(Int, Int) -> Int} NEW: magic[FAKE_INITIALIZER](set: Foo.(Int, Int) -> Int) -> foo : Foo NEW: r(foo) -> 1 : Int NEW: r(1) -> foo[1] : {<: (Foo, Int, Int) -> Int} NEW: r(foo[1], set) -> 2 : Int NEW: r(2) -> foo[1] = 2 : * NEW: call(foo[1] = 2, invoke|, , , ) -> { foo[1] = 2 } : * COPY =====================