From 6bea4033389baaebc5fa3378704cc953d7bcc270 Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Fri, 23 Aug 2019 14:31:47 +0300 Subject: [PATCH] [KLIB] Fix ir serializer output format --- .../common/serialization/IrFileSerializer.kt | 22 +++++------ .../kotlin/library/KotlinLibraryWriter.kt | 37 ++++++++++++++----- .../kotlin/library/impl/IrFileWriters.kt | 25 +------------ .../kotlin/library/impl/IrWriterImpl.kt | 24 ++++++------ 4 files changed, 52 insertions(+), 56 deletions(-) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt index 498011bacb0..65e6ff14c11 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt @@ -5,11 +5,9 @@ package org.jetbrains.kotlin.backend.common.serialization -//import org.jetbrains.kotlin.library.SerializedIrFile import org.jetbrains.kotlin.backend.common.LoggingContext import org.jetbrains.kotlin.backend.common.ir.ir2string import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.builtins.FunctionInterfacePackageFragment import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind.* import org.jetbrains.kotlin.ir.IrElement @@ -23,10 +21,12 @@ import org.jetbrains.kotlin.ir.util.lineStartOffsets import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid +import org.jetbrains.kotlin.library.SerializedDeclaration import org.jetbrains.kotlin.library.SerializedIrFile -import org.jetbrains.kotlin.library.impl.SerializedDeclaration -import org.jetbrains.kotlin.library.impl.SkippedDeclaration -import org.jetbrains.kotlin.library.impl.TopLevelDeclaration +import org.jetbrains.kotlin.library.SkippedDeclaration +import org.jetbrains.kotlin.library.TopLevelDeclaration +import org.jetbrains.kotlin.library.impl.IrMemoryArrayWriter +import org.jetbrains.kotlin.library.impl.IrMemoryDeclarationWriter import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.Variance @@ -1352,13 +1352,13 @@ open class IrFileSerializer( return SerializedIrFile( proto.build().toByteArray(), - file.fqName.pathSegments().map { it.identifier }, + file.fqName.asString(), file.path, - protoSymbolArray.map { it.toByteArray() }, - protoTypeArray.map { it.toByteArray() }, - protoStringArray.map { it.toByteArray() }, - protoBodyArray.map { it.toByteArray() }, - topLevelDeclarations + IrMemoryArrayWriter(protoSymbolArray.map { it.toByteArray() }).writeIntoMemory(), + IrMemoryArrayWriter(protoTypeArray.map { it.toByteArray() }).writeIntoMemory(), + IrMemoryArrayWriter(protoStringArray.map { it.toByteArray() }).writeIntoMemory(), + IrMemoryArrayWriter(protoBodyArray.map { it.toByteArray() }).writeIntoMemory(), + IrMemoryDeclarationWriter(topLevelDeclarations).writeIntoMemory() ) } } diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryWriter.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryWriter.kt index 8f734805a6b..8ed05e8e04f 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryWriter.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryWriter.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.library import org.jetbrains.kotlin.konan.properties.Properties -import org.jetbrains.kotlin.library.impl.SerializedDeclaration interface BaseWriter { val versions: KonanLibraryVersioning @@ -33,17 +32,37 @@ class SerializedMetadata( val fragmentNames: List ) +sealed class SerializedDeclaration { + abstract val id: Long + abstract val local: Int + abstract val size: Int + abstract val bytes: ByteArray + + abstract val declarationName: String +} + +class TopLevelDeclaration(override val id: Long, isLocal: Boolean, override val declarationName: String, override val bytes: ByteArray) : SerializedDeclaration() { + override val local = if (isLocal) 1 else 0 + override val size = bytes.size +} + +object SkippedDeclaration : SerializedDeclaration() { + override val id = -1L + override val local = -1 + override val size = 0 + override val bytes = ByteArray(0) + override val declarationName: String = "" +} + class SerializedIrFile( val fileData: ByteArray, -// val fileProto: ProtoFile, - val fqName: List, + val fqName: String, val path: String, -// val symbols: List, - val symbols: List, - val types: List, - val strings: List, - val bodies: List, - val declarations: List + val symbols: ByteArray, + val types: ByteArray, + val strings: ByteArray, + val bodies: ByteArray, + val declarations: ByteArray ) class SerializedIrModule(val files: Collection) \ 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 5490d5c864a..75818bf65fb 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 @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.library.impl +import org.jetbrains.kotlin.library.SerializedDeclaration import java.io.ByteArrayOutputStream import java.io.DataOutput import java.io.DataOutputStream @@ -88,30 +89,6 @@ class IrTableWriter(private val data: List>) : IrFileWrite } } -sealed class SerializedDeclaration { - abstract val id: Long - abstract val local: Int - abstract val size: Int - abstract val bytes: ByteArray - - abstract val declarationName: String -} - -class TopLevelDeclaration(override val id: Long, isLocal: Boolean, override val declarationName: String, override val bytes: ByteArray) : SerializedDeclaration() { - override val local = if (isLocal) 1 else 0 - override val size = bytes.size -} - -object SkippedDeclaration : SerializedDeclaration() { - override val id = -1L - override val local = -1 - override val size = 0 - override val bytes = ByteArray(0) - override val declarationName: String = "" - - -} - class IrDeclarationWriter(private val declarations: List) : IrFileWriter() { private val SINGLE_INDEX_RECORD_SIZE = 20 // sizeof(Long) + 3 * sizeof(Int). diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/IrWriterImpl.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/IrWriterImpl.kt index 28ea5a34d48..3a2c760613e 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/IrWriterImpl.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/IrWriterImpl.kt @@ -22,11 +22,11 @@ class IrMonoliticWriterImpl(irLayout: IrKotlinLibraryLayout) : IrWriterImpl(irLa override fun addIr(ir: SerializedIrModule) { with(ir.files.sortedBy { it.path }) { IrArrayWriter(map { it.fileData }).writeIntoFile(irLayout.irFiles.absolutePath) - IrArrayWriter(map { IrMemoryDeclarationWriter(it.declarations).writeIntoMemory() }).writeIntoFile(irLayout.irDeclarations.absolutePath) - IrArrayWriter(map { IrMemoryArrayWriter(it.symbols).writeIntoMemory() }).writeIntoFile(irLayout.irSymbols.absolutePath) - IrArrayWriter(map { IrMemoryArrayWriter(it.types).writeIntoMemory() }).writeIntoFile(irLayout.irTypes.absolutePath) - IrArrayWriter(map { IrMemoryArrayWriter(it.strings).writeIntoMemory() }).writeIntoFile(irLayout.irStrings.absolutePath) - IrArrayWriter(map { IrMemoryArrayWriter(it.bodies).writeIntoMemory() }).writeIntoFile(irLayout.irBodies.absolutePath) + IrArrayWriter(map { it.declarations }).writeIntoFile(irLayout.irDeclarations.absolutePath) + IrArrayWriter(map { it.symbols }).writeIntoFile(irLayout.irSymbols.absolutePath) + IrArrayWriter(map { it.types }).writeIntoFile(irLayout.irTypes.absolutePath) + IrArrayWriter(map { it.strings }).writeIntoFile(irLayout.irStrings.absolutePath) + IrArrayWriter(map { it.bodies }).writeIntoFile(irLayout.irBodies.absolutePath) } } } @@ -39,7 +39,7 @@ class IrPerFileWriterImpl(irLayout: IrKotlinLibraryLayout) : IrWriterImpl(irLayo } private fun serializeFile(file: SerializedIrFile) { - val fqnPath = file.fqName.joinToString(separator = ".") + val fqnPath = file.fqName val fileId = file.path.hashCode().toString(Character.MAX_RADIX) val irFileDirectory = "$fqnPath.$fileId.file" val fileDir = irLayout.irDir.child(irFileDirectory) @@ -48,11 +48,11 @@ class IrPerFileWriterImpl(irLayout: IrKotlinLibraryLayout) : IrWriterImpl(irLayo fileDir.mkdirs() irLayout.irFile(fileDir).writeBytes(file.fileData) - IrDeclarationWriter(file.declarations).writeIntoFile(irLayout.irDeclarations(fileDir).absolutePath) - IrArrayWriter(file.symbols).writeIntoFile(irLayout.irSymbols(fileDir).absolutePath) - IrArrayWriter(file.types).writeIntoFile(irLayout.irTypes(fileDir).absolutePath) - IrArrayWriter(file.strings).writeIntoFile(irLayout.irStrings(fileDir).absolutePath) - IrArrayWriter(file.bodies).writeIntoFile(irLayout.irBodies(fileDir).absolutePath) -// fileDir.child("declarations.txt").writeText(file.declarations.joinToString(separator = "\n") { "${it.declarationName} -> (${it.id}, ${it.local})" }) + + irLayout.irDeclarations(fileDir).writeBytes(file.declarations) + irLayout.irSymbols(fileDir).writeBytes(file.symbols) + irLayout.irTypes(fileDir).writeBytes(file.types) + irLayout.irStrings(fileDir).writeBytes(file.strings) + irLayout.irBodies(fileDir).writeBytes(file.bodies) } } \ No newline at end of file