8a5f260d04
The existing backend restores LVs and parameters from the suspend lambda fields used for spilling between suspension points, hence they are visible in the debugger as local variables, plain and simple. This PR introduces the same pattern to the IR backend, to bring the debugging experience in line with the existing backend. Both backends are still at the mercy of the liveness analysis performed in the coroutine transformer where a liveness analysis minimizes live ranges of entries in the LVT. E.g. an unused parameter will be dropped entirely. Adjusted existing test expectations accounting for the differences in LV behavior.
21 lines
607 B
Kotlin
Vendored
21 lines
607 B
Kotlin
Vendored
// WITH_RUNTIME
|
|
data class Data(val x: String, val y: Int)
|
|
|
|
suspend fun test() {
|
|
foo(Data("A", 1)) { (x_param, y_param) ->
|
|
"$x_param / $y_param"
|
|
}
|
|
}
|
|
|
|
suspend fun foo(data: Data, body: suspend (Data) -> Unit) {
|
|
body(data)
|
|
}
|
|
|
|
// METHOD : DataClassKt$test$2.invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
|
|
|
|
// VARIABLE : NAME=$dstr$x_param$y_param TYPE=LData; INDEX=2
|
|
// VARIABLE : NAME=x_param TYPE=Ljava/lang/String; INDEX=3
|
|
// VARIABLE : NAME=y_param TYPE=I INDEX=4
|
|
// VARIABLE : NAME=this TYPE=LDataClassKt$test$2; INDEX=0
|
|
// VARIABLE : NAME=$result TYPE=Ljava/lang/Object; INDEX=1
|