[K/N] Simplify enumsSupport
This commit is contained in:
committed by
Space Team
parent
bc8ccc496b
commit
27949bccf6
+13
-29
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.backend.konan.lower
|
package org.jetbrains.kotlin.backend.konan.lower
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.DefaultDelegateFactory
|
|
||||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||||
import org.jetbrains.kotlin.backend.common.getOrPut
|
import org.jetbrains.kotlin.backend.common.getOrPut
|
||||||
import org.jetbrains.kotlin.backend.common.lower.EnumWhenLowering
|
import org.jetbrains.kotlin.backend.common.lower.EnumWhenLowering
|
||||||
@@ -49,24 +48,6 @@ internal class EnumsSupport(
|
|||||||
private val enumValueGetters = mapping.enumValueGetters
|
private val enumValueGetters = mapping.enumValueGetters
|
||||||
private val enumEntriesMaps = mapping.enumEntriesMaps
|
private val enumEntriesMaps = mapping.enumEntriesMaps
|
||||||
|
|
||||||
private val valuesFunctions = DefaultDelegateFactory.newDeclarationToDeclarationMapping<IrClass, IrFunction>()
|
|
||||||
private val valueOfFunctions = DefaultDelegateFactory.newDeclarationToDeclarationMapping<IrClass, IrFunction>()
|
|
||||||
|
|
||||||
fun getValuesFunction(enumClass: IrClass) = valuesFunctions.getOrPut(enumClass) {
|
|
||||||
enumClass.simpleFunctions().single {
|
|
||||||
it.name == valuesFunctionName && it.dispatchReceiverParameter == null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fun saveValuesFunction(enumClass: IrClass) { getValuesFunction(enumClass) }
|
|
||||||
|
|
||||||
fun getValueOfFunction(enumClass: IrClass) = valueOfFunctions.getOrPut(enumClass) {
|
|
||||||
enumClass.simpleFunctions().single {
|
|
||||||
it.name == valueOfFunctionName && it.dispatchReceiverParameter == null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fun saveValueOfFunction(enumClass: IrClass) { getValueOfFunction(enumClass) }
|
|
||||||
|
|
||||||
|
|
||||||
fun enumEntriesMap(enumClass: IrClass): Map<Name, LoweredEnumEntryDescription> {
|
fun enumEntriesMap(enumClass: IrClass): Map<Name, LoweredEnumEntryDescription> {
|
||||||
require(enumClass.isEnumClass) { "Expected enum class but was: ${enumClass.render()}" }
|
require(enumClass.isEnumClass) { "Expected enum class but was: ${enumClass.render()}" }
|
||||||
return enumEntriesMaps.getOrPut(enumClass) {
|
return enumEntriesMaps.getOrPut(enumClass) {
|
||||||
@@ -101,11 +82,6 @@ internal class EnumsSupport(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
|
||||||
val valuesFunctionName = Name.identifier("values")
|
|
||||||
val valueOfFunctionName = Name.identifier("valueOf")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal object DECLARATION_ORIGIN_ENUM : IrDeclarationOriginImpl("ENUM")
|
internal object DECLARATION_ORIGIN_ENUM : IrDeclarationOriginImpl("ENUM")
|
||||||
@@ -154,9 +130,19 @@ internal class EnumUsageLowering(val context: Context) : IrElementTransformer<Ir
|
|||||||
require(irClass.kind == ClassKind.ENUM_CLASS)
|
require(irClass.kind == ClassKind.ENUM_CLASS)
|
||||||
|
|
||||||
return when (intrinsicType) {
|
return when (intrinsicType) {
|
||||||
IntrinsicType.ENUM_VALUES -> data.irCall(enumsSupport.getValuesFunction(irClass))
|
IntrinsicType.ENUM_VALUES -> {
|
||||||
IntrinsicType.ENUM_VALUE_OF -> data.irCall(enumsSupport.getValueOfFunction(irClass)).apply {
|
val function = irClass.simpleFunctions().single {
|
||||||
putValueArgument(0, expression.getValueArgument(0)!!)
|
it.name == Name.identifier("values") && it.dispatchReceiverParameter == null
|
||||||
|
}
|
||||||
|
data.irCall(function)
|
||||||
|
}
|
||||||
|
IntrinsicType.ENUM_VALUE_OF -> {
|
||||||
|
val function = irClass.simpleFunctions().single {
|
||||||
|
it.name == Name.identifier("valueOf") && it.dispatchReceiverParameter == null
|
||||||
|
}
|
||||||
|
data.irCall(function).apply {
|
||||||
|
putValueArgument(0, expression.getValueArgument(0)!!)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else -> TODO("Unsupported intrinsic type ${intrinsicType}")
|
else -> TODO("Unsupported intrinsic type ${intrinsicType}")
|
||||||
}
|
}
|
||||||
@@ -238,8 +224,6 @@ internal class EnumClassLowering(val context: Context) : FileLoweringPass {
|
|||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
enumsSupport.saveValuesFunction(irClass)
|
|
||||||
enumsSupport.saveValueOfFunction(irClass)
|
|
||||||
irClass.simpleFunctions().forEach { declaration ->
|
irClass.simpleFunctions().forEach { declaration ->
|
||||||
val body = declaration.body
|
val body = declaration.body
|
||||||
if (body is IrSyntheticBody) {
|
if (body is IrSyntheticBody) {
|
||||||
|
|||||||
Reference in New Issue
Block a user