JS IR: drop JsIrDeclarationBuilder
Move buildValueParameter back to JsIrBuilder, and use common IR builders directly where buildFunction was called.
This commit is contained in:
-3
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
-81
@@ -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
|
||||
}
|
||||
}
|
||||
+10
-6
@@ -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)
|
||||
|
||||
+12
-14
@@ -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) }
|
||||
|
||||
+11
-9
@@ -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())
|
||||
|
||||
+8
-5
@@ -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)
|
||||
}
|
||||
|
||||
+16
-15
@@ -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) {
|
||||
|
||||
+7
-5
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
+22
-19
@@ -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
|
||||
|
||||
+8
-1
@@ -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
|
||||
|
||||
@@ -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<IrField, IrField>()
|
||||
override val extractedLocalClasses: MutableSet<IrClass> = 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 {
|
||||
|
||||
Reference in New Issue
Block a user