IR: compute file local signatures from descriptors
This commit is contained in:
committed by
TeamCityServer
parent
b6ddd758ec
commit
4d2bcf7e66
+4
-3
@@ -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)
|
||||
|
||||
+2
-1
@@ -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)
|
||||
|
||||
+6
-3
@@ -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()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user