From 5dfe77b7c3bd72610f3f181f4c3f95701577dec1 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Fri, 2 Jun 2017 10:33:02 +0200 Subject: [PATCH] Fix array element processing --- .../kotlin/backend/jvm/intrinsics/ArrayGet.kt | 7 +++--- .../kotlin/backend/jvm/intrinsics/ArraySet.kt | 24 +++++-------------- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/ArrayGet.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/ArrayGet.kt index 9b043ce76c4..2f785fca3b3 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/ArrayGet.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/ArrayGet.kt @@ -24,9 +24,10 @@ import org.jetbrains.org.objectweb.asm.Type class ArrayGet : IntrinsicMethod() { override fun toCallable(expression: IrMemberAccessExpression, signature: JvmMethodSignature, context: JvmBackendContext): IrIntrinsicFunction { - val type = AsmUtil.correctElementType(calcReceiverType(expression, context)) - return IrIntrinsicFunction.create(expression, signature, context, listOf(calcReceiverType(expression, context), Type.INT_TYPE)) { - it.aload(type) + val arrayType = calcReceiverType(expression, context) + val elementType = AsmUtil.correctElementType(arrayType) + return IrIntrinsicFunction.create(expression, signature.newReturnType(elementType), context, listOf(arrayType, Type.INT_TYPE)) { + it.aload(elementType) } } } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/ArraySet.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/ArraySet.kt index a477a58f610..b166ac240b7 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/ArraySet.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/ArraySet.kt @@ -17,30 +17,18 @@ package org.jetbrains.kotlin.backend.jvm.intrinsics import org.jetbrains.kotlin.backend.jvm.JvmBackendContext +import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature +import org.jetbrains.org.objectweb.asm.Type class ArraySet : IntrinsicMethod() { - /*TODO return type, types*/ override fun toCallable(expression: IrMemberAccessExpression, signature: JvmMethodSignature, context: JvmBackendContext): IrIntrinsicFunction { - val type = expressionType(expression.dispatchReceiver!!, context) - return IrIntrinsicFunction.create(expression, signature, context) { - it.astore(signature.valueParameters.last().asmType) + val arrayType = expressionType(expression.dispatchReceiver!!, context) + val elementType = AsmUtil.correctElementType(arrayType) + return IrIntrinsicFunction.create(expression, signature, context, listOf(arrayType, Type.INT_TYPE, elementType)) { + it.astore(elementType) } } - - /*override fun toCallable(method: CallableMethod): Callable { - val type = correctElementType(method.dispatchReceiverType) - return object : IntrinsicCallable( - Type.VOID_TYPE, - listOf(Type.INT_TYPE, type), - method.dispatchReceiverType, - method.extensionReceiverType - ) { - override fun invokeIntrinsic(v: InstructionAdapter) { - v.astore(type) - } - } - }*/ }