[Klib] Split up IR header tables onto three parts
There was one monolith protobuf at irHeader.knd, it was split up onto 4 parts due to performance issues: - a small irHeader with some basic info about a module - symbols table - types table - strings table These 3 tables are then mmapped and accessed by index.
This commit is contained in:
@@ -97,9 +97,6 @@ message IrFile {
|
||||
message IrModule {
|
||||
required String name = 1;
|
||||
repeated IrFile file = 2;
|
||||
required IrSymbolTable symbol_table = 3;
|
||||
required IrTypeTable type_table = 4;
|
||||
required StringTable string_table = 5;
|
||||
}
|
||||
|
||||
/* ------ String Table ------------------------------------------ */
|
||||
|
||||
-108
@@ -1,108 +0,0 @@
|
||||
/**
|
||||
* Copyright 2010-2019 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.backend.common.library
|
||||
|
||||
import java.io.File
|
||||
import java.io.RandomAccessFile
|
||||
import java.nio.MappedByteBuffer
|
||||
import java.nio.channels.FileChannel
|
||||
import java.nio.file.Files
|
||||
|
||||
data class DeclarationId(val id: Long, val isLocal: Boolean)
|
||||
|
||||
|
||||
fun File.map(mode: FileChannel.MapMode = FileChannel.MapMode.READ_ONLY,
|
||||
start: Long = 0, size: Long = -1): MappedByteBuffer {
|
||||
val file = RandomAccessFile(path,
|
||||
if (mode == FileChannel.MapMode.READ_ONLY) "r" else "rw")
|
||||
val fileSize = if (mode == FileChannel.MapMode.READ_ONLY)
|
||||
file.length() else size.also { assert(size != -1L) }
|
||||
val channel = file.channel
|
||||
return channel.map(mode, start, fileSize)
|
||||
.also { channel.close() } // Channel close closes the file also.
|
||||
}
|
||||
|
||||
class CombinedIrFileReader(file: File) {
|
||||
private val buffer = file.map(FileChannel.MapMode.READ_ONLY)
|
||||
private val declarationToOffsetSize = mutableMapOf<DeclarationId, Pair<Int, Int>>()
|
||||
|
||||
init {
|
||||
val declarationsCount = buffer.int
|
||||
for (i in 0 until declarationsCount) {
|
||||
val id = buffer.long
|
||||
val isLocal = buffer.int != 0
|
||||
val offset = buffer.int
|
||||
val size = buffer.int
|
||||
declarationToOffsetSize[DeclarationId(id, isLocal)] = offset to size
|
||||
}
|
||||
}
|
||||
|
||||
fun declarationBytes(id: DeclarationId): ByteArray {
|
||||
val offsetSize = declarationToOffsetSize[id] ?: throw Error("No declaration with $id here")
|
||||
val result = ByteArray(offsetSize.second)
|
||||
buffer.position(offsetSize.first)
|
||||
buffer.get(result, 0, offsetSize.second)
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
private const val SINGLE_INDEX_RECORD_SIZE = 20 // sizeof(Long) + 3 * sizeof(Int).
|
||||
private const val INDEX_HEADER_SIZE = 4 // sizeof(Int).
|
||||
|
||||
class CombinedIrFileWriter(val declarationCount: Int) {
|
||||
private var currentDeclaration = 0
|
||||
private var currentPosition = 0
|
||||
private val file = Files.createTempFile("ir", "").toFile()
|
||||
private val randomAccessFile = RandomAccessFile(file.path, "rw")
|
||||
|
||||
init {
|
||||
randomAccessFile.writeInt(declarationCount)
|
||||
assert(randomAccessFile.filePointer.toInt() == INDEX_HEADER_SIZE)
|
||||
for (i in 0 until declarationCount) {
|
||||
randomAccessFile.writeLong(-1) // id
|
||||
randomAccessFile.writeInt(-1) // isLocal
|
||||
randomAccessFile.writeInt(-1) // offset
|
||||
randomAccessFile.writeInt(-1) // size
|
||||
}
|
||||
currentPosition = randomAccessFile.filePointer.toInt()
|
||||
assert(currentPosition == INDEX_HEADER_SIZE + SINGLE_INDEX_RECORD_SIZE * declarationCount)
|
||||
}
|
||||
|
||||
fun skipDeclaration() {
|
||||
currentDeclaration++
|
||||
}
|
||||
|
||||
fun addDeclaration(id: DeclarationId, bytes: ByteArray) {
|
||||
randomAccessFile.seek((currentDeclaration * SINGLE_INDEX_RECORD_SIZE + INDEX_HEADER_SIZE).toLong())
|
||||
randomAccessFile.writeLong(id.id)
|
||||
randomAccessFile.writeInt(if (id.isLocal) 1 else 0)
|
||||
randomAccessFile.writeInt(currentPosition)
|
||||
randomAccessFile.writeInt(bytes.size)
|
||||
randomAccessFile.seek(currentPosition.toLong())
|
||||
randomAccessFile.write(bytes)
|
||||
assert(randomAccessFile.filePointer < Int.MAX_VALUE.toLong())
|
||||
currentPosition = randomAccessFile.filePointer.toInt()
|
||||
currentDeclaration++
|
||||
}
|
||||
|
||||
fun finishWriting(): File {
|
||||
assert(currentDeclaration == declarationCount)
|
||||
randomAccessFile.close()
|
||||
return file
|
||||
}
|
||||
}
|
||||
|
||||
+20
-12
@@ -7,9 +7,10 @@ package org.jetbrains.kotlin.backend.common.serialization
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.LoggingContext
|
||||
import org.jetbrains.kotlin.backend.common.ir.ir2string
|
||||
import org.jetbrains.kotlin.backend.common.library.CombinedIrFileWriter
|
||||
import org.jetbrains.kotlin.backend.common.library.DeclarationId
|
||||
import org.jetbrains.kotlin.library.SerializedIr
|
||||
import org.jetbrains.kotlin.library.impl.CombinedIrFileWriter
|
||||
import org.jetbrains.kotlin.library.impl.DeclarationId
|
||||
import org.jetbrains.kotlin.library.impl.SimpleIrTableFileWriter
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind.*
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
@@ -1205,6 +1206,9 @@ open class IrModuleSerializer(
|
||||
}
|
||||
|
||||
lateinit var writer: CombinedIrFileWriter
|
||||
lateinit var symbolTableWriter: SimpleIrTableFileWriter
|
||||
lateinit var typeTableWriter: SimpleIrTableFileWriter
|
||||
lateinit var stringTableWriter: SimpleIrTableFileWriter
|
||||
|
||||
fun serializeModule(module: IrModuleFragment): KotlinIr.IrModule {
|
||||
val proto = KotlinIr.IrModule.newBuilder()
|
||||
@@ -1217,23 +1221,27 @@ open class IrModuleSerializer(
|
||||
module.files.forEach {
|
||||
proto.addFile(serializeIrFile(it))
|
||||
}
|
||||
proto.symbolTable = KotlinIr.IrSymbolTable.newBuilder()
|
||||
.addAllSymbols(protoSymbolArray)
|
||||
.build()
|
||||
|
||||
proto.typeTable = KotlinIr.IrTypeTable.newBuilder()
|
||||
.addAllTypes(protoTypeArray)
|
||||
.build()
|
||||
symbolTableWriter = SimpleIrTableFileWriter("symbols", protoSymbolArray.size)
|
||||
for (protoSymbol in protoSymbolArray)
|
||||
symbolTableWriter.addItem(protoSymbol.toByteArray())
|
||||
|
||||
proto.stringTable = KotlinIr.StringTable.newBuilder()
|
||||
.addAllStrings(protoStringArray)
|
||||
.build()
|
||||
typeTableWriter = SimpleIrTableFileWriter("types", protoTypeArray.size)
|
||||
for (protoSymbol in protoTypeArray)
|
||||
typeTableWriter.addItem(protoSymbol.toByteArray())
|
||||
|
||||
stringTableWriter = SimpleIrTableFileWriter("strings", protoStringArray.size)
|
||||
for (protoSymbol in protoStringArray)
|
||||
stringTableWriter.addItem(protoSymbol.toByteArray())
|
||||
|
||||
return proto.build()
|
||||
}
|
||||
|
||||
fun serializedIrModule(module: IrModuleFragment): SerializedIr {
|
||||
val moduleHeader = serializeModule(module).toByteArray()
|
||||
return SerializedIr(moduleHeader, writer.finishWriting().absolutePath)
|
||||
return SerializedIr(moduleHeader, symbolTableWriter.finishWriting().absolutePath,
|
||||
typeTableWriter.finishWriting().absolutePath,
|
||||
stringTableWriter.finishWriting().absolutePath,
|
||||
writer.finishWriting().absolutePath)
|
||||
}
|
||||
}
|
||||
|
||||
+120
-382
@@ -6719,44 +6719,35 @@ public final class KotlinIr {
|
||||
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
java.util.List<org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile>
|
||||
getFileList();
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile getFile(int index);
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
int getFileCount();
|
||||
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbolTable symbol_table = 3;</code>
|
||||
*/
|
||||
boolean hasSymbolTable();
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbolTable symbol_table = 3;</code>
|
||||
*/
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable getSymbolTable();
|
||||
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrTypeTable type_table = 4;</code>
|
||||
*/
|
||||
boolean hasTypeTable();
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrTypeTable type_table = 4;</code>
|
||||
*/
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable getTypeTable();
|
||||
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.StringTable string_table = 5;</code>
|
||||
*/
|
||||
boolean hasStringTable();
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.StringTable string_table = 5;</code>
|
||||
*/
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable getStringTable();
|
||||
}
|
||||
/**
|
||||
* Protobuf type {@code org.jetbrains.kotlin.backend.common.serialization.IrModule}
|
||||
@@ -6829,45 +6820,6 @@ public final class KotlinIr {
|
||||
file_.add(input.readMessage(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile.PARSER, extensionRegistry));
|
||||
break;
|
||||
}
|
||||
case 26: {
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable.Builder subBuilder = null;
|
||||
if (((bitField0_ & 0x00000002) == 0x00000002)) {
|
||||
subBuilder = symbolTable_.toBuilder();
|
||||
}
|
||||
symbolTable_ = input.readMessage(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable.PARSER, extensionRegistry);
|
||||
if (subBuilder != null) {
|
||||
subBuilder.mergeFrom(symbolTable_);
|
||||
symbolTable_ = subBuilder.buildPartial();
|
||||
}
|
||||
bitField0_ |= 0x00000002;
|
||||
break;
|
||||
}
|
||||
case 34: {
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable.Builder subBuilder = null;
|
||||
if (((bitField0_ & 0x00000004) == 0x00000004)) {
|
||||
subBuilder = typeTable_.toBuilder();
|
||||
}
|
||||
typeTable_ = input.readMessage(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable.PARSER, extensionRegistry);
|
||||
if (subBuilder != null) {
|
||||
subBuilder.mergeFrom(typeTable_);
|
||||
typeTable_ = subBuilder.buildPartial();
|
||||
}
|
||||
bitField0_ |= 0x00000004;
|
||||
break;
|
||||
}
|
||||
case 42: {
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable.Builder subBuilder = null;
|
||||
if (((bitField0_ & 0x00000008) == 0x00000008)) {
|
||||
subBuilder = stringTable_.toBuilder();
|
||||
}
|
||||
stringTable_ = input.readMessage(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable.PARSER, extensionRegistry);
|
||||
if (subBuilder != null) {
|
||||
subBuilder.mergeFrom(stringTable_);
|
||||
stringTable_ = subBuilder.buildPartial();
|
||||
}
|
||||
bitField0_ |= 0x00000008;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) {
|
||||
@@ -6924,12 +6876,24 @@ public final class KotlinIr {
|
||||
private java.util.List<org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile> file_;
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public java.util.List<org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile> getFileList() {
|
||||
return file_;
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public java.util.List<? extends org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFileOrBuilder>
|
||||
getFileOrBuilderList() {
|
||||
@@ -6937,75 +6901,45 @@ public final class KotlinIr {
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public int getFileCount() {
|
||||
return file_.size();
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile getFile(int index) {
|
||||
return file_.get(index);
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFileOrBuilder getFileOrBuilder(
|
||||
int index) {
|
||||
return file_.get(index);
|
||||
}
|
||||
|
||||
public static final int SYMBOL_TABLE_FIELD_NUMBER = 3;
|
||||
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable symbolTable_;
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbolTable symbol_table = 3;</code>
|
||||
*/
|
||||
public boolean hasSymbolTable() {
|
||||
return ((bitField0_ & 0x00000002) == 0x00000002);
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbolTable symbol_table = 3;</code>
|
||||
*/
|
||||
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable getSymbolTable() {
|
||||
return symbolTable_;
|
||||
}
|
||||
|
||||
public static final int TYPE_TABLE_FIELD_NUMBER = 4;
|
||||
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable typeTable_;
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrTypeTable type_table = 4;</code>
|
||||
*/
|
||||
public boolean hasTypeTable() {
|
||||
return ((bitField0_ & 0x00000004) == 0x00000004);
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrTypeTable type_table = 4;</code>
|
||||
*/
|
||||
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable getTypeTable() {
|
||||
return typeTable_;
|
||||
}
|
||||
|
||||
public static final int STRING_TABLE_FIELD_NUMBER = 5;
|
||||
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable stringTable_;
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.StringTable string_table = 5;</code>
|
||||
*/
|
||||
public boolean hasStringTable() {
|
||||
return ((bitField0_ & 0x00000008) == 0x00000008);
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.StringTable string_table = 5;</code>
|
||||
*/
|
||||
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable getStringTable() {
|
||||
return stringTable_;
|
||||
}
|
||||
|
||||
private void initFields() {
|
||||
name_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.String.getDefaultInstance();
|
||||
file_ = java.util.Collections.emptyList();
|
||||
symbolTable_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable.getDefaultInstance();
|
||||
typeTable_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable.getDefaultInstance();
|
||||
stringTable_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable.getDefaultInstance();
|
||||
}
|
||||
private byte memoizedIsInitialized = -1;
|
||||
public final boolean isInitialized() {
|
||||
@@ -7017,18 +6951,6 @@ public final class KotlinIr {
|
||||
memoizedIsInitialized = 0;
|
||||
return false;
|
||||
}
|
||||
if (!hasSymbolTable()) {
|
||||
memoizedIsInitialized = 0;
|
||||
return false;
|
||||
}
|
||||
if (!hasTypeTable()) {
|
||||
memoizedIsInitialized = 0;
|
||||
return false;
|
||||
}
|
||||
if (!hasStringTable()) {
|
||||
memoizedIsInitialized = 0;
|
||||
return false;
|
||||
}
|
||||
if (!getName().isInitialized()) {
|
||||
memoizedIsInitialized = 0;
|
||||
return false;
|
||||
@@ -7039,14 +6961,6 @@ public final class KotlinIr {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (!getSymbolTable().isInitialized()) {
|
||||
memoizedIsInitialized = 0;
|
||||
return false;
|
||||
}
|
||||
if (!getTypeTable().isInitialized()) {
|
||||
memoizedIsInitialized = 0;
|
||||
return false;
|
||||
}
|
||||
memoizedIsInitialized = 1;
|
||||
return true;
|
||||
}
|
||||
@@ -7060,15 +6974,6 @@ public final class KotlinIr {
|
||||
for (int i = 0; i < file_.size(); i++) {
|
||||
output.writeMessage(2, file_.get(i));
|
||||
}
|
||||
if (((bitField0_ & 0x00000002) == 0x00000002)) {
|
||||
output.writeMessage(3, symbolTable_);
|
||||
}
|
||||
if (((bitField0_ & 0x00000004) == 0x00000004)) {
|
||||
output.writeMessage(4, typeTable_);
|
||||
}
|
||||
if (((bitField0_ & 0x00000008) == 0x00000008)) {
|
||||
output.writeMessage(5, stringTable_);
|
||||
}
|
||||
output.writeRawBytes(unknownFields);
|
||||
}
|
||||
|
||||
@@ -7086,18 +6991,6 @@ public final class KotlinIr {
|
||||
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
|
||||
.computeMessageSize(2, file_.get(i));
|
||||
}
|
||||
if (((bitField0_ & 0x00000002) == 0x00000002)) {
|
||||
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
|
||||
.computeMessageSize(3, symbolTable_);
|
||||
}
|
||||
if (((bitField0_ & 0x00000004) == 0x00000004)) {
|
||||
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
|
||||
.computeMessageSize(4, typeTable_);
|
||||
}
|
||||
if (((bitField0_ & 0x00000008) == 0x00000008)) {
|
||||
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
|
||||
.computeMessageSize(5, stringTable_);
|
||||
}
|
||||
size += unknownFields.size();
|
||||
memoizedSerializedSize = size;
|
||||
return size;
|
||||
@@ -7196,12 +7089,6 @@ public final class KotlinIr {
|
||||
bitField0_ = (bitField0_ & ~0x00000001);
|
||||
file_ = java.util.Collections.emptyList();
|
||||
bitField0_ = (bitField0_ & ~0x00000002);
|
||||
symbolTable_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable.getDefaultInstance();
|
||||
bitField0_ = (bitField0_ & ~0x00000004);
|
||||
typeTable_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable.getDefaultInstance();
|
||||
bitField0_ = (bitField0_ & ~0x00000008);
|
||||
stringTable_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable.getDefaultInstance();
|
||||
bitField0_ = (bitField0_ & ~0x00000010);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -7234,18 +7121,6 @@ public final class KotlinIr {
|
||||
bitField0_ = (bitField0_ & ~0x00000002);
|
||||
}
|
||||
result.file_ = file_;
|
||||
if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
|
||||
to_bitField0_ |= 0x00000002;
|
||||
}
|
||||
result.symbolTable_ = symbolTable_;
|
||||
if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
|
||||
to_bitField0_ |= 0x00000004;
|
||||
}
|
||||
result.typeTable_ = typeTable_;
|
||||
if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
|
||||
to_bitField0_ |= 0x00000008;
|
||||
}
|
||||
result.stringTable_ = stringTable_;
|
||||
result.bitField0_ = to_bitField0_;
|
||||
return result;
|
||||
}
|
||||
@@ -7265,15 +7140,6 @@ public final class KotlinIr {
|
||||
}
|
||||
|
||||
}
|
||||
if (other.hasSymbolTable()) {
|
||||
mergeSymbolTable(other.getSymbolTable());
|
||||
}
|
||||
if (other.hasTypeTable()) {
|
||||
mergeTypeTable(other.getTypeTable());
|
||||
}
|
||||
if (other.hasStringTable()) {
|
||||
mergeStringTable(other.getStringTable());
|
||||
}
|
||||
setUnknownFields(
|
||||
getUnknownFields().concat(other.unknownFields));
|
||||
return this;
|
||||
@@ -7284,18 +7150,6 @@ public final class KotlinIr {
|
||||
|
||||
return false;
|
||||
}
|
||||
if (!hasSymbolTable()) {
|
||||
|
||||
return false;
|
||||
}
|
||||
if (!hasTypeTable()) {
|
||||
|
||||
return false;
|
||||
}
|
||||
if (!hasStringTable()) {
|
||||
|
||||
return false;
|
||||
}
|
||||
if (!getName().isInitialized()) {
|
||||
|
||||
return false;
|
||||
@@ -7306,14 +7160,6 @@ public final class KotlinIr {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (!getSymbolTable().isInitialized()) {
|
||||
|
||||
return false;
|
||||
}
|
||||
if (!getTypeTable().isInitialized()) {
|
||||
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -7407,24 +7253,48 @@ public final class KotlinIr {
|
||||
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public java.util.List<org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile> getFileList() {
|
||||
return java.util.Collections.unmodifiableList(file_);
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public int getFileCount() {
|
||||
return file_.size();
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile getFile(int index) {
|
||||
return file_.get(index);
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public Builder setFile(
|
||||
int index, org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile value) {
|
||||
@@ -7438,6 +7308,12 @@ public final class KotlinIr {
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public Builder setFile(
|
||||
int index, org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile.Builder builderForValue) {
|
||||
@@ -7448,6 +7324,12 @@ public final class KotlinIr {
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public Builder addFile(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile value) {
|
||||
if (value == null) {
|
||||
@@ -7460,6 +7342,12 @@ public final class KotlinIr {
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public Builder addFile(
|
||||
int index, org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile value) {
|
||||
@@ -7473,6 +7361,12 @@ public final class KotlinIr {
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public Builder addFile(
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile.Builder builderForValue) {
|
||||
@@ -7483,6 +7377,12 @@ public final class KotlinIr {
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public Builder addFile(
|
||||
int index, org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile.Builder builderForValue) {
|
||||
@@ -7493,6 +7393,12 @@ public final class KotlinIr {
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public Builder addAllFile(
|
||||
java.lang.Iterable<? extends org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrFile> values) {
|
||||
@@ -7504,6 +7410,12 @@ public final class KotlinIr {
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public Builder clearFile() {
|
||||
file_ = java.util.Collections.emptyList();
|
||||
@@ -7513,6 +7425,12 @@ public final class KotlinIr {
|
||||
}
|
||||
/**
|
||||
* <code>repeated .org.jetbrains.kotlin.backend.common.serialization.IrFile file = 2;</code>
|
||||
*
|
||||
* <pre>
|
||||
*required IrSymbolTable symbol_table = 3;
|
||||
*required IrTypeTable type_table = 4;
|
||||
*required StringTable string_table = 5;
|
||||
* </pre>
|
||||
*/
|
||||
public Builder removeFile(int index) {
|
||||
ensureFileIsMutable();
|
||||
@@ -7521,186 +7439,6 @@ public final class KotlinIr {
|
||||
return this;
|
||||
}
|
||||
|
||||
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable symbolTable_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable.getDefaultInstance();
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbolTable symbol_table = 3;</code>
|
||||
*/
|
||||
public boolean hasSymbolTable() {
|
||||
return ((bitField0_ & 0x00000004) == 0x00000004);
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbolTable symbol_table = 3;</code>
|
||||
*/
|
||||
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable getSymbolTable() {
|
||||
return symbolTable_;
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbolTable symbol_table = 3;</code>
|
||||
*/
|
||||
public Builder setSymbolTable(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
symbolTable_ = value;
|
||||
|
||||
bitField0_ |= 0x00000004;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbolTable symbol_table = 3;</code>
|
||||
*/
|
||||
public Builder setSymbolTable(
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable.Builder builderForValue) {
|
||||
symbolTable_ = builderForValue.build();
|
||||
|
||||
bitField0_ |= 0x00000004;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbolTable symbol_table = 3;</code>
|
||||
*/
|
||||
public Builder mergeSymbolTable(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable value) {
|
||||
if (((bitField0_ & 0x00000004) == 0x00000004) &&
|
||||
symbolTable_ != org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable.getDefaultInstance()) {
|
||||
symbolTable_ =
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable.newBuilder(symbolTable_).mergeFrom(value).buildPartial();
|
||||
} else {
|
||||
symbolTable_ = value;
|
||||
}
|
||||
|
||||
bitField0_ |= 0x00000004;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbolTable symbol_table = 3;</code>
|
||||
*/
|
||||
public Builder clearSymbolTable() {
|
||||
symbolTable_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbolTable.getDefaultInstance();
|
||||
|
||||
bitField0_ = (bitField0_ & ~0x00000004);
|
||||
return this;
|
||||
}
|
||||
|
||||
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable typeTable_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable.getDefaultInstance();
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrTypeTable type_table = 4;</code>
|
||||
*/
|
||||
public boolean hasTypeTable() {
|
||||
return ((bitField0_ & 0x00000008) == 0x00000008);
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrTypeTable type_table = 4;</code>
|
||||
*/
|
||||
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable getTypeTable() {
|
||||
return typeTable_;
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrTypeTable type_table = 4;</code>
|
||||
*/
|
||||
public Builder setTypeTable(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
typeTable_ = value;
|
||||
|
||||
bitField0_ |= 0x00000008;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrTypeTable type_table = 4;</code>
|
||||
*/
|
||||
public Builder setTypeTable(
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable.Builder builderForValue) {
|
||||
typeTable_ = builderForValue.build();
|
||||
|
||||
bitField0_ |= 0x00000008;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrTypeTable type_table = 4;</code>
|
||||
*/
|
||||
public Builder mergeTypeTable(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable value) {
|
||||
if (((bitField0_ & 0x00000008) == 0x00000008) &&
|
||||
typeTable_ != org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable.getDefaultInstance()) {
|
||||
typeTable_ =
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable.newBuilder(typeTable_).mergeFrom(value).buildPartial();
|
||||
} else {
|
||||
typeTable_ = value;
|
||||
}
|
||||
|
||||
bitField0_ |= 0x00000008;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrTypeTable type_table = 4;</code>
|
||||
*/
|
||||
public Builder clearTypeTable() {
|
||||
typeTable_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrTypeTable.getDefaultInstance();
|
||||
|
||||
bitField0_ = (bitField0_ & ~0x00000008);
|
||||
return this;
|
||||
}
|
||||
|
||||
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable stringTable_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable.getDefaultInstance();
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.StringTable string_table = 5;</code>
|
||||
*/
|
||||
public boolean hasStringTable() {
|
||||
return ((bitField0_ & 0x00000010) == 0x00000010);
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.StringTable string_table = 5;</code>
|
||||
*/
|
||||
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable getStringTable() {
|
||||
return stringTable_;
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.StringTable string_table = 5;</code>
|
||||
*/
|
||||
public Builder setStringTable(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
stringTable_ = value;
|
||||
|
||||
bitField0_ |= 0x00000010;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.StringTable string_table = 5;</code>
|
||||
*/
|
||||
public Builder setStringTable(
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable.Builder builderForValue) {
|
||||
stringTable_ = builderForValue.build();
|
||||
|
||||
bitField0_ |= 0x00000010;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.StringTable string_table = 5;</code>
|
||||
*/
|
||||
public Builder mergeStringTable(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable value) {
|
||||
if (((bitField0_ & 0x00000010) == 0x00000010) &&
|
||||
stringTable_ != org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable.getDefaultInstance()) {
|
||||
stringTable_ =
|
||||
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable.newBuilder(stringTable_).mergeFrom(value).buildPartial();
|
||||
} else {
|
||||
stringTable_ = value;
|
||||
}
|
||||
|
||||
bitField0_ |= 0x00000010;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* <code>required .org.jetbrains.kotlin.backend.common.serialization.StringTable string_table = 5;</code>
|
||||
*/
|
||||
public Builder clearStringTable() {
|
||||
stringTable_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.StringTable.getDefaultInstance();
|
||||
|
||||
bitField0_ = (bitField0_ & ~0x00000010);
|
||||
return this;
|
||||
}
|
||||
|
||||
// @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.backend.common.serialization.IrModule)
|
||||
}
|
||||
|
||||
|
||||
+43
-4
@@ -66,6 +66,10 @@ abstract class KotlinIrLinker(
|
||||
|
||||
private var moduleLoops = mutableMapOf<Int, IrLoopBase>()
|
||||
|
||||
private val symbolProtosCache = mutableMapOf<Int, KotlinIr.IrSymbolData>()
|
||||
private val typeProtosCache = mutableMapOf<Int, KotlinIr.IrType>()
|
||||
private val stringsCache = mutableMapOf<Int, String>()
|
||||
|
||||
// This is a heavy initializer
|
||||
val module = deserializeIrModuleHeader(moduleProto)
|
||||
|
||||
@@ -132,18 +136,36 @@ abstract class KotlinIrLinker(
|
||||
else -> TODO("Unexpected classifier symbol kind: ${proto.kind}")
|
||||
}
|
||||
|
||||
private fun loadSymbolProto(index: Int): KotlinIr.IrSymbolData {
|
||||
return symbolProtosCache.getOrPut(index) {
|
||||
loadSymbolProto(moduleDescriptor, index)
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadTypeProto(index: Int): KotlinIr.IrType {
|
||||
return typeProtosCache.getOrPut(index) {
|
||||
loadTypeProto(moduleDescriptor, index)
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadString(index: Int): String {
|
||||
return stringsCache.getOrPut(index) {
|
||||
loadString(moduleDescriptor, index)
|
||||
}
|
||||
}
|
||||
|
||||
override fun deserializeIrSymbol(proto: KotlinIr.IrSymbol): IrSymbol {
|
||||
val symbolData = moduleProto.symbolTable.getSymbols(proto.index)
|
||||
val symbolData = loadSymbolProto(proto.index)
|
||||
return deserializeIrSymbolData(symbolData)
|
||||
}
|
||||
|
||||
override fun deserializeIrType(proto: KotlinIr.IrTypeIndex): IrType {
|
||||
val typeData = moduleProto.typeTable.getTypes(proto.index)
|
||||
val typeData = loadTypeProto(proto.index)
|
||||
return deserializeIrTypeData(typeData)
|
||||
}
|
||||
|
||||
override fun deserializeString(proto: KotlinIr.String): String =
|
||||
moduleProto.stringTable.getStrings(proto.index)
|
||||
loadString(proto.index)
|
||||
|
||||
override fun deserializeLoopHeader(loopIndex: Int, loopBuilder: () -> IrLoopBase) =
|
||||
moduleLoops.getOrPut(loopIndex, loopBuilder)
|
||||
@@ -228,7 +250,7 @@ abstract class KotlinIrLinker(
|
||||
when (deserializationStrategy) {
|
||||
DeserializationStrategy.EXPLICITLY_EXPORTED -> {
|
||||
fileProto.explicitlyExportedToCompilerList.forEach {
|
||||
val symbolProto = moduleProto.symbolTable.getSymbols(it.index)
|
||||
val symbolProto = loadSymbolProto(it.index)
|
||||
reachableTopLevels.add(symbolProto.topLevelUniqId.uniqIdKey(moduleDescriptor))
|
||||
}
|
||||
}
|
||||
@@ -293,12 +315,29 @@ abstract class KotlinIrLinker(
|
||||
}
|
||||
|
||||
protected abstract fun reader(moduleDescriptor: ModuleDescriptor, uniqId: UniqId): ByteArray
|
||||
protected abstract fun readSymbol(moduleDescriptor: ModuleDescriptor, symbolIndex: Int): ByteArray
|
||||
protected abstract fun readType(moduleDescriptor: ModuleDescriptor, typeIndex: Int): ByteArray
|
||||
protected abstract fun readString(moduleDescriptor: ModuleDescriptor, stringIndex: Int): ByteArray
|
||||
|
||||
private fun loadTopLevelDeclarationProto(uniqIdKey: UniqIdKey): KotlinIr.IrDeclaration {
|
||||
val stream = reader(uniqIdKey.moduleOfOrigin!!, uniqIdKey.uniqId).codedInputStream
|
||||
return KotlinIr.IrDeclaration.parseFrom(stream, newInstance())
|
||||
}
|
||||
|
||||
private fun loadSymbolProto(moduleDescriptor: ModuleDescriptor, index: Int): KotlinIr.IrSymbolData {
|
||||
val stream = readSymbol(moduleDescriptor, index).codedInputStream
|
||||
return KotlinIr.IrSymbolData.parseFrom(stream, newInstance())
|
||||
}
|
||||
|
||||
private fun loadTypeProto(moduleDescriptor: ModuleDescriptor, index: Int): KotlinIr.IrType {
|
||||
val stream = readType(moduleDescriptor, index).codedInputStream
|
||||
return KotlinIr.IrType.parseFrom(stream, newInstance())
|
||||
}
|
||||
|
||||
private fun loadString(moduleDescriptor: ModuleDescriptor, index: Int): String {
|
||||
return String(readString(moduleDescriptor, index))
|
||||
}
|
||||
|
||||
private fun deserializeFileAnnotationsIfFirstUse(module: ModuleDescriptor, file: IrFile) {
|
||||
val annotations = fileAnnotations[file] ?: return
|
||||
file.annotations.addAll(deserializersForModules[module]!!.deserializeAnnotations(annotations))
|
||||
|
||||
Reference in New Issue
Block a user