[K/N][IR][codegen] Preliminary support of per-file caches

This commit is contained in:
Igor Chevdar
2022-04-04 18:27:15 +05:00
committed by Space
parent 4d2a8f852e
commit 7e79b2b500
35 changed files with 615 additions and 332 deletions
@@ -87,9 +87,8 @@ class FakeOverrideBuilder(
fakeOverrideCandidates[clazz] = compatibilityMode
}
private fun buildFakeOverrideChainsForClass(clazz: IrClass, compatibilityMode: CompatibilityMode) {
if (haveFakeOverrides.contains(clazz)) return
if (!platformSpecificClassFilter.needToConstructFakeOverrides(clazz)) return
private fun buildFakeOverrideChainsForClass(clazz: IrClass, compatibilityMode: CompatibilityMode): Boolean {
if (haveFakeOverrides.contains(clazz)) return true
val superTypes = clazz.superTypes
@@ -99,15 +98,18 @@ class FakeOverrideBuilder(
superClasses.forEach { superClass ->
val mode = fakeOverrideCandidates[superClass] ?: compatibilityMode
buildFakeOverrideChainsForClass(superClass, mode)
haveFakeOverrides.add(superClass)
if (buildFakeOverrideChainsForClass(superClass, mode))
haveFakeOverrides.add(superClass)
}
if (!platformSpecificClassFilter.needToConstructFakeOverrides(clazz)) return false
fakeOverrideDeclarationTable.run {
inFile(clazz.fileOrNull) {
irOverridingUtil.buildFakeOverridesForClass(clazz, compatibilityMode.oldSignatures)
}
}
return true
}
override fun linkFunctionFakeOverride(declaration: IrFakeOverrideFunction, compatibilityMode: Boolean) {
@@ -183,7 +183,7 @@ class IrKlibBytesSource(private val klib: IrLibrary, private val fileIndex: Int)
override fun debugInfo(index: Int): ByteArray? = klib.debugInfo(index, fileIndex)
}
internal fun IrLibraryFile.deserializeFqName(fqn: List<Int>): String =
fun IrLibraryFile.deserializeFqName(fqn: List<Int>): String =
fqn.joinToString(".", transform = ::string)
fun IrLibraryFile.createFile(module: IrModuleFragment, fileProto: ProtoFile): IrFile {