restructured control flow tests
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
== lazyBooleans ==
|
||||
fun lazyBooleans(a : Boolean, b : Boolean) : Unit {
|
||||
if (a) {
|
||||
1
|
||||
}
|
||||
else {
|
||||
2
|
||||
}
|
||||
3
|
||||
if (a && b) 5 else 6
|
||||
7
|
||||
if (a || b) 8 else 9
|
||||
10
|
||||
if (a) 11
|
||||
12
|
||||
if (a) else 13
|
||||
14
|
||||
}
|
||||
---------------------
|
||||
L0:
|
||||
<START>
|
||||
v(a : Boolean)
|
||||
w(a)
|
||||
v(b : Boolean)
|
||||
w(b)
|
||||
mark({ if (a) { 1 } else { 2 } 3 if (a && b) 5 else 6 7 if (a || b) 8 else 9 10 if (a) 11 12 if (a) else 13 14 })
|
||||
mark(if (a) { 1 } else { 2 })
|
||||
r(a)
|
||||
jf(L2) NEXT:[mark({ 2 }), mark({ 1 })]
|
||||
mark({ 1 })
|
||||
r(1)
|
||||
jmp(L3) NEXT:[r(3)]
|
||||
L2:
|
||||
mark({ 2 }) PREV:[jf(L2)]
|
||||
r(2)
|
||||
L3:
|
||||
r(3) PREV:[jmp(L3), r(2)]
|
||||
mark(if (a && b) 5 else 6)
|
||||
r(a)
|
||||
jf(L4) NEXT:[jf(L5), r(b)]
|
||||
r(b)
|
||||
L4:
|
||||
jf(L5) NEXT:[r(6), r(5)] PREV:[jf(L4), r(b)]
|
||||
r(5)
|
||||
jmp(L6) NEXT:[r(7)]
|
||||
L5:
|
||||
r(6) PREV:[jf(L5)]
|
||||
L6:
|
||||
r(7) PREV:[jmp(L6), r(6)]
|
||||
mark(if (a || b) 8 else 9)
|
||||
r(a)
|
||||
jt(L7) NEXT:[r(b), jf(L8)]
|
||||
r(b)
|
||||
L7:
|
||||
jf(L8) NEXT:[r(9), r(8)] PREV:[jt(L7), r(b)]
|
||||
r(8)
|
||||
jmp(L9) NEXT:[r(10)]
|
||||
L8:
|
||||
r(9) PREV:[jf(L8)]
|
||||
L9:
|
||||
r(10) PREV:[jmp(L9), r(9)]
|
||||
mark(if (a) 11)
|
||||
r(a)
|
||||
jf(L10) NEXT:[read (Unit), r(11)]
|
||||
r(11)
|
||||
jmp(L11) NEXT:[r(12)]
|
||||
L10:
|
||||
read (Unit) PREV:[jf(L10)]
|
||||
L11:
|
||||
r(12) PREV:[jmp(L11), read (Unit)]
|
||||
mark(if (a) else 13)
|
||||
r(a)
|
||||
jf(L12) NEXT:[r(13), read (Unit)]
|
||||
read (Unit)
|
||||
jmp(L13) NEXT:[r(14)]
|
||||
L12:
|
||||
r(13) PREV:[jf(L12)]
|
||||
L13:
|
||||
r(14) PREV:[jmp(L13), r(13)]
|
||||
L1:
|
||||
<END> NEXT:[<SINK>]
|
||||
error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
Reference in New Issue
Block a user