From 82d37c0d5736ddc46d1ddce2accc02013f1db344 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Thu, 11 May 2017 19:59:11 +0300 Subject: [PATCH] Fix JS source maps for catch blocks --- .../js/test/JsLineNumberTestGenerated.java | 6 +++++ .../translate/expression/CatchTranslator.kt | 6 +++-- .../testData/lineNumbers/catch.kt | 22 +++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 js/js.translator/testData/lineNumbers/catch.kt diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java index fc1070b3e6c..5b3c913df56 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java @@ -36,6 +36,12 @@ public class JsLineNumberTestGenerated extends AbstractJsLineNumberTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("js/js.translator/testData/lineNumbers"), Pattern.compile("^([^_](.+))\\.kt$"), TargetBackend.JS, true); } + @TestMetadata("catch.kt") + public void testCatch() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/catch.kt"); + doTest(fileName); + } + @TestMetadata("chainedCall.kt") public void testChainedCall() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/chainedCall.kt"); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/CatchTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/CatchTranslator.kt index e7d601ec29d..1d4c3bacbf0 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/CatchTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/CatchTranslator.kt @@ -85,7 +85,9 @@ class CatchTranslator( initialCatchParameterRef: JsNameRef, catches: Iterator ): JsStatement { - if (!catches.hasNext()) return JsThrow(initialCatchParameterRef) + if (!catches.hasNext()) { + return JsThrow(initialCatchParameterRef) + } var nextContext = context @@ -117,7 +119,7 @@ class CatchTranslator( }!! val elseBlock = translateCatches(context, initialCatchParameterRef, catches) - return JsIf(typeCheck, thenBlock, elseBlock) + return JsIf(typeCheck.source(catch), thenBlock, elseBlock).apply { source = catch } } private fun translateCatchBody(context: TranslationContext, catchClause: KtCatchClause): JsBlock { diff --git a/js/js.translator/testData/lineNumbers/catch.kt b/js/js.translator/testData/lineNumbers/catch.kt new file mode 100644 index 00000000000..fe5ebf646c7 --- /dev/null +++ b/js/js.translator/testData/lineNumbers/catch.kt @@ -0,0 +1,22 @@ +fun box() { + try { + println("foo") + } + catch (e: RuntimeException) { + println("bar") + } + catch (e: Exception) { + println("baz") + } +} + +fun bar() { + try { + println("foo") + } + catch (e: dynamic) { + println("bar") + } +} + +// LINES: 3 5 6 8 9 * 15 18 \ No newline at end of file