From 2423f423b0512e90bfd17fea9af2ac8e2de0aae7 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Tue, 24 Dec 2019 19:39:16 +0300 Subject: [PATCH] Hacked out ExpectActualResolver quadratic behavior for platform lib compilations --- .../jetbrains/kotlin/backend/konan/ToplevelPhases.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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 95069ffd1d9..d3e307ab1a9 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 @@ -137,6 +137,7 @@ internal val buildCExportsPhase = konanUnitPhase( internal val psiToIrPhase = konanUnitPhase( op = { // Translate AST to high level IR. + val mppKlibs = config.configuration.get(CommonConfigurationKeys.KLIB_MPP)?:false val symbolTable = symbolTable!! @@ -210,7 +211,16 @@ internal val psiToIrPhase = konanUnitPhase( stubGenerator.setIrProviders(irProviders) expectDescriptorToSymbol = mutableMapOf() - val module = translator.generateModuleFragment(generatorContext, environment.getSourceFiles(), irProviders, expectDescriptorToSymbol) + val module = translator.generateModuleFragment( + generatorContext, + environment.getSourceFiles(), + irProviders, + // TODO: This is a hack to allow platform libs to build in reasonable time. + // referenceExpectsForUsedActuals() appears to be quadratic in time because of + // how ExpectedActualResolver is implemented. + // Need to fix ExpectActualResolver to either cache expects or somehow reduce the member scope searches. + if (mppKlibs) expectDescriptorToSymbol else null + ) deserializer.finalizeExpectActualLinker()