From 12d2a02d2224c285dfa455a1e004caaf3895620e Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 23 Jul 2020 23:03:01 +0200 Subject: [PATCH] JS IR: drop JsIrDeclarationBuilder Move buildValueParameter back to JsIrBuilder, and use common IR builders directly where buildFunction was called. --- .../ir/backend/js/JsCommonBackendContext.kt | 3 - .../ir/backend/js/JsIrBackendContext.kt | 11 ++- .../kotlin/ir/backend/js/ir/IrBuilder.kt | 14 +++- .../backend/js/ir/JsIrDeclarationBuilder.kt | 81 ------------------- .../js/lower/BlockDecomposerLowering.kt | 16 ++-- .../backend/js/lower/BridgesConstruction.kt | 26 +++--- ...AddInternalParametersToConstructorPhase.kt | 20 ++--- .../js/lower/ES6ConstructorLowering.kt | 13 +-- .../ir/backend/js/lower/EnumClassLowering.kt | 31 +++---- .../ir/backend/js/lower/ObjectLowering.kt | 12 +-- .../backend/js/lower/SecondaryCtorLowering.kt | 41 +++++----- .../ir/backend/js/lower/TestGenerator.kt | 9 ++- .../kotlin/backend/wasm/WasmBackendContext.kt | 2 - 13 files changed, 111 insertions(+), 168 deletions(-) delete mode 100644 compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/JsIrDeclarationBuilder.kt diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsCommonBackendContext.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsCommonBackendContext.kt index 970b6b8a6f8..22b3ca58aec 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsCommonBackendContext.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsCommonBackendContext.kt @@ -6,13 +6,10 @@ package org.jetbrains.kotlin.ir.backend.js import org.jetbrains.kotlin.backend.common.CommonBackendContext -import org.jetbrains.kotlin.ir.backend.js.ir.JsIrDeclarationBuilder interface JsCommonBackendContext : CommonBackendContext { override val mapping: JsMapping - val jsIrDeclarationBuilder: JsIrDeclarationBuilder - val es6mode: Boolean get() = false } 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 ab5dafc91a9..e8870b80643 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 @@ -14,9 +14,10 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.ir.* -import org.jetbrains.kotlin.ir.backend.js.ir.JsIrDeclarationBuilder +import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder import org.jetbrains.kotlin.ir.backend.js.lower.JsInnerClassesSupport import org.jetbrains.kotlin.ir.backend.js.utils.OperatorNames +import org.jetbrains.kotlin.ir.builders.declarations.addFunction import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl @@ -55,7 +56,6 @@ class JsIrBackendContext( override var inVerbosePhase: Boolean = false override val irFactory: IrFactory = IrFactoryImpl - override val jsIrDeclarationBuilder: JsIrDeclarationBuilder = JsIrDeclarationBuilder(irFactory) val devMode = configuration[JSConfigurationKeys.DEVELOPER_MODE] ?: false @@ -127,9 +127,12 @@ class JsIrBackendContext( fun createTestContainerFun(module: IrModuleFragment): IrSimpleFunction { return testContainerFuns.getOrPut(module) { val file = syntheticFile("tests", module) - jsIrDeclarationBuilder.buildFunction("test fun", irBuiltIns.unitType, file).apply { + irFactory.addFunction(file) { + name = Name.identifier("test fun") + returnType = irBuiltIns.unitType + origin = JsIrBuilder.SYNTHESIZED_DECLARATION + }.apply { body = irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET, emptyList()) - file.declarations += this } } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/IrBuilder.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/IrBuilder.kt index e7ebac976bf..8f568fc2ce3 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/IrBuilder.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/IrBuilder.kt @@ -7,11 +7,9 @@ package org.jetbrains.kotlin.ir.backend.js.ir import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET +import org.jetbrains.kotlin.ir.builders.declarations.buildValueParameter import org.jetbrains.kotlin.ir.builders.declarations.buildVariable -import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl -import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent -import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction -import org.jetbrains.kotlin.ir.declarations.IrVariable +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.* @@ -46,6 +44,14 @@ object JsIrBuilder { fun buildThrow(type: IrType, value: IrExpression) = IrThrowImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, value) + fun buildValueParameter(parent: IrFunction, name: String, index: Int, type: IrType): IrValueParameter = + buildValueParameter(parent) { + this.origin = SYNTHESIZED_DECLARATION + this.name = Name.identifier(name) + this.index = index + this.type = type + } + fun buildGetObjectValue(type: IrType, classSymbol: IrClassSymbol) = IrGetObjectValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, classSymbol) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/JsIrDeclarationBuilder.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/JsIrDeclarationBuilder.kt deleted file mode 100644 index 50f08219489..00000000000 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/JsIrDeclarationBuilder.kt +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.ir.backend.js.ir - -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.Visibilities -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.ir.builders.declarations.buildFun -import org.jetbrains.kotlin.ir.builders.declarations.buildValueParameter -import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.name.Name - -// This is a temporary class for migration to IrFactory. Usages should be refactored to use the factory directly once possible, -// since it doesn't add sufficient value on its own. -class JsIrDeclarationBuilder(private val irFactory: IrFactory) { - fun buildValueParameter(parent: IrFunction, name: String, index: Int, type: IrType): IrValueParameter = - buildValueParameter(parent) { - this.origin = JsIrBuilder.SYNTHESIZED_DECLARATION - this.name = Name.identifier(name) - this.index = index - this.type = type - } - - fun buildFunction( - name: String, - returnType: IrType, - parent: IrDeclarationParent, - visibility: Visibility = Visibilities.PUBLIC, - modality: Modality = Modality.FINAL, - isInline: Boolean = false, - isExternal: Boolean = false, - isTailrec: Boolean = false, - isSuspend: Boolean = false, - isExpect: Boolean = false, - isOperator: Boolean = false, - isInfix: Boolean = false, - isFakeOverride: Boolean = false, - origin: IrDeclarationOrigin = JsIrBuilder.SYNTHESIZED_DECLARATION, - ): IrSimpleFunction = - buildFunction( - Name.identifier(name), returnType, parent, visibility, modality, - isInline, isExternal, isTailrec, isSuspend, isExpect, isOperator, isInfix, isFakeOverride, origin - ) - - fun buildFunction( - name: Name, - returnType: IrType, - parent: IrDeclarationParent, - visibility: Visibility = Visibilities.PUBLIC, - modality: Modality = Modality.FINAL, - isInline: Boolean = false, - isExternal: Boolean = false, - isTailrec: Boolean = false, - isSuspend: Boolean = false, - isExpect: Boolean = false, - isOperator: Boolean = false, - isInfix: Boolean = false, - isFakeOverride: Boolean = false, - origin: IrDeclarationOrigin = JsIrBuilder.SYNTHESIZED_DECLARATION, - ): IrSimpleFunction = irFactory.buildFun { - this.origin = origin - this.name = name - this.visibility = visibility - this.modality = modality - this.returnType = returnType - this.isInline = isInline - this.isExternal = isExternal - this.isTailrec = isTailrec - this.isSuspend = isSuspend - this.isOperator = isOperator - this.isInfix = isInfix - this.isExpect = isExpect - this.isFakeOverride = isFakeOverride - }.also { - it.parent = parent - } -} diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt index afa71cf3e63..d52863b0af6 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext 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.isPure +import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* @@ -25,6 +26,7 @@ import org.jetbrains.kotlin.ir.util.transformFlat import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.utils.addIfNotNull class JsBlockDecomposerLowering(val context: JsIrBackendContext) : AbstractBlockDecomposerLowering(context) { @@ -51,12 +53,14 @@ abstract class AbstractBlockDecomposerLowering( } is IrField -> { container.initializer?.apply { - val initFunction = context.jsIrDeclarationBuilder.buildFunction( - container.name.asString() + "\$init\$", - container.type, - container.parent, - Visibilities.PRIVATE - ) + val initFunction = context.irFactory.buildFun { + name = Name.identifier(container.name.asString() + "\$init\$") + returnType = container.type + visibility = Visibilities.PRIVATE + origin = JsIrBuilder.SYNTHESIZED_DECLARATION + }.apply { + parent = container.parent + } val newBody = toBlockBody(initFunction) newBody.patchDeclarationParents(initFunction) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt index 8176b0a314e..67d066d6ab4 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.ir.backend.js.JsLoweredDeclarationOrigin import org.jetbrains.kotlin.ir.backend.js.utils.functionSignature import org.jetbrains.kotlin.ir.backend.js.utils.getJsName import org.jetbrains.kotlin.ir.builders.* +import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.types.IrType @@ -117,20 +118,17 @@ class BridgesConstruction(val context: JsCommonBackendContext) : DeclarationTran IrDeclarationOrigin.BRIDGE // TODO: Support offsets for debug info - val irFunction = context.jsIrDeclarationBuilder.buildFunction( - bridge.name, - bridge.returnType, - function.parent, - bridge.visibility, - Modality.FINAL, - isInline = bridge.isInline, - isExternal = bridge.isExternal, - isTailrec = bridge.isTailrec, - isSuspend = bridge.isSuspend, - isExpect = bridge.isExpect, - isFakeOverride = false, - origin = origin - ).apply { + val irFunction = context.irFactory.buildFun { + updateFrom(bridge) + this.startOffset = UNDEFINED_OFFSET + this.endOffset = UNDEFINED_OFFSET + this.name = bridge.name + this.returnType = bridge.returnType + this.modality = Modality.FINAL + this.isFakeOverride = false + this.origin = origin + }.apply { + parent = function.parent copyTypeParametersFrom(bridge) copyReceiverParametersFrom(bridge) valueParameters += bridge.valueParameters.map { p -> p.copyTo(this) } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6AddInternalParametersToConstructorPhase.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6AddInternalParametersToConstructorPhase.kt index 4fb25701bf3..b4dd9231ba0 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6AddInternalParametersToConstructorPhase.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6AddInternalParametersToConstructorPhase.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder import org.jetbrains.kotlin.ir.backend.js.lower.PrimaryConstructorLowering.SYNTHETIC_PRIMARY_CONSTRUCTOR import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter +import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl @@ -24,6 +25,7 @@ import org.jetbrains.kotlin.ir.util.defaultType import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.util.statements import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid +import org.jetbrains.kotlin.name.Name /** * Add ES6_INIT_BOX_PARAMETER for each constructor (except constructors @@ -104,16 +106,16 @@ class ES6AddInternalParametersToConstructorPhase(val context: JsIrBackendContext private fun buildInitFunction(constructor: IrConstructor, irClass: IrClass): IrSimpleFunction { val functionName = "${irClass.name}_init" - return context.jsIrDeclarationBuilder.buildFunction( - functionName, - context.irBuiltIns.unitType, - irClass, - Visibilities.PROTECTED, - Modality.FINAL, - constructor.isInline, - constructor.isExternal, + return context.irFactory.buildFun { + name = Name.identifier(functionName) + returnType = context.irBuiltIns.unitType + visibility = Visibilities.PROTECTED + modality = Modality.FINAL + isInline = constructor.isInline + isExternal = constructor.isExternal origin = ES6_SYNTHETIC_PRIMARY_INIT_FUNCTION - ).apply { + }.apply { + parent = irClass addValueParameter("\$this\$", context.dynamicType) body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET, constructor.body?.statements.orEmpty()) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6ConstructorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6ConstructorLowering.kt index 5bd64f10c1a..ff2028ea3bd 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6ConstructorLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6ConstructorLowering.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.backend.js.lower.ES6AddInternalParametersToConstr import org.jetbrains.kotlin.ir.backend.js.lower.ES6AddInternalParametersToConstructorPhase.ES6_RESULT_TYPE_PARAMETER import org.jetbrains.kotlin.ir.backend.js.lower.PrimaryConstructorLowering.SYNTHETIC_PRIMARY_CONSTRUCTOR import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter +import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl @@ -25,6 +26,7 @@ import org.jetbrains.kotlin.ir.types.isAny import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.name.Name object ES6_THIS_VARIABLE_ORIGIN : IrDeclarationOriginImpl("ES6_THIS_VARIABLE_ORIGIN") @@ -539,11 +541,12 @@ private fun getSuperCall(constructor: IrConstructor): IrDelegatingConstructorCal } private fun changeIrConstructorToIrFunction(context: JsIrBackendContext, container: IrConstructor) { - val newConstructor = context.jsIrDeclarationBuilder.buildFunction( - "${container.parentAsClass.name}_constructor", - container.returnType, - container.parent - ).apply { + val newConstructor = context.irFactory.buildFun { + name = Name.identifier("${container.parentAsClass.name}_constructor") + returnType = container.returnType + origin = JsIrBuilder.SYNTHESIZED_DECLARATION + }.apply { + parent = container.parent container.valueParameters.forEach { param -> addValueParameter(param.name.asString(), param.type, param.origin) } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt index 94ee7eb442b..1cdc682116a 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt @@ -19,11 +19,11 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder -import org.jetbrains.kotlin.ir.backend.js.ir.JsIrDeclarationBuilder import org.jetbrains.kotlin.ir.backend.js.utils.toJsArrayLiteral import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor import org.jetbrains.kotlin.ir.builders.declarations.buildField +import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl @@ -120,8 +120,8 @@ class EnumClassConstructorLowering(val context: JsCommonBackendContext) : Declar returnType = enumConstructor.returnType }.apply { parent = enumClass - valueParameters += context.jsIrDeclarationBuilder.buildValueParameter(this, "name", 0, context.irBuiltIns.stringType) - valueParameters += context.jsIrDeclarationBuilder.buildValueParameter(this, "ordinal", 1, context.irBuiltIns.intType) + valueParameters += JsIrBuilder.buildValueParameter(this, "name", 0, context.irBuiltIns.stringType) + valueParameters += JsIrBuilder.buildValueParameter(this, "ordinal", 1, context.irBuiltIns.intType) copyParameterDeclarationsFrom(enumConstructor) val newConstructor = this @@ -398,7 +398,12 @@ class EnumClassCreateInitializerLowering(val context: JsIrBackendContext) : Decl } private fun createInitEntryInstancesFun(irClass: IrClass, entryInstancesInitializedField: IrField): IrSimpleFunction = - context.jsIrDeclarationBuilder.buildFunction(irClass, "${irClass.name.identifier}_initEntries", context.irBuiltIns.unitType).also { + context.irFactory.buildFun { + name = Name.identifier("${irClass.name.identifier}_initEntries") + returnType = context.irBuiltIns.unitType + origin = JsIrBuilder.SYNTHESIZED_DECLARATION + }.also { + it.parent = irClass it.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { statements += context.createIrBuilder(it.symbol).irBlockBody(it) { +irIfThen(irGetField(null, entryInstancesInitializedField), irReturnUnit()) @@ -414,12 +419,6 @@ class EnumClassCreateInitializerLowering(val context: JsIrBackendContext) : Decl } } -private fun JsIrDeclarationBuilder.buildFunction( - irClass: IrClass, - name: String, - returnType: IrType -): IrSimpleFunction = buildFunction(name, returnType, irClass) - class EnumEntryCreateGetInstancesFunsLowering(val context: JsIrBackendContext): DeclarationTransformer { private var IrEnumEntry.correspondingField by context.mapping.enumEntryToCorrespondingField @@ -449,11 +448,13 @@ class EnumEntryCreateGetInstancesFunsLowering(val context: JsIrBackendContext): irClass: IrClass, enumEntry: IrEnumEntry, initEntryInstancesFun: IrSimpleFunction ): IrSimpleFunction = context.mapping.enumEntryToGetInstanceFun.getOrPut(enumEntry) { - context.jsIrDeclarationBuilder.buildFunction( - irClass, - createEntryAccessorName(irClass.name.identifier, enumEntry), - enumEntry.getType(irClass) - ) + context.irFactory.buildFun { + name = Name.identifier(createEntryAccessorName(irClass.name.identifier, enumEntry)) + returnType = enumEntry.getType(irClass) + origin = JsIrBuilder.SYNTHESIZED_DECLARATION + }.apply { + parent = irClass + } }.also { it.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { statements += context.createIrBuilder(it.symbol).irBlockBody(it) { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ObjectLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ObjectLowering.kt index 96f0129fa7d..778b71d466c 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ObjectLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ObjectLowering.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.ir.backend.js.JsLoweredDeclarationOrigin import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.buildField +import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrDeclaration @@ -111,10 +112,11 @@ class ObjectUsageLowering( private fun JsCommonBackendContext.getOrCreateGetInstanceFunction(obj: IrClass) = mapping.objectToGetInstanceFunction.getOrPut(obj) { - jsIrDeclarationBuilder.buildFunction( - obj.name.asString() + "_getInstance", - returnType = obj.defaultType, - parent = obj.parent, + irFactory.buildFun { + name = Name.identifier(obj.name.asString() + "_getInstance") + returnType = obj.defaultType origin = JsLoweredDeclarationOrigin.OBJECT_GET_INSTANCE_FUNCTION - ) + }.apply { + parent = obj.parent + } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt index d0fe4e2b3d8..dc381c0f11c 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder +import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl @@ -33,6 +34,7 @@ import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid +import org.jetbrains.kotlin.name.Name class SecondaryConstructorLowering(val context: JsIrBackendContext) : DeclarationTransformer { @@ -167,19 +169,20 @@ private fun JsIrBackendContext.buildInitDeclaration(constructor: IrConstructor, val constructorName = "${irClass.name}_init" val functionName = "${constructorName}_\$Init\$" - return jsIrDeclarationBuilder.buildFunction( - functionName, - type, - constructor.parent, - Visibilities.INTERNAL, - Modality.FINAL, - constructor.isInline, - constructor.isExternal - ).also { + return irFactory.buildFun { + name = Name.identifier(functionName) + returnType = type + visibility = Visibilities.INTERNAL + modality = Modality.FINAL + isInline = constructor.isInline + isExternal = constructor.isExternal + origin = JsIrBuilder.SYNTHESIZED_DECLARATION + }.also { + it.parent = constructor.parent it.copyTypeParametersFrom(constructor.parentAsClass) it.valueParameters = constructor.valueParameters.map { p -> p.copyTo(it) } - it.valueParameters += jsIrDeclarationBuilder.buildValueParameter(it, "\$this", constructor.valueParameters.size, type) + it.valueParameters += JsIrBuilder.buildValueParameter(it, "\$this", constructor.valueParameters.size, type) } } @@ -188,15 +191,15 @@ private fun JsIrBackendContext.buildFactoryDeclaration(constructor: IrConstructo val constructorName = "${irClass.name}_init" val functionName = "${constructorName}_\$Create\$" - return jsIrDeclarationBuilder.buildFunction( - functionName, - type, - constructor.parent, - constructor.visibility, - Modality.FINAL, - constructor.isInline, - constructor.isExternal - ).also { factory -> + return irFactory.buildFun { + name = Name.identifier(functionName) + returnType = type + visibility = constructor.visibility + modality = Modality.FINAL + isInline = constructor.isInline + isExternal = constructor.isExternal + }.also { factory -> + factory.parent = constructor.parent factory.copyTypeParametersFrom(constructor.parentAsClass) factory.valueParameters += constructor.valueParameters.map { p -> p.copyTo(factory) } factory.annotations = constructor.annotations diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TestGenerator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TestGenerator.kt index a50de5b9cb4..ee3d9915f9c 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TestGenerator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TestGenerator.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder +import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrExpression @@ -21,6 +22,7 @@ import org.jetbrains.kotlin.ir.util.defaultType import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable import org.jetbrains.kotlin.ir.util.isEffectivelyExternal import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name fun generateTests(context: JsIrBackendContext, moduleFragment: IrModuleFragment) { val generator = TestGenerator(context) { context.createTestContainerFun(moduleFragment) } @@ -57,7 +59,12 @@ class TestGenerator(val context: JsIrBackendContext, val testContainerFactory: ( ): FunctionWithBody { val body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET, emptyList()) - val function = context.jsIrDeclarationBuilder.buildFunction("$name test fun", context.irBuiltIns.anyNType, parentFunction) + val function = context.irFactory.buildFun { + this.name = Name.identifier("$name test fun") + this.returnType = context.irBuiltIns.anyNType + this.origin = JsIrBuilder.SYNTHESIZED_DECLARATION + } + function.parent = parentFunction function.body = body val parentBody = parentFunction.body as IrBlockBody diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmBackendContext.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmBackendContext.kt index 1daf7ac3eca..9bb7f47ea8b 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmBackendContext.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmBackendContext.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext import org.jetbrains.kotlin.ir.backend.js.JsMapping import org.jetbrains.kotlin.ir.backend.js.JsSharedVariablesManager -import org.jetbrains.kotlin.ir.backend.js.ir.JsIrDeclarationBuilder import org.jetbrains.kotlin.ir.backend.js.lower.JsInnerClassesSupport import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl @@ -44,7 +43,6 @@ class WasmBackendContext( override val lateinitNullableFields = mutableMapOf() override val extractedLocalClasses: MutableSet = hashSetOf() override val irFactory: IrFactory = IrFactoryImpl - override val jsIrDeclarationBuilder: JsIrDeclarationBuilder = JsIrDeclarationBuilder(irFactory) // Place to store declarations excluded from code generation val excludedDeclarations: IrPackageFragment by lazy {