[JS IR BE] process empty loops correctly in BlockDecomposerLowering

This commit is contained in:
Zalim Bashorov
2018-10-10 14:23:51 +03:00
parent 6d592ae66b
commit 8013a56286
6 changed files with 70 additions and 6 deletions
@@ -0,0 +1,49 @@
// EXPECTED_REACHABLE_NODES: 1236
package foo
fun whileReturn(): String {
var log = ""
var i = 0
while(if (i<2) { log += "A"; i++; true } else { return log + ":whileReturn:"});
return ":whileReturn:after:"
}
fun whileImmediateReturn(): String {
while(return ":whileImmediateReturn:") {
}
return ":whileImmediateReturn:after"
}
fun doWhileReturn(): String {
var log = ""
var i = 0
do while(if (i<2) { log += "A"; i++; true} else { return log + ":doWhileReturn:"})
return ":doWhileReturn:after:"
}
fun doWhileReturnFromCondition(): String {
do {
} while(return ":doWhileReturnFromCondition:")
return ":doWhileReturnFromCondition:after"
}
fun forReturn(b: Boolean): String {
for(i in (if (b) 1..2 else { return ":forReturn:"}));
return ":forReturn:after:"
}
fun box(): String {
assertEquals("AA:whileReturn:", whileReturn())
assertEquals(":whileImmediateReturn:", whileImmediateReturn())
assertEquals("AA:doWhileReturn:", doWhileReturn())
assertEquals(":doWhileReturnFromCondition:", doWhileReturnFromCondition())
assertEquals(":forReturn:after:", forReturn(true))
assertEquals(":forReturn:", forReturn(false))
return "OK"
}