== C == class C() { val a: Int = 1 class object { val x : Int { $x = 1 } fun foo() { val b : Int = 1 doSmth(b) } } } --------------------- l0: NEXT:[v(val a: Int = 1)] PREV:[] v(val a: Int = 1) NEXT:[r(1)] PREV:[] r(1) NEXT:[w(a)] PREV:[v(val a: Int = 1)] w(a) NEXT:[] PREV:[r(1)] l1: NEXT:[] PREV:[w(a)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] ===================== == null == object { val x : Int { $x = 1 } fun foo() { val b : Int = 1 doSmth(b) } } --------------------- l0: NEXT:[v(val x : Int)] PREV:[] v(val x : Int) NEXT:[r(1)] PREV:[] r(1) NEXT:[w($x)] PREV:[v(val x : Int)] w($x) NEXT:[] PREV:[r(1)] l1: NEXT:[] PREV:[w($x)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] ===================== == O == object O { val x : Int { $x = 1 } } --------------------- l0: NEXT:[v(val x : Int)] PREV:[] v(val x : Int) NEXT:[r(1)] PREV:[] r(1) NEXT:[w($x)] PREV:[v(val x : Int)] w($x) NEXT:[] PREV:[r(1)] l1: NEXT:[] PREV:[w($x)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] ===================== == doSmth == fun doSmth(i: Int) {} --------------------- l0: NEXT:[v(i: Int)] PREV:[] v(i: Int) NEXT:[w(i)] PREV:[] w(i) NEXT:[read (Unit)] PREV:[v(i: Int)] read (Unit) NEXT:[] PREV:[w(i)] l1: NEXT:[] PREV:[read (Unit)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] ===================== == test1 == fun test1() { val a = object { val x : Int { $x = 1 } } } --------------------- l0: NEXT:[v(val a = object { val x : I..)] PREV:[] v(val a = object { val x : Int { $x = 1 } }) NEXT:[v(val x : Int)] PREV:[] v(val x : Int) NEXT:[r(1)] PREV:[v(val a = object { val x : I..)] r(1) NEXT:[w($x)] PREV:[v(val x : Int)] w($x) NEXT:[r(object { val x : Int { $x ..)] PREV:[r(1)] r(object { val x : Int { $x = 1 } }) NEXT:[w(a)] PREV:[w($x)] w(a) NEXT:[] PREV:[r(object { val x : Int { $x ..)] l1: NEXT:[] PREV:[w(a)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] ===================== == test2 == fun test2() { val b = 1 val a = object { val x = b } } --------------------- l0: NEXT:[v(val b = 1)] PREV:[] v(val b = 1) NEXT:[r(1)] PREV:[] r(1) NEXT:[w(b)] PREV:[v(val b = 1)] w(b) NEXT:[v(val a = object { val x = b..)] PREV:[r(1)] v(val a = object { val x = b }) NEXT:[v(val x = b)] PREV:[w(b)] v(val x = b) NEXT:[r(b)] PREV:[v(val a = object { val x = b..)] r(b) NEXT:[w(x)] PREV:[v(val x = b)] w(x) NEXT:[r(object { val x = b }) ] PREV:[r(b)] r(object { val x = b }) NEXT:[w(a)] PREV:[w(x)] w(a) NEXT:[] PREV:[r(object { val x = b }) ] l1: NEXT:[] PREV:[w(a)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] ===================== == inner_bar == fun inner_bar() { y = 10 } --------------------- l3: NEXT:[r(10)] PREV:[] r(10) NEXT:[w(y)] PREV:[] w(y) NEXT:[] PREV:[r(10)] l4: NEXT:[] PREV:[w(y)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] ===================== == test3 == fun test3() { val a = object { val y : Int fun inner_bar() { y = 10 } } } --------------------- l0: NEXT:[v(val a = object { val y : I..)] PREV:[] v(val a = object { val y : Int fun inner_bar() { y = 10 } }) NEXT:[v(val y : Int)] PREV:[] v(val y : Int) NEXT:[jmp?(l2)] PREV:[v(val a = object { val y : I..)] jmp?(l2) NEXT:[r(object { val y : Int fun i..), d(fun inner_bar() { y = 10 }) ] PREV:[v(val y : Int)] d(fun inner_bar() { y = 10 }) NEXT:[] PREV:[jmp?(l2)] l2: r(object { val y : Int fun inner_bar() { y = 10 } }) NEXT:[w(a)] PREV:[jmp?(l2)] w(a) NEXT:[] PREV:[r(object { val y : Int fun i..)] l1: NEXT:[] PREV:[w(a)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[d(fun inner_bar() { y = 10 }) , ] l3: NEXT:[r(10)] PREV:[] r(10) NEXT:[w(y)] PREV:[] w(y) NEXT:[] PREV:[r(10)] l4: NEXT:[] PREV:[w(y)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] ===================== == ggg == fun ggg() { y = 10 } --------------------- l3: NEXT:[r(10)] PREV:[] r(10) NEXT:[w(y)] PREV:[] w(y) NEXT:[] PREV:[r(10)] l4: NEXT:[] PREV:[w(y)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] ===================== == test4 == fun test4() { val a = object { val x : Int val y : Int { $x = 1 } fun ggg() { y = 10 } } } --------------------- l0: NEXT:[v(val a = object { val x : I..)] PREV:[] v(val a = object { val x : Int val y : Int { $x = 1 } fun ggg() { y = 10 } }) NEXT:[v(val x : Int)] PREV:[] v(val x : Int) NEXT:[v(val y : Int)] PREV:[v(val a = object { val x : I..)] v(val y : Int) NEXT:[r(1)] PREV:[v(val x : Int)] r(1) NEXT:[w($x)] PREV:[v(val y : Int)] w($x) NEXT:[jmp?(l2)] PREV:[r(1)] jmp?(l2) NEXT:[r(object { val x : Int val y..), d(fun ggg() { y = 10 }) ] PREV:[w($x)] d(fun ggg() { y = 10 }) NEXT:[] PREV:[jmp?(l2)] l2: r(object { val x : Int val y : Int { $x = 1 } fun ggg() { y = 10 } }) NEXT:[w(a)] PREV:[jmp?(l2)] w(a) NEXT:[] PREV:[r(object { val x : Int val y..)] l1: NEXT:[] PREV:[w(a)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[d(fun ggg() { y = 10 }) , ] l3: NEXT:[r(10)] PREV:[] r(10) NEXT:[w(y)] PREV:[] w(y) NEXT:[] PREV:[r(10)] l4: NEXT:[] PREV:[w(y)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] ===================== == foo == fun foo() { x = 3 } --------------------- l3: NEXT:[r(3)] PREV:[] r(3) NEXT:[w(x)] PREV:[] w(x) NEXT:[] PREV:[r(3)] l4: NEXT:[] PREV:[w(x)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] ===================== == bar == fun bar() { x = 4 } --------------------- l6: NEXT:[r(4)] PREV:[] r(4) NEXT:[w(x)] PREV:[] w(x) NEXT:[] PREV:[r(4)] l7: NEXT:[] PREV:[w(x)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] ===================== == test5 == fun test5() { val a = object { var x = 1 { $x = 2 } fun foo() { x = 3 } fun bar() { x = 4 } } } --------------------- l0: NEXT:[v(val a = object { var x = 1..)] PREV:[] v(val a = object { var x = 1 { $x = 2 } fun foo() { x = 3 } fun bar() { x = 4 } }) NEXT:[v(var x = 1)] PREV:[] v(var x = 1) NEXT:[r(1)] PREV:[v(val a = object { var x = 1..)] r(1) NEXT:[w(x)] PREV:[v(var x = 1)] w(x) NEXT:[r(2)] PREV:[r(1)] r(2) NEXT:[w($x)] PREV:[w(x)] w($x) NEXT:[jmp?(l2)] PREV:[r(2)] jmp?(l2) NEXT:[jmp?(l5), d(fun foo() { x = 3 }) ] PREV:[w($x)] d(fun foo() { x = 3 }) NEXT:[] PREV:[jmp?(l2)] l2: jmp?(l5) NEXT:[r(object { var x = 1 { $x = ..), d(fun bar() { x = 4 }) ] PREV:[jmp?(l2)] d(fun bar() { x = 4 }) NEXT:[] PREV:[jmp?(l5)] l5: r(object { var x = 1 { $x = 2 } fun foo() { x = 3 } fun bar() { x = 4 } }) NEXT:[w(a)] PREV:[jmp?(l5)] w(a) NEXT:[] PREV:[r(object { var x = 1 { $x = ..)] l1: NEXT:[] PREV:[w(a)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[d(fun foo() { x = 3 }) , d(fun bar() { x = 4 }) , ] l3: NEXT:[r(3)] PREV:[] r(3) NEXT:[w(x)] PREV:[] w(x) NEXT:[] PREV:[r(3)] l4: NEXT:[] PREV:[w(x)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] l6: NEXT:[r(4)] PREV:[] r(4) NEXT:[w(x)] PREV:[] w(x) NEXT:[] PREV:[r(4)] l7: NEXT:[] PREV:[w(x)] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] ===================== == foo == fun foo() { val b : Int = 1 doSmth(b) } --------------------- l0: NEXT:[v(val b : Int = 1)] PREV:[] v(val b : Int = 1) NEXT:[r(1)] PREV:[] r(1) NEXT:[w(b)] PREV:[v(val b : Int = 1)] w(b) NEXT:[r(b)] PREV:[r(1)] r(b) NEXT:[r(doSmth)] PREV:[w(b)] r(doSmth) NEXT:[r(doSmth(b))] PREV:[r(b)] r(doSmth(b)) NEXT:[] PREV:[r(doSmth)] l1: NEXT:[] PREV:[r(doSmth(b))] error: NEXT:[] PREV:[] sink: NEXT:[] PREV:[] =====================