From bd0396c71e4f142e78cb7a4f59c26f287ff21f48 Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Mon, 18 Nov 2019 17:25:29 +0300 Subject: [PATCH] Refactor psi2irPhase in Native compiler according to bf910f92 commit in Kotlin (cherry picked from commit 0995b351eeb5d147074f038892e0aa17eb068302) --- .../kotlin/backend/konan/ToplevelPhases.kt | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 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 7880f262823..fb3c1818ef5 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 @@ -1,8 +1,8 @@ package org.jetbrains.kotlin.backend.konan import org.jetbrains.kotlin.backend.common.* -import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext +import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.phaser.* import org.jetbrains.kotlin.backend.common.serialization.DescriptorTable import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataMonolithicSerializer @@ -142,6 +142,21 @@ internal val psiToIrPhase = konanUnitPhase( Psi2IrConfiguration(false)) val generatorContext = translator.createGeneratorContext(moduleDescriptor, bindingContext, symbolTable) + translator.addPostprocessingStep { module -> + val extensions = IrGenerationExtension.getInstances(config.project) + val pluginContext = IrPluginContext( + generatorContext.moduleDescriptor, + generatorContext.bindingContext, + generatorContext.languageVersionSettings, + generatorContext.symbolTable, + generatorContext.typeTranslator, + generatorContext.irBuiltIns + ) + extensions.forEach { extension -> + extension.generate(module, pluginContext) + } + } + val forwardDeclarationsModuleDescriptor = moduleDescriptor.allDependencyModules.firstOrNull { it.isForwardDeclarationModule } val modulesWithoutDCE = moduleDescriptor.allDependencyModules @@ -200,16 +215,6 @@ internal val psiToIrPhase = konanUnitPhase( irModules = deserializer.modules.filterValues { llvmModuleSpecification.containsModule(it) } ir.symbols = symbols - val extensions = IrGenerationExtension.getInstances(config.project) - extensions.forEach { extension -> - extension.generate(irModule!!, IrPluginContext(irModule!!.descriptor, - bindingContext, config.languageVersionSettings, - symbolTable, - generatorContext.typeTranslator, - irBuiltIns - )) - - } functionIrClassFactory.module = (listOf(irModule!!) + deserializer.modules.values) .single { it.descriptor.isKonanStdlib() }