[FIR2IR] Temporary fix of createIrEnumEntry
Check if a bound entry with the same signature is already exist
This commit is contained in:
committed by
Space Team
parent
ecc81098a6
commit
c9a8f433fb
@@ -535,6 +535,11 @@ class Fir2IrClassifierStorage(
|
|||||||
): IrEnumEntry {
|
): IrEnumEntry {
|
||||||
return enumEntry.convertWithOffsets { startOffset, endOffset ->
|
return enumEntry.convertWithOffsets { startOffset, endOffset ->
|
||||||
val signature = signatureComposer.composeSignature(enumEntry, forceTopLevelPrivate = forceTopLevelPrivate)
|
val signature = signatureComposer.composeSignature(enumEntry, forceTopLevelPrivate = forceTopLevelPrivate)
|
||||||
|
if (signature != null) {
|
||||||
|
// Compilation of kotlinx-serialization-protobuf fails with "already bound" exception if this check is removed
|
||||||
|
// TODO: get rid of this check
|
||||||
|
symbolTable.referenceEnumEntryIfAny(signature)?.let { if (it.isBound) return@convertWithOffsets it.owner }
|
||||||
|
}
|
||||||
val result = declareIrEnumEntry(signature) { symbol ->
|
val result = declareIrEnumEntry(signature) { symbol ->
|
||||||
val origin = enumEntry.computeIrOrigin(predefinedOrigin)
|
val origin = enumEntry.computeIrOrigin(predefinedOrigin)
|
||||||
irFactory.createEnumEntry(
|
irFactory.createEnumEntry(
|
||||||
|
|||||||
@@ -664,6 +664,10 @@ open class SymbolTable(
|
|||||||
else IrEnumEntrySymbolImpl()
|
else IrEnumEntrySymbolImpl()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun referenceEnumEntryIfAny(sig: IdSignature): IrEnumEntrySymbol? {
|
||||||
|
return enumEntrySymbolTable.get(sig)
|
||||||
|
}
|
||||||
|
|
||||||
val unboundEnumEntries: Set<IrEnumEntrySymbol> get() = enumEntrySymbolTable.unboundSymbols
|
val unboundEnumEntries: Set<IrEnumEntrySymbol> get() = enumEntrySymbolTable.unboundSymbols
|
||||||
|
|
||||||
private fun createFieldSymbol(descriptor: PropertyDescriptor, signature: IdSignature?): IrFieldSymbol =
|
private fun createFieldSymbol(descriptor: PropertyDescriptor, signature: IdSignature?): IrFieldSymbol =
|
||||||
|
|||||||
Reference in New Issue
Block a user