== Bar == class Bar { fun invoke(x: Int, y: Int) {} } --------------------- L0: 1 L1: NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == invoke == fun invoke(x: Int, y: Int) {} --------------------- L0: 1 v(x: Int) magic[FAKE_INITIALIZER](x: Int) -> w(x|) v(y: Int) magic[FAKE_INITIALIZER](y: Int) -> w(y|) 2 mark({}) read (Unit) L1: 1 NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == Foo == class Foo { val set: Bar = Bar() } --------------------- L0: 1 v(val set: Bar = Bar()) mark(Bar()) call(Bar(), ) -> w(set|) L1: NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == test1 == fun test1(foo: Foo) { foo[1] = 2 } --------------------- L0: 1 v(foo: Foo) magic[FAKE_INITIALIZER](foo: Foo) -> w(foo|) 2 mark({ foo[1] = 2 }) mark(foo[1]) r(foo) -> r(foo[1], set|) -> r(1) -> r(2) -> call(foo[1] = 2, invoke|, , ) -> L1: 1 NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == test2 == fun test2(foo: Foo, set: Foo.(Int, Int) -> Int) { foo[1] = 2 } --------------------- L0: 1 v(foo: Foo) magic[FAKE_INITIALIZER](foo: Foo) -> w(foo|) v(set: Foo.(Int, Int) -> Int) magic[FAKE_INITIALIZER](set: Foo.(Int, Int) -> Int) -> w(set|) 2 mark({ foo[1] = 2 }) mark(foo[1]) r(foo) -> r(foo[1], set) -> r(1) -> r(2) -> call(foo[1] = 2, invoke|, , , ) -> L1: 1 NEXT:[] error: PREV:[] sink: PREV:[, ] =====================