JVM IR: Fix spread operator on unsigned array type

This commit is contained in:
Steven Schäfer
2019-09-20 13:30:26 +02:00
committed by Alexander Udalov
parent 1a50a3cbb1
commit f40f9611c3
2 changed files with 2 additions and 3 deletions
@@ -106,7 +106,7 @@ class IrArrayBuilder(val builder: JvmIrBuilder, val arrayType: IrType) {
fun getSize() = irCall(size).apply { dispatchReceiver = irGet(spreadVar) } fun getSize() = irCall(size).apply { dispatchReceiver = irGet(spreadVar) }
val result = irTemporary(newArray(getSize())) val result = irTemporary(newArray(getSize()))
+irCall(builder.irSymbols.systemArraycopy).apply { +irCall(builder.irSymbols.systemArraycopy).apply {
putValueArgument(0, irGet(spreadVar)) putValueArgument(0, coerce(irGet(spreadVar), unwrappedArrayType))
putValueArgument(1, irInt(0)) putValueArgument(1, irInt(0))
putValueArgument(2, irGet(result)) putValueArgument(2, irGet(result))
putValueArgument(3, irInt(0)) putValueArgument(3, irInt(0))
@@ -135,7 +135,7 @@ class IrArrayBuilder(val builder: JvmIrBuilder, val arrayType: IrType) {
for (element in elements) { for (element in elements) {
+irCall(if (element.isSpread) addSpread else addElement).apply { +irCall(if (element.isSpread) addSpread else addElement).apply {
dispatchReceiver = irGet(spreadBuilderVar) dispatchReceiver = irGet(spreadBuilderVar)
putValueArgument(0, if (element.isSpread) element.expression else coerce(element.expression, elementType)) putValueArgument(0, coerce(element.expression, if (element.isSpread) unwrappedArrayType else elementType))
} }
} }
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// WITH_RUNTIME // WITH_RUNTIME
// KJS_WITH_FULL_RUNTIME // KJS_WITH_FULL_RUNTIME