KT-53255. Fix StackOverflow during IR verification from K2
In FIR we desugar when with multiple conditions leading to same block
as tree of OR expressions
Given
```
when(some) {
"a", "b", "c" -> {}
else -> {}
}
```
actually desugared into
```
when(val <subj> = some) {
<subj> == "a" || <subj> == "b" || <subj> == "c" -> {}
else -> {}
}
```
There is a multiple ways of how we can organize such expressions in FIR
Previously it was just nesting-chain of OR expressions
While the most efficient way in terms of required stack depth is
a balanced tree
KT-53255
This commit is contained in:
committed by
Space Team
parent
ac8cae16ba
commit
2cf8f75a90
+11
-11
@@ -38,20 +38,20 @@ fun testComma(x: Int): String {
|
||||
when {
|
||||
when {
|
||||
when {
|
||||
when {
|
||||
EQEQ(arg0 = tmp1_subject, arg1 = 1) -> true
|
||||
else -> EQEQ(arg0 = tmp1_subject, arg1 = 2)
|
||||
} -> true
|
||||
else -> EQEQ(arg0 = tmp1_subject, arg1 = 3)
|
||||
EQEQ(arg0 = tmp1_subject, arg1 = 1) -> true
|
||||
else -> EQEQ(arg0 = tmp1_subject, arg1 = 2)
|
||||
} -> true
|
||||
else -> EQEQ(arg0 = tmp1_subject, arg1 = 4)
|
||||
else -> when {
|
||||
EQEQ(arg0 = tmp1_subject, arg1 = 3) -> true
|
||||
else -> EQEQ(arg0 = tmp1_subject, arg1 = 4)
|
||||
}
|
||||
} -> "1234"
|
||||
when {
|
||||
when {
|
||||
EQEQ(arg0 = tmp1_subject, arg1 = 5) -> true
|
||||
else -> EQEQ(arg0 = tmp1_subject, arg1 = 6)
|
||||
} -> true
|
||||
else -> EQEQ(arg0 = tmp1_subject, arg1 = 7)
|
||||
EQEQ(arg0 = tmp1_subject, arg1 = 5) -> true
|
||||
else -> when {
|
||||
EQEQ(arg0 = tmp1_subject, arg1 = 6) -> true
|
||||
else -> EQEQ(arg0 = tmp1_subject, arg1 = 7)
|
||||
}
|
||||
} -> "567"
|
||||
when {
|
||||
EQEQ(arg0 = tmp1_subject, arg1 = 8) -> true
|
||||
|
||||
Reference in New Issue
Block a user