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
|
package org.jetbrains.kotlin.ir.backend.js
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.CommonBackendContext
|
import org.jetbrains.kotlin.backend.common.CommonBackendContext
|
||||||
|
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrDeclarationBuilder
|
||||||
|
|
||||||
interface JsCommonBackendContext : CommonBackendContext {
|
interface JsCommonBackendContext : CommonBackendContext {
|
||||||
override val mapping: JsMapping
|
override val mapping: JsMapping
|
||||||
|
|
||||||
|
val jsIrDeclarationBuilder: JsIrDeclarationBuilder
|
||||||
|
|
||||||
val es6mode: Boolean
|
val es6mode: Boolean
|
||||||
get() = false
|
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.atMostOne
|
||||||
import org.jetbrains.kotlin.backend.common.ir.Ir
|
import org.jetbrains.kotlin.backend.common.ir.Ir
|
||||||
import org.jetbrains.kotlin.backend.common.ir.Symbols
|
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.builtins.PrimitiveType
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
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.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.ir.*
|
import org.jetbrains.kotlin.ir.*
|
||||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
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.backend.js.utils.OperatorNames
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
|
||||||
@@ -53,6 +54,8 @@ class JsIrBackendContext(
|
|||||||
|
|
||||||
override var inVerbosePhase: Boolean = false
|
override var inVerbosePhase: Boolean = false
|
||||||
|
|
||||||
|
override val jsIrDeclarationBuilder: JsIrDeclarationBuilder = JsIrDeclarationBuilder()
|
||||||
|
|
||||||
val devMode = configuration[JSConfigurationKeys.DEVELOPER_MODE] ?: false
|
val devMode = configuration[JSConfigurationKeys.DEVELOPER_MODE] ?: false
|
||||||
|
|
||||||
val externalPackageFragment = mutableMapOf<IrFileSymbol, IrFile>()
|
val externalPackageFragment = mutableMapOf<IrFileSymbol, IrFile>()
|
||||||
@@ -123,7 +126,7 @@ class JsIrBackendContext(
|
|||||||
fun createTestContainerFun(module: IrModuleFragment): IrSimpleFunction {
|
fun createTestContainerFun(module: IrModuleFragment): IrSimpleFunction {
|
||||||
return testContainerFuns.getOrPut(module) {
|
return testContainerFuns.getOrPut(module) {
|
||||||
val file = syntheticFile("tests", 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())
|
body = JsIrBuilder.buildBlockBody(emptyList())
|
||||||
file.declarations += this
|
file.declarations += this
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,21 +5,16 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.backend.js.ir
|
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.IrStatement
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
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.builders.declarations.buildVariable
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrAnonymousInitializerImpl
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
import org.jetbrains.kotlin.ir.descriptors.WrappedClassDescriptor
|
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.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||||
import org.jetbrains.kotlin.ir.symbols.*
|
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.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.name.Name
|
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 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) =
|
fun buildGetObjectValue(type: IrType, classSymbol: IrClassSymbol) =
|
||||||
IrGetObjectValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, classSymbol)
|
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 buildString(type: IrType, s: String) = IrConstImpl.string(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, s)
|
||||||
fun buildTry(type: IrType) = IrTryImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type)
|
fun buildTry(type: IrType) = IrTryImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type)
|
||||||
fun buildCatch(ex: IrVariable, block: IrBlockImpl) = IrCatchImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, ex, block)
|
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.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
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.JsIrBackendContext
|
||||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
||||||
import org.jetbrains.kotlin.ir.backend.js.utils.isPure
|
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.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
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.IrElementTransformer
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||||
@@ -30,7 +33,7 @@ class JsBlockDecomposerLowering(val context: JsIrBackendContext) : AbstractBlock
|
|||||||
}
|
}
|
||||||
|
|
||||||
abstract class AbstractBlockDecomposerLowering(
|
abstract class AbstractBlockDecomposerLowering(
|
||||||
context: CommonBackendContext
|
private val context: JsCommonBackendContext
|
||||||
) : BodyLoweringPass {
|
) : BodyLoweringPass {
|
||||||
|
|
||||||
private val nothingType = context.irBuiltIns.nothingType
|
private val nothingType = context.irBuiltIns.nothingType
|
||||||
@@ -48,8 +51,7 @@ abstract class AbstractBlockDecomposerLowering(
|
|||||||
}
|
}
|
||||||
is IrField -> {
|
is IrField -> {
|
||||||
container.initializer?.apply {
|
container.initializer?.apply {
|
||||||
|
val initFunction = context.jsIrDeclarationBuilder.buildFunction(
|
||||||
val initFunction = JsIrBuilder.buildFunction(
|
|
||||||
container.name.asString() + "\$init\$",
|
container.name.asString() + "\$init\$",
|
||||||
container.type,
|
container.type,
|
||||||
container.parent,
|
container.parent,
|
||||||
|
|||||||
+3
-4
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.backend.js.lower
|
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.DeclarationTransformer
|
||||||
import org.jetbrains.kotlin.backend.common.bridges.FunctionHandle
|
import org.jetbrains.kotlin.backend.common.bridges.FunctionHandle
|
||||||
import org.jetbrains.kotlin.backend.common.bridges.generateBridges
|
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.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
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.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.functionSignature
|
||||||
import org.jetbrains.kotlin.ir.backend.js.utils.getJsName
|
import org.jetbrains.kotlin.ir.backend.js.utils.getJsName
|
||||||
import org.jetbrains.kotlin.ir.builders.*
|
import org.jetbrains.kotlin.ir.builders.*
|
||||||
@@ -46,7 +45,7 @@ import org.jetbrains.kotlin.ir.util.*
|
|||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
class BridgesConstruction(val context: CommonBackendContext) : DeclarationTransformer {
|
class BridgesConstruction(val context: JsCommonBackendContext) : DeclarationTransformer {
|
||||||
|
|
||||||
private val specialBridgeMethods = SpecialBridgeMethods(context)
|
private val specialBridgeMethods = SpecialBridgeMethods(context)
|
||||||
|
|
||||||
@@ -119,7 +118,7 @@ class BridgesConstruction(val context: CommonBackendContext) : DeclarationTransf
|
|||||||
IrDeclarationOrigin.BRIDGE
|
IrDeclarationOrigin.BRIDGE
|
||||||
|
|
||||||
// TODO: Support offsets for debug info
|
// TODO: Support offsets for debug info
|
||||||
val irFunction = JsIrBuilder.buildFunction(
|
val irFunction = context.jsIrDeclarationBuilder.buildFunction(
|
||||||
bridge.name,
|
bridge.name,
|
||||||
bridge.returnType,
|
bridge.returnType,
|
||||||
function.parent,
|
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.IrStatement
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
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.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.builders.declarations.addValueParameter
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
@@ -103,7 +103,7 @@ class ES6AddInternalParametersToConstructorPhase(val context: JsIrBackendContext
|
|||||||
private fun buildInitFunction(constructor: IrConstructor, irClass: IrClass): IrSimpleFunction {
|
private fun buildInitFunction(constructor: IrConstructor, irClass: IrClass): IrSimpleFunction {
|
||||||
val functionName = "${irClass.name}_init"
|
val functionName = "${irClass.name}_init"
|
||||||
|
|
||||||
return JsIrBuilder.buildFunction(
|
return context.jsIrDeclarationBuilder.buildFunction(
|
||||||
functionName,
|
functionName,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
irClass,
|
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.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
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.JsIrBuilder
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.ES6AddInternalParametersToConstructorPhase.*
|
import org.jetbrains.kotlin.ir.backend.js.lower.ES6AddInternalParametersToConstructorPhase.ES6_INIT_BOX_PARAMETER
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.PrimaryConstructorLowering.*
|
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.addValueParameter
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
@@ -538,7 +539,7 @@ private fun getSuperCall(constructor: IrConstructor): IrDelegatingConstructorCal
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun changeIrConstructorToIrFunction(context: JsIrBackendContext, container: IrConstructor) {
|
private fun changeIrConstructorToIrFunction(context: JsIrBackendContext, container: IrConstructor) {
|
||||||
val newConstructor = JsIrBuilder.buildFunction(
|
val newConstructor = context.jsIrDeclarationBuilder.buildFunction(
|
||||||
"${container.parentAsClass.name}_constructor",
|
"${container.parentAsClass.name}_constructor",
|
||||||
container.returnType,
|
container.returnType,
|
||||||
container.parent
|
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.JsCommonBackendContext
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
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.JsIrBuilder
|
||||||
|
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrDeclarationBuilder
|
||||||
import org.jetbrains.kotlin.ir.backend.js.utils.toJsArrayLiteral
|
import org.jetbrains.kotlin.ir.backend.js.utils.toJsArrayLiteral
|
||||||
import org.jetbrains.kotlin.ir.builders.*
|
import org.jetbrains.kotlin.ir.builders.*
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
|
import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
|
||||||
@@ -121,8 +122,8 @@ class EnumClassConstructorLowering(val context: JsCommonBackendContext) : Declar
|
|||||||
returnType = enumConstructor.returnType
|
returnType = enumConstructor.returnType
|
||||||
}.apply {
|
}.apply {
|
||||||
parent = enumClass
|
parent = enumClass
|
||||||
valueParameters += JsIrBuilder.buildValueParameter(this, "name", 0, context.irBuiltIns.stringType)
|
valueParameters += context.jsIrDeclarationBuilder.buildValueParameter(this, "name", 0, context.irBuiltIns.stringType)
|
||||||
valueParameters += JsIrBuilder.buildValueParameter(this, "ordinal", 1, context.irBuiltIns.intType)
|
valueParameters += context.jsIrDeclarationBuilder.buildValueParameter(this, "ordinal", 1, context.irBuiltIns.intType)
|
||||||
copyParameterDeclarationsFrom(enumConstructor)
|
copyParameterDeclarationsFrom(enumConstructor)
|
||||||
|
|
||||||
val newConstructor = this
|
val newConstructor = this
|
||||||
@@ -399,7 +400,7 @@ class EnumClassCreateInitializerLowering(val context: JsIrBackendContext) : Decl
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createInitEntryInstancesFun(irClass: IrClass, entryInstancesInitializedField: IrField): IrSimpleFunction =
|
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) {
|
it.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||||
statements += context.createIrBuilder(it.symbol).irBlockBody(it) {
|
statements += context.createIrBuilder(it.symbol).irBlockBody(it) {
|
||||||
+irIfThen(irGetField(null, entryInstancesInitializedField), irReturnUnit())
|
+irIfThen(irGetField(null, entryInstancesInitializedField), irReturnUnit())
|
||||||
@@ -415,11 +416,11 @@ class EnumClassCreateInitializerLowering(val context: JsIrBackendContext) : Decl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildFunction(
|
private fun JsIrDeclarationBuilder.buildFunction(
|
||||||
irClass: IrClass,
|
irClass: IrClass,
|
||||||
name: String,
|
name: String,
|
||||||
returnType: IrType
|
returnType: IrType
|
||||||
) = JsIrBuilder.buildFunction(name, returnType, irClass)
|
): IrSimpleFunction = buildFunction(name, returnType, irClass)
|
||||||
|
|
||||||
class EnumEntryCreateGetInstancesFunsLowering(val context: JsIrBackendContext): DeclarationTransformer {
|
class EnumEntryCreateGetInstancesFunsLowering(val context: JsIrBackendContext): DeclarationTransformer {
|
||||||
|
|
||||||
@@ -446,18 +447,23 @@ class EnumEntryCreateGetInstancesFunsLowering(val context: JsIrBackendContext):
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createGetEntryInstanceFun(irClass: IrClass, enumEntry: IrEnumEntry, initEntryInstancesFun: IrSimpleFunction): IrSimpleFunction {
|
private fun createGetEntryInstanceFun(
|
||||||
|
irClass: IrClass, enumEntry: IrEnumEntry, initEntryInstancesFun: IrSimpleFunction
|
||||||
return context.mapping.enumEntryToGetInstanceFun.getOrPut(enumEntry) { buildFunction(irClass, createEntryAccessorName(irClass.name.identifier, enumEntry), enumEntry.getType(irClass)) }
|
): IrSimpleFunction =
|
||||||
.also {
|
context.mapping.enumEntryToGetInstanceFun.getOrPut(enumEntry) {
|
||||||
it.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
context.jsIrDeclarationBuilder.buildFunction(
|
||||||
statements += context.createIrBuilder(it.symbol).irBlockBody(it) {
|
irClass,
|
||||||
+irCall(initEntryInstancesFun)
|
createEntryAccessorName(irClass.name.identifier, enumEntry),
|
||||||
+irReturn(irGetField(null, enumEntry.correspondingField!!))
|
enumEntry.getType(irClass)
|
||||||
}.statements
|
)
|
||||||
}
|
}.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 {
|
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.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsMapping
|
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.backend.js.utils.Namer
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
|
import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.buildField
|
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.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrField
|
import org.jetbrains.kotlin.ir.declarations.IrField
|
||||||
@@ -82,9 +83,12 @@ class JsInnerClassesSupport(mapping: JsMapping) : InnerClassesSupport {
|
|||||||
|
|
||||||
newConstructor.copyTypeParametersFrom(oldConstructor)
|
newConstructor.copyTypeParametersFrom(oldConstructor)
|
||||||
|
|
||||||
val outerThisValueParameter = JsIrBuilder.buildValueParameter(newConstructor, Namer.OUTER_NAME, 0, outerThisType)
|
val newValueParameters = mutableListOf(buildValueParameter(newConstructor) {
|
||||||
|
origin = SYNTHESIZED_DECLARATION
|
||||||
val newValueParameters = mutableListOf(outerThisValueParameter)
|
name = Name.identifier(Namer.OUTER_NAME)
|
||||||
|
index = 0
|
||||||
|
type = outerThisType
|
||||||
|
})
|
||||||
|
|
||||||
for (p in oldConstructor.valueParameters) {
|
for (p in oldConstructor.valueParameters) {
|
||||||
newValueParameters += p.copyTo(newConstructor, index = p.index + 1)
|
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) {
|
mapping.objectToGetInstanceFunction.getOrPut(obj) {
|
||||||
JsIrBuilder.buildFunction(
|
jsIrDeclarationBuilder.buildFunction(
|
||||||
obj.name.asString() + "_getInstance",
|
obj.name.asString() + "_getInstance",
|
||||||
returnType = obj.defaultType,
|
returnType = obj.defaultType,
|
||||||
parent = obj.parent
|
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 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 type = irClass.defaultType
|
||||||
val constructorName = "${irClass.name}_init"
|
val constructorName = "${irClass.name}_init"
|
||||||
val functionName = "${constructorName}_\$Init\$"
|
val functionName = "${constructorName}_\$Init\$"
|
||||||
|
|
||||||
return JsIrBuilder.buildFunction(
|
return jsIrDeclarationBuilder.buildFunction(
|
||||||
functionName,
|
functionName,
|
||||||
type,
|
type,
|
||||||
constructor.parent,
|
constructor.parent,
|
||||||
@@ -176,16 +176,16 @@ private fun buildInitDeclaration(constructor: IrConstructor, irClass: IrClass):
|
|||||||
it.copyTypeParametersFrom(constructor.parentAsClass)
|
it.copyTypeParametersFrom(constructor.parentAsClass)
|
||||||
|
|
||||||
it.valueParameters = constructor.valueParameters.map { p -> p.copyTo(it) }
|
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 type = irClass.defaultType
|
||||||
val constructorName = "${irClass.name}_init"
|
val constructorName = "${irClass.name}_init"
|
||||||
val functionName = "${constructorName}_\$Create\$"
|
val functionName = "${constructorName}_\$Create\$"
|
||||||
|
|
||||||
return JsIrBuilder.buildFunction(
|
return jsIrDeclarationBuilder.buildFunction(
|
||||||
functionName,
|
functionName,
|
||||||
type,
|
type,
|
||||||
constructor.parent,
|
constructor.parent,
|
||||||
|
|||||||
+1
-1
@@ -56,7 +56,7 @@ class TestGenerator(val context: JsIrBackendContext, val testContainerFactory: (
|
|||||||
): FunctionWithBody {
|
): FunctionWithBody {
|
||||||
val body = JsIrBuilder.buildBlockBody(emptyList())
|
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
|
function.body = body
|
||||||
|
|
||||||
val parentBody = parentFunction.body as IrBlockBody
|
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.Ir
|
||||||
import org.jetbrains.kotlin.backend.common.ir.Symbols
|
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.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
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.JsCommonBackendContext
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsMapping
|
import org.jetbrains.kotlin.ir.backend.js.JsMapping
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsSharedVariablesManager
|
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.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
@@ -41,6 +42,7 @@ class WasmBackendContext(
|
|||||||
override val transformedFunction = mutableMapOf<IrFunctionSymbol, IrSimpleFunctionSymbol>()
|
override val transformedFunction = mutableMapOf<IrFunctionSymbol, IrSimpleFunctionSymbol>()
|
||||||
override val lateinitNullableFields = mutableMapOf<IrField, IrField>()
|
override val lateinitNullableFields = mutableMapOf<IrField, IrField>()
|
||||||
override val extractedLocalClasses: MutableSet<IrClass> = hashSetOf()
|
override val extractedLocalClasses: MutableSet<IrClass> = hashSetOf()
|
||||||
|
override val jsIrDeclarationBuilder: JsIrDeclarationBuilder = JsIrDeclarationBuilder()
|
||||||
|
|
||||||
// Place to store declarations excluded from code generation
|
// Place to store declarations excluded from code generation
|
||||||
val excludedDeclarations: IrPackageFragment by lazy {
|
val excludedDeclarations: IrPackageFragment by lazy {
|
||||||
|
|||||||
Reference in New Issue
Block a user