[JS IC] Drop special IdSignatureSerializer for IC
This commit is contained in:
committed by
teamcityserver
parent
4a601ebf95
commit
b1251c1716
+5
-4
@@ -39,8 +39,8 @@ class FakeOverrideGlobalDeclarationTable(
|
|||||||
|
|
||||||
open class FakeOverrideDeclarationTable(
|
open class FakeOverrideDeclarationTable(
|
||||||
mangler: KotlinMangler.IrMangler,
|
mangler: KotlinMangler.IrMangler,
|
||||||
signatureSerializerFactory: (PublicIdSignatureComputer, DeclarationTable) -> IdSignatureSerializer,
|
globalTable: FakeOverrideGlobalDeclarationTable = FakeOverrideGlobalDeclarationTable(mangler),
|
||||||
globalTable: FakeOverrideGlobalDeclarationTable = FakeOverrideGlobalDeclarationTable(mangler)
|
signatureSerializerFactory: (PublicIdSignatureComputer, DeclarationTable) -> IdSignatureSerializer
|
||||||
) : DeclarationTable(globalTable) {
|
) : DeclarationTable(globalTable) {
|
||||||
override val globalDeclarationTable: FakeOverrideGlobalDeclarationTable = globalTable
|
override val globalDeclarationTable: FakeOverrideGlobalDeclarationTable = globalTable
|
||||||
override val signaturer: IdSignatureSerializer = signatureSerializerFactory(globalTable.publicIdSignatureComputer, this)
|
override val signaturer: IdSignatureSerializer = signatureSerializerFactory(globalTable.publicIdSignatureComputer, this)
|
||||||
@@ -69,8 +69,9 @@ class FakeOverrideBuilder(
|
|||||||
mangler: KotlinMangler.IrMangler,
|
mangler: KotlinMangler.IrMangler,
|
||||||
typeSystem: IrTypeSystemContext,
|
typeSystem: IrTypeSystemContext,
|
||||||
val platformSpecificClassFilter: FakeOverrideClassFilter = DefaultFakeOverrideClassFilter,
|
val platformSpecificClassFilter: FakeOverrideClassFilter = DefaultFakeOverrideClassFilter,
|
||||||
val signatureSerializerFactory: (PublicIdSignatureComputer, DeclarationTable) -> IdSignatureSerializer = ::IdSignatureSerializer,
|
private val fakeOverrideDeclarationTable: DeclarationTable = FakeOverrideDeclarationTable(mangler) { builder, table ->
|
||||||
private val fakeOverrideDeclarationTable: DeclarationTable = FakeOverrideDeclarationTable(mangler, signatureSerializerFactory),
|
IdSignatureSerializer(builder, table)
|
||||||
|
}
|
||||||
) : FakeOverrideBuilderStrategy() {
|
) : FakeOverrideBuilderStrategy() {
|
||||||
private val haveFakeOverrides = mutableSetOf<IrClass>()
|
private val haveFakeOverrides = mutableSetOf<IrClass>()
|
||||||
|
|
||||||
|
|||||||
+13
-19
@@ -200,11 +200,14 @@ class PublicIdSignatureComputer(val mangler: KotlinMangler.IrMangler) : IdSignat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class IdSignatureSerializer(
|
class IdSignatureSerializer(
|
||||||
private val publicSignatureBuilder: PublicIdSignatureComputer,
|
private val publicSignatureBuilder: PublicIdSignatureComputer,
|
||||||
private val table: DeclarationTable,
|
private val table: DeclarationTable,
|
||||||
|
startIndex: Int
|
||||||
) : IdSignatureComputer {
|
) : IdSignatureComputer {
|
||||||
|
|
||||||
|
constructor(publicSignatureBuilder: PublicIdSignatureComputer, table: DeclarationTable) : this(publicSignatureBuilder, table, 0)
|
||||||
|
|
||||||
private val mangler: KotlinMangler.IrMangler = publicSignatureBuilder.mangler
|
private val mangler: KotlinMangler.IrMangler = publicSignatureBuilder.mangler
|
||||||
|
|
||||||
override fun computeSignature(declaration: IrDeclaration): IdSignature {
|
override fun computeSignature(declaration: IrDeclaration): IdSignature {
|
||||||
@@ -217,8 +220,8 @@ open class IdSignatureSerializer(
|
|||||||
} else composeFileLocalIdSignature(declaration, compatibleMode)
|
} else composeFileLocalIdSignature(declaration, compatibleMode)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected var localIndex: Long = 0
|
private var localIndex: Long = startIndex.toLong()
|
||||||
protected var scopeIndex: Int = 0
|
private var scopeIndex: Int = startIndex
|
||||||
|
|
||||||
override fun inFile(file: IrFileSymbol?, block: () -> Unit) {
|
override fun inFile(file: IrFileSymbol?, block: () -> Unit) {
|
||||||
publicSignatureBuilder.inFile(file, block)
|
publicSignatureBuilder.inFile(file, block)
|
||||||
@@ -236,19 +239,19 @@ open class IdSignatureSerializer(
|
|||||||
|
|
||||||
return table.privateDeclarationSignature(declaration, compatibleMode) {
|
return table.privateDeclarationSignature(declaration, compatibleMode) {
|
||||||
when (declaration) {
|
when (declaration) {
|
||||||
is IrValueDeclaration -> declaration.createScopeLocalSignature(scopeIndex++, declaration.name.asString())
|
is IrValueDeclaration -> IdSignature.ScopeLocalDeclaration(scopeIndex++, declaration.name.asString())
|
||||||
is IrAnonymousInitializer -> declaration.createScopeLocalSignature(scopeIndex++, "ANON INIT")
|
is IrAnonymousInitializer -> IdSignature.ScopeLocalDeclaration(scopeIndex++, "ANON INIT")
|
||||||
is IrLocalDelegatedProperty -> declaration.createScopeLocalSignature(scopeIndex++, declaration.name.asString())
|
is IrLocalDelegatedProperty -> IdSignature.ScopeLocalDeclaration(scopeIndex++, declaration.name.asString())
|
||||||
is IrField -> {
|
is IrField -> {
|
||||||
val p = declaration.correspondingPropertySymbol?.let { composeSignatureForDeclaration(it.owner, true) }
|
val p = declaration.correspondingPropertySymbol?.let { composeSignatureForDeclaration(it.owner, true) }
|
||||||
?: composeContainerIdSignature(declaration.parent, compatibleMode)
|
?: composeContainerIdSignature(declaration.parent, compatibleMode)
|
||||||
declaration.createFileLocalSignature(p, ++localIndex)
|
IdSignature.FileLocalSignature(p, ++localIndex)
|
||||||
}
|
}
|
||||||
is IrSimpleFunction -> {
|
is IrSimpleFunction -> {
|
||||||
val parent = declaration.parent
|
val parent = declaration.parent
|
||||||
val p = declaration.correspondingPropertySymbol?.let { composeSignatureForDeclaration(it.owner, true) }
|
val p = declaration.correspondingPropertySymbol?.let { composeSignatureForDeclaration(it.owner, true) }
|
||||||
?: composeContainerIdSignature(parent, compatibleMode)
|
?: composeContainerIdSignature(parent, compatibleMode)
|
||||||
declaration.createFileLocalSignature(
|
IdSignature.FileLocalSignature(
|
||||||
p,
|
p,
|
||||||
if (declaration.isOverridableFunction()) {
|
if (declaration.isOverridableFunction()) {
|
||||||
mangler.run { declaration.signatureMangle() }
|
mangler.run { declaration.signatureMangle() }
|
||||||
@@ -260,9 +263,8 @@ open class IdSignatureSerializer(
|
|||||||
}
|
}
|
||||||
is IrProperty -> {
|
is IrProperty -> {
|
||||||
val parent = declaration.parent
|
val parent = declaration.parent
|
||||||
declaration.createFileLocalSignature(
|
IdSignature.FileLocalSignature(
|
||||||
composeContainerIdSignature(parent, compatibleMode),
|
composeContainerIdSignature(parent, compatibleMode),
|
||||||
|
|
||||||
if (declaration.isOverridableProperty()) {
|
if (declaration.isOverridableProperty()) {
|
||||||
mangler.run { declaration.signatureMangle() }
|
mangler.run { declaration.signatureMangle() }
|
||||||
} else {
|
} else {
|
||||||
@@ -272,7 +274,7 @@ open class IdSignatureSerializer(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
declaration.createFileLocalSignature(
|
IdSignature.FileLocalSignature(
|
||||||
composeContainerIdSignature(declaration.parent, compatibleMode),
|
composeContainerIdSignature(declaration.parent, compatibleMode),
|
||||||
++localIndex,
|
++localIndex,
|
||||||
declaration.render()
|
declaration.render()
|
||||||
@@ -281,12 +283,4 @@ open class IdSignatureSerializer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun IrDeclaration.createFileLocalSignature(parentSignature: IdSignature, localIndex: Long, description: String? = null): IdSignature {
|
|
||||||
return IdSignature.FileLocalSignature(parentSignature, localIndex, description)
|
|
||||||
}
|
|
||||||
|
|
||||||
protected open fun IrDeclaration.createScopeLocalSignature(scopeIndex: Int, description: String): IdSignature {
|
|
||||||
return IdSignature.ScopeLocalDeclaration(scopeIndex, description)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-17
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.ir.backend.js.ic
|
|||||||
import org.jetbrains.kotlin.backend.common.serialization.CompatibilityMode
|
import org.jetbrains.kotlin.backend.common.serialization.CompatibilityMode
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable
|
import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSerializer
|
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSerializer
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.signature.PublicIdSignatureComputer
|
|
||||||
import org.jetbrains.kotlin.ir.IrBuiltIns
|
import org.jetbrains.kotlin.ir.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsMapping
|
import org.jetbrains.kotlin.ir.backend.js.JsMapping
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsGlobalDeclarationTable
|
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsGlobalDeclarationTable
|
||||||
@@ -79,7 +78,7 @@ class IcSerializer(
|
|||||||
|
|
||||||
val symbolToSignature = fileDeserializer.symbolDeserializer.deserializedSymbols.entries.associate { (idSig, symbol) -> symbol to idSig }.toMutableMap()
|
val symbolToSignature = fileDeserializer.symbolDeserializer.deserializedSymbols.entries.associate { (idSig, symbol) -> symbol to idSig }.toMutableMap()
|
||||||
|
|
||||||
val icDeclarationTable = IcDeclarationTable(globalDeclarationTable, irFactory, 1000000, 1000000, symbolToSignature)
|
val icDeclarationTable = IcDeclarationTable(globalDeclarationTable, irFactory, 1000000, symbolToSignature)
|
||||||
val fileSerializer = JsIrFileSerializer(
|
val fileSerializer = JsIrFileSerializer(
|
||||||
linker.messageLogger,
|
linker.messageLogger,
|
||||||
icDeclarationTable,
|
icDeclarationTable,
|
||||||
@@ -138,12 +137,12 @@ class IcSerializer(
|
|||||||
class IcDeclarationTable(
|
class IcDeclarationTable(
|
||||||
globalDeclarationTable: JsGlobalDeclarationTable,
|
globalDeclarationTable: JsGlobalDeclarationTable,
|
||||||
val irFactory: PersistentIrFactory,
|
val irFactory: PersistentIrFactory,
|
||||||
newLocalIndex: Long,
|
startIndex: Int,
|
||||||
newScopeIndex: Int,
|
|
||||||
val existingMappings: MutableMap<IrSymbol, IdSignature>
|
val existingMappings: MutableMap<IrSymbol, IdSignature>
|
||||||
) : DeclarationTable(globalDeclarationTable) {
|
) : DeclarationTable(globalDeclarationTable) {
|
||||||
|
|
||||||
override val signaturer: IdSignatureSerializer = IdSignatureSerializerWithForIC(globalDeclarationTable.publicIdSignatureComputer, this, newLocalIndex, newScopeIndex)
|
override val signaturer: IdSignatureSerializer =
|
||||||
|
IdSignatureSerializer(globalDeclarationTable.publicIdSignatureComputer, this, startIndex)
|
||||||
|
|
||||||
override fun signatureByDeclaration(declaration: IrDeclaration, compatibleMode: Boolean): IdSignature {
|
override fun signatureByDeclaration(declaration: IrDeclaration, compatibleMode: Boolean): IdSignature {
|
||||||
return existingMappings.getOrPut(declaration.symbol) {
|
return existingMappings.getOrPut(declaration.symbol) {
|
||||||
@@ -153,18 +152,6 @@ class IcSerializer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class IdSignatureSerializerWithForIC(
|
|
||||||
publicSignatureBuilder: PublicIdSignatureComputer,
|
|
||||||
table: DeclarationTable,
|
|
||||||
localIndexOffset: Long = 0,
|
|
||||||
scopeIndexOffset: Int = 0,
|
|
||||||
) : IdSignatureSerializer(publicSignatureBuilder, table) {
|
|
||||||
init {
|
|
||||||
localIndex = localIndexOffset
|
|
||||||
scopeIndex = scopeIndexOffset
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun storeOrder(file: IrFile, fileDeclarations: Iterable<IrDeclaration>, idSigToLong: (IrSymbol) -> Long): SerializedOrder {
|
fun storeOrder(file: IrFile, fileDeclarations: Iterable<IrDeclaration>, idSigToLong: (IrSymbol) -> Long): SerializedOrder {
|
||||||
val topLevelSignatures = mutableListOf<Long>()
|
val topLevelSignatures = mutableListOf<Long>()
|
||||||
val containerSignatures = mutableListOf<Long>()
|
val containerSignatures = mutableListOf<Long>()
|
||||||
|
|||||||
+1
-10
@@ -7,12 +7,10 @@ package org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder
|
import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.*
|
import org.jetbrains.kotlin.backend.common.serialization.*
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSerializer
|
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.ir.IrBuiltIns
|
import org.jetbrains.kotlin.ir.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsMapping
|
import org.jetbrains.kotlin.ir.backend.js.JsMapping
|
||||||
import org.jetbrains.kotlin.ir.backend.js.ic.IcModuleDeserializer
|
import org.jetbrains.kotlin.ir.backend.js.ic.IcModuleDeserializer
|
||||||
import org.jetbrains.kotlin.ir.backend.js.ic.IdSignatureSerializerWithForIC
|
|
||||||
import org.jetbrains.kotlin.ir.backend.js.ic.SerializedIcData
|
import org.jetbrains.kotlin.ir.backend.js.ic.SerializedIcData
|
||||||
import org.jetbrains.kotlin.ir.builders.TranslationPluginContext
|
import org.jetbrains.kotlin.ir.builders.TranslationPluginContext
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||||
@@ -35,14 +33,7 @@ class JsIrLinker(
|
|||||||
private val useGlobalSignatures: Boolean = false,
|
private val useGlobalSignatures: Boolean = false,
|
||||||
) : KotlinIrLinker(currentModule, messageLogger, builtIns, symbolTable, emptyList()) {
|
) : KotlinIrLinker(currentModule, messageLogger, builtIns, symbolTable, emptyList()) {
|
||||||
|
|
||||||
override val fakeOverrideBuilder = FakeOverrideBuilder(
|
override val fakeOverrideBuilder = FakeOverrideBuilder(this, symbolTable, JsManglerIr, IrTypeSystemContextImpl(builtIns))
|
||||||
this, symbolTable, JsManglerIr, IrTypeSystemContextImpl(builtIns), signatureSerializerFactory = { publicSignatureBuilder, table ->
|
|
||||||
if (useGlobalSignatures) IdSignatureSerializerWithForIC(publicSignatureBuilder, table) else IdSignatureSerializer(
|
|
||||||
publicSignatureBuilder,
|
|
||||||
table
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
override fun isBuiltInModule(moduleDescriptor: ModuleDescriptor): Boolean =
|
override fun isBuiltInModule(moduleDescriptor: ModuleDescriptor): Boolean =
|
||||||
moduleDescriptor === moduleDescriptor.builtIns.builtInsModule
|
moduleDescriptor === moduleDescriptor.builtIns.builtInsModule
|
||||||
|
|||||||
+1
-1
@@ -250,7 +250,7 @@ private fun buildFakeOverridesForLocalClasses(
|
|||||||
|
|
||||||
class PrePopulatedDeclarationTable(
|
class PrePopulatedDeclarationTable(
|
||||||
sig2symbol: Map<IdSignature, IrSymbol>
|
sig2symbol: Map<IdSignature, IrSymbol>
|
||||||
) : FakeOverrideDeclarationTable(JvmIrMangler, ::IdSignatureSerializer) {
|
) : FakeOverrideDeclarationTable(JvmIrMangler, signatureSerializerFactory = ::IdSignatureSerializer) {
|
||||||
private val symbol2Sig = sig2symbol.entries.associate { (x, y) -> y to x }
|
private val symbol2Sig = sig2symbol.entries.associate { (x, y) -> y to x }
|
||||||
|
|
||||||
override fun tryComputeBackendSpecificSignature(declaration: IrDeclaration): IdSignature? {
|
override fun tryComputeBackendSpecificSignature(declaration: IrDeclaration): IdSignature? {
|
||||||
|
|||||||
Reference in New Issue
Block a user