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:
committed by
TeamCityServer
parent
b61389f6f9
commit
8a459821d0
+5
-10
@@ -23,13 +23,12 @@ import org.jetbrains.kotlin.library.impl.DeclarationIrTableMemoryReader
|
||||
import org.jetbrains.kotlin.library.impl.IrArrayMemoryReader
|
||||
import org.jetbrains.kotlin.library.impl.IrLongArrayMemoryReader
|
||||
import org.jetbrains.kotlin.protobuf.ExtensionRegistryLite
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrDeclaration as ProtoIrDeclaration
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrFile as ProtoIrFile
|
||||
|
||||
class IcFileDeserializer(
|
||||
val linker: JsIrLinker,
|
||||
private val file: IrFile,
|
||||
originalFileReader: IrLibraryFile,
|
||||
originalFileReader: IrLibraryFileFromBytes,
|
||||
fileProto: ProtoIrFile,
|
||||
deserializeBodies: Boolean,
|
||||
allowErrorNodes: Boolean,
|
||||
@@ -115,7 +114,7 @@ class IcFileDeserializer(
|
||||
|
||||
// IC data processing starts here
|
||||
|
||||
private val icFileReader = FileReaderFromSerializedIrFile(icFileData.file)
|
||||
private val icFileReader = IrLibraryFileFromBytes(FileReaderFromSerializedIrFile(icFileData.file))
|
||||
|
||||
val symbolDeserializer = IrSymbolDeserializer(
|
||||
linker.symbolTable,
|
||||
@@ -195,8 +194,7 @@ class IcFileDeserializer(
|
||||
cachedDeclaration(idSig)?.let { return it }
|
||||
|
||||
val idSigIndex = reversedSignatureIndex[idSig] ?: return null
|
||||
val declarationStream = icFileReader.irDeclaration(idSigIndex).codedInputStream
|
||||
val declarationProto = ProtoIrDeclaration.parseFrom(declarationStream, extensionRegistryLite)
|
||||
val declarationProto = icFileReader.declaration(idSigIndex)
|
||||
return declarationDeserializer.deserializeDeclaration(declarationProto)
|
||||
}
|
||||
|
||||
@@ -221,8 +219,7 @@ class IcFileDeserializer(
|
||||
}
|
||||
|
||||
reversedSignatureIndex[maybeTopLevel]?.let { idSigIndex ->
|
||||
val declarationStream = icFileReader.irDeclaration(idSigIndex).codedInputStream
|
||||
val declarationProto = ProtoIrDeclaration.parseFrom(declarationStream, extensionRegistryLite)
|
||||
val declarationProto = icFileReader.declaration(idSigIndex)
|
||||
return declarationDeserializer.deserializeDeclaration(declarationProto)
|
||||
}
|
||||
|
||||
@@ -250,9 +247,7 @@ class IcFileDeserializer(
|
||||
}
|
||||
}
|
||||
|
||||
private val extensionRegistryLite = ExtensionRegistryLite.newInstance()
|
||||
|
||||
private class FileReaderFromSerializedIrFile(val irFile: SerializedIrFile) : IrLibraryFile() {
|
||||
private class FileReaderFromSerializedIrFile(val irFile: SerializedIrFile) : IrLibraryBytesSource() {
|
||||
private val declarationReader = DeclarationIrTableMemoryReader(irFile.declarations)
|
||||
private val typeReader = IrArrayMemoryReader(irFile.types)
|
||||
private val signatureReader = IrArrayMemoryReader(irFile.signatures)
|
||||
|
||||
+1
-1
@@ -127,7 +127,7 @@ class IcModuleDeserializer(
|
||||
allowErrorNodes: Boolean
|
||||
): IrFile {
|
||||
|
||||
val fileReader = IrLibraryFileFromKlib(moduleDeserializer.klib, fileIndex)
|
||||
val fileReader = IrLibraryFileFromBytes(IrKlibBytesSource(moduleDeserializer.klib, fileIndex))
|
||||
val file = fileReader.createFile(moduleFragment, fileProto)
|
||||
val fileStrategy = strategyResolver(file.fileEntry.name)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user