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