| == main == |
| fun main() { |
| while(0 > 1) { |
| 2 |
| } |
| } |
| --------------------- |
| L0: |
| 1 <START> |
| 2 mark({ while(0 > 1) { 2 } }) |
| L2 [loop entry point]: |
| L6 [condition entry point]: |
| r(0) -> <v0> PREV:[mark({ while(0 > 1) { 2 } }), jmp(L2)] |
| r(1) -> <v1> |
| mark(0 > 1) |
| call(0 > 1, compareTo|<v0>, <v1>) -> <v2> |
| mark(while(0 > 1) { 2 }) |
| jf(L3|<v2>) NEXT:[read (Unit), mark({ 2 })] |
| L4 [body entry point]: |
| 3 mark({ 2 }) |
| r(2) -> <v3> |
| 2 jmp(L2) NEXT:[r(0) -> <v0>] |
| L3 [loop exit point]: |
| L5 [body exit point]: |
| read (Unit) PREV:[jf(L3|<v2>)] |
| L1: |
| 1 <END> NEXT:[<SINK>] |
| error: |
| <ERROR> PREV:[] |
| sink: |
| <SINK> PREV:[<ERROR>, <END>] |
| ===================== |
| == dowhile == |
| fun dowhile() { |
| do {return} |
| while(0 > 1) |
| } |
| --------------------- |
| L0: |
| 1 <START> |
| 2 mark({ do {return} while(0 > 1) }) |
| 3 mark(do {return} while(0 > 1)) |
| L2 [loop entry point]: |
| L4 [body entry point]: |
| mark({return}) |
| ret L1 NEXT:[<END>] |
| L5 [body exit point]: |
| L6 [condition entry point]: |
| - r(0) -> <v1> PREV:[] |
| - r(1) -> <v2> PREV:[] |
| - mark(0 > 1) PREV:[] |
| - call(0 > 1, compareTo|<v1>, <v2>) -> <v3> PREV:[] |
| - 2 jt(L2|<v3>) NEXT:[read (Unit), mark({return})] PREV:[] |
| L3 [loop exit point]: |
| - read (Unit) PREV:[] |
| L1: |
| 1 <END> NEXT:[<SINK>] PREV:[ret L1] |
| error: |
| <ERROR> PREV:[] |
| sink: |
| <SINK> PREV:[<ERROR>, <END>] |
| ===================== |