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()) {