[FIR2IR] Don't replace while loop and when branch body blocks with single expression. Skip some empty blocks.

https://youtrack.jetbrains.com/issue/KT-60264/K2-while-loop-body-block-sometimes-replaced-with-single-expression

Merge-request: KT-MR-12035
Merged-by: Vladimir Sukharev <Vladimir.Sukharev@jetbrains.com>
This commit is contained in:
Vladimir Sukharev
2023-09-18 15:27:19 +00:00
committed by Space Team
parent f4df4f8007
commit 9a2eff6487
61 changed files with 601 additions and 1102 deletions
@@ -8,8 +8,10 @@ fun testBreakFor() {
val <iterator>: IntIterator = xs.iterator()
while (<iterator>.hasNext()) { // BLOCK
val x: Int = <iterator>.next()
when {
greater(arg0 = k, arg1 = 2) -> break
{ // BLOCK
when {
greater(arg0 = k, arg1 = 2) -> break
}
}
}
}
@@ -17,17 +19,21 @@ fun testBreakFor() {
fun testBreakWhile() {
var k: Int = 0
while (less(arg0 = k, arg1 = 10)) when {
greater(arg0 = k, arg1 = 2) -> break
while (less(arg0 = k, arg1 = 10)) { // BLOCK
when {
greater(arg0 = k, arg1 = 2) -> break
}
}
}
fun testBreakDoWhile() {
var k: Int = 0
{ // BLOCK
dowhen {
do// COMPOSITE {
when {
greater(arg0 = k, arg1 = 2) -> break
} while (less(arg0 = k, arg1 = 10))
}
// } while (less(arg0 = k, arg1 = 10))
}
}
@@ -41,8 +47,10 @@ fun testContinueFor() {
val <iterator>: IntIterator = xs.iterator()
while (<iterator>.hasNext()) { // BLOCK
val x: Int = <iterator>.next()
when {
greater(arg0 = k, arg1 = 2) -> continue
{ // BLOCK
when {
greater(arg0 = k, arg1 = 2) -> continue
}
}
}
}
@@ -50,8 +58,10 @@ fun testContinueFor() {
fun testContinueWhile() {
var k: Int = 0
while (less(arg0 = k, arg1 = 10)) when {
greater(arg0 = k, arg1 = 2) -> continue
while (less(arg0 = k, arg1 = 10)) { // BLOCK
when {
greater(arg0 = k, arg1 = 2) -> continue
}
}
}
@@ -74,3 +84,4 @@ fun testContinueDoWhile() {
EQEQ(arg0 = s, arg1 = "1;2;").not() -> throw AssertionError(p0 = s)
}
}