== foo == fun foo() { var a = 1 use(a) a = 2 use(a) } --------------------- L0: 1 INIT: in: {} out: {} USE: in: {} out: {} 2 mark({ var a = 1 use(a) a = 2 use(a) }) v(var a = 1) INIT: in: {} out: {a=D} r(1) -> INIT: in: {a=D} out: {a=D} w(a|) INIT: in: {a=D} out: {a=ID} USE: in: {a=READ} out: {a=READ} r(a) -> INIT: in: {a=ID} out: {a=ID} USE: in: {a=WRITTEN_AFTER_READ} out: {a=READ} mark(use(a)) call(use(a), use|) -> r(2) -> USE: in: {a=WRITTEN_AFTER_READ} out: {a=WRITTEN_AFTER_READ} w(a|) USE: in: {a=READ} out: {a=WRITTEN_AFTER_READ} r(a) -> USE: in: {} out: {a=READ} mark(use(a)) call(use(a), use|) -> L1: 1 INIT: in: {} out: {} error: sink: USE: in: {} out: {} ===================== == bar == fun bar() { val b: Int b = 3 } --------------------- L0: 1 INIT: in: {} out: {} USE: in: {} out: {} 2 mark({ val b: Int b = 3 }) v(val b: Int) INIT: in: {} out: {b=D} r(3) -> 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} L1: 1 INIT: in: {} out: {} error: sink: USE: in: {} out: {} ===================== == use == fun use(a: Int) = a --------------------- L0: 1 INIT: in: {} out: {} v(a: Int) INIT: in: {} out: {} magic[FAKE_INITIALIZER](a: Int) -> INIT: in: {} out: {} w(a|) INIT: in: {} out: {} r(a) -> INIT: in: {} out: {} ret(*|) L1 L1: error: sink: USE: in: {} out: {} =====================