| // TODO: check mentioned debug output of escape analyser | |
| class A(val s: String) | |
| class B { | |
| var f: A = A("OK") | |
| } | |
| class C { | |
| var g: B = B() | |
| } | |
| // ----- Agressive ----- | |
| // PointsTo: | |
| // RET.v@lue -> D0 | |
| // D0.f -> P0.g.f | |
| // Escapes: | |
| // ----- Passive ----- | |
| // PointsTo: | |
| // P0.g.f -> D2 | |
| // RET.v@lue -> D0 | |
| // D0.f -> P0.g.f | |
| // D0.f -> D1 | |
| // D1 -> D2 | |
| // Escapes: D0 D1 | |
| fun foo(c1: C, c2: C): B { | |
| val b = B() | |
| b.f = c1.g.f | |
| return b | |
| } | |
| fun box(): String = foo(C(), C()).f.s |