Pseudocode: Introduce pseudo-value analysis

This commit is contained in:
Alexey Sedunov
2014-05-12 17:42:44 +04:00
parent 3ce96671d9
commit d2c055e9da
103 changed files with 2417 additions and 1432 deletions
+46 -42
View File
@@ -20,50 +20,51 @@ fun f(a : Boolean) : Unit {
L0:
1 <START>
v(a : Boolean)
w(a)
magic(a : Boolean) -> <v0>
w(a|<v0>)
2 mark({ 1 a 2.toLong() foo(a, 3) genfun<Any>() flfun {1} 3.equals(4) 3 equals 4 1 + 2 a && true a || false })
r(1)
r(a)
r(1) -> <v1>
r(a) -> <v2>
mark(2.toLong())
mark(toLong())
r(2)
call(toLong, toLong)
r(2) -> <v3>
call(toLong, toLong|<v3>) -> <v4>
mark(foo(a, 3))
r(a)
r(3)
call(foo, foo)
r(a) -> <v5>
r(3) -> <v6>
call(foo, foo|<v5>, <v6>) -> <v7>
mark(genfun<Any>())
call(genfun, genfun)
call(genfun, genfun) -> <v8>
mark(flfun {1})
mark({1})
jmp?(L2) NEXT:[r({1}), d({1})]
jmp?(L2) NEXT:[r({1}) -> <v9>, d({1})]
d({1}) NEXT:[<SINK>]
L2:
r({1}) PREV:[jmp?(L2)]
call(flfun, flfun)
r({1}) -> <v9> PREV:[jmp?(L2)]
call(flfun, flfun|<v9>) -> <v10>
mark(3.equals(4))
mark(equals(4))
r(3)
r(4)
call(equals, equals)
r(3) -> <v11>
r(4) -> <v12>
call(equals, equals|<v11>, <v12>) -> <v13>
mark(3 equals 4)
r(3)
r(4)
call(equals, equals)
r(3) -> <v14>
r(4) -> <v15>
call(equals, equals|<v14>, <v15>) -> <v16>
mark(1 + 2)
r(1)
r(2)
call(+, plus)
r(a)
jf(L5) NEXT:[r(a && true), r(true)]
r(true)
r(1) -> <v17>
r(2) -> <v18>
call(+, plus|<v17>, <v18>) -> <v19>
r(a) -> <v20>
jf(L5|<v20>) NEXT:[magic(a && true|<v20>, <v21>) -> <v22>, r(true) -> <v21>]
r(true) -> <v21>
L5:
r(a && true) PREV:[jf(L5), r(true)]
r(a)
jt(L6) NEXT:[r(false), r(a || false)]
r(false)
magic(a && true|<v20>, <v21>) -> <v22> PREV:[jf(L5|<v20>), r(true) -> <v21>]
r(a) -> <v23>
jt(L6|<v23>) NEXT:[r(false) -> <v24>, magic(a || false|<v23>, <v24>) -> <v25>]
r(false) -> <v24>
L6:
r(a || false) PREV:[jt(L6), r(false)]
magic(a || false|<v23>, <v24>) -> <v25> PREV:[jt(L6|<v23>), r(false) -> <v24>]
L1:
1 <END> NEXT:[<SINK>]
error:
@@ -77,13 +78,13 @@ sink:
L3:
3 <START>
4 mark(1)
r(1)
r(1) -> <v0>
L4:
3 <END> NEXT:[<SINK>]
3 <END> NEXT:[<SINK>]
error:
<ERROR> PREV:[]
<ERROR> PREV:[]
sink:
<SINK> PREV:[<ERROR>, <END>]
<SINK> PREV:[<ERROR>, <END>]
=====================
== foo ==
fun foo(a : Boolean, b : Int) : Unit {}
@@ -91,17 +92,19 @@ fun foo(a : Boolean, b : Int) : Unit {}
L0:
1 <START>
v(a : Boolean)
w(a)
magic(a : Boolean) -> <v0>
w(a|<v0>)
v(b : Int)
w(b)
magic(b : Int) -> <v1>
w(b|<v1>)
2 mark({})
read (Unit)
L1:
1 <END> NEXT:[<SINK>]
1 <END> NEXT:[<SINK>]
error:
<ERROR> PREV:[]
<ERROR> PREV:[]
sink:
<SINK> PREV:[<ERROR>, <END>]
<SINK> PREV:[<ERROR>, <END>]
=====================
== genfun ==
fun genfun<T>() : Unit {}
@@ -123,13 +126,14 @@ fun flfun(f : () -> Any) : Unit {}
L0:
1 <START>
v(f : () -> Any)
w(f)
magic(f : () -> Any) -> <v0>
w(f|<v0>)
2 mark({})
read (Unit)
L1:
1 <END> NEXT:[<SINK>]
1 <END> NEXT:[<SINK>]
error:
<ERROR> PREV:[]
<ERROR> PREV:[]
sink:
<SINK> PREV:[<ERROR>, <END>]
<SINK> PREV:[<ERROR>, <END>]
=====================