== TestFunctionLiteral == class TestFunctionLiteral { val sum: (Int)->Int = { (x: Int) -> sum(x - 1) + x } } --------------------- L0: 1 INIT: in: {} out: {} v(val sum: (Int)->Int = { (x: Int) -> sum(x - 1) + x }) INIT: in: {} out: {sum=D} mark({ (x: Int) -> sum(x - 1) + x }) INIT: in: {sum=D} out: {sum=D} jmp?(L2) d({ (x: Int) -> sum(x - 1) + x }) USE: in: {sum=READ} out: {sum=READ} L2: r({ (x: Int) -> sum(x - 1) + x }) -> w(sum|) INIT: in: {sum=D} out: {sum=ID} L1: INIT: in: {sum=ID} out: {sum=ID} error: INIT: in: {} out: {} sink: INIT: in: {sum=D} out: {sum=D} USE: in: {} out: {} ===================== == anonymous_0 == { (x: Int) -> sum(x - 1) + x } --------------------- L3: 2 INIT: in: {} out: {} v(x: Int) INIT: in: {} out: {x=D} magic[FAKE_INITIALIZER](x: Int) -> INIT: in: {x=D} out: {x=D} w(x|) INIT: in: {x=D} out: {x=ID} 3 mark(sum(x - 1) + x) INIT: in: {x=ID} out: {x=ID} magic[IMPLICIT_RECEIVER](sum) -> USE: in: {sum=READ, x=READ} out: {sum=READ, x=READ} r(sum|) -> USE: in: {x=READ} out: {sum=READ, x=READ} r(x) -> r(1) -> mark(x - 1) call(x - 1, minus|, ) -> mark(sum(x - 1)) call(sum(x - 1), invoke|, ) -> USE: in: {x=READ} out: {x=READ} r(x) -> USE: in: {} out: {x=READ} mark(sum(x - 1) + x) call(sum(x - 1) + x, plus|, ) -> 2 ret(*|) L4 L4: error: INIT: in: {} out: {} sink: INIT: in: {x=ID} out: {x=ID} USE: in: {} out: {} ===================== == A == open class A(val a: A) --------------------- L0: 1 INIT: in: {} out: {} v(val a: A) INIT: in: {} out: {a=D} magic[FAKE_INITIALIZER](val a: A) -> INIT: in: {a=D} out: {a=D} w(a|) INIT: in: {a=D} out: {a=ID} L1: INIT: in: {a=ID} out: {a=ID} error: INIT: in: {} out: {} sink: INIT: in: {a=ID} out: {a=ID} USE: in: {} out: {} ===================== == TestObjectLiteral == class TestObjectLiteral { val obj: A = object: A(obj) { { val x = obj } fun foo() { val y = obj } } } --------------------- L0: 1 INIT: in: {} out: {} v(val obj: A = object: A(obj) { { val x = obj } fun foo() { val y = obj } }) INIT: in: {} out: {obj=D} mark(object: A(obj) { { val x = obj } fun foo() { val y = obj } }) INIT: in: {obj=D} out: {obj=D} magic[IMPLICIT_RECEIVER](obj) -> r(obj|) -> mark(A(obj)) call(A(obj), |) -> 2 mark({ val x = obj }) v(val x = obj) INIT: in: {obj=D} out: {obj=D, x=D} magic[IMPLICIT_RECEIVER](obj) -> INIT: in: {obj=D, x=D} out: {obj=D, x=D} r(obj|) -> w(x|) INIT: in: {obj=D, x=D} out: {obj=D, x=ID} 1 jmp?(L2) INIT: in: {obj=D} out: {obj=D} d(fun foo() { val y = obj }) USE: in: {obj=READ} out: {obj=READ} L2: r(object: A(obj) { { val x = obj } fun foo() { val y = obj } }) -> w(obj|) INIT: in: {obj=D} out: {obj=ID} L1: INIT: in: {obj=ID} out: {obj=ID} error: INIT: in: {} out: {} sink: INIT: in: {obj=D} out: {obj=D} USE: in: {} out: {} ===================== == foo == fun foo() { val y = obj } --------------------- L3: 2 INIT: in: {} out: {} 3 mark({ val y = obj }) v(val y = obj) INIT: in: {} out: {y=D} magic[IMPLICIT_RECEIVER](obj) -> INIT: in: {y=D} out: {y=D} USE: in: {obj=READ} out: {obj=READ} r(obj|) -> USE: in: {} out: {obj=READ} w(y|) INIT: in: {y=D} out: {y=ID} L4: 2 INIT: in: {} out: {} error: sink: USE: in: {} out: {} ===================== == TestOther == class TestOther { val x: Int = x + 1 } --------------------- L0: 1 INIT: in: {} out: {} v(val x: Int = x + 1) INIT: in: {} out: {x=D} magic[IMPLICIT_RECEIVER](x) -> INIT: in: {x=D} out: {x=D} USE: in: {x=READ} out: {x=READ} r(x|) -> USE: in: {} out: {x=READ} r(1) -> mark(x + 1) call(x + 1, plus|, ) -> w(x|) INIT: in: {x=D} out: {x=ID} L1: INIT: in: {x=ID} out: {x=ID} error: INIT: in: {} out: {} sink: INIT: in: {x=ID} out: {x=ID} USE: in: {} out: {} =====================