[KLIB] Fix ir serializer output format
This commit is contained in:
+11
-11
@@ -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()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String>
|
||||
)
|
||||
|
||||
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 = "<SKIPPED>"
|
||||
}
|
||||
|
||||
class SerializedIrFile(
|
||||
val fileData: ByteArray,
|
||||
// val fileProto: ProtoFile,
|
||||
val fqName: List<String>,
|
||||
val fqName: String,
|
||||
val path: String,
|
||||
// val symbols: List<SerializedIrSymbol>,
|
||||
val symbols: List<ByteArray>,
|
||||
val types: List<ByteArray>,
|
||||
val strings: List<ByteArray>,
|
||||
val bodies: List<ByteArray>,
|
||||
val declarations: List<SerializedDeclaration>
|
||||
val symbols: ByteArray,
|
||||
val types: ByteArray,
|
||||
val strings: ByteArray,
|
||||
val bodies: ByteArray,
|
||||
val declarations: ByteArray
|
||||
)
|
||||
|
||||
class SerializedIrModule(val files: Collection<SerializedIrFile>)
|
||||
@@ -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<Pair<Long, ByteArray>>) : 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 = "<SKIPPED>"
|
||||
|
||||
|
||||
}
|
||||
|
||||
class IrDeclarationWriter(private val declarations: List<SerializedDeclaration>) : IrFileWriter() {
|
||||
|
||||
private val SINGLE_INDEX_RECORD_SIZE = 20 // sizeof(Long) + 3 * sizeof(Int).
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user