DO_NOT_MERGE [JS] Break the order of dependencies in deserialization
diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt
index 85cb8a0..443c077 100644
--- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt
+++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt
@@ -15,6 +15,7 @@
import org.jetbrains.kotlin.library.KotlinAbiVersion
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.KotlinLibraryProperResolverWithAttributes
+import org.jetbrains.kotlin.library.isAnyPlatformStdlib
import org.jetbrains.kotlin.utils.DFS
fun IrSymbol.kind(): BinarySymbolData.SymbolKind {
@@ -270,8 +271,21 @@
override val kind get() = IrModuleDeserializerKind.CURRENT
}
-fun sortDependencies(moduleDependencies: Map<KotlinLibrary, List<KotlinLibrary>>): Collection<KotlinLibrary> {
+fun <T> sortDependencies(moduleDependencies: Map<T, Collection<T>>): List<T> {
return DFS.topologicalOrder(moduleDependencies.keys) { m ->
moduleDependencies.getValue(m)
}.reversed()
}
+
+fun <T : KotlinLibrary> sortDependenciesBroken(moduleDependencies: Map<T, Collection<T>>): List<T> {
+ val tmp = sortDependencies(moduleDependencies).reversed()
+
+ val result = ArrayList<T>(tmp.size)
+ for (library in tmp) {
+ if (library.isAnyPlatformStdlib)
+ result.add(0, library)
+ else
+ result.add(library)
+ }
+ return result
+}
diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt
index c99d717..440f99e 100644
--- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt
+++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt
@@ -175,7 +175,7 @@
project,
configuration,
mainModule.files,
- sortDependencies(depsDescriptors.moduleDependencies),
+ sortDependenciesBroken(depsDescriptors.moduleDependencies),
friendModules,
symbolTable,
messageLogger,
@@ -187,7 +187,7 @@
val mainModuleLib = allDependencies.find { it.libraryFile.canonicalPath == mainPath }
?: error("No module with ${mainModule.libPath} found")
val moduleDescriptor = depsDescriptors.getModuleDescriptor(mainModuleLib)
- val sortedDependencies = sortDependencies(depsDescriptors.moduleDependencies)
+ val sortedDependencies = sortDependenciesBroken(depsDescriptors.moduleDependencies)
val friendModules = mapOf(mainModuleLib.uniqueName to depsDescriptors.friendDependencies.map { it.uniqueName })
return getIrModuleInfoForKlib(
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontend2IrConverter.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontend2IrConverter.kt
index 3eae9f9..5a65361 100644
--- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontend2IrConverter.kt
+++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontend2IrConverter.kt
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.test.frontend.classic
-import org.jetbrains.kotlin.backend.common.serialization.sortDependencies
+import org.jetbrains.kotlin.backend.common.serialization.sortDependenciesBroken
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForJSIR
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForWasm
@@ -88,7 +88,7 @@
sourceFiles,
configuration,
analysisResult,
- sortDependencies(JsEnvironmentConfigurator.getAllDependenciesMappingFor(module, testServices)),
+ sortDependenciesBroken(JsEnvironmentConfigurator.getAllDependenciesMappingFor(module, testServices)),
icData,
IrFactoryImpl,
) {
@@ -131,7 +131,7 @@
sourceFiles,
configuration,
analysisResult,
- sortDependencies(WasmEnvironmentConfigurator.getAllDependenciesMappingFor(module, testServices)),
+ sortDependenciesBroken(WasmEnvironmentConfigurator.getAllDependenciesMappingFor(module, testServices)),
icData,
IrFactoryImpl,
) {
diff --git a/js/js.tests/test/org/jetbrains/kotlin/incremental/IrAbstractInvalidationTest.kt b/js/js.tests/test/org/jetbrains/kotlin/incremental/IrAbstractInvalidationTest.kt
index dee416e..4e8e90c 100644
--- a/js/js.tests/test/org/jetbrains/kotlin/incremental/IrAbstractInvalidationTest.kt
+++ b/js/js.tests/test/org/jetbrains/kotlin/incremental/IrAbstractInvalidationTest.kt
@@ -9,7 +9,7 @@
import org.jetbrains.kotlin.backend.common.linkage.partial.PartialLinkageLogLevel
import org.jetbrains.kotlin.backend.common.linkage.partial.PartialLinkageMode
import org.jetbrains.kotlin.backend.common.linkage.partial.setupPartialLinkageConfig
-import org.jetbrains.kotlin.backend.common.serialization.sortDependencies
+import org.jetbrains.kotlin.backend.common.serialization.sortDependenciesBroken
import org.jetbrains.kotlin.backend.js.JsGenerationGranularity
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
import org.jetbrains.kotlin.cli.js.klib.generateIrForKlibSerialization
@@ -105,7 +105,7 @@
moduleSourceFiles,
configuration,
sourceModule.jsFrontEndResult.jsAnalysisResult,
- sortDependencies(sourceModule.moduleDependencies),
+ sortDependenciesBroken(sourceModule.moduleDependencies),
icData,
IrFactoryImpl,
) {
diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsIrDeserializerFacade.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsIrDeserializerFacade.kt
index dafdf29..66ec48d 100644
--- a/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsIrDeserializerFacade.kt
+++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsIrDeserializerFacade.kt
@@ -9,7 +9,7 @@
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
-import org.jetbrains.kotlin.backend.common.serialization.sortDependencies
+import org.jetbrains.kotlin.backend.common.serialization.sortDependenciesBroken
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.config.messageCollector
@@ -66,7 +66,7 @@
val moduleInfo = getIrModuleInfoForKlib(
moduleDescriptor,
- sortDependencies(JsEnvironmentConfigurator.getAllDependenciesMappingFor(module, testServices)) + mainModuleLib,
+ sortDependenciesBroken(JsEnvironmentConfigurator.getAllDependenciesMappingFor(module, testServices)) + mainModuleLib,
friendModules,
filesToLoad,
configuration,
diff --git a/native/native.tests/klib-ir-inliner/tests/org/jetbrains/kotlin/konan/test/converters/NativeDeserializerFacade.kt b/native/native.tests/klib-ir-inliner/tests/org/jetbrains/kotlin/konan/test/converters/NativeDeserializerFacade.kt
index b5afba1..06798ce 100644
--- a/native/native.tests/klib-ir-inliner/tests/org/jetbrains/kotlin/konan/test/converters/NativeDeserializerFacade.kt
+++ b/native/native.tests/klib-ir-inliner/tests/org/jetbrains/kotlin/konan/test/converters/NativeDeserializerFacade.kt
@@ -17,7 +17,7 @@
import org.jetbrains.kotlin.backend.common.serialization.DeserializationStrategy
import org.jetbrains.kotlin.backend.common.serialization.IrModuleDeserializer
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
-import org.jetbrains.kotlin.backend.common.serialization.sortDependencies
+import org.jetbrains.kotlin.backend.common.serialization.sortDependenciesBroken
import org.jetbrains.kotlin.backend.konan.KonanStubGeneratorExtensions
import org.jetbrains.kotlin.backend.konan.serialization.CInteropModuleDeserializerFactory
import org.jetbrains.kotlin.backend.konan.serialization.KonanIrLinker
@@ -87,7 +87,7 @@
val moduleInfo = getIrModuleInfoForKlib(
moduleDescriptor,
- sortDependencies(NativeEnvironmentConfigurator.getAllDependenciesMappingFor(module, testServices)) + mainModuleLib,
+ sortDependenciesBroken(NativeEnvironmentConfigurator.getAllDependenciesMappingFor(module, testServices)) + mainModuleLib,
friendModules,
configuration,
symbolTable,