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:
+14
@@ -0,0 +1,14 @@
|
||||
inline fun <T> tryOrElse(f1: () -> T, f2: () -> T): T =
|
||||
try { f1() } catch (e: Exception) { f2() }
|
||||
|
||||
fun testIt() =
|
||||
"abc" +
|
||||
tryOrElse({ try { "def" } catch(e: Exception) { "oops!" } }, { "hmmm..." }) +
|
||||
"ghi"
|
||||
|
||||
fun box(): String {
|
||||
val test = testIt()
|
||||
if (test != "abcdefghi") return "Failed, test==$test"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user