Pseudocode: Add debug information to magic instructions

This commit is contained in:
Alexey Sedunov
2014-06-26 13:06:28 +04:00
parent d636d362b7
commit 4707f4a5e9
125 changed files with 1204 additions and 1157 deletions
@@ -435,7 +435,7 @@ fun t8(a : Int) {
L0:
1 <START>
v(a : Int)
magic(a : Int) -> <v0>
magic[FAKE_INITIALIZER](a : Int) -> <v0>
w(a|<v0>)
2 mark({ @l for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } } })
mark(@l for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } })
@@ -445,10 +445,10 @@ L0:
call(1..a, rangeTo|<v1>, <v2>) -> <v3>
v(i)
L3:
jmp?(L2) NEXT:[read (Unit), magic(1..a|<v3>) -> <v4>]
jmp?(L2) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>]
L4 [loop entry point]:
L5 [body entry point]:
magic(1..a|<v3>) -> <v4> PREV:[jmp?(L2), jmp(L4 [loop entry point]), jmp?(L4 [loop entry point])]
magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4> PREV:[jmp?(L2), jmp(L4 [loop entry point]), jmp?(L4 [loop entry point])]
w(i|<v4>)
mark(for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } })
4 mark({ try { 1 if (2 > 3) { continue @l } } finally { 2 } })
@@ -467,7 +467,7 @@ L8 [start finally]:
7 mark({ 2 })
r(2) -> <v9>
L9 [finish finally]:
6 jmp(L4 [loop entry point]) NEXT:[magic(1..a|<v3>) -> <v4>]
6 jmp(L4 [loop entry point]) NEXT:[magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>]
- 5 jmp(L10) NEXT:[jmp(L11 [skipFinallyToErrorBlock])] PREV:[]
L7:
read (Unit) PREV:[jf(L7|<v8>)]
@@ -480,7 +480,7 @@ L6 [onExceptionToFinallyBlock]:
L11 [skipFinallyToErrorBlock]:
7 mark({ 2 }) PREV:[jmp(L11 [skipFinallyToErrorBlock])]
r(2) -> <v9>
3 jmp?(L4 [loop entry point]) NEXT:[magic(1..a|<v3>) -> <v4>, read (Unit)]
3 jmp?(L4 [loop entry point]) NEXT:[magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>, read (Unit)]
L2:
read (Unit) PREV:[jmp?(L2), jmp?(L4 [loop entry point])]
L1:
@@ -508,7 +508,7 @@ fun t9(a : Int) {
L0:
1 <START>
v(a : Int)
magic(a : Int) -> <v0>
magic[FAKE_INITIALIZER](a : Int) -> <v0>
w(a|<v0>)
2 mark({ try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } })
mark(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 })
@@ -521,10 +521,10 @@ L0:
call(1..a, rangeTo|<v1>, <v2>) -> <v3>
v(i)
L4:
jmp?(L3) NEXT:[read (Unit), magic(1..a|<v3>) -> <v4>]
jmp?(L3) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>]
L5 [loop entry point]:
L6 [body entry point]:
magic(1..a|<v3>) -> <v4> PREV:[jmp?(L3), jmp(L5 [loop entry point]), jmp?(L5 [loop entry point])]
magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4> PREV:[jmp?(L3), jmp(L5 [loop entry point]), jmp?(L5 [loop entry point])]
w(i|<v4>)
mark(for (i in 1..a) { 1 if (2 > 3) { continue @l } })
5 mark({ 1 if (2 > 3) { continue @l } })
@@ -536,12 +536,12 @@ L6 [body entry point]:
call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
jf(L7|<v8>) NEXT:[read (Unit), mark({ continue @l })]
6 mark({ continue @l })
jmp(L5 [loop entry point]) NEXT:[magic(1..a|<v3>) -> <v4>]
jmp(L5 [loop entry point]) NEXT:[magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>]
- 5 jmp(L8) NEXT:[jmp?(L5 [loop entry point])] PREV:[]
L7:
read (Unit) PREV:[jf(L7|<v8>)]
L8:
4 jmp?(L5 [loop entry point]) NEXT:[magic(1..a|<v3>) -> <v4>, read (Unit)]
4 jmp?(L5 [loop entry point]) NEXT:[magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>, read (Unit)]
L3:
read (Unit) PREV:[jmp?(L3), jmp?(L5 [loop entry point])]
3 r(5) -> <v9>
@@ -579,7 +579,7 @@ fun t10(a : Int) {
L0:
1 <START>
v(a : Int)
magic(a : Int) -> <v0>
magic[FAKE_INITIALIZER](a : Int) -> <v0>
w(a|<v0>)
2 mark({ try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 } })
mark(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 })
@@ -592,10 +592,10 @@ L0:
call(1..a, rangeTo|<v1>, <v2>) -> <v3>
v(i)
L4:
jmp?(L3) NEXT:[read (Unit), magic(1..a|<v3>) -> <v4>]
jmp?(L3) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>]
L5 [loop entry point]:
L6 [body entry point]:
magic(1..a|<v3>) -> <v4> PREV:[jmp?(L3), jmp(L5 [loop entry point]), jmp?(L5 [loop entry point])]
magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4> PREV:[jmp?(L3), jmp(L5 [loop entry point]), jmp?(L5 [loop entry point])]
w(i|<v4>)
mark(for (i in 1..a) { 1 if (2 > 3) { continue @l } })
5 mark({ 1 if (2 > 3) { continue @l } })
@@ -607,12 +607,12 @@ L6 [body entry point]:
call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
jf(L7|<v8>) NEXT:[read (Unit), mark({ continue @l })]
6 mark({ continue @l })
jmp(L5 [loop entry point]) NEXT:[magic(1..a|<v3>) -> <v4>]
jmp(L5 [loop entry point]) NEXT:[magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>]
- 5 jmp(L8) NEXT:[jmp?(L5 [loop entry point])] PREV:[]
L7:
read (Unit) PREV:[jf(L7|<v8>)]
L8:
4 jmp?(L5 [loop entry point]) NEXT:[magic(1..a|<v3>) -> <v4>, read (Unit)]
4 jmp?(L5 [loop entry point]) NEXT:[magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>, read (Unit)]
L3:
read (Unit) PREV:[jmp?(L3), jmp?(L5 [loop entry point])]
2 jmp(L9 [skipFinallyToErrorBlock]) NEXT:[mark({ 2 })]
@@ -746,7 +746,7 @@ L5 [finish finally]:
- 2 jmp(L6 [afterCatches]) NEXT:[jmp(L7 [skipFinallyToErrorBlock])] PREV:[]
L2 [onException]:
3 v(e: UnsupportedOperationException) PREV:[jmp?(L2 [onException])]
magic(e: UnsupportedOperationException) -> <v3>
magic[FAKE_INITIALIZER](e: UnsupportedOperationException) -> <v3>
w(e|<v3>)
4 mark({ doSmth(2) })
r(2) -> <v4>
@@ -794,7 +794,7 @@ L0:
- 2 jmp(L3 [afterCatches]) NEXT:[<END>] PREV:[]
L2 [onException]:
3 v(e: UnsupportedOperationException) PREV:[jmp?(L2 [onException])]
magic(e: UnsupportedOperationException) -> <v1>
magic[FAKE_INITIALIZER](e: UnsupportedOperationException) -> <v1>
w(e|<v1>)
4 mark({ doSmth(2) })
r(2) -> <v2>
@@ -840,7 +840,7 @@ L5 [finish finally]:
- 2 jmp(L6 [afterCatches]) NEXT:[jmp(L7 [skipFinallyToErrorBlock])] PREV:[]
L2 [onException]:
3 v(e: UnsupportedOperationException) PREV:[jmp?(L2 [onException])]
magic(e: UnsupportedOperationException) -> <v3>
magic[FAKE_INITIALIZER](e: UnsupportedOperationException) -> <v3>
w(e|<v3>)
4 mark({ return 2 })
r(2) -> <v4>
@@ -896,7 +896,7 @@ L0:
2 jmp(L4 [afterCatches]) NEXT:[jmp(L7 [skipFinallyToErrorBlock])]
L2 [onException]:
3 v(e: UnsupportedOperationException) PREV:[jmp?(L2 [onException])]
magic(e: UnsupportedOperationException) -> <v2>
magic[FAKE_INITIALIZER](e: UnsupportedOperationException) -> <v2>
w(e|<v2>)
4 mark({ return 2 })
r(2) -> <v3>
@@ -935,14 +935,14 @@ fun doSmth(i: Int) {
L0:
1 <START>
v(i: Int)
magic(i: Int) -> <v0>
magic[FAKE_INITIALIZER](i: Int) -> <v0>
w(i|<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>]
=====================
@@ -8,11 +8,11 @@ fun t1() {
}
---------------------
1 <v0>: * NEW: r(1) -> <v0>
{ 1 } <v0>: * COPY
{ 1 } <v0>: * COPY
2 <v1>: * NEW: r(2) -> <v1>
{ 2 } <v1>: * COPY
try { 1 } finally { 2 } <v0>: * COPY
{ try { 1 } finally { 2 } } <v0>: * COPY
{ 2 } <v1>: * COPY
try { 1 } finally { 2 } <v0>: * COPY
{ try { 1 } finally { 2 } } <v0>: * COPY
=====================
== t2 ==
fun t2() {
@@ -26,12 +26,12 @@ fun t2() {
}
}
---------------------
1 <v0>: * NEW: r(1) -> <v0>
2 <v1>: {<: Comparable<Int>} NEW: r(2) -> <v1>
3 <v2>: Int NEW: r(3) -> <v2>
1 <v0>: * NEW: r(1) -> <v0>
2 <v1>: {<: Comparable<Int>} NEW: r(2) -> <v1>
3 <v2>: Int NEW: r(3) -> <v2>
2 > 3 <v3>: Boolean NEW: call(2 > 3, compareTo|<v1>, <v2>) -> <v3>
2 <v4>: * NEW: r(2) -> <v4>
{ 2 } <v4>: * COPY
2 <v4>: * NEW: r(2) -> <v4>
{ 2 } <v4>: * COPY
=====================
== t3 ==
fun t3() {
@@ -47,14 +47,14 @@ fun t3() {
}
}
---------------------
1 <v0>: * NEW: r(1) -> <v0>
1 <v0>: * NEW: r(1) -> <v0>
{ () -> if (2 > 3) { return@l } } <v1>: * NEW: r({ () -> if (2 > 3) { return@l } }) -> <v1>
@l{ () -> if (2 > 3) { return@l } } <v1>: * COPY
{ 1 @l{ () -> if (2 > 3) { return@l } } } <v1>: * COPY
2 <v2>: * NEW: r(2) -> <v2>
{ 2 } <v2>: * COPY
try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } <v1>: * COPY
{ try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } } <v1>: * COPY
@l{ () -> if (2 > 3) { return@l } } <v1>: * COPY
{ 1 @l{ () -> if (2 > 3) { return@l } } } <v1>: * COPY
2 <v2>: * NEW: r(2) -> <v2>
{ 2 } <v2>: * COPY
try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } <v1>: * COPY
{ try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } } <v1>: * COPY
=====================
== anonymous_0 ==
{ () ->
@@ -63,8 +63,8 @@ try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } <v1>: * COPY
}
}
---------------------
2 <v0>: {<: Comparable<Int>} NEW: r(2) -> <v0>
3 <v1>: Int NEW: r(3) -> <v1>
2 <v0>: {<: Comparable<Int>} NEW: r(2) -> <v0>
3 <v1>: Int NEW: r(3) -> <v1>
2 > 3 <v2>: Boolean NEW: call(2 > 3, compareTo|<v0>, <v1>) -> <v2>
=====================
== t4 ==
@@ -82,8 +82,8 @@ fun t4() {
}
---------------------
{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } <v0>: * NEW: r({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } }) -> <v0>
@l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } <v0>: * COPY
{ @l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } } <v0>: * COPY
@l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } <v0>: * COPY
{ @l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } } <v0>: * COPY
=====================
== anonymous_1 ==
{ () ->
@@ -97,12 +97,12 @@ fun t4() {
}
}
---------------------
1 <v0>: * NEW: r(1) -> <v0>
2 <v1>: {<: Comparable<Int>} NEW: r(2) -> <v1>
3 <v2>: Int NEW: r(3) -> <v2>
1 <v0>: * NEW: r(1) -> <v0>
2 <v1>: {<: Comparable<Int>} NEW: r(2) -> <v1>
3 <v2>: Int NEW: r(3) -> <v2>
2 > 3 <v3>: Boolean NEW: call(2 > 3, compareTo|<v1>, <v2>) -> <v3>
2 <v4>: * NEW: r(2) -> <v4>
{ 2 } <v4>: * COPY
2 <v4>: * NEW: r(2) -> <v4>
{ 2 } <v4>: * COPY
=====================
== t5 ==
fun t5() {
@@ -118,13 +118,13 @@ fun t5() {
}
}
---------------------
true <v0>: * NEW: r(true) -> <v0>
1 <v1>: * NEW: r(1) -> <v1>
2 <v2>: {<: Comparable<Int>} NEW: r(2) -> <v2>
3 <v3>: Int NEW: r(3) -> <v3>
true <v0>: * NEW: r(true) -> <v0>
1 <v1>: * NEW: r(1) -> <v1>
2 <v2>: {<: Comparable<Int>} NEW: r(2) -> <v2>
3 <v3>: Int NEW: r(3) -> <v3>
2 > 3 <v4>: Boolean NEW: call(2 > 3, compareTo|<v2>, <v3>) -> <v4>
2 <v5>: * NEW: r(2) -> <v5>
{ 2 } <v5>: * COPY
2 <v5>: * NEW: r(2) -> <v5>
{ 2 } <v5>: * COPY
=====================
== t6 ==
fun t6() {
@@ -141,17 +141,17 @@ fun t6() {
}
}
---------------------
true <v0>: * NEW: r(true) -> <v0>
1 <v1>: * NEW: r(1) -> <v1>
2 <v2>: {<: Comparable<Int>} NEW: r(2) -> <v2>
3 <v3>: Int NEW: r(3) -> <v3>
true <v0>: * NEW: r(true) -> <v0>
1 <v1>: * NEW: r(1) -> <v1>
2 <v2>: {<: Comparable<Int>} NEW: r(2) -> <v2>
3 <v3>: Int NEW: r(3) -> <v3>
2 > 3 <v4>: Boolean NEW: call(2 > 3, compareTo|<v2>, <v3>) -> <v4>
5 <v5>: * NEW: r(5) -> <v5>
{ @l while(true) { 1 if (2 > 3) { break @l } } 5 } <v5>: * COPY
2 <v6>: * NEW: r(2) -> <v6>
{ 2 } <v6>: * COPY
try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } <v5>: * COPY
{ try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } } <v5>: * COPY
5 <v5>: * NEW: r(5) -> <v5>
{ @l while(true) { 1 if (2 > 3) { break @l } } 5 } <v5>: * COPY
2 <v6>: * NEW: r(2) -> <v6>
{ 2 } <v6>: * COPY
try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } <v5>: * COPY
{ try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } } <v5>: * COPY
=====================
== t7 ==
fun t7() {
@@ -167,13 +167,13 @@ fun t7() {
}
}
---------------------
true <v0>: * NEW: r(true) -> <v0>
1 <v1>: * NEW: r(1) -> <v1>
2 <v2>: {<: Comparable<Int>} NEW: r(2) -> <v2>
3 <v3>: Int NEW: r(3) -> <v3>
true <v0>: * NEW: r(true) -> <v0>
1 <v1>: * NEW: r(1) -> <v1>
2 <v2>: {<: Comparable<Int>} NEW: r(2) -> <v2>
3 <v3>: Int NEW: r(3) -> <v3>
2 > 3 <v4>: Boolean NEW: call(2 > 3, compareTo|<v2>, <v3>) -> <v4>
2 <v5>: * NEW: r(2) -> <v5>
{ 2 } <v5>: * COPY
2 <v5>: * NEW: r(2) -> <v5>
{ 2 } <v5>: * COPY
=====================
== t8 ==
fun t8(a : Int) {
@@ -189,17 +189,17 @@ fun t8(a : Int) {
}
}
---------------------
<v0>: Int NEW: magic(a : Int) -> <v0>
<v4>: Int NEW: magic(1..a|<v3>) -> <v4>
1 <v1>: Int NEW: r(1) -> <v1>
a <v2>: Int NEW: r(a) -> <v2>
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
1 <v5>: * NEW: r(1) -> <v5>
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
3 <v7>: Int NEW: r(3) -> <v7>
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
2 <v9>: * NEW: r(2) -> <v9>
{ 2 } <v9>: * COPY
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
1 <v1>: Int NEW: r(1) -> <v1>
a <v2>: Int NEW: r(a) -> <v2>
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
1 <v5>: * NEW: r(1) -> <v5>
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
3 <v7>: Int NEW: r(3) -> <v7>
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
2 <v9>: * NEW: r(2) -> <v9>
{ 2 } <v9>: * COPY
=====================
== t9 ==
fun t9(a : Int) {
@@ -216,21 +216,21 @@ fun t9(a : Int) {
}
}
---------------------
<v0>: Int NEW: magic(a : Int) -> <v0>
<v4>: Int NEW: magic(1..a|<v3>) -> <v4>
1 <v1>: Int NEW: r(1) -> <v1>
a <v2>: Int NEW: r(a) -> <v2>
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
1 <v5>: * NEW: r(1) -> <v5>
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
3 <v7>: Int NEW: r(3) -> <v7>
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
5 <v9>: * NEW: r(5) -> <v9>
{ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } <v9>: * COPY
2 <v10>: * NEW: r(2) -> <v10>
{ 2 } <v10>: * COPY
try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } <v9>: * COPY
{ try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } } <v9>: * COPY
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
1 <v1>: Int NEW: r(1) -> <v1>
a <v2>: Int NEW: r(a) -> <v2>
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
1 <v5>: * NEW: r(1) -> <v5>
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
3 <v7>: Int NEW: r(3) -> <v7>
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
5 <v9>: * NEW: r(5) -> <v9>
{ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } <v9>: * COPY
2 <v10>: * NEW: r(2) -> <v10>
{ 2 } <v10>: * COPY
try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } <v9>: * COPY
{ try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } } <v9>: * COPY
=====================
== t10 ==
fun t10(a : Int) {
@@ -246,17 +246,17 @@ fun t10(a : Int) {
}
}
---------------------
<v0>: Int NEW: magic(a : Int) -> <v0>
<v4>: Int NEW: magic(1..a|<v3>) -> <v4>
1 <v1>: Int NEW: r(1) -> <v1>
a <v2>: Int NEW: r(a) -> <v2>
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
1 <v5>: * NEW: r(1) -> <v5>
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
3 <v7>: Int NEW: r(3) -> <v7>
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
2 <v9>: * NEW: r(2) -> <v9>
{ 2 } <v9>: * COPY
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
1 <v1>: Int NEW: r(1) -> <v1>
a <v2>: Int NEW: r(a) -> <v2>
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
1 <v5>: * NEW: r(1) -> <v5>
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
3 <v7>: Int NEW: r(3) -> <v7>
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
2 <v9>: * NEW: r(2) -> <v9>
{ 2 } <v9>: * COPY
=====================
== t11 ==
fun t11() {
@@ -281,10 +281,10 @@ fun t12() : Int {
}
}
---------------------
1 <v0>: Int NEW: r(1) -> <v0>
3 <v1>: Int NEW: r(3) -> <v1>
1 <v0>: Int NEW: r(1) -> <v0>
3 <v1>: Int NEW: r(3) -> <v1>
doSmth(3) <v2>: * NEW: call(doSmth(3), doSmth|<v1>) -> <v2>
{ doSmth(3) } <v2>: * COPY
{ doSmth(3) } <v2>: * COPY
=====================
== t13 ==
fun t13() : Int {
@@ -299,16 +299,16 @@ fun t13() : Int {
}
}
---------------------
<v3>: {<: UnsupportedOperationException} NEW: magic(e: UnsupportedOperationException) -> <v3>
1 <v0>: Int NEW: r(1) -> <v0>
2 <v4>: Int NEW: r(2) -> <v4>
doSmth(2) <v5>: * NEW: call(doSmth(2), doSmth|<v4>) -> <v5>
{ doSmth(2) } <v5>: * COPY
3 <v1>: Int NEW: r(3) -> <v1>
doSmth(3) <v2>: * NEW: call(doSmth(3), doSmth|<v1>) -> <v2>
{ doSmth(3) } <v2>: * COPY
try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) } <v5>: * COPY
{ try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) } } <v5>: * COPY
<v3>: {<: UnsupportedOperationException} NEW: magic[FAKE_INITIALIZER](e: UnsupportedOperationException) -> <v3>
1 <v0>: Int NEW: r(1) -> <v0>
2 <v4>: Int NEW: r(2) -> <v4>
doSmth(2) <v5>: * NEW: call(doSmth(2), doSmth|<v4>) -> <v5>
{ doSmth(2) } <v5>: * COPY
3 <v1>: Int NEW: r(3) -> <v1>
doSmth(3) <v2>: * NEW: call(doSmth(3), doSmth|<v1>) -> <v2>
{ doSmth(3) } <v2>: * COPY
try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) } <v5>: * COPY
{ try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) } } <v5>: * COPY
=====================
== t14 ==
fun t14() : Int {
@@ -320,13 +320,13 @@ fun t14() : Int {
}
}
---------------------
<v1>: {<: UnsupportedOperationException} NEW: magic(e: UnsupportedOperationException) -> <v1>
1 <v0>: Int NEW: r(1) -> <v0>
2 <v2>: Int NEW: r(2) -> <v2>
doSmth(2) <v3>: * NEW: call(doSmth(2), doSmth|<v2>) -> <v3>
{ doSmth(2) } <v3>: * COPY
try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } <v3>: * COPY
{ try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } } <v3>: * COPY
<v1>: {<: UnsupportedOperationException} NEW: magic[FAKE_INITIALIZER](e: UnsupportedOperationException) -> <v1>
1 <v0>: Int NEW: r(1) -> <v0>
2 <v2>: Int NEW: r(2) -> <v2>
doSmth(2) <v3>: * NEW: call(doSmth(2), doSmth|<v2>) -> <v3>
{ doSmth(2) } <v3>: * COPY
try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } <v3>: * COPY
{ try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } } <v3>: * COPY
=====================
== t15 ==
fun t15() : Int {
@@ -341,12 +341,12 @@ fun t15() : Int {
}
}
---------------------
<v3>: {<: UnsupportedOperationException} NEW: magic(e: UnsupportedOperationException) -> <v3>
1 <v0>: Int NEW: r(1) -> <v0>
2 <v4>: Int NEW: r(2) -> <v4>
3 <v1>: Int NEW: r(3) -> <v1>
doSmth(3) <v2>: * NEW: call(doSmth(3), doSmth|<v1>) -> <v2>
{ doSmth(3) } <v2>: * COPY
<v3>: {<: UnsupportedOperationException} NEW: magic[FAKE_INITIALIZER](e: UnsupportedOperationException) -> <v3>
1 <v0>: Int NEW: r(1) -> <v0>
2 <v4>: Int NEW: r(2) -> <v4>
3 <v1>: Int NEW: r(3) -> <v1>
doSmth(3) <v2>: * NEW: call(doSmth(3), doSmth|<v1>) -> <v2>
{ doSmth(3) } <v2>: * COPY
=====================
== t16 ==
fun t16() : Int {
@@ -361,20 +361,20 @@ fun t16() : Int {
}
}
---------------------
<v2>: {<: UnsupportedOperationException} NEW: magic(e: UnsupportedOperationException) -> <v2>
1 <v0>: Int NEW: r(1) -> <v0>
doSmth(1) <v1>: * NEW: call(doSmth(1), doSmth|<v0>) -> <v1>
{ doSmth(1) } <v1>: * COPY
2 <v3>: Int NEW: r(2) -> <v3>
3 <v4>: Int NEW: r(3) -> <v4>
doSmth(3) <v5>: * NEW: call(doSmth(3), doSmth|<v4>) -> <v5>
{ doSmth(3) } <v5>: * COPY
try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } <v1>: * COPY
{ try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } } <v1>: * COPY
<v2>: {<: UnsupportedOperationException} NEW: magic[FAKE_INITIALIZER](e: UnsupportedOperationException) -> <v2>
1 <v0>: Int NEW: r(1) -> <v0>
doSmth(1) <v1>: * NEW: call(doSmth(1), doSmth|<v0>) -> <v1>
{ doSmth(1) } <v1>: * COPY
2 <v3>: Int NEW: r(2) -> <v3>
3 <v4>: Int NEW: r(3) -> <v4>
doSmth(3) <v5>: * NEW: call(doSmth(3), doSmth|<v4>) -> <v5>
{ doSmth(3) } <v5>: * COPY
try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } <v1>: * COPY
{ try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } } <v1>: * COPY
=====================
== doSmth ==
fun doSmth(i: Int) {
}
---------------------
<v0>: Int NEW: magic(i: Int) -> <v0>
<v0>: Int NEW: magic[FAKE_INITIALIZER](i: Int) -> <v0>
=====================
@@ -83,7 +83,7 @@ L0:
L2 [onException]:
jmp?(L5 [catch 0]) NEXT:[v(e: Exception), v(e: NullPointerException)] PREV:[jmp?(L2 [onException])]
3 v(e: NullPointerException)
magic(e: NullPointerException) -> <v1>
magic[FAKE_INITIALIZER](e: NullPointerException) -> <v1>
w(e|<v1>)
4 mark({ doSmth1() })
mark(doSmth1())
@@ -91,7 +91,7 @@ L2 [onException]:
3 jmp(L4 [afterCatches]) NEXT:[jmp(L6 [skipFinallyToErrorBlock])]
L5 [catch 0]:
v(e: Exception) PREV:[jmp?(L5 [catch 0])]
magic(e: Exception) -> <v3>
magic[FAKE_INITIALIZER](e: Exception) -> <v3>
w(e|<v3>)
4 mark({ doSmth2() })
mark(doSmth2())
@@ -158,7 +158,7 @@ L4 [body entry point]:
L6 [onException]:
jmp?(L9 [catch 0]) NEXT:[v(e: Exception), v(e: NullPointerException)] PREV:[jmp?(L6 [onException])]
4 v(e: NullPointerException)
magic(e: NullPointerException) -> <v2>
magic[FAKE_INITIALIZER](e: NullPointerException) -> <v2>
w(e|<v2>)
5 mark({ doSmth1() })
mark(doSmth1())
@@ -166,7 +166,7 @@ L6 [onException]:
4 jmp(L8 [afterCatches]) NEXT:[jmp(L10 [skipFinallyToErrorBlock])]
L9 [catch 0]:
v(e: Exception) PREV:[jmp?(L9 [catch 0])]
magic(e: Exception) -> <v4>
magic[FAKE_INITIALIZER](e: Exception) -> <v4>
w(e|<v4>)
5 mark({ doSmth2() })
mark(doSmth2())
@@ -237,7 +237,7 @@ L0:
L2 [onException]:
jmp?(L5 [catch 0]) NEXT:[v(e: Exception), v(e: NullPointerException)] PREV:[jmp?(L2 [onException])]
3 v(e: NullPointerException)
magic(e: NullPointerException) -> <v1>
magic[FAKE_INITIALIZER](e: NullPointerException) -> <v1>
w(e|<v1>)
4 mark({ doSmth1() })
mark(doSmth1())
@@ -245,7 +245,7 @@ L2 [onException]:
3 jmp(L4 [afterCatches]) NEXT:[jmp(L6 [skipFinallyToErrorBlock])]
L5 [catch 0]:
v(e: Exception) PREV:[jmp?(L5 [catch 0])]
magic(e: Exception) -> <v3>
magic[FAKE_INITIALIZER](e: Exception) -> <v3>
w(e|<v3>)
4 mark({ doSmth2() })
mark(doSmth2())
@@ -298,7 +298,7 @@ fun doTestCopy4(list: List<String>?) : Int {
L0:
1 <START>
v(list: List<String>?)
magic(list: List<String>?) -> <v0>
magic[FAKE_INITIALIZER](list: List<String>?) -> <v0>
w(list|<v0>)
2 mark({ try { doSmth() } finally { if(list != null) { } } })
mark(try { doSmth() } finally { if(list != null) { } })
@@ -30,17 +30,17 @@ fun testCopy1() : Int {
}
}
---------------------
<v1>: {<: NullPointerException} NEW: magic(e: NullPointerException) -> <v1>
<v3>: {<: Exception} NEW: magic(e: Exception) -> <v3>
doSmth() <v0>: * NEW: call(doSmth(), doSmth) -> <v0>
{ doSmth() } <v0>: * COPY
doSmth1() <v2>: * NEW: call(doSmth1(), doSmth1) -> <v2>
{ doSmth1() } <v2>: * COPY
doSmth2() <v4>: * NEW: call(doSmth2(), doSmth2) -> <v4>
{ doSmth2() } <v4>: * COPY
1 <v5>: Int NEW: r(1) -> <v5>
<v1>: {<: NullPointerException} NEW: magic[FAKE_INITIALIZER](e: NullPointerException) -> <v1>
<v3>: {<: Exception} NEW: magic[FAKE_INITIALIZER](e: Exception) -> <v3>
doSmth() <v0>: * NEW: call(doSmth(), doSmth) -> <v0>
{ doSmth() } <v0>: * COPY
doSmth1() <v2>: * NEW: call(doSmth1(), doSmth1) -> <v2>
{ doSmth1() } <v2>: * COPY
doSmth2() <v4>: * NEW: call(doSmth2(), doSmth2) -> <v4>
{ doSmth2() } <v4>: * COPY
1 <v5>: Int NEW: r(1) -> <v5>
try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { return 1 } <v6>: * NEW: merge(try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { return 1 }|<v0>, <v2>, <v4>) -> <v6>
{ try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { return 1 } } <v6>: * COPY
{ try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { return 1 } } <v6>: * COPY
=====================
== testCopy2 ==
fun testCopy2() {
@@ -61,18 +61,18 @@ fun testCopy2() {
}
}
---------------------
<v2>: {<: NullPointerException} NEW: magic(e: NullPointerException) -> <v2>
<v4>: {<: Exception} NEW: magic(e: Exception) -> <v4>
cond() <v0>: Boolean NEW: call(cond(), cond) -> <v0>
doSmth() <v1>: * NEW: call(doSmth(), doSmth) -> <v1>
{ doSmth() } <v1>: * COPY
doSmth1() <v3>: * NEW: call(doSmth1(), doSmth1) -> <v3>
{ doSmth1() } <v3>: * COPY
doSmth2() <v5>: * NEW: call(doSmth2(), doSmth2) -> <v5>
{ doSmth2() } <v5>: * COPY
cond() <v6>: Boolean NEW: call(cond(), cond) -> <v6>
<v2>: {<: NullPointerException} NEW: magic[FAKE_INITIALIZER](e: NullPointerException) -> <v2>
<v4>: {<: Exception} NEW: magic[FAKE_INITIALIZER](e: Exception) -> <v4>
cond() <v0>: Boolean NEW: call(cond(), cond) -> <v0>
doSmth() <v1>: * NEW: call(doSmth(), doSmth) -> <v1>
{ doSmth() } <v1>: * COPY
doSmth1() <v3>: * NEW: call(doSmth1(), doSmth1) -> <v3>
{ doSmth1() } <v3>: * COPY
doSmth2() <v5>: * NEW: call(doSmth2(), doSmth2) -> <v5>
{ doSmth2() } <v5>: * COPY
cond() <v6>: Boolean NEW: call(cond(), cond) -> <v6>
try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { if (cond()) return else continue } <v7>: * NEW: merge(try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { if (cond()) return else continue }|<v1>, <v3>, <v5>) -> <v7>
{ try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { if (cond()) return else continue } } <v7>: * COPY
{ try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { if (cond()) return else continue } } <v7>: * COPY
=====================
== testCopy3 ==
fun testCopy3() {
@@ -90,17 +90,17 @@ fun testCopy3() {
}
}
---------------------
<v1>: {<: NullPointerException} NEW: magic(e: NullPointerException) -> <v1>
<v3>: {<: Exception} NEW: magic(e: Exception) -> <v3>
doSmth() <v0>: * NEW: call(doSmth(), doSmth) -> <v0>
{ doSmth() } <v0>: * COPY
doSmth1() <v2>: * NEW: call(doSmth1(), doSmth1) -> <v2>
{ doSmth1() } <v2>: * COPY
doSmth2() <v4>: * NEW: call(doSmth2(), doSmth2) -> <v4>
{ doSmth2() } <v4>: * COPY
cond() <v5>: Boolean NEW: call(cond(), cond) -> <v5>
<v1>: {<: NullPointerException} NEW: magic[FAKE_INITIALIZER](e: NullPointerException) -> <v1>
<v3>: {<: Exception} NEW: magic[FAKE_INITIALIZER](e: Exception) -> <v3>
doSmth() <v0>: * NEW: call(doSmth(), doSmth) -> <v0>
{ doSmth() } <v0>: * COPY
doSmth1() <v2>: * NEW: call(doSmth1(), doSmth1) -> <v2>
{ doSmth1() } <v2>: * COPY
doSmth2() <v4>: * NEW: call(doSmth2(), doSmth2) -> <v4>
{ doSmth2() } <v4>: * COPY
cond() <v5>: Boolean NEW: call(cond(), cond) -> <v5>
try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { while (cond()); } <v6>: * NEW: merge(try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { while (cond()); }|<v0>, <v2>, <v4>) -> <v6>
{ try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { while (cond()); } } <v6>: * COPY
{ try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { while (cond()); } } <v6>: * COPY
=====================
== doTestCopy4 ==
fun doTestCopy4(list: List<String>?) : Int {
@@ -113,12 +113,12 @@ fun doTestCopy4(list: List<String>?) : Int {
}
}
---------------------
<v0>: {<: List<String>?} NEW: magic(list: List<String>?) -> <v0>
doSmth() <v1>: * NEW: call(doSmth(), doSmth) -> <v1>
{ doSmth() } <v1>: * COPY
list <v2>: {<: Any?} NEW: r(list) -> <v2>
null <v3>: {<: Any?} NEW: r(null) -> <v3>
list != null <v4>: Boolean NEW: call(list != null, equals|<v2>, <v3>) -> <v4>
try { doSmth() } finally { if(list != null) { } } <v1>: * COPY
{ try { doSmth() } finally { if(list != null) { } } } <v1>: * COPY
<v0>: {<: List<String>?} NEW: magic[FAKE_INITIALIZER](list: List<String>?) -> <v0>
doSmth() <v1>: * NEW: call(doSmth(), doSmth) -> <v1>
{ doSmth() } <v1>: * COPY
list <v2>: {<: Any?} NEW: r(list) -> <v2>
null <v3>: {<: Any?} NEW: r(null) -> <v3>
list != null <v4>: Boolean NEW: call(list != null, equals|<v2>, <v3>) -> <v4>
try { doSmth() } finally { if(list != null) { } } <v1>: * COPY
{ try { doSmth() } finally { if(list != null) { } } } <v1>: * COPY
=====================
@@ -14,25 +14,25 @@ L0:
call(1..2, rangeTo|<v0>, <v1>) -> <v2>
v(i)
L3:
jmp?(L2) NEXT:[read (Unit), magic(1..2|<v2>) -> <v3>]
jmp?(L2) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..2|<v2>) -> <v3>]
L4 [loop entry point]:
L5 [body entry point]:
magic(1..2|<v2>) -> <v3> PREV:[jmp?(L2), jmp?(L4 [loop entry point])]
magic[LOOP_RANGE_ITERATION](1..2|<v2>) -> <v3> PREV:[jmp?(L2), jmp?(L4 [loop entry point])]
w(i|<v3>)
mark(for (i in 1..2) { doSmth(i) })
4 mark({ doSmth(i) })
r(i) -> <v4>
mark(doSmth(i))
call(doSmth(i), doSmth|<v4>) -> <v5>
3 jmp?(L4 [loop entry point]) NEXT:[magic(1..2|<v2>) -> <v3>, read (Unit)]
3 jmp?(L4 [loop entry point]) NEXT:[magic[LOOP_RANGE_ITERATION](1..2|<v2>) -> <v3>, read (Unit)]
L2:
read (Unit) PREV:[jmp?(L2), jmp?(L4 [loop entry point])]
read (Unit) PREV:[jmp?(L2), jmp?(L4 [loop entry point])]
L1:
1 <END> NEXT:[<SINK>]
1 <END> NEXT:[<SINK>]
error:
<ERROR> PREV:[]
<ERROR> PREV:[]
sink:
<SINK> PREV:[<ERROR>, <END>]
<SINK> PREV:[<ERROR>, <END>]
=====================
== doSmth ==
fun doSmth(i: Int) {}
@@ -40,14 +40,14 @@ fun doSmth(i: Int) {}
L0:
1 <START>
v(i: Int)
magic(i: Int) -> <v0>
magic[FAKE_INITIALIZER](i: Int) -> <v0>
w(i|<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>]
=====================
@@ -5,16 +5,16 @@ fun t1() {
}
}
---------------------
<v3>: Int NEW: magic(1..2|<v2>) -> <v3>
1 <v0>: Int NEW: r(1) -> <v0>
2 <v1>: Int NEW: r(2) -> <v1>
1..2 <v2>: {<: Iterable<Int>} NEW: call(1..2, rangeTo|<v0>, <v1>) -> <v2>
i <v4>: Int NEW: r(i) -> <v4>
doSmth(i) <v5>: * NEW: call(doSmth(i), doSmth|<v4>) -> <v5>
{ doSmth(i) } <v5>: * COPY
<v3>: Int NEW: magic[LOOP_RANGE_ITERATION](1..2|<v2>) -> <v3>
1 <v0>: Int NEW: r(1) -> <v0>
2 <v1>: Int NEW: r(2) -> <v1>
1..2 <v2>: {<: Iterable<Int>} NEW: call(1..2, rangeTo|<v0>, <v1>) -> <v2>
i <v4>: Int NEW: r(i) -> <v4>
doSmth(i) <v5>: * NEW: call(doSmth(i), doSmth|<v4>) -> <v5>
{ doSmth(i) } <v5>: * COPY
=====================
== doSmth ==
fun doSmth(i: Int) {}
---------------------
<v0>: Int NEW: magic(i: Int) -> <v0>
<v0>: Int NEW: magic[FAKE_INITIALIZER](i: Int) -> <v0>
=====================
@@ -19,7 +19,7 @@ fun t1(b: Boolean) {
L0:
1 <START>
v(b: Boolean)
magic(b: Boolean) -> <v0>
magic[FAKE_INITIALIZER](b: Boolean) -> <v0>
w(b|<v0>)
2 mark({ var u: String if (b) { u = "s" } doSmth(u) var r: String if (b) { r = "s" } else { r = "t" } doSmth(r) })
v(var u: String)
@@ -77,7 +77,7 @@ fun t2(b: Boolean) {
L0:
1 <START>
v(b: Boolean)
magic(b: Boolean) -> <v0>
magic[FAKE_INITIALIZER](b: Boolean) -> <v0>
w(b|<v0>)
2 mark({ val i = 3 if (b) { return; } doSmth(i) if (i is Int) { return; } })
v(val i = 3)
@@ -98,7 +98,7 @@ L3:
mark(if (i is Int) { return; })
mark(i is Int)
r(i) -> <v5>
magic(i is Int|<v5>) -> <v6>
magic[IS](i is Int|<v5>) -> <v6>
jf(L4|<v6>) NEXT:[read (Unit), mark({ return; })]
3 mark({ return; })
ret L1 NEXT:[<END>]
@@ -119,14 +119,14 @@ fun doSmth(s: String) {}
L0:
1 <START>
v(s: String)
magic(s: String) -> <v0>
magic[FAKE_INITIALIZER](s: String) -> <v0>
w(s|<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>]
=====================
@@ -16,17 +16,17 @@ fun t1(b: Boolean) {
doSmth(r)
}
---------------------
<v0>: Boolean NEW: magic(b: Boolean) -> <v0>
b <v1>: Boolean NEW: r(b) -> <v1>
"s" <v2>: String NEW: r("s") -> <v2>
u <v3>: String NEW: r(u) -> <v3>
doSmth(u) <v4>: * NEW: call(doSmth(u), doSmth|<v3>) -> <v4>
b <v5>: Boolean NEW: r(b) -> <v5>
"s" <v6>: String NEW: r("s") -> <v6>
"t" <v7>: String NEW: r("t") -> <v7>
r <v8>: String NEW: r(r) -> <v8>
doSmth(r) <v9>: * NEW: call(doSmth(r), doSmth|<v8>) -> <v9>
{ var u: String if (b) { u = "s" } doSmth(u) var r: String if (b) { r = "s" } else { r = "t" } doSmth(r) } <v9>: * COPY
<v0>: Boolean NEW: magic[FAKE_INITIALIZER](b: Boolean) -> <v0>
b <v1>: Boolean NEW: r(b) -> <v1>
"s" <v2>: String NEW: r("s") -> <v2>
u <v3>: String NEW: r(u) -> <v3>
doSmth(u) <v4>: * NEW: call(doSmth(u), doSmth|<v3>) -> <v4>
b <v5>: Boolean NEW: r(b) -> <v5>
"s" <v6>: String NEW: r("s") -> <v6>
"t" <v7>: String NEW: r("t") -> <v7>
r <v8>: String NEW: r(r) -> <v8>
doSmth(r) <v9>: * NEW: call(doSmth(r), doSmth|<v8>) -> <v9>
{ var u: String if (b) { u = "s" } doSmth(u) var r: String if (b) { r = "s" } else { r = "t" } doSmth(r) } <v9>: * COPY
=====================
== t2 ==
fun t2(b: Boolean) {
@@ -40,16 +40,16 @@ fun t2(b: Boolean) {
}
}
---------------------
<v0>: Boolean NEW: magic(b: Boolean) -> <v0>
3 <v1>: Int NEW: r(3) -> <v1>
b <v2>: Boolean NEW: r(b) -> <v2>
i <v3>: String NEW: r(i) -> <v3>
doSmth(i) <v4>: * NEW: call(doSmth(i), doSmth|<v3>) -> <v4>
i <v5>: * NEW: r(i) -> <v5>
i is Int <v6>: Boolean NEW: magic(i is Int|<v5>) -> <v6>
<v0>: Boolean NEW: magic[FAKE_INITIALIZER](b: Boolean) -> <v0>
3 <v1>: Int NEW: r(3) -> <v1>
b <v2>: Boolean NEW: r(b) -> <v2>
i <v3>: String NEW: r(i) -> <v3>
doSmth(i) <v4>: * NEW: call(doSmth(i), doSmth|<v3>) -> <v4>
i <v5>: * NEW: r(i) -> <v5>
i is Int <v6>: Boolean NEW: magic[IS](i is Int|<v5>) -> <v6>
=====================
== doSmth ==
fun doSmth(s: String) {}
---------------------
<v0>: String NEW: magic(s: String) -> <v0>
<v0>: String NEW: magic[FAKE_INITIALIZER](s: String) -> <v0>
=====================
@@ -8,14 +8,14 @@ fun illegalWhenBlock(a: Any): Any {
L0:
1 <START>
v(a: Any)
magic(a: Any) -> <v0>
magic[FAKE_INITIALIZER](a: Any) -> <v0>
w(a|<v0>)
2 mark({ when(a) { is Int -> return a } })
mark(when(a) { is Int -> return a })
r(a) -> <v1>
mark(is Int -> return a)
mark(is Int)
magic(is Int|<v1>) -> <v2>
magic[IS](is Int|<v1>) -> <v2>
jmp?(L4|<v2>) NEXT:[<END>, r(a) -> <v3>]
L3:
r(a) -> <v3>
@@ -5,8 +5,8 @@ fun illegalWhenBlock(a: Any): Any {
}
}
---------------------
<v0>: {<: Any} NEW: magic(a: Any) -> <v0>
a <v1>: * NEW: r(a) -> <v1>
is Int <v2>: * NEW: magic(is Int|<v1>) -> <v2>
a <v3>: {<: Any} NEW: r(a) -> <v3>
<v0>: {<: Any} NEW: magic[FAKE_INITIALIZER](a: Any) -> <v0>
a <v1>: * NEW: r(a) -> <v1>
is Int <v2>: * NEW: magic[IS](is Int|<v1>) -> <v2>
a <v3>: {<: Any} NEW: r(a) -> <v3>
=====================
@@ -13,7 +13,7 @@ fun foo(a: Number) {
L0:
1 <START>
v(a: Number)
magic(a: Number) -> <v0>
magic[FAKE_INITIALIZER](a: Number) -> <v0>
w(a|<v0>)
2 mark({ val t = when (a) { 1 -> "1" in Collections.singleton(2) -> "2" is Int -> "Int" !in Collections.singleton(3) -> "!3" !is Number -> "!Number" else -> null } })
v(val t = when (a) { 1 -> "1" in Collections.singleton(2) -> "2" is Int -> "Int" !in Collections.singleton(3) -> "!3" !is Number -> "!Number" else -> null })
@@ -22,7 +22,7 @@ L0:
mark(1 -> "1")
mark(1)
r(1) -> <v2>
magic(1|<v1>, <v2>) -> <v3>
magic[EQUALS_IN_WHEN_CONDITION](1|<v1>, <v2>) -> <v3>
jmp?(L4|<v3>) NEXT:[mark(in Collections.singleton(2) -> "2"), mark("1")]
L3:
mark("1")
@@ -44,7 +44,7 @@ L5:
L6:
mark(is Int -> "Int") PREV:[jmp?(L6|<v7>)]
mark(is Int)
magic(is Int|<v1>) -> <v9>
magic[IS](is Int|<v1>) -> <v9>
jmp?(L8|<v9>) NEXT:[mark(!in Collections.singleton(3) -> "!3"), mark("Int")]
L7:
mark("Int")
@@ -66,7 +66,7 @@ L9:
L10:
mark(!is Number -> "!Number") PREV:[jmp?(L10|<v13>)]
mark(!is Number)
magic(!is Number|<v1>) -> <v15>
magic[IS](!is Number|<v1>) -> <v15>
jmp?(L12|<v15>) NEXT:[mark(else -> null), mark("!Number")]
L11:
mark("!Number")
@@ -10,24 +10,24 @@ fun foo(a: Number) {
}
}
---------------------
<v0>: {<: Number} NEW: magic(a: Number) -> <v0>
a <v1>: AND{{<: Any?}, *} NEW: r(a) -> <v1>
<v0>: {<: Number} NEW: magic[FAKE_INITIALIZER](a: Number) -> <v0>
a <v1>: AND{*, {<: Any?}} NEW: r(a) -> <v1>
1 <v2>: * NEW: r(1) -> <v2>
1 <v3>: * NEW: magic(1|<v1>, <v2>) -> <v3>
1 <v3>: * NEW: magic[EQUALS_IN_WHEN_CONDITION](1|<v1>, <v2>) -> <v3>
"1" <v4>: {<: String?} NEW: r("1") -> <v4>
2 <v5>: {<: Int?} NEW: r(2) -> <v5>
singleton(2) <v6>: OR{{<: Collection<Int>}, {<: Collection<Int>}} NEW: call(singleton(2), singleton|<v5>) -> <v6>
Collections.singleton(2) <v6>: OR{{<: Collection<Int>}, {<: Collection<Int>}} COPY
in Collections.singleton(2) <v7>: * NEW: call(in Collections.singleton(2), contains|<v6>, <v1>) -> <v7>
"2" <v8>: {<: String?} NEW: r("2") -> <v8>
is Int <v9>: * NEW: magic(is Int|<v1>) -> <v9>
is Int <v9>: * NEW: magic[IS](is Int|<v1>) -> <v9>
"Int" <v10>: {<: String?} NEW: r("Int") -> <v10>
3 <v11>: {<: Int?} NEW: r(3) -> <v11>
singleton(3) <v12>: OR{{<: Collection<Int>}, {<: Collection<Int>}} NEW: call(singleton(3), singleton|<v11>) -> <v12>
Collections.singleton(3) <v12>: OR{{<: Collection<Int>}, {<: Collection<Int>}} COPY
!in Collections.singleton(3) <v13>: * NEW: call(!in Collections.singleton(3), contains|<v12>, <v1>) -> <v13>
"!3" <v14>: {<: String?} NEW: r("!3") -> <v14>
!is Number <v15>: * NEW: magic(!is Number|<v1>) -> <v15>
!is Number <v15>: * NEW: magic[IS](!is Number|<v1>) -> <v15>
"!Number" <v16>: {<: String?} NEW: r("!Number") -> <v16>
null <v17>: {<: String?} NEW: r(null) -> <v17>
when (a) { 1 -> "1" in Collections.singleton(2) -> "2" is Int -> "Int" !in Collections.singleton(3) -> "!3" !is Number -> "!Number" else -> null } <v18>: {<: String?} NEW: merge(when (a) { 1 -> "1" in Collections.singleton(2) -> "2" is Int -> "Int" !in Collections.singleton(3) -> "!3" !is Number -> "!Number" else -> null }|<v4>, <v8>, <v10>, <v14>, <v16>, <v17>) -> <v18>