WIP
diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt
index e54c352..93bc39f 100644
--- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt
+++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt
@@ -575,7 +575,8 @@
                 storageManager,
                 builtInsModule,
                 packageAccessHandler = null,
-                lookupTracker = LookupTracker.DO_NOTHING
+                lookupTracker = LookupTracker.DO_NOTHING,
+                platform = JsPlatforms.defaultJsPlatform,
             )
             dependencies += moduleDescriptor
             moduleDescriptor.setDependencies(ArrayList(dependencies))
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt
index e4fdf82..2d3eca1 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt
@@ -351,7 +351,8 @@
         LockBasedStorageManager.NO_LOCKS,
         null,
         packageAccessHandler = null, // TODO: This is a speed optimization used by Native. Don't bother for now.
-        lookupTracker = LookupTracker.DO_NOTHING
+        lookupTracker = LookupTracker.DO_NOTHING,
+        platform = JvmPlatforms.defaultJvmPlatform,
     )
 
     val dependencies = current.manifestProperties.propertyList(KLIB_PROPERTY_DEPENDS, escapeInQuotes = true).mapNotNull {
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataKlibSerializer.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataKlibSerializer.kt
index 6e96d37..f822e99 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataKlibSerializer.kt
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataKlibSerializer.kt
@@ -33,6 +33,7 @@
 import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.platform.CommonPlatforms
 import org.jetbrains.kotlin.platform.TargetPlatform
+import org.jetbrains.kotlin.platform.konan.NativePlatforms
 import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
 import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
 import org.jetbrains.kotlin.storage.LockBasedStorageManager
@@ -151,7 +152,7 @@
             val moduleName = Name.special(moduleHeader.moduleName)
             val moduleOrigin = DeserializedKlibModuleOrigin(library)
             MetadataFactories.DefaultDescriptorFactory.createDescriptor(
-                moduleName, storageManager, builtIns, moduleOrigin
+                moduleName, storageManager, builtIns, moduleOrigin, NativePlatforms.unspecifiedNativePlatform
             )
         }.also { result ->
             val resultValues = result.values
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsIrLinkerLoader.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsIrLinkerLoader.kt
index e8bc9b7..0651844 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsIrLinkerLoader.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsIrLinkerLoader.kt
@@ -26,6 +26,7 @@
 import org.jetbrains.kotlin.library.KotlinLibrary
 import org.jetbrains.kotlin.library.uniqueName
 import org.jetbrains.kotlin.library.unresolvedDependencies
+import org.jetbrains.kotlin.platform.js.JsPlatforms
 import org.jetbrains.kotlin.psi2ir.descriptors.IrBuiltInsOverDescriptors
 import org.jetbrains.kotlin.psi2ir.generators.TypeTranslatorImpl
 import org.jetbrains.kotlin.storage.LockBasedStorageManager
@@ -80,7 +81,8 @@
                 LockBasedStorageManager.NO_LOCKS,
                 runtimeModule?.builtIns,
                 packageAccessHandler = null, // TODO: This is a speed optimization used by Native. Don't bother for now.
-                lookupTracker = lookupTracker
+                lookupTracker = lookupTracker,
+                platform = JsPlatforms.defaultJsPlatform,
             )
             if (isBuiltIns) runtimeModule = md
 
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 d6dc579..5647f6f 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
@@ -56,13 +56,13 @@
 import org.jetbrains.kotlin.library.metadata.KlibMetadataFactories
 import org.jetbrains.kotlin.library.metadata.KlibMetadataVersion
 import org.jetbrains.kotlin.metadata.ProtoBuf
+import org.jetbrains.kotlin.platform.js.JsPlatforms
 import org.jetbrains.kotlin.progress.IncrementalNextRoundException
 import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus
 import org.jetbrains.kotlin.psi.KtFile
 import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration
 import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
 import org.jetbrains.kotlin.psi2ir.descriptors.IrBuiltInsOverDescriptors
-import org.jetbrains.kotlin.psi2ir.generators.DeclarationStubGeneratorImpl
 import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
 import org.jetbrains.kotlin.psi2ir.generators.TypeTranslatorImpl
 import org.jetbrains.kotlin.resolve.BindingContext
@@ -449,7 +449,8 @@
         LockBasedStorageManager.NO_LOCKS,
         null,
         packageAccessHandler = null, // TODO: This is a speed optimization used by Native. Don't bother for now.
-        lookupTracker = LookupTracker.DO_NOTHING
+        lookupTracker = LookupTracker.DO_NOTHING,
+        platform = JsPlatforms.defaultJsPlatform,
     )
 //    if (isBuiltIns) runtimeModule = md
 
@@ -561,7 +562,8 @@
             storageManager,
             runtimeModule?.builtIns,
             packageAccessHandler = null, // TODO: This is a speed optimization used by Native. Don't bother for now.
