From 8ac8dbdab86a8dcf3183c913351ae2c4a9f634fc Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Tue, 9 Mar 2021 19:02:01 +0300 Subject: [PATCH] [JS IR] Type operator call pureness --- .../src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt | 6 ++++++ .../jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt index 3baabba0989..46645dc42dc 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt @@ -661,6 +661,12 @@ fun IrExpression?.isPure( if (valueDeclaration is IrVariable) !valueDeclaration.isVar else true } + is IrTypeOperatorCall -> + ( + operator == IrTypeOperator.INSTANCEOF || + operator == IrTypeOperator.REINTERPRET_CAST || + operator == IrTypeOperator.NOT_INSTANCEOF + ) && argument.isPure(anyVariable, checkFields, context) is IrCall -> if (context?.isSideEffectFree(this) == true) { for (i in 0 until valueArgumentsCount) { val valueArgument = getValueArgument(i) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt index e71a172659f..b27c605290b 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt @@ -61,7 +61,8 @@ class JsIrBackendContext( override fun isSideEffectFree(call: IrCall): Boolean = call.symbol in intrinsics.primitiveToLiteralConstructor.values || - call.symbol == intrinsics.arrayLiteral + call.symbol == intrinsics.arrayLiteral || + call.symbol == intrinsics.arrayConcat val devMode = configuration[JSConfigurationKeys.DEVELOPER_MODE] ?: false val errorPolicy = configuration[JSConfigurationKeys.ERROR_TOLERANCE_POLICY] ?: ErrorTolerancePolicy.DEFAULT