From 4c0eb8fc317fa98348f0ca043b6e8bf47314fd56 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Wed, 9 Nov 2016 18:18:33 +0300 Subject: [PATCH] JS: prevent generation of excessive `this.$result` statements in coroutines --- .../kotlin/js/translate/context/TemporaryVariable.java | 4 +++- .../org/jetbrains/kotlin/js/translate/utils/JsAstUtils.java | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TemporaryVariable.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TemporaryVariable.java index 473124fa327..5d4c6b0056e 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TemporaryVariable.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TemporaryVariable.java @@ -45,7 +45,9 @@ public class TemporaryVariable { @NotNull public JsNameRef reference() { - return variableName.makeRef(); + JsNameRef result = variableName.makeRef(); + MetadataProperties.setSynthetic(result, true); + return result; } @NotNull diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsAstUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsAstUtils.java index 6d95a00bb9b..5049e9ba060 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsAstUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsAstUtils.java @@ -53,8 +53,9 @@ public final class JsAstUtils { assert (jsNode instanceof JsExpression) || (jsNode instanceof JsStatement) : "Unexpected node of type: " + jsNode.getClass().toString(); if (jsNode instanceof JsExpression) { - JsExpressionStatement statement = new JsExpressionStatement((JsExpression) jsNode); - if (jsNode instanceof JsNullLiteral) { + JsExpression expression = (JsExpression) jsNode; + JsExpressionStatement statement = new JsExpressionStatement(expression); + if (expression instanceof JsNullLiteral || MetadataProperties.getSynthetic(expression)) { MetadataProperties.setSynthetic(statement, true); } return statement;