[K/N] Reformat
This commit is contained in:
+70
-70
@@ -36,17 +36,17 @@ import org.jetbrains.kotlin.backend.common.serialization.proto.IrField as ProtoF
|
|||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
internal class KonanPartialModuleDeserializer(
|
internal class KonanPartialModuleDeserializer(
|
||||||
konanIrLinker: KonanIrLinker,
|
konanIrLinker: KonanIrLinker,
|
||||||
moduleDescriptor: ModuleDescriptor,
|
moduleDescriptor: ModuleDescriptor,
|
||||||
override val klib: KotlinLibrary,
|
override val klib: KotlinLibrary,
|
||||||
private val stubGenerator: DeclarationStubGenerator,
|
private val stubGenerator: DeclarationStubGenerator,
|
||||||
private val cachedLibraries: CachedLibraries,
|
private val cachedLibraries: CachedLibraries,
|
||||||
private val inlineFunctionFiles: MutableMap<IrExternalPackageFragment, IrFile>,
|
private val inlineFunctionFiles: MutableMap<IrExternalPackageFragment, IrFile>,
|
||||||
strategyResolver: (String) -> DeserializationStrategy,
|
strategyResolver: (String) -> DeserializationStrategy,
|
||||||
private val cacheDeserializationStrategy: CacheDeserializationStrategy,
|
private val cacheDeserializationStrategy: CacheDeserializationStrategy,
|
||||||
containsErrorCode: Boolean = false
|
containsErrorCode: Boolean = false
|
||||||
) : BasicIrModuleDeserializer(konanIrLinker, moduleDescriptor, klib,
|
) : BasicIrModuleDeserializer(konanIrLinker, moduleDescriptor, klib,
|
||||||
{ fileName ->
|
{ fileName ->
|
||||||
if (cacheDeserializationStrategy.contains(fileName))
|
if (cacheDeserializationStrategy.contains(fileName))
|
||||||
strategyResolver(fileName)
|
strategyResolver(fileName)
|
||||||
else DeserializationStrategy.ON_DEMAND
|
else DeserializationStrategy.ON_DEMAND
|
||||||
@@ -165,10 +165,10 @@ internal class KonanPartialModuleDeserializer(
|
|||||||
} ?: INVALID_INDEX
|
} ?: INVALID_INDEX
|
||||||
|
|
||||||
return SerializedInlineFunctionReference(
|
return SerializedInlineFunctionReference(
|
||||||
SerializedFileReference(fileDeserializationState.file),
|
SerializedFileReference(fileDeserializationState.file),
|
||||||
functionSignature, protoFunction.base.body, irFunction.startOffset, irFunction.endOffset,
|
functionSignature, protoFunction.base.body, irFunction.startOffset, irFunction.endOffset,
|
||||||
extensionReceiverSig, dispatchReceiverSig, outerReceiverSigs.toIntArray(),
|
extensionReceiverSig, dispatchReceiverSig, outerReceiverSigs.toIntArray(),
|
||||||
valueParameterSigs.toIntArray(), typeParameterSigs.toIntArray(), defaultValues.toIntArray()
|
valueParameterSigs.toIntArray(), typeParameterSigs.toIntArray(), defaultValues.toIntArray()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,55 +228,55 @@ internal class KonanPartialModuleDeserializer(
|
|||||||
val outerThisIndex = fields.indexOfFirst { it.irField?.origin == IrDeclarationOrigin.FIELD_FOR_OUTER_THIS }
|
val outerThisIndex = fields.indexOfFirst { it.irField?.origin == IrDeclarationOrigin.FIELD_FOR_OUTER_THIS }
|
||||||
val compatibleMode = CompatibilityMode(libraryAbiVersion).oldSignatures
|
val compatibleMode = CompatibilityMode(libraryAbiVersion).oldSignatures
|
||||||
return SerializedClassFields(
|
return SerializedClassFields(
|
||||||
SerializedFileReference(fileDeserializationState.file),
|
SerializedFileReference(fileDeserializationState.file),
|
||||||
signature,
|
signature,
|
||||||
typeParameterSigs.toIntArray(),
|
typeParameterSigs.toIntArray(),
|
||||||
outerThisIndex,
|
outerThisIndex,
|
||||||
Array(fields.size) {
|
Array(fields.size) {
|
||||||
val field = fields[it]
|
val field = fields[it]
|
||||||
val irField = field.irField ?: error("No IR for field ${field.name} of ${irClass.render()}")
|
val irField = field.irField ?: error("No IR for field ${field.name} of ${irClass.render()}")
|
||||||
if (it == outerThisIndex) {
|
if (it == outerThisIndex) {
|
||||||
require(irClass.isInner) { "Expected an inner class: ${irClass.render()}" }
|
require(irClass.isInner) { "Expected an inner class: ${irClass.render()}" }
|
||||||
require(protoClasses.size > 1) { "An inner class must have at least one outer class" }
|
require(protoClasses.size > 1) { "An inner class must have at least one outer class" }
|
||||||
val outerProtoClass = protoClasses[protoClasses.size - 2]
|
val outerProtoClass = protoClasses[protoClasses.size - 2]
|
||||||
val nameAndType = BinaryNameAndType.decode(outerProtoClass.thisReceiver.nameType)
|
val nameAndType = BinaryNameAndType.decode(outerProtoClass.thisReceiver.nameType)
|
||||||
|
|
||||||
SerializedClassFieldInfo(
|
SerializedClassFieldInfo(
|
||||||
name = INVALID_INDEX,
|
name = INVALID_INDEX,
|
||||||
binaryType = INVALID_INDEX,
|
binaryType = INVALID_INDEX,
|
||||||
nameAndType.typeIndex,
|
nameAndType.typeIndex,
|
||||||
flags = 0,
|
flags = 0,
|
||||||
field.alignment
|
field.alignment
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
val protoField = protoFieldsMap[field.name] ?: error("No proto for ${irField.render()}")
|
val protoField = protoFieldsMap[field.name] ?: error("No proto for ${irField.render()}")
|
||||||
val nameAndType = BinaryNameAndType.decode(protoField.nameType)
|
val nameAndType = BinaryNameAndType.decode(protoField.nameType)
|
||||||
var flags = 0
|
var flags = 0
|
||||||
if (field.isConst)
|
if (field.isConst)
|
||||||
flags = flags or SerializedClassFieldInfo.FLAG_IS_CONST
|
flags = flags or SerializedClassFieldInfo.FLAG_IS_CONST
|
||||||
val classifier = irField.type.classifierOrNull
|
val classifier = irField.type.classifierOrNull
|
||||||
?: error("Fields of type ${irField.type.render()} are not supported")
|
?: error("Fields of type ${irField.type.render()} are not supported")
|
||||||
val primitiveBinaryType = irField.type.computePrimitiveBinaryTypeOrNull()
|
val primitiveBinaryType = irField.type.computePrimitiveBinaryTypeOrNull()
|
||||||
|
|
||||||
SerializedClassFieldInfo(
|
SerializedClassFieldInfo(
|
||||||
nameAndType.nameIndex,
|
nameAndType.nameIndex,
|
||||||
primitiveBinaryType?.ordinal ?: 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)
|
||||||
INVALID_INDEX
|
INVALID_INDEX
|
||||||
else nameAndType.typeIndex,
|
else nameAndType.typeIndex,
|
||||||
flags,
|
flags,
|
||||||
field.alignment
|
field.alignment
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildEagerInitializedFile(irFile: IrFile) =
|
fun buildEagerInitializedFile(irFile: IrFile) =
|
||||||
SerializedEagerInitializedFile(SerializedFileReference(irFile))
|
SerializedEagerInitializedFile(SerializedFileReference(irFile))
|
||||||
|
|
||||||
private val descriptorByIdSignatureFinder = DescriptorByIdSignatureFinderImpl(
|
private val descriptorByIdSignatureFinder = DescriptorByIdSignatureFinderImpl(
|
||||||
moduleDescriptor, KonanManglerDesc,
|
moduleDescriptor, KonanManglerDesc,
|
||||||
DescriptorByIdSignatureFinderImpl.LookupMode.MODULE_ONLY
|
DescriptorByIdSignatureFinderImpl.LookupMode.MODULE_ONLY
|
||||||
)
|
)
|
||||||
|
|
||||||
private val deserializedSymbols = mutableMapOf<IdSignature, IrSymbol>()
|
private val deserializedSymbols = mutableMapOf<IdSignature, IrSymbol>()
|
||||||
@@ -334,11 +334,11 @@ internal class KonanPartialModuleDeserializer(
|
|||||||
if (function.parents.any { (it as? IrFunction)?.isInline == true }) {
|
if (function.parents.any { (it as? IrFunction)?.isInline == true }) {
|
||||||
// Already deserialized by the top-most inline function.
|
// Already deserialized by the top-most inline function.
|
||||||
return InlineFunctionOriginInfo(
|
return InlineFunctionOriginInfo(
|
||||||
function,
|
function,
|
||||||
packageFragment as? IrFile
|
packageFragment as? IrFile
|
||||||
?: inlineFunctionFiles[packageFragment as IrExternalPackageFragment]
|
?: inlineFunctionFiles[packageFragment as IrExternalPackageFragment]
|
||||||
?: error("${function.render()} should've been deserialized along with its parent"),
|
?: error("${function.render()} should've been deserialized along with its parent"),
|
||||||
function.startOffset, function.endOffset
|
function.startOffset, function.endOffset
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -422,10 +422,10 @@ internal class KonanPartialModuleDeserializer(
|
|||||||
)
|
)
|
||||||
|
|
||||||
return InlineFunctionOriginInfo(
|
return InlineFunctionOriginInfo(
|
||||||
function,
|
function,
|
||||||
fileDeserializationState.file,
|
fileDeserializationState.file,
|
||||||
inlineFunctionReference.startOffset,
|
inlineFunctionReference.startOffset,
|
||||||
inlineFunctionReference.endOffset
|
inlineFunctionReference.endOffset
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -476,7 +476,7 @@ internal class KonanPartialModuleDeserializer(
|
|||||||
require(irClass.isInner) { "Expected an inner class: ${irClass.render()}" }
|
require(irClass.isInner) { "Expected an inner class: ${irClass.render()}" }
|
||||||
require(outerThisFieldInfo != null) { "For an inner class ${irClass.render()} there should be <outer this> field" }
|
require(outerThisFieldInfo != null) { "For an inner class ${irClass.render()} there should be <outer this> field" }
|
||||||
outerThisFieldInfo.also {
|
outerThisFieldInfo.also {
|
||||||
require(it.alignment == field.alignment) { "Mismatched align information for outer this"}
|
require(it.alignment == field.alignment) { "Mismatched align information for outer this" }
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val name = fileDeserializationState.fileReader.string(field.name)
|
val name = fileDeserializationState.fileReader.string(field.name)
|
||||||
@@ -497,10 +497,10 @@ internal class KonanPartialModuleDeserializer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ClassLayoutBuilder.FieldInfo(
|
ClassLayoutBuilder.FieldInfo(
|
||||||
name, type,
|
name, type,
|
||||||
isConst = (field.flags and SerializedClassFieldInfo.FLAG_IS_CONST) != 0,
|
isConst = (field.flags and SerializedClassFieldInfo.FLAG_IS_CONST) != 0,
|
||||||
irFieldSymbol = IrFieldSymbolImpl(),
|
irFieldSymbol = IrFieldSymbolImpl(),
|
||||||
alignment = field.alignment,
|
alignment = field.alignment,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user