Adjust testData to new labels syntax
This commit is contained in:
@@ -89,7 +89,7 @@ sink:
|
|||||||
fun t3() {
|
fun t3() {
|
||||||
try {
|
try {
|
||||||
1
|
1
|
||||||
@l{ () ->
|
l@{ () ->
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
return@l
|
return@l
|
||||||
}
|
}
|
||||||
@@ -101,12 +101,12 @@ fun t3() {
|
|||||||
---------------------
|
---------------------
|
||||||
L0:
|
L0:
|
||||||
1 <START>
|
1 <START>
|
||||||
2 mark({ try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } })
|
2 mark({ try { 1 l@{ () -> if (2 > 3) { return@l } } } finally { 2 } })
|
||||||
mark(try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 })
|
mark(try { 1 l@{ () -> if (2 > 3) { return@l } } } finally { 2 })
|
||||||
jmp?(L2) NEXT:[mark({ 2 }), mark({ 1 @l{ () -> if (2 > 3) { return@l } } })]
|
jmp?(L2) NEXT:[mark({ 2 }), mark({ 1 l@{ () -> if (2 > 3) { return@l } } })]
|
||||||
3 mark({ 1 @l{ () -> if (2 > 3) { return@l } } })
|
3 mark({ 1 l@{ () -> if (2 > 3) { return@l } } })
|
||||||
r(1) -> <v0>
|
r(1) -> <v0>
|
||||||
mark(@l{ () -> if (2 > 3) { return@l } })
|
mark(l@{ () -> if (2 > 3) { return@l } })
|
||||||
mark({ () -> if (2 > 3) { return@l } })
|
mark({ () -> if (2 > 3) { return@l } })
|
||||||
jmp?(L3) NEXT:[r({ () -> if (2 > 3) { return@l } }) -> <v1>, d({ () -> if (2 > 3) { return@l } })]
|
jmp?(L3) NEXT:[r({ () -> if (2 > 3) { return@l } }) -> <v1>, d({ () -> if (2 > 3) { return@l } })]
|
||||||
d({ () -> if (2 > 3) { return@l } }) NEXT:[<SINK>]
|
d({ () -> if (2 > 3) { return@l } }) NEXT:[<SINK>]
|
||||||
@@ -123,7 +123,7 @@ L8 [skipFinallyToErrorBlock]:
|
|||||||
L11 [copy of L2, onExceptionToFinallyBlock]:
|
L11 [copy of L2, onExceptionToFinallyBlock]:
|
||||||
3 mark({ 2 }) PREV:[jmp(L8)]
|
3 mark({ 2 }) PREV:[jmp(L8)]
|
||||||
r(2) -> <v2>
|
r(2) -> <v2>
|
||||||
2 merge(try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 }|<v1>) -> <v3>
|
2 merge(try { 1 l@{ () -> if (2 > 3) { return@l } } } finally { 2 }|<v1>) -> <v3>
|
||||||
L1:
|
L1:
|
||||||
1 <END> NEXT:[<SINK>]
|
1 <END> NEXT:[<SINK>]
|
||||||
error:
|
error:
|
||||||
@@ -163,7 +163,7 @@ sink:
|
|||||||
=====================
|
=====================
|
||||||
== t4 ==
|
== t4 ==
|
||||||
fun t4() {
|
fun t4() {
|
||||||
@l{ () ->
|
l@{ () ->
|
||||||
try {
|
try {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
@@ -177,8 +177,8 @@ fun t4() {
|
|||||||
---------------------
|
---------------------
|
||||||
L0:
|
L0:
|
||||||
1 <START>
|
1 <START>
|
||||||
2 mark({ @l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } })
|
2 mark({ l@{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } })
|
||||||
mark(@l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } })
|
mark(l@{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } })
|
||||||
mark({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } })
|
mark({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } })
|
||||||
jmp?(L2) NEXT:[r({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } }) -> <v0>, d({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } })]
|
jmp?(L2) NEXT:[r({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } }) -> <v0>, d({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } })]
|
||||||
d({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } }) NEXT:[<SINK>]
|
d({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } }) NEXT:[<SINK>]
|
||||||
@@ -245,11 +245,11 @@ sink:
|
|||||||
=====================
|
=====================
|
||||||
== t5 ==
|
== t5 ==
|
||||||
fun t5() {
|
fun t5() {
|
||||||
@l while(true) {
|
l@ while(true) {
|
||||||
try {
|
try {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
break @l
|
break@l
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
2
|
2
|
||||||
@@ -259,63 +259,63 @@ fun t5() {
|
|||||||
---------------------
|
---------------------
|
||||||
L0:
|
L0:
|
||||||
1 <START>
|
1 <START>
|
||||||
2 mark({ @l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } } })
|
2 mark({ l@ while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } } })
|
||||||
mark(@l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } })
|
mark(l@ while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } })
|
||||||
L2 [loop entry point]:
|
L2 [loop entry point]:
|
||||||
L6 [condition entry point]:
|
L6 [condition entry point]:
|
||||||
r(true) -> <v0> PREV:[mark(@l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } }), jmp(L2)]
|
r(true) -> <v0> PREV:[mark(l@ while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } }), jmp(L2)]
|
||||||
mark(while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } })
|
mark(while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } })
|
||||||
magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
||||||
L4 [body entry point]:
|
L4 [body entry point]:
|
||||||
3 mark({ try { 1 if (2 > 3) { break @l } } finally { 2 } })
|
3 mark({ try { 1 if (2 > 3) { break@l } } finally { 2 } })
|
||||||
mark(try { 1 if (2 > 3) { break @l } } finally { 2 })
|
mark(try { 1 if (2 > 3) { break@l } } finally { 2 })
|
||||||
jmp?(L7) NEXT:[mark({ 2 }), mark({ 1 if (2 > 3) { break @l } })]
|
jmp?(L7) NEXT:[mark({ 2 }), mark({ 1 if (2 > 3) { break@l } })]
|
||||||
4 mark({ 1 if (2 > 3) { break @l } })
|
4 mark({ 1 if (2 > 3) { break@l } })
|
||||||
r(1) -> <v2>
|
r(1) -> <v2>
|
||||||
mark(if (2 > 3) { break @l })
|
mark(if (2 > 3) { break@l })
|
||||||
r(2) -> <v3>
|
r(2) -> <v3>
|
||||||
r(3) -> <v4>
|
r(3) -> <v4>
|
||||||
mark(2 > 3)
|
mark(2 > 3)
|
||||||
call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
||||||
jf(L8|<v5>) NEXT:[read (Unit), mark({ break @l })]
|
jf(L8|<v5>) NEXT:[read (Unit), mark({ break@l })]
|
||||||
5 mark({ break @l })
|
5 mark({ break@l })
|
||||||
L9 [start finally]:
|
L9 [start finally]:
|
||||||
6 mark({ 2 })
|
6 mark({ 2 })
|
||||||
r(2) -> <v6>
|
r(2) -> <v6>
|
||||||
L10 [finish finally]:
|
L10 [finish finally]:
|
||||||
5 jmp(L3) NEXT:[read (Unit)]
|
5 jmp(L3) NEXT:[read (Unit)]
|
||||||
- 4 jmp(L11) NEXT:[merge(if (2 > 3) { break @l }|!<v7>) -> <v8>] PREV:[]
|
- 4 jmp(L11) NEXT:[merge(if (2 > 3) { break@l }|!<v7>) -> <v8>] PREV:[]
|
||||||
L8 [else branch]:
|
L8 [else branch]:
|
||||||
read (Unit) PREV:[jf(L8|<v5>)]
|
read (Unit) PREV:[jf(L8|<v5>)]
|
||||||
L11 ['if' expression result]:
|
L11 ['if' expression result]:
|
||||||
merge(if (2 > 3) { break @l }|!<v7>) -> <v8>
|
merge(if (2 > 3) { break@l }|!<v7>) -> <v8>
|
||||||
3 jmp(L12) NEXT:[mark({ 2 })]
|
3 jmp(L12) NEXT:[mark({ 2 })]
|
||||||
L7 [onExceptionToFinallyBlock]:
|
L7 [onExceptionToFinallyBlock]:
|
||||||
6 mark({ 2 }) PREV:[jmp?(L7)]
|
6 mark({ 2 }) PREV:[jmp?(L7)]
|
||||||
r(2) -> <v6>
|
r(2) -> <v6>
|
||||||
3 jmp(error) NEXT:[<ERROR>]
|
3 jmp(error) NEXT:[<ERROR>]
|
||||||
L12 [skipFinallyToErrorBlock]:
|
L12 [skipFinallyToErrorBlock]:
|
||||||
6 mark({ 2 }) PREV:[jmp(L12)]
|
6 mark({ 2 }) PREV:[jmp(L12)]
|
||||||
r(2) -> <v6>
|
r(2) -> <v6>
|
||||||
3 merge(try { 1 if (2 > 3) { break @l } } finally { 2 }|<v8>) -> <v9>
|
3 merge(try { 1 if (2 > 3) { break@l } } finally { 2 }|<v8>) -> <v9>
|
||||||
2 jmp(L2) NEXT:[r(true) -> <v0>]
|
2 jmp(L2) NEXT:[r(true) -> <v0>]
|
||||||
L3 [loop exit point]:
|
L3 [loop exit point]:
|
||||||
L5 [body exit point]:
|
L5 [body exit point]:
|
||||||
read (Unit) PREV:[jmp(L3)]
|
read (Unit) PREV:[jmp(L3)]
|
||||||
L1:
|
L1:
|
||||||
1 <END> NEXT:[<SINK>]
|
1 <END> NEXT:[<SINK>]
|
||||||
error:
|
error:
|
||||||
<ERROR> PREV:[jmp(error)]
|
<ERROR> PREV:[jmp(error)]
|
||||||
sink:
|
sink:
|
||||||
<SINK> PREV:[<ERROR>, <END>]
|
<SINK> PREV:[<ERROR>, <END>]
|
||||||
=====================
|
=====================
|
||||||
== t6 ==
|
== t6 ==
|
||||||
fun t6() {
|
fun t6() {
|
||||||
try {
|
try {
|
||||||
@l while(true) {
|
l@ while(true) {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
break @l
|
break@l
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
5
|
5
|
||||||
@@ -326,114 +326,49 @@ fun t6() {
|
|||||||
---------------------
|
---------------------
|
||||||
L0:
|
L0:
|
||||||
1 <START>
|
1 <START>
|
||||||
2 mark({ try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } })
|
2 mark({ try { l@ while(true) { 1 if (2 > 3) { break@l } } 5 } finally { 2 } })
|
||||||
mark(try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 })
|
mark(try { l@ while(true) { 1 if (2 > 3) { break@l } } 5 } finally { 2 })
|
||||||
jmp?(L2) NEXT:[mark({ 2 }), mark({ @l while(true) { 1 if (2 > 3) { break @l } } 5 })]
|
jmp?(L2) NEXT:[mark({ 2 }), mark({ l@ while(true) { 1 if (2 > 3) { break@l } } 5 })]
|
||||||
3 mark({ @l while(true) { 1 if (2 > 3) { break @l } } 5 })
|
3 mark({ l@ while(true) { 1 if (2 > 3) { break@l } } 5 })
|
||||||
mark(@l while(true) { 1 if (2 > 3) { break @l } })
|
mark(l@ while(true) { 1 if (2 > 3) { break@l } })
|
||||||
L3 [loop entry point]:
|
L3 [loop entry point]:
|
||||||
L7 [condition entry point]:
|
L7 [condition entry point]:
|
||||||
r(true) -> <v0> PREV:[mark(@l while(true) { 1 if (2 > 3) { break @l } }), jmp(L3)]
|
r(true) -> <v0> PREV:[mark(l@ while(true) { 1 if (2 > 3) { break@l } }), jmp(L3)]
|
||||||
mark(while(true) { 1 if (2 > 3) { break @l } })
|
mark(while(true) { 1 if (2 > 3) { break@l } })
|
||||||
magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
||||||
L5 [body entry point]:
|
L5 [body entry point]:
|
||||||
4 mark({ 1 if (2 > 3) { break @l } })
|
4 mark({ 1 if (2 > 3) { break@l } })
|
||||||
r(1) -> <v2>
|
r(1) -> <v2>
|
||||||
mark(if (2 > 3) { break @l })
|
mark(if (2 > 3) { break@l })
|
||||||
r(2) -> <v3>
|
r(2) -> <v3>
|
||||||
r(3) -> <v4>
|
r(3) -> <v4>
|
||||||
mark(2 > 3)
|
mark(2 > 3)
|
||||||
call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
||||||
jf(L8|<v5>) NEXT:[read (Unit), mark({ break @l })]
|
jf(L8|<v5>) NEXT:[read (Unit), mark({ break@l })]
|
||||||
5 mark({ break @l })
|
5 mark({ break@l })
|
||||||
jmp(L4) NEXT:[read (Unit)]
|
|
||||||
- 4 jmp(L9) NEXT:[merge(if (2 > 3) { break @l }|!<v6>) -> <v7>] PREV:[]
|
|
||||||
L8 [else branch]:
|
|
||||||
read (Unit) PREV:[jf(L8|<v5>)]
|
|
||||||
L9 ['if' expression result]:
|
|
||||||
merge(if (2 > 3) { break @l }|!<v6>) -> <v7>
|
|
||||||
3 jmp(L3) NEXT:[r(true) -> <v0>]
|
|
||||||
L4 [loop exit point]:
|
|
||||||
L6 [body exit point]:
|
|
||||||
read (Unit) PREV:[jmp(L4)]
|
|
||||||
r(5) -> <v9>
|
|
||||||
2 jmp(L10) NEXT:[mark({ 2 })]
|
|
||||||
L2 [onExceptionToFinallyBlock]:
|
|
||||||
L11 [start finally]:
|
|
||||||
3 mark({ 2 }) PREV:[jmp?(L2)]
|
|
||||||
r(2) -> <v10>
|
|
||||||
L12 [finish finally]:
|
|
||||||
2 jmp(error) NEXT:[<ERROR>]
|
|
||||||
L10 [skipFinallyToErrorBlock]:
|
|
||||||
L13 [copy of L2, onExceptionToFinallyBlock]:
|
|
||||||
3 mark({ 2 }) PREV:[jmp(L10)]
|
|
||||||
r(2) -> <v10>
|
|
||||||
2 merge(try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 }|<v9>) -> <v11>
|
|
||||||
L1:
|
|
||||||
1 <END> NEXT:[<SINK>]
|
|
||||||
error:
|
|
||||||
<ERROR> PREV:[jmp(error)]
|
|
||||||
sink:
|
|
||||||
<SINK> PREV:[<ERROR>, <END>]
|
|
||||||
=====================
|
|
||||||
== t7 ==
|
|
||||||
fun t7() {
|
|
||||||
try {
|
|
||||||
@l while(true) {
|
|
||||||
1
|
|
||||||
if (2 > 3) {
|
|
||||||
break @l
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
---------------------
|
|
||||||
L0:
|
|
||||||
1 <START>
|
|
||||||
2 mark({ try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 } })
|
|
||||||
mark(try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 })
|
|
||||||
jmp?(L2) NEXT:[mark({ 2 }), mark({ @l while(true) { 1 if (2 > 3) { break @l } } })]
|
|
||||||
3 mark({ @l while(true) { 1 if (2 > 3) { break @l } } })
|
|
||||||
mark(@l while(true) { 1 if (2 > 3) { break @l } })
|
|
||||||
L3 [loop entry point]:
|
|
||||||
L7 [condition entry point]:
|
|
||||||
r(true) -> <v0> PREV:[mark(@l while(true) { 1 if (2 > 3) { break @l } }), jmp(L3)]
|
|
||||||
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) -> <v2>
|
|
||||||
mark(if (2 > 3) { break @l })
|
|
||||||
r(2) -> <v3>
|
|
||||||
r(3) -> <v4>
|
|
||||||
mark(2 > 3)
|
|
||||||
call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
|
||||||
jf(L8|<v5>) NEXT:[read (Unit), mark({ break @l })]
|
|
||||||
5 mark({ break @l })
|
|
||||||
jmp(L4) NEXT:[read (Unit)]
|
jmp(L4) NEXT:[read (Unit)]
|
||||||
- 4 jmp(L9) NEXT:[merge(if (2 > 3) { break @l }|!<v6>) -> <v7>] PREV:[]
|
- 4 jmp(L9) NEXT:[merge(if (2 > 3) { break@l }|!<v6>) -> <v7>] PREV:[]
|
||||||
L8 [else branch]:
|
L8 [else branch]:
|
||||||
read (Unit) PREV:[jf(L8|<v5>)]
|
read (Unit) PREV:[jf(L8|<v5>)]
|
||||||
L9 ['if' expression result]:
|
L9 ['if' expression result]:
|
||||||
merge(if (2 > 3) { break @l }|!<v6>) -> <v7>
|
merge(if (2 > 3) { break@l }|!<v6>) -> <v7>
|
||||||
3 jmp(L3) NEXT:[r(true) -> <v0>]
|
3 jmp(L3) NEXT:[r(true) -> <v0>]
|
||||||
L4 [loop exit point]:
|
L4 [loop exit point]:
|
||||||
L6 [body exit point]:
|
L6 [body exit point]:
|
||||||
read (Unit) PREV:[jmp(L4)]
|
read (Unit) PREV:[jmp(L4)]
|
||||||
|
r(5) -> <v9>
|
||||||
2 jmp(L10) NEXT:[mark({ 2 })]
|
2 jmp(L10) NEXT:[mark({ 2 })]
|
||||||
L2 [onExceptionToFinallyBlock]:
|
L2 [onExceptionToFinallyBlock]:
|
||||||
L11 [start finally]:
|
L11 [start finally]:
|
||||||
3 mark({ 2 }) PREV:[jmp?(L2)]
|
3 mark({ 2 }) PREV:[jmp?(L2)]
|
||||||
r(2) -> <v9>
|
r(2) -> <v10>
|
||||||
L12 [finish finally]:
|
L12 [finish finally]:
|
||||||
2 jmp(error) NEXT:[<ERROR>]
|
2 jmp(error) NEXT:[<ERROR>]
|
||||||
L10 [skipFinallyToErrorBlock]:
|
L10 [skipFinallyToErrorBlock]:
|
||||||
L13 [copy of L2, onExceptionToFinallyBlock]:
|
L13 [copy of L2, onExceptionToFinallyBlock]:
|
||||||
3 mark({ 2 }) PREV:[jmp(L10)]
|
3 mark({ 2 }) PREV:[jmp(L10)]
|
||||||
r(2) -> <v9>
|
r(2) -> <v10>
|
||||||
2 merge(try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 }|!<v8>) -> <v10>
|
2 merge(try { l@ while(true) { 1 if (2 > 3) { break@l } } 5 } finally { 2 }|<v9>) -> <v11>
|
||||||
L1:
|
L1:
|
||||||
1 <END> NEXT:[<SINK>]
|
1 <END> NEXT:[<SINK>]
|
||||||
error:
|
error:
|
||||||
@@ -441,13 +376,78 @@ error:
|
|||||||
sink:
|
sink:
|
||||||
<SINK> PREV:[<ERROR>, <END>]
|
<SINK> PREV:[<ERROR>, <END>]
|
||||||
=====================
|
=====================
|
||||||
|
== t7 ==
|
||||||
|
fun t7() {
|
||||||
|
try {
|
||||||
|
l@ while(true) {
|
||||||
|
1
|
||||||
|
if (2 > 3) {
|
||||||
|
break@l
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
---------------------
|
||||||
|
L0:
|
||||||
|
1 <START>
|
||||||
|
2 mark({ try { l@ while(true) { 1 if (2 > 3) { break@l } } } finally { 2 } })
|
||||||
|
mark(try { l@ while(true) { 1 if (2 > 3) { break@l } } } finally { 2 })
|
||||||
|
jmp?(L2) NEXT:[mark({ 2 }), mark({ l@ while(true) { 1 if (2 > 3) { break@l } } })]
|
||||||
|
3 mark({ l@ while(true) { 1 if (2 > 3) { break@l } } })
|
||||||
|
mark(l@ while(true) { 1 if (2 > 3) { break@l } })
|
||||||
|
L3 [loop entry point]:
|
||||||
|
L7 [condition entry point]:
|
||||||
|
r(true) -> <v0> PREV:[mark(l@ while(true) { 1 if (2 > 3) { break@l } }), jmp(L3)]
|
||||||
|
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) -> <v2>
|
||||||
|
mark(if (2 > 3) { break@l })
|
||||||
|
r(2) -> <v3>
|
||||||
|
r(3) -> <v4>
|
||||||
|
mark(2 > 3)
|
||||||
|
call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
||||||
|
jf(L8|<v5>) NEXT:[read (Unit), mark({ break@l })]
|
||||||
|
5 mark({ break@l })
|
||||||
|
jmp(L4) NEXT:[read (Unit)]
|
||||||
|
- 4 jmp(L9) NEXT:[merge(if (2 > 3) { break@l }|!<v6>) -> <v7>] PREV:[]
|
||||||
|
L8 [else branch]:
|
||||||
|
read (Unit) PREV:[jf(L8|<v5>)]
|
||||||
|
L9 ['if' expression result]:
|
||||||
|
merge(if (2 > 3) { break@l }|!<v6>) -> <v7>
|
||||||
|
3 jmp(L3) NEXT:[r(true) -> <v0>]
|
||||||
|
L4 [loop exit point]:
|
||||||
|
L6 [body exit point]:
|
||||||
|
read (Unit) PREV:[jmp(L4)]
|
||||||
|
2 jmp(L10) NEXT:[mark({ 2 })]
|
||||||
|
L2 [onExceptionToFinallyBlock]:
|
||||||
|
L11 [start finally]:
|
||||||
|
3 mark({ 2 }) PREV:[jmp?(L2)]
|
||||||
|
r(2) -> <v9>
|
||||||
|
L12 [finish finally]:
|
||||||
|
2 jmp(error) NEXT:[<ERROR>]
|
||||||
|
L10 [skipFinallyToErrorBlock]:
|
||||||
|
L13 [copy of L2, onExceptionToFinallyBlock]:
|
||||||
|
3 mark({ 2 }) PREV:[jmp(L10)]
|
||||||
|
r(2) -> <v9>
|
||||||
|
2 merge(try { l@ while(true) { 1 if (2 > 3) { break@l } } } finally { 2 }|!<v8>) -> <v10>
|
||||||
|
L1:
|
||||||
|
1 <END> NEXT:[<SINK>]
|
||||||
|
error:
|
||||||
|
<ERROR> PREV:[jmp(error)]
|
||||||
|
sink:
|
||||||
|
<SINK> PREV:[<ERROR>, <END>]
|
||||||
|
=====================
|
||||||
== t8 ==
|
== t8 ==
|
||||||
fun t8(a : Int) {
|
fun t8(a : Int) {
|
||||||
@l for (i in 1..a) {
|
l@ for (i in 1..a) {
|
||||||
try {
|
try {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
continue @l
|
continue@l
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
2
|
2
|
||||||
@@ -460,8 +460,8 @@ L0:
|
|||||||
v(a : Int)
|
v(a : Int)
|
||||||
magic[FAKE_INITIALIZER](a : Int) -> <v0>
|
magic[FAKE_INITIALIZER](a : Int) -> <v0>
|
||||||
w(a|<v0>)
|
w(a|<v0>)
|
||||||
2 mark({ @l for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } } })
|
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 } })
|
mark(l@ for (i in 1..a) { try { 1 if (2 > 3) { continue@l } } finally { 2 } })
|
||||||
3 r(1) -> <v1>
|
3 r(1) -> <v1>
|
||||||
r(a) -> <v2>
|
r(a) -> <v2>
|
||||||
mark(1..a)
|
mark(1..a)
|
||||||
@@ -469,60 +469,60 @@ L0:
|
|||||||
v(i)
|
v(i)
|
||||||
L2 [loop entry point]:
|
L2 [loop entry point]:
|
||||||
L6 [condition entry point]:
|
L6 [condition entry point]:
|
||||||
jmp?(L3) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>] PREV:[v(i), jmp(L6), jmp(L2)]
|
jmp?(L3) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>] PREV:[v(i), jmp(L6), jmp(L2)]
|
||||||
magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
|
magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
|
||||||
w(i|<v4>)
|
w(i|<v4>)
|
||||||
mark(for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } })
|
mark(for (i in 1..a) { try { 1 if (2 > 3) { continue@l } } finally { 2 } })
|
||||||
L4 [body entry point]:
|
L4 [body entry point]:
|
||||||
4 mark({ try { 1 if (2 > 3) { continue @l } } finally { 2 } })
|
4 mark({ try { 1 if (2 > 3) { continue@l } } finally { 2 } })
|
||||||
mark(try { 1 if (2 > 3) { continue @l } } finally { 2 })
|
mark(try { 1 if (2 > 3) { continue@l } } finally { 2 })
|
||||||
jmp?(L7) NEXT:[mark({ 2 }), mark({ 1 if (2 > 3) { continue @l } })]
|
jmp?(L7) NEXT:[mark({ 2 }), mark({ 1 if (2 > 3) { continue@l } })]
|
||||||
5 mark({ 1 if (2 > 3) { continue @l } })
|
5 mark({ 1 if (2 > 3) { continue@l } })
|
||||||
r(1) -> <v5>
|
r(1) -> <v5>
|
||||||
mark(if (2 > 3) { continue @l })
|
mark(if (2 > 3) { continue@l })
|
||||||
r(2) -> <v6>
|
r(2) -> <v6>
|
||||||
r(3) -> <v7>
|
r(3) -> <v7>
|
||||||
mark(2 > 3)
|
mark(2 > 3)
|
||||||
call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
|
call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
|
||||||
jf(L8|<v8>) NEXT:[read (Unit), mark({ continue @l })]
|
jf(L8|<v8>) NEXT:[read (Unit), mark({ continue@l })]
|
||||||
6 mark({ continue @l })
|
6 mark({ continue@l })
|
||||||
L9 [start finally]:
|
L9 [start finally]:
|
||||||
7 mark({ 2 })
|
7 mark({ 2 })
|
||||||
r(2) -> <v9>
|
r(2) -> <v9>
|
||||||
L10 [finish finally]:
|
L10 [finish finally]:
|
||||||
6 jmp(L6) NEXT:[jmp?(L3)]
|
6 jmp(L6) NEXT:[jmp?(L3)]
|
||||||
- 5 jmp(L11) NEXT:[merge(if (2 > 3) { continue @l }|!<v10>) -> <v11>] PREV:[]
|
- 5 jmp(L11) NEXT:[merge(if (2 > 3) { continue@l }|!<v10>) -> <v11>] PREV:[]
|
||||||
L8 [else branch]:
|
L8 [else branch]:
|
||||||
read (Unit) PREV:[jf(L8|<v8>)]
|
read (Unit) PREV:[jf(L8|<v8>)]
|
||||||
L11 ['if' expression result]:
|
L11 ['if' expression result]:
|
||||||
merge(if (2 > 3) { continue @l }|!<v10>) -> <v11>
|
merge(if (2 > 3) { continue@l }|!<v10>) -> <v11>
|
||||||
4 jmp(L12) NEXT:[mark({ 2 })]
|
4 jmp(L12) NEXT:[mark({ 2 })]
|
||||||
L7 [onExceptionToFinallyBlock]:
|
L7 [onExceptionToFinallyBlock]:
|
||||||
7 mark({ 2 }) PREV:[jmp?(L7)]
|
7 mark({ 2 }) PREV:[jmp?(L7)]
|
||||||
r(2) -> <v9>
|
r(2) -> <v9>
|
||||||
4 jmp(error) NEXT:[<ERROR>]
|
4 jmp(error) NEXT:[<ERROR>]
|
||||||
L12 [skipFinallyToErrorBlock]:
|
L12 [skipFinallyToErrorBlock]:
|
||||||
7 mark({ 2 }) PREV:[jmp(L12)]
|
7 mark({ 2 }) PREV:[jmp(L12)]
|
||||||
r(2) -> <v9>
|
r(2) -> <v9>
|
||||||
4 merge(try { 1 if (2 > 3) { continue @l } } finally { 2 }|<v11>) -> <v12>
|
4 merge(try { 1 if (2 > 3) { continue@l } } finally { 2 }|<v11>) -> <v12>
|
||||||
3 jmp(L2) NEXT:[jmp?(L3)]
|
3 jmp(L2) NEXT:[jmp?(L3)]
|
||||||
L3 [loop exit point]:
|
L3 [loop exit point]:
|
||||||
L5 [body exit point]:
|
L5 [body exit point]:
|
||||||
read (Unit) PREV:[jmp?(L3)]
|
read (Unit) PREV:[jmp?(L3)]
|
||||||
L1:
|
L1:
|
||||||
1 <END> NEXT:[<SINK>]
|
1 <END> NEXT:[<SINK>]
|
||||||
error:
|
error:
|
||||||
<ERROR> PREV:[jmp(error)]
|
<ERROR> PREV:[jmp(error)]
|
||||||
sink:
|
sink:
|
||||||
<SINK> PREV:[<ERROR>, <END>]
|
<SINK> PREV:[<ERROR>, <END>]
|
||||||
=====================
|
=====================
|
||||||
== t9 ==
|
== t9 ==
|
||||||
fun t9(a : Int) {
|
fun t9(a : Int) {
|
||||||
try {
|
try {
|
||||||
@l for (i in 1..a) {
|
l@ for (i in 1..a) {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
continue @l
|
continue@l
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
5
|
5
|
||||||
@@ -536,86 +536,11 @@ L0:
|
|||||||
v(a : Int)
|
v(a : Int)
|
||||||
magic[FAKE_INITIALIZER](a : Int) -> <v0>
|
magic[FAKE_INITIALIZER](a : Int) -> <v0>
|
||||||
w(a|<v0>)
|
w(a|<v0>)
|
||||||
2 mark({ try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } })
|
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 })
|
mark(try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 } finally { 2 })
|
||||||
jmp?(L2) NEXT:[mark({ 2 }), mark({ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 })]
|
jmp?(L2) NEXT:[mark({ 2 }), mark({ l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 })]
|
||||||
3 mark({ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 })
|
3 mark({ l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 })
|
||||||
mark(@l for (i in 1..a) { 1 if (2 > 3) { continue @l } })
|
mark(l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } })
|
||||||
4 r(1) -> <v1>
|
|
||||||
r(a) -> <v2>
|
|
||||||
mark(1..a)
|
|
||||||
call(1..a, rangeTo|<v1>, <v2>) -> <v3>
|
|
||||||
v(i)
|
|
||||||
L3 [loop entry point]:
|
|
||||||
L7 [condition entry point]:
|
|
||||||
jmp?(L4) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>] PREV:[v(i), jmp(L7), jmp(L3)]
|
|
||||||
magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
|
|
||||||
w(i|<v4>)
|
|
||||||
mark(for (i in 1..a) { 1 if (2 > 3) { continue @l } })
|
|
||||||
L5 [body entry point]:
|
|
||||||
5 mark({ 1 if (2 > 3) { continue @l } })
|
|
||||||
r(1) -> <v5>
|
|
||||||
mark(if (2 > 3) { continue @l })
|
|
||||||
r(2) -> <v6>
|
|
||||||
r(3) -> <v7>
|
|
||||||
mark(2 > 3)
|
|
||||||
call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
|
|
||||||
jf(L8|<v8>) NEXT:[read (Unit), mark({ continue @l })]
|
|
||||||
6 mark({ continue @l })
|
|
||||||
jmp(L7) NEXT:[jmp?(L4)]
|
|
||||||
- 5 jmp(L9) NEXT:[merge(if (2 > 3) { continue @l }|!<v9>) -> <v10>] PREV:[]
|
|
||||||
L8 [else branch]:
|
|
||||||
read (Unit) PREV:[jf(L8|<v8>)]
|
|
||||||
L9 ['if' expression result]:
|
|
||||||
merge(if (2 > 3) { continue @l }|!<v9>) -> <v10>
|
|
||||||
4 jmp(L3) NEXT:[jmp?(L4)]
|
|
||||||
L4 [loop exit point]:
|
|
||||||
L6 [body exit point]:
|
|
||||||
read (Unit) PREV:[jmp?(L4)]
|
|
||||||
3 r(5) -> <v12>
|
|
||||||
2 jmp(L10) NEXT:[mark({ 2 })]
|
|
||||||
L2 [onExceptionToFinallyBlock]:
|
|
||||||
L11 [start finally]:
|
|
||||||
3 mark({ 2 }) PREV:[jmp?(L2)]
|
|
||||||
r(2) -> <v13>
|
|
||||||
L12 [finish finally]:
|
|
||||||
2 jmp(error) NEXT:[<ERROR>]
|
|
||||||
L10 [skipFinallyToErrorBlock]:
|
|
||||||
L13 [copy of L2, onExceptionToFinallyBlock]:
|
|
||||||
3 mark({ 2 }) PREV:[jmp(L10)]
|
|
||||||
r(2) -> <v13>
|
|
||||||
2 merge(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 }|<v12>) -> <v14>
|
|
||||||
L1:
|
|
||||||
1 <END> NEXT:[<SINK>]
|
|
||||||
error:
|
|
||||||
<ERROR> PREV:[jmp(error)]
|
|
||||||
sink:
|
|
||||||
<SINK> PREV:[<ERROR>, <END>]
|
|
||||||
=====================
|
|
||||||
== t10 ==
|
|
||||||
fun t10(a : Int) {
|
|
||||||
try {
|
|
||||||
@l for (i in 1..a) {
|
|
||||||
1
|
|
||||||
if (2 > 3) {
|
|
||||||
continue @l
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
---------------------
|
|
||||||
L0:
|
|
||||||
1 <START>
|
|
||||||
v(a : Int)
|
|
||||||
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 })
|
|
||||||
jmp?(L2) NEXT:[mark({ 2 }), mark({ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } })]
|
|
||||||
3 mark({ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } })
|
|
||||||
mark(@l for (i in 1..a) { 1 if (2 > 3) { continue @l } })
|
|
||||||
4 r(1) -> <v1>
|
4 r(1) -> <v1>
|
||||||
r(a) -> <v2>
|
r(a) -> <v2>
|
||||||
mark(1..a)
|
mark(1..a)
|
||||||
@@ -626,39 +551,40 @@ L7 [condition entry point]:
|
|||||||
jmp?(L4) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>] PREV:[v(i), jmp(L7), jmp(L3)]
|
jmp?(L4) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>] PREV:[v(i), jmp(L7), jmp(L3)]
|
||||||
magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
|
magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
|
||||||
w(i|<v4>)
|
w(i|<v4>)
|
||||||
mark(for (i in 1..a) { 1 if (2 > 3) { continue @l } })
|
mark(for (i in 1..a) { 1 if (2 > 3) { continue@l } })
|
||||||
L5 [body entry point]:
|
L5 [body entry point]:
|
||||||
5 mark({ 1 if (2 > 3) { continue @l } })
|
5 mark({ 1 if (2 > 3) { continue@l } })
|
||||||
r(1) -> <v5>
|
r(1) -> <v5>
|
||||||
mark(if (2 > 3) { continue @l })
|
mark(if (2 > 3) { continue@l })
|
||||||
r(2) -> <v6>
|
r(2) -> <v6>
|
||||||
r(3) -> <v7>
|
r(3) -> <v7>
|
||||||
mark(2 > 3)
|
mark(2 > 3)
|
||||||
call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
|
call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
|
||||||
jf(L8|<v8>) NEXT:[read (Unit), mark({ continue @l })]
|
jf(L8|<v8>) NEXT:[read (Unit), mark({ continue@l })]
|
||||||
6 mark({ continue @l })
|
6 mark({ continue@l })
|
||||||
jmp(L7) NEXT:[jmp?(L4)]
|
jmp(L7) NEXT:[jmp?(L4)]
|
||||||
- 5 jmp(L9) NEXT:[merge(if (2 > 3) { continue @l }|!<v9>) -> <v10>] PREV:[]
|
- 5 jmp(L9) NEXT:[merge(if (2 > 3) { continue@l }|!<v9>) -> <v10>] PREV:[]
|
||||||
L8 [else branch]:
|
L8 [else branch]:
|
||||||
read (Unit) PREV:[jf(L8|<v8>)]
|
read (Unit) PREV:[jf(L8|<v8>)]
|
||||||
L9 ['if' expression result]:
|
L9 ['if' expression result]:
|
||||||
merge(if (2 > 3) { continue @l }|!<v9>) -> <v10>
|
merge(if (2 > 3) { continue@l }|!<v9>) -> <v10>
|
||||||
4 jmp(L3) NEXT:[jmp?(L4)]
|
4 jmp(L3) NEXT:[jmp?(L4)]
|
||||||
L4 [loop exit point]:
|
L4 [loop exit point]:
|
||||||
L6 [body exit point]:
|
L6 [body exit point]:
|
||||||
read (Unit) PREV:[jmp?(L4)]
|
read (Unit) PREV:[jmp?(L4)]
|
||||||
|
3 r(5) -> <v12>
|
||||||
2 jmp(L10) NEXT:[mark({ 2 })]
|
2 jmp(L10) NEXT:[mark({ 2 })]
|
||||||
L2 [onExceptionToFinallyBlock]:
|
L2 [onExceptionToFinallyBlock]:
|
||||||
L11 [start finally]:
|
L11 [start finally]:
|
||||||
3 mark({ 2 }) PREV:[jmp?(L2)]
|
3 mark({ 2 }) PREV:[jmp?(L2)]
|
||||||
r(2) -> <v12>
|
r(2) -> <v13>
|
||||||
L12 [finish finally]:
|
L12 [finish finally]:
|
||||||
2 jmp(error) NEXT:[<ERROR>]
|
2 jmp(error) NEXT:[<ERROR>]
|
||||||
L10 [skipFinallyToErrorBlock]:
|
L10 [skipFinallyToErrorBlock]:
|
||||||
L13 [copy of L2, onExceptionToFinallyBlock]:
|
L13 [copy of L2, onExceptionToFinallyBlock]:
|
||||||
3 mark({ 2 }) PREV:[jmp(L10)]
|
3 mark({ 2 }) PREV:[jmp(L10)]
|
||||||
r(2) -> <v12>
|
r(2) -> <v13>
|
||||||
2 merge(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 }|!<v11>) -> <v13>
|
2 merge(try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 } finally { 2 }|<v12>) -> <v14>
|
||||||
L1:
|
L1:
|
||||||
1 <END> NEXT:[<SINK>]
|
1 <END> NEXT:[<SINK>]
|
||||||
error:
|
error:
|
||||||
@@ -666,6 +592,80 @@ error:
|
|||||||
sink:
|
sink:
|
||||||
<SINK> PREV:[<ERROR>, <END>]
|
<SINK> PREV:[<ERROR>, <END>]
|
||||||
=====================
|
=====================
|
||||||
|
== t10 ==
|
||||||
|
fun t10(a : Int) {
|
||||||
|
try {
|
||||||
|
l@ for (i in 1..a) {
|
||||||
|
1
|
||||||
|
if (2 > 3) {
|
||||||
|
continue@l
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
---------------------
|
||||||
|
L0:
|
||||||
|
1 <START>
|
||||||
|
v(a : Int)
|
||||||
|
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 })
|
||||||
|
jmp?(L2) NEXT:[mark({ 2 }), mark({ l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } })]
|
||||||
|
3 mark({ l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } })
|
||||||
|
mark(l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } })
|
||||||
|
4 r(1) -> <v1>
|
||||||
|
r(a) -> <v2>
|
||||||
|
mark(1..a)
|
||||||
|
call(1..a, rangeTo|<v1>, <v2>) -> <v3>
|
||||||
|
v(i)
|
||||||
|
L3 [loop entry point]:
|
||||||
|
L7 [condition entry point]:
|
||||||
|
jmp?(L4) NEXT:[read (Unit), magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>] PREV:[v(i), jmp(L7), jmp(L3)]
|
||||||
|
magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
|
||||||
|
w(i|<v4>)
|
||||||
|
mark(for (i in 1..a) { 1 if (2 > 3) { continue@l } })
|
||||||
|
L5 [body entry point]:
|
||||||
|
5 mark({ 1 if (2 > 3) { continue@l } })
|
||||||
|
r(1) -> <v5>
|
||||||
|
mark(if (2 > 3) { continue@l })
|
||||||
|
r(2) -> <v6>
|
||||||
|
r(3) -> <v7>
|
||||||
|
mark(2 > 3)
|
||||||
|
call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
|
||||||
|
jf(L8|<v8>) NEXT:[read (Unit), mark({ continue@l })]
|
||||||
|
6 mark({ continue@l })
|
||||||
|
jmp(L7) NEXT:[jmp?(L4)]
|
||||||
|
- 5 jmp(L9) NEXT:[merge(if (2 > 3) { continue@l }|!<v9>) -> <v10>] PREV:[]
|
||||||
|
L8 [else branch]:
|
||||||
|
read (Unit) PREV:[jf(L8|<v8>)]
|
||||||
|
L9 ['if' expression result]:
|
||||||
|
merge(if (2 > 3) { continue@l }|!<v9>) -> <v10>
|
||||||
|
4 jmp(L3) NEXT:[jmp?(L4)]
|
||||||
|
L4 [loop exit point]:
|
||||||
|
L6 [body exit point]:
|
||||||
|
read (Unit) PREV:[jmp?(L4)]
|
||||||
|
2 jmp(L10) NEXT:[mark({ 2 })]
|
||||||
|
L2 [onExceptionToFinallyBlock]:
|
||||||
|
L11 [start finally]:
|
||||||
|
3 mark({ 2 }) PREV:[jmp?(L2)]
|
||||||
|
r(2) -> <v12>
|
||||||
|
L12 [finish finally]:
|
||||||
|
2 jmp(error) NEXT:[<ERROR>]
|
||||||
|
L10 [skipFinallyToErrorBlock]:
|
||||||
|
L13 [copy of L2, onExceptionToFinallyBlock]:
|
||||||
|
3 mark({ 2 }) PREV:[jmp(L10)]
|
||||||
|
r(2) -> <v12>
|
||||||
|
2 merge(try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } } finally { 2 }|!<v11>) -> <v13>
|
||||||
|
L1:
|
||||||
|
1 <END> NEXT:[<SINK>]
|
||||||
|
error:
|
||||||
|
<ERROR> PREV:[jmp(error)]
|
||||||
|
sink:
|
||||||
|
<SINK> PREV:[<ERROR>, <END>]
|
||||||
|
=====================
|
||||||
== t11 ==
|
== t11 ==
|
||||||
fun t11() {
|
fun t11() {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ fun t2() {
|
|||||||
fun t3() {
|
fun t3() {
|
||||||
try {
|
try {
|
||||||
1
|
1
|
||||||
@l{ () ->
|
l@{ () ->
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
return@l
|
return@l
|
||||||
}
|
}
|
||||||
@@ -31,7 +31,7 @@ fun t3() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun t4() {
|
fun t4() {
|
||||||
@l{ () ->
|
l@{ () ->
|
||||||
try {
|
try {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
@@ -44,11 +44,11 @@ fun t4() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun t5() {
|
fun t5() {
|
||||||
@l while(true) {
|
l@ while(true) {
|
||||||
try {
|
try {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
break @l
|
break@l
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
2
|
2
|
||||||
@@ -58,10 +58,10 @@ fun t5() {
|
|||||||
|
|
||||||
fun t6() {
|
fun t6() {
|
||||||
try {
|
try {
|
||||||
@l while(true) {
|
l@ while(true) {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
break @l
|
break@l
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
5
|
5
|
||||||
@@ -72,10 +72,10 @@ fun t6() {
|
|||||||
|
|
||||||
fun t7() {
|
fun t7() {
|
||||||
try {
|
try {
|
||||||
@l while(true) {
|
l@ while(true) {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
break @l
|
break@l
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
@@ -84,11 +84,11 @@ fun t7() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun t8(a : Int) {
|
fun t8(a : Int) {
|
||||||
@l for (i in 1..a) {
|
l@ for (i in 1..a) {
|
||||||
try {
|
try {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
continue @l
|
continue@l
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
2
|
2
|
||||||
@@ -98,10 +98,10 @@ fun t8(a : Int) {
|
|||||||
|
|
||||||
fun t9(a : Int) {
|
fun t9(a : Int) {
|
||||||
try {
|
try {
|
||||||
@l for (i in 1..a) {
|
l@ for (i in 1..a) {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
continue @l
|
continue@l
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
5
|
5
|
||||||
@@ -112,10 +112,10 @@ fun t9(a : Int) {
|
|||||||
|
|
||||||
fun t10(a : Int) {
|
fun t10(a : Int) {
|
||||||
try {
|
try {
|
||||||
@l for (i in 1..a) {
|
l@ for (i in 1..a) {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
continue @l
|
continue@l
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ try { 1 if (2 > 3) { return } } finally { 2 } <v7>: *
|
|||||||
fun t3() {
|
fun t3() {
|
||||||
try {
|
try {
|
||||||
1
|
1
|
||||||
@l{ () ->
|
l@{ () ->
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
return@l
|
return@l
|
||||||
}
|
}
|
||||||
@@ -55,12 +55,12 @@ 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>
|
{ () -> if (2 > 3) { return@l } } <v1>: * NEW: r({ () -> if (2 > 3) { return@l } }) -> <v1>
|
||||||
@l{ () -> if (2 > 3) { return@l } } <v1>: * COPY
|
l@{ () -> if (2 > 3) { return@l } } <v1>: * COPY
|
||||||
{ 1 @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>: * NEW: r(2) -> <v2>
|
||||||
{ 2 } <v2>: * COPY
|
{ 2 } <v2>: * COPY
|
||||||
try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } <v3>: * NEW: merge(try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 }|<v1>) -> <v3>
|
try { 1 l@{ () -> if (2 > 3) { return@l } } } finally { 2 } <v3>: * NEW: merge(try { 1 l@{ () -> if (2 > 3) { return@l } } } finally { 2 }|<v1>) -> <v3>
|
||||||
{ try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } } <v3>: * COPY
|
{ try { 1 l@{ () -> if (2 > 3) { return@l } } } finally { 2 } } <v3>: * COPY
|
||||||
=====================
|
=====================
|
||||||
== anonymous_0 ==
|
== anonymous_0 ==
|
||||||
{ () ->
|
{ () ->
|
||||||
@@ -79,7 +79,7 @@ if (2 > 3) { return@l } <v4>: * COPY
|
|||||||
=====================
|
=====================
|
||||||
== t4 ==
|
== t4 ==
|
||||||
fun t4() {
|
fun t4() {
|
||||||
@l{ () ->
|
l@{ () ->
|
||||||
try {
|
try {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
@@ -92,8 +92,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>
|
{ () -> 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 ==
|
== anonymous_1 ==
|
||||||
{ () ->
|
{ () ->
|
||||||
@@ -122,11 +122,11 @@ try { 1 if (2 > 3) { return@l } } finally { 2 } <v7>: * C
|
|||||||
=====================
|
=====================
|
||||||
== t5 ==
|
== t5 ==
|
||||||
fun t5() {
|
fun t5() {
|
||||||
@l while(true) {
|
l@ while(true) {
|
||||||
try {
|
try {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
break @l
|
break@l
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
2
|
2
|
||||||
@@ -134,31 +134,31 @@ fun t5() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
||||||
true <v0>: Boolean NEW: r(true) -> <v0>
|
true <v0>: Boolean NEW: r(true) -> <v0>
|
||||||
1 <v2>: * NEW: r(1) -> <v2>
|
1 <v2>: * NEW: r(1) -> <v2>
|
||||||
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
|
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
|
||||||
3 <v4>: Int NEW: r(3) -> <v4>
|
3 <v4>: Int NEW: r(3) -> <v4>
|
||||||
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
||||||
break @l !<v7>: *
|
break@l !<v7>: *
|
||||||
{ break @l } !<v7>: * COPY
|
{ break@l } !<v7>: * COPY
|
||||||
if (2 > 3) { break @l } <v8>: * NEW: merge(if (2 > 3) { break @l }|!<v7>) -> <v8>
|
if (2 > 3) { break@l } <v8>: * NEW: merge(if (2 > 3) { break@l }|!<v7>) -> <v8>
|
||||||
{ 1 if (2 > 3) { break @l } } <v8>: * COPY
|
{ 1 if (2 > 3) { break@l } } <v8>: * COPY
|
||||||
2 <v6>: * NEW: r(2) -> <v6>
|
2 <v6>: * NEW: r(2) -> <v6>
|
||||||
{ 2 } <v6>: * COPY
|
{ 2 } <v6>: * COPY
|
||||||
try { 1 if (2 > 3) { break @l } } finally { 2 } <v9>: * NEW: merge(try { 1 if (2 > 3) { break @l } } finally { 2 }|<v8>) -> <v9>
|
try { 1 if (2 > 3) { break@l } } finally { 2 } <v9>: * NEW: merge(try { 1 if (2 > 3) { break@l } } finally { 2 }|<v8>) -> <v9>
|
||||||
{ try { 1 if (2 > 3) { break @l } } finally { 2 } } <v9>: * COPY
|
{ try { 1 if (2 > 3) { break@l } } finally { 2 } } <v9>: * COPY
|
||||||
while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } } !<v10>: *
|
while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } } !<v10>: *
|
||||||
@l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } } !<v10>: * COPY
|
l@ while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } } !<v10>: * COPY
|
||||||
{ @l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } } } !<v10>: * COPY
|
{ l@ while(true) { try { 1 if (2 > 3) { break@l } } finally { 2 } } } !<v10>: * COPY
|
||||||
=====================
|
=====================
|
||||||
== t6 ==
|
== t6 ==
|
||||||
fun t6() {
|
fun t6() {
|
||||||
try {
|
try {
|
||||||
@l while(true) {
|
l@ while(true) {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
break @l
|
break@l
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
5
|
5
|
||||||
@@ -167,32 +167,32 @@ fun t6() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
||||||
true <v0>: Boolean NEW: r(true) -> <v0>
|
true <v0>: Boolean NEW: r(true) -> <v0>
|
||||||
1 <v2>: * NEW: r(1) -> <v2>
|
1 <v2>: * NEW: r(1) -> <v2>
|
||||||
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
|
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
|
||||||
3 <v4>: Int NEW: r(3) -> <v4>
|
3 <v4>: Int NEW: r(3) -> <v4>
|
||||||
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
||||||
break @l !<v6>: *
|
break@l !<v6>: *
|
||||||
{ break @l } !<v6>: * COPY
|
{ break@l } !<v6>: * COPY
|
||||||
if (2 > 3) { break @l } <v7>: * NEW: merge(if (2 > 3) { break @l }|!<v6>) -> <v7>
|
if (2 > 3) { break@l } <v7>: * NEW: merge(if (2 > 3) { break@l }|!<v6>) -> <v7>
|
||||||
{ 1 if (2 > 3) { break @l } } <v7>: * COPY
|
{ 1 if (2 > 3) { break@l } } <v7>: * COPY
|
||||||
while(true) { 1 if (2 > 3) { break @l } } !<v8>: *
|
while(true) { 1 if (2 > 3) { break@l } } !<v8>: *
|
||||||
@l while(true) { 1 if (2 > 3) { break @l } } !<v8>: * COPY
|
l@ while(true) { 1 if (2 > 3) { break@l } } !<v8>: * COPY
|
||||||
5 <v9>: * NEW: r(5) -> <v9>
|
5 <v9>: * NEW: r(5) -> <v9>
|
||||||
{ @l while(true) { 1 if (2 > 3) { break @l } } 5 } <v9>: * COPY
|
{ l@ while(true) { 1 if (2 > 3) { break@l } } 5 } <v9>: * COPY
|
||||||
2 <v10>: * NEW: r(2) -> <v10>
|
2 <v10>: * NEW: r(2) -> <v10>
|
||||||
{ 2 } <v10>: * COPY
|
{ 2 } <v10>: * COPY
|
||||||
try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } <v11>: * NEW: merge(try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 }|<v9>) -> <v11>
|
try { l@ while(true) { 1 if (2 > 3) { break@l } } 5 } finally { 2 } <v11>: * NEW: merge(try { l@ while(true) { 1 if (2 > 3) { break@l } } 5 } finally { 2 }|<v9>) -> <v11>
|
||||||
{ try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } } <v11>: * COPY
|
{ try { l@ while(true) { 1 if (2 > 3) { break@l } } 5 } finally { 2 } } <v11>: * COPY
|
||||||
=====================
|
=====================
|
||||||
== t7 ==
|
== t7 ==
|
||||||
fun t7() {
|
fun t7() {
|
||||||
try {
|
try {
|
||||||
@l while(true) {
|
l@ while(true) {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
break @l
|
break@l
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
@@ -200,31 +200,31 @@ fun t7() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
<v1>: * NEW: magic[VALUE_CONSUMER](true|<v0>) -> <v1>
|
||||||
true <v0>: Boolean NEW: r(true) -> <v0>
|
true <v0>: Boolean NEW: r(true) -> <v0>
|
||||||
1 <v2>: * NEW: r(1) -> <v2>
|
1 <v2>: * NEW: r(1) -> <v2>
|
||||||
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
|
2 <v3>: {<: Comparable<Int>} NEW: r(2) -> <v3>
|
||||||
3 <v4>: Int NEW: r(3) -> <v4>
|
3 <v4>: Int NEW: r(3) -> <v4>
|
||||||
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
2 > 3 <v5>: Boolean NEW: call(2 > 3, compareTo|<v3>, <v4>) -> <v5>
|
||||||
break @l !<v6>: *
|
break@l !<v6>: *
|
||||||
{ break @l } !<v6>: * COPY
|
{ break@l } !<v6>: * COPY
|
||||||
if (2 > 3) { break @l } <v7>: * NEW: merge(if (2 > 3) { break @l }|!<v6>) -> <v7>
|
if (2 > 3) { break@l } <v7>: * NEW: merge(if (2 > 3) { break@l }|!<v6>) -> <v7>
|
||||||
{ 1 if (2 > 3) { break @l } } <v7>: * COPY
|
{ 1 if (2 > 3) { break@l } } <v7>: * COPY
|
||||||
while(true) { 1 if (2 > 3) { break @l } } !<v8>: *
|
while(true) { 1 if (2 > 3) { break@l } } !<v8>: *
|
||||||
@l while(true) { 1 if (2 > 3) { break @l } } !<v8>: * COPY
|
l@ while(true) { 1 if (2 > 3) { break@l } } !<v8>: * COPY
|
||||||
{ @l while(true) { 1 if (2 > 3) { break @l } } } !<v8>: * COPY
|
{ l@ while(true) { 1 if (2 > 3) { break@l } } } !<v8>: * COPY
|
||||||
2 <v9>: * NEW: r(2) -> <v9>
|
2 <v9>: * NEW: r(2) -> <v9>
|
||||||
{ 2 } <v9>: * COPY
|
{ 2 } <v9>: * COPY
|
||||||
try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 } <v10>: * NEW: merge(try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 }|!<v8>) -> <v10>
|
try { l@ while(true) { 1 if (2 > 3) { break@l } } } finally { 2 } <v10>: * NEW: merge(try { l@ while(true) { 1 if (2 > 3) { break@l } } } finally { 2 }|!<v8>) -> <v10>
|
||||||
{ try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 } } <v10>: * COPY
|
{ try { l@ while(true) { 1 if (2 > 3) { break@l } } } finally { 2 } } <v10>: * COPY
|
||||||
=====================
|
=====================
|
||||||
== t8 ==
|
== t8 ==
|
||||||
fun t8(a : Int) {
|
fun t8(a : Int) {
|
||||||
@l for (i in 1..a) {
|
l@ for (i in 1..a) {
|
||||||
try {
|
try {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
continue @l
|
continue@l
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
2
|
2
|
||||||
@@ -232,34 +232,34 @@ fun t8(a : Int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
|
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
|
||||||
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
|
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
|
||||||
1 <v1>: Int NEW: r(1) -> <v1>
|
1 <v1>: Int NEW: r(1) -> <v1>
|
||||||
a <v2>: Int NEW: r(a) -> <v2>
|
a <v2>: Int NEW: r(a) -> <v2>
|
||||||
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
|
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
|
||||||
1 <v5>: * NEW: r(1) -> <v5>
|
1 <v5>: * NEW: r(1) -> <v5>
|
||||||
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
|
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
|
||||||
3 <v7>: Int NEW: r(3) -> <v7>
|
3 <v7>: Int NEW: r(3) -> <v7>
|
||||||
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
|
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
|
||||||
continue @l !<v10>: *
|
continue@l !<v10>: *
|
||||||
{ continue @l } !<v10>: * COPY
|
{ continue@l } !<v10>: * COPY
|
||||||
if (2 > 3) { continue @l } <v11>: * NEW: merge(if (2 > 3) { continue @l }|!<v10>) -> <v11>
|
if (2 > 3) { continue@l } <v11>: * NEW: merge(if (2 > 3) { continue@l }|!<v10>) -> <v11>
|
||||||
{ 1 if (2 > 3) { continue @l } } <v11>: * COPY
|
{ 1 if (2 > 3) { continue@l } } <v11>: * COPY
|
||||||
2 <v9>: * NEW: r(2) -> <v9>
|
2 <v9>: * NEW: r(2) -> <v9>
|
||||||
{ 2 } <v9>: * COPY
|
{ 2 } <v9>: * COPY
|
||||||
try { 1 if (2 > 3) { continue @l } } finally { 2 } <v12>: * NEW: merge(try { 1 if (2 > 3) { continue @l } } finally { 2 }|<v11>) -> <v12>
|
try { 1 if (2 > 3) { continue@l } } finally { 2 } <v12>: * NEW: merge(try { 1 if (2 > 3) { continue@l } } finally { 2 }|<v11>) -> <v12>
|
||||||
{ try { 1 if (2 > 3) { continue @l } } finally { 2 } } <v12>: * COPY
|
{ try { 1 if (2 > 3) { continue@l } } finally { 2 } } <v12>: * COPY
|
||||||
for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } } !<v13>: *
|
for (i in 1..a) { try { 1 if (2 > 3) { continue@l } } finally { 2 } } !<v13>: *
|
||||||
@l for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } } !<v13>: * COPY
|
l@ for (i in 1..a) { try { 1 if (2 > 3) { continue@l } } finally { 2 } } !<v13>: * COPY
|
||||||
{ @l for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } } } !<v13>: * COPY
|
{ l@ for (i in 1..a) { try { 1 if (2 > 3) { continue@l } } finally { 2 } } } !<v13>: * COPY
|
||||||
=====================
|
=====================
|
||||||
== t9 ==
|
== t9 ==
|
||||||
fun t9(a : Int) {
|
fun t9(a : Int) {
|
||||||
try {
|
try {
|
||||||
@l for (i in 1..a) {
|
l@ for (i in 1..a) {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
continue @l
|
continue@l
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
5
|
5
|
||||||
@@ -268,35 +268,35 @@ fun t9(a : Int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
|
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
|
||||||
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
|
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
|
||||||
1 <v1>: Int NEW: r(1) -> <v1>
|
1 <v1>: Int NEW: r(1) -> <v1>
|
||||||
a <v2>: Int NEW: r(a) -> <v2>
|
a <v2>: Int NEW: r(a) -> <v2>
|
||||||
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
|
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
|
||||||
1 <v5>: * NEW: r(1) -> <v5>
|
1 <v5>: * NEW: r(1) -> <v5>
|
||||||
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
|
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
|
||||||
3 <v7>: Int NEW: r(3) -> <v7>
|
3 <v7>: Int NEW: r(3) -> <v7>
|
||||||
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
|
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
|
||||||
continue @l !<v9>: *
|
continue@l !<v9>: *
|
||||||
{ continue @l } !<v9>: * COPY
|
{ continue@l } !<v9>: * COPY
|
||||||
if (2 > 3) { continue @l } <v10>: * NEW: merge(if (2 > 3) { continue @l }|!<v9>) -> <v10>
|
if (2 > 3) { continue@l } <v10>: * NEW: merge(if (2 > 3) { continue@l }|!<v9>) -> <v10>
|
||||||
{ 1 if (2 > 3) { continue @l } } <v10>: * COPY
|
{ 1 if (2 > 3) { continue@l } } <v10>: * COPY
|
||||||
for (i in 1..a) { 1 if (2 > 3) { continue @l } } !<v11>: *
|
for (i in 1..a) { 1 if (2 > 3) { continue@l } } !<v11>: *
|
||||||
@l for (i in 1..a) { 1 if (2 > 3) { continue @l } } !<v11>: * COPY
|
l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } !<v11>: * COPY
|
||||||
5 <v12>: * NEW: r(5) -> <v12>
|
5 <v12>: * NEW: r(5) -> <v12>
|
||||||
{ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } <v12>: * COPY
|
{ l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 } <v12>: * COPY
|
||||||
2 <v13>: * NEW: r(2) -> <v13>
|
2 <v13>: * NEW: r(2) -> <v13>
|
||||||
{ 2 } <v13>: * COPY
|
{ 2 } <v13>: * COPY
|
||||||
try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } <v14>: * NEW: merge(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 }|<v12>) -> <v14>
|
try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 } finally { 2 } <v14>: * NEW: merge(try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 } finally { 2 }|<v12>) -> <v14>
|
||||||
{ try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } } <v14>: * COPY
|
{ try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } 5 } finally { 2 } } <v14>: * COPY
|
||||||
=====================
|
=====================
|
||||||
== t10 ==
|
== t10 ==
|
||||||
fun t10(a : Int) {
|
fun t10(a : Int) {
|
||||||
try {
|
try {
|
||||||
@l for (i in 1..a) {
|
l@ for (i in 1..a) {
|
||||||
1
|
1
|
||||||
if (2 > 3) {
|
if (2 > 3) {
|
||||||
continue @l
|
continue@l
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
@@ -304,26 +304,26 @@ fun t10(a : Int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
|
<v0>: Int NEW: magic[FAKE_INITIALIZER](a : Int) -> <v0>
|
||||||
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
|
<v4>: Int NEW: magic[LOOP_RANGE_ITERATION](1..a|<v3>) -> <v4>
|
||||||
1 <v1>: Int NEW: r(1) -> <v1>
|
1 <v1>: Int NEW: r(1) -> <v1>
|
||||||
a <v2>: Int NEW: r(a) -> <v2>
|
a <v2>: Int NEW: r(a) -> <v2>
|
||||||
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
|
1..a <v3>: {<: Iterable<Int>} NEW: call(1..a, rangeTo|<v1>, <v2>) -> <v3>
|
||||||
1 <v5>: * NEW: r(1) -> <v5>
|
1 <v5>: * NEW: r(1) -> <v5>
|
||||||
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
|
2 <v6>: {<: Comparable<Int>} NEW: r(2) -> <v6>
|
||||||
3 <v7>: Int NEW: r(3) -> <v7>
|
3 <v7>: Int NEW: r(3) -> <v7>
|
||||||
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
|
2 > 3 <v8>: Boolean NEW: call(2 > 3, compareTo|<v6>, <v7>) -> <v8>
|
||||||
continue @l !<v9>: *
|
continue@l !<v9>: *
|
||||||
{ continue @l } !<v9>: * COPY
|
{ continue@l } !<v9>: * COPY
|
||||||
if (2 > 3) { continue @l } <v10>: * NEW: merge(if (2 > 3) { continue @l }|!<v9>) -> <v10>
|
if (2 > 3) { continue@l } <v10>: * NEW: merge(if (2 > 3) { continue@l }|!<v9>) -> <v10>
|
||||||
{ 1 if (2 > 3) { continue @l } } <v10>: * COPY
|
{ 1 if (2 > 3) { continue@l } } <v10>: * COPY
|
||||||
for (i in 1..a) { 1 if (2 > 3) { continue @l } } !<v11>: *
|
for (i in 1..a) { 1 if (2 > 3) { continue@l } } !<v11>: *
|
||||||
@l for (i in 1..a) { 1 if (2 > 3) { continue @l } } !<v11>: * COPY
|
l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } !<v11>: * COPY
|
||||||
{ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } !<v11>: * COPY
|
{ l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } } !<v11>: * COPY
|
||||||
2 <v12>: * NEW: r(2) -> <v12>
|
2 <v12>: * NEW: r(2) -> <v12>
|
||||||
{ 2 } <v12>: * COPY
|
{ 2 } <v12>: * COPY
|
||||||
try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 } <v13>: * NEW: merge(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 }|!<v11>) -> <v13>
|
try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } } finally { 2 } <v13>: * NEW: merge(try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } } finally { 2 }|!<v11>) -> <v13>
|
||||||
{ try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 } } <v13>: * COPY
|
{ try { l@ for (i in 1..a) { 1 if (2 > 3) { continue@l } } } finally { 2 } } <v13>: * COPY
|
||||||
=====================
|
=====================
|
||||||
== t11 ==
|
== t11 ==
|
||||||
fun t11() {
|
fun t11() {
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
== foo ==
|
== foo ==
|
||||||
fun foo(): Int {
|
fun foo(): Int {
|
||||||
val t = @x (1 + 2)
|
val t = x@ (1 + 2)
|
||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
L0:
|
L0:
|
||||||
1 <START>
|
1 <START>
|
||||||
2 mark({ val t = @x (1 + 2) return t })
|
2 mark({ val t = x@ (1 + 2) return t })
|
||||||
v(val t = @x (1 + 2))
|
v(val t = x@ (1 + 2))
|
||||||
mark(@x (1 + 2))
|
mark(x@ (1 + 2))
|
||||||
mark((1 + 2))
|
mark((1 + 2))
|
||||||
r(1) -> <v0>
|
r(1) -> <v0>
|
||||||
r(2) -> <v1>
|
r(2) -> <v1>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
fun foo(): Int {
|
fun foo(): Int {
|
||||||
val t = @x (1 + 2)
|
val t = x@ (1 + 2)
|
||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
== foo ==
|
== foo ==
|
||||||
fun foo(): Int {
|
fun foo(): Int {
|
||||||
val t = @x (1 + 2)
|
val t = x@ (1 + 2)
|
||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
@@ -8,8 +8,8 @@ fun foo(): Int {
|
|||||||
2 <v1>: Int NEW: r(2) -> <v1>
|
2 <v1>: Int NEW: r(2) -> <v1>
|
||||||
1 + 2 <v2>: Int NEW: call(1 + 2, plus|<v0>, <v1>) -> <v2>
|
1 + 2 <v2>: Int NEW: call(1 + 2, plus|<v0>, <v1>) -> <v2>
|
||||||
(1 + 2) <v2>: Int COPY
|
(1 + 2) <v2>: Int COPY
|
||||||
@x (1 + 2) <v2>: Int COPY
|
x@ (1 + 2) <v2>: Int COPY
|
||||||
t <v3>: Int NEW: r(t) -> <v3>
|
t <v3>: Int NEW: r(t) -> <v3>
|
||||||
return t !<v4>: *
|
return t !<v4>: *
|
||||||
{ val t = @x (1 + 2) return t } !<v4>: * COPY
|
{ val t = x@ (1 + 2) return t } !<v4>: * COPY
|
||||||
=====================
|
=====================
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
fun box(): String {
|
fun box(): String {
|
||||||
var s1 = (@l1 "s")
|
var s1 = (l1@ "s")
|
||||||
val s2 = (@l2 if (@l3 true) s1 else null)
|
val s2 = (l2@ if (l3@ true) s1 else null)
|
||||||
return if (s2 == "s") "OK" else "fail"
|
return if (s2 == "s") "OK" else "fail"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
fun box(): String {
|
fun box(): String {
|
||||||
val a = 1
|
val a = 1
|
||||||
val explicitlyReturned = run1 @f{
|
val explicitlyReturned = run1 f@{
|
||||||
if (a > 0)
|
if (a > 0)
|
||||||
return@f "OK"
|
return@f "OK"
|
||||||
else "Fail 1"
|
else "Fail 1"
|
||||||
}
|
}
|
||||||
if (explicitlyReturned != "OK") return explicitlyReturned
|
if (explicitlyReturned != "OK") return explicitlyReturned
|
||||||
|
|
||||||
val implicitlyReturned = run1 @f{
|
val implicitlyReturned = run1 f@{
|
||||||
if (a < 0)
|
if (a < 0)
|
||||||
return@f "Fail 2"
|
return@f "Fail 2"
|
||||||
else "OK"
|
else "OK"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
fun for_int_range(): Int {
|
fun for_int_range(): Int {
|
||||||
var c = 0
|
var c = 0
|
||||||
@loop for (i in 1..10) {
|
loop@ for (i in 1..10) {
|
||||||
if (c >= 5) continue @loop
|
if (c >= 5) continue@loop
|
||||||
c++
|
c++
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
@@ -11,8 +11,8 @@ fun for_byte_range(): Int {
|
|||||||
var c = 0
|
var c = 0
|
||||||
val from: Byte = 1
|
val from: Byte = 1
|
||||||
val to: Byte = 10
|
val to: Byte = 10
|
||||||
@loop for (i in from..to) {
|
loop@ for (i in from..to) {
|
||||||
if (c >= 5) continue @loop
|
if (c >= 5) continue@loop
|
||||||
c++
|
c++
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
@@ -22,8 +22,8 @@ fun for_long_range(): Int {
|
|||||||
var c = 0
|
var c = 0
|
||||||
val from: Long = 1
|
val from: Long = 1
|
||||||
val to: Long = 10
|
val to: Long = 10
|
||||||
@loop for (i in from..to) {
|
loop@ for (i in from..to) {
|
||||||
if (c >= 5) continue @loop
|
if (c >= 5) continue@loop
|
||||||
c++
|
c++
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
@@ -34,8 +34,8 @@ fun for_int_list(): Int {
|
|||||||
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
|
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
|
||||||
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
|
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
|
||||||
var c = 0
|
var c = 0
|
||||||
@loop for (i in a) {
|
loop@ for (i in a) {
|
||||||
if (c >= 5) continue @loop
|
if (c >= 5) continue@loop
|
||||||
c++
|
c++
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
@@ -46,8 +46,8 @@ fun for_byte_list(): Int {
|
|||||||
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
|
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
|
||||||
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
|
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
|
||||||
var c = 0
|
var c = 0
|
||||||
@loop for (i in a) {
|
loop@ for (i in a) {
|
||||||
if (c >= 5) continue @loop
|
if (c >= 5) continue@loop
|
||||||
c++
|
c++
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
@@ -58,8 +58,8 @@ fun for_long_list(): Int {
|
|||||||
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
|
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
|
||||||
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
|
a.add(0); a.add(0); a.add(0); a.add(0); a.add(0)
|
||||||
var c = 0
|
var c = 0
|
||||||
@loop for (i in a) {
|
loop@ for (i in a) {
|
||||||
if (c >= 5) continue @loop
|
if (c >= 5) continue@loop
|
||||||
c++
|
c++
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
@@ -70,8 +70,8 @@ fun for_double_list(): Int {
|
|||||||
a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0)
|
a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0)
|
||||||
a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0)
|
a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0)
|
||||||
var c = 0
|
var c = 0
|
||||||
@loop for (i in a) {
|
loop@ for (i in a) {
|
||||||
if (c >= 5) continue @loop
|
if (c >= 5) continue@loop
|
||||||
c++
|
c++
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
@@ -82,8 +82,8 @@ fun for_object_list(): Int {
|
|||||||
a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0)
|
a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0)
|
||||||
a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0)
|
a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0)
|
||||||
var c = 0
|
var c = 0
|
||||||
@loop for (i in a) {
|
loop@ for (i in a) {
|
||||||
if (c >= 5) continue @loop
|
if (c >= 5) continue@loop
|
||||||
c++
|
c++
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
@@ -92,8 +92,8 @@ fun for_object_list(): Int {
|
|||||||
fun for_str_array(): Int {
|
fun for_str_array(): Int {
|
||||||
val a = arrayOfNulls<String>(10)
|
val a = arrayOfNulls<String>(10)
|
||||||
var c = 0
|
var c = 0
|
||||||
@loop for (i in a) {
|
loop@ for (i in a) {
|
||||||
if (c >= 5) continue @loop
|
if (c >= 5) continue@loop
|
||||||
c++
|
c++
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
@@ -102,8 +102,8 @@ fun for_str_array(): Int {
|
|||||||
fun for_intarray(): Int {
|
fun for_intarray(): Int {
|
||||||
val a = IntArray(10)
|
val a = IntArray(10)
|
||||||
var c = 0
|
var c = 0
|
||||||
@loop for (i in a) {
|
loop@ for (i in a) {
|
||||||
if (c >= 5) continue @loop
|
if (c >= 5) continue@loop
|
||||||
c++
|
c++
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ fun box() : String {
|
|||||||
if (1.a() != 2) return "test 8 failed"
|
if (1.a() != 2) return "test 8 failed"
|
||||||
val b = ( fun Int.() = this + 1)
|
val b = ( fun Int.() = this + 1)
|
||||||
if (1.b() != 2) return "test 9 failed"
|
if (1.b() != 2) return "test 9 failed"
|
||||||
val c = (@c fun Int.() = this + 1)
|
val c = (c@ fun Int.() = this + 1)
|
||||||
if (1.c() != 2) return "test 10 failed"
|
if (1.c() != 2) return "test 10 failed"
|
||||||
|
|
||||||
val d = @d fun (): Int { return@d 4}
|
val d = d@ fun (): Int { return@d 4}
|
||||||
if (d() != 4) return "test 11 failed"
|
if (d() != 4) return "test 11 failed"
|
||||||
|
|
||||||
return "OK"
|
return "OK"
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ fun box() : String {
|
|||||||
if (1.a() != 2) return "test 8 failed"
|
if (1.a() != 2) return "test 8 failed"
|
||||||
val b = ( fun Int.name() = this + 1)
|
val b = ( fun Int.name() = this + 1)
|
||||||
if (1.b() != 2) return "test 9 failed"
|
if (1.b() != 2) return "test 9 failed"
|
||||||
val c = (@c fun Int.name() = this + 1)
|
val c = (c@ fun Int.name() = this + 1)
|
||||||
if (1.c() != 2) return "test 10 failed"
|
if (1.c() != 2) return "test 10 failed"
|
||||||
|
|
||||||
val d = fun name(): Int { return@name 4}
|
val d = fun name(): Int { return@name 4}
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ fun simple() = fun (): Boolean { return true }
|
|||||||
fun simpleNamed() = fun name(): Boolean { return true }
|
fun simpleNamed() = fun name(): Boolean { return true }
|
||||||
fun simpleNamed2() = fun name(): Boolean { return@name true }
|
fun simpleNamed2() = fun name(): Boolean { return@name true }
|
||||||
|
|
||||||
fun withLabel() = @l fun (): Boolean { return@l true }
|
fun withLabel() = l@ fun (): Boolean { return@l true }
|
||||||
fun withLabelNamed() = @l fun name(): Boolean { return@l true }
|
fun withLabelNamed() = l@ fun name(): Boolean { return@l true }
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
if (!simple()()) return "Test simple failed"
|
if (!simple()()) return "Test simple failed"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
fun box(): String {
|
fun box(): String {
|
||||||
var x = 1
|
var x = 1
|
||||||
(@foo x)++
|
(foo@ x)++
|
||||||
++(@foo x)
|
++(foo@ x)
|
||||||
(x: Int)++
|
(x: Int)++
|
||||||
++(x: Int)
|
++(x: Int)
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ data class A(val a: Int, val b: Int)
|
|||||||
|
|
||||||
fun box() : String
|
fun box() : String
|
||||||
{
|
{
|
||||||
@a val x = 1
|
a@ val x = 1
|
||||||
@b fun a() = 2
|
b@ fun a() = 2
|
||||||
@c val (z, z2) = A(1, 2)
|
c@ val (z, z2) = A(1, 2)
|
||||||
|
|
||||||
if (x != 1) return "fail 1"
|
if (x != 1) return "fail 1"
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import test.*
|
import test.*
|
||||||
|
|
||||||
fun test1(b: Boolean): String {
|
fun test1(b: Boolean): String {
|
||||||
val localResult = doCall ((@local {
|
val localResult = doCall ((local@ {
|
||||||
if (b) {
|
if (b) {
|
||||||
return@local "local"
|
return@local "local"
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import test.*
|
import test.*
|
||||||
|
|
||||||
fun test1(b: Boolean): String {
|
fun test1(b: Boolean): String {
|
||||||
val localResult = doCall @local {
|
val localResult = doCall local@ {
|
||||||
if (b) {
|
if (b) {
|
||||||
return@local "local"
|
return@local "local"
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import test.*
|
import test.*
|
||||||
|
|
||||||
fun test1(b: Boolean): String {
|
fun test1(b: Boolean): String {
|
||||||
val localResult = doCall @local {
|
val localResult = doCall local@ {
|
||||||
if (b) {
|
if (b) {
|
||||||
return@local "local"
|
return@local "local"
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ class Global(val value: String)
|
|||||||
|
|
||||||
fun test1(intKind: Kind, extKind: Kind): Global {
|
fun test1(intKind: Kind, extKind: Kind): Global {
|
||||||
|
|
||||||
var externalResult = doCall @ext {
|
var externalResult = doCall ext@ {
|
||||||
|
|
||||||
val internalResult = doCall @int {
|
val internalResult = doCall int@ {
|
||||||
if (intKind == Kind.GLOBAL) {
|
if (intKind == Kind.GLOBAL) {
|
||||||
return@test1 Global("internal -> global")
|
return@test1 Global("internal -> global")
|
||||||
} else if (intKind == EXTERNAL) {
|
} else if (intKind == EXTERNAL) {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import test.*
|
import test.*
|
||||||
|
|
||||||
fun test1(b: Boolean): String {
|
fun test1(b: Boolean): String {
|
||||||
val localResult = noInlineCall @local {
|
val localResult = noInlineCall local@ {
|
||||||
if (b) {
|
if (b) {
|
||||||
return@local 1
|
return@local 1
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -4,12 +4,12 @@ fun test(): String = fun (): String {
|
|||||||
return "fail"
|
return "fail"
|
||||||
} ()
|
} ()
|
||||||
|
|
||||||
fun test2(): String = (@l fun (): String {
|
fun test2(): String = (l@ fun (): String {
|
||||||
foo { return@l "OK" }
|
foo { return@l "OK" }
|
||||||
return "fail"
|
return "fail"
|
||||||
}) ()
|
}) ()
|
||||||
|
|
||||||
fun test3(): String = (@l fun bar(): String {
|
fun test3(): String = (l@ fun bar(): String {
|
||||||
foo { return@bar "OK" }
|
foo { return@bar "OK" }
|
||||||
return "fail"
|
return "fail"
|
||||||
}) ()
|
}) ()
|
||||||
|
|||||||
+2
-2
@@ -22,10 +22,10 @@ class Global(val value: String)
|
|||||||
fun test1(intKind: Kind, extKind: Kind, holder: Holder): Global {
|
fun test1(intKind: Kind, extKind: Kind, holder: Holder): Global {
|
||||||
holder.value = ""
|
holder.value = ""
|
||||||
try {
|
try {
|
||||||
var externalResult = doCall @ext {
|
var externalResult = doCall ext@ {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val internalResult = doCall @int {
|
val internalResult = doCall int@ {
|
||||||
try {
|
try {
|
||||||
if (intKind == Kind.GLOBAL) {
|
if (intKind == Kind.GLOBAL) {
|
||||||
return@test1 Global("internal -> global")
|
return@test1 Global("internal -> global")
|
||||||
|
|||||||
+2
-2
@@ -22,10 +22,10 @@ class Global(val value: String)
|
|||||||
fun test1(intKind: Kind, extKind: Kind, holder: Holder): Global {
|
fun test1(intKind: Kind, extKind: Kind, holder: Holder): Global {
|
||||||
holder.value = ""
|
holder.value = ""
|
||||||
try {
|
try {
|
||||||
var externalResult = doCall (@ext {
|
var externalResult = doCall (ext@ {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val internalResult = doCall (@int {
|
val internalResult = doCall (int@ {
|
||||||
try {
|
try {
|
||||||
if (intKind == Kind.GLOBAL) {
|
if (intKind == Kind.GLOBAL) {
|
||||||
return@test1 Global("internal -> global")
|
return@test1 Global("internal -> global")
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ fun test1(h: Holder): String {
|
|||||||
|
|
||||||
|
|
||||||
fun test2(h: Holder): String {
|
fun test2(h: Holder): String {
|
||||||
val localResult = doCall (@lambda {
|
val localResult = doCall (lambda@ {
|
||||||
h.value += "OK_LOCAL"
|
h.value += "OK_LOCAL"
|
||||||
return@lambda "OK_LOCAL"
|
return@lambda "OK_LOCAL"
|
||||||
}, {
|
}, {
|
||||||
|
|||||||
+2
-2
@@ -21,7 +21,7 @@ fun test1(h: Holder): String {
|
|||||||
|
|
||||||
fun test2(h: Holder): String {
|
fun test2(h: Holder): String {
|
||||||
val localResult = doCall (
|
val localResult = doCall (
|
||||||
@lambda {
|
lambda@ {
|
||||||
h.value += "OK_NONLOCAL"
|
h.value += "OK_NONLOCAL"
|
||||||
return@lambda "OK_NONLOCAL"
|
return@lambda "OK_NONLOCAL"
|
||||||
}, {
|
}, {
|
||||||
@@ -51,7 +51,7 @@ fun test4(h: Holder): String {
|
|||||||
h.value += "OK_NONLOCAL"
|
h.value += "OK_NONLOCAL"
|
||||||
return "OK_NONLOCAL"
|
return "OK_NONLOCAL"
|
||||||
},
|
},
|
||||||
@l2 {
|
l2@ {
|
||||||
h.value += ", OK_FINALLY"
|
h.value += ", OK_FINALLY"
|
||||||
return@l2 "OK_FINALLY"
|
return@l2 "OK_FINALLY"
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
fun findPairless(a : IntArray) : Int {
|
fun findPairless(a : IntArray) : Int {
|
||||||
@loop for (i in a.indices) {
|
loop@ for (i in a.indices) {
|
||||||
for (j in a.indices) {
|
for (j in a.indices) {
|
||||||
if (i != j && a[i] == a[j]) continue@loop
|
if (i != j && a[i] == a[j]) continue@loop
|
||||||
}
|
}
|
||||||
@@ -10,7 +10,7 @@ fun findPairless(a : IntArray) : Int {
|
|||||||
|
|
||||||
fun hasDuplicates(a : IntArray) : Boolean {
|
fun hasDuplicates(a : IntArray) : Boolean {
|
||||||
var duplicate = false
|
var duplicate = false
|
||||||
@loop for (i in a.indices) {
|
loop@ for (i in a.indices) {
|
||||||
for (j in a.indices) {
|
for (j in a.indices) {
|
||||||
if (i != j && a[i] == a[j]) {
|
if (i != j && a[i] == a[j]) {
|
||||||
duplicate = true
|
duplicate = true
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
var i = 10
|
var i = 10
|
||||||
++i
|
++i
|
||||||
++(@l i)
|
++(l@ i)
|
||||||
++(i: Int)
|
++(i: Int)
|
||||||
++(@l (i: Int))
|
++(l@ (i: Int))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4 IINC
|
// 4 IINC
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
fun main()
|
fun main()
|
||||||
{
|
{
|
||||||
@l if (2 != 1) "fail 3"
|
l@ if (2 != 1) "fail 3"
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0 GETSTATIC
|
// 0 GETSTATIC
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
class C {
|
class C {
|
||||||
|
|
||||||
fun f (<!UNUSED_PARAMETER!>a<!> : Boolean, <!UNUSED_PARAMETER!>b<!> : Boolean) {
|
fun f (<!UNUSED_PARAMETER!>a<!> : Boolean, <!UNUSED_PARAMETER!>b<!> : Boolean) {
|
||||||
@b while (true)
|
b@ while (true)
|
||||||
@a {
|
a@ {
|
||||||
<!NOT_A_LOOP_LABEL!>break@f<!>
|
<!NOT_A_LOOP_LABEL!>break@f<!>
|
||||||
break
|
break
|
||||||
<!UNREACHABLE_CODE!>break@b<!>
|
<!UNREACHABLE_CODE!>break@b<!>
|
||||||
@@ -11,8 +11,8 @@ class C {
|
|||||||
|
|
||||||
<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue<!>
|
<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue<!>
|
||||||
|
|
||||||
@b while (true)
|
b@ while (true)
|
||||||
@a {
|
a@ {
|
||||||
<!NOT_A_LOOP_LABEL!>continue@f<!>
|
<!NOT_A_LOOP_LABEL!>continue@f<!>
|
||||||
continue
|
continue
|
||||||
<!UNREACHABLE_CODE!>continue@b<!>
|
<!UNREACHABLE_CODE!>continue@b<!>
|
||||||
@@ -42,21 +42,21 @@ class C {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun containsBreakWithLabel(a: String?) {
|
fun containsBreakWithLabel(a: String?) {
|
||||||
@loop while(a == null) {
|
loop@ while(a == null) {
|
||||||
break@loop
|
break@loop
|
||||||
}
|
}
|
||||||
a?.compareTo("2")
|
a?.compareTo("2")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun containsIllegalBreak(a: String?) {
|
fun containsIllegalBreak(a: String?) {
|
||||||
@loop while(a == null) {
|
loop@ while(a == null) {
|
||||||
<!NOT_A_LOOP_LABEL!>break<!UNRESOLVED_REFERENCE!>@label<!><!>
|
<!NOT_A_LOOP_LABEL!>break<!UNRESOLVED_REFERENCE!>@label<!><!>
|
||||||
}
|
}
|
||||||
<!DEBUG_INFO_SMARTCAST!>a<!>.compareTo("2")
|
<!DEBUG_INFO_SMARTCAST!>a<!>.compareTo("2")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun containsBreakToOuterLoop(a: String?, b: String?) {
|
fun containsBreakToOuterLoop(a: String?, b: String?) {
|
||||||
@loop while(b == null) {
|
loop@ while(b == null) {
|
||||||
while(a == null) {
|
while(a == null) {
|
||||||
break@loop
|
break@loop
|
||||||
}
|
}
|
||||||
@@ -65,7 +65,7 @@ class C {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun containsBreakInsideLoopWithLabel(a: String?, array: Array<Int>) {
|
fun containsBreakInsideLoopWithLabel(a: String?, array: Array<Int>) {
|
||||||
@l while(a == null) {
|
l@ while(a == null) {
|
||||||
for (el in array) {
|
for (el in array) {
|
||||||
break@l
|
break@l
|
||||||
}
|
}
|
||||||
@@ -75,7 +75,7 @@ class C {
|
|||||||
|
|
||||||
fun unresolvedBreak(a: String?, array: Array<Int>) {
|
fun unresolvedBreak(a: String?, array: Array<Int>) {
|
||||||
while(a == null) {
|
while(a == null) {
|
||||||
@l for (el in array) {
|
l@ for (el in array) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if (true) break else <!NOT_A_LOOP_LABEL!>break<!UNRESOLVED_REFERENCE!>@l<!><!>
|
if (true) break else <!NOT_A_LOOP_LABEL!>break<!UNRESOLVED_REFERENCE!>@l<!><!>
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ fun breakContinueInWhenWithDoWhile(i: Int, j: Int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun labeledBreakContinue(i: Int) {
|
fun labeledBreakContinue(i: Int) {
|
||||||
@outer for (y in 0..10) {
|
outer@ for (y in 0..10) {
|
||||||
when (i) {
|
when (i) {
|
||||||
0 -> continue@outer
|
0 -> continue@outer
|
||||||
1 -> break@outer
|
1 -> break@outer
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ fun main1() {
|
|||||||
{1}();
|
{1}();
|
||||||
(fun (x : Int) = x)(1)
|
(fun (x : Int) = x)(1)
|
||||||
1.(fun Int.(x : Int) = x)(1);
|
1.(fun Int.(x : Int) = x)(1);
|
||||||
@l{1}()
|
l@{1}()
|
||||||
1.((fun Int.() = 1))()
|
1.((fun Int.() = 1))()
|
||||||
1.(f())()
|
1.(f())()
|
||||||
1.if(true){f()}else{f()}()
|
1.if(true){f()}else{f()}()
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ fun unitEmptyReturn() : Unit {return}
|
|||||||
fun unitIntReturn() : Unit {return <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>}
|
fun unitIntReturn() : Unit {return <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>}
|
||||||
fun unitUnitReturn() : Unit {return Unit}
|
fun unitUnitReturn() : Unit {return Unit}
|
||||||
fun test1() : Any = {<!RETURN_NOT_ALLOWED, RETURN_TYPE_MISMATCH!>return<!>}
|
fun test1() : Any = {<!RETURN_NOT_ALLOWED, RETURN_TYPE_MISMATCH!>return<!>}
|
||||||
fun test2() : Any = @a {return@a 1}
|
fun test2() : Any = a@ {return@a 1}
|
||||||
fun test3() : Any { <!RETURN_TYPE_MISMATCH!>return<!> }
|
fun test3() : Any { <!RETURN_TYPE_MISMATCH!>return<!> }
|
||||||
fun test4(): ()-> Unit = { <!RETURN_NOT_ALLOWED, RETURN_TYPE_MISMATCH!>return@test4<!> }
|
fun test4(): ()-> Unit = { <!RETURN_NOT_ALLOWED, RETURN_TYPE_MISMATCH!>return@test4<!> }
|
||||||
fun test5(): Any = @l{ return@l }
|
fun test5(): Any = l@{ return@l }
|
||||||
fun test6(): Any = {<!RETURN_NOT_ALLOWED!>return 1<!>}
|
fun test6(): Any = {<!RETURN_NOT_ALLOWED!>return 1<!>}
|
||||||
|
|
||||||
fun bbb() {
|
fun bbb() {
|
||||||
|
|||||||
@@ -54,17 +54,17 @@ fun cannotBe() {
|
|||||||
fun canBe(i0: Int, j: Int) {
|
fun canBe(i0: Int, j: Int) {
|
||||||
var <!ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE!>i<!> = i0
|
var <!ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE!>i<!> = i0
|
||||||
(i: Int) = <!UNUSED_VALUE!>36<!>
|
(i: Int) = <!UNUSED_VALUE!>36<!>
|
||||||
(@label i) = <!UNUSED_VALUE!>34<!>
|
(label@ i) = <!UNUSED_VALUE!>34<!>
|
||||||
|
|
||||||
(<!VAL_REASSIGNMENT!>j<!>: Int) = <!UNUSED_VALUE!>36<!>
|
(<!VAL_REASSIGNMENT!>j<!>: Int) = <!UNUSED_VALUE!>36<!>
|
||||||
(@label j) = <!UNUSED_VALUE!>34<!> //repeat for j
|
(label@ j) = <!UNUSED_VALUE!>34<!> //repeat for j
|
||||||
|
|
||||||
val a = A()
|
val a = A()
|
||||||
(@l a.a) = 3894
|
(l@ a.a) = 3894
|
||||||
}
|
}
|
||||||
|
|
||||||
fun canBe2(j: Int) {
|
fun canBe2(j: Int) {
|
||||||
(@label <!VAL_REASSIGNMENT!>j<!>) = <!UNUSED_VALUE!>34<!>
|
(label@ <!VAL_REASSIGNMENT!>j<!>) = <!UNUSED_VALUE!>34<!>
|
||||||
}
|
}
|
||||||
|
|
||||||
class A() {
|
class A() {
|
||||||
@@ -75,18 +75,18 @@ class Test() {
|
|||||||
fun testIllegalValues() {
|
fun testIllegalValues() {
|
||||||
<!VARIABLE_EXPECTED!>1<!> += 23
|
<!VARIABLE_EXPECTED!>1<!> += 23
|
||||||
(<!VARIABLE_EXPECTED!>1<!> : Int) += 43
|
(<!VARIABLE_EXPECTED!>1<!> : Int) += 43
|
||||||
(@l <!VARIABLE_EXPECTED!>1<!>) += 23
|
(l@ <!VARIABLE_EXPECTED!>1<!>) += 23
|
||||||
|
|
||||||
<!VARIABLE_EXPECTED!>getInt()<!> += 343
|
<!VARIABLE_EXPECTED!>getInt()<!> += 343
|
||||||
(@f <!VARIABLE_EXPECTED!>getInt()<!>) += 343
|
(f@ <!VARIABLE_EXPECTED!>getInt()<!>) += 343
|
||||||
(<!VARIABLE_EXPECTED!>getInt()<!> : Int) += 343
|
(<!VARIABLE_EXPECTED!>getInt()<!> : Int) += 343
|
||||||
|
|
||||||
<!VARIABLE_EXPECTED!>1<!>++
|
<!VARIABLE_EXPECTED!>1<!>++
|
||||||
(@r <!VARIABLE_EXPECTED!>1<!>)++
|
(r@ <!VARIABLE_EXPECTED!>1<!>)++
|
||||||
(<!VARIABLE_EXPECTED!>1<!> : Int)++
|
(<!VARIABLE_EXPECTED!>1<!> : Int)++
|
||||||
|
|
||||||
<!VARIABLE_EXPECTED!>getInt()<!>++
|
<!VARIABLE_EXPECTED!>getInt()<!>++
|
||||||
(@m <!VARIABLE_EXPECTED!>getInt()<!>)++
|
(m@ <!VARIABLE_EXPECTED!>getInt()<!>)++
|
||||||
(<!VARIABLE_EXPECTED!>getInt()<!> : Int)++
|
(<!VARIABLE_EXPECTED!>getInt()<!> : Int)++
|
||||||
|
|
||||||
this<!UNRESOLVED_REFERENCE!>++<!>
|
this<!UNRESOLVED_REFERENCE!>++<!>
|
||||||
@@ -94,7 +94,7 @@ class Test() {
|
|||||||
var s : String = "r"
|
var s : String = "r"
|
||||||
s += "ss"
|
s += "ss"
|
||||||
s += this
|
s += this
|
||||||
s += (@a 2)
|
s += (a@ 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testVariables() {
|
fun testVariables() {
|
||||||
@@ -102,13 +102,13 @@ class Test() {
|
|||||||
val b: Int = 34
|
val b: Int = 34
|
||||||
|
|
||||||
a += 34
|
a += 34
|
||||||
(@l a) += 34
|
(l@ a) += 34
|
||||||
(a : Int) += 34
|
(a : Int) += 34
|
||||||
|
|
||||||
<!VAL_REASSIGNMENT!>b<!> += 34
|
<!VAL_REASSIGNMENT!>b<!> += 34
|
||||||
|
|
||||||
a++
|
a++
|
||||||
(@l a)++
|
(l@ a)++
|
||||||
(a : Int)++
|
(a : Int)++
|
||||||
<!UNUSED_CHANGED_VALUE!>(a)++<!>
|
<!UNUSED_CHANGED_VALUE!>(a)++<!>
|
||||||
}
|
}
|
||||||
@@ -116,7 +116,7 @@ class Test() {
|
|||||||
fun testVariables1() {
|
fun testVariables1() {
|
||||||
val b: Int = 34
|
val b: Int = 34
|
||||||
|
|
||||||
(@l <!VAL_REASSIGNMENT!>b<!>) += 34
|
(l@ <!VAL_REASSIGNMENT!>b<!>) += 34
|
||||||
//repeat for b
|
//repeat for b
|
||||||
(b : Int) += 34
|
(b : Int) += 34
|
||||||
(b) += 3
|
(b) += 3
|
||||||
@@ -130,7 +130,7 @@ class Test() {
|
|||||||
ab.getArray()[54] = 23
|
ab.getArray()[54] = 23
|
||||||
ab.getArray()[54]++
|
ab.getArray()[54]++
|
||||||
|
|
||||||
(@f a)[3] = 4
|
(f@ a)[3] = 4
|
||||||
(a : Array<Int>)[4]++
|
(a : Array<Int>)[4]++
|
||||||
(ab.getArray() : Array<Int>)[54] += 43
|
(ab.getArray() : Array<Int>)[54] += 43
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,6 @@ fun main(args : Array<String>) {
|
|||||||
<!NO_COMPANION_OBJECT!>System<!> is Int
|
<!NO_COMPANION_OBJECT!>System<!> is Int
|
||||||
<!INVISIBLE_MEMBER!>System<!>()
|
<!INVISIBLE_MEMBER!>System<!>()
|
||||||
(<!NO_COMPANION_OBJECT!>System<!>)
|
(<!NO_COMPANION_OBJECT!>System<!>)
|
||||||
@foo <!NO_COMPANION_OBJECT!>System<!>
|
foo@ <!NO_COMPANION_OBJECT!>System<!>
|
||||||
null in <!NO_COMPANION_OBJECT!>System<!>
|
null in <!NO_COMPANION_OBJECT!>System<!>
|
||||||
}
|
}
|
||||||
+3
-3
@@ -1,13 +1,13 @@
|
|||||||
fun test() {
|
fun test() {
|
||||||
|
|
||||||
@l for (i in if (true) 1..10 else <!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue@l<!>) {}
|
l@ for (i in if (true) 1..10 else <!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue@l<!>) {}
|
||||||
for (i in if (true) 1..10 else <!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue<!>) {}
|
for (i in if (true) 1..10 else <!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue<!>) {}
|
||||||
|
|
||||||
while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>break<!>) {}
|
while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>break<!>) {}
|
||||||
@l while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>break@l<!>) {}
|
l@ while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>break@l<!>) {}
|
||||||
|
|
||||||
do {} while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue<!>)
|
do {} while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue<!>)
|
||||||
@l do {} while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue@l<!>)
|
l@ do {} while (<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue@l<!>)
|
||||||
|
|
||||||
//KT-5704
|
//KT-5704
|
||||||
var i = 0
|
var i = 0
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ fun test2() {
|
|||||||
<!UNREACHABLE_CODE!>bar(<!>11, todo()/*comment1*/, <!UNREACHABLE_CODE!>""/*comment2*/)<!>
|
<!UNREACHABLE_CODE!>bar(<!>11, todo()/*comment1*/, <!UNREACHABLE_CODE!>""/*comment2*/)<!>
|
||||||
}
|
}
|
||||||
fun test3() {
|
fun test3() {
|
||||||
<!UNREACHABLE_CODE!>bar(<!>11, @l(todo()/*comment*/), <!UNREACHABLE_CODE!>"")<!>
|
<!UNREACHABLE_CODE!>bar(<!>11, l@(todo()/*comment*/), <!UNREACHABLE_CODE!>"")<!>
|
||||||
}
|
}
|
||||||
|
|
||||||
fun todo() = throw Exception()
|
fun todo() = throw Exception()
|
||||||
|
|||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
//KT-5200 Mark unreachable code in lambdas
|
//KT-5200 Mark unreachable code in lambdas
|
||||||
|
|
||||||
fun test1(): String {
|
fun test1(): String {
|
||||||
doCall @local {
|
doCall local@ {
|
||||||
throw NullPointerException()
|
throw NullPointerException()
|
||||||
<!UNREACHABLE_CODE!>"b3"<!> //unmarked
|
<!UNREACHABLE_CODE!>"b3"<!> //unmarked
|
||||||
}
|
}
|
||||||
@@ -10,7 +10,7 @@ fun test1(): String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun test2(nonLocal: String, b: Boolean): String {
|
fun test2(nonLocal: String, b: Boolean): String {
|
||||||
doCall @local {
|
doCall local@ {
|
||||||
if (b) {
|
if (b) {
|
||||||
return@local "b1"
|
return@local "b1"
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+2
-2
@@ -5,7 +5,7 @@ class TestFunctionLiteral {
|
|||||||
val sum: (Int) -> Int = { x: Int ->
|
val sum: (Int) -> Int = { x: Int ->
|
||||||
sum(x - 1) + x
|
sum(x - 1) + x
|
||||||
}
|
}
|
||||||
val foo: () -> Unit = @l ({ foo() })
|
val foo: () -> Unit = l@ ({ foo() })
|
||||||
}
|
}
|
||||||
|
|
||||||
open class A(val a: A)
|
open class A(val a: A)
|
||||||
@@ -19,7 +19,7 @@ class TestObjectLiteral {
|
|||||||
val y = obj
|
val y = obj
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val obj1: A = @l ( object: A(<!UNINITIALIZED_VARIABLE!>obj1<!>) {
|
val obj1: A = l@ ( object: A(<!UNINITIALIZED_VARIABLE!>obj1<!>) {
|
||||||
init {
|
init {
|
||||||
val x = <!UNINITIALIZED_VARIABLE!>obj1<!>
|
val x = <!UNINITIALIZED_VARIABLE!>obj1<!>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
fun call(f: () -> Unit) = f()
|
fun call(f: () -> Unit) = f()
|
||||||
|
|
||||||
fun f1() {
|
fun f1() {
|
||||||
@outer while (true) {
|
outer@ while (true) {
|
||||||
call {
|
call {
|
||||||
<!BREAK_OR_CONTINUE_JUMPS_ACROSS_FUNCTION_BOUNDARY!>break@outer<!>
|
<!BREAK_OR_CONTINUE_JUMPS_ACROSS_FUNCTION_BOUNDARY!>break@outer<!>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
fun whileLoop(x: Int?) {
|
fun whileLoop(x: Int?) {
|
||||||
@outer while (x != 0) {
|
outer@ while (x != 0) {
|
||||||
while (x != 1) {
|
while (x != 1) {
|
||||||
if (x == 2) continue @outer
|
if (x == 2) continue@outer
|
||||||
}
|
}
|
||||||
<!TYPE_MISMATCH!>x<!> : Int
|
<!TYPE_MISMATCH!>x<!> : Int
|
||||||
}
|
}
|
||||||
@@ -9,9 +9,9 @@ fun whileLoop(x: Int?) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun doWhileLoop(x: Int?) {
|
fun doWhileLoop(x: Int?) {
|
||||||
@outer while (x != 0) {
|
outer@ while (x != 0) {
|
||||||
do {
|
do {
|
||||||
if (x == 2) continue @outer
|
if (x == 2) continue@outer
|
||||||
} while (x == null)
|
} while (x == null)
|
||||||
<!TYPE_MISMATCH!>x<!> : Int
|
<!TYPE_MISMATCH!>x<!> : Int
|
||||||
}
|
}
|
||||||
@@ -19,10 +19,10 @@ fun doWhileLoop(x: Int?) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun whileLoopContinueInnerOuter(x: Int?) {
|
fun whileLoopContinueInnerOuter(x: Int?) {
|
||||||
@outer while (x != 0) {
|
outer@ while (x != 0) {
|
||||||
@inner while (x != 1) {
|
inner@ while (x != 1) {
|
||||||
while (x != 2) {
|
while (x != 2) {
|
||||||
if (x == 3) continue @inner
|
if (x == 3) continue@inner
|
||||||
}
|
}
|
||||||
<!TYPE_MISMATCH!>x<!> : Int
|
<!TYPE_MISMATCH!>x<!> : Int
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
class A3 {
|
class A3 {
|
||||||
val a: String by @l MyProperty()
|
val a: String by l@ MyProperty()
|
||||||
|
|
||||||
class MyProperty<T> {}
|
class MyProperty<T> {}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
fun test() {
|
fun test() {
|
||||||
(@d <!DECLARATION_IN_ILLEGAL_CONTEXT!>val bar = 2<!>)
|
(d@ <!DECLARATION_IN_ILLEGAL_CONTEXT!>val bar = 2<!>)
|
||||||
}
|
}
|
||||||
@@ -2,19 +2,19 @@ package m
|
|||||||
|
|
||||||
fun test(i: Int?) {
|
fun test(i: Int?) {
|
||||||
if (i != null) {
|
if (i != null) {
|
||||||
foo(@l1 <!DEBUG_INFO_SMARTCAST!>i<!>)
|
foo(l1@ <!DEBUG_INFO_SMARTCAST!>i<!>)
|
||||||
foo((<!DEBUG_INFO_SMARTCAST!>i<!>))
|
foo((<!DEBUG_INFO_SMARTCAST!>i<!>))
|
||||||
foo(@l2 (<!DEBUG_INFO_SMARTCAST!>i<!>))
|
foo(l2@ (<!DEBUG_INFO_SMARTCAST!>i<!>))
|
||||||
foo((@l3 <!DEBUG_INFO_SMARTCAST!>i<!>))
|
foo((l3@ <!DEBUG_INFO_SMARTCAST!>i<!>))
|
||||||
}
|
}
|
||||||
|
|
||||||
val a: Int = @l4 <!TYPE_MISMATCH!>""<!>
|
val a: Int = l4@ <!TYPE_MISMATCH!>""<!>
|
||||||
val b: Int = (<!TYPE_MISMATCH!>""<!>)
|
val b: Int = (<!TYPE_MISMATCH!>""<!>)
|
||||||
val c: Int = <!TYPE_MISMATCH!>""<!>: Int
|
val c: Int = <!TYPE_MISMATCH!>""<!>: Int
|
||||||
val d: Int = <!TYPE_MISMATCH!><!TYPE_MISMATCH!>""<!>: Long<!>
|
val d: Int = <!TYPE_MISMATCH!><!TYPE_MISMATCH!>""<!>: Long<!>
|
||||||
|
|
||||||
|
|
||||||
foo(@l4 <!TYPE_MISMATCH!>""<!>)
|
foo(l4@ <!TYPE_MISMATCH!>""<!>)
|
||||||
foo((<!TYPE_MISMATCH!>""<!>))
|
foo((<!TYPE_MISMATCH!>""<!>))
|
||||||
foo(<!TYPE_MISMATCH!>""<!>: Int)
|
foo(<!TYPE_MISMATCH!>""<!>: Int)
|
||||||
foo(<!TYPE_MISMATCH!><!TYPE_MISMATCH!>""<!>: Long<!>)
|
foo(<!TYPE_MISMATCH!><!TYPE_MISMATCH!>""<!>: Long<!>)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ fun test() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun foo() {
|
fun foo() {
|
||||||
val bal = @bag fun () {
|
val bal = bag@ fun () {
|
||||||
val bar = fun() {
|
val bar = fun() {
|
||||||
<!RETURN_NOT_ALLOWED!>return@bag<!>
|
<!RETURN_NOT_ALLOWED!>return@bag<!>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||||
|
|
||||||
val label_fun = @label fun () {
|
val label_fun = label@ fun () {
|
||||||
return@label
|
return@label
|
||||||
}
|
}
|
||||||
|
|
||||||
val parenthesized_label_fun = (@label fun () {
|
val parenthesized_label_fun = (label@ fun () {
|
||||||
return@label
|
return@label
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ fun foo<T>(<!UNUSED_PARAMETER!>a<!>: A, f: () -> T): T = f()
|
|||||||
fun foo<T>(<!UNUSED_PARAMETER!>b<!>: B, f: () -> T): T = f()
|
fun foo<T>(<!UNUSED_PARAMETER!>b<!>: B, f: () -> T): T = f()
|
||||||
|
|
||||||
fun test(c: C) {
|
fun test(c: C) {
|
||||||
<!CANNOT_COMPLETE_RESOLVE!>foo<!>(c) @f {
|
<!CANNOT_COMPLETE_RESOLVE!>foo<!>(c) f@ {
|
||||||
c<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
|
c<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
val flag = true
|
val flag = true
|
||||||
|
|
||||||
val a/*: () -> Comparable<out Any?>*/ = @l {
|
val a/*: () -> Comparable<out Any?>*/ = l@ {
|
||||||
return@l if (flag) "OK" else 4
|
return@l if (flag) "OK" else 4
|
||||||
}
|
}
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
val flag = true
|
val flag = true
|
||||||
|
|
||||||
// type of a was checked by txt
|
// type of a was checked by txt
|
||||||
val a/*: () -> Any*/ = @l { // commonSupertype(Int, Unit) = Any
|
val a/*: () -> Any*/ = l@ { // commonSupertype(Int, Unit) = Any
|
||||||
if (flag) return@l 4
|
if (flag) return@l 4
|
||||||
}
|
}
|
||||||
|
|
||||||
val b/*: () -> Int */ = @l {
|
val b/*: () -> Int */ = l@ {
|
||||||
if (flag) return@l 4
|
if (flag) return@l 4
|
||||||
5
|
5
|
||||||
}
|
}
|
||||||
|
|
||||||
val c/*: () -> Unit */ = @l {
|
val c/*: () -> Unit */ = l@ {
|
||||||
if (flag) <!UNUSED_EXPRESSION!>4<!>
|
if (flag) <!UNUSED_EXPRESSION!>4<!>
|
||||||
}
|
}
|
||||||
+5
-5
@@ -1,22 +1,22 @@
|
|||||||
val flag = true
|
val flag = true
|
||||||
|
|
||||||
val a: () -> Int = @l {
|
val a: () -> Int = l@ {
|
||||||
<!TYPE_MISMATCH!>if (flag) return@l 4<!>
|
<!TYPE_MISMATCH!>if (flag) return@l 4<!>
|
||||||
}
|
}
|
||||||
|
|
||||||
val b: () -> Unit = @l {
|
val b: () -> Unit = l@ {
|
||||||
if (flag) return@l <!CONSTANT_EXPECTED_TYPE_MISMATCH!>4<!>
|
if (flag) return@l <!CONSTANT_EXPECTED_TYPE_MISMATCH!>4<!>
|
||||||
}
|
}
|
||||||
|
|
||||||
val c: () -> Any = @l {
|
val c: () -> Any = l@ {
|
||||||
if (flag) return@l 4
|
if (flag) return@l 4
|
||||||
}
|
}
|
||||||
|
|
||||||
val d: () -> Int = @l {
|
val d: () -> Int = l@ {
|
||||||
if (flag) return@l 4
|
if (flag) return@l 4
|
||||||
5
|
5
|
||||||
}
|
}
|
||||||
|
|
||||||
val e: () -> Int = @l {
|
val e: () -> Int = l@ {
|
||||||
<!TYPE_MISMATCH!>if (flag) <!UNUSED_EXPRESSION!>4<!><!>
|
<!TYPE_MISMATCH!>if (flag) <!UNUSED_EXPRESSION!>4<!><!>
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
val flag = true
|
val flag = true
|
||||||
|
|
||||||
val a /*: (Int) -> String */ = @l {
|
val a /*: (Int) -> String */ = l@ {
|
||||||
i: Int ->
|
i: Int ->
|
||||||
if (i == 0) return@l i.toString()
|
if (i == 0) return@l i.toString()
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
fun test2(a: Int) {
|
fun test2(a: Int) {
|
||||||
val x = run @f{
|
val x = run f@{
|
||||||
if (a > 0) <!RETURN_NOT_ALLOWED!>return<!>
|
if (a > 0) <!RETURN_NOT_ALLOWED!>return<!>
|
||||||
return@f 1
|
return@f 1
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
fun test2() {
|
fun test2() {
|
||||||
val x = run @f{return@f 1}
|
val x = run f@{return@f 1}
|
||||||
x: Int
|
x: Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -1,11 +1,11 @@
|
|||||||
fun test() {
|
fun test() {
|
||||||
val x = run(@f{return@f 1})
|
val x = run(f@{return@f 1})
|
||||||
x: Int
|
x: Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun test1() {
|
fun test1() {
|
||||||
val x = run(@l{return@l 1})
|
val x = run(l@{return@l 1})
|
||||||
x: Int
|
x: Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
fun test() {
|
fun test() {
|
||||||
run1 @f{
|
run1 f@{
|
||||||
(return@f 1)<!UNREACHABLE_CODE!>: Nothing<!>
|
(return@f 1)<!UNREACHABLE_CODE!>: Nothing<!>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
fun test() {
|
fun test() {
|
||||||
val x = run @f{
|
val x = run f@{
|
||||||
fun local(a: Int): String {
|
fun local(a: Int): String {
|
||||||
if (a > 0) return "2"
|
if (a > 0) return "2"
|
||||||
return@local "3"
|
return@local "3"
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
fun test() {
|
fun test() {
|
||||||
val x = run @f{
|
val x = run f@{
|
||||||
run @ff {
|
run ff@ {
|
||||||
return@ff "2"
|
return@ff "2"
|
||||||
}
|
}
|
||||||
return@f 1
|
return@f 1
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
fun test(a: Int) {
|
fun test(a: Int) {
|
||||||
run @f{
|
run f@{
|
||||||
if (a > 0) return@f
|
if (a > 0) return@f
|
||||||
else return@f <!RETURN_TYPE_MISMATCH!>1<!>
|
else return@f <!RETURN_TYPE_MISMATCH!>1<!>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
class A
|
class A
|
||||||
val flag = true
|
val flag = true
|
||||||
|
|
||||||
val a /*: () -> A?*/ = @l {
|
val a /*: () -> A?*/ = l@ {
|
||||||
if (flag) return@l null
|
if (flag) return@l null
|
||||||
|
|
||||||
A()
|
A()
|
||||||
}
|
}
|
||||||
|
|
||||||
val b /*: () -> A?*/ = @l {
|
val b /*: () -> A?*/ = l@ {
|
||||||
if (flag) return@l null
|
if (flag) return@l null
|
||||||
|
|
||||||
return@l A()
|
return@l A()
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
val flag = true
|
val flag = true
|
||||||
|
|
||||||
val a = @b {
|
val a = b@ {
|
||||||
if (flag) return@b <!RETURN_TYPE_MISMATCH!>4<!>
|
if (flag) return@b <!RETURN_TYPE_MISMATCH!>4<!>
|
||||||
return@b
|
return@b
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
fun test(a: Int) {
|
fun test(a: Int) {
|
||||||
val x = run @f{
|
val x = run f@{
|
||||||
if (a > 0) return@f
|
if (a > 0) return@f
|
||||||
else return@f Unit
|
else return@f Unit
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
val flag = true
|
val flag = true
|
||||||
|
|
||||||
// type of lambda was checked by txt
|
// type of lambda was checked by txt
|
||||||
val a = @b { // () -> Unit
|
val a = b@ { // () -> Unit
|
||||||
if (flag) return@b
|
if (flag) return@b
|
||||||
else <!UNUSED_EXPRESSION!>54<!>
|
else <!UNUSED_EXPRESSION!>54<!>
|
||||||
}
|
}
|
||||||
+1
-1
@@ -3,7 +3,7 @@ fun listOf<T>(vararg <!UNUSED_PARAMETER!>values<!>: T): List<T> = null!!
|
|||||||
|
|
||||||
val flag = true
|
val flag = true
|
||||||
|
|
||||||
val a: () -> List<Int> = @l {
|
val a: () -> List<Int> = l@ {
|
||||||
if (flag) return@l listOf()
|
if (flag) return@l listOf()
|
||||||
listOf(5)
|
listOf(5)
|
||||||
}
|
}
|
||||||
+3
-3
@@ -1,16 +1,16 @@
|
|||||||
val flag = true
|
val flag = true
|
||||||
|
|
||||||
// type of lambda was checked by txt
|
// type of lambda was checked by txt
|
||||||
val a = @l { // () -> Any
|
val a = l@ { // () -> Any
|
||||||
if (flag) return@l 4
|
if (flag) return@l 4
|
||||||
return@l Unit
|
return@l Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
val b = @l { // () -> Any
|
val b = l@ { // () -> Any
|
||||||
if (flag) return@l Unit
|
if (flag) return@l Unit
|
||||||
5
|
5
|
||||||
}
|
}
|
||||||
|
|
||||||
val c = @l { // () -> Unit
|
val c = l@ { // () -> Unit
|
||||||
if (flag) return@l Unit
|
if (flag) return@l Unit
|
||||||
}
|
}
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
fun test(a: Int) {
|
fun test(a: Int) {
|
||||||
run @f{ <!DEPRECATED_LAMBDA_SYNTAX!>(): Int<!> ->
|
run f@{ <!DEPRECATED_LAMBDA_SYNTAX!>(): Int<!> ->
|
||||||
if (a > 0) return@f <!TYPE_MISMATCH!>""<!>
|
if (a > 0) return@f <!TYPE_MISMATCH!>""<!>
|
||||||
return@f 1
|
return@f 1
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ trait C: A
|
|||||||
|
|
||||||
|
|
||||||
fun test(a: C, b: B) {
|
fun test(a: C, b: B) {
|
||||||
val x = run @f{
|
val x = run f@{
|
||||||
if (a != b) return@f a
|
if (a != b) return@f a
|
||||||
b
|
b
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// KT-6822 Smart cast doesn't work inside local returned expression in lambda
|
// KT-6822 Smart cast doesn't work inside local returned expression in lambda
|
||||||
|
|
||||||
val a /* :(Int?) -> Int? */ = @l { it: Int? -> // but must be (Int?) -> Int
|
val a /* :(Int?) -> Int? */ = l@ { it: Int? -> // but must be (Int?) -> Int
|
||||||
if (it != null) return@l it
|
if (it != null) return@l it
|
||||||
5
|
5
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
// KT-6822 Smart cast doesn't work inside local returned expression in lambda
|
// KT-6822 Smart cast doesn't work inside local returned expression in lambda
|
||||||
|
|
||||||
val a : (Int?) -> Int = @l {
|
val a : (Int?) -> Int = l@ {
|
||||||
if (it != null) return@l <!DEBUG_INFO_SMARTCAST!>it<!>
|
if (it != null) return@l <!DEBUG_INFO_SMARTCAST!>it<!>
|
||||||
5
|
5
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
val a = @l {
|
val a = l@ {
|
||||||
return@l <!UNRESOLVED_REFERENCE!>r<!>
|
return@l <!UNRESOLVED_REFERENCE!>r<!>
|
||||||
}
|
}
|
||||||
|
|
||||||
val b = @l {
|
val b = l@ {
|
||||||
if ("" == "OK") return@l
|
if ("" == "OK") return@l
|
||||||
|
|
||||||
return@l <!UNRESOLVED_REFERENCE, RETURN_TYPE_MISMATCH!>r<!>
|
return@l <!UNRESOLVED_REFERENCE, RETURN_TYPE_MISMATCH!>r<!>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ trait Element
|
|||||||
|
|
||||||
fun test(handlers: Map<String, Element.()->Unit>) {
|
fun test(handlers: Map<String, Element.()->Unit>) {
|
||||||
|
|
||||||
handlers.getOrElse("name", @l { return@l <!NULL_FOR_NONNULL_TYPE!>null<!> })
|
handlers.getOrElse("name", l@ { return@l <!NULL_FOR_NONNULL_TYPE!>null<!> })
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <K,V> Map<K,V>.getOrElse(key: K, defaultValue: ()-> V) : V = throw Exception("$key $defaultValue")
|
fun <K,V> Map<K,V>.getOrElse(key: K, defaultValue: ()-> V) : V = throw Exception("$key $defaultValue")
|
||||||
@@ -6,7 +6,7 @@ import java.util.*
|
|||||||
fun expected<T>(t: T, <!UNUSED_PARAMETER!>f<!>: () -> T) : T = t
|
fun expected<T>(t: T, <!UNUSED_PARAMETER!>f<!>: () -> T) : T = t
|
||||||
|
|
||||||
fun test(arrayList: ArrayList<Int>, list: List<Int>) {
|
fun test(arrayList: ArrayList<Int>, list: List<Int>) {
|
||||||
val <!UNUSED_VARIABLE!>t<!> = expected(arrayList, @l {return@l list.reverse() })
|
val <!UNUSED_VARIABLE!>t<!> = expected(arrayList, l@ {return@l list.reverse() })
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T> List<T>.reverse() : List<T> = this
|
fun <T> List<T>.reverse() : List<T> = this
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||||
|
|
||||||
inline fun foo(bar1: (String.() -> Int) -> Int, bar2: (()->Int) -> Int) {
|
inline fun foo(bar1: (String.() -> Int) -> Int, bar2: (()->Int) -> Int) {
|
||||||
bar1 @label {
|
bar1 label@ {
|
||||||
this@label.length()
|
this@label.length()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ inline fun foo(bar1: (String.() -> Int) -> Int, bar2: (()->Int) -> Int) {
|
|||||||
// this@bar1.length
|
// this@bar1.length
|
||||||
//}
|
//}
|
||||||
|
|
||||||
bar2 @l {
|
bar2 l@ {
|
||||||
11
|
11
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,17 +24,17 @@ inline fun foo(bar1: (String.() -> Int) -> Int, bar2: (()->Int) -> Int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline fun foo2(bar1: (String.() -> Int) -> Int) {
|
inline fun foo2(bar1: (String.() -> Int) -> Int) {
|
||||||
@l1 <!USAGE_IS_NOT_INLINABLE!>bar1<!>
|
l1@ <!USAGE_IS_NOT_INLINABLE!>bar1<!>
|
||||||
|
|
||||||
@l2 bar1 {
|
l2@ bar1 {
|
||||||
11
|
11
|
||||||
}
|
}
|
||||||
|
|
||||||
(@l3 bar1) {
|
(l3@ bar1) {
|
||||||
11
|
11
|
||||||
}
|
}
|
||||||
|
|
||||||
(@l5 (@l4 bar1)) {
|
(l5@ (l4@ bar1)) {
|
||||||
11
|
11
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
fun inlineCallExplicitError(): String {
|
fun inlineCallExplicitError(): String {
|
||||||
inlineFun @lamba {
|
inlineFun lamba@ {
|
||||||
if (true) {
|
if (true) {
|
||||||
return@lamba 2
|
return@lamba 2
|
||||||
}
|
}
|
||||||
@@ -10,7 +10,7 @@ fun inlineCallExplicitError(): String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun inlineCall(): String {
|
fun inlineCall(): String {
|
||||||
inlineFun @lamba {
|
inlineFun lamba@ {
|
||||||
if (true) {
|
if (true) {
|
||||||
return@lamba 2
|
return@lamba 2
|
||||||
}
|
}
|
||||||
@@ -26,7 +26,7 @@ inline fun inlineFun(s: () -> Int) {
|
|||||||
|
|
||||||
|
|
||||||
fun noInlineCall(): String {
|
fun noInlineCall(): String {
|
||||||
noInline @lambda {
|
noInline lambda@ {
|
||||||
if (true) {
|
if (true) {
|
||||||
return@lambda 2
|
return@lambda 2
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ class Global(val value: String)
|
|||||||
|
|
||||||
fun test1(intKind: Kind, extKind: Kind): Global {
|
fun test1(intKind: Kind, extKind: Kind): Global {
|
||||||
|
|
||||||
var externalResult = doCall @ext {
|
var externalResult = doCall ext@ {
|
||||||
|
|
||||||
val internalResult = doCall @int {
|
val internalResult = doCall int@ {
|
||||||
if (intKind == Kind.LOCAL) {
|
if (intKind == Kind.LOCAL) {
|
||||||
return@test1 Global("internal to global")
|
return@test1 Global("internal to global")
|
||||||
} else if (intKind == EXT_RETURN) {
|
} else if (intKind == EXT_RETURN) {
|
||||||
|
|||||||
@@ -27,13 +27,13 @@ fun <R> fun3ValueArgument(p: () -> R) {
|
|||||||
|
|
||||||
|
|
||||||
fun <R> fun4(p: () -> R) {
|
fun <R> fun4(p: () -> R) {
|
||||||
inlineFun @lambda {
|
inlineFun lambda@ {
|
||||||
return@lambda p();
|
return@lambda p();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <R> fun4ValueArgument(p: () -> R) {
|
fun <R> fun4ValueArgument(p: () -> R) {
|
||||||
inlineFun (@lambda {
|
inlineFun (lambda@ {
|
||||||
return@lambda p();
|
return@lambda p();
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ fun <R> fun3(p: () -> R) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <R> fun4(p: () -> R) {
|
fun <R> fun4(p: () -> R) {
|
||||||
Z() inlineFun @lambda {
|
Z() inlineFun lambda@ {
|
||||||
return@lambda p();
|
return@lambda p();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,6 +20,6 @@ inline fun inlineFunWithInvoke2(s: (p: Int) -> Unit) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline fun propagation(s: (p: Int) -> Unit) {
|
inline fun propagation(s: (p: Int) -> Unit) {
|
||||||
inlineFunWithInvoke((@label (s: (p: Int) -> Unit)))
|
inlineFunWithInvoke((label@ (s: (p: Int) -> Unit)))
|
||||||
inlineFunWithInvoke((@label2 @label (s: (p: Int) -> Unit)))
|
inlineFunWithInvoke((label2@ label@ (s: (p: Int) -> Unit)))
|
||||||
}
|
}
|
||||||
@@ -5,8 +5,8 @@ public inline fun <reified T> Array(n: Int, block: (Int) -> T): Array<T> = null!
|
|||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
val ints = Array<Int?>(2, { null })
|
val ints = Array<Int?>(2, { null })
|
||||||
ints.forEach @lit {
|
ints.forEach lit@ {
|
||||||
if (it == null) return @lit
|
if (it == null) return@lit
|
||||||
use(<!DEBUG_INFO_SMARTCAST!>it<!> + 5)
|
use(<!DEBUG_INFO_SMARTCAST!>it<!> + 5)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
fun nonlocals(b : Boolean) {
|
fun nonlocals(b : Boolean) {
|
||||||
@a<!UNUSED_FUNCTION_LITERAL!>{
|
a@<!UNUSED_FUNCTION_LITERAL!>{
|
||||||
fun foo() {
|
fun foo() {
|
||||||
if (b) {
|
if (b) {
|
||||||
<!RETURN_NOT_ALLOWED!>return@a 1<!> // The label must be resolved, but an error should be reported for a non-local return
|
<!RETURN_NOT_ALLOWED!>return@a 1<!> // The label must be resolved, but an error should be reported for a non-local return
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
//KT-3920 Labeling information is lost when passing through some expressions
|
//KT-3920 Labeling information is lost when passing through some expressions
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
run @f{
|
run f@{
|
||||||
val x = if (1 > 2) return@f 1 else 2
|
val x = if (1 > 2) return@f 1 else 2
|
||||||
2
|
2
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ fun string(init: StringBuilder.() -> Unit): String{
|
|||||||
return answer.toString()
|
return answer.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
val str = string @l{
|
val str = string l@{
|
||||||
append("hello, ")
|
append("hello, ")
|
||||||
|
|
||||||
val sub = string {
|
val sub = string {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
//KT-4603 Labeling information is lost when passing through local classes or objects
|
//KT-4603 Labeling information is lost when passing through local classes or objects
|
||||||
|
|
||||||
fun foo() {
|
fun foo() {
|
||||||
val s: Int.() -> Unit = @l{
|
val s: Int.() -> Unit = l@{
|
||||||
class Local(val y: Int = this@l) {
|
class Local(val y: Int = this@l) {
|
||||||
fun bar() {
|
fun bar() {
|
||||||
val x: Int = this@l //unresolved
|
val x: Int = this@l //unresolved
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
//KT-591 Unresolved label in valid code
|
//KT-591 Unresolved label in valid code
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
val <!UNUSED_VARIABLE!>a<!>: (Int?).() -> Unit = @a{
|
val <!UNUSED_VARIABLE!>a<!>: (Int?).() -> Unit = a@{
|
||||||
if (this != null) {
|
if (this != null) {
|
||||||
val <!UNUSED_VARIABLE!>b<!>: String.() -> Unit = {
|
val <!UNUSED_VARIABLE!>b<!>: String.() -> Unit = {
|
||||||
<!DEBUG_INFO_SMARTCAST!>this@a<!>.times(5) // @a Unresolved
|
<!DEBUG_INFO_SMARTCAST!>this@a<!>.times(5) // a@ Unresolved
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ fun B.b() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
@b <!UNUSED_FUNCTION_LITERAL!>{ <!DEPRECATED_LAMBDA_SYNTAX!>B.()<!> ->
|
b@ <!UNUSED_FUNCTION_LITERAL!>{ <!DEPRECATED_LAMBDA_SYNTAX!>B.()<!> ->
|
||||||
object : A {
|
object : A {
|
||||||
override fun foo() {
|
override fun foo() {
|
||||||
this@b.bar()
|
this@b.bar()
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ fun main(args : Array<String>) {
|
|||||||
val <!UNUSED_VARIABLE!>h<!> : String = <!TYPE_MISMATCH!>v--<!>;
|
val <!UNUSED_VARIABLE!>h<!> : String = <!TYPE_MISMATCH!>v--<!>;
|
||||||
val <!UNUSED_VARIABLE!>h1<!> : String = <!TYPE_MISMATCH!>--v<!>;
|
val <!UNUSED_VARIABLE!>h1<!> : String = <!TYPE_MISMATCH!>--v<!>;
|
||||||
val <!UNUSED_VARIABLE!>i<!> : String = <!TYPE_MISMATCH!>!true<!>;
|
val <!UNUSED_VARIABLE!>i<!> : String = <!TYPE_MISMATCH!>!true<!>;
|
||||||
val <!UNUSED_VARIABLE!>j<!> : String = @foo <!CONSTANT_EXPECTED_TYPE_MISMATCH!>true<!>;
|
val <!UNUSED_VARIABLE!>j<!> : String = foo@ <!CONSTANT_EXPECTED_TYPE_MISMATCH!>true<!>;
|
||||||
val <!UNUSED_VARIABLE!>k<!> : String = @foo @bar <!CONSTANT_EXPECTED_TYPE_MISMATCH!>true<!>;
|
val <!UNUSED_VARIABLE!>k<!> : String = foo@ bar@ <!CONSTANT_EXPECTED_TYPE_MISMATCH!>true<!>;
|
||||||
val <!UNUSED_VARIABLE!>l<!> : String = <!TYPE_MISMATCH!>-1<!>;
|
val <!UNUSED_VARIABLE!>l<!> : String = <!TYPE_MISMATCH!>-1<!>;
|
||||||
val <!UNUSED_VARIABLE!>m<!> : String = <!TYPE_MISMATCH!>+1<!>;
|
val <!UNUSED_VARIABLE!>m<!> : String = <!TYPE_MISMATCH!>+1<!>;
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,7 @@ package kt411
|
|||||||
|
|
||||||
fun f() {
|
fun f() {
|
||||||
invoker(
|
invoker(
|
||||||
@l{
|
l@{
|
||||||
return@l 11 // expects Function, but should expect Int
|
return@l 11 // expects Function, but should expect Int
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -13,13 +13,13 @@ fun invoker(<!UNUSED_PARAMETER!>gen<!> : () -> Int) : Int = 0
|
|||||||
|
|
||||||
//more tests
|
//more tests
|
||||||
fun t1() {
|
fun t1() {
|
||||||
val <!UNUSED_VARIABLE!>v<!> = @l{
|
val <!UNUSED_VARIABLE!>v<!> = l@{
|
||||||
return@l 111
|
return@l 111
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun t2() : String {
|
fun t2() : String {
|
||||||
val <!UNUSED_VARIABLE!>g<!> : ()-> Int = @l{
|
val <!UNUSED_VARIABLE!>g<!> : ()-> Int = l@{
|
||||||
if (true) {
|
if (true) {
|
||||||
return@l 1
|
return@l 1
|
||||||
}
|
}
|
||||||
@@ -30,7 +30,7 @@ fun t2() : String {
|
|||||||
|
|
||||||
fun t3() : String {
|
fun t3() : String {
|
||||||
invoker(
|
invoker(
|
||||||
@l{
|
l@{
|
||||||
if (true) {
|
if (true) {
|
||||||
<!RETURN_NOT_ALLOWED!>return@t3 "1"<!>
|
<!RETURN_NOT_ALLOWED!>return@t3 "1"<!>
|
||||||
}
|
}
|
||||||
@@ -41,7 +41,7 @@ fun t3() : String {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
invoker(
|
invoker(
|
||||||
@l{
|
l@{
|
||||||
return@l 1
|
return@l 1
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -54,10 +54,10 @@ fun t3() : String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun t4() : Int {
|
fun t4() : Int {
|
||||||
val <!UNUSED_VARIABLE!>h<!> : ()-> String = @l{
|
val <!UNUSED_VARIABLE!>h<!> : ()-> String = l@{
|
||||||
return@l "a"
|
return@l "a"
|
||||||
}
|
}
|
||||||
val <!UNUSED_VARIABLE!>g<!> : ()-> String = @l{
|
val <!UNUSED_VARIABLE!>g<!> : ()-> String = l@{
|
||||||
return@l "a"
|
return@l "a"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,5 +3,5 @@
|
|||||||
inline fun run1<T>(body : () -> T) : T = body()
|
inline fun run1<T>(body : () -> T) : T = body()
|
||||||
|
|
||||||
fun main1(<!UNUSED_PARAMETER!>args<!> : Array<String>) {
|
fun main1(<!UNUSED_PARAMETER!>args<!> : Array<String>) {
|
||||||
run1 @l{ 1 } // should not be an error
|
run1 l@{ 1 } // should not be an error
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package c
|
package c
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
with (1) @l {
|
with (1) l@ {
|
||||||
foo(1, <!NAMED_PARAMETER_NOT_FOUND!>zz<!> = { this@l } )
|
foo(1, <!NAMED_PARAMETER_NOT_FOUND!>zz<!> = { this@l } )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ fun test(bar: Bar, a: A) {
|
|||||||
// no elements with error types
|
// no elements with error types
|
||||||
fooInt((bar()))
|
fooInt((bar()))
|
||||||
fooInt(if (true) bar() else bar())
|
fooInt(if (true) bar() else bar())
|
||||||
fooInt(@label bar())
|
fooInt(label@ bar())
|
||||||
fooInt(a.bar())
|
fooInt(a.bar())
|
||||||
fooInt(((@label if (true) (a.bar()) else bar())))
|
fooInt(((label@ if (true) (a.bar()) else bar())))
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@ fun testEquals(x: Int) {
|
|||||||
if (<!SENSELESS_COMPARISON!>x == (null)<!>) {}
|
if (<!SENSELESS_COMPARISON!>x == (null)<!>) {}
|
||||||
if (<!SENSELESS_COMPARISON!>x == null: Nothing?<!>) {}
|
if (<!SENSELESS_COMPARISON!>x == null: Nothing?<!>) {}
|
||||||
if (<!SENSELESS_COMPARISON!>x == null: Nothing?<!>) {}
|
if (<!SENSELESS_COMPARISON!>x == null: Nothing?<!>) {}
|
||||||
if (<!SENSELESS_COMPARISON!>x == @foo null<!>) {}
|
if (<!SENSELESS_COMPARISON!>x == foo@ null<!>) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testEqualsFlipped(x: Int) {
|
fun testEqualsFlipped(x: Int) {
|
||||||
@@ -11,7 +11,7 @@ fun testEqualsFlipped(x: Int) {
|
|||||||
if (<!SENSELESS_COMPARISON!>(null) == x<!>) {}
|
if (<!SENSELESS_COMPARISON!>(null) == x<!>) {}
|
||||||
if (<!SENSELESS_COMPARISON!>null: Nothing? == x<!>) {}
|
if (<!SENSELESS_COMPARISON!>null: Nothing? == x<!>) {}
|
||||||
if (<!SENSELESS_COMPARISON!>null: Nothing? == x<!>) {}
|
if (<!SENSELESS_COMPARISON!>null: Nothing? == x<!>) {}
|
||||||
if (<!SENSELESS_COMPARISON!>@foo null == x<!>) {}
|
if (<!SENSELESS_COMPARISON!>foo@ null == x<!>) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testNotEquals(x: Int) {
|
fun testNotEquals(x: Int) {
|
||||||
@@ -19,7 +19,7 @@ fun testNotEquals(x: Int) {
|
|||||||
if (<!SENSELESS_COMPARISON!>x != (null)<!>) {}
|
if (<!SENSELESS_COMPARISON!>x != (null)<!>) {}
|
||||||
if (<!SENSELESS_COMPARISON!>x != null: Nothing?<!>) {}
|
if (<!SENSELESS_COMPARISON!>x != null: Nothing?<!>) {}
|
||||||
if (<!SENSELESS_COMPARISON!>x != null: Nothing?<!>) {}
|
if (<!SENSELESS_COMPARISON!>x != null: Nothing?<!>) {}
|
||||||
if (<!SENSELESS_COMPARISON!>x != @foo null<!>) {}
|
if (<!SENSELESS_COMPARISON!>x != foo@ null<!>) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testNotEqualsFlipped(x: Int) {
|
fun testNotEqualsFlipped(x: Int) {
|
||||||
@@ -27,5 +27,5 @@ fun testNotEqualsFlipped(x: Int) {
|
|||||||
if (<!SENSELESS_COMPARISON!>(null) != x<!>) {}
|
if (<!SENSELESS_COMPARISON!>(null) != x<!>) {}
|
||||||
if (<!SENSELESS_COMPARISON!>null: Nothing? != x<!>) {}
|
if (<!SENSELESS_COMPARISON!>null: Nothing? != x<!>) {}
|
||||||
if (<!SENSELESS_COMPARISON!>null: Nothing? != x<!>) {}
|
if (<!SENSELESS_COMPARISON!>null: Nothing? != x<!>) {}
|
||||||
if (<!SENSELESS_COMPARISON!>@foo null != x<!>) {}
|
if (<!SENSELESS_COMPARISON!>foo@ null != x<!>) {}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
public fun foo(x: String?): Int {
|
public fun foo(x: String?): Int {
|
||||||
var y: Any
|
var y: Any
|
||||||
@loop while (true) {
|
loop@ while (true) {
|
||||||
y = when (x) {
|
y = when (x) {
|
||||||
null -> break@loop
|
null -> break@loop
|
||||||
"abc" -> return 0
|
"abc" -> return 0
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
fun x(): Boolean { return true }
|
fun x(): Boolean { return true }
|
||||||
|
|
||||||
public fun foo(p: String?, r: String?): Int {
|
public fun foo(p: String?, r: String?): Int {
|
||||||
@outer do {
|
outer@ do {
|
||||||
do {
|
do {
|
||||||
p!!.length()
|
p!!.length()
|
||||||
if (!x()) continue@outer
|
if (!x()) continue@outer
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ fun x(p: String): Boolean { return p == "abc" }
|
|||||||
public fun foo(p: String?, r: String?, q: String?): Int {
|
public fun foo(p: String?, r: String?, q: String?): Int {
|
||||||
while(true) {
|
while(true) {
|
||||||
q!!.length()
|
q!!.length()
|
||||||
@loop do {
|
loop@ do {
|
||||||
while(true) {
|
while(true) {
|
||||||
p!!.length()
|
p!!.length()
|
||||||
if (x(<!DEBUG_INFO_SMARTCAST!>p<!>)) break@loop
|
if (x(<!DEBUG_INFO_SMARTCAST!>p<!>)) break@loop
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
fun x(): Boolean { return true }
|
fun x(): Boolean { return true }
|
||||||
|
|
||||||
public fun foo(p: String?, r: String?, q: String?): Int {
|
public fun foo(p: String?, r: String?, q: String?): Int {
|
||||||
@outer while(true) {
|
outer@ while(true) {
|
||||||
q!!.length()
|
q!!.length()
|
||||||
do {
|
do {
|
||||||
if (x()) continue@outer
|
if (x()) continue@outer
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ fun bar(): Boolean { return true }
|
|||||||
public fun foo(x: String?): Int {
|
public fun foo(x: String?): Int {
|
||||||
var y: Int?
|
var y: Int?
|
||||||
y = 0
|
y = 0
|
||||||
@loop do {
|
loop@ do {
|
||||||
<!DEBUG_INFO_SMARTCAST!>y<!> += when (x) {
|
<!DEBUG_INFO_SMARTCAST!>y<!> += when (x) {
|
||||||
null -> break@loop
|
null -> break@loop
|
||||||
"abc" -> return 0
|
"abc" -> return 0
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
public fun foo(x: String?): Int {
|
public fun foo(x: String?): Int {
|
||||||
@loop while (true) {
|
loop@ while (true) {
|
||||||
when (x) {
|
when (x) {
|
||||||
null -> break@loop
|
null -> break@loop
|
||||||
"abc" -> return 0
|
"abc" -> return 0
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
public fun foo(x: String?): Int {
|
public fun foo(x: String?): Int {
|
||||||
@loop while (true) {
|
loop@ while (true) {
|
||||||
when (x) {
|
when (x) {
|
||||||
null -> return -1
|
null -> return -1
|
||||||
"abc" -> return 0
|
"abc" -> return 0
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ class A(val a:Int) {
|
|||||||
this@B : B
|
this@B : B
|
||||||
this@A : A
|
this@A : A
|
||||||
}
|
}
|
||||||
val <!UNUSED_VARIABLE!>b<!>: Double.() -> Unit = @a{ this@a : Double + this@xx : Char}
|
val <!UNUSED_VARIABLE!>b<!>: Double.() -> Unit = a@{ this@a : Double + this@xx : Char}
|
||||||
val <!UNUSED_VARIABLE!>c<!> = @a{ -> <!NO_THIS!>this@a<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> this@xx : Char}
|
val <!UNUSED_VARIABLE!>c<!> = a@{ -> <!NO_THIS!>this@a<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> this@xx : Char}
|
||||||
return (@a{this@a : Double + this@xx : Char})
|
return (a@{this@a : Double + this@xx : Char})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
-3
@@ -23,11 +23,11 @@ fun test(d: dynamic) {
|
|||||||
|
|
||||||
d.foo({ x -> } : (Int) -> Unit)
|
d.foo({ x -> } : (Int) -> Unit)
|
||||||
|
|
||||||
d.foo(@label { x -> })
|
d.foo(label@ { x -> })
|
||||||
|
|
||||||
d.foo(@label ({ x, y -> }))
|
d.foo(label@ ({ x, y -> }))
|
||||||
|
|
||||||
d.foo((@label ({ <!DEPRECATED_LAMBDA_SYNTAX!>(x, y: Int)<!> -> })))
|
d.foo((label@ ({ <!DEPRECATED_LAMBDA_SYNTAX!>(x, y: Int)<!> -> })))
|
||||||
|
|
||||||
d.foo(({ x -> }))
|
d.foo(({ x -> }))
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,6 @@ package test
|
|||||||
|
|
||||||
annotation class Ann(i: Double)
|
annotation class Ann(i: Double)
|
||||||
|
|
||||||
Ann(@A 1.0) class MyClass
|
Ann(A@ 1.0) class MyClass
|
||||||
|
|
||||||
// EXPECTED: Ann(i = 1.0.toDouble(): Double)
|
// EXPECTED: Ann(i = 1.0.toDouble(): Double)
|
||||||
|
|||||||
+1
-1
@@ -31,7 +31,7 @@ val commonCases: CaseBuilder.(String, String) -> Unit = { testByName, testByRef
|
|||||||
$testRenamedByName
|
$testRenamedByName
|
||||||
}""", "foo(\"123\")")
|
}""", "foo(\"123\")")
|
||||||
|
|
||||||
case("label", "val t: Int", " = 0", "testRenamed(\"$KEYWORD_MARKER\", { @$KEYWORD_MARKER while (false) {} })")
|
case("label", "val t: Int", " = 0", "testRenamed(\"$KEYWORD_MARKER\", { $KEYWORD_MARKER@ while (false) {} })")
|
||||||
}
|
}
|
||||||
|
|
||||||
val commonCasesWithTestNotRenamed: CaseBuilder.() -> Unit = { commonCases(testNotRenamedByName, testNotRenamedByRef) }
|
val commonCasesWithTestNotRenamed: CaseBuilder.() -> Unit = { commonCases(testNotRenamedByName, testNotRenamedByRef) }
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
fun foo() {
|
fun foo() {
|
||||||
@myFor
|
myFor@
|
||||||
for (i in 1..10) {
|
for (i in 1..10) {
|
||||||
@myWhile
|
myWhile@
|
||||||
while (x()) {
|
while (x()) {
|
||||||
@myDo
|
myDo@
|
||||||
do {
|
do {
|
||||||
<caret>
|
<caret>
|
||||||
} while (y())
|
} while (y())
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user