From 4d126096a1e8c44a427f09e7dc131f45db07beb8 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Thu, 31 Mar 2016 12:29:00 +0300 Subject: [PATCH] Invert MetadataProperties.withoutSideEffects to sideEffects --- .../backend/js/ast/metadata/metadataProperties.kt | 2 +- .../js/inline/clean/TemporaryVariableElimination.kt | 8 ++++---- .../jetbrains/kotlin/js/inline/util/collectUtils.kt | 2 ++ .../jetbrains/kotlin/js/translate/context/Namer.java | 10 +++++----- .../intrinsic/functions/factories/ArrayFIF.java | 2 +- .../kotlin/js/translate/utils/JsAstUtils.java | 4 ++-- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/js/js.dart-ast/src/com/google/dart/compiler/backend/js/ast/metadata/metadataProperties.kt b/js/js.dart-ast/src/com/google/dart/compiler/backend/js/ast/metadata/metadataProperties.kt index 245123a99f8..73300ee6a9a 100644 --- a/js/js.dart-ast/src/com/google/dart/compiler/backend/js/ast/metadata/metadataProperties.kt +++ b/js/js.dart-ast/src/com/google/dart/compiler/backend/js/ast/metadata/metadataProperties.kt @@ -39,7 +39,7 @@ var JsInvocation.typeCheck: TypeCheck? by MetadataProperty(default = null) var HasMetadata.synthetic: Boolean by MetadataProperty(default = false) -var HasMetadata.withoutSideEffects: Boolean by MetadataProperty(default = false) +var HasMetadata.sideEffects: Boolean by MetadataProperty(default = true) enum class TypeCheck { TYPEOF, diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TemporaryVariableElimination.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TemporaryVariableElimination.kt index 857d941cd4f..fa428dd841f 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TemporaryVariableElimination.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TemporaryVariableElimination.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.js.inline.clean import com.google.dart.compiler.backend.js.ast.* import com.google.dart.compiler.backend.js.ast.metadata.synthetic -import com.google.dart.compiler.backend.js.ast.metadata.withoutSideEffects +import com.google.dart.compiler.backend.js.ast.metadata.sideEffects import org.jetbrains.kotlin.js.inline.util.collectDefinedNames import org.jetbrains.kotlin.js.inline.util.collectFreeVariables import org.jetbrains.kotlin.js.translate.utils.JsAstUtils @@ -179,14 +179,14 @@ internal class TemporaryVariableElimination(private val root: JsStatement) { } super.visitNameRef(nameRef) - if (nameRef.qualifier != null && !nameRef.withoutSideEffects) { + if (nameRef.qualifier != null && nameRef.sideEffects) { sideEffectOccurred = true } } override fun visitInvocation(invocation: JsInvocation) { super.visitInvocation(invocation) - if (!invocation.withoutSideEffects) { + if (invocation.sideEffects) { sideEffectOccurred = true } } @@ -241,7 +241,7 @@ internal class TemporaryVariableElimination(private val root: JsStatement) { override fun visitArrayAccess(x: JsArrayAccess) { super.visitArrayAccess(x) - if (!x.withoutSideEffects) { + if (x.sideEffects) { sideEffectOccurred = true } } diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/util/collectUtils.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/util/collectUtils.kt index b705ab4473c..483f573af17 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/util/collectUtils.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/util/collectUtils.kt @@ -109,6 +109,8 @@ fun collectDefinedNames(scope: JsNode): Set { super.visitExpressionStatement(x) } + // Skip function expression, since it does not introduce name in scope of containing function. + // The only exception is function statement, that is handled with the code above. override fun visitFunction(x: JsFunction) { } private fun addNameIfNeeded(name: JsName) { diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java index c93f77828d2..b097bddedb7 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java @@ -304,7 +304,7 @@ public final class Namer { isTypeName = kotlinScope.declareName("isType"); modulesMap = kotlin("modules"); - MetadataProperties.setWithoutSideEffects((HasMetadata) modulesMap, true); + MetadataProperties.setSideEffects((HasMetadata) modulesMap, false); } @NotNull @@ -396,7 +396,7 @@ public final class Namer { public JsExpression isTypeOf(@NotNull JsExpression type) { JsInvocation invocation = new JsInvocation(kotlin("isTypeOf"), type); MetadataProperties.setTypeCheck(invocation, TypeCheck.TYPEOF); - MetadataProperties.setWithoutSideEffects(invocation, true); + MetadataProperties.setSideEffects(invocation, false); return invocation; } @@ -404,14 +404,14 @@ public final class Namer { public JsExpression isInstanceOf(@NotNull JsExpression type) { JsInvocation invocation = new JsInvocation(kotlin("isInstanceOf"), type); MetadataProperties.setTypeCheck(invocation, TypeCheck.INSTANCEOF); - MetadataProperties.setWithoutSideEffects(invocation, true); + MetadataProperties.setSideEffects(invocation, false); return invocation; } @NotNull public JsExpression isInstanceOf(@NotNull JsExpression instance, @NotNull JsExpression type) { JsInvocation result = new JsInvocation(kotlin(isTypeName), instance, type); - MetadataProperties.setWithoutSideEffects(result, true); + MetadataProperties.setSideEffects(result, false); return result; } @@ -463,7 +463,7 @@ public final class Namer { @NotNull public JsExpression getModuleReference(@NotNull JsStringLiteral moduleName) { JsArrayAccess result = new JsArrayAccess(modulesMap, moduleName); - MetadataProperties.setWithoutSideEffects(result, true); + MetadataProperties.setSideEffects(result, false); return result; } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.java index 7e9e97e8fa2..f6e3f242bcc 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.java @@ -98,7 +98,7 @@ public final class ArrayFIF extends CompositeFIF { assert arguments.size() == 1 : "Array get expression must have one argument."; JsExpression indexExpression = arguments.get(0); JsArrayAccess result = new JsArrayAccess(receiver, indexExpression); - MetadataProperties.setWithoutSideEffects(result, true); + MetadataProperties.setSideEffects(result, false); return result; } }; 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 d1874d36097..426104a19d3 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 @@ -490,14 +490,14 @@ public final class JsAstUtils { @NotNull public static JsNameRef fqn(@NotNull String identifier, @Nullable JsExpression qualifier) { JsNameRef result = new JsNameRef(identifier, qualifier); - MetadataProperties.setWithoutSideEffects(result, true); + MetadataProperties.setSideEffects(result, false); return result; } @NotNull public static JsNameRef fqn(@NotNull JsName identifier, @Nullable JsExpression qualifier) { JsNameRef result = new JsNameRef(identifier, qualifier); - MetadataProperties.setWithoutSideEffects(result, true); + MetadataProperties.setSideEffects(result, false); return result; }