Native: fix using nested expect enum entry in a default argument
^KT-51156 Fixed
This commit is contained in:
committed by
Space
parent
0a85f0dd34
commit
62c1bd0044
+11
@@ -31,10 +31,16 @@ class ModuleIndex(val module: IrModuleFragment) {
|
||||
*/
|
||||
val properties: Map<PropertyDescriptor, IrProperty>
|
||||
|
||||
/**
|
||||
* Contains all enum entries declared in [module]
|
||||
*/
|
||||
val enumEntries: Map<ClassDescriptor, IrEnumEntry>
|
||||
|
||||
init {
|
||||
classes = mutableMapOf()
|
||||
functions = mutableMapOf()
|
||||
properties = mutableMapOf()
|
||||
enumEntries = mutableMapOf()
|
||||
|
||||
module.acceptVoid(object : IrElementVisitorVoid {
|
||||
override fun visitElement(element: IrElement) {
|
||||
@@ -56,6 +62,11 @@ class ModuleIndex(val module: IrModuleFragment) {
|
||||
super.visitProperty(declaration)
|
||||
properties[declaration.descriptor] = declaration
|
||||
}
|
||||
|
||||
override fun visitEnumEntry(declaration: IrEnumEntry) {
|
||||
super.visitEnumEntry(declaration)
|
||||
enumEntries[declaration.descriptor] = declaration
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
+10
-4
@@ -16,10 +16,7 @@ import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.*
|
||||
import org.jetbrains.kotlin.ir.util.DeepCopyIrTreeWithSymbols
|
||||
import org.jetbrains.kotlin.ir.util.DeepCopySymbolRemapper
|
||||
import org.jetbrains.kotlin.ir.util.DeepCopyTypeRemapper
|
||||
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||
@@ -101,6 +98,9 @@ internal class ExpectToActualDefaultValueCopier(private val irModule: IrModuleFr
|
||||
private fun IrClass.findActualForExpected(): IrClass =
|
||||
moduleIndex.classes[descriptor.findActualForExpect()]!!
|
||||
|
||||
private fun IrEnumEntry.findActualForExpected(): IrEnumEntry =
|
||||
moduleIndex.enumEntries[descriptor.findActualForExpect()]!!
|
||||
|
||||
private inline fun <reified T : MemberDescriptor> T.findActualForExpect(): T {
|
||||
if (!this.isExpect) error(this)
|
||||
return (findCompatibleActualsForExpected(module).singleOrNull() ?: error(this)) as T
|
||||
@@ -156,6 +156,12 @@ internal class ExpectToActualDefaultValueCopier(private val irModule: IrModuleFr
|
||||
else
|
||||
super.getReferencedProperty(symbol)
|
||||
|
||||
override fun getReferencedEnumEntry(symbol: IrEnumEntrySymbol): IrEnumEntrySymbol =
|
||||
if (symbol.descriptor.isExpect)
|
||||
symbol.owner.findActualForExpected().symbol
|
||||
else
|
||||
super.getReferencedEnumEntry(symbol)
|
||||
|
||||
override fun getReferencedValue(symbol: IrValueSymbol) =
|
||||
remapExpectValue(symbol)?.symbol ?: super.getReferencedValue(symbol)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user