[Serialization] Fix invalid int array creation
This commit is contained in:
committed by
Space Team
parent
8cb1fca299
commit
81ceb856bb
+2
-2
@@ -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
|
||||
)
|
||||
|
||||
+5
-9
@@ -214,15 +214,11 @@ interface IrBuilderWithPluginContext {
|
||||
}
|
||||
}
|
||||
|
||||
fun IrBuilderWithScope.createPrimitiveArrayOfExpression(
|
||||
elementPrimitiveType: IrType,
|
||||
arrayElements: List<IrExpression>
|
||||
): 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>): 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)
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -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<IrSimpleFunction>()
|
||||
.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)!!
|
||||
|
||||
|
||||
Reference in New Issue
Block a user