IR: Refactor primitive arrays handling in the new IrBuiltIns

for better compatibility e.g. with native
This commit is contained in:
Ilya Chernikov
2021-06-29 11:51:27 +02:00
committed by TeamCityServer
parent 3b2bb2ba9f
commit 48a3c64901
10 changed files with 47 additions and 26 deletions
@@ -150,11 +150,11 @@ abstract class Symbols<out T : CommonBackendContext>(
val doubleArrayType get() = doubleArray.owner.defaultType
val booleanArrayType get() = booleanArray.owner.defaultType
val primitiveArrays get() = irBuiltIns.primitiveArrays
val primitiveArrays get() = irBuiltIns.primitiveTypesToPrimitiveArrays
val primitiveArraysToPrimitiveTypes get() = irBuiltIns.primitiveArraysToPrimitiveTypes
val unsignedArrays get() = irBuiltIns.unsignedArrays
val unsignedArrays get() = irBuiltIns.unsignedTypesToUnsignedArrays
val arrays = primitiveArrays + unsignedArrays + array
val arrays = primitiveArrays.values + unsignedArrays.values + array
val collection get() = irBuiltIns.collectionClass
val set get() = irBuiltIns.setClass
@@ -50,7 +50,7 @@ private class ArrayConstructorTransformer(
return when {
irConstructor.valueParameters.size != 2 -> null
clazz == context.irBuiltIns.arrayClass -> context.ir.symbols.arrayOfNulls // Array<T> has no unary constructor: it can only exist for Array<T?>
context.irBuiltIns.primitiveArrays.contains(clazz) -> clazz.constructors.single { it.owner.valueParameters.size == 1 }
context.irBuiltIns.primitiveArraysToPrimitiveTypes.contains(clazz) -> clazz.constructors.single { it.owner.valueParameters.size == 1 }
else -> null
}
}