IR: compute file local signatures from descriptors

This commit is contained in:
Georgy Bronnikov
2021-11-16 17:43:49 +03:00
committed by TeamCityServer
parent b6ddd758ec
commit 4d2bcf7e66
8 changed files with 80 additions and 19 deletions
@@ -16,9 +16,10 @@ import org.jetbrains.kotlin.backend.common.serialization.proto.FileSignature as
import org.jetbrains.kotlin.backend.common.serialization.proto.IdSignature as ProtoIdSignature
import org.jetbrains.kotlin.backend.common.serialization.proto.LocalSignature as ProtoLocalSignature
class IdSignatureDeserializer(private val libraryFile: IrLibraryFile, fileSymbol: IrFileSymbol?) {
private val fileSignature: FileSignature? = fileSymbol?.let { FileSignature(it) }
class IdSignatureDeserializer(
private val libraryFile: IrLibraryFile,
private val fileSignature: FileSignature?
) {
private fun loadSignatureProto(index: Int): ProtoIdSignature {
return libraryFile.signature(index)
@@ -26,6 +26,7 @@ class IrSymbolDeserializer(
val enqueueLocalTopLevelDeclaration: (IdSignature) -> Unit,
val handleExpectActualMapping: (IdSignature, IrSymbol) -> IrSymbol,
val symbolProcessor: IrSymbolDeserializer.(IrSymbol, IdSignature) -> IrSymbol = { s, _ -> s },
private val fileSignature: IdSignature.FileSignature = IdSignature.FileSignature(fileSymbol),
val deserializePublicSymbol: (IdSignature, BinarySymbolData.SymbolKind) -> IrSymbol
) {
@@ -84,7 +85,7 @@ class IrSymbolDeserializer(
}
}
val signatureDeserializer = IdSignatureDeserializer(libraryFile, fileSymbol)
val signatureDeserializer = IdSignatureDeserializer(libraryFile, fileSignature)
fun deserializeIdSignature(index: Int): IdSignature {
return signatureDeserializer.deserializeIdSignature(index)
@@ -17,15 +17,14 @@ import org.jetbrains.kotlin.renderer.DescriptorRenderer
open class IdSignatureDescriptor(private val mangler: KotlinMangler.DescriptorMangler) : IdSignatureComposer {
protected open fun createSignatureBuilder(type: SpecialDeclarationType): DescriptorBasedSignatureBuilder = DescriptorBasedSignatureBuilder(mangler, type)
protected open fun createSignatureBuilder(type: SpecialDeclarationType): DescriptorBasedSignatureBuilder = DescriptorBasedSignatureBuilder(type)
protected open inner class DescriptorBasedSignatureBuilder(private val mangler: KotlinMangler.DescriptorMangler, private val type: SpecialDeclarationType) :
protected open inner class DescriptorBasedSignatureBuilder(private val type: SpecialDeclarationType) :
IdSignatureBuilder<DeclarationDescriptor>(),
DeclarationDescriptorVisitor<Unit, Nothing?> {
override fun accept(d: DeclarationDescriptor) {
d.accept(this, null)
assert(!isTopLevelPrivate) { "$d is Top level private" }
}
private fun createContainer() {
@@ -195,4 +194,8 @@ open class IdSignatureDescriptor(private val mangler: KotlinMangler.DescriptorMa
createSignatureBuilder(SpecialDeclarationType.ANON_INIT).buildSignature(descriptor)
else null
}
override fun withFileSignature(fileSignature: IdSignature.FileSignature, body: () -> Unit) {
body()
}
}