[IR] Move IrFactory#createExpressionBody overloads to extension methods

This is to prepare for IrFactory auto-generation (KT-59308).
This commit is contained in:
Sergej Jaskiewicz
2023-06-14 14:50:53 +02:00
committed by Space Team
parent ea8b482f4f
commit 3f6420c5b9
14 changed files with 61 additions and 66 deletions
@@ -1036,9 +1036,11 @@ class IrBuiltInsOverFir(
this.isFinal = isConst
}.also {
if (fieldInit != null) {
it.initializer = irFactory.createExpressionBody(0, 0) {
expression = fieldInit
}
it.initializer = irFactory.createExpressionBody(
startOffset = 0,
endOffset = 0,
expression = fieldInit,
)
}
}
}
@@ -106,9 +106,11 @@ class InitializersCleanupLowering(
} else {
declaration.initializer?.let {
declaration.initializer =
context.irFactory.createExpressionBody(it.startOffset, it.endOffset) {
expression = it.expression.deepCopyWithSymbols()
}
context.irFactory.createExpressionBody(
startOffset = it.startOffset,
endOffset = it.endOffset,
expression = it.expression.deepCopyWithSymbols(),
)
}
}
}
@@ -44,9 +44,11 @@ class InnerClassesLowering(val context: BackendContext, private val innerClasses
val variableRemapper = VariableRemapper(oldConstructorParameterToNew)
for ((oldParam, newParam) in oldConstructorParameterToNew.entries) {
newParam.defaultValue = oldParam.defaultValue?.let { oldDefault ->
context.irFactory.createExpressionBody(oldDefault.startOffset, oldDefault.endOffset) {
expression = oldDefault.expression.transform(variableRemapper, null).patchDeclarationParents(newConstructor)
}
context.irFactory.createExpressionBody(
startOffset = oldDefault.startOffset,
endOffset = oldDefault.endOffset,
expression = oldDefault.expression.transform(variableRemapper, null).patchDeclarationParents(newConstructor),
)
}
}
@@ -26,9 +26,11 @@ class CopyAccessorBodyLowerings(private val context: CommonBackendContext) : Dec
if (declaration is IrField) {
declaration.initializer?.let { originalBody ->
declaration.initializer = context.irFactory.createExpressionBody(originalBody.startOffset, originalBody.endOffset) {
this.expression = originalBody.expression.deepCopyWithSymbols(declaration)
}
declaration.initializer = context.irFactory.createExpressionBody(
startOffset = originalBody.startOffset,
endOffset = originalBody.endOffset,
expression = originalBody.expression.deepCopyWithSymbols(declaration),
)
}
}
@@ -126,8 +126,11 @@ class EnumClassConstructorLowering(val context: JsCommonBackendContext) : Declar
old.valueParameter = new
old.defaultValue?.let { default ->
new.defaultValue = context.irFactory.createExpressionBody(default.startOffset, default.endOffset) {
new.defaultValue = context.irFactory.createExpressionBody(
startOffset = default.startOffset,
endOffset = default.endOffset,
expression = default.expression
).apply {
expression.patchDeclarationParents(newConstructor)
context.fixReferencesToConstructorParameters(enumClass, this)
}
@@ -104,9 +104,11 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : DeclarationTrans
parameterMapping[it]?.apply {
it.defaultValue?.let { originalDefault ->
defaultValue = context.irFactory.createExpressionBody(it.startOffset, it.endOffset) {
expression = (originalDefault.copyWithParameters() as IrExpressionBody).expression
}
defaultValue = context.irFactory.createExpressionBody(
startOffset = it.startOffset,
endOffset = it.endOffset,
expression = (originalDefault.copyWithParameters() as IrExpressionBody).expression,
)
}
}
}
@@ -116,9 +118,11 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : DeclarationTrans
is IrBlockBody -> context.irFactory.createBlockBody(it.startOffset, it.endOffset) {
statements += (it.copyWithParameters() as IrBlockBody).statements
}
is IrExpressionBody -> context.irFactory.createExpressionBody(it.startOffset, it.endOffset) {
expression = (it.copyWithParameters() as IrExpressionBody).expression
}
is IrExpressionBody -> context.irFactory.createExpressionBody(
startOffset = it.startOffset,
endOffset = it.endOffset,
expression = (it.copyWithParameters() as IrExpressionBody).expression,
)
is IrSyntheticBody -> it
else -> compilationException(
"Unexpected body kind",
@@ -8,10 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower.inline
import org.jetbrains.kotlin.backend.common.DeclarationTransformer
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
import org.jetbrains.kotlin.backend.common.ir.isInlineFunWithReifiedParameter
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.declarations.IrProperty
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
@@ -41,9 +38,11 @@ class CopyInlineFunctionBodyLowering(val context: JsIrBackendContext) : Declarat
if (declaration is IrValueParameter && declaration.parent.let { it is IrFunction && it.isInline }) {
declaration.defaultValue?.let { originalDefault ->
declaration.defaultValue =
context.irFactory.createExpressionBody(originalDefault.startOffset, originalDefault.endOffset) {
expression = originalDefault.expression.deepCopyWithSymbols(declaration.parent)
}
context.irFactory.createExpressionBody(
startOffset = originalDefault.startOffset,
endOffset = originalDefault.endOffset,
expression = originalDefault.expression.deepCopyWithSymbols(declaration.parent),
)
}
}
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.Scope
import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.declarations.createExpressionBody
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrSymbol
@@ -210,16 +210,6 @@ interface IrFactory {
fun createExpressionBody(
startOffset: Int,
endOffset: Int,
initializer: IrExpressionBody.() -> Unit,
): IrExpressionBody
fun createExpressionBody(
startOffset: Int,
endOffset: Int,
expression: IrExpression,
): IrExpressionBody
fun createExpressionBody(
expression: IrExpression,
): IrExpressionBody
@@ -0,0 +1,12 @@
/*
* Copyright 2010-2023 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.declarations
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
fun IrFactory.createExpressionBody(expression: IrExpression): IrExpressionBody =
createExpressionBody(expression.startOffset, expression.endOffset, expression)
@@ -251,13 +251,6 @@ abstract class AbstractIrFactoryImpl : IrFactory {
isCrossinline, isNoinline, isHidden, isAssignable, factory = this
)
override fun createExpressionBody(
startOffset: Int,
endOffset: Int,
initializer: IrExpressionBody.() -> Unit,
): IrExpressionBody =
IrExpressionBodyImpl(startOffset, endOffset, initializer)
override fun createExpressionBody(
startOffset: Int,
endOffset: Int,
@@ -265,11 +258,6 @@ abstract class AbstractIrFactoryImpl : IrFactory {
): IrExpressionBody =
IrExpressionBodyImpl(startOffset, endOffset, expression)
override fun createExpressionBody(
expression: IrExpression,
): IrExpressionBody =
IrExpressionBodyImpl(expression)
override fun createBlockBody(
startOffset: Int,
endOffset: Int,
@@ -9,10 +9,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
import org.jetbrains.kotlin.ir.declarations.IrField
import org.jetbrains.kotlin.ir.declarations.MetadataSource
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
@@ -24,20 +24,11 @@ import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
class IrExpressionBodyImpl(
override val startOffset: Int,
override val endOffset: Int,
initializer: (IrExpressionBody.() -> Unit)? = null
override var expression: IrExpression,
) : IrExpressionBody() {
init {
initializer?.invoke(this)
}
constructor(startOffset: Int, endOffset: Int, expression: IrExpression) : this(startOffset, endOffset) {
this.expression = expression
}
constructor(expression: IrExpression) : this(expression.startOffset, expression.endOffset, expression)
override lateinit var expression: IrExpression
override val factory: IrFactory
get() = IrFactoryImpl
}
@@ -790,10 +790,12 @@ fun IrValueParameter.copyTo(
): IrValueParameter {
val symbol = IrValueParameterSymbolImpl()
val defaultValueCopy = defaultValue?.let { originalDefault ->
factory.createExpressionBody(originalDefault.startOffset, originalDefault.endOffset) {
expression = originalDefault.expression.deepCopyWithVariables().also {
it.patchDeclarationParents(irFunction)
}
factory.createExpressionBody(
startOffset = originalDefault.startOffset,
endOffset = originalDefault.endOffset,
expression = originalDefault.expression.deepCopyWithVariables(),
).apply {
expression.patchDeclarationParents(irFunction)
}
}
return factory.createValueParameter(