JVM IR: remove unneeded usages of MethodSignatureMapper.mapToCallableMethod

This commit is contained in:
Alexander Udalov
2019-08-23 17:08:49 +02:00
parent 0f1a15daf1
commit bf40b72451
3 changed files with 14 additions and 10 deletions
@@ -957,9 +957,6 @@ class ExpressionCodegen(
return classReference.onStack
}
private fun resolveToCallable(irCall: IrFunctionAccessExpression, isSuper: Boolean): IrCallableMethod =
methodSignatureMapper.mapToCallableMethod(irCall, isSuper)
private fun getOrCreateCallGenerator(element: IrFunctionAccessExpression, data: BlockInfo): IrCallGenerator {
if (!element.symbol.owner.isInlineFunctionCall(context) ||
classCodegen.irClass.fileParent.fileEntry is MultifileFacadeFileEntry
@@ -17,8 +17,10 @@
package org.jetbrains.kotlin.backend.jvm.intrinsics
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
import org.jetbrains.kotlin.backend.jvm.codegen.mapClass
import org.jetbrains.kotlin.codegen.AsmUtil
import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
object ArrayIterator : IntrinsicMethod() {
@@ -27,11 +29,11 @@ object ArrayIterator : IntrinsicMethod() {
signature: JvmMethodSignature,
context: JvmBackendContext
): IrIntrinsicFunction {
val method = context.methodSignatureMapper.mapToCallableMethod(expression, false)
return IrIntrinsicFunction.create(expression, signature, context, method.owner) {
val methodSignature = "(${method.owner.descriptor})${method.asmMethod.returnType.descriptor}"
val owner = context.typeMapper.mapClass(expression.symbol.owner.parentAsClass)
return IrIntrinsicFunction.create(expression, signature, context, owner) {
val methodSignature = "(${owner.descriptor})${signature.returnType.descriptor}"
val intrinsicOwner =
if (AsmUtil.isPrimitive(method.owner.elementType))
if (AsmUtil.isPrimitive(owner.elementType))
"kotlin/jvm/internal/ArrayIteratorsKt"
else
"kotlin/jvm/internal/ArrayIteratorKt"
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.backend.jvm.intrinsics
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
import org.jetbrains.kotlin.backend.jvm.codegen.BlockInfo
import org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen
import org.jetbrains.kotlin.backend.jvm.codegen.mapClass
import org.jetbrains.kotlin.codegen.AsmUtil
import org.jetbrains.kotlin.codegen.Callable
import org.jetbrains.kotlin.codegen.StackValue
@@ -16,6 +17,7 @@ import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.util.dump
import org.jetbrains.kotlin.ir.util.isVararg
import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.ir.util.substitute
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
import org.jetbrains.kotlin.types.KotlinType
@@ -138,10 +140,13 @@ open class IrIntrinsicFunction(
}
fun IrFunctionAccessExpression.argTypes(context: JvmBackendContext): ArrayList<Type> {
val callableMethod = context.methodSignatureMapper.mapToCallableMethod(this, false)
val callee = symbol.owner
val signature = context.methodSignatureMapper.mapSignatureSkipGeneric(callee)
return arrayListOf<Type>().apply {
callableMethod.dispatchReceiverType?.let { add(it) }
addAll(callableMethod.asmMethod.argumentTypes)
if (dispatchReceiver != null) {
add(context.typeMapper.mapClass(callee.parentAsClass))
}
addAll(signature.asmMethod.argumentTypes)
}
}