| == x == |
| var x: Int |
| --------------------- |
| L0: |
| 1 <START> INIT: in: {} out: {} |
| v(var x: Int) INIT: in: {} out: {x=D} |
| L1: |
| <END> INIT: in: {x=D} out: {x=D} |
| error: |
| <ERROR> INIT: in: {} out: {} |
| sink: |
| <SINK> INIT: in: {x=-} out: {x=-} USE: in: {} out: {} |
| ===================== |
| == foo == |
| fun foo(f: Boolean) { |
| try { |
| if (f) { |
| x = 0 |
| } |
| } |
| finally { |
| fun bar() {} |
| } |
| } |
| --------------------- |
| L0: |
| 1 <START> INIT: in: {} out: {} |
| v(f: Boolean) INIT: in: {} out: {} |
| magic[FAKE_INITIALIZER](f: Boolean) -> <v0> INIT: in: {} out: {} |
| w(f|<v0>) INIT: in: {} out: {} |
| 2 mark({ try { if (f) { x = 0 } } finally { fun bar() {} } }) INIT: in: {} out: {} |
| mark(try { if (f) { x = 0 } } finally { fun bar() {} }) |
| jmp?(L2) |
| 3 mark({ if (f) { x = 0 } }) |
| mark(if (f) { x = 0 }) |
| r(f) -> <v1> |
| jf(L3|<v1>) |
| 4 mark({ x = 0 }) |
| r(0) -> <v2> |
| w(x|<v2>) |
| 3 jmp(L4) |
| L3 [else branch]: |
| read (Unit) |
| L4 ['if' expression result]: |
| merge(if (f) { x = 0 }|!<v3>) -> <v4> |
| 2 jmp?(L2) |
| jmp(L5) |
| L2 [onExceptionToFinallyBlock]: |
| L6 [start finally]: |
| 3 mark({ fun bar() {} }) |
| jmp?(L7) |
| d(fun bar() {}) |
| L7 [after local declaration]: |
| L10 [finish finally]: |
| 2 jmp(error) |
| L5 [skipFinallyToErrorBlock]: |
| L11 [copy of L2, onExceptionToFinallyBlock]: |
| 3 mark({ fun bar() {} }) |
| jmp?(L12) |
| d(fun bar() {}) |
| L12 [copy of L7, after local declaration]: |
| 2 merge(try { if (f) { x = 0 } } finally { fun bar() {} }|<v4>) -> <v5> |
| L1: |
| 1 <END> |
| error: |
| <ERROR> |
| sink: |
| <SINK> USE: in: {} out: {} |
| ===================== |
| == bar == |
| fun bar() {} |
| --------------------- |
| L8: |
| 4 <START> INIT: in: {} out: {} |
| 5 mark({}) |
| read (Unit) |
| L9: |
| 4 <END> |
| error: |
| <ERROR> |
| sink: |
| <SINK> USE: in: {} out: {} |
| ===================== |
| == bar == |
| fun bar() {} |
| --------------------- |
| L2 [copy of L8, null]: |
| 4 <START> INIT: in: {} out: {} |
| 5 mark({}) |
| read (Unit) |
| L3 [copy of L9, null]: |
| 4 <END> |
| L0 [copy of error, null]: |
| <ERROR> |
| L1 [copy of sink, null]: |
| <SINK> USE: in: {} out: {} |
| ===================== |