Fix array element processing
This commit is contained in:
@@ -24,9 +24,10 @@ import org.jetbrains.org.objectweb.asm.Type
|
|||||||
|
|
||||||
class ArrayGet : IntrinsicMethod() {
|
class ArrayGet : IntrinsicMethod() {
|
||||||
override fun toCallable(expression: IrMemberAccessExpression, signature: JvmMethodSignature, context: JvmBackendContext): IrIntrinsicFunction {
|
override fun toCallable(expression: IrMemberAccessExpression, signature: JvmMethodSignature, context: JvmBackendContext): IrIntrinsicFunction {
|
||||||
val type = AsmUtil.correctElementType(calcReceiverType(expression, context))
|
val arrayType = calcReceiverType(expression, context)
|
||||||
return IrIntrinsicFunction.create(expression, signature, context, listOf(calcReceiverType(expression, context), Type.INT_TYPE)) {
|
val elementType = AsmUtil.correctElementType(arrayType)
|
||||||
it.aload(type)
|
return IrIntrinsicFunction.create(expression, signature.newReturnType(elementType), context, listOf(arrayType, Type.INT_TYPE)) {
|
||||||
|
it.aload(elementType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-18
@@ -17,30 +17,18 @@
|
|||||||
package org.jetbrains.kotlin.backend.jvm.intrinsics
|
package org.jetbrains.kotlin.backend.jvm.intrinsics
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||||
|
import org.jetbrains.kotlin.codegen.AsmUtil
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
||||||
|
import org.jetbrains.org.objectweb.asm.Type
|
||||||
|
|
||||||
class ArraySet : IntrinsicMethod() {
|
class ArraySet : IntrinsicMethod() {
|
||||||
|
|
||||||
/*TODO return type, types*/
|
|
||||||
override fun toCallable(expression: IrMemberAccessExpression, signature: JvmMethodSignature, context: JvmBackendContext): IrIntrinsicFunction {
|
override fun toCallable(expression: IrMemberAccessExpression, signature: JvmMethodSignature, context: JvmBackendContext): IrIntrinsicFunction {
|
||||||
val type = expressionType(expression.dispatchReceiver!!, context)
|
val arrayType = expressionType(expression.dispatchReceiver!!, context)
|
||||||
return IrIntrinsicFunction.create(expression, signature, context) {
|
val elementType = AsmUtil.correctElementType(arrayType)
|
||||||
it.astore(signature.valueParameters.last().asmType)
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user