edbf360852
The reason is that while there are optimizations for them definition of their state is both rather simple and may be confusing in testData
98 lines
2.5 KiB
Plaintext
Vendored
98 lines
2.5 KiB
Plaintext
Vendored
== 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: {}
|
|
=====================
|