From a35defc682684307696571a1ae0c8e0e75f3e4a3 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Mon, 14 Aug 2023 12:07:50 +0200 Subject: [PATCH] [Native] Replace `KonanIrModuleFragmentImpl` with `IrModuleFragmentImpl` --- .../jetbrains/kotlin/backend/konan/PsiToIr.kt | 4 +-- .../kotlin/backend/konan/ir/NewIrUtils.kt | 5 ++- .../konan/serialization/KonanIrlinker.kt | 36 +++---------------- 3 files changed, 9 insertions(+), 36 deletions(-) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/PsiToIr.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/PsiToIr.kt index b3f51b788ae..8a4bf6bdf98 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/PsiToIr.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/PsiToIr.kt @@ -216,7 +216,7 @@ internal fun PsiToIrContext.psiToIr( environment.getSourceFiles(), irProviders = listOf(irDeserializer), linkerExtensions = pluginExtensions, - ).toKonanModule() + ) irDeserializer.postProcess(inOrAfterLinkageStep = true) @@ -250,7 +250,7 @@ internal fun PsiToIrContext.psiToIr( mainModule.files.forEach { it.metadata = KonanFileMetadataSource(mainModule) } modules.values.forEach { module -> - module.files.forEach { it.metadata = KonanFileMetadataSource(module as KonanIrModuleFragmentImpl) } + module.files.forEach { it.metadata = KonanFileMetadataSource(module) } } return if (isProducingLibrary) { diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/NewIrUtils.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/NewIrUtils.kt index a0262746c5d..6a9c59d10ed 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/NewIrUtils.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/NewIrUtils.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.backend.konan.descriptors.isFromInteropLibrary import org.jetbrains.kotlin.backend.konan.descriptors.isInteropLibrary import org.jetbrains.kotlin.backend.konan.llvm.KonanMetadata import org.jetbrains.kotlin.backend.konan.serialization.KonanFileMetadataSource -import org.jetbrains.kotlin.backend.konan.serialization.KonanIrModuleFragmentImpl import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI @@ -100,8 +99,8 @@ private fun IrClass.getOverridingOf(function: IrFunction) = (function as? IrSimp } val ModuleDescriptor.konanLibrary get() = (this.klibModuleOrigin as? DeserializedKlibModuleOrigin)?.library -val IrModuleFragment.konanLibrary - get() = (this as? KonanIrModuleFragmentImpl)?.konanLibrary ?: descriptor.konanLibrary +val IrModuleFragment.konanLibrary get() = descriptor.konanLibrary + @OptIn(ObsoleteDescriptorBasedAPI::class) val IrPackageFragment.konanLibrary : KotlinLibrary? get() { diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt index e7d8a8f285f..5aafd51ae83 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt @@ -42,6 +42,7 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.builders.TranslationPluginContext import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl +import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClass import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -594,7 +595,7 @@ internal class KonanIrLinker( else DeserializationStrategy.ON_DEMAND }, klib.versions.abiVersion ?: KotlinAbiVersion.CURRENT, containsErrorCode ) { - override val moduleFragment: IrModuleFragment = KonanIrModuleFragmentImpl(moduleDescriptor, builtIns) + override val moduleFragment: IrModuleFragment = IrModuleFragmentImpl(moduleDescriptor, builtIns) val files by lazy { fileDeserializationStates.map { it.file } } @@ -1091,7 +1092,7 @@ internal class KonanIrLinker( override fun deserializedSymbolNotFound(idSig: IdSignature): Nothing = error("No descriptor found for $idSig") - override val moduleFragment: IrModuleFragment = KonanIrModuleFragmentImpl(moduleDescriptor, builtIns) + override val moduleFragment: IrModuleFragment = IrModuleFragmentImpl(moduleDescriptor, builtIns) override val moduleDependencies: Collection = listOfNotNull(forwardDeclarationDeserializer) override val kind get() = IrModuleDeserializerKind.DESERIALIZED @@ -1143,7 +1144,7 @@ internal class KonanIrLinker( override fun deserializedSymbolNotFound(idSig: IdSignature): Nothing = error("No descriptor found for $idSig") - override val moduleFragment: IrModuleFragment = KonanIrModuleFragmentImpl(moduleDescriptor, builtIns) + override val moduleFragment: IrModuleFragment = IrModuleFragmentImpl(moduleDescriptor, builtIns) override val moduleDependencies: Collection = emptyList() override val kind get() = IrModuleDeserializerKind.SYNTHETIC @@ -1162,34 +1163,7 @@ internal class KonanIrLinker( } } -class KonanIrModuleFragmentImpl( - override val descriptor: ModuleDescriptor, - override val irBuiltins: IrBuiltIns, - files: List = emptyList(), -) : IrModuleFragment() { - override val name: Name get() = descriptor.name // TODO - - override val files: MutableList = files.toMutableList() - - val konanLibrary = (descriptor.klibModuleOrigin as? DeserializedKlibModuleOrigin)?.library - - override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitModuleFragment(this, data) - - override fun acceptChildren(visitor: IrElementVisitor, data: D) { - files.forEach { it.accept(visitor, data) } - } - - override fun transformChildren(transformer: IrElementTransformer, data: D) { - files.forEachIndexed { i, irFile -> - files[i] = irFile.transform(transformer, data) - } - } -} - -fun IrModuleFragment.toKonanModule() = KonanIrModuleFragmentImpl(descriptor, irBuiltins, files) - -class KonanFileMetadataSource(val module: KonanIrModuleFragmentImpl) : MetadataSource.File { +class KonanFileMetadataSource(val module: IrModuleFragment) : MetadataSource.File { override val name: Name? = null override var serializedIr: ByteArray? = null }