JVM_IR: avoid double encoding of byte strings

IrLibraryFile, ingerited from Klib code, needed types, bodies, strings,
signatures encoded as byte strings.
When we store this data as class annotations, it is better to store it
as protobuf structs, to avoid re-encoding byte streams twice.
This commit is contained in:
Georgy Bronnikov
2021-09-27 19:41:49 +03:00
committed by TeamCityServer
parent b61389f6f9
commit 8a459821d0
13 changed files with 686 additions and 326 deletions
@@ -6,7 +6,8 @@
package org.jetbrains.kotlin.ir.backend.js.ic
import org.jetbrains.kotlin.backend.common.serialization.IdSignatureDeserializer
import org.jetbrains.kotlin.backend.common.serialization.IrLibraryFile
import org.jetbrains.kotlin.backend.common.serialization.IrLibraryBytesSource
import org.jetbrains.kotlin.backend.common.serialization.IrLibraryFileFromBytes
import org.jetbrains.kotlin.backend.common.serialization.codedInputStream
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
import org.jetbrains.kotlin.config.CompilerConfiguration
@@ -121,7 +122,7 @@ private fun KotlinLibrary.filesAndSigReaders(): List<Pair<String, IdSignatureDes
for (i in 0 until fileSize) {
val fileStream = file(i).codedInputStream
val fileProto = ProtoFile.parseFrom(fileStream, extReg)
val sigReader = IdSignatureDeserializer(object : IrLibraryFile() {
val sigReader = IdSignatureDeserializer(IrLibraryFileFromBytes(object : IrLibraryBytesSource() {
private fun err(): Nothing = error("Not supported")
override fun irDeclaration(index: Int): ByteArray = err()
@@ -134,7 +135,7 @@ private fun KotlinLibrary.filesAndSigReaders(): List<Pair<String, IdSignatureDes
override fun body(index: Int): ByteArray = err()
override fun debugInfo(index: Int): ByteArray? = null
}, null)
}), null)
result.add(fileProto.fileEntry.name to sigReader)
}