diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/IrFileReaders.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/IrFileReaders.kt index ec478c16a95..50b71be669c 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/IrFileReaders.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/IrFileReaders.kt @@ -36,6 +36,36 @@ abstract class IrArrayReader(private val buffer: ReadBuffer) { class IrArrayFileReader(file: File) : IrArrayReader(ReadBuffer.WeakFileBuffer(file.javaFile())) class IrArrayMemoryReader(bytes: ByteArray) : IrArrayReader(ReadBuffer.MemoryBuffer(bytes)) +class IrIntArrayMemoryReader(bytes: ByteArray) { + + val array = run { + val buffer = ReadBuffer.MemoryBuffer(bytes) + + val result = IntArray(buffer.int) + + for (i in result.indices) { + result[i] = buffer.int + } + + result + } +} + +class IrLongArrayMemoryReader(bytes: ByteArray) { + + val array = run { + val buffer = ReadBuffer.MemoryBuffer(bytes) + + val result = LongArray(buffer.int) + + for (i in result.indices) { + result[i] = buffer.long + } + + result + } +} + abstract class IrMultiArrayReader(private val buffer: ReadBuffer) { private val indexToOffset: IntArray private val indexIndexToOffset = mutableMapOf() @@ -188,3 +218,6 @@ class DeclarationIrMultiTableFileReader(file: File) : class DeclarationIrMultiTableMemoryReader(bytes: ByteArray) : IrMultiTableReader(ReadBuffer.MemoryBuffer(bytes), { DeclarationId(int) }) + + +fun IrArrayReader.toArray(): Array = Array(this.entryCount()) { i -> this.tableItemBytes(i) } \ No newline at end of file diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/IrFileWriters.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/IrFileWriters.kt index 66f27dceb4e..27d110b3253 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/IrFileWriters.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/IrFileWriters.kt @@ -74,6 +74,22 @@ class IrMemoryStringWriter(private val data: List) : IrMemoryWriter() { } } +class IrMemoryIntArrayWriter(private val data: List) : IrMemoryWriter() { + override fun writeData(dataOutput: DataOutput) { + dataOutput.writeInt(data.size) + + data.forEach { dataOutput.writeInt(it) } + } +} + +class IrMemoryLongArrayWriter(private val data: List) : IrMemoryWriter() { + override fun writeData(dataOutput: DataOutput) { + dataOutput.writeInt(data.size) + + data.forEach { dataOutput.writeLong(it) } + } +} + class IrByteArrayWriter(private val data: List) : IrFileWriter() { override fun writeData(dataOutput: DataOutput) { dataOutput.writeInt(data.size)