[JS BE] Fix DCE to let it remove constant properties

This commit is contained in:
Roman Artemev
2019-12-07 02:01:11 +03:00
committed by romanart
parent 2c94f590ca
commit 9871f8c579
3 changed files with 12 additions and 8 deletions
@@ -35,6 +35,10 @@ fun eliminateDeadDeclarations(
removeUselessDeclarations(module, usefulDeclarations) removeUselessDeclarations(module, usefulDeclarations)
} }
private fun IrField.isConstant(): Boolean {
return correspondingPropertySymbol?.owner?.isConst ?: false
}
private fun buildRoots(module: IrModuleFragment, context: JsIrBackendContext, mainFunction: IrSimpleFunction?): Iterable<IrDeclaration> { private fun buildRoots(module: IrModuleFragment, context: JsIrBackendContext, mainFunction: IrSimpleFunction?): Iterable<IrDeclaration> {
val rootDeclarations = val rootDeclarations =
(module.files + context.packageLevelJsModules + context.externalPackageFragment.values).flatMapTo(mutableListOf()) { file -> (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.isEffectivelyExternal()
|| it is IrField && it.correspondingPropertySymbol?.owner?.isExported(context) == true || it is IrField && it.correspondingPropertySymbol?.owner?.isExported(context) == true
|| it is IrSimpleFunction && 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 if (context.hasTests) rootDeclarations += context.testContainer
@@ -55,8 +55,8 @@ fun hashCode(obj: dynamic): Int {
} }
} }
private var POW_2_32 = 4294967296.0 private const val POW_2_32 = 4294967296.0
private var OBJECT_HASH_CODE_PROPERTY_NAME = "kotlinHashCodeValue$" private const val OBJECT_HASH_CODE_PROPERTY_NAME = "kotlinHashCodeValue$"
fun getObjectHashCode(obj: dynamic): Int { fun getObjectHashCode(obj: dynamic): Int {
if (!jsIn(OBJECT_HASH_CODE_PROPERTY_NAME, obj)) { if (!jsIn(OBJECT_HASH_CODE_PROPERTY_NAME, obj)) {
+5 -5
View File
@@ -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_ = 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_ = 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_ = 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) private val ZERO = fromInt(0)