diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/BaseIrGenerator.kt b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/BaseIrGenerator.kt index bd25e6e4ea3..47b4fdb8821 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/BaseIrGenerator.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/BaseIrGenerator.kt @@ -177,8 +177,8 @@ abstract class BaseIrGenerator(private val currentClass: IrClass, final override +irInvoke( null, throwMissedFieldExceptionArrayFunc!!, - createPrimitiveArrayOfExpression(compilerContext.irBuiltIns.intType, goldenMaskList.indices.map { irGet(seenVars[it]) }), - createPrimitiveArrayOfExpression(compilerContext.irBuiltIns.intType, goldenMaskList.map { irInt(it) }), + createIntArrayOfExpression(goldenMaskList.indices.map { irGet(seenVars[it]) }), + createIntArrayOfExpression(goldenMaskList.map { irInt(it) }), serialDescriptor, typeHint = compilerContext.irBuiltIns.unitType ) diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/IrBuilderWithPluginContext.kt b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/IrBuilderWithPluginContext.kt index 74784c841e4..26188ba6cde 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/IrBuilderWithPluginContext.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/IrBuilderWithPluginContext.kt @@ -214,15 +214,11 @@ interface IrBuilderWithPluginContext { } } - fun IrBuilderWithScope.createPrimitiveArrayOfExpression( - elementPrimitiveType: IrType, - arrayElements: List - ): IrExpression { - val arrayType = compilerContext.irBuiltIns.primitiveArrayForType.getValue(elementPrimitiveType).defaultType - val arg0 = IrVarargImpl(startOffset, endOffset, arrayType, elementPrimitiveType, arrayElements) - val typeArguments = listOf(elementPrimitiveType) - - return irCall(compilerContext.irBuiltIns.arrayOf, arrayType, typeArguments = typeArguments).apply { + fun IrBuilderWithScope.createIntArrayOfExpression(arrayElements: List): IrExpression { + val elementType = compilerContext.irBuiltIns.intType + val arrayType = compilerContext.intArrayOfFunctionSymbol.owner.returnType + val arg0 = IrVarargImpl(startOffset, endOffset, arrayType, elementType, arrayElements) + return irCall(compilerContext.intArrayOfFunctionSymbol, arrayType).apply { putValueArgument(0, arg0) } } diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationLoweringExtension.kt b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationLoweringExtension.kt index 883e6ece1bd..c393f6d8c3a 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationLoweringExtension.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationLoweringExtension.kt @@ -18,10 +18,7 @@ import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.symbols.IrClassSymbol -import org.jetbrains.kotlin.ir.util.defaultType -import org.jetbrains.kotlin.ir.util.findDeclaration -import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable -import org.jetbrains.kotlin.ir.util.getPropertyGetter +import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid @@ -65,6 +62,9 @@ class SerializationPluginContext(baseContext: IrPluginContext, val metadataPlugi internal val arrayValueGetter = irBuiltIns.arrayClass.owner.declarations.filterIsInstance() .single { it.name.asString() == "get" } + internal val intArrayOfFunctionSymbol = + referenceFunctions(CallableId(StandardNames.BUILT_INS_PACKAGE_FQ_NAME, Name.identifier("intArrayOf"))).first() + // Kotlin stdlib declarations internal val jvmFieldClassSymbol = referenceClass(StandardClassIds.Annotations.JvmField)!!