From ad89e5906f1b12f66da37a61ad6421813bf12e60 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Fri, 5 May 2017 23:03:59 +0300 Subject: [PATCH] Fix JS source maps for increment expression used as statement --- .../js/test/JsLineNumberTestGenerated.java | 6 ++++++ .../translate/operation/IncrementTranslator.java | 16 +++++++++------- .../testData/lineNumbers/increment.kt | 11 +++++++++++ 3 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 js/js.translator/testData/lineNumbers/increment.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 52757a22525..c137a28c26d 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 @@ -54,6 +54,12 @@ public class JsLineNumberTestGenerated extends AbstractJsLineNumberTest { doTest(fileName); } + @TestMetadata("increment.kt") + public void testIncrement() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/increment.kt"); + doTest(fileName); + } + @TestMetadata("inlineReturn.kt") public void testInlineReturn() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/inlineReturn.kt"); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/operation/IncrementTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/operation/IncrementTranslator.java index db9a759da05..c058f89bef3 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/operation/IncrementTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/operation/IncrementTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. + * Copyright 2010-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -90,10 +90,11 @@ public abstract class IncrementTranslator extends AbstractTranslator { private JsExpression asPrefix() { // code fragment: expr(a++) // generate: expr(a = a.inc(), a) - JsExpression getExpression = accessTranslator.translateAsGet(); - JsExpression reassignment = variableReassignment(context().innerBlock(accessBlock), getExpression); + JsExpression getExpression = accessTranslator.translateAsGet().source(expression); + JsExpression reassignment = variableReassignment(context().innerBlock(accessBlock), getExpression) + .source(expression); accessBlock.getStatements().add(JsAstUtils.asSyntheticStatement(reassignment)); - JsExpression getNewValue = accessTranslator.translateAsGet(); + JsExpression getNewValue = accessTranslator.translateAsGet().source(expression); JsExpression result; if (accessBlock.getStatements().size() == 1) { @@ -112,10 +113,11 @@ public abstract class IncrementTranslator extends AbstractTranslator { private JsExpression asPostfix() { // code fragment: expr(a++) // generate: expr( (t1 = a, t2 = t1, a = t1.inc(), t2) ) - TemporaryVariable t1 = context().declareTemporary(accessTranslator.translateAsGet()); + TemporaryVariable t1 = context().declareTemporary(accessTranslator.translateAsGet().source(expression)); accessBlock.getStatements().add(t1.assignmentStatement()); - JsExpression variableReassignment = variableReassignment(context().innerBlock(accessBlock), t1.reference()); - accessBlock.getStatements().add(JsAstUtils.asSyntheticStatement(variableReassignment)); + JsExpression variableReassignment = variableReassignment(context().innerBlock(accessBlock), t1.reference()) + .source(expression); + accessBlock.getStatements().add(JsAstUtils.asSyntheticStatement(variableReassignment.source(expression))); JsExpression result; if (accessBlock.getStatements().size() == 2) { diff --git a/js/js.translator/testData/lineNumbers/increment.kt b/js/js.translator/testData/lineNumbers/increment.kt new file mode 100644 index 00000000000..e57a770fee7 --- /dev/null +++ b/js/js.translator/testData/lineNumbers/increment.kt @@ -0,0 +1,11 @@ +fun foo(x: Int) { + var y = x + y++ + println(y) + ++y + println(y) + y += 2 + println(y) +} + +// LINES: 2 3 4 5 6 7 8 \ No newline at end of file