From c335015c05617e2c332e0cc967c8c1594838640e Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Tue, 11 Jun 2019 11:29:52 +0200 Subject: [PATCH] Generate proper exception table Don't forget to split nested try blocks without finally block on generating finally blocks from outer ones. #KT-31923 InProgress --- .../kotlin/codegen/ExpressionCodegen.java | 128 +++++++++++------- .../backend/jvm/codegen/ExpressionCodegen.kt | 62 ++++++--- .../box/finally/breakAndOuterFinally.kt | 31 +++++ .../box/finally/continueAndOuterFinally.kt | 31 +++++ .../codegen/box/finally/kt31923_break.kt | 30 ++++ .../codegen/box/finally/kt31923_continue.kt | 30 ++++ .../codegen/box/finally/kt31923_return.kt | 27 ++++ .../codegen/box/finally/kt31923_wrong.kt | 28 ++++ .../finally/nestedFinallyAndNonFinallyTry.kt | 32 +++++ .../finally/nestedFinallyAndNonFinallyTry2.kt | 34 +++++ .../finally/nestedFinallyAndNonFinallyTry3.kt | 37 +++++ .../finally/nestedFinallyAndNonFinallyTry4.kt | 36 +++++ .../codegen/BlackBoxCodegenTestGenerated.java | 50 +++++++ .../LightAnalysisModeTestGenerated.java | 50 +++++++ .../ir/FirBlackBoxCodegenTestGenerated.java | 50 +++++++ .../ir/IrBlackBoxCodegenTestGenerated.java | 50 +++++++ ...otlinAgainstInlineKotlinTestGenerated.java | 20 +++ .../kotlin/config/LanguageVersionSettings.kt | 1 + .../IrJsCodegenBoxTestGenerated.java | 45 ++++++ .../semantics/JsCodegenBoxTestGenerated.java | 45 ++++++ 20 files changed, 752 insertions(+), 65 deletions(-) create mode 100644 compiler/testData/codegen/box/finally/breakAndOuterFinally.kt create mode 100644 compiler/testData/codegen/box/finally/continueAndOuterFinally.kt create mode 100644 compiler/testData/codegen/box/finally/kt31923_break.kt create mode 100644 compiler/testData/codegen/box/finally/kt31923_continue.kt create mode 100644 compiler/testData/codegen/box/finally/kt31923_return.kt create mode 100644 compiler/testData/codegen/box/finally/kt31923_wrong.kt create mode 100644 compiler/testData/codegen/box/finally/nestedFinallyAndNonFinallyTry.kt create mode 100644 compiler/testData/codegen/box/finally/nestedFinallyAndNonFinallyTry2.kt create mode 100644 compiler/testData/codegen/box/finally/nestedFinallyAndNonFinallyTry3.kt create mode 100644 compiler/testData/codegen/box/finally/nestedFinallyAndNonFinallyTry4.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index af73526cd7b..df2384b643f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -186,18 +186,20 @@ public class ExpressionCodegen extends KtVisitor impleme } } - static class FinallyBlockStackElement extends BlockStackElement { + static class TryBlockStackElement extends BlockStackElement { List