[Native] Move INVALID_INDEX into KonanPartialModuleDeserializer

This commit is contained in:
Ivan Kylchik
2023-08-15 12:52:47 +02:00
committed by Space Team
parent 79fa0d2648
commit cc906ad6d5
2 changed files with 16 additions and 13 deletions
@@ -454,7 +454,6 @@ internal class KonanIrLinker(
) : KotlinIrLinker(currentModule, messageLogger, builtIns, symbolTable, exportedDependencies) { ) : KotlinIrLinker(currentModule, messageLogger, builtIns, symbolTable, exportedDependencies) {
companion object { companion object {
const val INVALID_INDEX = -1
val FORWARD_DECLARATION_ORIGIN = object : IrDeclarationOriginImpl("FORWARD_DECLARATION_ORIGIN") {} val FORWARD_DECLARATION_ORIGIN = object : IrDeclarationOriginImpl("FORWARD_DECLARATION_ORIGIN") {}
} }
@@ -52,6 +52,10 @@ internal class KonanPartialModuleDeserializer(
else DeserializationStrategy.ON_DEMAND else DeserializationStrategy.ON_DEMAND
}, klib.versions.abiVersion ?: KotlinAbiVersion.CURRENT, containsErrorCode }, klib.versions.abiVersion ?: KotlinAbiVersion.CURRENT, containsErrorCode
) { ) {
companion object {
private const val INVALID_INDEX = -1
}
private val descriptorSignatures = mutableMapOf<DeclarationDescriptor, IdSignature>() private val descriptorSignatures = mutableMapOf<DeclarationDescriptor, IdSignature>()
val files by lazy { fileDeserializationStates.map { it.file } } val files by lazy { fileDeserializationStates.map { it.file } }
@@ -150,15 +154,15 @@ internal class KonanPartialModuleDeserializer(
val defaultValues = mutableListOf<Int>() val defaultValues = mutableListOf<Int>()
val valueParameterSigs = (0 until protoFunction.base.valueParameterCount).map { val valueParameterSigs = (0 until protoFunction.base.valueParameterCount).map {
val valueParameter = protoFunction.base.getValueParameter(it) val valueParameter = protoFunction.base.getValueParameter(it)
defaultValues.add(if (valueParameter.hasDefaultValue()) valueParameter.defaultValue else KonanIrLinker.INVALID_INDEX) defaultValues.add(if (valueParameter.hasDefaultValue()) valueParameter.defaultValue else INVALID_INDEX)
BinarySymbolData.decode(valueParameter.base.symbol).signatureId BinarySymbolData.decode(valueParameter.base.symbol).signatureId
} }
val extensionReceiverSig = irFunction.extensionReceiverParameter?.let { val extensionReceiverSig = irFunction.extensionReceiverParameter?.let {
BinarySymbolData.decode(protoFunction.base.extensionReceiver.base.symbol).signatureId BinarySymbolData.decode(protoFunction.base.extensionReceiver.base.symbol).signatureId
} ?: KonanIrLinker.INVALID_INDEX } ?: INVALID_INDEX
val dispatchReceiverSig = irFunction.dispatchReceiverParameter?.let { val dispatchReceiverSig = irFunction.dispatchReceiverParameter?.let {
BinarySymbolData.decode(protoFunction.base.dispatchReceiver.base.symbol).signatureId BinarySymbolData.decode(protoFunction.base.dispatchReceiver.base.symbol).signatureId
} ?: KonanIrLinker.INVALID_INDEX } ?: INVALID_INDEX
return SerializedInlineFunctionReference( return SerializedInlineFunctionReference(
SerializedFileReference(fileDeserializationState.file), SerializedFileReference(fileDeserializationState.file),
@@ -238,8 +242,8 @@ internal class KonanPartialModuleDeserializer(
val nameAndType = BinaryNameAndType.decode(outerProtoClass.thisReceiver.nameType) val nameAndType = BinaryNameAndType.decode(outerProtoClass.thisReceiver.nameType)
SerializedClassFieldInfo( SerializedClassFieldInfo(
name = KonanIrLinker.INVALID_INDEX, name = INVALID_INDEX,
binaryType = KonanIrLinker.INVALID_INDEX, binaryType = INVALID_INDEX,
nameAndType.typeIndex, nameAndType.typeIndex,
flags = 0, flags = 0,
field.alignment field.alignment
@@ -256,9 +260,9 @@ internal class KonanPartialModuleDeserializer(
SerializedClassFieldInfo( SerializedClassFieldInfo(
nameAndType.nameIndex, nameAndType.nameIndex,
primitiveBinaryType?.ordinal ?: KonanIrLinker.INVALID_INDEX, primitiveBinaryType?.ordinal ?: INVALID_INDEX,
if (with(KonanManglerIr) { (classifier as? IrClassSymbol)?.owner?.isExported(compatibleMode) } == false) if (with(KonanManglerIr) { (classifier as? IrClassSymbol)?.owner?.isExported(compatibleMode) } == false)
KonanIrLinker.INVALID_INDEX INVALID_INDEX
else nameAndType.typeIndex, else nameAndType.typeIndex,
flags, flags,
field.alignment field.alignment
@@ -378,12 +382,12 @@ internal class KonanPartialModuleDeserializer(
} }
function.extensionReceiverParameter?.let { parameter -> function.extensionReceiverParameter?.let { parameter ->
val sigIndex = inlineFunctionReference.extensionReceiverSig val sigIndex = inlineFunctionReference.extensionReceiverSig
require(sigIndex != KonanIrLinker.INVALID_INDEX) { "Expected a valid sig reference to the extension receiver for ${function.render()}" } require(sigIndex != INVALID_INDEX) { "Expected a valid sig reference to the extension receiver for ${function.render()}" }
referenceIrSymbol(symbolDeserializer, sigIndex, parameter.symbol) referenceIrSymbol(symbolDeserializer, sigIndex, parameter.symbol)
} }
function.dispatchReceiverParameter?.let { parameter -> function.dispatchReceiverParameter?.let { parameter ->
val sigIndex = inlineFunctionReference.dispatchReceiverSig val sigIndex = inlineFunctionReference.dispatchReceiverSig
require(sigIndex != KonanIrLinker.INVALID_INDEX) { "Expected a valid sig reference to the dispatch receiver for ${function.render()}" } require(sigIndex != INVALID_INDEX) { "Expected a valid sig reference to the dispatch receiver for ${function.render()}" }
referenceIrSymbol(symbolDeserializer, sigIndex, parameter.symbol) referenceIrSymbol(symbolDeserializer, sigIndex, parameter.symbol)
} }
for (index in 0 until outerClasses.size - 1) { for (index in 0 until outerClasses.size - 1) {
@@ -397,7 +401,7 @@ internal class KonanPartialModuleDeserializer(
body = (deserializeStatementBody(inlineFunctionReference.body) as IrBody) body = (deserializeStatementBody(inlineFunctionReference.body) as IrBody)
valueParameters.forEachIndexed { index, parameter -> valueParameters.forEachIndexed { index, parameter ->
val defaultValueIndex = inlineFunctionReference.defaultValues[index] val defaultValueIndex = inlineFunctionReference.defaultValues[index]
if (defaultValueIndex != KonanIrLinker.INVALID_INDEX) if (defaultValueIndex != INVALID_INDEX)
parameter.defaultValue = deserializeExpressionBody(defaultValueIndex) parameter.defaultValue = deserializeExpressionBody(defaultValueIndex)
} }
} }
@@ -477,8 +481,8 @@ internal class KonanPartialModuleDeserializer(
} else { } else {
val name = fileDeserializationState.fileReader.string(field.name) val name = fileDeserializationState.fileReader.string(field.name)
val type = when { val type = when {
field.type != KonanIrLinker.INVALID_INDEX -> declarationDeserializer.deserializeIrType(field.type) field.type != INVALID_INDEX -> declarationDeserializer.deserializeIrType(field.type)
field.binaryType == KonanIrLinker.INVALID_INDEX -> builtIns.anyNType field.binaryType == INVALID_INDEX -> builtIns.anyNType
else -> when (PrimitiveBinaryType.values().getOrNull(field.binaryType)) { else -> when (PrimitiveBinaryType.values().getOrNull(field.binaryType)) {
PrimitiveBinaryType.BOOLEAN -> builtIns.booleanType PrimitiveBinaryType.BOOLEAN -> builtIns.booleanType
PrimitiveBinaryType.BYTE -> builtIns.byteType PrimitiveBinaryType.BYTE -> builtIns.byteType