[IR] Move IrFactory#createExpressionBody overloads to extension methods
This is to prepare for IrFactory auto-generation (KT-59308).
This commit is contained in:
committed by
Space Team
parent
ea8b482f4f
commit
3f6420c5b9
@@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -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(),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+5
-3
@@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-1
@@ -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)
|
||||
}
|
||||
|
||||
+10
-6
@@ -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",
|
||||
|
||||
+6
-7
@@ -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
|
||||
|
||||
+1
-10
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user