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,