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:
+17
@@ -0,0 +1,17 @@
|
||||
fun idiv(a: Int, b: Int): Int =
|
||||
if (b == 0) throw Exception("Division by zero") else a / b
|
||||
|
||||
fun foo(): Int {
|
||||
var sum = 0
|
||||
for (i in -10 .. 10) {
|
||||
sum += try { idiv(100, i) } catch (e: Exception) { continue }
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val test = foo()
|
||||
if (test != 0) return "Failed, test=$test"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user