[FIR2IR] KT-57211: Support unsigned arrayOf-s in fir2ir

^KT-57211 Fixed

Merge-request: KT-MR-9294
Merged-by: Nikolay Lunyak <Nikolay.Lunyak@jetbrains.com>
This commit is contained in:
Nikolay Lunyak
2023-03-22 13:10:17 +00:00
committed by Space Team
parent a5e5e093c3
commit 505edb9746
5 changed files with 12 additions and 3 deletions
@@ -467,6 +467,10 @@ class IrBuiltInsOverFir(
}.toMap()
}
override val unsignedArraysElementTypes: Map<IrClassSymbol, IrType?> by lazy {
unsignedTypesToUnsignedArrays.map { (k,v) -> v to referenceClassByClassId(k.classId)?.owner?.defaultType }.toMap()
}
override fun getKPropertyClass(mutable: Boolean, n: Int): IrClassSymbol = when (n) {
0 -> if (mutable) kMutableProperty0Class else kProperty0Class
1 -> if (mutable) kMutableProperty1Class else kProperty1Class
@@ -398,6 +398,12 @@ class IrBuiltInsOverDescriptors(
if (array == null) null else unsignedType to array
}.toMap()
override val unsignedArraysElementTypes: Map<IrClassSymbol, IrType?> by lazy {
unsignedTypesToUnsignedArrays.map { (k, v) ->
v to builtIns.builtInsModule.findClassAcrossModuleDependencies(k.classId)?.defaultType?.toIrType()
}.toMap()
}
override val lessFunByOperandType = primitiveIrTypesWithComparisons.defineComparisonOperatorForEachIrType(BuiltInOperatorNames.LESS)
override val lessOrEqualFunByOperandType =
primitiveIrTypesWithComparisons.defineComparisonOperatorForEachIrType(BuiltInOperatorNames.LESS_OR_EQUAL)
@@ -115,6 +115,7 @@ abstract class IrBuiltIns {
abstract val primitiveArrayForType: Map<IrType?, IrClassSymbol>
abstract val unsignedTypesToUnsignedArrays: Map<UnsignedType, IrClassSymbol>
abstract val unsignedArraysElementTypes: Map<IrClassSymbol, IrType?>
abstract val lessFunByOperandType: Map<IrClassifierSymbol, IrSimpleFunctionSymbol>
abstract val lessOrEqualFunByOperandType: Map<IrClassifierSymbol, IrSimpleFunctionSymbol>
@@ -67,6 +67,7 @@ fun IrType.getArrayElementType(irBuiltIns: IrBuiltIns): IrType =
} else {
val classifier = this.classOrNull!!
irBuiltIns.primitiveArrayElementTypes[classifier]
?: irBuiltIns.unsignedArraysElementTypes[classifier]
?: throw AssertionError("Primitive array expected: $classifier")
}
@@ -1,9 +1,6 @@
// !LANGUAGE: +InlineClasses
// WITH_STDLIB
// IGNORE_BACKEND_K2: JVM_IR
// FIR status: KT-57211 K2: incorrect "error: an annotation argument must be a compile-time constant" on unsigned array in annotation argument
annotation class Ann(
val u: UInt,
val uba: UByteArray,