== t1 == fun t1() { for (i in 1..2) { doSmth(i) } } --------------------- L0: 1 2 mark({ for (i in 1..2) { doSmth(i) } }) 3 r(1) -> r(2) -> mark(1..2) call(1..2, rangeTo|, ) -> mark(1..2) call(1..2, iterator|) -> v(i) L2 [loop entry point]: L6 [condition entry point]: mark(1..2) PREV:[v(i), jmp(L2)] call(1..2, hasNext) -> jmp?(L3) NEXT:[read (Unit), mark(1..2)] mark(1..2) call(1..2, next) -> magic[LOOP_RANGE_ITERATION](1..2|) -> w(i|) mark(for (i in 1..2) { doSmth(i) }) L4 [body entry point]: 4 mark({ doSmth(i) }) r(i) -> mark(doSmth(i)) call(doSmth(i), doSmth|) -> 3 jmp(L2) NEXT:[mark(1..2)] L3 [loop exit point]: L5 [body exit point]: read (Unit) PREV:[jmp?(L3)] L1: 1 NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == doSmth == fun doSmth(i: Int) {} --------------------- L0: 1 v(i: Int) magic[FAKE_INITIALIZER](i: Int) -> w(i|) 2 mark({}) read (Unit) L1: 1 NEXT:[] error: PREV:[] sink: PREV:[, ] =====================