[JS IR] Pass dirty files into backend and load IR for them only

This commit is contained in:
Roman Artemev
2021-09-28 18:20:12 +03:00
committed by TeamCityServer
parent 43bfe2333c
commit 4bd6e8a034
2 changed files with 19 additions and 9 deletions
@@ -54,6 +54,7 @@ fun compile(
lowerPerModule: Boolean = false,
safeExternalBoolean: Boolean = false,
safeExternalBooleanDiagnostic: RuntimeDiagnostic? = null,
filesToLower: Set<String>? = null
): CompilerResult {
if (lowerPerModule) {
@@ -75,7 +76,7 @@ fun compile(
}
val (moduleFragment: IrModuleFragment, dependencyModules, irBuiltIns, symbolTable, deserializer, moduleToName) =
loadIr(depsDescriptors, irFactory, verifySignatures)
loadIr(depsDescriptors, irFactory, verifySignatures, filesToLower)
val mainModule = depsDescriptors.mainModule
val configuration = depsDescriptors.compilerConfiguration
@@ -255,7 +255,8 @@ object EmptyLoweringsCacheProvider : LoweringsCacheProvider {
fun loadIr(
depsDescriptors: ModulesStructure,
irFactory: IrFactory,
verifySignatures: Boolean
verifySignatures: Boolean,
filesToLoad: Set<String>? = null
): IrModuleInfo {
val project = depsDescriptors.project
val mainModule = depsDescriptors.mainModule
@@ -269,6 +270,7 @@ fun loadIr(
when (mainModule) {
is MainModule.SourceFiles -> {
assert(filesToLoad == null)
val (psi2IrContext, _) = preparePsi2Ir(depsDescriptors, errorPolicy, symbolTable)
val irBuiltIns = psi2IrContext.irBuiltIns
val feContext = psi2IrContext.run {
@@ -362,18 +364,25 @@ fun loadIr(
val deserializedModuleFragments =
sortDependencies(reachableDependencies.getFullResolvedList(), depsDescriptors.descriptors).map { klib ->
val strategy =
if (klib == mainModuleLib)
val descriptor = depsDescriptors.getModuleDescriptor(klib)
if (filesToLoad != null) {
if (klib == mainModuleLib) {
irLinker.deserializeDirtyFiles(descriptor, klib, filesToLoad)
} else {
irLinker.deserializeHeadersWithInlineBodies(descriptor, klib)
}
} else {
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(descriptor, klib, { strategy })
}.also { moduleFragment ->
klib.manifestProperties.getProperty(KLIB_PROPERTY_JS_OUTPUT_NAME)?.let {
moduleFragmentToUniqueName[moduleFragment] = it
}
}
}
val moduleFragment = deserializedModuleFragments.last()