[KLIB] Resolve deserialization on for each file separately
Needs for IC
This commit is contained in:
committed by
TeamCityServer
parent
28ffcf1e81
commit
78cd45f937
+7
-6
@@ -32,7 +32,7 @@ class IcModuleDeserializer(
|
||||
val icData: SerializedIcData,
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
override val klib: IrLibrary,
|
||||
override val strategy: DeserializationStrategy,
|
||||
override val strategyResolver: (String) -> DeserializationStrategy,
|
||||
private val containsErrorCode: Boolean = false,
|
||||
) : IrModuleDeserializer(moduleDescriptor, (klib as KotlinLibrary).versions.abiVersion ?: KotlinAbiVersion.CURRENT) {
|
||||
|
||||
@@ -129,17 +129,18 @@ class IcModuleDeserializer(
|
||||
|
||||
val fileReader = IrLibraryFileFromKlib(moduleDeserializer.klib, fileIndex)
|
||||
val file = fileReader.createFile(moduleFragment, fileProto)
|
||||
val fileStrategy = strategyResolver(file.fileEntry.name)
|
||||
|
||||
val icFileData = pathToIcFileData[file.path]!!
|
||||
val icFileData = pathToIcFileData[file.path] ?: error("No IC cache found for file ${file.path}")
|
||||
|
||||
val icDeserializer = IcFileDeserializer(
|
||||
linker,
|
||||
file,
|
||||
fileReader,
|
||||
fileProto,
|
||||
strategy.needBodies,
|
||||
fileStrategy.needBodies,
|
||||
allowErrorNodes,
|
||||
strategy.inlineBodies,
|
||||
fileStrategy.inlineBodies,
|
||||
moduleDeserializer,
|
||||
{ fileDeserializer -> originalEnqueue(fileDeserializer) },
|
||||
icFileData,
|
||||
@@ -169,10 +170,10 @@ class IcModuleDeserializer(
|
||||
}
|
||||
}
|
||||
|
||||
if (strategy.theWholeWorld) {
|
||||
if (fileStrategy.theWholeWorld) {
|
||||
icDeserializer.allOriginalDeclarationSignatures().forEach { it.originalEnqueue(icDeserializer) }
|
||||
}
|
||||
if (strategy.theWholeWorld || strategy.explicitlyExported) {
|
||||
if (fileStrategy.theWholeWorld || fileStrategy.explicitlyExported) {
|
||||
linker.modulesWithReachableTopLevels.add(this)
|
||||
}
|
||||
|
||||
|
||||
@@ -288,7 +288,7 @@ fun loadIr(
|
||||
irLinker.deserializeIrModuleHeader(
|
||||
depsDescriptors.getModuleDescriptor(klib),
|
||||
klib,
|
||||
deserializationStrategy = DeserializationStrategy.EXPLICITLY_EXPORTED
|
||||
deserializationStrategy = { DeserializationStrategy.EXPLICITLY_EXPORTED }
|
||||
).also { moduleFragment ->
|
||||
klib.manifestProperties.getProperty(KLIB_PROPERTY_JS_OUTPUT_NAME)?.let {
|
||||
moduleFragmentToUniqueName[moduleFragment] = it
|
||||
@@ -359,19 +359,21 @@ fun loadIr(
|
||||
it.library.libraryFile.canonicalPath == mainPath
|
||||
}
|
||||
|
||||
val deserializedModuleFragments = sortDependencies(reachableDependencies.getFullResolvedList(), depsDescriptors.descriptors).map { klib ->
|
||||
val strategy =
|
||||
if (klib == mainModuleLib)
|
||||
DeserializationStrategy.ALL
|
||||
else
|
||||
DeserializationStrategy.EXPLICITLY_EXPORTED
|
||||
val deserializedModuleFragments =
|
||||
sortDependencies(reachableDependencies.getFullResolvedList(), depsDescriptors.descriptors).map { klib ->
|
||||
val strategy =
|
||||
if (klib == mainModuleLib)
|
||||
DeserializationStrategy.ALL
|
||||
else
|
||||
DeserializationStrategy.EXPLICITLY_EXPORTED
|
||||
|
||||
irLinker.deserializeIrModuleHeader(depsDescriptors.getModuleDescriptor(klib), klib, strategy).also { moduleFragment ->
|
||||
klib.manifestProperties.getProperty(KLIB_PROPERTY_JS_OUTPUT_NAME)?.let {
|
||||
moduleFragmentToUniqueName[moduleFragment] = it
|
||||
}
|
||||
irLinker.deserializeIrModuleHeader(depsDescriptors.getModuleDescriptor(klib), klib, { strategy })
|
||||
.also { moduleFragment ->
|
||||
klib.manifestProperties.getProperty(KLIB_PROPERTY_JS_OUTPUT_NAME)?.let {
|
||||
moduleFragmentToUniqueName[moduleFragment] = it
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val moduleFragment = deserializedModuleFragments.last()
|
||||
|
||||
|
||||
+6
-6
@@ -40,7 +40,7 @@ class JsIrLinker(
|
||||
private val IrLibrary.libContainsErrorCode: Boolean
|
||||
get() = this is KotlinLibrary && this.containsErrorCode
|
||||
|
||||
override fun createModuleDeserializer(moduleDescriptor: ModuleDescriptor, klib: KotlinLibrary?, strategy: DeserializationStrategy): IrModuleDeserializer {
|
||||
override fun createModuleDeserializer(moduleDescriptor: ModuleDescriptor, klib: KotlinLibrary?, strategyResolver: (String) -> DeserializationStrategy): IrModuleDeserializer {
|
||||
require(klib != null) { "Expecting kotlin library" }
|
||||
loweredIcData[moduleDescriptor]?.let { loweredIcData ->
|
||||
return IcModuleDeserializer(
|
||||
@@ -50,17 +50,17 @@ class JsIrLinker(
|
||||
loweredIcData,
|
||||
moduleDescriptor,
|
||||
klib,
|
||||
strategy,
|
||||
strategyResolver,
|
||||
containsErrorCode = klib.libContainsErrorCode,
|
||||
)
|
||||
}
|
||||
return JsModuleDeserializer(moduleDescriptor, klib, strategy, klib.versions.abiVersion ?: KotlinAbiVersion.CURRENT, klib.libContainsErrorCode)
|
||||
return JsModuleDeserializer(moduleDescriptor, klib, strategyResolver, klib.versions.abiVersion ?: KotlinAbiVersion.CURRENT, klib.libContainsErrorCode)
|
||||
}
|
||||
|
||||
val mapping: JsMapping by lazy { JsMapping(symbolTable.irFactory) }
|
||||
|
||||
private inner class JsModuleDeserializer(moduleDescriptor: ModuleDescriptor, klib: IrLibrary, strategy: DeserializationStrategy, libraryAbiVersion: KotlinAbiVersion, allowErrorCode: Boolean) :
|
||||
BasicIrModuleDeserializer(this, moduleDescriptor, klib, strategy, libraryAbiVersion, allowErrorCode)
|
||||
private inner class JsModuleDeserializer(moduleDescriptor: ModuleDescriptor, klib: IrLibrary, strategyResolver: (String) -> DeserializationStrategy, libraryAbiVersion: KotlinAbiVersion, allowErrorCode: Boolean) :
|
||||
BasicIrModuleDeserializer(this, moduleDescriptor, klib, strategyResolver, libraryAbiVersion, allowErrorCode)
|
||||
|
||||
override fun maybeWrapWithBuiltInAndInit(
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
@@ -75,7 +75,7 @@ class JsIrLinker(
|
||||
val currentModuleDeserializer = super.createCurrentModuleDeserializer(moduleFragment, dependencies)
|
||||
icData?.let {
|
||||
return CurrentModuleWithICDeserializer(currentModuleDeserializer, symbolTable, builtIns, it.icData) { lib ->
|
||||
JsModuleDeserializer(currentModuleDeserializer.moduleDescriptor, lib, currentModuleDeserializer.strategy, KotlinAbiVersion.CURRENT, it.containsErrorCode)
|
||||
JsModuleDeserializer(currentModuleDeserializer.moduleDescriptor, lib, currentModuleDeserializer.strategyResolver, KotlinAbiVersion.CURRENT, it.containsErrorCode)
|
||||
}
|
||||
}
|
||||
return currentModuleDeserializer
|
||||
|
||||
Reference in New Issue
Block a user