Native: fix bug in KType support affecting only stdlib
Don't use IrClass.declarations to find enum entries during lowerings, because this enum might already be lowered and thus have all entries removed.
This commit is contained in:
+10
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.COROUTINE_SUSPENDED_NAME
|
||||
import org.jetbrains.kotlin.backend.common.ir.Ir
|
||||
import org.jetbrains.kotlin.backend.common.ir.Symbols
|
||||
import org.jetbrains.kotlin.backend.konan.*
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.enumEntries
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.kotlinNativeInternal
|
||||
import org.jetbrains.kotlin.backend.konan.llvm.findMainEntryPoint
|
||||
import org.jetbrains.kotlin.backend.konan.lower.TestProcessor
|
||||
@@ -23,6 +24,7 @@ import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
@@ -455,6 +457,14 @@ internal class KonanSymbols(
|
||||
|
||||
val kType = symbolTable.referenceClass(context.reflectionTypes.kType)
|
||||
val kVariance = symbolTable.referenceClass(context.reflectionTypes.kVariance)
|
||||
val kVarianceIn = getKVarianceEnumEntry("IN")
|
||||
val kVarianceOut = getKVarianceEnumEntry("OUT")
|
||||
val kVarianceInvariant = getKVarianceEnumEntry("INVARIANT")
|
||||
|
||||
private fun getKVarianceEnumEntry(name: String): IrEnumEntrySymbol {
|
||||
val descriptor = context.reflectionTypes.kVariance.enumEntries.single { it.name.asString() == name }
|
||||
return symbolTable.referenceEnumEntry(descriptor)
|
||||
}
|
||||
|
||||
val getClassTypeInfo = internalFunction("getClassTypeInfo")
|
||||
val getObjectTypeInfo = internalFunction("getObjectTypeInfo")
|
||||
|
||||
+5
-10
@@ -126,20 +126,15 @@ internal class KTypeGenerator(
|
||||
else -> parent.fqNameForIrSerialization.asString()
|
||||
}
|
||||
|
||||
private val Variance.kVarianceName: String
|
||||
get() = when (this) {
|
||||
Variance.INVARIANT -> "INVARIANT"
|
||||
Variance.IN_VARIANCE -> "IN"
|
||||
Variance.OUT_VARIANCE -> "OUT"
|
||||
}
|
||||
|
||||
private fun IrBuilderWithScope.irKVariance(variance: Variance) =
|
||||
IrGetEnumValueImpl(
|
||||
startOffset, endOffset,
|
||||
symbols.kVariance.defaultType,
|
||||
symbols.kVariance.owner.declarations
|
||||
.filterIsInstance<IrEnumEntry>()
|
||||
.single { it.name.asString() == variance.kVarianceName }.symbol
|
||||
when (variance) {
|
||||
Variance.INVARIANT -> symbols.kVarianceInvariant
|
||||
Variance.IN_VARIANCE -> symbols.kVarianceIn
|
||||
Variance.OUT_VARIANCE -> symbols.kVarianceOut
|
||||
}
|
||||
)
|
||||
|
||||
private fun <T> IrBuilderWithScope.irKTypeLikeList(
|
||||
|
||||
Reference in New Issue
Block a user