-            lookupTracker = lookupTracker
+            lookupTracker = lookupTracker,
+            platform = JsPlatforms.defaultJsPlatform,
         )
         if (isBuiltIns) runtimeModule = md
 
diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsMangler.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsMangler.kt
index f4b2ba9..63806c9 100644
--- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsMangler.kt
+++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsMangler.kt
@@ -36,6 +36,7 @@
 
 object JsManglerIr : AbstractJsManglerIr()
 
+// TODO: There is nothing JS-specific about this mangler. Move to a different package and rename.
 abstract class AbstractJsDescriptorMangler : DescriptorBasedKotlinManglerImpl() {
 
     companion object {
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt
index 619213a..33758c1 100644
--- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt
+++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt
@@ -46,6 +46,7 @@
 import org.jetbrains.kotlin.native.FakeTopDownAnalyzerFacadeForNative
 import org.jetbrains.kotlin.platform.isCommon
 import org.jetbrains.kotlin.platform.isJs
+import org.jetbrains.kotlin.platform.js.JsPlatforms
 import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
 import org.jetbrains.kotlin.platform.jvm.isJvm
 import org.jetbrains.kotlin.platform.konan.isNative
@@ -274,7 +275,8 @@
                     storageManager,
                     builtInsModule,
                     packageAccessHandler = null,
-                    lookupTracker = LookupTracker.DO_NOTHING
+                    lookupTracker = LookupTracker.DO_NOTHING,
+                    platform = JsPlatforms.defaultJsPlatform,
                 )
                 if (isBuiltIns) builtInsModule = moduleDescriptor.builtIns
                 dependencies += moduleDescriptor
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrJsResultsConverter.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrJsResultsConverter.kt
index cc4d5dd..455cdd4 100644
--- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrJsResultsConverter.kt
+++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrJsResultsConverter.kt
@@ -42,6 +42,7 @@
 import org.jetbrains.kotlin.ir.symbols.IrSymbol
 import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary
 import org.jetbrains.kotlin.library.unresolvedDependencies
+import org.jetbrains.kotlin.platform.js.JsPlatforms
 import org.jetbrains.kotlin.storage.LockBasedStorageManager
 import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
 import org.jetbrains.kotlin.test.model.BackendKinds
@@ -152,7 +153,8 @@
                 storageManager,
                 builtInsModule,
                 packageAccessHandler = null,
-                lookupTracker = LookupTracker.DO_NOTHING
+                lookupTracker = LookupTracker.DO_NOTHING,
+                platform = JsPlatforms.defaultJsPlatform,
             )
             dependencies += moduleDescriptor
             moduleDescriptor.setDependencies(ArrayList(dependencies))
diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/klib/AbstractKlibTextTestCase.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/klib/AbstractKlibTextTestCase.kt
index 460ae70..3e75214 100644
--- a/compiler/tests-common/tests/org/jetbrains/kotlin/klib/AbstractKlibTextTestCase.kt
+++ b/compiler/tests-common/tests/org/jetbrains/kotlin/klib/AbstractKlibTextTestCase.kt
@@ -42,6 +42,7 @@
 import org.jetbrains.kotlin.library.metadata.KlibMetadataVersion
 import org.jetbrains.kotlin.library.metadata.resolver.TopologicalLibraryOrder
 import org.jetbrains.kotlin.metadata.ProtoBuf
+import org.jetbrains.kotlin.platform.js.JsPlatforms
 import org.jetbrains.kotlin.psi.KtFile
 import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration
 import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
@@ -254,7 +255,8 @@
             LockBasedStorageManager("ModulesStructure"),
             builtins?.builtIns,
             packageAccessHandler = null, // TODO: This is a speed optimization used by Native. Don't bother for now.
-            lookupTracker = lookupTracker
+            lookupTracker = lookupTracker,
+            platform = JsPlatforms.defaultJsPlatform,
         )
         md.setDependencies(listOfNotNull(builtins, md))
         return md
diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/test/KlibTestUtil.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/test/KlibTestUtil.kt
index 6b9a717..db0286a 100644
--- a/compiler/tests-common/tests/org/jetbrains/kotlin/test/KlibTestUtil.kt
+++ b/compiler/tests-common/tests/org/jetbrains/kotlin/test/KlibTestUtil.kt
@@ -123,7 +123,8 @@
             languageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
             storageManager = LockBasedStorageManager.NO_LOCKS,
             builtIns = DefaultBuiltIns.Instance,
-            packageAccessHandler = null
+            packageAccessHandler = null,
+            platform = null,
         )
         module.setDependencies(listOf(DefaultBuiltIns.Instance.builtInsModule, module))
 
