[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(
|
+irInvoke(
|
||||||
null,
|
null,
|
||||||
throwMissedFieldExceptionArrayFunc!!,
|
throwMissedFieldExceptionArrayFunc!!,
|
||||||
createPrimitiveArrayOfExpression(compilerContext.irBuiltIns.intType, goldenMaskList.indices.map { irGet(seenVars[it]) }),
|
createIntArrayOfExpression(goldenMaskList.indices.map { irGet(seenVars[it]) }),
|
||||||
createPrimitiveArrayOfExpression(compilerContext.irBuiltIns.intType, goldenMaskList.map { irInt(it) }),
|
createIntArrayOfExpression(goldenMaskList.map { irInt(it) }),
|
||||||
serialDescriptor,
|
serialDescriptor,
|
||||||
typeHint = compilerContext.irBuiltIns.unitType
|
typeHint = compilerContext.irBuiltIns.unitType
|
||||||
)
|
)
|
||||||
|
|||||||
+5
-9
@@ -214,15 +214,11 @@ interface IrBuilderWithPluginContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun IrBuilderWithScope.createPrimitiveArrayOfExpression(
|
fun IrBuilderWithScope.createIntArrayOfExpression(arrayElements: List<IrExpression>): IrExpression {
|
||||||
elementPrimitiveType: IrType,
|
val elementType = compilerContext.irBuiltIns.intType
|
||||||
arrayElements: List<IrExpression>
|
val arrayType = compilerContext.intArrayOfFunctionSymbol.owner.returnType
|
||||||
): IrExpression {
|
val arg0 = IrVarargImpl(startOffset, endOffset, arrayType, elementType, arrayElements)
|
||||||
val arrayType = compilerContext.irBuiltIns.primitiveArrayForType.getValue(elementPrimitiveType).defaultType
|
return irCall(compilerContext.intArrayOfFunctionSymbol, arrayType).apply {
|
||||||
val arg0 = IrVarargImpl(startOffset, endOffset, arrayType, elementPrimitiveType, arrayElements)
|
|
||||||
val typeArguments = listOf(elementPrimitiveType)
|
|
||||||
|
|
||||||
return irCall(compilerContext.irBuiltIns.arrayOf, arrayType, typeArguments = typeArguments).apply {
|
|
||||||
putValueArgument(0, arg0)
|
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.IrElement
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||||
import org.jetbrains.kotlin.ir.util.defaultType
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
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.visitors.IrElementTransformerVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
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>()
|
internal val arrayValueGetter = irBuiltIns.arrayClass.owner.declarations.filterIsInstance<IrSimpleFunction>()
|
||||||
.single { it.name.asString() == "get" }
|
.single { it.name.asString() == "get" }
|
||||||
|
|
||||||
|
internal val intArrayOfFunctionSymbol =
|
||||||
|
referenceFunctions(CallableId(StandardNames.BUILT_INS_PACKAGE_FQ_NAME, Name.identifier("intArrayOf"))).first()
|
||||||
|
|
||||||
// Kotlin stdlib declarations
|
// Kotlin stdlib declarations
|
||||||
internal val jvmFieldClassSymbol = referenceClass(StandardClassIds.Annotations.JvmField)!!
|
internal val jvmFieldClassSymbol = referenceClass(StandardClassIds.Annotations.JvmField)!!
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user