diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/Dce.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/Dce.kt index dbacb5ea384..acc9235204f 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/Dce.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/Dce.kt @@ -35,6 +35,10 @@ fun eliminateDeadDeclarations( removeUselessDeclarations(module, usefulDeclarations) } +private fun IrField.isConstant(): Boolean { + return correspondingPropertySymbol?.owner?.isConst ?: false +} + private fun buildRoots(module: IrModuleFragment, context: JsIrBackendContext, mainFunction: IrSimpleFunction?): Iterable { val rootDeclarations = (module.files + context.packageLevelJsModules + context.externalPackageFragment.values).flatMapTo(mutableListOf()) { file -> @@ -44,7 +48,7 @@ private fun buildRoots(module: IrModuleFragment, context: JsIrBackendContext, ma || it.isEffectivelyExternal() || it is IrField && it.correspondingPropertySymbol?.owner?.isExported(context) == true || it is IrSimpleFunction && it.correspondingPropertySymbol?.owner?.isExported(context) == true - } + }.filter { !(it is IrField && it.isConstant() && !it.isExported(context)) } } if (context.hasTests) rootDeclarations += context.testContainer diff --git a/libraries/stdlib/js-ir/runtime/coreRuntime.kt b/libraries/stdlib/js-ir/runtime/coreRuntime.kt index 6aea2b16a27..3d178f3de4e 100644 --- a/libraries/stdlib/js-ir/runtime/coreRuntime.kt +++ b/libraries/stdlib/js-ir/runtime/coreRuntime.kt @@ -55,8 +55,8 @@ fun hashCode(obj: dynamic): Int { } } -private var POW_2_32 = 4294967296.0 -private var OBJECT_HASH_CODE_PROPERTY_NAME = "kotlinHashCodeValue$" +private const val POW_2_32 = 4294967296.0 +private const val OBJECT_HASH_CODE_PROPERTY_NAME = "kotlinHashCodeValue$" fun getObjectHashCode(obj: dynamic): Int { if (!jsIn(OBJECT_HASH_CODE_PROPERTY_NAME, obj)) { diff --git a/libraries/stdlib/js-ir/runtime/longjs.kt b/libraries/stdlib/js-ir/runtime/longjs.kt index 4a19044daab..f374bc40c0c 100644 --- a/libraries/stdlib/js-ir/runtime/longjs.kt +++ b/libraries/stdlib/js-ir/runtime/longjs.kt @@ -358,18 +358,18 @@ internal fun fromNumber(value: Double): Long { } } -private val TWO_PWR_16_DBL_ = (1 shl 16).toDouble() +private const val TWO_PWR_16_DBL_ = (1 shl 16).toDouble() -private val TWO_PWR_24_DBL_ = (1 shl 24).toDouble() +private const val TWO_PWR_24_DBL_ = (1 shl 24).toDouble() //private val TWO_PWR_32_DBL_ = TWO_PWR_16_DBL_ * TWO_PWR_16_DBL_ -private val TWO_PWR_32_DBL_ = (1 shl 16).toDouble() * (1 shl 16).toDouble() +private const val TWO_PWR_32_DBL_ = (1 shl 16).toDouble() * (1 shl 16).toDouble() //private val TWO_PWR_64_DBL_ = TWO_PWR_32_DBL_ * TWO_PWR_32_DBL_ -private val TWO_PWR_64_DBL_ = ((1 shl 16).toDouble() * (1 shl 16).toDouble()) * ((1 shl 16).toDouble() * (1 shl 16).toDouble()) +private const val TWO_PWR_64_DBL_ = ((1 shl 16).toDouble() * (1 shl 16).toDouble()) * ((1 shl 16).toDouble() * (1 shl 16).toDouble()) //private val TWO_PWR_63_DBL_ = TWO_PWR_64_DBL_ / 2 -private val TWO_PWR_63_DBL_ = (((1 shl 16).toDouble() * (1 shl 16).toDouble()) * ((1 shl 16).toDouble() * (1 shl 16).toDouble())) / 2 +private const val TWO_PWR_63_DBL_ = (((1 shl 16).toDouble() * (1 shl 16).toDouble()) * ((1 shl 16).toDouble() * (1 shl 16).toDouble())) / 2 private val ZERO = fromInt(0)