diff --git a/compiler/util-klib-dump/build.gradle.kts b/compiler/util-klib-dump/build.gradle.kts
index 5244e16..bebc5a4 100644
--- a/compiler/util-klib-dump/build.gradle.kts
+++ b/compiler/util-klib-dump/build.gradle.kts
@@ -5,6 +5,8 @@
 
 dependencies {
     api(kotlinStdlib())
+    implementation(kotlinBuiltins())
+    implementation(project(":compiler:ir.psi2ir"))
     implementation(project(":compiler:ir.serialization.common"))
     implementation(project(":compiler:backend-common"))
     implementation(project(":compiler:frontend"))
@@ -21,3 +23,9 @@
 publish()
 
 standardPublicJars()
+
+val dumpKlib by task<JavaExec> {
+    classpath = sourceSets["main"].runtimeClasspath
+    mainClass.set("org.jetbrains.kotlin.library.klibdump.KlibDump")
+}
+
diff --git a/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/KlibDumpBuiltins.kt b/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/KlibDumpBuiltins.kt
index 270fa40..0fac845 100644
--- a/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/KlibDumpBuiltins.kt
+++ b/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/KlibDumpBuiltins.kt
@@ -16,6 +16,7 @@
 import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
 import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
 import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
+import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl
 import org.jetbrains.kotlin.ir.types.IrType
 import org.jetbrains.kotlin.name.FqName
 import org.jetbrains.kotlin.name.Name
diff --git a/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/KlibDumpDescriptorMangler.kt b/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/KlibDumpDescriptorMangler.kt
index f50f8ad..97c09c0 100644
--- a/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/KlibDumpDescriptorMangler.kt
+++ b/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/KlibDumpDescriptorMangler.kt
@@ -8,15 +8,32 @@
 import org.jetbrains.kotlin.backend.common.serialization.mangle.KotlinExportChecker
 import org.jetbrains.kotlin.backend.common.serialization.mangle.KotlinMangleComputer
 import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleMode
+import org.jetbrains.kotlin.backend.common.serialization.mangle.SpecialDeclarationType
 import org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor.DescriptorBasedKotlinManglerImpl
+import org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor.DescriptorExportCheckerVisitor
+import org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor.DescriptorMangleComputer
 import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
 
+// FIXME: Replace with JsManglerDesc after it is commonized.
 object KlibDumpDescriptorMangler : DescriptorBasedKotlinManglerImpl() {
-    override fun getExportChecker(compatibleMode: Boolean): KotlinExportChecker<DeclarationDescriptor> {
-        TODO("Not yet implemented")
+
+    private val exportChecker = JsDescriptorExportChecker()
+
+    private class JsDescriptorExportChecker : DescriptorExportCheckerVisitor() {
+        override fun DeclarationDescriptor.isPlatformSpecificExported() = false
+    }
+
+    private class JsDescriptorManglerComputer(builder: StringBuilder, mode: MangleMode) : DescriptorMangleComputer(builder, mode) {
+        override fun copy(newMode: MangleMode): DescriptorMangleComputer = JsDescriptorManglerComputer(builder, newMode)
+    }
+
+    override fun getExportChecker(compatibleMode: Boolean): KotlinExportChecker<DeclarationDescriptor> = exportChecker
+
+    private class MangleComputer(builder: StringBuilder, mode: MangleMode) : DescriptorMangleComputer(builder, mode) {
+        override fun copy(newMode: MangleMode): DescriptorMangleComputer = MangleComputer(builder, newMode)
     }
 
     override fun getMangleComputer(mode: MangleMode, compatibleMode: Boolean): KotlinMangleComputer<DeclarationDescriptor> {
-        TODO("Not yet implemented")
+        return MangleComputer(StringBuilder(256), mode)
     }
 }
diff --git a/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/KlibDumpIrLinker.kt b/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/KlibDumpIrLinker.kt
index 0360f06..9b12720 100644
--- a/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/KlibDumpIrLinker.kt
+++ b/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/KlibDumpIrLinker.kt
@@ -21,7 +21,7 @@
 import org.jetbrains.kotlin.library.KotlinLibrary
 import org.jetbrains.kotlin.library.containsErrorCode
 
-class KlibDumpIrLinker(currentModule: ModuleDescriptor, messageLogger: IrMessageLogger, builtIns: IrBuiltIns, symbolTable: SymbolTable) :
+class KlibDumpIrLinker(currentModule: ModuleDescriptor?, messageLogger: IrMessageLogger, builtIns: IrBuiltIns, symbolTable: SymbolTable) :
     KotlinIrLinker(
         currentModule = currentModule,
         messageLogger = messageLogger,
@@ -54,7 +54,8 @@
         return Deserializer(moduleDescriptor, klib, strategyResolver, libraryAbiVersion, klib.containsErrorCode)
     }
 
-    override fun isBuiltInModule(moduleDescriptor: ModuleDescriptor): Boolean = false
+    override fun isBuiltInModule(moduleDescriptor: ModuleDescriptor): Boolean =
+        moduleDescriptor === moduleDescriptor.builtIns.builtInsModule
 
     private inner class Deserializer(
         moduleDescriptor: ModuleDescriptor,
diff --git a/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/main.kt b/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/main.kt
index 5654354..b052059 100644
--- a/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/main.kt
+++ b/compiler/util-klib-dump/src/org/jetbrains/kotlin/library/klibdump/main.kt
@@ -7,18 +7,28 @@
 package org.jetbrains.kotlin.library.klibdump
 
 import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
+import org.jetbrains.kotlin.builtins.DefaultBuiltIns
 import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
+import org.jetbrains.kotlin.descriptors.ClassDescriptor
+import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
+import org.jetbrains.kotlin.descriptors.ModuleDescriptor
+import org.jetbrains.kotlin.descriptors.PropertyDescriptor
+import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentTypeTransformer
+import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
 import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
 import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
-import org.jetbrains.kotlin.ir.util.IrMessageLogger
-import org.jetbrains.kotlin.ir.util.SymbolTable
-import org.jetbrains.kotlin.ir.util.dump
+import org.jetbrains.kotlin.ir.util.*
 import org.jetbrains.kotlin.konan.file.File
 import org.jetbrains.kotlin.library.KotlinLibrary
 import org.jetbrains.kotlin.library.ToolingSingleFileKlibResolveStrategy
+import org.jetbrains.kotlin.library.metadata.KlibMetadataFactories
+import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
 import org.jetbrains.kotlin.library.metadata.parseModuleHeader
 import org.jetbrains.kotlin.library.resolveSingleFileKlib
 import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.psi2ir.descriptors.IrBuiltInsOverDescriptors
+import org.jetbrains.kotlin.psi2ir.generators.TypeTranslatorImpl
+import org.jetbrains.kotlin.storage.LockBasedStorageManager
 import kotlin.system.exitProcess
 
 private fun exitWithError(message: String, exitCode: Int = 1): Nothing {
@@ -47,25 +57,49 @@
     }
 }
 
-private fun deserializeModule(klib: KotlinLibrary): IrModuleFragment {
-    val libraryProto = parseModuleHeader(klib.moduleHeaderData)
-    val moduleName = Name.special(libraryProto.moduleName)
-    val signatureComposer = IdSignatureDescriptor(KlibDumpDescriptorMangler)
-    val linker = KlibDumpIrLinker(
-        DummyModuleDescriptor(moduleName),
-        StderrMessageLogger,
-        KlibDumpBuiltins(LanguageVersionSettingsImpl.DEFAULT), // TODO: Are these settings right?
-        SymbolTable(signatureComposer, IrFactoryImpl)
+private fun deserializeMetadata(klib: KotlinLibrary): ModuleDescriptor {
+    val metadataFactories =
+        KlibMetadataFactories({ DefaultBuiltIns.Instance }, NullFlexibleTypeDeserializer, PlatformDependentTypeTransformer.None)
+
+    val module = metadataFactories.DefaultDeserializedDescriptorFactory.createDescriptor(
+        library = klib,
+        languageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
+        storageManager = LockBasedStorageManager.NO_LOCKS,
+        builtIns = DefaultBuiltIns.Instance,
+        packageAccessHandler = null,
+        platform = null,
     )
-    val moduleFragment = linker.deserializeFullModule(DummyModuleDescriptor(moduleName), klib)
+    module.setDependencies(listOf(DefaultBuiltIns.Instance.builtInsModule, module))
+
+    return module
+}
+
+@OptIn(ObsoleteDescriptorBasedAPI::class)
+fun deserializeModule(klib: KotlinLibrary, languageVersionSettings: LanguageVersionSettingsImpl): IrModuleFragment {
+    val moduleDescriptor = deserializeMetadata(klib)
+    val signatureComposer = IdSignatureDescriptor(KlibDumpDescriptorMangler)
+    val symbolTable = SymbolTable(signatureComposer, IrFactoryImpl)
+    val typeTranslator = TypeTranslatorImpl(symbolTable, languageVersionSettings, moduleDescriptor)
+    val linker = KlibDumpIrLinker(
+        currentModule = null,
+        messageLogger = StderrMessageLogger,
+        builtIns = IrBuiltInsOverDescriptors(DefaultBuiltIns.Instance, typeTranslator, symbolTable),
+        symbolTable = symbolTable
+    )
+
+    val moduleFragment = linker.deserializeFullModule(moduleDescriptor, klib)
     linker.init(null, emptyList())
+    ExternalDependenciesGenerator(symbolTable, listOf(linker)).generateUnboundSymbolsAsDependencies() // TODO: Is this needed?
     linker.postProcess()
     return moduleFragment
 }
 
+// NOTE: Running this function from IDEA is not supported. Please use the :kotlin-util-klib-dump:dumpKlib Gradle task.
+// Example:
+//     ./gradlew :kotlin-util-klib-dump:dumpKlib --args="/path/to/module.klib"
 fun main(args: Array<String>) {
     val klibPath = args.getOrNull(0) ?: exitWithError("Please specify a path to the klib")
     val kotlinLibrary = resolveSingleFileKlib(File(klibPath), strategy = ToolingSingleFileKlibResolveStrategy)
-    val irModule = deserializeModule(kotlinLibrary)
+    val irModule = deserializeModule(kotlinLibrary, LanguageVersionSettingsImpl.DEFAULT)
     println(irModule.dump())
 }
diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataModuleDescriptorFactory.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataModuleDescriptorFactory.kt
index 290f0db..1003f39 100644
--- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataModuleDescriptorFactory.kt
+++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataModuleDescriptorFactory.kt
@@ -13,6 +13,7 @@
 import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
 import org.jetbrains.kotlin.incremental.components.LookupTracker
 import org.jetbrains.kotlin.library.KotlinLibrary
+import org.jetbrains.kotlin.platform.TargetPlatform
 import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
 import org.jetbrains.kotlin.serialization.deserialization.FlexibleTypeDeserializer
 import org.jetbrains.kotlin.storage.StorageManager
@@ -29,23 +30,32 @@
         languageVersionSettings: LanguageVersionSettings,
         storageManager: StorageManager,
         builtIns: KotlinBuiltIns,
-        packageAccessHandler: PackageAccessHandler?
+        packageAccessHandler: PackageAccessHandler?,
+        platform: TargetPlatform?,
     ) = createDescriptorOptionalBuiltIns(
         library,
         languageVersionSettings,
         storageManager,
         builtIns,
         packageAccessHandler,
-        LookupTracker.DO_NOTHING
+        LookupTracker.DO_NOTHING,
+        platform
     )
 
     fun createDescriptorAndNewBuiltIns(
         library: KotlinLibrary,
         languageVersionSettings: LanguageVersionSettings,
         storageManager: StorageManager,
-        packageAccessHandler: PackageAccessHandler?
+        packageAccessHandler: PackageAccessHandler?,
+        platform: TargetPlatform?,
     ) = createDescriptorOptionalBuiltIns(
-        library, languageVersionSettings, storageManager, null, packageAccessHandler, LookupTracker.DO_NOTHING
+        library,
+        languageVersionSettings,
+        storageManager,
+        null,
+        packageAccessHandler,
+        LookupTracker.DO_NOTHING,
+        platform
     )
 
     fun createDescriptorOptionalBuiltIns(
@@ -54,7 +64,8 @@
         storageManager: StorageManager,
         builtIns: KotlinBuiltIns?,
         packageAccessHandler: PackageAccessHandler?,
-        lookupTracker: LookupTracker
+        lookupTracker: LookupTracker,
+        platform: TargetPlatform?,
     ): ModuleDescriptorImpl
 
     fun createPackageFragmentProvider(
diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibModuleDescriptorFactory.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibModuleDescriptorFactory.kt
index dbf7ba5..cf60d9c 100644
--- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibModuleDescriptorFactory.kt
+++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibModuleDescriptorFactory.kt
@@ -10,6 +10,7 @@
 import org.jetbrains.kotlin.descriptors.ModuleDescriptor
 import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
 import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.platform.TargetPlatform
 import org.jetbrains.kotlin.storage.StorageManager
 
 interface KlibModuleDescriptorFactory {
@@ -22,7 +23,8 @@
         storageManager: StorageManager,
         builtIns: KotlinBuiltIns,
         origin: KlibModuleOrigin,
-        customCapabilities: Map<ModuleCapability<*>, Any?> = emptyMap()
+        platform: TargetPlatform?,
+        customCapabilities: Map<ModuleCapability<*>, Any?> = emptyMap(),
     ): ModuleDescriptorImpl
 
     /**
@@ -33,6 +35,7 @@
         name: Name,
         storageManager: StorageManager,
         origin: KlibModuleOrigin,
-        customCapabilities: Map<ModuleCapability<*>, Any?> = emptyMap()
+        platform: TargetPlatform?,
+        customCapabilities: Map<ModuleCapability<*>, Any?> = emptyMap(),
     ): ModuleDescriptorImpl
 }
diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibResolvedModuleDescriptorsFactory.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibResolvedModuleDescriptorsFactory.kt
index 9a30d82..ef27ee1 100644
--- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibResolvedModuleDescriptorsFactory.kt
+++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibResolvedModuleDescriptorsFactory.kt
@@ -5,6 +5,7 @@
 import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
 import org.jetbrains.kotlin.konan.file.File
 import org.jetbrains.kotlin.library.metadata.resolver.KotlinLibraryResolveResult
+import org.jetbrains.kotlin.platform.TargetPlatform
 import org.jetbrains.kotlin.storage.StorageManager
 
 interface KlibResolvedModuleDescriptorsFactory {
@@ -33,6 +34,7 @@
         includedLibraryFiles: Set<File>,
         additionalDependencyModules: Iterable<ModuleDescriptorImpl>,
         isForMetadataCompilation: Boolean,
+        platform: TargetPlatform?,
     ): KotlinResolvedModuleDescriptors
 }
 
diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt
index 060db91..bd459b6 100644
--- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt
+++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt
@@ -21,6 +21,7 @@
 import org.jetbrains.kotlin.name.FqName
 import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.name.parentOrNull
+import org.jetbrains.kotlin.platform.TargetPlatform
 import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
 import org.jetbrains.kotlin.resolve.sam.SamConversionResolverImpl
 import org.jetbrains.kotlin.serialization.deserialization.*
@@ -42,7 +43,8 @@
         storageManager: StorageManager,
         builtIns: KotlinBuiltIns?,
         packageAccessHandler: PackageAccessHandler?,
-        lookupTracker: LookupTracker
+        lookupTracker: LookupTracker,
+        platform: TargetPlatform?,
     ): ModuleDescriptorImpl {
 
         val libraryProto = parseModuleHeader(library.moduleHeaderData)
@@ -50,10 +52,10 @@
         val moduleName = Name.special(libraryProto.moduleName)
         val moduleOrigin = DeserializedKlibModuleOrigin(library)
 
-        val moduleDescriptor = if (builtIns != null )
-            descriptorFactory.createDescriptor(moduleName, storageManager, builtIns, moduleOrigin)
+        val moduleDescriptor = if (builtIns != null)
+            descriptorFactory.createDescriptor(moduleName, storageManager, builtIns, moduleOrigin, platform)
         else
-            descriptorFactory.createDescriptorAndNewBuiltIns(moduleName, storageManager, moduleOrigin)
+            descriptorFactory.createDescriptorAndNewBuiltIns(moduleName, storageManager, moduleOrigin, platform)
 
         val deserializationConfiguration = CompilerDeserializationConfiguration(languageVersionSettings)
 
diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibModuleDescriptorFactoryImpl.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibModuleDescriptorFactoryImpl.kt
index 29953d3..6c093f2 100644
--- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibModuleDescriptorFactoryImpl.kt
+++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibModuleDescriptorFactoryImpl.kt
@@ -12,6 +12,7 @@
 import org.jetbrains.kotlin.library.metadata.KlibModuleOrigin
 import org.jetbrains.kotlin.library.metadata.isInteropLibrary
 import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.platform.TargetPlatform
 import org.jetbrains.kotlin.platform.konan.NativePlatforms
 import org.jetbrains.kotlin.resolve.ImplicitIntegerCoercion
 import org.jetbrains.kotlin.storage.StorageManager
@@ -23,7 +24,8 @@
         storageManager: StorageManager,
         builtIns: KotlinBuiltIns,
         origin: KlibModuleOrigin,
-        customCapabilities: Map<ModuleCapability<*>, Any?>
+        platform: TargetPlatform?,
+        customCapabilities: Map<ModuleCapability<*>, Any?>,
     ) = ModuleDescriptorImpl(
         name,
         storageManager,
@@ -32,20 +34,20 @@
             KlibModuleOrigin.CAPABILITY to origin,
             ImplicitIntegerCoercion.MODULE_CAPABILITY to origin.isInteropLibrary()
         ),
-        // TODO: don't use hardcoded platform; it should be supplied as a parameter
-        platform = NativePlatforms.unspecifiedNativePlatform
+        platform = platform
     )
 
     override fun createDescriptorAndNewBuiltIns(
         name: Name,
         storageManager: StorageManager,
         origin: KlibModuleOrigin,
-        customCapabilities: Map<ModuleCapability<*>, Any?>
+        platform: TargetPlatform?,
+        customCapabilities: Map<ModuleCapability<*>, Any?>,
     ): ModuleDescriptorImpl {
 
         val builtIns = createBuiltIns(storageManager)
 
-        val moduleDescriptor = createDescriptor(name, storageManager, builtIns, origin, customCapabilities)
+        val moduleDescriptor = createDescriptor(name, storageManager, builtIns, origin, platform, customCapabilities)
         builtIns.builtInsModule = moduleDescriptor
 
         return moduleDescriptor
diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibResolvedModuleDescriptorsFactoryImpl.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibResolvedModuleDescriptorsFactoryImpl.kt
index 14f4110..1537bc6 100644
--- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibResolvedModuleDescriptorsFactoryImpl.kt
+++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibResolvedModuleDescriptorsFactoryImpl.kt
@@ -19,6 +19,7 @@
 import org.jetbrains.kotlin.library.metadata.resolver.KotlinLibraryResolveResult
 import org.jetbrains.kotlin.name.FqName
 import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.platform.TargetPlatform
 import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
 import org.jetbrains.kotlin.resolve.scopes.MemberScope
 import org.jetbrains.kotlin.resolve.scopes.MemberScopeImpl
@@ -43,6 +44,7 @@
         includedLibraryFiles: Set<File>,
         additionalDependencyModules: Iterable<ModuleDescriptorImpl>,
         isForMetadataCompilation: Boolean,
+        platform: TargetPlatform?,
     ): KotlinResolvedModuleDescriptors {
 
         val moduleDescriptors = mutableListOf<ModuleDescriptorImpl>()
@@ -60,7 +62,12 @@
 
                 // MutableModuleContext needs ModuleDescriptorImpl, rather than ModuleDescriptor.
                 val moduleDescriptor = createDescriptorOptionalBuiltsIns(
-                    library, languageVersionSettings, storageManager, builtIns, packageAccessHandler
+                    library,
+                    languageVersionSettings,
+                    storageManager,
+                    builtIns,
+                    packageAccessHandler,
+                    platform
                 )
                 builtIns = moduleDescriptor.builtIns
                 moduleDescriptors.add(moduleDescriptor)
@@ -87,6 +94,7 @@
             // forward declarations (to prevent getting non-actualized expects into the backend,
             // and to prevent related klib signature changes).
             isExpect = isForMetadataCompilation,
+            platform = platform,
         )
 
         // Set inter-dependencies between module descriptors, add forwarding declarations module.
@@ -115,10 +123,12 @@
     fun createForwardDeclarationsModule(
         builtIns: KotlinBuiltIns?,
         storageManager: StorageManager,
-        isExpect: Boolean
+        isExpect: Boolean,
+        platform: TargetPlatform?,
     ): ModuleDescriptorImpl {
 
-        val module = createDescriptorOptionalBuiltsIns(FORWARD_DECLARATIONS_MODULE_NAME, storageManager, builtIns, SyntheticModulesOrigin)
+        val module =
+            createDescriptorOptionalBuiltsIns(FORWARD_DECLARATIONS_MODULE_NAME, storageManager, builtIns, SyntheticModulesOrigin, platform)
 
         fun createPackage(fqName: FqName, supertypeName: String, classKind: ClassKind) =
             ForwardDeclarationsPackageFragmentDescriptor(
@@ -148,22 +158,30 @@
         name: Name,
         storageManager: StorageManager,
         builtIns: KotlinBuiltIns?,
-        moduleOrigin: KlibModuleOrigin
+        moduleOrigin: KlibModuleOrigin,
+        platform: TargetPlatform?,
     ) = if (builtIns != null)
-        moduleDescriptorFactory.descriptorFactory.createDescriptor(name, storageManager, builtIns, moduleOrigin)
+        moduleDescriptorFactory.descriptorFactory.createDescriptor(name, storageManager, builtIns, moduleOrigin, platform)
     else
-        moduleDescriptorFactory.descriptorFactory.createDescriptorAndNewBuiltIns(name, storageManager, moduleOrigin)
+        moduleDescriptorFactory.descriptorFactory.createDescriptorAndNewBuiltIns(name, storageManager, moduleOrigin, platform)
 
     private fun createDescriptorOptionalBuiltsIns(
         library: KotlinLibrary,
         languageVersionSettings: LanguageVersionSettings,
         storageManager: StorageManager,
         builtIns: KotlinBuiltIns?,
-        packageAccessHandler: PackageAccessHandler?
+        packageAccessHandler: PackageAccessHandler?,
+        platform: TargetPlatform?,
     ) = if (builtIns != null)
-        moduleDescriptorFactory.createDescriptor(library, languageVersionSettings, storageManager, builtIns, packageAccessHandler)
+        moduleDescriptorFactory.createDescriptor(library, languageVersionSettings, storageManager, builtIns, packageAccessHandler, platform)
     else
-        moduleDescriptorFactory.createDescriptorAndNewBuiltIns(library, languageVersionSettings, storageManager, packageAccessHandler)
+        moduleDescriptorFactory.createDescriptorAndNewBuiltIns(
+            library,
+            languageVersionSettings,
+            storageManager,
+            packageAccessHandler,
+            platform
+        )
 
     companion object {
         val FORWARD_DECLARATIONS_MODULE_NAME = Name.special("<forward declarations>")
diff --git a/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt b/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt
index 89d47f6..d4d0422 100644
--- a/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt
+++ b/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt
@@ -544,6 +544,7 @@
         writer.writeIr(serializedIrModule)
     }
 
+    // TODO: Factor out
     @OptIn(ObsoleteDescriptorBasedAPI::class)
     private fun doDeserializeIrModule(moduleDescriptor: ModuleDescriptorImpl): DeserializedModuleInfo {
         val mangler = JsManglerDesc
diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/FirJsKlibBackendFacade.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/FirJsKlibBackendFacade.kt
index d3d8424..80d7d1d 100644
--- a/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/FirJsKlibBackendFacade.kt
+++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/FirJsKlibBackendFacade.kt
@@ -14,6 +14,7 @@
 import org.jetbrains.kotlin.js.test.utils.JsIrIncrementalDataProvider
 import org.jetbrains.kotlin.js.test.utils.jsIrIncrementalDataProvider
 import org.jetbrains.kotlin.library.KotlinAbiVersion
+import org.jetbrains.kotlin.platform.js.JsPlatforms
 import org.jetbrains.kotlin.storage.LockBasedStorageManager
 import org.jetbrains.kotlin.test.backend.ir.IrBackendFacade
 import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
@@ -87,7 +88,8 @@
             LockBasedStorageManager("ModulesStructure"),
             inputArtifact.irModuleFragment.descriptor.builtIns,
             packageAccessHandler = null,
-            lookupTracker = LookupTracker.DO_NOTHING
+            lookupTracker = LookupTracker.DO_NOTHING,
+            platform = JsPlatforms.defaultJsPlatform,
         )
         // TODO: find out why it must be so weird
         moduleDescriptor.safeAs<ModuleDescriptorImpl>()?.let {
@@ -102,4 +104,4 @@
 
         return BinaryArtifacts.KLib(File(outputFile))
     }
-}
\ No newline at end of file
+}
diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsKlibBackendFacade.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsKlibBackendFacade.kt
index 2172853..089d677 100644
--- a/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsKlibBackendFacade.kt
+++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsKlibBackendFacade.kt
@@ -16,6 +16,7 @@
 import org.jetbrains.kotlin.js.test.utils.JsIrIncrementalDataProvider
 import org.jetbrains.kotlin.js.test.utils.jsIrIncrementalDataProvider
 import org.jetbrains.kotlin.library.KotlinAbiVersion
+import org.jetbrains.kotlin.platform.js.JsPlatforms
 import org.jetbrains.kotlin.storage.LockBasedStorageManager
 import org.jetbrains.kotlin.test.backend.ir.IrBackendFacade
 import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
@@ -81,7 +82,8 @@
             LockBasedStorageManager("ModulesStructure"),
             testServices.moduleDescriptorProvider.getModuleDescriptor(module).builtIns,
             packageAccessHandler = null,
-            lookupTracker = LookupTracker.DO_NOTHING
+            lookupTracker = LookupTracker.DO_NOTHING,
+            platform = JsPlatforms.defaultJsPlatform,
         )
         moduleDescriptor.setDependencies(dependencies + moduleDescriptor)
         testServices.moduleDescriptorProvider.replaceModuleDescriptorForModule(module, moduleDescriptor)
@@ -93,4 +95,4 @@
 
         return BinaryArtifacts.KLib(File(outputFile))
     }
-}
\ No newline at end of file
+}
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/TopDownAnalyzerFacadeForKonan.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/TopDownAnalyzerFacadeForKonan.kt
index 9288fad..e251314 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/TopDownAnalyzerFacadeForKonan.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/TopDownAnalyzerFacadeForKonan.kt
@@ -22,6 +22,7 @@
 import org.jetbrains.kotlin.library.metadata.NativeTypeTransformer
 import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
 import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.platform.konan.NativePlatforms
 import org.jetbrains.kotlin.psi.KtFile
 import org.jetbrains.kotlin.resolve.*
 import org.jetbrains.kotlin.resolve.extensions.AnalysisHandlerExtension
@@ -38,14 +39,20 @@
         val projectContext = ProjectContext(config.project, "TopDownAnalyzer for Konan")
 
         val module = nativeFactories.DefaultDescriptorFactory.createDescriptorAndNewBuiltIns(
-                moduleName, projectContext.storageManager, origin = CurrentKlibModuleOrigin)
+                moduleName,
+                projectContext.storageManager,
+                origin = CurrentKlibModuleOrigin,
+                platform = NativePlatforms.unspecifiedNativePlatform
+        )
         val moduleContext = MutableModuleContextImpl(module, projectContext)
 
         val resolvedModuleDescriptors = nativeFactories.DefaultResolvedDescriptorsFactory.createResolved(
                 config.resolvedLibraries, projectContext.storageManager, module.builtIns, config.languageVersionSettings,
                 config.friendModuleFiles, config.refinesModuleFiles,
                 config.resolve.includedLibraries.map { it.libraryFile }.toSet(), listOf(module),
-                isForMetadataCompilation = config.metadataKlib)
+                isForMetadataCompilation = config.metadataKlib,
+                platform = NativePlatforms.unspecifiedNativePlatform,
+        )
 
         val additionalPackages = mutableListOf<PackageFragmentProvider>()
         if (!module.isNativeStdlib()) {