Files
kotlin/compiler/testData/codegen/box/controlStructures/tryCatchInExpressions/complexChain.kt
Dmitry Petrov 4e42cc6b81 Save/restore stack in try-expressions (and statements).
Parse TryCatchBlockNode's in generated bytecode, infer stack save/restore points.
Save stack to local variables before 'try'.
Restore stack after the beginning of try-block, catch-block, and default handler.
Integrate before/after inline markers rewriting (otherwise it'll break our stacks).

 #KT-3309 Fixed
2015-07-07 12:16:29 +03:00

53 lines
1.4 KiB
Kotlin
Vendored

fun cleanup() {}
inline fun concat(x: String, y: String): String = x + y
inline fun throws() {
try {
throw Exception()
}
finally {
cleanup()
}
}
inline fun first(x: String, y: String): String = x
fun box(): String =
"" + concat(
try { "" } finally { "0" },
"" + concat(
first(
try {
try {
"O"
}
finally {
"1"
}
}
catch (e: Exception) {
throw e
}
finally {
cleanup()
},
"2"
),
first(
try {
throws()
throw Exception()
"3"
}
catch (e: Exception) {
"K"
}
finally {
cleanup()
},
"4"
)
)
)