[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:
committed by
Space Team
parent
a5e5e093c3
commit
505edb9746
@@ -467,6 +467,10 @@ class IrBuiltInsOverFir(
|
|||||||
}.toMap()
|
}.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) {
|
override fun getKPropertyClass(mutable: Boolean, n: Int): IrClassSymbol = when (n) {
|
||||||
0 -> if (mutable) kMutableProperty0Class else kProperty0Class
|
0 -> if (mutable) kMutableProperty0Class else kProperty0Class
|
||||||
1 -> if (mutable) kMutableProperty1Class else kProperty1Class
|
1 -> if (mutable) kMutableProperty1Class else kProperty1Class
|
||||||
|
|||||||
+6
@@ -398,6 +398,12 @@ class IrBuiltInsOverDescriptors(
|
|||||||
if (array == null) null else unsignedType to array
|
if (array == null) null else unsignedType to array
|
||||||
}.toMap()
|
}.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 lessFunByOperandType = primitiveIrTypesWithComparisons.defineComparisonOperatorForEachIrType(BuiltInOperatorNames.LESS)
|
||||||
override val lessOrEqualFunByOperandType =
|
override val lessOrEqualFunByOperandType =
|
||||||
primitiveIrTypesWithComparisons.defineComparisonOperatorForEachIrType(BuiltInOperatorNames.LESS_OR_EQUAL)
|
primitiveIrTypesWithComparisons.defineComparisonOperatorForEachIrType(BuiltInOperatorNames.LESS_OR_EQUAL)
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ abstract class IrBuiltIns {
|
|||||||
abstract val primitiveArrayForType: Map<IrType?, IrClassSymbol>
|
abstract val primitiveArrayForType: Map<IrType?, IrClassSymbol>
|
||||||
|
|
||||||
abstract val unsignedTypesToUnsignedArrays: Map<UnsignedType, IrClassSymbol>
|
abstract val unsignedTypesToUnsignedArrays: Map<UnsignedType, IrClassSymbol>
|
||||||
|
abstract val unsignedArraysElementTypes: Map<IrClassSymbol, IrType?>
|
||||||
|
|
||||||
abstract val lessFunByOperandType: Map<IrClassifierSymbol, IrSimpleFunctionSymbol>
|
abstract val lessFunByOperandType: Map<IrClassifierSymbol, IrSimpleFunctionSymbol>
|
||||||
abstract val lessOrEqualFunByOperandType: Map<IrClassifierSymbol, IrSimpleFunctionSymbol>
|
abstract val lessOrEqualFunByOperandType: Map<IrClassifierSymbol, IrSimpleFunctionSymbol>
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ fun IrType.getArrayElementType(irBuiltIns: IrBuiltIns): IrType =
|
|||||||
} else {
|
} else {
|
||||||
val classifier = this.classOrNull!!
|
val classifier = this.classOrNull!!
|
||||||
irBuiltIns.primitiveArrayElementTypes[classifier]
|
irBuiltIns.primitiveArrayElementTypes[classifier]
|
||||||
|
?: irBuiltIns.unsignedArraysElementTypes[classifier]
|
||||||
?: throw AssertionError("Primitive array expected: $classifier")
|
?: throw AssertionError("Primitive array expected: $classifier")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
// !LANGUAGE: +InlineClasses
|
// !LANGUAGE: +InlineClasses
|
||||||
// WITH_STDLIB
|
// 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(
|
annotation class Ann(
|
||||||
val u: UInt,
|
val u: UInt,
|
||||||
val uba: UByteArray,
|
val uba: UByteArray,
|
||||||
|
|||||||
Reference in New Issue
Block a user