Added tests for control flow graph construction
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
== t1 ==
|
||||
fun t1() {
|
||||
for (i in 1..2) {
|
||||
doSmth(i)
|
||||
}
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(1)] PREV:[]
|
||||
r(1) NEXT:[r(2)] PREV:[<START>]
|
||||
r(2) NEXT:[r(..)] PREV:[r(1)]
|
||||
r(..) NEXT:[r(1..2)] PREV:[r(2)]
|
||||
r(1..2) NEXT:[w(i)] PREV:[r(..)]
|
||||
w(i) NEXT:[jmp?(l2)] PREV:[r(1..2)]
|
||||
l3:
|
||||
jmp?(l2) NEXT:[read (Unit), r(i)] PREV:[w(i)]
|
||||
l4:
|
||||
l5:
|
||||
r(i) NEXT:[r(doSmth)] PREV:[jmp?(l2), jmp?(l4)]
|
||||
r(doSmth) NEXT:[r(doSmth(i))] PREV:[r(i)]
|
||||
r(doSmth(i)) NEXT:[jmp?(l4)] PREV:[r(doSmth)]
|
||||
jmp?(l4) NEXT:[r(i), read (Unit)] PREV:[r(doSmth(i))]
|
||||
l2:
|
||||
read (Unit) NEXT:[<END>] PREV:[jmp?(l2), jmp?(l4)]
|
||||
l1:
|
||||
<END> NEXT:[] PREV:[read (Unit)]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
=====================
|
||||
== doSmth ==
|
||||
fun doSmth(i: Int) {}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[read (Unit)] PREV:[]
|
||||
read (Unit) NEXT:[<END>] PREV:[<START>]
|
||||
l1:
|
||||
<END> NEXT:[] PREV:[read (Unit)]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
=====================
|
||||
@@ -0,0 +1,7 @@
|
||||
fun t1() {
|
||||
for (i in 1..2) {
|
||||
doSmth(i)
|
||||
}
|
||||
}
|
||||
|
||||
fun doSmth(i: Int) {}
|
||||
@@ -0,0 +1,98 @@
|
||||
== t1 ==
|
||||
fun t1(b: Boolean) {
|
||||
var u: String
|
||||
if (b) {
|
||||
u = "s"
|
||||
}
|
||||
doSmth(u)
|
||||
|
||||
var r: String
|
||||
if (b) {
|
||||
r = "s"
|
||||
}
|
||||
else {
|
||||
r = "t"
|
||||
}
|
||||
doSmth(r)
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(b)] PREV:[]
|
||||
r(b) NEXT:[jf(l2)] PREV:[<START>]
|
||||
jf(l2) NEXT:[read (Unit), r("s")] PREV:[r(b)]
|
||||
r("s") NEXT:[w(u)] PREV:[jf(l2)]
|
||||
w(u) NEXT:[jmp(l3)] PREV:[r("s")]
|
||||
jmp(l3) NEXT:[r(u)] PREV:[w(u)]
|
||||
l2:
|
||||
read (Unit) NEXT:[r(u)] PREV:[jf(l2)]
|
||||
l3:
|
||||
r(u) NEXT:[r(doSmth)] PREV:[jmp(l3), read (Unit)]
|
||||
r(doSmth) NEXT:[r(doSmth(u))] PREV:[r(u)]
|
||||
r(doSmth(u)) NEXT:[r(b)] PREV:[r(doSmth)]
|
||||
r(b) NEXT:[jf(l4)] PREV:[r(doSmth(u))]
|
||||
jf(l4) NEXT:[r("t"), r("s")] PREV:[r(b)]
|
||||
r("s") NEXT:[w(r)] PREV:[jf(l4)]
|
||||
w(r) NEXT:[jmp(l5)] PREV:[r("s")]
|
||||
jmp(l5) NEXT:[r(r)] PREV:[w(r)]
|
||||
l4:
|
||||
r("t") NEXT:[w(r)] PREV:[jf(l4)]
|
||||
w(r) NEXT:[r(r)] PREV:[r("t")]
|
||||
l5:
|
||||
r(r) NEXT:[r(doSmth)] PREV:[jmp(l5), w(r)]
|
||||
r(doSmth) NEXT:[r(doSmth(r))] PREV:[r(r)]
|
||||
r(doSmth(r)) NEXT:[<END>] PREV:[r(doSmth)]
|
||||
l1:
|
||||
<END> NEXT:[] PREV:[r(doSmth(r))]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
=====================
|
||||
== t2 ==
|
||||
fun t2(b: Boolean) {
|
||||
val i = 3
|
||||
if (b) {
|
||||
return;
|
||||
}
|
||||
doSmth(i)
|
||||
if (i is Int) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(3)] PREV:[]
|
||||
r(3) NEXT:[w(i)] PREV:[<START>]
|
||||
w(i) NEXT:[r(b)] PREV:[r(3)]
|
||||
r(b) NEXT:[jf(l2)] PREV:[w(i)]
|
||||
jf(l2) NEXT:[read (Unit), ret l1] PREV:[r(b)]
|
||||
ret l1 NEXT:[<END>] PREV:[jf(l2)]
|
||||
jmp(l3) NEXT:[r(i)] PREV:[]
|
||||
l2:
|
||||
read (Unit) NEXT:[r(i)] PREV:[jf(l2)]
|
||||
l3:
|
||||
r(i) NEXT:[r(doSmth)] PREV:[jmp(l3), read (Unit)]
|
||||
r(doSmth) NEXT:[r(doSmth(i))] PREV:[r(i)]
|
||||
r(doSmth(i)) NEXT:[r(i)] PREV:[r(doSmth)]
|
||||
r(i) NEXT:[r(i is Int)] PREV:[r(doSmth(i))]
|
||||
r(i is Int) NEXT:[jf(l4)] PREV:[r(i)]
|
||||
jf(l4) NEXT:[read (Unit), ret l1] PREV:[r(i is Int)]
|
||||
ret l1 NEXT:[<END>] PREV:[jf(l4)]
|
||||
jmp(l5) NEXT:[<END>] PREV:[]
|
||||
l4:
|
||||
read (Unit) NEXT:[<END>] PREV:[jf(l4)]
|
||||
l1:
|
||||
l5:
|
||||
<END> NEXT:[] PREV:[ret l1, ret l1, jmp(l5), read (Unit)]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
=====================
|
||||
== doSmth ==
|
||||
fun doSmth(s: String) {}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[read (Unit)] PREV:[]
|
||||
read (Unit) NEXT:[<END>] PREV:[<START>]
|
||||
l1:
|
||||
<END> NEXT:[] PREV:[read (Unit)]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
=====================
|
||||
@@ -0,0 +1,31 @@
|
||||
fun t1(b: Boolean) {
|
||||
var u: String
|
||||
if (b) {
|
||||
u = "s"
|
||||
}
|
||||
doSmth(u)
|
||||
|
||||
var r: String
|
||||
if (b) {
|
||||
r = "s"
|
||||
}
|
||||
else {
|
||||
r = "t"
|
||||
}
|
||||
doSmth(r)
|
||||
}
|
||||
|
||||
fun t2(b: Boolean) {
|
||||
val i = 3
|
||||
if (b) {
|
||||
return;
|
||||
}
|
||||
doSmth(i)
|
||||
if (i is Int) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
fun doSmth(s: String) {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user