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:
+35
@@ -0,0 +1,35 @@
|
||||
public inline fun fails(block: () -> Unit): Throwable? {
|
||||
var thrown: Throwable? = null
|
||||
try {
|
||||
block()
|
||||
} catch (e: Throwable) {
|
||||
thrown = e
|
||||
}
|
||||
if (thrown == null)
|
||||
throw Exception("Expected an exception to be thrown")
|
||||
return thrown
|
||||
}
|
||||
|
||||
public inline fun throwIt(msg: String) {
|
||||
throw Exception(msg)
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
fails {
|
||||
throwIt("oops!")
|
||||
}
|
||||
|
||||
var x = 0
|
||||
try {
|
||||
fails {
|
||||
x = 1
|
||||
}
|
||||
}
|
||||
catch (e: Exception) {
|
||||
x = 2
|
||||
}
|
||||
|
||||
if (x != 2) return "Failed: x==$x"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user