== foo == fun foo() { val a = 1 val b: Int b = 2 42 } --------------------- L0: 1 INIT: in: {} out: {} USE: in: {} out: {} 2 mark({ val a = 1 val b: Int b = 2 42 }) v(val a = 1) INIT: in: {} out: {} r(1) -> INIT: in: {} out: {} w(a|) INIT: in: {} out: {} v(val b: Int) INIT: in: {} out: {b=D} r(2) -> INIT: in: {b=D} out: {b=D} USE: in: {b=ONLY_WRITTEN_NEVER_READ} out: {b=ONLY_WRITTEN_NEVER_READ} w(b|) INIT: in: {b=D} out: {b=ID} USE: in: {} out: {b=ONLY_WRITTEN_NEVER_READ} r(42) -> INIT: in: {b=ID} out: {b=ID} L1: 1 INIT: in: {} out: {} error: sink: USE: in: {} out: {} ===================== == bar == fun bar(foo: Foo) { foo.c foo.c = 2 42 } --------------------- L0: 1 INIT: in: {} out: {} v(foo: Foo) INIT: in: {} out: {} magic[FAKE_INITIALIZER](foo: Foo) -> INIT: in: {} out: {} w(foo|) INIT: in: {} out: {} 2 mark({ foo.c foo.c = 2 42 }) INIT: in: {} out: {} mark(foo.c) r(foo) -> r(c|) -> r(foo) -> r(2) -> w(foo.c|, ) r(42) -> L1: 1 error: sink: USE: in: {} out: {} ===================== == Foo == interface Foo { var c: Int } --------------------- L0: 1 INIT: in: {} out: {} v(var c: Int) INIT: in: {} out: {} L1: INIT: in: {} out: {} error: sink: USE: in: {} out: {} =====================