From d62323cdf164b028c4d91b07fd79efa88e32bc40 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Wed, 16 Aug 2023 11:23:32 +0200 Subject: [PATCH] [Native] Move `addTopLevelInitializer` from `IrUtils2` This function is actually used only in `InteropLowering` and it is too specific to be included into utils. --- .../backend/konan/lower/InteropLowering.kt | 34 ++++++++++++-- .../org/jetbrains/kotlin/ir/util/IrUtils2.kt | 47 +------------------ 2 files changed, 32 insertions(+), 49 deletions(-) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt index de47752ed4b..3f9e349f3b4 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt @@ -27,17 +27,16 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.expressions.* -import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl -import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl -import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl -import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl +import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.util.toIrConst import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol +import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.types.* @@ -149,6 +148,8 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) : private val eagerTopLevelInitializers = mutableListOf() private val newTopLevelDeclarations = mutableListOf() + private var topLevelInitializersCounter = 0 + override val irFile: IrFile get() = currentFile @@ -168,6 +169,31 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) : newTopLevelDeclarations.clear() } + private fun IrFile.addTopLevelInitializer(expression: IrExpression, context: KonanBackendContext, threadLocal: Boolean, eager: Boolean) { + val irField = IrFieldImpl( + expression.startOffset, expression.endOffset, + IrDeclarationOrigin.DEFINED, + IrFieldSymbolImpl(), + "topLevelInitializer${topLevelInitializersCounter++}".synthesizedName, + expression.type, + DescriptorVisibilities.PRIVATE, + isFinal = true, + isExternal = false, + isStatic = true, + ).apply { + expression.setDeclarationsParent(this) + + if (threadLocal) + annotations += buildSimpleAnnotation(context.irBuiltIns, startOffset, endOffset, context.ir.symbols.threadLocal.owner) + + if (eager) + annotations += buildSimpleAnnotation(context.irBuiltIns, startOffset, endOffset, context.ir.symbols.eagerInitialization.owner) + + initializer = IrExpressionBodyImpl(startOffset, endOffset, expression) + } + addChild(irField) + } + private fun IrBuilderWithScope.callAlloc(classPtr: IrExpression): IrExpression = irCall(symbols.interopAllocObjCObject).apply { putValueArgument(0, classPtr) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUtils2.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUtils2.kt index f1815aab8b6..c814cf6205a 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUtils2.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUtils2.kt @@ -5,59 +5,16 @@ package org.jetbrains.kotlin.ir.util -import org.jetbrains.kotlin.backend.konan.KonanBackendContext -import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName -import org.jetbrains.kotlin.backend.konan.ir.buildSimpleAnnotation -import org.jetbrains.kotlin.descriptors.DescriptorVisibilities -import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl -import org.jetbrains.kotlin.ir.IrFileEntry -import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope import org.jetbrains.kotlin.ir.builders.declarations.buildVariable import org.jetbrains.kotlin.ir.builders.parent -import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl -import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin +import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.expressions.IrConst import org.jetbrains.kotlin.ir.expressions.IrConstantValue -import org.jetbrains.kotlin.ir.expressions.IrExpression -import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression import org.jetbrains.kotlin.ir.expressions.impl.IrCatchImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl -import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl -import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl -import org.jetbrains.kotlin.ir.types.makeNullable -import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.calls.checkers.isRestrictsSuspensionReceiver -import org.jetbrains.kotlin.resolve.scopes.MemberScope - -private var topLevelInitializersCounter = 0 - -internal fun IrFile.addTopLevelInitializer(expression: IrExpression, context: KonanBackendContext, threadLocal: Boolean, eager: Boolean) { - val irField = IrFieldImpl( - expression.startOffset, expression.endOffset, - IrDeclarationOrigin.DEFINED, - IrFieldSymbolImpl(), - "topLevelInitializer${topLevelInitializersCounter++}".synthesizedName, - expression.type, - DescriptorVisibilities.PRIVATE, - isFinal = true, - isExternal = false, - isStatic = true, - ).apply { - expression.setDeclarationsParent(this) - - if (threadLocal) - annotations += buildSimpleAnnotation(context.irBuiltIns, startOffset, endOffset, context.ir.symbols.threadLocal.owner) - - if (eager) - annotations += buildSimpleAnnotation(context.irBuiltIns, startOffset, endOffset, context.ir.symbols.eagerInitialization.owner) - - initializer = IrExpressionBodyImpl(startOffset, endOffset, expression) - } - addChild(irField) -} fun IrBuilderWithScope.irCatch() = IrCatchImpl(