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
This commit is contained in:
+25
@@ -0,0 +1,25 @@
|
||||
inline fun test(s: () -> Int): Int =
|
||||
try {
|
||||
val i = s()
|
||||
i + 10
|
||||
}
|
||||
finally {
|
||||
0
|
||||
}
|
||||
|
||||
fun box() : String {
|
||||
test {
|
||||
try {
|
||||
val p = 1
|
||||
return "OK"
|
||||
}
|
||||
catch(e: Exception) {
|
||||
-2
|
||||
}
|
||||
finally {
|
||||
-3
|
||||
}
|
||||
}
|
||||
|
||||
return "Failed"
|
||||
}
|
||||
Reference in New Issue
Block a user