Allow libraries to have empty ir/ component.

This commit is contained in:
Alexander Gorshenev
2019-01-23 14:40:29 +03:00
committed by alexander-gorshenev
parent 2736876919
commit 8067ab7034
10 changed files with 26 additions and 23 deletions
@@ -43,7 +43,7 @@ interface KonanLibrary {
fun packageMetadataParts(fqName: String): Set<String>
fun packageMetadata(fqName: String, partName: String): ByteArray
val irHeader: ByteArray
val irHeader: ByteArray?
fun irDeclaration(index: Long, isLocal: Boolean): ByteArray
}
@@ -50,7 +50,7 @@ interface KonanLibraryLayout {
= File(irDir, "hidden_$declarationId.knd")
fun visibleDeclarationFile(declarationId: String)
= File(irDir, "visible_$declarationId.knd")
val wholeIrFile
val irHeader
get() = File(irDir, "irHeaders.kni")
val irIndex: File
get() = File(irDir, "uniqIdTableDump.txt")
@@ -3,6 +3,6 @@ package org.jetbrains.kotlin.konan.library
interface MetadataReader {
fun loadSerializedModule(libraryLayout: KonanLibraryLayout): ByteArray
fun loadSerializedPackageFragment(libraryLayout: KonanLibraryLayout, fqName: String, partName: String): ByteArray
fun loadWholeIr(libraryLayout: KonanLibraryLayout): ByteArray
fun loadIrHeader(libraryLayout: KonanLibraryLayout): ByteArray
fun loadIrDeclaraton(libraryLayout: KonanLibraryLayout, index: Long, isLocal: Boolean): ByteArray
}
@@ -11,8 +11,8 @@ internal object DefaultMetadataReaderImpl : MetadataReader {
override fun loadSerializedPackageFragment(libraryLayout: KonanLibraryLayout, fqName: String, partName: String): ByteArray =
libraryLayout.packageFragmentFile(fqName, partName).readBytes()
override fun loadWholeIr(libraryLayout: KonanLibraryLayout): ByteArray =
libraryLayout.wholeIrFile.readBytes()
override fun loadIrHeader(libraryLayout: KonanLibraryLayout): ByteArray =
libraryLayout.irHeader.readBytes()
override fun loadIrDeclaraton(libraryLayout: KonanLibraryLayout, index: Long, isLocal: Boolean): ByteArray {
val name = index.toULong().toString(16)
@@ -84,7 +84,7 @@ class KonanLibraryImpl(
}
}
override val irHeader: ByteArray by lazy { layout.inPlace { metadataReader.loadWholeIr(it) }}
override val irHeader: ByteArray? by lazy { layout.inPlace { library -> library.irHeader.let { if (it.exists) metadataReader.loadIrHeader(library) else null }}}
override fun irDeclaration(index: Long, isLocal: Boolean) = layout.inPlace { metadataReader.loadIrDeclaraton(it, index, isLocal) }