== B == open class B(x: Int) --------------------- L0: 1 v(x: Int) magic[FAKE_INITIALIZER](x: Int) -> w(x|) L1: NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == A == class A(val w: Char, u: Int = 2) : B(w.toInt() + u) { val x: Int var y: Int val z: Int val v = -1 constructor(): this('a') { y = 2 } // anonymous init { x = w z = 8 } constructor(a: Int, b: Int = 3): this(b.toChar()) { y = x } // anonymous init { y = 9 } } --------------------- L0: 1 v(val w: Char) magic[FAKE_INITIALIZER](val w: Char) -> w(w|) v(u: Int = 2) jmp?(L2) NEXT:[magic[FAKE_INITIALIZER](u: Int = 2) -> , r(2) -> ] r(2) -> L2 [after default value for parameter u]: magic[FAKE_INITIALIZER](u: Int = 2) -> PREV:[jmp?(L2), r(2) -> ] merge(u: Int = 2|, ) -> w(u|) mark(w.toInt()) r(w) -> mark(toInt()) call(toInt(), toInt|) -> r(u) -> mark(w.toInt() + u) call(w.toInt() + u, plus|, ) -> mark(B(w.toInt() + u)) call(B(w.toInt() + u), |) -> v(val x: Int) v(var y: Int) v(val z: Int) v(val v = -1) r(1) -> mark(-1) call(-1, unaryMinus|) -> w(v|) 2 mark({ x = w z = 8 }) magic[IMPLICIT_RECEIVER](x) -> magic[IMPLICIT_RECEIVER](w) -> r(w|) -> w(x|, ) magic[IMPLICIT_RECEIVER](z) -> r(8) -> w(z|, ) mark({ y = 9 }) magic[IMPLICIT_RECEIVER](y) -> r(9) -> w(y|, ) L1: 1 NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == A == constructor(): this('a') { y = 2 } --------------------- L0: 1 r('a') -> mark(this('a')) call(this('a'), |) -> 2 mark({ y = 2 }) magic[IMPLICIT_RECEIVER](y) -> r(2) -> w(y|, ) L1: 1 NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == A == constructor(a: Int, b: Int = 3): this(b.toChar()) { y = x } --------------------- L0: 1 v(a: Int) magic[FAKE_INITIALIZER](a: Int) -> w(a|) v(b: Int = 3) jmp?(L2) NEXT:[magic[FAKE_INITIALIZER](b: Int = 3) -> , r(3) -> ] r(3) -> L2 [after default value for parameter b]: magic[FAKE_INITIALIZER](b: Int = 3) -> PREV:[jmp?(L2), r(3) -> ] merge(b: Int = 3|, ) -> w(b|) mark(b.toChar()) r(b) -> mark(toChar()) call(toChar(), toChar|) -> mark(this(b.toChar())) call(this(b.toChar()), |) -> 2 mark({ y = x }) magic[IMPLICIT_RECEIVER](y) -> magic[IMPLICIT_RECEIVER](x) -> r(x|) -> w(y|, ) L1: 1 NEXT:[] error: PREV:[] sink: PREV:[, ] =====================