From 0e9dbf3939e73e9cdf1269766c0175f9f9c0a240 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Mon, 30 Mar 2020 12:58:29 +0700 Subject: [PATCH] [Interop][Linker] Simplify IrProviderForCEnumAndCStructStubs --- .../kotlin/backend/konan/ToplevelPhases.kt | 8 ++------ .../IrProviderForCEnumAndCStructStubs.kt | 19 +++++++------------ 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ToplevelPhases.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ToplevelPhases.kt index 197b8f93ba0..7f1bf27ad99 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ToplevelPhases.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ToplevelPhases.kt @@ -245,12 +245,10 @@ internal val psiToIrPhase = konanUnitPhase( if (this.stdlibModule in modulesWithoutDCE) { functionIrClassFactory.buildAllClasses() } - modulesWithoutDCE - .filter(ModuleDescriptor::isFromInteropLibrary) - .forEach(irProviderForCEnumsAndCStructs::buildAllEnumsAndStructsFrom) - module.acceptVoid(ManglerChecker(KonanManglerIr, Ir2DescriptorManglerAdapter(KonanManglerDesc))) + module.files += irProviderForCEnumsAndCStructs.outputFiles + irModule = module irModules = deserializer.modules.filterValues { llvmModuleSpecification.containsModule(it) } ir.symbols = symbols @@ -258,8 +256,6 @@ internal val psiToIrPhase = konanUnitPhase( functionIrClassFactory.module = (listOf(irModule!!) + deserializer.modules.values) .single { it.descriptor.isKonanStdlib() } - - irProviderForCEnumsAndCStructs.module = module }, name = "Psi2Ir", description = "Psi to IR conversion", diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/interop/IrProviderForCEnumAndCStructStubs.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/interop/IrProviderForCEnumAndCStructStubs.kt index 603b88150b2..35df12cf8dc 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/interop/IrProviderForCEnumAndCStructStubs.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/interop/IrProviderForCEnumAndCStructStubs.kt @@ -60,15 +60,12 @@ internal class IrProviderForCEnumAndCStructStubs( private val cStructClassGenerator = CStructVarClassGenerator(context, interopBuiltIns) - var module: IrModuleFragment? = null - set(value) { - if (value == null) - error("Provide a valid non-null module") - if (field != null) - error("Module has already been set") - field = value - value.files += filesMap.values - } + /** + * The final output of this provider is a list of files which contain IR declarations + * of enums and structs that should be generated. + */ + val outputFiles: List + get() = filesMap.values.toList() fun canHandleSymbol(symbol: IrSymbol): Boolean { if (!symbol.isPublicApi) return false @@ -116,9 +113,7 @@ internal class IrProviderForCEnumAndCStructStubs( private fun irParentFor(descriptor: ClassDescriptor): IrDeclarationContainer { val packageFragmentDescriptor = descriptor.findPackage() return filesMap.getOrPut(packageFragmentDescriptor) { - IrFileImpl(NaiveSourceBasedFileEntryImpl(cTypeDefinitionsFileName), packageFragmentDescriptor).also { - this@IrProviderForCEnumAndCStructStubs.module?.files?.add(it) - } + IrFileImpl(NaiveSourceBasedFileEntryImpl(cTypeDefinitionsFileName), packageFragmentDescriptor) } }