diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DeclarationTable.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DeclarationTable.kt index 0681c6f8fbf..20dbd575210 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DeclarationTable.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DeclarationTable.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.ir.declarations.IrSymbolOwner import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.KotlinMangler +import org.jetbrains.kotlin.ir.util.render interface IdSignatureClashTracker { @@ -28,7 +29,7 @@ abstract class GlobalDeclarationTable( private val mangler: KotlinMangler.IrMangler, private val clashTracker: IdSignatureClashTracker ) { - private val table = mutableMapOf() + protected val table = mutableMapOf() constructor(signaturer: IdSignatureSerializer, mangler: KotlinMangler.IrMangler) : this(signaturer, mangler, IdSignatureClashTracker.DEFAULT_TRACKER) @@ -49,9 +50,11 @@ abstract class GlobalDeclarationTable( fun isExportedDeclaration(declaration: IrDeclaration): Boolean = with(mangler) { declaration.isExported() } } -open class DeclarationTable(private val globalDeclarationTable: GlobalDeclarationTable) { - private val table = mutableMapOf() - private val signaturer = globalDeclarationTable.signaturer.also { +open class DeclarationTable(globalTable: GlobalDeclarationTable) { + protected val table = mutableMapOf() + protected open val globalDeclarationTable: GlobalDeclarationTable = globalTable + // TODO: we need to disentangle signature construction with declaration tables. + private val signaturer: IdSignatureSerializer = globalTable.signaturer.also { it.reset() it.table = this } @@ -79,6 +82,11 @@ open class DeclarationTable(private val globalDeclarationTable: GlobalDeclaratio fun signatureByDeclaration(declaration: IrDeclaration): IdSignature { return computeSignatureByDeclaration(declaration) } + + fun assumeDeclarationSignature(declaration: IrDeclaration, signature: IdSignature) { + assert(table[declaration] == null) { "Declaration table already has signature for ${declaration.render()}" } + table.put(declaration, signature) + } } // This is what we pre-populate tables with