More cases for nullability analysis

This commit is contained in:
Andrey Breslav
2011-06-10 19:07:23 +04:00
parent 9d3abf782c
commit 49b60c3af8
16 changed files with 347 additions and 114 deletions
+64 -52
View File
@@ -224,26 +224,28 @@ fun t3() {
---------------------
l0:
<START>
l3:
l2:
l5:
r(true)
jf(l2)
jmp?(l4)
jf(l3)
l4:
jmp?(l6)
r(1)
r(2)
r(3)
r(>)
r(2 > 3)
jf(l5)
r(2)
jmp(l2)
jmp(l6)
l5:
read (Unit)
l4:
l6:
jf(l7)
r(2)
jmp(l3)
l2:
jmp(l8)
l7:
read (Unit)
l6:
l8:
r(2)
jmp(l2)
l3:
read (Unit)
l1:
<END>
@@ -268,22 +270,24 @@ fun t3() {
l0:
<START>
jmp?(l2)
l4:
l3:
l6:
r(true)
jf(l3)
jf(l4)
l5:
r(1)
r(2)
r(3)
r(>)
r(2 > 3)
jf(l5)
jmp(l3)
jmp(l6)
l5:
read (Unit)
l6:
jf(l7)
jmp(l4)
l3:
jmp(l8)
l7:
read (Unit)
l8:
jmp(l3)
l4:
read (Unit)
r(5)
l2:
@@ -310,22 +314,24 @@ fun t3() {
l0:
<START>
jmp?(l2)
l4:
l3:
l6:
r(true)
jf(l3)
jf(l4)
l5:
r(1)
r(2)
r(3)
r(>)
r(2 > 3)
jf(l5)
jmp(l3)
jmp(l6)
l5:
read (Unit)
l6:
jf(l7)
jmp(l4)
l3:
jmp(l8)
l7:
read (Unit)
l8:
jmp(l3)
l4:
read (Unit)
l2:
r(2)
@@ -354,24 +360,26 @@ l0:
r(a)
r(..)
r(1..a)
jmp?(l2)
l3:
jmp?(l4)
jmp?(l2)
l4:
l5:
jmp?(l6)
r(1)
r(2)
r(3)
r(>)
r(2 > 3)
jf(l5)
jf(l7)
r(2)
jmp(l3)
jmp(l6)
l5:
jmp(l4)
jmp(l8)
l7:
read (Unit)
l4:
l6:
l8:
r(2)
jmp?(l3)
jmp?(l4)
l2:
read (Unit)
l1:
@@ -401,20 +409,22 @@ l0:
r(a)
r(..)
r(1..a)
jmp?(l3)
l4:
jmp?(l3)
l5:
l6:
r(1)
r(2)
r(3)
r(>)
r(2 > 3)
jf(l5)
jmp(l4)
jmp(l6)
l5:
jf(l7)
jmp(l5)
jmp(l8)
l7:
read (Unit)
l6:
jmp?(l4)
l8:
jmp?(l5)
l3:
read (Unit)
r(5)
@@ -446,20 +456,22 @@ l0:
r(a)
r(..)
r(1..a)
jmp?(l3)
l4:
jmp?(l3)
l5:
l6:
r(1)
r(2)
r(3)
r(>)
r(2 > 3)
jf(l5)
jmp(l4)
jmp(l6)
l5:
jf(l7)
jmp(l5)
jmp(l8)
l7:
read (Unit)
l6:
jmp?(l4)
l8:
jmp?(l5)
l3:
read (Unit)
l2:
@@ -7,15 +7,17 @@ fun main() {
---------------------
l0:
<START>
l3:
l2:
l5:
r(1)
r(0)
r(>)
r(1 > 0)
jf(l2)
jf(l3)
l4:
r(2)
jmp(l3)
l2:
jmp(l2)
l3:
read (Unit)
l1:
<END>
@@ -30,14 +32,16 @@ fun dowhile() {
---------------------
l0:
<START>
l3:
l2:
l4:
ret l1
l5:
r(1)
r(0)
r(>)
r(1 > 0)
jt(l3)
l2:
jt(l2)
l3:
read (Unit)
l1:
<END>
+75
View File
@@ -139,3 +139,78 @@ fun test() {
out.println()
}
fun f(out : String?) {
out?.get(0)
if (out != null) else return;
out.get(0)
}
fun f1(out : String?) {
out?.get(0)
if (out != null) else {
1 + 2
return;
}
out.get(0)
}
fun f2(out : String?) {
out?.get(0)
if (out == null) {
1 + 2
return;
}
out.get(0)
}
fun f3(out : String?) {
out?.get(0)
if (out == null) {
1 + 2
return;
}
else {
1 + 2
}
out.get(0)
}
fun f4(s : String?) {
s?.get(0)
while (1 < 2 && s != null) {
s.get(0)
}
s?.get(0)
while (s == null || 1 < 2) {
s?.get(0)
}
s.get(0)
}
fun f5(s : String?) {
s?.get(0)
while (1 < 2 && s != null) {
s.get(0)
}
s?.get(0)
while (s == null || 1 < 2) {
if (1 > 2) break
s?.get(0)
}
s?.get(0);
}
fun f6(s : String?) {
s?.get(0)
do {
s?.get(0)
if (1 < 2) break;
} while (s == null)
s?.get(0)
do {
s?.get(0)
} while (s == null)
s.get(0)
}