== main == fun main() { while(1 > 0) { 2 } } --------------------- L0: mark({ while(1 > 0) { 2 } }) mark(while(1 > 0) { 2 }) L2 [loop entry point]: L5 [condition entry point]: mark(1 > 0) PREV:[mark(while(1 > 0) { 2 }), jmp(L2 [loop entry point])] r(1) r(0) call(>, compareTo) jf(L3 [loop exit point]) NEXT:[read (Unit), mark({ 2 })] L4 [body entry point]: mark({ 2 }) r(2) jmp(L2 [loop entry point]) NEXT:[mark(1 > 0)] L3 [loop exit point]: read (Unit) PREV:[jf(L3 [loop exit point])] L1: NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == dowhile == fun dowhile() { do {return} while(1 > 0) } --------------------- L0: mark({ do {return} while(1 > 0) }) mark(do {return} while(1 > 0)) L2 [loop entry point]: L4 [body entry point]: mark({return}) ret L1 NEXT:[] L5 [condition entry point]: - mark(1 > 0) PREV:[] - r(1) PREV:[] - r(0) PREV:[] - call(>, compareTo) PREV:[] - jt(L2 [loop entry point]) NEXT:[read (Unit), mark({return})] PREV:[] L3 [loop exit point]: - read (Unit) PREV:[] L1: NEXT:[] PREV:[ret L1] error: PREV:[] sink: PREV:[, ] =====================