From d034ce106e348946be2d49c994fd3792f14a1692 Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Mon, 4 Feb 2019 18:59:21 +0300 Subject: [PATCH] [JS IR BE] Implement `isPrimitiveArray` with pure Ir --- .../common/utils/kotlinTypeBasedUtils.kt | 3 -- .../jetbrains/kotlin/ir/util/IrTypeUtils.kt | 2 ++ .../backend/js/lower/AutoboxingTransformer.kt | 1 - ...MoveBodilessDeclarationsToSeparatePlace.kt | 31 +++++++++++-------- .../backend/js/lower/TypeOperatorLowering.kt | 1 - 5 files changed, 20 insertions(+), 18 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/utils/kotlinTypeBasedUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/utils/kotlinTypeBasedUtils.kt index a16da585e9d..c59ee639a8b 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/utils/kotlinTypeBasedUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/utils/kotlinTypeBasedUtils.kt @@ -17,9 +17,6 @@ import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf // TODO: implement pure Ir-based function (see IrTypeUtils.kt) -@Deprecated("Use pure Ir helper") -fun IrType.isPrimitiveArray() = KotlinBuiltIns.isPrimitiveArray(toKotlinType()) - @Deprecated("Use pure Ir helper") fun IrType.getPrimitiveArrayElementType() = KotlinBuiltIns.getPrimitiveArrayElementType(toKotlinType()) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/util/IrTypeUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/util/IrTypeUtils.kt index 2715b03630d..239704b8fa7 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/util/IrTypeUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/util/IrTypeUtils.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.ir.util +import org.jetbrains.kotlin.builtins.KotlinBuiltIns.FQ_NAMES import org.jetbrains.kotlin.builtins.UnsignedTypes import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.ir.declarations.IrClass @@ -91,3 +92,4 @@ private inline fun IrType.isTypeFromKotlinPackage(namePredicate: (Name) -> Boole } else return false } +fun IrType.isPrimitiveArray() = isTypeFromKotlinPackage { it in FQ_NAMES.primitiveArrayTypeShortNames } \ No newline at end of file diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/AutoboxingTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/AutoboxingTransformer.kt index 97dd540c35f..1ab4ec4b049 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/AutoboxingTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/AutoboxingTransformer.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.ir.backend.js.lower import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.backend.common.lower.AbstractValueUsageTransformer -import org.jetbrains.kotlin.backend.common.utils.isPrimitiveArray import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder import org.jetbrains.kotlin.ir.backend.js.utils.realOverrideTarget diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MoveBodilessDeclarationsToSeparatePlace.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MoveBodilessDeclarationsToSeparatePlace.kt index 459aa8ad6a0..32e9f442218 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MoveBodilessDeclarationsToSeparatePlace.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MoveBodilessDeclarationsToSeparatePlace.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol import org.jetbrains.kotlin.ir.util.isEffectivelyExternal import org.jetbrains.kotlin.ir.util.transformFlat +import org.jetbrains.kotlin.ir.util.kotlinPackageFqn import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name @@ -45,19 +46,7 @@ fun moveBodilessDeclarationsToSeparatePlace(context: JsIrBackendContext, module: fun isBuiltInClass(declaration: IrDeclaration): Boolean = declaration is IrClass && declaration.name in builtInClasses - val packageFragment = IrExternalPackageFragmentImpl(object : IrExternalPackageFragmentSymbol { - override val descriptor: PackageFragmentDescriptor - get() = error("Operation is unsupported") - - private var _owner: IrExternalPackageFragment? = null - override val owner get() = _owner!! - - override val isBound get() = _owner != null - - override fun bind(owner: IrExternalPackageFragment) { - _owner = owner - } - }, FqName.ROOT) + val packageFragmentMap = mutableMapOf() fun collectExternalClasses(container: IrDeclarationContainer, includeCurrentLevel: Boolean): List { val externalClasses = @@ -82,6 +71,22 @@ fun moveBodilessDeclarationsToSeparatePlace(context: JsIrBackendContext, module: val it = irFile.declarations.iterator() + val packageFragment = packageFragmentMap.getOrPut(irFile.fqName) { + IrExternalPackageFragmentImpl(object : IrExternalPackageFragmentSymbol { + override val descriptor: PackageFragmentDescriptor + get() = error("Operation is unsupported") + + private var _owner: IrExternalPackageFragment? = null + override val owner get() = _owner!! + + override val isBound get() = _owner != null + + override fun bind(owner: IrExternalPackageFragment) { + _owner = owner + } + }, irFile.fqName) + } + while (it.hasNext()) { val d = it.next() diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TypeOperatorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TypeOperatorLowering.kt index a3b08e1cbd4..0dea3d84aba 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TypeOperatorLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TypeOperatorLowering.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.ir.backend.js.lower import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.backend.common.utils.getPrimitiveArrayElementType -import org.jetbrains.kotlin.backend.common.utils.isPrimitiveArray import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.backend.js.ir.JsIrArithBuilder