JS IR: drop JsIrDeclarationBuilder

Move buildValueParameter back to JsIrBuilder, and use common IR builders
directly where buildFunction was called.
This commit is contained in:
Alexander Udalov
2020-07-23 23:03:01 +02:00
parent 0d605a6b7f
commit 12d2a02d22
13 changed files with 111 additions and 168 deletions
@@ -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)
@@ -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
}
}
@@ -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)
@@ -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) }
@@ -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())
@@ -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)
}
@@ -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) {
@@ -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
}
}
@@ -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
@@ -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 {