FIR2IR: refactor 'getArrayType' using standard class ids
This commit is contained in:
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.backend
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
|
||||||
@@ -16,7 +17,6 @@ import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
|||||||
import org.jetbrains.kotlin.ir.types.impl.IrStarProjectionImpl
|
import org.jetbrains.kotlin.ir.types.impl.IrStarProjectionImpl
|
||||||
import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection
|
import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
|
||||||
class Fir2IrTypeConverter(
|
class Fir2IrTypeConverter(
|
||||||
@@ -94,18 +94,21 @@ class Fir2IrTypeConverter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getArrayType(classId: ClassId?): IrClassifierSymbol? {
|
private fun getArrayType(classId: ClassId?): IrClassifierSymbol? {
|
||||||
val irType = when (classId) {
|
if (classId == StandardClassIds.Array) {
|
||||||
ClassId(FqName("kotlin"), FqName("Array"), false) -> return irBuiltIns.arrayClass
|
return irBuiltIns.arrayClass
|
||||||
ClassId(FqName("kotlin"), FqName("BooleanArray"), false) -> irBuiltIns.booleanType
|
|
||||||
ClassId(FqName("kotlin"), FqName("ByteArray"), false) -> irBuiltIns.byteType
|
|
||||||
ClassId(FqName("kotlin"), FqName("CharArray"), false) -> irBuiltIns.charType
|
|
||||||
ClassId(FqName("kotlin"), FqName("DoubleArray"), false) -> irBuiltIns.doubleType
|
|
||||||
ClassId(FqName("kotlin"), FqName("FloatArray"), false) -> irBuiltIns.floatType
|
|
||||||
ClassId(FqName("kotlin"), FqName("IntArray"), false) -> irBuiltIns.intType
|
|
||||||
ClassId(FqName("kotlin"), FqName("LongArray"), false) -> irBuiltIns.longType
|
|
||||||
ClassId(FqName("kotlin"), FqName("ShortArray"), false) -> irBuiltIns.shortType
|
|
||||||
else -> null
|
|
||||||
}
|
}
|
||||||
return irType?.let { irBuiltIns.primitiveArrayForType.getValue(it) }
|
val primitiveId = StandardClassIds.elementTypeByPrimitiveArrayType[classId] ?: return null
|
||||||
|
val irType = when (primitiveId) {
|
||||||
|
StandardClassIds.Boolean -> irBuiltIns.booleanType
|
||||||
|
StandardClassIds.Byte -> irBuiltIns.byteType
|
||||||
|
StandardClassIds.Char -> irBuiltIns.charType
|
||||||
|
StandardClassIds.Double -> irBuiltIns.doubleType
|
||||||
|
StandardClassIds.Float -> irBuiltIns.floatType
|
||||||
|
StandardClassIds.Int -> irBuiltIns.intType
|
||||||
|
StandardClassIds.Long -> irBuiltIns.longType
|
||||||
|
StandardClassIds.Short -> irBuiltIns.shortType
|
||||||
|
else -> throw AssertionError("Strange primitiveId $primitiveId from array: $classId")
|
||||||
|
}
|
||||||
|
return irBuiltIns.primitiveArrayForType.getValue(irType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user