JS IR: move declaration creation from IrBuilder to JsIrDeclarationBuilder
This is a temporary class until IrDeclarationFactory is there.
This commit is contained in:
+4
-1
@@ -6,10 +6,13 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.ir.backend.js
|
||||
import org.jetbrains.kotlin.backend.common.atMostOne
|
||||
import org.jetbrains.kotlin.backend.common.ir.Ir
|
||||
import org.jetbrains.kotlin.backend.common.ir.Symbols
|
||||
import org.jetbrains.kotlin.ir.backend.js.lower.JsInnerClassesSupport
|
||||
import org.jetbrains.kotlin.builtins.PrimitiveType
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
@@ -16,6 +15,8 @@ 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.JsIrBuilder
|
||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrDeclarationBuilder
|
||||
import org.jetbrains.kotlin.ir.backend.js.lower.JsInnerClassesSupport
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.OperatorNames
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
|
||||
@@ -53,6 +54,8 @@ class JsIrBackendContext(
|
||||
|
||||
override var inVerbosePhase: Boolean = false
|
||||
|
||||
override val jsIrDeclarationBuilder: JsIrDeclarationBuilder = JsIrDeclarationBuilder()
|
||||
|
||||
val devMode = configuration[JSConfigurationKeys.DEVELOPER_MODE] ?: false
|
||||
|
||||
val externalPackageFragment = mutableMapOf<IrFileSymbol, IrFile>()
|
||||
@@ -123,7 +126,7 @@ class JsIrBackendContext(
|
||||
fun createTestContainerFun(module: IrModuleFragment): IrSimpleFunction {
|
||||
return testContainerFuns.getOrPut(module) {
|
||||
val file = syntheticFile("tests", module)
|
||||
JsIrBuilder.buildFunction("test fun", irBuiltIns.unitType, file).apply {
|
||||
jsIrDeclarationBuilder.buildFunction("test fun", irBuiltIns.unitType, file).apply {
|
||||
body = JsIrBuilder.buildBlockBody(emptyList())
|
||||
file.declarations += this
|
||||
}
|
||||
|
||||
@@ -5,21 +5,16 @@
|
||||
|
||||
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.IrStatement
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildFun
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildValueParameter
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildVariable
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrAnonymousInitializerImpl
|
||||
import org.jetbrains.kotlin.ir.descriptors.WrappedClassDescriptor
|
||||
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.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.symbols.*
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrAnonymousInitializerSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
@@ -51,80 +46,6 @@ object JsIrBuilder {
|
||||
|
||||
fun buildThrow(type: IrType, value: IrExpression) = IrThrowImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, value)
|
||||
|
||||
fun buildValueParameter(parent: IrDeclarationParent, 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 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,
|
||||
isFakeOverride: Boolean = false,
|
||||
origin: IrDeclarationOrigin = SYNTHESIZED_DECLARATION
|
||||
) = buildFunction(
|
||||
Name.identifier(name),
|
||||
returnType,
|
||||
parent,
|
||||
visibility,
|
||||
modality,
|
||||
isInline = isInline,
|
||||
isExternal = isExternal,
|
||||
isTailrec = isTailrec,
|
||||
isSuspend = isSuspend,
|
||||
isExpect = isExpect,
|
||||
isFakeOverride = isFakeOverride,
|
||||
origin = 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 = SYNTHESIZED_DECLARATION
|
||||
): IrSimpleFunction = 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
|
||||
}
|
||||
|
||||
fun buildAnonymousInitializer() =
|
||||
IrAnonymousInitializerImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, SYNTHESIZED_DECLARATION, IrAnonymousInitializerSymbolImpl(
|
||||
WrappedClassDescriptor()
|
||||
))
|
||||
|
||||
fun buildGetObjectValue(type: IrType, classSymbol: IrClassSymbol) =
|
||||
IrGetObjectValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, classSymbol)
|
||||
|
||||
@@ -232,4 +153,4 @@ object JsIrBuilder {
|
||||
fun buildString(type: IrType, s: String) = IrConstImpl.string(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, s)
|
||||
fun buildTry(type: IrType) = IrTryImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type)
|
||||
fun buildCatch(ex: IrVariable, block: IrBlockImpl) = IrCatchImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, ex, block)
|
||||
}
|
||||
}
|
||||
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* 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.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
// This is a temporary class for migration to IrDeclarationFactory. Usages should be refactored to use the factory directly once possible,
|
||||
// since it doesn't add sufficient value on its own.
|
||||
class JsIrDeclarationBuilder {
|
||||
fun buildValueParameter(parent: IrDeclarationParent, 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 = 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
|
||||
}
|
||||
}
|
||||
+6
-4
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.backend.common.ir.isElseBranch
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
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
|
||||
@@ -18,7 +19,9 @@ import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.util.dump
|
||||
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
||||
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
|
||||
@@ -30,7 +33,7 @@ class JsBlockDecomposerLowering(val context: JsIrBackendContext) : AbstractBlock
|
||||
}
|
||||
|
||||
abstract class AbstractBlockDecomposerLowering(
|
||||
context: CommonBackendContext
|
||||
private val context: JsCommonBackendContext
|
||||
) : BodyLoweringPass {
|
||||
|
||||
private val nothingType = context.irBuiltIns.nothingType
|
||||
@@ -48,8 +51,7 @@ abstract class AbstractBlockDecomposerLowering(
|
||||
}
|
||||
is IrField -> {
|
||||
container.initializer?.apply {
|
||||
|
||||
val initFunction = JsIrBuilder.buildFunction(
|
||||
val initFunction = context.jsIrDeclarationBuilder.buildFunction(
|
||||
container.name.asString() + "\$init\$",
|
||||
container.type,
|
||||
container.parent,
|
||||
|
||||
+3
-4
@@ -5,7 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.backend.js.lower
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.CommonBackendContext
|
||||
import org.jetbrains.kotlin.backend.common.DeclarationTransformer
|
||||
import org.jetbrains.kotlin.backend.common.bridges.FunctionHandle
|
||||
import org.jetbrains.kotlin.backend.common.bridges.generateBridges
|
||||
@@ -14,8 +13,8 @@ import org.jetbrains.kotlin.backend.common.lower.*
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsLoweredDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.functionSignature
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.getJsName
|
||||
import org.jetbrains.kotlin.ir.builders.*
|
||||
@@ -46,7 +45,7 @@ import org.jetbrains.kotlin.ir.util.*
|
||||
// }
|
||||
//
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
class BridgesConstruction(val context: CommonBackendContext) : DeclarationTransformer {
|
||||
class BridgesConstruction(val context: JsCommonBackendContext) : DeclarationTransformer {
|
||||
|
||||
private val specialBridgeMethods = SpecialBridgeMethods(context)
|
||||
|
||||
@@ -119,7 +118,7 @@ class BridgesConstruction(val context: CommonBackendContext) : DeclarationTransf
|
||||
IrDeclarationOrigin.BRIDGE
|
||||
|
||||
// TODO: Support offsets for debug info
|
||||
val irFunction = JsIrBuilder.buildFunction(
|
||||
val irFunction = context.jsIrDeclarationBuilder.buildFunction(
|
||||
bridge.name,
|
||||
bridge.returnType,
|
||||
function.parent,
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
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.*
|
||||
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.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
@@ -103,7 +103,7 @@ class ES6AddInternalParametersToConstructorPhase(val context: JsIrBackendContext
|
||||
private fun buildInitFunction(constructor: IrConstructor, irClass: IrClass): IrSimpleFunction {
|
||||
val functionName = "${irClass.name}_init"
|
||||
|
||||
return JsIrBuilder.buildFunction(
|
||||
return context.jsIrDeclarationBuilder.buildFunction(
|
||||
functionName,
|
||||
context.irBuiltIns.unitType,
|
||||
irClass,
|
||||
|
||||
+4
-3
@@ -11,8 +11,9 @@ 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.backend.js.lower.ES6AddInternalParametersToConstructorPhase.*
|
||||
import org.jetbrains.kotlin.ir.backend.js.lower.PrimaryConstructorLowering.*
|
||||
import org.jetbrains.kotlin.ir.backend.js.lower.ES6AddInternalParametersToConstructorPhase.ES6_INIT_BOX_PARAMETER
|
||||
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.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
@@ -538,7 +539,7 @@ private fun getSuperCall(constructor: IrConstructor): IrDelegatingConstructorCal
|
||||
}
|
||||
|
||||
private fun changeIrConstructorToIrFunction(context: JsIrBackendContext, container: IrConstructor) {
|
||||
val newConstructor = JsIrBuilder.buildFunction(
|
||||
val newConstructor = context.jsIrDeclarationBuilder.buildFunction(
|
||||
"${container.parentAsClass.name}_constructor",
|
||||
container.returnType,
|
||||
container.parent
|
||||
|
||||
+22
-16
@@ -19,6 +19,7 @@ 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
|
||||
@@ -121,8 +122,8 @@ class EnumClassConstructorLowering(val context: JsCommonBackendContext) : Declar
|
||||
returnType = enumConstructor.returnType
|
||||
}.apply {
|
||||
parent = enumClass
|
||||
valueParameters += JsIrBuilder.buildValueParameter(this, "name", 0, context.irBuiltIns.stringType)
|
||||
valueParameters += JsIrBuilder.buildValueParameter(this, "ordinal", 1, context.irBuiltIns.intType)
|
||||
valueParameters += context.jsIrDeclarationBuilder.buildValueParameter(this, "name", 0, context.irBuiltIns.stringType)
|
||||
valueParameters += context.jsIrDeclarationBuilder.buildValueParameter(this, "ordinal", 1, context.irBuiltIns.intType)
|
||||
copyParameterDeclarationsFrom(enumConstructor)
|
||||
|
||||
val newConstructor = this
|
||||
@@ -399,7 +400,7 @@ class EnumClassCreateInitializerLowering(val context: JsIrBackendContext) : Decl
|
||||
}
|
||||
|
||||
private fun createInitEntryInstancesFun(irClass: IrClass, entryInstancesInitializedField: IrField): IrSimpleFunction =
|
||||
buildFunction(irClass, "${irClass.name.identifier}_initEntries", context.irBuiltIns.unitType).also {
|
||||
context.jsIrDeclarationBuilder.buildFunction(irClass, "${irClass.name.identifier}_initEntries", context.irBuiltIns.unitType).also {
|
||||
it.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||
statements += context.createIrBuilder(it.symbol).irBlockBody(it) {
|
||||
+irIfThen(irGetField(null, entryInstancesInitializedField), irReturnUnit())
|
||||
@@ -415,11 +416,11 @@ class EnumClassCreateInitializerLowering(val context: JsIrBackendContext) : Decl
|
||||
}
|
||||
}
|
||||
|
||||
private fun buildFunction(
|
||||
private fun JsIrDeclarationBuilder.buildFunction(
|
||||
irClass: IrClass,
|
||||
name: String,
|
||||
returnType: IrType
|
||||
) = JsIrBuilder.buildFunction(name, returnType, irClass)
|
||||
): IrSimpleFunction = buildFunction(name, returnType, irClass)
|
||||
|
||||
class EnumEntryCreateGetInstancesFunsLowering(val context: JsIrBackendContext): DeclarationTransformer {
|
||||
|
||||
@@ -446,18 +447,23 @@ class EnumEntryCreateGetInstancesFunsLowering(val context: JsIrBackendContext):
|
||||
return null
|
||||
}
|
||||
|
||||
private fun createGetEntryInstanceFun(irClass: IrClass, enumEntry: IrEnumEntry, initEntryInstancesFun: IrSimpleFunction): IrSimpleFunction {
|
||||
|
||||
return context.mapping.enumEntryToGetInstanceFun.getOrPut(enumEntry) { buildFunction(irClass, createEntryAccessorName(irClass.name.identifier, enumEntry), enumEntry.getType(irClass)) }
|
||||
.also {
|
||||
it.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||
statements += context.createIrBuilder(it.symbol).irBlockBody(it) {
|
||||
+irCall(initEntryInstancesFun)
|
||||
+irReturn(irGetField(null, enumEntry.correspondingField!!))
|
||||
}.statements
|
||||
}
|
||||
private fun createGetEntryInstanceFun(
|
||||
irClass: IrClass, enumEntry: IrEnumEntry, initEntryInstancesFun: IrSimpleFunction
|
||||
): IrSimpleFunction =
|
||||
context.mapping.enumEntryToGetInstanceFun.getOrPut(enumEntry) {
|
||||
context.jsIrDeclarationBuilder.buildFunction(
|
||||
irClass,
|
||||
createEntryAccessorName(irClass.name.identifier, enumEntry),
|
||||
enumEntry.getType(irClass)
|
||||
)
|
||||
}.also {
|
||||
it.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||
statements += context.createIrBuilder(it.symbol).irBlockBody(it) {
|
||||
+irCall(initEntryInstancesFun)
|
||||
+irReturn(irGetField(null, enumEntry.correspondingField!!))
|
||||
}.statements
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class EnumSyntheticFunctionsLowering(val context: JsIrBackendContext): DeclarationTransformer {
|
||||
|
||||
+8
-4
@@ -12,10 +12,11 @@ import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsMapping
|
||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder.SYNTHESIZED_DECLARATION
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.Namer
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildField
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildValueParameter
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
||||
import org.jetbrains.kotlin.ir.declarations.IrField
|
||||
@@ -82,9 +83,12 @@ class JsInnerClassesSupport(mapping: JsMapping) : InnerClassesSupport {
|
||||
|
||||
newConstructor.copyTypeParametersFrom(oldConstructor)
|
||||
|
||||
val outerThisValueParameter = JsIrBuilder.buildValueParameter(newConstructor, Namer.OUTER_NAME, 0, outerThisType)
|
||||
|
||||
val newValueParameters = mutableListOf(outerThisValueParameter)
|
||||
val newValueParameters = mutableListOf(buildValueParameter(newConstructor) {
|
||||
origin = SYNTHESIZED_DECLARATION
|
||||
name = Name.identifier(Namer.OUTER_NAME)
|
||||
index = 0
|
||||
type = outerThisType
|
||||
})
|
||||
|
||||
for (p in oldConstructor.valueParameters) {
|
||||
newValueParameters += p.copyTo(newConstructor, index = p.index + 1)
|
||||
|
||||
+3
-3
@@ -106,11 +106,11 @@ class ObjectUsageLowering(
|
||||
}
|
||||
}
|
||||
|
||||
fun JsCommonBackendContext.getOrCreateGetInstanceFunction(obj: IrClass) =
|
||||
private fun JsCommonBackendContext.getOrCreateGetInstanceFunction(obj: IrClass) =
|
||||
mapping.objectToGetInstanceFunction.getOrPut(obj) {
|
||||
JsIrBuilder.buildFunction(
|
||||
jsIrDeclarationBuilder.buildFunction(
|
||||
obj.name.asString() + "_getInstance",
|
||||
returnType = obj.defaultType,
|
||||
parent = obj.parent
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -159,12 +159,12 @@ class SecondaryConstructorLowering(val context: JsIrBackendContext) : Declaratio
|
||||
|
||||
private fun IrTypeParameter.toIrType() = IrSimpleTypeImpl(symbol, true, emptyList(), emptyList())
|
||||
|
||||
private fun buildInitDeclaration(constructor: IrConstructor, irClass: IrClass): IrSimpleFunction {
|
||||
private fun JsIrBackendContext.buildInitDeclaration(constructor: IrConstructor, irClass: IrClass): IrSimpleFunction {
|
||||
val type = irClass.defaultType
|
||||
val constructorName = "${irClass.name}_init"
|
||||
val functionName = "${constructorName}_\$Init\$"
|
||||
|
||||
return JsIrBuilder.buildFunction(
|
||||
return jsIrDeclarationBuilder.buildFunction(
|
||||
functionName,
|
||||
type,
|
||||
constructor.parent,
|
||||
@@ -176,16 +176,16 @@ private fun buildInitDeclaration(constructor: IrConstructor, irClass: IrClass):
|
||||
it.copyTypeParametersFrom(constructor.parentAsClass)
|
||||
|
||||
it.valueParameters = constructor.valueParameters.map { p -> p.copyTo(it) }
|
||||
it.valueParameters += JsIrBuilder.buildValueParameter(it, "\$this", constructor.valueParameters.size, type)
|
||||
it.valueParameters += jsIrDeclarationBuilder.buildValueParameter(it, "\$this", constructor.valueParameters.size, type)
|
||||
}
|
||||
}
|
||||
|
||||
private fun buildFactoryDeclaration(constructor: IrConstructor, irClass: IrClass): IrSimpleFunction {
|
||||
private fun JsIrBackendContext.buildFactoryDeclaration(constructor: IrConstructor, irClass: IrClass): IrSimpleFunction {
|
||||
val type = irClass.defaultType
|
||||
val constructorName = "${irClass.name}_init"
|
||||
val functionName = "${constructorName}_\$Create\$"
|
||||
|
||||
return JsIrBuilder.buildFunction(
|
||||
return jsIrDeclarationBuilder.buildFunction(
|
||||
functionName,
|
||||
type,
|
||||
constructor.parent,
|
||||
|
||||
+1
-1
@@ -56,7 +56,7 @@ class TestGenerator(val context: JsIrBackendContext, val testContainerFactory: (
|
||||
): FunctionWithBody {
|
||||
val body = JsIrBuilder.buildBlockBody(emptyList())
|
||||
|
||||
val function = JsIrBuilder.buildFunction("$name test fun", context.irBuiltIns.anyNType, parentFunction)
|
||||
val function = context.jsIrDeclarationBuilder.buildFunction("$name test fun", context.irBuiltIns.anyNType, parentFunction)
|
||||
function.body = body
|
||||
|
||||
val parentBody = parentFunction.body as IrBlockBody
|
||||
|
||||
+4
-2
@@ -7,15 +7,16 @@ package org.jetbrains.kotlin.backend.wasm
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.ir.Ir
|
||||
import org.jetbrains.kotlin.backend.common.ir.Symbols
|
||||
import org.jetbrains.kotlin.ir.backend.js.lower.JsInnerClassesSupport
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
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
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
@@ -41,6 +42,7 @@ class WasmBackendContext(
|
||||
override val transformedFunction = mutableMapOf<IrFunctionSymbol, IrSimpleFunctionSymbol>()
|
||||
override val lateinitNullableFields = mutableMapOf<IrField, IrField>()
|
||||
override val extractedLocalClasses: MutableSet<IrClass> = hashSetOf()
|
||||
override val jsIrDeclarationBuilder: JsIrDeclarationBuilder = JsIrDeclarationBuilder()
|
||||
|
||||
// Place to store declarations excluded from code generation
|
||||
val excludedDeclarations: IrPackageFragment by lazy {
|
||||
|
||||
Reference in New Issue
Block a user