Pseudocode: Consume value of true condition in while-loop
This commit is contained in:
@@ -256,36 +256,37 @@ L2 [loop entry point]:
|
||||
L5 [condition entry point]:
|
||||
r(true) -> <v0> PREV:[mark(@l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } }), jmp(L2 [loop entry point])]
|
||||
mark(while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } })
|
||||
magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
||||
L4 [body entry point]:
|
||||
3 mark({ try { 1 if (2 > 3) { break @l } } finally { 2 } })
|
||||
mark(try { 1 if (2 > 3) { break @l } } finally { 2 })
|
||||
jmp?(L6 [onExceptionToFinallyBlock]) NEXT:[mark({ 2 }), mark({ 1 if (2 > 3) { break @l } })]
|
||||
4 mark({ 1 if (2 > 3) { break @l } })
|
||||
r(1) -> <v1>
|
||||
r(1) -> <v2>
|
||||
mark(if (2 > 3) { break @l })
|
||||
r(2) -> <v2>
|
||||
r(3) -> <v3>
|
||||
r(2) -> <v3>
|
||||
r(3) -> <v4>
|
||||
mark(2 > 3)
|
||||
call(2 > 3, compareTo|<v2>, <v3>) -> <v4>
|
||||
jf(L7|<v4>) NEXT:[read (Unit), mark({ break @l })]
|
||||
call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
||||
jf(L7|<v5>) NEXT:[read (Unit), mark({ break @l })]
|
||||
5 mark({ break @l })
|
||||
L8 [start finally]:
|
||||
6 mark({ 2 })
|
||||
r(2) -> <v5>
|
||||
r(2) -> <v6>
|
||||
L9 [finish finally]:
|
||||
5 jmp(L3 [loop exit point]) NEXT:[read (Unit)]
|
||||
- 4 jmp(L10) NEXT:[jmp(L11 [skipFinallyToErrorBlock])] PREV:[]
|
||||
L7:
|
||||
read (Unit) PREV:[jf(L7|<v4>)]
|
||||
read (Unit) PREV:[jf(L7|<v5>)]
|
||||
L10:
|
||||
3 jmp(L11 [skipFinallyToErrorBlock]) NEXT:[mark({ 2 })]
|
||||
L6 [onExceptionToFinallyBlock]:
|
||||
6 mark({ 2 }) PREV:[jmp?(L6 [onExceptionToFinallyBlock])]
|
||||
r(2) -> <v5>
|
||||
r(2) -> <v6>
|
||||
3 jmp(error) NEXT:[<ERROR>]
|
||||
L11 [skipFinallyToErrorBlock]:
|
||||
6 mark({ 2 }) PREV:[jmp(L11 [skipFinallyToErrorBlock])]
|
||||
r(2) -> <v5>
|
||||
r(2) -> <v6>
|
||||
2 jmp(L2 [loop entry point]) NEXT:[r(true) -> <v0>]
|
||||
L3 [loop exit point]:
|
||||
read (Unit) PREV:[jmp(L3 [loop exit point])]
|
||||
@@ -322,35 +323,36 @@ L3 [loop entry point]:
|
||||
L6 [condition entry point]:
|
||||
r(true) -> <v0> PREV:[mark(@l while(true) { 1 if (2 > 3) { break @l } }), jmp(L3 [loop entry point])]
|
||||
mark(while(true) { 1 if (2 > 3) { break @l } })
|
||||
magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
||||
L5 [body entry point]:
|
||||
4 mark({ 1 if (2 > 3) { break @l } })
|
||||
r(1) -> <v1>
|
||||
r(1) -> <v2>
|
||||
mark(if (2 > 3) { break @l })
|
||||
r(2) -> <v2>
|
||||
r(3) -> <v3>
|
||||
r(2) -> <v3>
|
||||
r(3) -> <v4>
|
||||
mark(2 > 3)
|
||||
call(2 > 3, compareTo|<v2>, <v3>) -> <v4>
|
||||
jf(L7|<v4>) NEXT:[read (Unit), mark({ break @l })]
|
||||
call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
||||
jf(L7|<v5>) NEXT:[read (Unit), mark({ break @l })]
|
||||
5 mark({ break @l })
|
||||
jmp(L4 [loop exit point]) NEXT:[read (Unit)]
|
||||
- 4 jmp(L8) NEXT:[jmp(L3 [loop entry point])] PREV:[]
|
||||
L7:
|
||||
read (Unit) PREV:[jf(L7|<v4>)]
|
||||
read (Unit) PREV:[jf(L7|<v5>)]
|
||||
L8:
|
||||
3 jmp(L3 [loop entry point]) NEXT:[r(true) -> <v0>]
|
||||
L4 [loop exit point]:
|
||||
read (Unit) PREV:[jmp(L4 [loop exit point])]
|
||||
r(5) -> <v5>
|
||||
r(5) -> <v6>
|
||||
2 jmp(L9 [skipFinallyToErrorBlock]) NEXT:[mark({ 2 })]
|
||||
L2 [onExceptionToFinallyBlock]:
|
||||
L10 [start finally]:
|
||||
3 mark({ 2 }) PREV:[jmp?(L2 [onExceptionToFinallyBlock])]
|
||||
r(2) -> <v6>
|
||||
r(2) -> <v7>
|
||||
L11 [finish finally]:
|
||||
2 jmp(error) NEXT:[<ERROR>]
|
||||
L9 [skipFinallyToErrorBlock]:
|
||||
3 mark({ 2 }) PREV:[jmp(L9 [skipFinallyToErrorBlock])]
|
||||
r(2) -> <v6>
|
||||
r(2) -> <v7>
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
@@ -383,20 +385,21 @@ L3 [loop entry point]:
|
||||
L6 [condition entry point]:
|
||||
r(true) -> <v0> PREV:[mark(@l while(true) { 1 if (2 > 3) { break @l } }), jmp(L3 [loop entry point])]
|
||||
mark(while(true) { 1 if (2 > 3) { break @l } })
|
||||
magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
||||
L5 [body entry point]:
|
||||
4 mark({ 1 if (2 > 3) { break @l } })
|
||||
r(1) -> <v1>
|
||||
r(1) -> <v2>
|
||||
mark(if (2 > 3) { break @l })
|
||||
r(2) -> <v2>
|
||||
r(3) -> <v3>
|
||||
r(2) -> <v3>
|
||||
r(3) -> <v4>
|
||||
mark(2 > 3)
|
||||
call(2 > 3, compareTo|<v2>, <v3>) -> <v4>
|
||||
jf(L7|<v4>) NEXT:[read (Unit), mark({ break @l })]
|
||||
call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
||||
jf(L7|<v5>) NEXT:[read (Unit), mark({ break @l })]
|
||||
5 mark({ break @l })
|
||||
jmp(L4 [loop exit point]) NEXT:[read (Unit)]
|
||||
- 4 jmp(L8) NEXT:[jmp(L3 [loop entry point])] PREV:[]
|
||||
L7:
|
||||
read (Unit) PREV:[jf(L7|<v4>)]
|
||||
read (Unit) PREV:[jf(L7|<v5>)]
|
||||
L8:
|
||||
3 jmp(L3 [loop entry point]) NEXT:[r(true) -> <v0>]
|
||||
L4 [loop exit point]:
|
||||
@@ -405,12 +408,12 @@ L4 [loop exit point]:
|
||||
L2 [onExceptionToFinallyBlock]:
|
||||
L10 [start finally]:
|
||||
3 mark({ 2 }) PREV:[jmp?(L2 [onExceptionToFinallyBlock])]
|
||||
r(2) -> <v5>
|
||||
r(2) -> <v6>
|
||||
L11 [finish finally]:
|
||||
2 jmp(error) NEXT:[<ERROR>]
|
||||
L9 [skipFinallyToErrorBlock]:
|
||||
3 mark({ 2 }) PREV:[jmp(L9 [skipFinallyToErrorBlock])]
|
||||
r(2) -> <v5>
|
||||
r(2) -> <v6>
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
|
||||
@@ -118,13 +118,14 @@ 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>
|
||||
2 > 3 <v4>: Boolean NEW: call(2 > 3, compareTo|<v2>, <v3>) -> <v4>
|
||||
2 <v5>: * NEW: r(2) -> <v5>
|
||||
{ 2 } <v5>: * COPY
|
||||
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
||||
true <v0>: Boolean NEW: r(true) -> <v0>
|
||||
1 <v2>: * NEW: r(1) -> <v2>
|
||||
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
|
||||
3 <v4>: Int NEW: r(3) -> <v4>
|
||||
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
||||
2 <v6>: * NEW: r(2) -> <v6>
|
||||
{ 2 } <v6>: * COPY
|
||||
=====================
|
||||
== t6 ==
|
||||
fun t6() {
|
||||
@@ -141,17 +142,18 @@ 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>
|
||||
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
|
||||
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
||||
true <v0>: Boolean NEW: r(true) -> <v0>
|
||||
1 <v2>: * NEW: r(1) -> <v2>
|
||||
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
|
||||
3 <v4>: Int NEW: r(3) -> <v4>
|
||||
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
||||
5 <v6>: * NEW: r(5) -> <v6>
|
||||
{ @l while(true) { 1 if (2 > 3) { break @l } } 5 } <v6>: * COPY
|
||||
2 <v7>: * NEW: r(2) -> <v7>
|
||||
{ 2 } <v7>: * COPY
|
||||
try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } <v6>: * COPY
|
||||
{ try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } } <v6>: * COPY
|
||||
=====================
|
||||
== t7 ==
|
||||
fun t7() {
|
||||
@@ -167,13 +169,14 @@ 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>
|
||||
2 > 3 <v4>: Boolean NEW: call(2 > 3, compareTo|<v2>, <v3>) -> <v4>
|
||||
2 <v5>: * NEW: r(2) -> <v5>
|
||||
{ 2 } <v5>: * COPY
|
||||
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
||||
true <v0>: Boolean NEW: r(true) -> <v0>
|
||||
1 <v2>: * NEW: r(1) -> <v2>
|
||||
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
|
||||
3 <v4>: Int NEW: r(3) -> <v4>
|
||||
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
||||
2 <v6>: * NEW: r(2) -> <v6>
|
||||
{ 2 } <v6>: * COPY
|
||||
=====================
|
||||
== t8 ==
|
||||
fun t8(a : Int) {
|
||||
|
||||
Reference in New Issue
Block a user