From 0d605a6b7ffb29de80216b84bf97d1a24e637ff0 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 14 Jul 2020 19:57:17 +0200 Subject: [PATCH] IR: create IrBlockBody via IrFactory --- .../kotlin/fir/backend/Fir2IrVisitor.kt | 2 +- .../generators/ClassMemberGenerator.kt | 4 ++-- .../generators/DelegatedMemberGenerator.kt | 7 ++++-- .../kotlin/backend/common/ir/IrUtils.kt | 3 +-- .../lower/DefaultArgumentStubGenerator.kt | 2 +- .../lower/InlineClassDeclarationLowering.kt | 7 +++--- .../common/lower/InnerClassesLowering.kt | 2 +- .../backend/common/lower/LateinitLowering.kt | 7 ++++-- .../ir/backend/js/JsIrBackendContext.kt | 3 +-- .../kotlin/ir/backend/js/ir/IrBuilder.kt | 2 -- .../js/lower/AnnotationConstructorLowering.kt | 5 ++-- .../js/lower/BlockDecomposerLowering.kt | 2 +- .../backend/js/lower/BridgesConstruction.kt | 3 +-- .../js/lower/CallableReferenceLowering.kt | 4 ++-- .../js/lower/CreateScriptFunctionsPhase.kt | 5 ++-- ...AddInternalParametersToConstructorPhase.kt | 3 ++- .../ir/backend/js/lower/EnumClassLowering.kt | 9 ++++---- .../lower/InteropCallableReferenceLowering.kt | 6 ++--- .../ir/backend/js/lower/ObjectLowering.kt | 3 +-- .../js/lower/PrimaryConstructorLowering.kt | 3 +-- .../js/lower/PrivateMembersLowering.kt | 7 ++++-- .../backend/js/lower/SecondaryCtorLowering.kt | 9 +++++--- .../ir/backend/js/lower/TestGenerator.kt | 3 ++- .../coroutines/JsSuspendFunctionsLowering.kt | 10 +++++--- ...ctionsWithReifiedTypeParametersLowering.kt | 3 +-- .../transformers/irToJs/MultiModuleSupport.kt | 4 ++-- .../AnonymousInitializerGenerator.kt | 5 ++-- .../kotlin/psi2ir/generators/BodyGenerator.kt | 10 ++++---- .../psi2ir/generators/ClassGenerator.kt | 7 ++++-- .../psi2ir/generators/FunctionGenerator.kt | 9 +++++--- .../ReflectionReferencesGenerator.kt | 2 +- .../jetbrains/kotlin/ir/builders/IrBuilder.kt | 4 +--- .../kotlin/ir/declarations/IrFactory.kt | 19 +++++++++++++++ .../ir/declarations/impl/IrFactoryImpl.kt | 23 +++++++++++++++++++ .../jetbrains/kotlin/ir/expressions/IrBody.kt | 4 +++- .../ir/expressions/impl/IrBlockBodyImpl.kt | 6 ++++- .../ir/util/DeepCopyIrTreeWithSymbols.kt | 2 +- .../serialization/IrFileDeserializer.kt | 4 ++-- .../common/serialization/KotlinIrLinker.kt | 6 ++--- 39 files changed, 137 insertions(+), 82 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index ee40995d2b7..fe6e2ae3fae 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -582,7 +582,7 @@ class Fir2IrVisitor( internal fun convertToIrBlockBody(block: FirBlock): IrBlockBody { return block.convertWithOffsets { startOffset, endOffset -> val irStatements = block.mapToIrStatements() - IrBlockBodyImpl( + irFactory.createBlockBody( startOffset, endOffset, if (irStatements.isNotEmpty()) { irStatements.filterNotNull().takeIf { it.isNotEmpty() } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt index 5674b57df85..865d5b83fc0 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt @@ -127,7 +127,7 @@ internal class ClassMemberGenerator( annotationGenerator.generate(irFunction, firFunction) } if (firFunction is FirConstructor && irFunction is IrConstructor && !parentAsClass.isAnnotationClass && !firFunction.isExpect) { - val body = IrBlockBodyImpl(startOffset, endOffset) + val body = factory.createBlockBody(startOffset, endOffset) val delegatedConstructor = firFunction.delegatedConstructor if (delegatedConstructor != null) { val irDelegatingConstructorCall = delegatedConstructor.toIrDelegatingConstructorCall() @@ -250,7 +250,7 @@ internal class ClassMemberGenerator( val fieldSymbol = backingField?.symbol val declaration = this if (fieldSymbol != null) { - body = IrBlockBodyImpl( + body = factory.createBlockBody( startOffset, endOffset, listOf( if (isSetter) { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DelegatedMemberGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DelegatedMemberGenerator.kt index da77b442a00..8e5c66aaae1 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DelegatedMemberGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DelegatedMemberGenerator.kt @@ -27,7 +27,10 @@ import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedTypeParameterDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedValueParameterDescriptor -import org.jetbrains.kotlin.ir.expressions.impl.* +import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl @@ -212,7 +215,7 @@ internal class DelegatedMemberGenerator( } } - val body = IrBlockBodyImpl(startOffset, endOffset) + val body = irFactory.createBlockBody(startOffset, endOffset) val irCall = IrCallImpl( startOffset, endOffset, diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt index 7d44b8b842a..0ffe8c510ec 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildTypeParameter import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.descriptors.* import org.jetbrains.kotlin.ir.expressions.* -import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl @@ -66,7 +65,7 @@ fun IrClass.addSimpleDelegatingConstructor( parameter.copyTo(constructor, index = index) } - constructor.body = IrBlockBodyImpl( + constructor.body = factory.createBlockBody( startOffset, endOffset, listOf( IrDelegatingConstructorCallImpl( diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt index 1dc5285f51e..c5880598a79 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt @@ -70,7 +70,7 @@ open class DefaultArgumentStubGenerator( log { "$irFunction -> $newIrFunction" } val builder = context.createIrBuilder(newIrFunction.symbol) - newIrFunction.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { + newIrFunction.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { statements += builder.irBlockBody(newIrFunction) { val params = mutableListOf() val variables = mutableMapOf() diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InlineClassDeclarationLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InlineClassDeclarationLowering.kt index 4694b77c8b7..49de7d414ca 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InlineClassDeclarationLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InlineClassDeclarationLowering.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* -import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid @@ -73,7 +72,7 @@ class InlineClassLowering(val context: CommonBackendContext) { val irClass = irConstructor.parentAsClass // Copied and adapted from Kotlin/Native InlineClassTransformer - staticMethod.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { + staticMethod.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { statements += context.createIrBuilder(staticMethod.symbol).irBlockBody(staticMethod) { // Secondary ctors of inline class must delegate to some other constructors. @@ -139,7 +138,7 @@ class InlineClassLowering(val context: CommonBackendContext) { val functionBody = function.body // Move function body to static method, transforming value parameters and nested declarations - staticMethod.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { + staticMethod.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { statements.addAll((functionBody as IrBlockBody).statements) transformChildrenVoid(object : IrElementTransformerVoid() { @@ -177,7 +176,7 @@ class InlineClassLowering(val context: CommonBackendContext) { private fun delegateToStaticMethod(function: IrSimpleFunction, staticMethod: IrSimpleFunction): IrBlockBody { // Delegate original function to static implementation - return IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { + return context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { statements += context.createIrBuilder(function.symbol).irBlockBody { +irReturn( irCall(staticMethod).apply { diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt index 49ffa5358ca..766aac021b4 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt @@ -69,7 +69,7 @@ class InnerClassesLowering(val context: BackendContext, private val innerClasses val blockBody = irConstructor.body as? IrBlockBody ?: throw AssertionError("Unexpected constructor body: ${irConstructor.body}") - loweredConstructor.body = IrBlockBodyImpl(blockBody.startOffset, blockBody.endOffset) { + loweredConstructor.body = context.irFactory.createBlockBody(blockBody.startOffset, blockBody.endOffset) { context.createIrBuilder(irConstructor.symbol, irConstructor.startOffset, irConstructor.endOffset).apply { statements.add(0, irSetField(irGet(irClass.thisReceiver!!), parentThisField, irGet(outerThisParameter))) } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LateinitLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LateinitLowering.kt index 5fbb3baa761..4c54276bbc3 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LateinitLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LateinitLowering.kt @@ -24,7 +24,10 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildField import org.jetbrains.kotlin.ir.builders.declarations.buildVariable import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* -import org.jetbrains.kotlin.ir.expressions.impl.* +import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrSetVariableImpl import org.jetbrains.kotlin.ir.types.isMarkedNullable import org.jetbrains.kotlin.ir.types.isPrimitiveType import org.jetbrains.kotlin.ir.types.makeNullable @@ -84,7 +87,7 @@ class NullableFieldsDeclarationLowering(val backendContext: CommonBackendContext assert(!type.isPrimitiveType()) { "'lateinit' modifier is not allowed on primitive types" } val startOffset = getter.startOffset val endOffset = getter.endOffset - getter.body = IrBlockBodyImpl(startOffset, endOffset) { + getter.body = backendContext.irFactory.createBlockBody(startOffset, endOffset) { val irBuilder = backendContext.createIrBuilder(getter.symbol, startOffset, endOffset) irBuilder.run { val resultVar = scope.createTmpVariable( diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt index 5cc8f743ae4..ab5dafc91a9 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt @@ -14,7 +14,6 @@ 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.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 @@ -129,7 +128,7 @@ class JsIrBackendContext( return testContainerFuns.getOrPut(module) { val file = syntheticFile("tests", module) jsIrDeclarationBuilder.buildFunction("test fun", irBuiltIns.unitType, file).apply { - body = JsIrBuilder.buildBlockBody(emptyList()) + body = irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET, emptyList()) file.declarations += this } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/IrBuilder.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/IrBuilder.kt index f319d5fd9b6..e7ebac976bf 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/IrBuilder.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/IrBuilder.kt @@ -75,8 +75,6 @@ object JsIrBuilder { ) = IrSetFieldImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, symbol, receiver, value, type, SYNTHESIZED_STATEMENT, superQualifierSymbol) - fun buildBlockBody(statements: List) = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, statements) - fun buildBlock(type: IrType) = IrBlockImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, SYNTHESIZED_STATEMENT) fun buildBlock(type: IrType, statements: List) = IrBlockImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, SYNTHESIZED_STATEMENT, statements) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/AnnotationConstructorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/AnnotationConstructorLowering.kt index afcb0209b7a..6d96cd8f5fc 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/AnnotationConstructorLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/AnnotationConstructorLowering.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.backend.common.DeclarationTransformer import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrDeclaration -import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl import org.jetbrains.kotlin.ir.util.parentAsClass @@ -27,10 +26,10 @@ class AnnotationConstructorLowering(context: CommonBackendContext) : Declaration // put empty body to make sure proper initializer is generated // TODO what about its previous body? - declaration.body = IrBlockBodyImpl(declaration.startOffset, declaration.endOffset) { + declaration.body = declaration.factory.createBlockBody(declaration.startOffset, declaration.endOffset) { statements += IrInstanceInitializerCallImpl(startOffset, endOffset, irClass.symbol, unitType) } return null } -} \ No newline at end of file +} diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt index 67368ef5727..afa71cf3e63 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt @@ -82,7 +82,7 @@ abstract class AbstractBlockDecomposerLowering( } private fun IrExpressionBody.toBlockBody(containingFunction: IrFunction): IrBlockBody { - return IrBlockBodyImpl(startOffset, endOffset) { + return context.irFactory.createBlockBody(startOffset, endOffset) { expression.patchDeclarationParents(containingFunction) val returnStatement = JsIrBuilder.buildReturn(containingFunction.symbol, expression, nothingType) statements += returnStatement diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt index c1769befec1..8176b0a314e 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.ir.backend.js.utils.getJsName import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrExpression -import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.classifierOrNull import org.jetbrains.kotlin.ir.util.* @@ -140,7 +139,7 @@ class BridgesConstruction(val context: JsCommonBackendContext) : DeclarationTran overriddenSymbols += bridge.symbol } - irFunction.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { + irFunction.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { statements += context.createIrBuilder(irFunction.symbol).irBlockBody(irFunction) { if (specialMethodInfo != null) { irFunction.valueParameters.take(specialMethodInfo.argumentsToCheck).forEach { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt index c84a52d3601..eecba68a804 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt @@ -293,7 +293,7 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod } } - body = IrBlockBodyImpl(reference.startOffset, reference.endOffset, listOf(reference.run { + body = factory.createBlockBody(reference.startOffset, reference.endOffset, listOf(reference.run { IrReturnImpl( startOffset, endOffset, nothingType, @@ -324,7 +324,7 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod type = clazz.defaultType } - getter.body = IrBlockBodyImpl( + getter.body = context.irFactory.createBlockBody( UNDEFINED_OFFSET, UNDEFINED_OFFSET, listOf( IrReturnImpl( UNDEFINED_OFFSET, UNDEFINED_OFFSET, nothingType, getter.symbol, IrConstImpl.string( diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CreateScriptFunctionsPhase.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CreateScriptFunctionsPhase.kt index a972b118eea..fef1e1f3cc5 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CreateScriptFunctionsPhase.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CreateScriptFunctionsPhase.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrSetField -import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl @@ -45,7 +44,7 @@ class CreateScriptFunctionsPhase(val context: CommonBackendContext) : FileLoweri initializeStatements.forEach { it.first.initializer = null } val initializeScriptFunction = createFunction(irScript, "\$initializeScript\$", context.irBuiltIns.unitType).also { - it.body = IrBlockBodyImpl( + it.body = it.factory.createBlockBody( startOffset, endOffset, initializeStatements.map { (field, expression) -> createIrSetField(field, expression) } @@ -53,7 +52,7 @@ class CreateScriptFunctionsPhase(val context: CommonBackendContext) : FileLoweri } val evaluateScriptFunction = createFunction(irScript, "\$evaluateScript\$", getReturnType(irScript)).also { - it.body = IrBlockBodyImpl( + it.body = it.factory.createBlockBody( startOffset, endOffset, irScript.statements.prepareForEvaluateScriptFunction(it) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6AddInternalParametersToConstructorPhase.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6AddInternalParametersToConstructorPhase.kt index c36fb9fad20..4fb25701bf3 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6AddInternalParametersToConstructorPhase.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6AddInternalParametersToConstructorPhase.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.BodyLoweringPass import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities 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.PrimaryConstructorLowering.SYNTHETIC_PRIMARY_CONSTRUCTOR @@ -115,7 +116,7 @@ class ES6AddInternalParametersToConstructorPhase(val context: JsIrBackendContext ).apply { addValueParameter("\$this\$", context.dynamicType) - body = JsIrBuilder.buildBlockBody(constructor.body?.statements ?: emptyList()) + body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET, constructor.body?.statements.orEmpty()) transformChildren(object : IrElementTransformerVoid() { override fun visitGetValue(expression: IrGetValue): IrExpression { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt index 44757309195..94ee7eb442b 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor import org.jetbrains.kotlin.ir.builders.declarations.buildField import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* -import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrVarargImpl import org.jetbrains.kotlin.ir.types.IrType @@ -129,7 +128,7 @@ class EnumClassConstructorLowering(val context: JsCommonBackendContext) : Declar enumConstructor.newConstructor = this enumConstructor.body?.let { oldBody -> - body = IrBlockBodyImpl(oldBody.startOffset, oldBody.endOffset) { + body = context.irFactory.createBlockBody(oldBody.startOffset, oldBody.endOffset) { statements += (oldBody as IrBlockBody).statements context.fixReferencesToConstructorParameters(enumClass, this) @@ -400,7 +399,7 @@ 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 { - it.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { + it.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { statements += context.createIrBuilder(it.symbol).irBlockBody(it) { +irIfThen(irGetField(null, entryInstancesInitializedField), irReturnUnit()) +irSetField(null, entryInstancesInitializedField, irBoolean(true)) @@ -456,7 +455,7 @@ class EnumEntryCreateGetInstancesFunsLowering(val context: JsIrBackendContext): enumEntry.getType(irClass) ) }.also { - it.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { + it.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { statements += context.createIrBuilder(it.symbol).irBlockBody(it) { +irCall(initEntryInstancesFun) +irReturn(irGetField(null, enumEntry.correspondingField!!)) @@ -475,7 +474,7 @@ class EnumSyntheticFunctionsLowering(val context: JsIrBackendContext): Declarati val kind = body.kind declaration.parents.filterIsInstance().firstOrNull { it.goodEnum }?.let { irClass -> - declaration.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { + declaration.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { statements += when (kind) { IrSyntheticBodyKind.ENUM_VALUES -> createEnumValuesBody(declaration, irClass) IrSyntheticBodyKind.ENUM_VALUEOF -> createEnumValueOfBody(declaration, irClass) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt index 5186f073456..469cdbe0c6f 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt @@ -87,7 +87,7 @@ class InteropCallableReferenceLowering(val context: JsIrBackendContext) : BodyLo invokeExpression.putValueArgument(i, getValue(vp)) } - return IrBlockBodyImpl( + return context.irFactory.createBlockBody( UNDEFINED_OFFSET, UNDEFINED_OFFSET, listOf( @@ -188,9 +188,7 @@ class InteropCallableReferenceLowering(val context: JsIrBackendContext) : BodyLo statements.add(JsIrBuilder.buildReturn(factoryFunction.symbol, functionExpression, context.irBuiltIns.nothingType)) } - return expression.run { - IrBlockBodyImpl(startOffset, endOffset, statements) - } + return context.irFactory.createBlockBody(expression.startOffset, expression.endOffset, statements) } private fun buildFactoryFunction(expression: IrConstructorCall): IrSimpleFunction { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ObjectLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ObjectLowering.kt index 531abbb28e1..96f0129fa7d 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ObjectLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ObjectLowering.kt @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.expressions.* -import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.types.makeNullable import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid @@ -56,7 +55,7 @@ class ObjectDeclarationLowering( val primaryConstructor = declaration.primaryConstructor ?: declaration.syntheticPrimaryConstructor!! - getInstanceFun.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { + getInstanceFun.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { statements += context.createIrBuilder(getInstanceFun.symbol).irBlockBody(getInstanceFun) { +irIfThen( irEqualsNull(irGetField(null, instanceField)), diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrimaryConstructorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrimaryConstructorLowering.kt index f32373f993d..7654aa55eec 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrimaryConstructorLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrimaryConstructorLowering.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.ir.builders.declarations.addConstructor import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrInstanceInitializerCall -import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl import org.jetbrains.kotlin.ir.util.constructors @@ -53,7 +52,7 @@ class PrimaryConstructorLowering(context: JsCommonBackendContext) : DeclarationT } declaration.body = irClass.run { - IrBlockBodyImpl(startOffset, endOffset, listOf(IrInstanceInitializerCallImpl(startOffset, endOffset, symbol, unitType))) + factory.createBlockBody(startOffset, endOffset, listOf(IrInstanceInitializerCallImpl(startOffset, endOffset, symbol, unitType))) } return declaration diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrivateMembersLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrivateMembersLowering.kt index d4e6e4e1312..521bb448bb0 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrivateMembersLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrivateMembersLowering.kt @@ -14,7 +14,10 @@ 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.expressions.* -import org.jetbrains.kotlin.ir.expressions.impl.* +import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrPropertyReferenceImpl import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.name.Name @@ -105,7 +108,7 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : DeclarationTrans function.body?.let { staticFunction.body = when (it) { - is IrBlockBody -> IrBlockBodyImpl(it.startOffset, it.endOffset) { + is IrBlockBody -> context.irFactory.createBlockBody(it.startOffset, it.endOffset) { statements += (it.copyWithParameters() as IrBlockBody).statements } is IrExpressionBody -> context.irFactory.createExpressionBody(it.startOffset, it.endOffset) { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt index f2d585cc081..d0fe4e2b3d8 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt @@ -19,7 +19,10 @@ import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* -import org.jetbrains.kotlin.ir.expressions.impl.* +import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrRawFunctionReferenceImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl @@ -81,7 +84,7 @@ class SecondaryConstructorLowering(val context: JsIrBackendContext) : Declaratio } private fun generateFactoryBody(constructor: IrConstructor, irClass: IrClass, stub: IrSimpleFunction, delegate: IrSimpleFunction) { - stub.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { + stub.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { val type = irClass.defaultType val createFunctionIntrinsic = context.intrinsics.jsObjectCreate val irCreateCall = JsIrBuilder.buildCall(createFunctionIntrinsic.symbol, type, listOf(type)) @@ -128,7 +131,7 @@ class SecondaryConstructorLowering(val context: JsIrBackendContext) : Declaratio val oldValueParameters = constructor.valueParameters + oldThisReceiver // TODO: replace parameters as well - delegate.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { + delegate.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { statements += (constructorBody.deepCopyWithSymbols(delegate) as IrStatementContainer).statements statements += JsIrBuilder.buildReturn(delegate.symbol, JsIrBuilder.buildGetValue(thisParam.symbol), context.irBuiltIns.nothingType) transformChildrenVoid(ThisUsageReplaceTransformer(delegate.symbol, oldValueParameters.zip(delegate.valueParameters).toMap())) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TestGenerator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TestGenerator.kt index 41c79a8ce31..a50de5b9cb4 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TestGenerator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TestGenerator.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.descriptors.ClassKind 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.declarations.* @@ -54,7 +55,7 @@ class TestGenerator(val context: JsIrBackendContext, val testContainerFactory: ( parentFunction: IrSimpleFunction, ignored: Boolean = false ): FunctionWithBody { - val body = JsIrBuilder.buildBlockBody(emptyList()) + val body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET, emptyList()) val function = context.jsIrDeclarationBuilder.buildFunction("$name test fun", context.irBuiltIns.anyNType, parentFunction) function.body = body diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/JsSuspendFunctionsLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/JsSuspendFunctionsLowering.kt index ec77f03cb32..19dd44b628d 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/JsSuspendFunctionsLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/JsSuspendFunctionsLowering.kt @@ -15,7 +15,10 @@ import org.jetbrains.kotlin.ir.builders.* 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.* +import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol +import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol +import org.jetbrains.kotlin.ir.symbols.IrValueSymbol +import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.explicitParameters import org.jetbrains.kotlin.ir.util.patchDeclarationParents @@ -135,8 +138,9 @@ class JsSuspendFunctionsLowering(ctx: JsIrBackendContext) : AbstractSuspendFunct }) } - val functionBody = - IrBlockBodyImpl(stateMachineFunction.startOffset, stateMachineFunction.endOffset, listOf(suspendResult, rootLoop)) + val functionBody = context.irFactory.createBlockBody( + stateMachineFunction.startOffset, stateMachineFunction.endOffset, listOf(suspendResult, rootLoop) + ) stateMachineFunction.body = functionBody diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineFunctionsWithReifiedTypeParametersLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineFunctionsWithReifiedTypeParametersLowering.kt index 4bd8e9620a4..c7e0a16fdf9 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineFunctionsWithReifiedTypeParametersLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineFunctionsWithReifiedTypeParametersLowering.kt @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.expressions.IrBlockBody -import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols class RemoveInlineFunctionsWithReifiedTypeParametersLowering: DeclarationTransformer { @@ -30,7 +29,7 @@ class CopyInlineFunctionBodyLowering(val context: JsIrBackendContext) : Declarat override fun transformFlat(declaration: IrDeclaration): List? { if (declaration is IrFunction && declaration.isInline) { declaration.body?.let { originalBody -> - declaration.body = IrBlockBodyImpl(originalBody.startOffset, originalBody.endOffset) { + declaration.body = context.irFactory.createBlockBody(originalBody.startOffset, originalBody.endOffset) { statements += (originalBody.deepCopyWithSymbols(declaration) as IrBlockBody).statements } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/MultiModuleSupport.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/MultiModuleSupport.kt index be413e7d99d..e0e479aa657 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/MultiModuleSupport.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/MultiModuleSupport.kt @@ -131,7 +131,7 @@ fun breakCrossModuleFieldAccess( name = Name.identifier("get-$fieldName") returnType = type } - getter.body = IrBlockBodyImpl( + getter.body = factory.createBlockBody( UNDEFINED_OFFSET, UNDEFINED_OFFSET, listOf( IrReturnImpl( UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, getter.symbol, @@ -158,7 +158,7 @@ fun breakCrossModuleFieldAccess( val param = setter.addValueParameter("value", type) - setter.body = IrBlockBodyImpl( + setter.body = factory.createBlockBody( UNDEFINED_OFFSET, UNDEFINED_OFFSET, listOf( IrSetFieldImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, symbol, type).apply { value = IrGetValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, param.symbol) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnonymousInitializerGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnonymousInitializerGenerator.kt index 739378f393c..0e9789480cf 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnonymousInitializerGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnonymousInitializerGenerator.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.psi2ir.generators import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin -import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.psi.KtAnonymousInitializer import org.jetbrains.kotlin.psi.KtBlockExpression import org.jetbrains.kotlin.psi.psiUtil.endOffset @@ -41,7 +40,7 @@ class AnonymousInitializerGenerator( val bodyGenerator = createBodyGenerator(irAnonymousInitializer.symbol) val statementGenerator = bodyGenerator.createStatementGenerator() val ktBody = ktAnonymousInitializer.body!! - val irBlockBody = IrBlockBodyImpl(ktBody.startOffsetSkippingComments, ktBody.endOffset) + val irBlockBody = context.irFactory.createBlockBody(ktBody.startOffsetSkippingComments, ktBody.endOffset) if (ktBody is KtBlockExpression) { statementGenerator.generateStatements(ktBody.statements, irBlockBody) } else { @@ -49,4 +48,4 @@ class AnonymousInitializerGenerator( } irAnonymousInitializer.body = irBlockBody } -} \ No newline at end of file +} diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt index f965588bd6e..80799be7b90 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt @@ -54,7 +54,7 @@ class BodyGenerator( fun generateFunctionBody(ktBody: KtExpression): IrBody { val statementGenerator = createStatementGenerator() - val irBlockBody = IrBlockBodyImpl(ktBody.startOffsetSkippingComments, ktBody.endOffset) + val irBlockBody = context.irFactory.createBlockBody(ktBody.startOffsetSkippingComments, ktBody.endOffset) if (ktBody is KtBlockExpression) { statementGenerator.generateStatements(ktBody.statements, irBlockBody) } else { @@ -77,7 +77,7 @@ class BodyGenerator( val statementGenerator = createStatementGenerator() val ktBody = ktFun.bodyExpression!! - val irBlockBody = IrBlockBodyImpl(ktBody.startOffsetSkippingComments, ktBody.endOffset) + val irBlockBody = context.irFactory.createBlockBody(ktBody.startOffsetSkippingComments, ktBody.endOffset) for (ktParameter in ktFun.valueParameters) { val ktDestructuringDeclaration = ktParameter.destructuringDeclaration ?: continue @@ -131,7 +131,7 @@ class BodyGenerator( } fun generateSecondaryConstructorBody(ktConstructor: KtSecondaryConstructor): IrBody { - val irBlockBody = IrBlockBodyImpl(ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset) + val irBlockBody = context.irFactory.createBlockBody(ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset) generateDelegatingConstructorCall(irBlockBody, ktConstructor) @@ -177,7 +177,7 @@ class BodyGenerator( loopTable[expression] fun generatePrimaryConstructorBody(ktClassOrObject: KtPureClassOrObject): IrBody { - val irBlockBody = IrBlockBodyImpl(ktClassOrObject.pureStartOffset, ktClassOrObject.pureEndOffset) + val irBlockBody = context.irFactory.createBlockBody(ktClassOrObject.pureStartOffset, ktClassOrObject.pureEndOffset) generateSuperConstructorCall(irBlockBody, ktClassOrObject) @@ -194,7 +194,7 @@ class BodyGenerator( } fun generateSecondaryConstructorBodyWithNestedInitializers(ktConstructor: KtSecondaryConstructor): IrBody { - val irBlockBody = IrBlockBodyImpl(ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset) + val irBlockBody = context.irFactory.createBlockBody(ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset) generateDelegatingConstructorCall(irBlockBody, ktConstructor) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt index 59eec0f2399..fc6a3546e0c 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt @@ -22,7 +22,10 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.descriptors.IrImplementingDelegateDescriptorImpl import org.jetbrains.kotlin.ir.expressions.IrBlockBody -import org.jetbrains.kotlin.ir.expressions.impl.* +import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl import org.jetbrains.kotlin.ir.expressions.mapValueParameters import org.jetbrains.kotlin.ir.expressions.putTypeArguments import org.jetbrains.kotlin.ir.expressions.typeParametersCount @@ -324,7 +327,7 @@ class ClassGenerator( val startOffset = irDelegate.startOffset val endOffset = irDelegate.endOffset - val irBlockBody = IrBlockBodyImpl(startOffset, endOffset) + val irBlockBody = context.irFactory.createBlockBody(startOffset, endOffset) val substitutedDelegateTo = substituteDelegateToDescriptor(delegatedDescriptor, delegateToDescriptor) val returnType = substitutedDelegateTo.returnType!! diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt index 64eb34dcdfc..642e1afaadf 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt @@ -13,7 +13,10 @@ import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpressionBody -import org.jetbrains.kotlin.ir.expressions.impl.* +import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides import org.jetbrains.kotlin.psi.* @@ -148,7 +151,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio val startOffset = irAccessor.startOffset val endOffset = irAccessor.endOffset - val irBody = IrBlockBodyImpl(startOffset, endOffset) + val irBody = context.irFactory.createBlockBody(startOffset, endOffset) val receiver = generateReceiverExpressionForDefaultPropertyAccessor(property, irAccessor) @@ -175,7 +178,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio val startOffset = irAccessor.startOffset val endOffset = irAccessor.endOffset - val irBody = IrBlockBodyImpl(startOffset, endOffset) + val irBody = context.irFactory.createBlockBody(startOffset, endOffset) val receiver = generateReceiverExpressionForDefaultPropertyAccessor(property, irAccessor) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt index adaf474b784..9a39ce840bd 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt @@ -141,7 +141,7 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St createAdapterFun(startOffset, endOffset, adapteeDescriptor, ktExpectedParameterTypes, ktExpectedReturnType, callBuilder, callableReferenceType) val irCall = createAdapteeCall(startOffset, endOffset, adapteeSymbol, callBuilder, irAdapterFun) - irAdapterFun.body = IrBlockBodyImpl(startOffset, endOffset).apply { + irAdapterFun.body = context.irFactory.createBlockBody(startOffset, endOffset).apply { if (KotlinBuiltIns.isUnit(ktExpectedReturnType)) statements.add(irCall) else diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/IrBuilder.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/IrBuilder.kt index e2dd41fb3d1..5a233bdb4c9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/IrBuilder.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/IrBuilder.kt @@ -18,12 +18,10 @@ package org.jetbrains.kotlin.ir.builders import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement -import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrContainerExpression import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin -import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl import org.jetbrains.kotlin.ir.expressions.impl.IrCompositeImpl import org.jetbrains.kotlin.ir.types.IrType @@ -63,7 +61,7 @@ open class IrBlockBodyBuilder( startOffset: Int, endOffset: Int ) : IrStatementsBuilder(context, scope, startOffset, endOffset) { - private val irBlockBody = IrBlockBodyImpl(startOffset, endOffset) + private val irBlockBody = context.irFactory.createBlockBody(startOffset, endOffset) inline fun blockBody(body: IrBlockBodyBuilder.() -> Unit): IrBlockBody { body() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt index f8690c1797b..3d4e1c5696e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt @@ -6,6 +6,8 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.IrStatement +import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.* @@ -212,4 +214,21 @@ interface IrFactory { fun createExpressionBody( expression: IrExpression, ): IrExpressionBody + + fun createBlockBody( + startOffset: Int, + endOffset: Int, + ): IrBlockBody + + fun createBlockBody( + startOffset: Int, + endOffset: Int, + statements: List, + ): IrBlockBody + + fun createBlockBody( + startOffset: Int, + endOffset: Int, + initializer: IrBlockBody.() -> Unit, + ): IrBlockBody } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt index 7b8e8a7552a..d14163741ce 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt @@ -6,9 +6,12 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpressionBody +import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.types.IrType @@ -244,4 +247,24 @@ object IrFactoryImpl : IrFactory { expression: IrExpression, ): IrExpressionBody = IrExpressionBodyImpl(expression) + + override fun createBlockBody( + startOffset: Int, + endOffset: Int, + ): IrBlockBody = + IrBlockBodyImpl(startOffset, endOffset, null) + + override fun createBlockBody( + startOffset: Int, + endOffset: Int, + statements: List, + ): IrBlockBody = + IrBlockBodyImpl(startOffset, endOffset, statements) + + override fun createBlockBody( + startOffset: Int, + endOffset: Int, + initializer: IrBlockBody.() -> Unit, + ): IrBlockBody = + IrBlockBodyImpl(startOffset, endOffset, initializer) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt index 0b96229c733..517acb40791 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt @@ -34,7 +34,9 @@ interface IrExpressionBody : IrBody { accept(transformer, data) as IrExpressionBody } -interface IrBlockBody : IrBody, IrStatementContainer +interface IrBlockBody : IrBody, IrStatementContainer { + val factory: IrFactory +} interface IrSyntheticBody : IrBody { val kind: IrSyntheticBodyKind diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockBodyImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockBodyImpl.kt index b5cb0bd1d96..302f05106e3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockBodyImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockBodyImpl.kt @@ -17,11 +17,12 @@ package org.jetbrains.kotlin.ir.expressions.impl import org.jetbrains.kotlin.ir.IrStatement +import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.declarations.impl.IrBodyBase +import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -import java.util.* class IrBlockBodyImpl( startOffset: Int, @@ -40,6 +41,9 @@ class IrBlockBodyImpl( override val statements: MutableList get() = checkEnabled { statementsField } + override val factory: IrFactory + get() = IrFactoryImpl + override fun accept(visitor: IrElementVisitor, data: D): R { return visitor.visitBlockBody(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt index 1541d97d3e6..68043a29d8f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt @@ -372,7 +372,7 @@ open class DeepCopyIrTreeWithSymbols( body.factory.createExpressionBody(body.expression.transform()) override fun visitBlockBody(body: IrBlockBody): IrBlockBody = - IrBlockBodyImpl( + body.factory.createBlockBody( body.startOffset, body.endOffset, body.statements.map { it.transform() } ) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt index ca04504e622..685b89aca6a 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt @@ -113,7 +113,7 @@ abstract class IrFileDeserializer( private val deserializeFakeOverrides: Boolean, private val fakeOverrideQueue: MutableList ) { - private val irFactory: IrFactory get() = symbolTable.irFactory + protected val irFactory: IrFactory get() = symbolTable.irFactory abstract fun deserializeIrSymbolToDeclare(code: Long): Pair abstract fun deserializeIrSymbol(code: Long): IrSymbol @@ -269,7 +269,7 @@ abstract class IrFileDeserializer( statements.add(deserializeStatement(it) as IrStatement) } - return IrBlockBodyImpl(start, end, statements) + return irFactory.createBlockBody(start, end, statements) } private fun deserializeBranch(proto: ProtoBranch, start: Int, end: Int): IrBranch { diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt index af7e9a8fe43..05c9118787a 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.backend.common.serialization import org.jetbrains.kotlin.backend.common.LoggingContext import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder -import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideControl import org.jetbrains.kotlin.backend.common.serialization.encodings.BinarySymbolData import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor @@ -23,7 +22,6 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl import org.jetbrains.kotlin.ir.descriptors.* import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrLoop -import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl import org.jetbrains.kotlin.ir.linkage.IrDeserializer import org.jetbrains.kotlin.ir.symbols.* @@ -417,7 +415,9 @@ abstract class KotlinIrLinker( deserializeStatement(bodyData) } else { val errorType = IrErrorTypeImpl(null, emptyList(), Variance.INVARIANT) - IrBlockBodyImpl(-1, -1, listOf(IrErrorExpressionImpl(-1, -1, errorType, "Statement body is not deserialized yet"))) + irFactory.createBlockBody( + -1, -1, listOf(IrErrorExpressionImpl(-1, -1, errorType, "Statement body is not deserialized yet")) + ) } }